transfer.status
Read the status of a transfer.
{
"type": "transfer.status"
}
A synthetic transfer ledger behind two detail types: read the status of a transfer, or initiate one. The amount is checked against the granted ceiling here, again, before value moves.
Reference implementation, built to demonstrate integration. Operated by Tarnbrook Platforms in the tarnbrook-agents domain. It exists to show what a resource can demand of an agent, and to show that a refusal can always be explained.
transfer.statusRead the status of a transfer.
{
"type": "transfer.status"
}
transfer.initiateMove value between accounts under a ceiling.
{
"type": "transfer.initiate",
"instructed_amount": {
"amount": "250.00",
"currency": "GBP"
},
"source_account": "acct-source",
"destination_account": "acct-destination",
"max_amount": {
"amount": "1000.00",
"currency": "GBP"
}
}
sub required The agent the authorization server admitted, or the person on whose authority it acts.authorization_details required The RFC 9396 grant. Each tool names the detail type it requires.act optional The RFC 8693 actor chain when the token was exchanged.cnf optional The DPoP key thumbprint when the token is sender constrained.trace_id optional The trace id of the run, echoed on every decision.| Tool | Purpose | Requires | Effect |
|---|---|---|---|
transfer_status |
Read the status of a transfer. | transfer.status |
read only |
initiate_transfer |
Move value between accounts, checked against the granted ceiling before value moves. | transfer.initiate |
changes state |
Calls are accepted only with an access token issued by https://api.agents.showcase.raidiam.io, addressed to this resource as its audience, and verified against keys that the walked chain from that server to the pinned trust anchor vouches. A token minted for a different resource, or signed with a key the chain does not publish, is refused even when it is otherwise valid.
Each tool names one authorization_details type. The token must carry that type, or a type that narrows to it in the published type tree. Holding a scope, or holding authority for a neighbouring resource, does not admit the call.
A DPoP proof is verified whenever one is presented, and is required whenever the access token names a key in its cnf.jkt claim. Each proof is accepted once, so a captured proof cannot be replayed.
Arguments are validated before any business rule runs, and the refusal names the argument at fault rather than returning a bare failure.
A transfer.initiate grant carries max_amount, the ceiling the accountable person approved. The instructed amount is compared against it here, in minor units, after the platform has already done so at the token endpoint. The resource also holds a per transaction limit of its own. The refusal names the ceiling that bound. A grant without a max_amount admits no transfer.
When the grant names a source or destination account, the instruction must name the same one. A grant that names neither leaves the accounts to the instruction.
Every admission decision, allowed and refused, is recorded with the checks that ran, the policy that decided it and the values it turned on. Read them at /decisions, or one run at a time by trace id.