AIR Agent currently delegates identity only. An agent binding never grants wallet signing (
wallet.sign), a spending mandate, or access to the user’s assets. Delegation credentials (fine-grained, per-task grants) and wallet delegation are not yet released.Four separate authorities
A merchant deciding on an agent’s request answers four independent questions. AIR answers the first three. The fourth stays with the merchant’s payment flow.
Holding one never implies another. A valid agent key does not prove eligibility. A verified Gold tier does not authorize a purchase.
Identity primitives
Agent key (the binding)
A user binds an agent once. The binding is an agent key record on the user’s AIR Account:
With an agent-held key, the agent signs the canonical message
agent_pubkey:userId:unixEpochTime (time in seconds) with ECDSA P-256. userId is the user’s AIR user ID.
signedMessage. The timestamp in the message limits how long a captured signature stays useful.
Scopes
Scopes are fixed when the key is bound. AIR always addsopenid.
To widen scopes, get the user’s approval, bind a new key, and revoke the old one.
Tokens
Each session can request a narrower scope than the key holds. A
verify operation does not need a token that can also start checkouts.
Host topology and headers
Binding needs both the user’s session token and a partner-signed JWT. A partner cannot bind an agent to a user who is not signed in, and a stolen user token cannot bind without the partner’s key.
End-to-end journey: member price to checkout
1. Bind (once, with consent)
There are two delegation journeys:- Through the AIR app (standard): the user approves the agent in the AIR app. Contact the AIR team to learn more.
- Within your application (partner-managed, shown here): your app collects consent and your backend binds the key. Contact the AIR team to enable it. Agent keys must be enabled for your partner account, or AIR API calls return
403 AGENT_KEYS_DISABLED.
getAgentKeys, registerAgentKey, and removeAgentKey, which run in the user’s own session.
In the partner-managed route, the bind request has no approval screen of its own. Your application must show the agent’s nickname and each requested scope, collect approval, and keep a record of it.
2. Open a scoped session per operation
403 AGENT_SCOPE_DENIED.
3. Verify eligibility server-side
fieldsToDiscloseomitted: an SD-JWT program discloses the claims it queries."*"attaches every disclosable claim.nonceis required when the credential hascnf.jwk. Every AIR-issued SD-JWT credential has it.- This endpoint accepts agent JWTs only. A user JWT gets
403.
4. Hand evidence to the merchant
The merchant chooses its trust model:
The checks are the same as for any verifier. See Checking a presentation.
5. Checkout handoff
Withcommerce.checkout, the agent mints a token for a supported merchant:
scope names the merchant checkout target, not an agent scope. pivota.checkout is currently the only supported value. The JWT’s aud is the merchant mapped to that target, and it carries the user’s AIR Account (abstract account) address. The merchant must check aud. AIR and the Credential API reject the token because of its audience, so a leaked checkout token cannot be used to read or verify credentials.
The checkout token identifies the user to the merchant. Ordering and payment follow the merchant’s own approval and payment flow.
Key lifecycle
To disconnect an agent immediately, rotate, then revoke. Rotation kills outstanding JWTs, and revocation stops new ones. Each user has a limited number of agent keys. Binding past the limit returns
409 CONFLICT_REQUEST.
Threat model
Error semantics that matter for commerce
Security properties
Not provided today:
- Per-merchant, per-claim, or per-action grants. Scopes are coarse.
- Spending limits or payment authority.
- A signed verification result for third parties other than the SD-JWT itself.
Design rationale
- Bind once, mint per operation. The long-lived secret, the API key, never leaves the agent backend. What travels is a 15-minute token that cannot be refreshed.
- Identity separated from payment. A compromised identity binding cannot move money, because AIR holds no payment authority to delegate.
- Merchant-chosen nonce. It makes eligibility evidence fresh and specific to one merchant without a direct AIR-to-merchant integration.
- Audience-restricted checkout. The token that leaves AIR’s ecosystem is useless anywhere but its merchant.
Roadmap boundary
Delegation credentials (not yet released) would record a per-task grant: granting user, delegate agent, permitted claims, receiving application, duration, and permitted action. The receiving application would check the grant alongside the user’s claims. Wallet delegation for Web3 use cases is planned separately. Neither exists in the current Agent APIs.Related
How credential verification works
The checks a merchant runs on the presentation.
Keys & cryptography
Every key and token in the system.
Using Agentic Identity
Step-by-step integration guide.
Agent APIs reference
Endpoints, headers, and errors.