API QR code
Créez des codes depuis votre backend, lisez leurs scans et recevez un webhook au moment même où quelqu’un scanne. Cette page ne demande aucun compte.
L’API fait partie de l’offre Business. Les clés se créent dans le tableau de bord, sous « API & webhooks », et ne s’affichent qu’une fois — une clé perdue se révoque et se remplace, jamais ne se récupère.
URL de base
https://enqre.com/api/v1Authentification
Chaque requête porte la clé en jeton bearer. Sans clé valide : 401. Clé valide sur une offre sans API : 403.
curl https://enqre.com/api/v1/qrcodes \
-H "Authorization: Bearer $ENQRE_API_KEY"Points d’entrée
GET/api/v1/qrcodes?limit=50&cursor=<id>
Lister vos codes, du plus récent au plus ancien. Pagination par curseur : renvoyez le nextCursor reçu pour la page suivante.
{
"data": [
{
"id": "clx…", "name": "Table tent", "type": "URL",
"slug": "a1b2c3", "destinationUrl": "https://example.com/menu",
"scanCount": 128, "active": true, "createdAt": "2026-09-01T10:00:00.000Z",
"shortUrl": "https://enqre.com/r/a1b2c3"
}
],
"nextCursor": "clx…"
}POST/api/v1/qrcodes
Créer un code URL dynamique. La réponse contient l’URL courte à imprimer.
{ "name": "Table tent", "url": "https://example.com/menu" }201 Created
{
"data": {
"id": "clx…", "name": "Table tent", "slug": "a1b2c3",
"destinationUrl": "https://example.com/menu",
"shortUrl": "https://enqre.com/r/a1b2c3"
}
}GET/api/v1/qrcodes/{id}
Lire un code.
PATCH/api/v1/qrcodes/{id}
Modifier un code — sa destination comprise. C’est tout l’intérêt d’un code dynamique : l’exemplaire imprimé continue de fonctionner et pointe ailleurs.
{ "url": "https://example.com/autumn-menu", "name": "Autumn menu", "active": true }DELETE/api/v1/qrcodes/{id}
Supprimer un code. Les exemplaires imprimés cessent de résoudre : pour mettre une campagne en pause, passez plutôt active à false.
GET/api/v1/qrcodes/{id}/scans
Les 1 000 derniers scans d’un code, du plus récent au plus ancien, avec le total cumulé.
{
"total": 128,
"data": [
{ "createdAt": "2026-09-06T18:12:03.000Z", "device": "mobile", "os": "iOS", "browser": "Safari" }
]
}Erreurs
Les erreurs sont du JSON avec un code stable lisible par une machine. Branchez sur le code, pas sur le message : les messages peuvent être reformulés, pas les codes.
| 401 | invalid_api_key | No key, a revoked key, or one that does not exist. |
| 403 | api_not_available_on_plan | The key is valid; the account is not on Business. |
| 400 | invalid_body | The JSON body failed validation. |
| 402 | plan_limit_reached | The account is at its dynamic-code limit. |
| 404 | not_found | No code with that id on this account. |
| 429 | rate_limited | More than 60 writes in a minute. |
Limite de débit
60 écritures par minute et par compte, 429 au-delà. Les lectures ne sont pas limitées aujourd’hui ; ce n’est pas une promesse sur laquelle bâtir.
Webhooks
Enregistrez une URL sous « API & webhooks » et chaque scan y est envoyé immédiatement : votre système est au courant sans interroger quoi que ce soit.
POST your-endpoint
X-Enqre-Event: scan.created
X-Enqre-Signature: <hex hmac-sha256 of the raw body>
Content-Type: application/json
{
"event": "scan.created",
"qrCodeId": "clx…",
"slug": "a1b2c3",
"name": "Table tent",
"device": "mobile",
"os": "iOS",
"browser": "Safari"
}Vérifier la signature
Calculez le HMAC-SHA256 du corps brut de la requête avec votre secret de webhook et comparez-le à l’en-tête. Rejetez tout ce qui ne correspond pas — et comparez en temps constant.
import crypto from "node:crypto";
const raw = await req.text(); // the raw body, before JSON.parse
const expected = crypto
.createHmac("sha256", process.env.ENQRE_WEBHOOK_SECRET)
.update(raw)
.digest("hex");
const given = req.headers.get("x-enqre-signature") ?? "";
const ok =
given.length === expected.length &&
crypto.timingSafeEqual(Buffer.from(given), Buffer.from(expected));Collection Postman
Tous les points d’entrée de cette page, prêts à l’emploi : importez la collection, renseignez la variable apiKey, envoyez.
Télécharger la collectionCe que l’API ne fait pas encore
Les codes créés via l’API sont des codes URL au design par défaut. Les seize autres types, les champs de design et l’import en masse restent pour l’instant dans le tableau de bord. Ce que l’API crée est un code tout à fait normal : modifiable, mesurable et imprimable comme les autres.
Obtenir une clé
API, webhooks, GS1 Digital Link, marque blanche et domaine personnalisé sont dans l’offre Business, 39 € par mois.
Voir les offres