/versionpublikAPI-version (ingen nyckel)
curl -sS "https://api.modr.se/v1/version"Partner API
Publik REST API för partners: meny, Orderhanterare, öppna notor och stängd försäljning per outlet. Autentisering med outlet-nycklar — inte device-JWT eller personal-PIN.
Alla skyddade anrop kräver en giltig outlet-nyckel. Skicka antingen:
Authorization: Bearer modr_live_…eller
Authorization: Bearer modr_test_…Alternativ header:X-Api-Key: modr_test_…
Ogiltig eller återkallad nyckel ger 401. Nycklar lagras hashade; prefix och last4 visas i Backoffice.
Anropa alltid MODR Open API på api.modr.se. Live och test delar samma host — miljön styrs av nyckelns prefix. Använd modr_test_-nycklar mot en test-outlet under utveckling.
https://api.modr.se/v1 — kanonisk bas-URLhttps://modr.se/api/v1 — samma API via modr.semodr_test_ — sandbox / lägre rate limitmodr_live_ — produktionFast fönster per minut per nyckel. Överskridning ger 429 med Retry-After.
modr_test_ — 60 req/min (default)modr_live_ — 120 req/min (default)Response headers: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset
POST och PUT tar valfritt Idempotency-Key (8–128 tecken). Samma nyckel och samma body ger tillbaka originalsvaret. Samma nyckel med annan body ger 409.
Idempotency-Key: 8f3c2a91-partner-order-14Skicka valfritt X-Correlation-Id. Samma värde returneras i svaret och ingår i felpayload — använd det vid support.
Alla paths är relativa till base URL ovan. POST /orders lägger en väntande order i Orderhanterare. POST /checks skapar en öppen POS-nota. GET /sales pagineras med cursor — skicka nextCursor som cursor.
/versionpublikAPI-version (ingen nyckel)
curl -sS "https://api.modr.se/v1/version"/environmentNyckelns miljö och outlet-bindning
curl -sS "https://api.modr.se/v1/environment" \
-H "Authorization: Bearer modr_test_…"/productsPublicerad meny / katalog med modifierare
curl -sS "https://api.modr.se/v1/products" \
-H "Authorization: Bearer modr_test_…"/tablesBord och eventuell öppen nota
curl -sS "https://api.modr.se/v1/tables" \
-H "Authorization: Bearer modr_test_…"/checksLista öppna POS-notor
curl -sS "https://api.modr.se/v1/checks?limit=50" \
-H "Authorization: Bearer modr_test_…"/checksSkapa öppen POS-nota (ingen betalning)
curl -sS -X POST "https://api.modr.se/v1/checks" \
-H "Authorization: Bearer modr_test_…" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"name":"Online 1","tableId":"<tableId>","lines":[{"productId":"<id>","qty":1}]}'/checks/{id}Hämta en öppen nota
curl -sS "https://api.modr.se/v1/checks/<checkId>" \
-H "Authorization: Bearer modr_test_…"/checks/{id}/itemsLägg rader på en öppen nota
curl -sS -X POST "https://api.modr.se/v1/checks/<checkId>/items" \
-H "Authorization: Bearer modr_test_…" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"lines":[{"productId":"<id>","qty":1}]}'/checks/{id}/tableKoppla nota till bord
curl -sS -X PUT "https://api.modr.se/v1/checks/<checkId>/table" \
-H "Authorization: Bearer modr_test_…" \
-H "Content-Type: application/json" \
-d '{"tableId":"<tableId>"}'/ordersSkapa order i Orderhanterare (väntande kö)
curl -sS -X POST "https://api.modr.se/v1/orders" \
-H "Authorization: Bearer modr_test_…" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"name":"Wolt 14","orderType":"Takeaway","lines":[{"productId":"<id>","qty":1}]}'/ordersLista ordrar i Orderhanterare
curl -sS "https://api.modr.se/v1/orders?queue=waiting" \
-H "Authorization: Bearer modr_test_…"/salesStängd försäljning med rader, moms och betalsätt
curl -sS "https://api.modr.se/v1/sales?limit=50" \
-H "Authorization: Bearer modr_test_…"/sales/{id}Hämta en stängd försäljning
curl -sS "https://api.modr.se/v1/sales/<saleId>" \
-H "Authorization: Bearer modr_test_…"Konfigurera publik HTTPS-URL och events i Backoffice. Första försöket sker synkront. Misslyckade leveranser retrys med backoff, upp till 8 försök. sale.created innehåller rader, moms och betalsätt.
check.createdcheck.updatedorder.createdsale.createdHeaders: X-Modr-Timestamp, X-Modr-Signature, X-Modr-Event
HMAC-SHA256 hex av{timestamp}.{rawBody} med webhook-secret.
# verify (pseudo)
expected = hmac_sha256(secret, timestamp + "." + rawBody)
assert expected == X-Modr-SignatureJSON-fel har konsekvent form:
{
"code": "unauthorized",
"message": "Missing API key …",
"correlationId": "…"
}Betala/terminal, refund, kontant, Z/X/fiskal, personal-PIN, device link och manager override ingår inte i Open API v1.