Create MPP Order
Place an order via the Machine Payments Protocol (MPP)
How It Works
- Send Order Request - Submit an order to
/agent/orderswith product and shipping details - Payment Challenge - If no valid payment credential is provided, the API returns HTTP
402with payment challenges for all configured methods - Submit Payment - Include a valid MPP payment credential in the
Authorizationheader - Order Processing - Once payment is confirmed, the order is queued for processing
OrderCreate request body as the standard Create Order endpoint. The only difference is how authentication and payment are handled.Payment is the gate
Payment — not request validation — is the gate on this endpoint. The body is parsed leniently so that an unpaid request reaches the402 payment challenge instead of being rejected first by schema validation. This means an automated MPP discovery probe can send no body, an empty body, or a partial body and still receive the 402 challenge describing how to pay.
The body is only validated strictly once a valid payment credential is present. After paying, send a complete, valid OrderCreate body — an incomplete one will then be rejected with a 422.
Payment Methods
MPP supports multiple payment methods via the HTTP 402 challenge-credential flow:- Stripe - Cards and wallets
- Tempo - Stablecoins
WWW-Authenticate headers describing the available payment challenges. Your MPP client uses these to complete payment and resubmit the request.
402 Payment Required
If no valid payment credential is provided, the API returns402 Payment Required with WWW-Authenticate headers describing the available payment methods.
Response Headers
Headers
Query Parameters
Restrict the 402 to a single payment method (e.g. 'stripe', 'tempo', or 'x402'). Omit to advertise every configured method. Use this when your client can satisfy only one rail — it avoids returning multiple WWW-Authenticate challenges, which many HTTP clients mishandle.
Body
Request model for creating a new order.
Shipping address model.
Supports international addresses. The state field is optional for countries
that don't use states/provinces. The country field uses ISO 3166-1 alpha-2
country codes (e.g., "US", "CA", "GB", "DE").
Maximum price (in cents) allowed for an order before it is finalized.
Optional idempotency key to prevent duplicate orders. If not provided, one will be generated.
36Optional short ID (e.g., 'zn_acct_XXXXXXXX') of specific retailer credentials to use for this order. If not provided, credentials will be selected automatically.
Optional metadata to attach to the order. Can contain arbitrary key-value pairs.
Optional purchase order number for the order.
Optional ceiling on a seller's shipping and handling days. Omit or send null for no limit.
x >= 1Mark the order as a gift. Prices are suppressed on the packing slip where the fulfillment method supports it.
Optional payment block. Omit for prepaid-wallet billing (default).
Response
Successful Response
Response model for order data.
pending, in_progress, order_placed, order_failed, cancelled, cancelled_by_retailer Fulfillment result and price breakdown for a completed or failed order; null while processing.
Stripe Connect charge details when this order was paid via Connect; null for prepaid-wallet orders.

