Field names
The vocabulary source of truth: the field names the engine accepts, what changed from the earlier documentation, and the two rules that never bend.
Was / is
| Earlier documentation | The engine | Note |
|---|---|---|
scope | scopes | An array, on issuance |
until | expires_at | Mandatory on issuance |
data_release | data_share | One of the eight canonical scopes |
ceiling.period: once|day|month|year | ceiling.period: lifetime|daily|weekly|monthly | The bucket is computed server-side |
ceiling.amount: 200 | ceiling.amount: 4000 | Integer, minor unit — never a decimal |
counterparty_not_permitted | constraint_violated | One refusal reason for all constraints |
facetoken | removed | The identifier is the auth.users UUID minted by the engine |
Accepted on mandate-issue
| Field | Type | Means |
|---|---|---|
granted_by | uuid | The human who authorises |
granted_to | string | An opaque machine identifier — never the label a person reads |
granted_to_kind | enum | What kind of holder it is |
agent_display_name | string ≤64 | The readable name shown on authorisation, revocation and receipts |
agent_descriptor | string ≤140 | One line saying what the agent does |
scopes | array | Exact match, no wildcard, no dot-notation |
constraints | object | merchant_allowlist, category_allowlist, country_allowlist |
ceiling | object | kind: amount|count|both|none, amount, currency, count, period |
expires_at | timestamp | Mandatory |
step_up_of | uuid | The mandate this one steps up from |
proof.capture_id | string | A live capture no older than five minutes |
Two immutables
- Money is always an integer in the minor unit, in and out.
4000is forty dollars; a float is refused withAMOUNT_INVALID. - Recurrence lives in
ceiling.periodand nowhere else. There is no recurring scope, and no dot-notation in a scope.
Sidaxis is the human authorisation layer. It never moves money, holds funds or settles. The machine-readable contract is openapi.yaml.