Skip to main content
A card alone doesn’t finish a checkout. Someone still has to find the merchant, log in, and place the order, and that’s what the Purchase API does. It’s one endpoint: the agent sends plain text, and we find the merchant, build the cart, and place the order with the user’s card.
The same call is the buy tool on the MCP server. Same behavior, same states.

Where agents can buy

Amazon and more than a dozen other large retailers, DoorDash, Uber Eats, Walmart, Sephora, TaskRabbit, Rinse, Good Eggs, Rappi, Locale, and flights. The list grows; buy itself tells the agent when a merchant needs the user to link their account first.

How a purchase actually flows

Every response has a status, and there are only four: Money never moves on a plain ask. When a cart is ready, the response includes the cart with an exact total and a hash. To place the order, the agent sends the hash back:
The hash covers the exact items and total that were shown. If anything about the cart changed since, the confirm fails safely instead of charging something the user never saw.

Give an agent access

Create a buy token for the user. It lasts 30 days and only works as that one user:
The same thing is available as mint_buy_token on MCP when connected as your organization. Hand the token to the agent; it’s the bearer for every buy call.

What it costs

Purchases carry a service fee, 2.5% of the merchant total, shown to the user in the cart before any confirm. The totals in needs_input replies are all-in: what the user sees is what the card is charged.

Spending controls and approvals

Budgets cap what an agent can spend. Cards can be locked to one merchant or one purchase. And when a purchase needs a human, the user gets an approval prompt and you receive approval.requested; the purchase waits for the yes.

Webhooks you will receive

  • transaction.authorized, then transaction.cleared as the payment settles
  • approval.requested when a purchase is waiting on the user
  • merchant.connected when a user links a merchant account

When it fails

A declined status always says why in the reply. A confirm with a stale hash returns a conflict instead of charging; re-ask to get a fresh cart. If the user has no usable card, buy says so and the fix is the wallet, not the Purchase API.

Sandbox behavior

Sandbox conversations run the same loop with no real orders and no real money. Use the org server’s test_charge to watch settlement events end to end. Next: Test in sandbox