markets_read
Authority to read holdings and quotes. It places no orders.
{
"type": "markets_read",
"purpose": "Report the customer's portfolio position"
}
Reports holdings and quotes, and accepts an order only where the customer has separately authorised trading. Reading a portfolio and trading it are two different authorities.
This service is an illustration built on the CBA side of the boundary. It is not a Raidiam product. It exists to show what a resource server can demand of an agent, and to show that a refusal can always be explained.
markets_readAuthority to read holdings and quotes. It places no orders.
{
"type": "markets_read",
"purpose": "Report the customer's portfolio position"
}
markets_tradeThe type the state changing tools name. It is published so a refusal is checkable against a declared requirement rather than looking arbitrary. Holding the reading authority never yields this one.
{
"type": "markets_trade",
"purpose": "Granted separately by the customer."
}
sub required The customer this authority was delegated over.root_grant optional The delegation this call belongs to, recorded on every decision.act optional The RFC 8693 actor chain, recorded on every decision.cnf.jkt optional The thumbprint of the key the access token is bound to.authorization_details[markets_read] required The authority this resource acts on.| Tool | Purpose | Requires | Effect |
|---|---|---|---|
list_holdings |
The customer's holdings with unit counts and the last traded price. | markets_read |
read only |
quote |
The last traded price for a listed code. | markets_read |
read only |
place_order |
Place an order. Held for a named human to release; never executed by an agent alone. | markets_trade |
changes state |
Calls are accepted only with an access token issued by https://commsec.demo.cba.raidiam.io and addressed to this resource as its audience. A token minted for a different resource is refused even when it is otherwise valid.
Each tool names one authorization_details type. The token must carry that type, or an umbrella type that narrows to it. Holding a scope, or holding authority for a neighbouring resource, does not admit the call.
Revocation arrives as a Shared Signals event and is applied to the delegation, not to a single token. Every token issued under a revoked delegation is refused from that moment, whatever its expiry says.
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.
markets_read admits the reporting tools and nothing else. Placing an order names markets_trade, a separate capability type rather than a wider scope on the same one, so an agent holding read authority cannot reach trading by asking differently.
An order accepted here is held rather than executed, and a named human releases it. An agent may prepare a trade and may not complete one on its own, whatever authority it holds.
Every admission decision, allowed and refused, is recorded with the policy that decided it and the values it turned on. Read them at /decisions.