Read a mandate
GET /functions/v1/mandate-get
One function, two shapes: a single mandate with its last 100 consumptions, or a list by effective status. Expiry is decided at read time, never by a cron.
| Query | Returns |
|---|---|
?id=<mandate_id> | One mandate plus its last 100 consumptions — the statement, free |
?status=active|consumed|exhausted|expired|revoked | A list by effective status |
curl "https://api.sidaxis.com/functions/v1/mandate-get?id=mdt_a91f3c" \
-H "x-sidaxis-api-key: sk_live_..." \
-H "x-sidaxis-timestamp: 1789564930" \
-H "x-sidaxis-nonce: 8fa0c31b77"Authorisation on every read
Unknown and unauthorised answer identically — 404 not_found — so nobody can probe for existence.
Effective status
expires_at compared against the server clock at read time is the authority, so a mandate reads expired even before the tidy-up job runs. stored_status shows the untouched row when it differs. Expiry never depends on a cron.
{
"mandate_id": "mdt_a91f3c",
"status": "active",
"stored_status": "active",
"scopes": ["payment"],
"ceiling": { "kind": "amount", "amount": 50000, "currency": "USD", "period": "daily" },
"remaining": 31100,
"period_resets_at": "2026-09-17T03:00:00Z",
"assurance_level": "face_voice_doc",
"agent_display_name": "Your travel assistant",
"expires_at": "2026-12-31T23:59:59Z",
"consumptions": [
{ "consumption_id": "cns_5b7e21", "amount": 18900, "action_ref": "booking-88213",
"created_at": "2026-09-16T12:01:42Z" }
]
}No pagination
There is no cursor pagination on this endpoint: no cursor, no next_cursor, no has_more. A single read returns the list by status and the last 100 consumptions. Cursor pagination is on the roadmap.
Sidaxis is the human authorisation layer. It never moves money, holds funds or settles. The machine-readable contract is openapi.yaml.