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, as decimal strings incurrency: theprice, theprocessing_fee(nullwhen there is none), 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 anyprocessing_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_feeandnetas decimal strings in US dollars.amountis the price, andnetisamountpluscustomer_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://api.402pay.co/api/v1/checkouts/chk_C5yhPQvPqpYgdDgj"const response = await fetch("https://api.402pay.co/api/v1/checkouts/chk_C5yhPQvPqpYgdDgj");
const { data } = await response.json();import requests
response = requests.get(
"https://api.402pay.co/api/v1/checkouts/chk_C5yhPQvPqpYgdDgj",
)
data = response.json()["data"]Response
{
"data": {
"id": "chk_C5yhPQvPqpYgdDgj",
"kind": "checkout",
"status": "open",
"rail": "crypto",
"link_id": null,
"payment_id": "pmt_QI02vLdJGd48hBbg",
"amount": "49.00",
"currency": "USD",
"breakdown": {
"currency": "USD",
"price": "49.00",
"processing_fee": null,
"network_fee": "0.90",
"total": "49.90"
},
"crypto": {
"asset": "USDC",
"network": "ethereum",
"amount": "49.00",
"address": "0x9a3c416D4A81669C01f4515bBDEB93C45d3813fe",
"payment_uri": "ethereum:0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48@1/transfer?address=0x9a3c416D4A81669C01f4515bBDEB93C45d3813fe&uint256=49000000",
"rate": {
"amount": "1.00",
"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": 2
},
"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"
}
}{
"data": {
"id": "chk_BV9TkjSIsguX6RNU",
"kind": "checkout",
"status": "completed",
"rail": "card",
"link_id": null,
"payment_id": "pmt_wTlCzIlsyPJmYDCn",
"amount": "49.00",
"currency": "USD",
"breakdown": {
"currency": "USD",
"price": "49.00",
"processing_fee": "1.96",
"network_fee": null,
"total": "50.96"
},
"crypto": {
"asset": "USDC",
"network": "solana",
"amount": "50.72",
"address": "DByH4SLDQ7beybEaCy8t8p1y5fF81Dnfq1EdHyfN7Rhi",
"payment_uri": "solana:DByH4SLDQ7beybEaCy8t8p1y5fF81Dnfq1EdHyfN7Rhi?amount=50.72&spl-token=EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
"rate": {
"amount": "1.00",
"currency": "USD"
},
"received_amount": "50.72",
"remaining_amount": null,
"remaining_payment_uri": null,
"overpaid_amount": null,
"detected_network": null,
"tx_hash": "5QSUHU3JWDNDQQLw3YRiFERpnezFkyM5bXr4UMccFpfHACJa7NAY8Gptbj59BHpoA1z1SrGS74KQAL7tHgbA99zu",
"explorer_url": "https://solscan.io/tx/5QSUHU3JWDNDQQLw3YRiFERpnezFkyM5bXr4UMccFpfHACJa7NAY8Gptbj59BHpoA1z1SrGS74KQAL7tHgbA99zu"
},
"card": {
"payment_url": "/checkout/uu5fx45hz6/card/chk_BV9TkjSIsguX6RNU?attempt=att_example_2",
"can_retry": true
},
"confirmations": {
"current": 2,
"required": 2
},
"remainder": false,
"canceled_by": null,
"replaced_by": null,
"failure_code": null,
"review_reason": null,
"success_url": "https://example.com/thanks",
"expires_at": "2026-09-27T18:42:25.311Z",
"sent_at": null,
"created_at": "2026-09-27T18:12:25.108Z",
"updated_at": "2026-09-27T18:12:31.523Z"
}
}