API-Schlüssel und Authentifizierung
Jeder Aufruf der Connect API braucht einen API-Schlüssel im Header X-Api-Key. Die öffentliche Reservierungs-API (/public/v1) braucht keinen Schlüssel.
Publishable Keys und geheime Schlüssel
Jeder API-Schlüssel, den Sie erstellen, ist ein Paar:
| Teil | Präfix | Verwenden in | Zugriff |
|---|---|---|---|
| Publishable Key | pk_ | Ihrer Kunden-App oder Website | Nur, was ein Kunde tun kann: Standorte, Anmeldung, die Speisekarte, Restaurantbestellungen, der Produktkatalog, Zahlungsstatus und das eigene Konto des Kunden. |
| Geheimer Schlüssel | cnct_ | Ihrem eigenen Server | Jeder Endpunkt, einschließlich Warenkorb, Webshop-Bestellungen und Versandabfragen. |
Behandeln Sie den geheimen Schlüssel wie ein Passwort. Setzen Sie ihn nie in eine App oder eine Webseite.
Diese Endpunkte brauchen den geheimen Schlüssel. Ein Publishable Key erhält 403 PUBLISHABLE_KEY_NOT_ALLOWED:
GET /store/shipping/locationsGET /store/shipping/delivery-optionsPOST /store/orders- alles unter
/store/cart/…
Schlüssel gehören zu Ihrer Organisation und funktionieren mit jedem ihrer aktiven Verkaufskanäle. Es gibt keine getrennten Test- und Live-Schlüssel.
Schlüssel erstellen
- Melden Sie sich bei my.conciar.com als Admin oder Manager an. Employees können keine Schlüssel verwalten.
- Öffnen Sie Management → API Keys und klicken Sie auf New API Key (oder auf Create first key, wenn die Liste leer ist).
- Geben Sie einen Key Name mit bis zu 100 Zeichen ein und klicken Sie auf Create Key.
- Kopieren Sie in API Key Created den Publishable Key und den geheimen Schlüssel mit den jeweiligen Copy-Schaltflächen und klicken Sie dann auf Done.
Schlüssel werden nur einmal angezeigt
Conciar speichert nur einen Hash jedes Schlüssels. Wenn Sie einen Schlüssel verlieren, erstellen Sie einen neuen.
Die Liste zeigt für jeden Schlüssel die ersten Zeichen, das Erstellungsdatum und wann er zuletzt verwendet wurde.
Schlüssel ersetzen oder widerrufen
Conciar hat keine Schaltfläche zum Rotieren. So ersetzen Sie einen Schlüssel:
- Erstellen Sie einen neuen Schlüssel.
- Stellen Sie Ihre App oder Ihren Server auf den neuen Schlüssel um.
- Widerrufen oder löschen Sie den alten Schlüssel.
Revoke stoppt den Schlüssel sofort; er bleibt als „Revoked“ in der Liste und kann nicht wieder eingeschaltet werden. Delete entfernt ihn aus der Liste. Beide wirken auf das ganze Paar: Wenn Sie den Publishable Key widerrufen, wird auch sein geheimer Schlüssel widerrufen.
Aufrufe aus dem Browser
Die Connect API sendet keine CORS-Header. Ein Browser blockiert daher Aufrufe, die per JavaScript von einer anderen Domain kommen. Rufen Sie sie von Ihrem Server oder aus einer nativen App auf. Ein Webshop kann seine Aufrufe über sein eigenes Backend leiten; so bleibt auch der geheime Schlüssel aus der Seite heraus.
Fehler
Fehler kommen als JSON zurück. Prüfen Sie zuerst den HTTP-Status.
| Status | Body | Ursache |
|---|---|---|
| 401 | {"message": "API key required."} | Kein Header X-Api-Key. |
| 401 | {"message": "Invalid or expired API key."} | Der Schlüssel ist falsch, widerrufen oder gelöscht. |
| 401 | {"message": "Unauthenticated."} | Ein Kunden-Endpunkt ohne gültiges Bearer-Token. |
| 403 | {"status": false, "message": "PUBLISHABLE_KEY_NOT_ALLOWED"} | Dieser Endpunkt braucht den geheimen Schlüssel. |
| 404 | {"message": "X-Sales-Channel header is required."} | Kein Header X-Sales-Channel bei einem /store/…-Aufruf. |
| 404 | {"message": "…"} | Das Kanal-Token ist unbekannt, inaktiv oder gehört zu einer anderen Organisation. |
| 409 | {"status": false, "message": "IDEMPOTENCY_KEY_REUSED"} | Ein Idempotency-Key wurde für eine andere Bestellung wiederverwendet, oder die erste Bestellung wird noch aufgegeben (IDEMPOTENCY_KEY_IN_PROGRESS). |
| 422 | {"message": "…", "errors": {…}} | Die Validierung ist fehlgeschlagen. Andere Fehler in der Anfrage geben {"status": false, "message": "CODE"} zurück. |
| 429 | {"message": "Too Many Attempts."} | Ein Rate Limit ist überschritten. Warten Sie die Anzahl Sekunden aus Retry-After ab. |
| 503 | {"maintenance": true, "message": "…"} | Der Verkaufskanal ist im Wartungsmodus. |
Die öffentliche Reservierungs-API gibt {"status": false, "code": "…"} zurück, zum Beispiel NOT_FOUND, UNAVAILABLE oder INVALID.
Rate Limits
Antworten enthalten X-RateLimit-Limit und X-RateLimit-Remaining.
Connect API
| Limit | Gezählt pro |
|---|---|
| 300 Anfragen pro Minute, gesamte API | IP-Adresse |
POST /app/init: 30 pro Minute | Schlüssel |
POST /store/cart/init: 30 pro Minute | Schlüssel |
| Andere Änderungen am Warenkorb: 120 pro Minute | Schlüssel |
| Zahlungsstatus: 60 pro Minute | Schlüssel |
| Restaurantbestellung aufgeben, bezahlen oder stornieren: 10 pro Minute | Schlüssel |
| Status einer Restaurantbestellung: 30 pro Minute | Schlüssel |
| Alle Restaurantbestellungen für einen Store: 60 neue Bestellungen und 120 Zahlungs- oder Stornoaufrufe pro Minute | Store |
register, otp/request und otp/resend: 5 pro Minute | IP-Adresse |
otp/verify: 20 pro Minute | IP-Adresse |
| Anmeldecodes: 1 pro Minute und 5 pro Stunde | E-Mail-Adresse |
Bei einem Publishable Key bedeutet „pro Schlüssel“ pro Schlüssel und IP-Adresse. So verbraucht ein einzelner aktiver App-Nutzer nicht das Limit für alle anderen.
Wer zu früh einen neuen Anmeldecode anfordert, erhält 429 {"status": false, "message": "OTP_COOLDOWN", "retry_after": 42}.
Öffentliche Reservierungs-API
| Limit | Gezählt pro |
|---|---|
| 120 Lesezugriffe und 10 Buchungen oder Änderungen pro Minute | Restaurant und IP-Adresse |
| Gutscheine: 60 Lesezugriffe und 6 Käufe pro Minute | Restaurant und IP-Adresse |