AlyteAgent SDK client), MCP, or A2A — all three funnel
into the same server-side policy engine.
1 · Discover
state. Two matter for scheduling:
not_yet_on_salecomes with aretryAfter(seconds) — schedule a retry for the drop instead of polling.sold_outmay still change; the tier also links where a buyer can authorize a standing agent for it.
2 · Quote — the price lock
chargeMinor) is frozen
until expiresAt. All amounts are integer minor units. This quote is the
only place an amount exists — the agent never sends one.
3 · Reserve — the oversell-proof hold
allowPartial: true — only do that when your buyer
has accepted receiving fewer tickets; a partial hold reports
requestedQuantity and partialReason.
4 · Confirm — pay the locked quote
- Always pass a stable
idempotencyKeyper purchase intent. Retries with the same key can never double-charge — even across crashes. outcome.statusissettled, orsca_required(the buyer must approve a challenge — resume withagent.resolveSca(continueToken, 'approved')).- A refusal throws with a stable error
code— see Errors. A mandate refusal (spend cap, scope) means the buyer’s limits said no: surface it, don’t retry.

