Skip to main content
In agentic commerce, a software agent acts for a user: it proves the user qualifies for a benefit, such as a member price, and hands the user’s identity to a merchant checkout. AIR provides the identity layer: a key bound to the user’s AIR Account, short-lived scoped sessions, server-side credential verification, and audience-restricted checkout tokens. This page explains each primitive, how they compose into a purchase journey, and what each party can and cannot verify.
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:
There are two ways to authenticate as that key: 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.
The signature can be DER or IEEE P1363 (ES256), in standard base64 or base64url. Send exactly one identity per request: the header or 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 adds openid. 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

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.
AIR Kit also exposes 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

A requested scope outside the bound set fails with 403 AGENT_SCOPE_DENIED.

3. Verify eligibility server-side

  • fieldsToDisclose omitted: an SD-JWT program discloses the claims it queries. "*" attaches every disclosable claim.
  • nonce is required when the credential has cnf.jwk. Every AIR-issued SD-JWT credential has it.
  • This endpoint accepts agent JWTs only. A user JWT gets 403.
Let the merchant generate the nonce when the merchant will verify the presentation itself. The KB-JWT then binds the presentation to the merchant’s challenge, and the agent cannot replay an old presentation.

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

With commerce.checkout, the agent mints a token for a supported merchant:
The request 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.

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.