Prerequisites
- Verified order intent — follow Create an Agent Card and wait for a rail with
status: "active". - Crossmint API key — a client-side key with
order-intents.readandorder-intents.credentialsscopes. In staging, all scopes are included by default. - User JWT — use the JWT for the user who owns the order intent.
Mint a Card-Network Credential
Find theagentic-token rail you want to use and confirm that it is active and supports card credentials. Other rails can remain pending. Send the selected rail’s rail and provider values back in the request.
This example continues from the merchant-scoped order intent created in the previous guide, so the credential request does not repeat the merchant:
Open Order Intents
IforderIntent.merchant is absent, include a merchant in every credential request:
Mint an Encrypted Card
When the order intent’srails array contains an encrypted-card entry, the response cannot contain a network-issued one-time card. Instead, the user’s saved card is encrypted inside the PCI-compliant vault to a public key that you control, and Crossmint returns the ciphertext. Only the holder of the matching private key can read the card.
Generate a Key Pair
Generate an RSA key pair of at least 2048 bits for theRSA-OAEP-256 algorithm. Keep the private key wherever the agent will decrypt the card; only the public key is sent to Crossmint.
Request the Encrypted Card
Send the public key as a JWK with only thekty, n, and e members. The encrypted-card rail has no provider, and the request takes no amount or merchant:
Decrypt the Card
The JWE usesRSA-OAEP-256 for key encryption and A256GCM for content encryption. Decrypt it with your private key using a JOSE library. The plaintext is a JSON object with the same fields as a card-network credential:
amount and merchant.
Encrypted Card Errors
A malformed request, such as a
publicKey whose kty is not RSA or whose encoded n is shorter than 342 base64url characters, fails schema validation before the vault is called and returns a 400 without an order-intent error code. Other unusable RSA keys can reach the vault and return ORDER_INTENT_INVALID_PUBLIC_KEY.
List Order Intents
List every order intent owned by the authenticated user:GET /api/unstable/order-intents/{orderIntentId} when you only need to refresh one order intent.
Common Gotchas
The request amount must fit the available balance
The request amount must fit the available balance
Use the same currency as the order intent and keep the requested value at or below
amount.available.Creating a credential spends allowance capacity
Creating a credential spends allowance capacity
Do not retry a credential request blindly. Each successful mint is a new credential and consumes the requested amount.
A pending rail cannot mint credentials
A pending rail cannot mint credentials
Complete allowance verification for the rail you selected and fetch the order intent again before minting. You do not need to verify unrelated rails.
Open order intents require a merchant
Open order intents require a merchant
If the order intent was created without
merchant, include one in every credential request. If the merchant was set at creation, omit it when minting. This applies only to agentic-token rails; the encrypted-card request takes no merchant.Encrypted cards use a different request shape
Encrypted cards use a different request shape
Do not send
provider, amount, or merchant with rail: "encrypted-card". Send only credential.format and credential.publicKey. Requests with unknown fields are rejected.Next Steps
Cancel Card Access
Cancel an order intent or delete a saved card
Cards Quickstart
Run the complete flow in the reference app

