Resolution Flow
This page traces a proposed action from the moment an agent callsinquire to the moment the agent receives a signed verdict. It covers what the user experiences and the states a Q card moves through.
The user journey
1
A BotShield Q push arrives
When the agent proposes an action, BotShield sends the user a BotShield Q push notification to the BotShield app. The notification is intentionally thin: it carries the
request_id, the agent’s display name, and the action summary. It does not carry the card body.2
The user opens the Q card
In the app, the action appears as a Q card describing what the agent wants to do — the summary title, an optional detail row (e.g.
TOTAL · $48.00), the requesting agent, the Trusted Account the action would use, and the time remaining before it expires. The header reads “BotShield Q” whenever cards are waiting.3
The user stages a decision
The user taps Confirm or Deny. A user can stage decisions across several pending cards and resolve them together.
4
Biometric ceremony
The user completes a single Face ID / Touch ID ceremony (hardware-backed, via the Secure Enclave). One ceremony can resolve N staged cards at once.
5
Proof of Resolution issued
On a successful ceremony, BotShield signs one Proof of Resolution per card and delivers it back to each card’s agent. The cards move to their terminal state.
One ceremony, N proofs. When a user confirms several cards in one Face ID touch, every resulting Proof of Resolution shares the same
ceremony_id — but each is independently verifiable by its own agent, and no agent sees another agent’s proof.Q card states
A Q card has a single, terminal lifecycle. Once it leavesqueued, it never returns.
How the agent learns the outcome
The agent receives the result two ways — use whichever fits:- Poll. Call
agentlink/check-statuswith the samerequest_id. Once the card resolves, the response carries theresolution_jwtandverdict. - Webhook. BotShield fires a Svix-signed webhook —
q.resolution.confirmed,q.resolution.denied, orq.resolution.expired— to your registered endpoint. This is push, not poll, and is delivered with retries. (These events are defined but not yet firing for agent-proposed cards in the current build — poll for now.)
Cancellation and expiry
- Cancel is agent-initiated. Call
agentlink/cancelwhile the card is stillqueuedto withdraw it. It is a no-op (idempotent) if the card has already resolved. - Expiry is automatic. A periodic internal sweep marks every
queuedcard past itsttl_atasexpiredand firesq.resolution.expired. The default TTL is 10 minutes; agents may request[60, 86400]seconds.
Failed biometric
If the biometric ceremony fails (wrong face, cancelled prompt), no Proof of Resolution is produced and the staged cards remainqueued — the user can simply retry. A failed ceremony is architecturally identical to a timeout: an absence of attestation, never a denied.
Next steps
Proof of Resolution
The signed artifact: claims, JWKS verification, and webhook payloads.
Q API Reference
Every operation with request and response shapes.