Requests and responses
Format
Section titled “Format”- HTTPS only. Every route lives under
/v1/merchant/. - Request and response bodies are JSON (
Content-Type: application/json), withcamelCasefield names. - Bodies are strict. An unknown field answers
422 invalid_request, withparamnaming the field. This catches typos likeexternalrefbefore they become silent bugs. - Optional fields are omitted from answers when they do not apply. Treat a missing field and
nullthe same.
Amounts are integers in minor units, VAT included:
{ "amountMinor": 14900, "vatMinor": 2980, "exVatMinor": 11920, "currency": "NOK" }is NOK 149.00, of which NOK 29.80 VAT. Never use floating point for money.
Times are RFC 3339. You may send any offset; answers are in UTC. timeZone names the market’s IANA zone (Europe/Oslo) for showing times to people. Window option keys use the market’s local offset, such as window:2026-11-03T17:00:00+01:00/2026-11-03T19:00:00+01:00.
Identifiers
Section titled “Identifiers”| Id | Example | Notes |
|---|---|---|
Order id |
3f0e9a52-… |
A UUID. Equals the quoteId it was placed on. |
reference |
DD-482913 |
Short and human. Paths accept it in place of id. |
externalRef |
order-1001 |
Yours. Unique among your live orders. |
Location id, externalStoreId |
oslo-sentrum |
Either names a store in a quote or order. |
Headers
Section titled “Headers”| Header | Direction | Meaning |
|---|---|---|
Authorization: Bearer dmk_… |
request | Your API key. |
Idempotency-Key |
request | A UUID that makes a write safe to retry. See Idempotency. |
X-Request-Id |
both | The request’s id. Send your own (up to 64 characters of A-Za-z0-9._-) to correlate with your logs; otherwise Delivr makes one. Quote it to support. |
Delivr-Api-Version |
response | The API version that answered. See Versioning. |
Idempotent-Replayed: true |
response | The answer is a replay of an earlier request. |
RateLimit-Limit, -Remaining, -Reset |
response | Your rate limit. |
Pagination
Section titled “Pagination”List endpoints answer { "items": [...], "nextCursor": "…" }. Pass cursor=<nextCursor> for the next page, and stop when nextCursor is absent. Cursors are opaque; do not build or parse them.