Does this action fit the mandate?
POST /mandates/{id}/check · Mandates · version 2026-09-14
Call this before every action. Scope, ceiling and validity are evaluated together.
You get allowed true or false, with the reason when it is false. allowed: false is a successful call, not an error — the rail did its job. Inspect reason.
This endpoint does not move money. Your system or your PSP settles, or stops.
Base URL
https://api.sidaxis.com/v1 in production, https://sandbox.api.sidaxis.com/v1 in sandbox.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| Authorization | header | string | required | Bearer sk_live_… in production, sk_test_… in sandbox. |
| Sidaxis-Version | header | string | optional | Dated version. Pin it in production. |
| Idempotency-Key | header | string | optional | Retrying with the same key never double-consumes a ceiling. |
| id | path | string | required | The mandate being checked. |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
| operation | enum | required | What the agent is about to do. Must be in the mandate's scope. |
| amount | number | optional | Required when the ceiling is an amount. Checked against remaining. |
| currency | string | optional | Must match the ceiling's currency. No conversion is performed. |
| counterparty | string | optional | Checked against ceiling.counterparties when that list is set. |
Example request
{
"operation": "payment",
"amount": 240,
"currency": "USD",
"counterparty": "acme_ltd"
}
Responses
200 — Refused
Over the ceiling. A successful call: the rail answered, and nothing was consumed or billed.
{
"allowed": false,
"reason": "ceiling_exceeded",
"remaining": 160
}
200 — Allowed
Within the mandate. The receipt records that the answer was given.
{
"allowed": true,
"reason": null,
"remaining": 160,
"receipt": {
"id": "rcpt_9f41c7b2",
"anchor": "0x7c3d91a4f8e2",
"url": "https://verify.sidaxis.com/r/9f41c7b2"
}
}
Refusal reasons
ceiling_exceeded, scope_mismatch, mandate_expired, mandate_revoked, counterparty_not_permitted. See errors and refusals.
Errors
not_found, rate_limited. See errors and refusals.
Notes
Never branch on the HTTP status to decide whether an action is permitted. Branch on allowed.
Median under 40 ms in every region.
A refused check is not billed and consumes nothing.
Idempotent: retrying with the same Idempotency-Key returns the original answer.