QR-Code-API
Codes aus dem eigenen Backend erstellen, ihre Scans auslesen und in dem Moment einen Webhook bekommen, in dem jemand scannt. Diese Seite braucht kein Konto.
Die API gehört zum Business-Tarif. Schlüssel werden im Dashboard unter „API & Webhooks“ erstellt und einmalig angezeigt — ein verlorener Schlüssel wird widerrufen und ersetzt, nie wiederhergestellt.
Basis-URL
https://enqre.com/api/v1Authentifizierung
Jede Anfrage trägt den Schlüssel als Bearer-Token. Ohne gültigen Schlüssel: 401. Gültiger Schlüssel in einem Tarif ohne API: 403.
curl https://enqre.com/api/v1/qrcodes \
-H "Authorization: Bearer $ENQRE_API_KEY"Endpunkte
GET/api/v1/qrcodes?limit=50&cursor=<id>
Ihre Codes auflisten, neueste zuerst. Cursor-Paginierung: den zurückgegebenen nextCursor für die nächste Seite mitgeben.
{
"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
Einen dynamischen URL-Code erstellen. Die Antwort enthält die kurze URL zum Drucken.
{ "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}
Einen Code lesen.
PATCH/api/v1/qrcodes/{id}
Einen Code ändern — auch sein Ziel. Genau dafür ist ein dynamischer Code da: Das gedruckte Exemplar funktioniert weiter und zeigt woandershin.
{ "url": "https://example.com/autumn-menu", "name": "Autumn menu", "active": true }DELETE/api/v1/qrcodes/{id}
Einen Code löschen. Gedruckte Exemplare lösen dann nicht mehr auf — zum Pausieren einer Kampagne stattdessen active auf false setzen.
GET/api/v1/qrcodes/{id}/scans
Die letzten 1.000 Scans eines Codes, neueste zuerst, plus die Gesamtzahl.
{
"total": 128,
"data": [
{ "createdAt": "2026-09-06T18:12:03.000Z", "device": "mobile", "os": "iOS", "browser": "Safari" }
]
}Fehler
Fehler kommen als JSON mit einem stabilen maschinenlesbaren Code. Verzweigen Sie über den Code, nicht über die Meldung — Meldungen können umformuliert werden, Codes nicht.
| 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. |
Ratenbegrenzung
60 Schreibvorgänge pro Minute und Konto, darüber 429. Lesevorgänge sind derzeit nicht begrenzt; darauf sollte man nicht bauen.
Webhooks
Eine URL unter „API & Webhooks“ hinterlegen, und jeder Scan wird sofort dorthin gesendet — Ihr System erfährt davon, ohne zu pollen.
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"
}Signatur prüfen
HMAC-SHA256 des rohen Request-Body mit Ihrem Webhook-Secret berechnen und mit dem Header vergleichen. Was nicht passt, ablehnen — und in konstanter Zeit vergleichen.
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));Postman-Collection
Alle Endpunkte dieser Seite, sofort ausführbar: Collection importieren, Variable apiKey setzen, senden.
Collection herunterladenWas die API noch nicht kann
Über die API erstellte Codes sind URL-Codes im Standard-Design. Die anderen sechzehn Typen, die Design-Felder und der Bulk-Import laufen vorerst nur im Dashboard. Was die API erstellt, ist ein ganz normaler Code: änderbar, messbar und druckbar wie jeder andere.
Schlüssel holen
API, Webhooks, GS1 Digital Link, White-Label und eigene Domain sind im Business-Tarif, 39 € im Monat.
Tarife ansehen