Enqre

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/v1

Authentification

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.

401invalid_api_keyNo key, a revoked key, or one that does not exist.
403api_not_available_on_planThe key is valid; the account is not on Business.
400invalid_bodyThe JSON body failed validation.
402plan_limit_reachedThe account is at its dynamic-code limit.
404not_foundNo code with that id on this account.
429rate_limitedMore 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 collection

Ce 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