API de códigos QR
Crea códigos desde tu propio backend, lee sus escaneos y recibe un webhook en el momento en que alguien escanea. Esta página no requiere cuenta.
La API forma parte del plan Business. Las claves se crean en el panel, en «API y webhooks», y se muestran una sola vez: una clave perdida se revoca y se sustituye, nunca se recupera.
URL base
https://enqre.com/api/v1Autenticación
Cada petición lleva la clave como token bearer. Sin clave válida: 401. Con clave válida en un plan sin API: 403.
curl https://enqre.com/api/v1/qrcodes \
-H "Authorization: Bearer $ENQRE_API_KEY"Endpoints
GET/api/v1/qrcodes?limit=50&cursor=<id>
Lista tus códigos, del más reciente al más antiguo. Paginación por cursor: envía el nextCursor recibido para la página siguiente.
{
"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
Crea un código URL dinámico. La respuesta incluye la URL corta que vas a imprimir.
{ "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}
Lee un código.
PATCH/api/v1/qrcodes/{id}
Modifica un código, incluido su destino. Para eso existe un código dinámico: la copia impresa sigue funcionando y apunta a otro sitio.
{ "url": "https://example.com/autumn-menu", "name": "Autumn menu", "active": true }DELETE/api/v1/qrcodes/{id}
Elimina un código. Las copias impresas dejan de resolver, así que no es la forma de pausar una campaña: pon active en false.
GET/api/v1/qrcodes/{id}/scans
Los últimos 1.000 escaneos de un código, del más reciente al más antiguo, más el total histórico.
{
"total": 128,
"data": [
{ "createdAt": "2026-09-06T18:12:03.000Z", "device": "mobile", "os": "iOS", "browser": "Safari" }
]
}Errores
Los errores son JSON con un código estable legible por máquina. Ramifica por el código, no por el mensaje: los mensajes pueden reescribirse, los códigos no.
| 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. |
Límite de peticiones
60 escrituras por minuto y cuenta; por encima, 429. Las lecturas hoy no están limitadas, y eso no es una promesa sobre la que construir.
Webhooks
Registra una URL en «API y webhooks» y cada escaneo se envía allí al instante: tu sistema se entera sin consultar nada.
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"
}Verifica la firma
Calcula el HMAC-SHA256 del cuerpo bruto de la petición con tu secreto de webhook y compáralo con la cabecera. Rechaza lo que no coincida, y compara en tiempo constante.
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));Colección de Postman
Todos los endpoints de esta página, listos para ejecutar: importa la colección, define la variable apiKey y envía.
Descargar la colecciónLo que la API todavía no hace
Los códigos creados por la API son códigos URL con el diseño por defecto. Los otros dieciséis tipos, los campos de diseño y la importación masiva siguen siendo cosa del panel. Lo que la API crea es un código normal y corriente: editable, medible e imprimible como cualquier otro.
Consigue una clave
API, webhooks, GS1 Digital Link, marca blanca y dominio propio están en Business, 39 € al mes.
Ver los planes