Create MPP Order
Place an order and pay per request via the Machine Payments Protocol (MPP) — no Zinc account required.
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, suppressing prices on the packing slip. If the retailer's checkout offers no free gift option, the order FAILS with gift_option_unavailable rather than being placed as a normal order — a gift that arrives with prices visible to the recipient is treated as worse than no order.
Optional note for the recipient, entered into the retailer's gift-message field at checkout. Requires is_gift to be true. Max 240 characters. Delivered where the retailer's checkout offers a gift message; the order is still placed without it where one isn't available.
240Optional payment block. Omit for prepaid-wallet billing (default).
Opt in to emailing the end customer order updates (and unlock the public tracking page for this order). Adds a per-order surcharge. Omit for no customer notifications (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.
The retailer's own order number(s) for this order (e.g. an Amazon 113-… ID), as recorded when it was placed. Empty while processing, or if the order never reached the retailer.
Stripe Connect charge details when this order was paid via Connect; null for prepaid-wallet orders.
End-customer email-notification status when the order opted into the notifications add-on; null when it didn't.

