Dispatches
GET /v1/dispatches
Section titled “GET /v1/dispatches”| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
caseId | query | string | No | Only dispatches for this collection case |
invoiceId | query | string | No | Only dispatches for this invoice |
channel | query | string | No | EMAIL | SMS | BREV | EBOKS | EAN | DIGITAL_POST |
limit | query | integer | No | Page size, 1-200 (default 50) |
cursor | query | string | No | Opaque cursor from meta.nextCursor |
Request exampleNo request body
curl https://api.rieckflow.com/v1/dispatches \ -H "Authorization: Bearer $RIECK_API_KEY"const svar = await rieck.request("GET", "/v1/dispatches");{ "data": [ {} ], "meta": { "nextCursor": null }}200 Every dispatch and what became of it, newest first, across both the case track and the invoice track — you should not need to know which table an answer lives in.
status: queued, sent, pending_provider, delivered, failed, skipped. ⚠️ queued and skipped are NOT failures: queued means it is waiting (or the provider gave no verdict and the row is frozen), skipped means no channel could be reached for a soft step. sent means we handed it over; delivered requires PROOF. deliveryProvable says whether this channel can prove delivery at all — e-Boks cannot.application/jsonPossible errors 5
| HTTP | Code | Meaning |
|---|---|---|
| 400 | invalid_cursor | The cursor is malformed, expired or belongs to another list shape. |
| 401 | invalid_api_key | The API key is missing, invalid, expired or revoked. |
| 403 | api_not_included | The organisation’s plan does not include API access. |
| 403 | insufficient_scope | The key does not have the required scope. |
| 429 | rate_limited | The organisation’s rate budget is exhausted. |
GET /v1/dispatches/{dispatchId}
Section titled “GET /v1/dispatches/{dispatchId}”| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
dispatchId | path | string | Yes |
Request exampleNo request body
curl https://api.rieckflow.com/v1/dispatches/9b2f1c1e-… \ -H "Authorization: Bearer $RIECK_API_KEY"const svar = await rieck.request("GET", "/v1/dispatches/9b2f1c1e-…");{ "data": {}}200 One dispatch with its status, its delivery proof and
openedAt when the recipient opened it. The id is looked up in both tracks, so you never have to remember which one it came from.application/jsonPossible errors 4
| HTTP | Code | Meaning |
|---|---|---|
| 401 | invalid_api_key | The API key is missing, invalid, expired or revoked. |
| 403 | api_not_included | The organisation’s plan does not include API access. |
| 403 | insufficient_scope | The key does not have the required scope. |
| 429 | rate_limited | The organisation’s rate budget is exhausted. |
GET /v1/dispatch-channels
Section titled “GET /v1/dispatch-channels”Request exampleNo request body
curl https://api.rieckflow.com/v1/dispatch-channels \ -H "Authorization: Bearer $RIECK_API_KEY"const svar = await rieck.request("GET", "/v1/dispatch-channels");{ "data": {}}200 Per channel:
available, reason when it is not, and deliveryProvable. Three independent layers decide it — the platform feature flag, your own opt-in, and for Digital Post a global production lock — and all three are reflected here, because a channel switched on in your settings but held by the lock would otherwise look open. ⚠️ deliveryProvable: false is the channel’s limit, not an error: an e-Boks dispatch never gets past sent, so do not wait for a dispatch.delivered that cannot come.application/jsonPossible errors 4
| HTTP | Code | Meaning |
|---|---|---|
| 401 | invalid_api_key | The API key is missing, invalid, expired or revoked. |
| 403 | api_not_included | The organisation’s plan does not include API access. |
| 403 | insufficient_scope | The key does not have the required scope. |
| 429 | rate_limited | The organisation’s rate budget is exhausted. |