Open a checkout
Opens a payment for a cart and answers with where to send the customer. **The response shape is identical for both methods:** `checkoutUrl` is the link the storefront's Pay button points at, whether the shopper pays by card or in USDC or USDG. **The customer completes the payment on the payment provider's own page.** putty never takes custody of the money: it never sees a card number, never holds a stablecoin, and never asks for a seed phrase. The stablecoin page shows an amount and a QR code — no wallet prompt, no token ticker the customer did not choose. `successUrl` and `cancelUrl` must be absolute https URLs on the shop's own host, and default to the shop's `/thanks` and `/cart` when omitted. A checkout that returns a customer somewhere else is telling them not to trust the payment, so it is refused. An order is recorded before the response is written, so a customer who sees a link always has an order behind it. A cart the provider refuses gets a 409 with every problem in `error.problems` and no checkout is opened.
Opens a payment for a cart and answers with where to send the customer. The response shape is identical for both methods: checkoutUrl is the link the storefront's Pay button points at, whether the shopper pays by card or in USDC or USDG. The customer completes the payment on the payment provider's own page. putty never takes custody of the money: it never sees a card number, never holds a stablecoin, and never asks for a seed phrase. The stablecoin page shows an amount and a QR code — no wallet prompt, no token ticker the customer did not choose. successUrl and cancelUrl must be absolute https URLs on the shop's own host, and default to the shop's /thanks and /cart when omitted. A checkout that returns a customer somewhere else is telling them not to trust the payment, so it is refused. An order is recorded before the response is written, so a customer who sees a link always has an order behind it. A cart the provider refuses gets a 409 with every problem in error.problems and no checkout is opened.
Authorization
bearerAuth A bearer token. The Account routes accept a Privy access token; the MCP transport accepts an sk- API key issued by POST /account/api-keys.
In: header
Request Body
application/json
The cart and the method to take it in.
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/business/checkout" \ -H "Content-Type: application/json" \ -d '{ "shopId": "string", "method": "card", "lines": [ { "productId": "string", "name": "string", "quantity": 1, "unitPriceUsd": "string" } ] }'{ "checkoutId": "string", "method": "card", "currency": "string", "totalUsd": "string", "checkoutUrl": "http://example.com", "expiresAt": "2019-08-24T14:15:22Z"}Read one order GET
The order's record: the cart as it was, the total, the payment provider's own session id, and whether the provider has reported it settled. An order on another shopkeeper's shop returns the same 404 as one that does not exist.
What this deployment can take GET
The payment methods this API has a provider wired for, and for each one the stablecoins it can settle. A storefront renders one Pay button per entry, so a deployment that has wired cards and not stablecoins shows one button rather than a dead second one. `configured` is false for a method with no provider — a card-only deployment is a legitimate state, and a stablecoin checkout on it is refused with a 503 and a sentence rather than failing deeper.