/agent/orders endpoint, allowing AI agents to place orders and pay in a single request flow — no Zinc account or API key required.
Why MPP?
Traditional API integrations require account setup, API keys, and a pre-funded balance. MPP removes these steps by embedding payment directly into the HTTP request cycle:- No account needed — Agents pay per-request using standard HTTP headers
- Multiple payment methods — Stripe cards/wallets, Tempo stablecoins, and more
- Built for agents — Designed for automated, machine-to-machine payment flows
How It Works
MPP uses an HTTP 402 challenge-credential-receipt flow:Receive payment challenge
Zinc responds with HTTP
402 Payment Required and WWW-Authenticate headers describing available payment methods and the amount due.Complete payment
The MPP client completes payment through the chosen method (e.g., Stripe checkout, Tempo transfer) and receives a credential.
Resubmit with credential
The agent resubmits the original request with the payment credential in the
Authorization header.Order confirmed
Zinc validates the payment receipt and processes the order, returning a
201 response with order details and two important headers:X-Api-Key— A temporary API key the agent can use to check order status viaGET /orders/{id}without repeating the payment flow.Payment-Receipt— The MPP payment receipt confirming the charge.
Checking Order Status
The201 response includes an X-Api-Key header containing a temporary API key. Use this key to poll the order status without going through the 402 payment flow again:
The
X-Api-Key is scoped to the order it was issued for. Store it after placing the order so your agent can track fulfillment progress.Quick Start
Install an MPP Client
MPP client libraries handle the 402 flow automatically. Official SDKs are available in TypeScript, Python, and Rust.Place an Order
The easiest way to test is with themppx CLI, which handles the 402 payment flow automatically:
Supported Payment Methods
| Method | Description |
|---|---|
| Stripe | Cards and wallets via Stripe |
| Tempo | Stablecoin payments via Tempo |
The available payment methods are returned in the
WWW-Authenticate headers of the 402 response. Your MPP client will automatically select a compatible method.Using Stripe with MPP
The MPP client libraries (mppx, pympp) abstract over payment methods. If you’d rather integrate with Stripe directly — for example, minting Shared Payment Tokens (SPTs) via the Stripe Link API or link-cli — here’s the wire-level flow.
1. Request the challenge
POST your order to/agent/orders with no Authorization header:
WWW-Authenticate header per configured payment method. Pick the one containing method="stripe":
request value is a base64-encoded JSON blob whose methodDetails.networkId is the Stripe agentic-commerce profile ID — you’ll pass it to Stripe when minting the SPT.
2. Mint a Shared Payment Token
Use the Stripe Link API — directly or vialink-cli — to mint an SPT bound to this challenge:
The spend-request amount must equal
max_price + $1.00. The extra dollar is the Zinc API fee, baked into the challenge so that the full max_price remains available to the retailer.3. Resubmit with the credential
Reissue the original POST, this time with anAuthorization: Payment <credential> header:
Credential object containing:
- A
ChallengeEchoechoing the exact fields from the challenge in step 1 (id,realm,method,intent,request,expires,digest) - A
payloadof{"type": "spt", "shared_payment_granted_token": "<spt_xxx>"}
pympp’s helpers:
X-Api-Key header for polling status, and a Payment-Receipt header confirming the verified MPP receipt.
Order Lifecycle and Refunds
MPP orders include automatic safeguards so agents aren’t charged for orders Zinc can’t (or doesn’t) fulfill.Validation runs before payment
When you submit an order with a payment credential, Zinc validates the order data — product URLs, retailer support, shipping country, and address — before charging the credential. A validation failure returns HTTP 400 with no charge applied to the credential, leaving the SPT untouched and reusable for a corrected retry. This applies to all MPP methods, not just Stripe.Automatic refunds (Stripe)
For orders paid via Stripe, the agent authorizesmax_price + $1.00 API fee upfront. Zinc then refunds the credential automatically in two cases:
- Partial refund — When the retailer’s actual total comes in below
max_price, Zinc refunds the difference via the Stripe PaymentIntent. The agent effectively paysactual_total + $1.00. - Full refund — If the order ultimately fails (status
failed— e.g., the retailer rejects the order, the item is out of stock, etc.), Zinc refunds the entire charged amount.
Refunds are issued server-side against the original Stripe PaymentIntent and follow Stripe’s standard settlement timelines. No agent-side action is required.
Next Steps
MPP Playground
Try placing an MPP order in our interactive playground.
API Reference
See the full API spec for the MPP order endpoint.
MPP Specification
Read the full MPP protocol specification.

