paid_late event but may require manual reconciliation.
You can create sessions in two modes: link mode, which ties the session to an existing payment link and inherits its price, or ad-hoc mode, which lets you specify a custom fiat amount inline without a payment link.
The CheckoutSession object
Unique identifier for the checkout session. Format: UUID.
Always
"checkout_session".The ID of the payment link this session was created from.
null for ad-hoc sessions.Current payment status. One of:
| Value | Description |
|---|---|
pending | Waiting for a blockchain transaction to be detected. |
detected | A transaction has been seen in the mempool but is not yet confirmed. |
paid | Payment received and confirmed in full. |
underpaid | A confirmed transaction was received, but for less than the required amount. |
overpaid | A confirmed transaction was received for more than the required amount. |
expired | The session TTL elapsed before payment was received. |
paid_late | Payment arrived after the session expired. |
failed | An unrecoverable error occurred during payment processing. |
The Ethereum address the customer must send funds to. Unique per session.
The crypto amount the customer must send.
The original fiat price this session was priced at.
The ETH/USD exchange rate used to calculate
amount.wei at session creation time, e.g. "3318.50".ISO 8601 timestamp after which the session is considered expired and the address will no longer accept new payments.
ISO 8601 timestamp of when the payment was confirmed.
null until the session reaches a paid state.The Ethereum transaction hash of the payment.
null until a transaction is detected.The EVM chain ID on which the deposit address is valid, e.g.
1 for Ethereum mainnet.Arbitrary key-value pairs you attached at session creation, e.g.
{ "orderId": "99" }. Useful for reconciliation. null if not set.URL to redirect to after a successful payment. Overrides the parent link’s
successUrl if set.URL to redirect to if the customer cancels. Overrides the parent link’s
cancelUrl if set.Generic return URL used when neither success nor cancel URLs apply.
Email address of the customer, used to look up or create a customer record.
null if not provided.true if this session was created with a live-mode API key; false for test mode.The fully-qualified URL of the hosted checkout page, e.g.
https://your-domain.com/checkout/cs_01HABC. Send customers here to complete payment.ISO 8601 timestamp of when the session was created.
ISO 8601 timestamp of the most recent status change.
POST /checkout_sessions
Creates a new checkout session. Returns the session object with a201 status on success.
Required scope: sessions:write
Link mode
Use link mode when you want to associate the session with an existing payment link. The fiat amount and currency are pulled directly from the link.The ID of the payment link to create this session from. The link must exist and have
active: true.Email address of the customer. Used to associate the session with a customer record and populate the checkout form.
Up to 50 key-value pairs you want to attach for reconciliation. Values must be strings or numbers.
Override the link’s
successUrl for this specific session.Override the link’s
cancelUrl for this specific session.A generic return URL for when no specific success or cancel URL applies.
Ad-hoc mode
Use ad-hoc mode to create a one-off session with a custom fiat amount, without a payment link.The fiat price for this session.
Email address of the customer.
Arbitrary key-value pairs for reconciliation.
HTTPS URL to redirect to after payment.
HTTPS URL to redirect to on cancellation.
Generic return URL.
Example request — link mode
Example request — ad-hoc mode
Example response 201
GET /checkout_sessions
Returns a cursor-paginated list of checkout sessions ordered by creation time, most recent first. Required scope:sessions:read
Query parameters
Number of results to return. Between
1 and 100. Defaults to 25.A session
id used as a pagination cursor. Returns sessions created before this one.Filter by session status. One of
pending, detected, paid, underpaid, overpaid, expired, paid_late, or failed.Filter sessions to those created from a specific payment link ID.
ISO 8601 datetime. Only return sessions created at or after this time.
ISO 8601 datetime. Only return sessions created at or before this time.
Example request
Example response 200
GET /checkout_sessions/{id}
Retrieves a single checkout session by its ID. Required scope:sessions:read
Path parameters
The ID of the checkout session to retrieve.
Example request
To receive real-time status updates instead of polling, register a webhook endpoint and listen for
session.* events. See the Webhook Endpoints API for details.