Hand a case to delivery (internal)
Internal. A producer (Commerce) authenticates with its producer token (DECIONIS_DELIVERY_PRODUCERS_JSON) and may only deliver cases of the owners it holds. Core looks recipients up through Accounts, delivers in channel order (Business Central in-app, Teams, Slack, the assistant; email only notifies, or carries a signed link when the person has no other channel), deduplicates by content key and retries in the worker. 503 delivery_disabled while DECIONIS_DELIVERY_ENABLED is not 1.
Authorization
ApiKeyAuth An organization API key. Its scopes decide what it may call;
decision:shadow is the narrowest: SHADOW evaluations through
POST /v1/authority/grants or its alias
POST /v1/authority/enforce-and-bind only (DECISION_SHADOW_MODE_DENIED
in any other mode; DECISION_SHADOW_FIELD_DENIED for a body carrying
context.decionis_policy, evidence or escalation), with no
integration dispatch. A key whose only scope is decision:shadow
(an AgentSafe hosted gateway's) reaches exactly those two,
POST /v1/auth/credential-context, POST /v1/hosted-gateway/keys/confirm
and POST /v1/hosted-gateway/keys/revoke-self; every other route
answers 403 HOSTED_GATEWAY_KEY_PATH_DENIED.
decision:enforce is an enforced hosted gateway's key: evaluations
in SHADOW or ENFORCEMENT through POST /v1/authority/grants or its
alias (400 DECISION_ENFORCE_FIELD_DENIED for a body carrying
context.decionis_policy; it never holds policy:write), and the
grants and managed escalations they bind. A key whose scopes are
decision:enforce (with or without decision:shadow) reaches exactly
POST /v1/authority/enforce-and-bind, POST /v1/authority/grants,
GET /v1/authority/grants/{grant_id},
POST /v1/authority/grants/{grant_id}/claims,
POST /v1/authority/grants/{grant_id}/receipts,
POST /v1/authority/grants/{grant_id}/reconciliations,
POST /v1/execution/verify-token, POST /v1/execution/claim-token,
POST /v1/execution/consume-token, POST /v1/execution/finalize-token,
GET /v1/authority/escalations/{escalation_id},
DELETE /v1/authority/escalations/{escalation_id},
POST /v1/auth/credential-context, POST /v1/hosted-gateway/keys/confirm
and POST /v1/hosted-gateway/keys/revoke-self, each id a UUID; every
other route answers 403 HOSTED_GATEWAY_KEY_PATH_DENIED.
In: header
Request Body
application/json
A case (card, decionis.delivery.card/1) or a report artifact (artifact) in the producer's own namespace, delivered as an informational card with no verbs.
Value in
- "decionis.delivery.item/1"
Value in
- "case"
- "artifact"
uuidlength <= 300decionis.delivery.card/1
Response Body
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/v1/deliveries" \ -H "Content-Type: application/json" \ -d '{ "version": "decionis.delivery.item/1", "kind": "case", "org_id": "a40f5d1f-d889-42e9-94ea-b9b33585fc6b", "content_key": "string", "audience": {} }'{}Decide a case (the one inbound decision path) POST
Every channel resolves here, through DecisionActionResolver. Teams and Slack callbacks, the Business Central extension and the `decionis.cases.*` MCP tools all reach the same steps. The channel identity must belong to the workspace's tenant, resolve to a current Accounts member and hold the case's authority. When the authority requirement asks, Presence must have approved the person's passkey first (428 with `step_up_url`). The transition happens at the case's owner, with a revision check, and is applied once per case revision whichever inbox it came from. Organization API key with decision:write and a person (Business Central `x-decionis-actor` or an MCP OAuth token), or the named recipient's own Account session with the signed email `link`.
Read a delivery and its receipts (internal) GET
Internal; the producer that created the delivery, with its producer token.

