API de liens courts et de codes QR
L’API REST de Krealo QR permet de créer des liens courts, de les lister, de modifier leur destination et de récupérer leur code QR depuis vos propres outils. Elle est réservée au forfait Pro, à 5,99 $ US par mois, taxes en sus. Vous générez un jeton personnel dans la page de votre compte et vous l’envoyez dans l’en-tête Authorization.
Référence des routes
| GET | /domains | api.op.listDomains |
| GET | /me | Le compte du jeton (courriel, forfait) |
| GET | /links | Liste vos liens (filtres dossier, étiquette, état ; curseur) |
| POST | /links | Crée un lien (url ; slug, titre et design facultatifs, logo compris) |
| POST | /links/bulk | Crée jusqu’à 100 liens, un résultat par élément |
| GET | /links/{slug} | Un lien avec ses statistiques |
| PATCH | /links/{slug} | Change la destination, le titre, l’état ou le design du QR (couleurs, styles, cadre, logo) |
| DELETE | /links/{slug} | Archive le lien (supprimé 30 jours après) |
| GET | /links/{slug}/stats | Statistiques d’une période (366 jours au plus) |
| GET | /links/{slug}/qr | Code QR en SVG ou PNG, avec son design |
| PUT | /design/default | Enregistre un design par défaut pour les nouveaux liens (null l’enlève) |
| GET | /webhooks | Liste vos webhooks |
| POST | /webhooks | Crée un webhook (secret affiché une fois) |
| DELETE | /webhooks/{id} | Supprime un webhook |
Spécification OpenAPI 3.1 (pour Postman, Insomnia ou un générateur de client) : /api/v1/openapi.json
Sans code
- Zapier : déclencheurs « Nouveau lien » et « Nouveau scan », actions « Créer un lien » et « Changer la destination ». Ajouter l’app Krealo QR à votre Zapier
- Claude, ChatGPT et autres assistants (MCP) : ajoutez un connecteur personnalisé avec l’adresse
https://krlo.ca/mcp - Intégrations
Exemples
curl -X POST https://krlo.ca/api/v1/links \
-H "Authorization: Bearer kqr_…" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: menu-2026" \
-d '{"url":"https://example.com/menu","slug":"menu"}'const r = await fetch('https://krlo.ca/api/v1/links', {
method: 'POST',
headers: { Authorization: 'Bearer kqr_…', 'Content-Type': 'application/json' },
body: JSON.stringify({ url: 'https://example.com/menu', slug: 'menu' }),
});
const lien = await r.json(); // { slug, short_url, … }import requests
r = requests.post("https://krlo.ca/api/v1/links",
headers={"Authorization": "Bearer kqr_…"},
json={"url": "https://example.com/menu", "slug": "menu"})
print(r.json()["short_url"])curl "https://krlo.ca/api/v1/links/menu/stats?from=2026-09-01&to=2026-09-30" -H "Authorization: Bearer kqr_…"curl -X PATCH https://krlo.ca/api/v1/links/menu -H "Authorization: Bearer kqr_…" -H "Content-Type: application/json" \
-d '{"design":{"color":"#1e3a8a","dots":"rounded","corners":"extra-rounded","logo_url":"https://example.com/logo.png","frame":{"style":"cinta","text":"Menu"}}}'curl "https://krlo.ca/api/v1/links/menu/qr?format=png&size=1024" -H "Authorization: Bearer kqr_…" -o menu.pngcurl -X POST https://krlo.ca/api/v1/webhooks -H "Authorization: Bearer kqr_…" -H "Content-Type: application/json" \
-d '{"url":"https://example.com/hooks/krealo","events":["link.scanned"]}'Codes d’erreur
| 400 | invalid_request | Donnée invalide ou destination refusée. |
| 401 | unauthorized | Jeton absent, invalide, révoqué ou expiré. |
| 402 | pro_required | Le forfait Pro est requis. |
| 403 | forbidden | Action refusée sur ce compte. |
| 403 | insufficient_scope | Jeton en lecture seule : il ne peut que lire (GET). |
| 404 | not_found | Ce lien n’existe pas ou n’est pas à vous. |
| 409 | slug_taken | Ce slug est déjà pris. |
| 409 | idempotency_in_progress | Idempotency-Key déjà utilisée : requête en cours (409) ou avec un autre contenu (422). |
| 422 | idempotency_mismatch | Idempotency-Key déjà utilisée : requête en cours (409) ou avec un autre contenu (422). |
| 429 | rate_limited | Plus de 120 requêtes par minute : attendez Retry-After secondes. |
| 503 | not_configured | Service momentanément indisponible. |
Authentification
L’API est réservée aux comptes Pro. Générez votre jeton personnel dans la page de votre compte, puis envoyez-le dans l’en-tête Authorization: Bearer <jeton>. L’adresse de base est https://qr.krealomedia.com/api/v1.
Ce que l’API permet
- Créer un lien, ou jusqu’à 100 d’un coup, avec un en-tête Idempotency-Key pour ne jamais en créer deux.
- Lister vos liens, filtrés par dossier, étiquette ou état, avec pagination par curseur.
- Changer la destination, le titre ou l’état d’un lien, et l’archiver.
- Lire les statistiques d’une période : scans, visiteurs uniques, pays et appareils.
- Régler le design du QR à la création ou à la modification d’un lien : couleurs, style des points et des coins, cadre avec texte, et votre logo depuis une adresse https publique ou en base64 (PNG, JPEG ou WEBP, 2 Mo au plus).
- Télécharger le code QR en SVG ou en PNG avec son design : couleurs, points, logo et cadre.
- Recevoir des webhooks signés quand un lien est créé, modifié, archivé, bloqué ou scanné.
Limite de débit
La limite est de 120 requêtes par minute par compte. Chaque réponse indique où vous en êtes avec les en-têtes X-RateLimit-Limit, X-RateLimit-Remaining et X-RateLimit-Reset ; au-delà, la réponse 429 précise dans Retry-After combien de secondes attendre.
Destinations acceptées
Seules les adresses http et https sont acceptées. Les destinations dangereuses, comme javascript: ou data:, sont bloquées.
Voir aussi
Questions fréquentes
Qui peut utiliser l’API ?
Les comptes du forfait Pro. Le jeton personnel se génère dans la page du compte.
Quelle est la limite de requêtes ?
Elle est de 120 requêtes par minute.
Le code QR renvoyé par l’API peut-il avoir un logo ?
Oui. La route /links/{slug}/qr renvoie le code QR avec le design enregistré du lien (couleurs, style des points, logo et cadre), en SVG ou en PNG de 128 à 2048 pixels. Le design se règle dans l’application, ou avec le champ design de POST /links et PATCH /links/{slug}, logo compris.