Retrieve a checkout
Get a checkout's address, amounts and confirmations while the customer pays.
Public. Read it every few seconds while the customer pays: progress runs on elapsed time, so each read brings it up to date.
Path
idstring RequiredThe checkout's ID, such aschk_C5yhPQvPqpYgdDgj.
Fields to know
breakdownobjectWhat the customer pays, row by row, in minor units ofcurrency: theprice, theprocessing_feewhen the business passes 402pay's fee on (nullotherwise), an estimatednetwork_feefor crypto, which the customer's wallet pays in the network's own coin on top ofcrypto.amount(nullfor cards or without an estimate), and theirtotal.crypto.amountcovers the price and the processing fee, never the network fee.remainderbooleantruewhen the checkout collects the rest of an underpaid payment, whichpayment_idnames.cardobjectFor card payments,payment_urlopens the secure payment page andcan_retrysays whether checkout can offer another attempt.nullfor crypto. Open the URL unchanged in a browser tab; do not construct its parameters or embed it in an iframe. The hosted checkout handles this automatically.canceled_bystringcustomer, orbusinesswhen you canceled its API payment.nulluntil the checkout is canceled.replaced_bystringThe sibling quote whose transfer closed this one, when the customer went back and the funds landed on the quote they had left; open it instead.nullotherwise.
With your secret key
emailstringThe customer's email, or null when checkout hasn't collected one.reportingobjectThe checkout'samount,fee,transaction_fee,customer_feeandnetin US cents: the price, 402pay's rate on it, the flat fee (0 on a remainder, since its payment counts it once), what the customer pays toward the fees, and what you keep (amountpluscustomer_feelessfeeandtransaction_fee).fee_rate_bpsintegerThe fee rate for the checkout's rail, in basis points.
Review reasons
A checkout in needs_review says why in review_reason, and its payment is needs_review too.
| review_reason | Meaning |
|---|---|
late | The transfer arrived after the checkout expired, so the rate it was quoted at no longer held. |
wrong_network | The transfer arrived on another EVM network at the same address. The checkout's crypto.detected_network and the payment's method.network name it. |
claimed | The customer said they paid, with a transaction hash, after the checkout closed. |
Errors
- 404
not_foundNo checkout has that ID.
Any request can also fail on its key or its body. See errors.
Request
curl "https://dash.402pay.co/api/v1/checkouts/chk_C5yhPQvPqpYgdDgj"Response
{ "data": { "id": "chk_C5yhPQvPqpYgdDgj", "kind": "checkout", "status": "open", "rail": "crypto", "link_id": null, "payment_id": "pmt_QI02vLdJGd48hBbg", "amount": 4900, "currency": "USD", "breakdown": { "currency": "USD", "price": 4900, "processing_fee": null, "network_fee": 2, "total": 4902 }, "crypto": { "asset": "USDC", "network": "polygon", "amount": "49.00", "address": "0x9a3c416D4A81669C01f4515bBDEB93C45d3813fe", "payment_uri": "ethereum:0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359@137/transfer?address=0x9a3c416D4A81669C01f4515bBDEB93C45d3813fe&uint256=49000000", "rate": { "amount": 100, "currency": "USD" }, "received_amount": "0.00", "remaining_amount": null, "remaining_payment_uri": null, "overpaid_amount": null, "detected_network": null, "tx_hash": null, "explorer_url": null }, "card": null, "confirmations": { "current": 0, "required": 4 }, "remainder": false, "canceled_by": null, "replaced_by": null, "failure_code": null, "review_reason": null, "success_url": "https://example.com/thanks", "expires_at": "2026-09-26T21:37:47.047Z", "sent_at": null, "created_at": "2026-09-26T21:22:47.047Z", "updated_at": "2026-09-26T21:22:47.047Z" }}