API Reference
Complete reference documentation for the Checkout API.
Base URL
All API requests should be made to:
https://checkout-api.exodus-int.comAuthentication
All API requests require authentication using your API key in the Authorization header.
headers: {
'Authorization': 'Bearer sk_live_xxxxxxxxxxxxxxxx'
}See the Authorization guide for complete details.
Pagination
The checkout, payment, subscription, subscription charge, subscription checkout, and webhook event list endpoints are cursor-paginated and take the same three parameters. Lists are returned newest first, and the order is not configurable. Endpoints that return a fixed set of configuration rows, such as GET /payments/settlement, are not paginated, and the payouts endpoints document their parameters on their individual pages.
| Parameter | Description |
|---|---|
limit | Rows per page. Each endpoint page documents the range and default. |
starting_after | An object id from a previous page. Returns the rows after it. |
ending_before | An object id from a previous page. Returns the rows before it. |
Each response carries object: "list", the rows in data, and a has_more boolean.
{
"object": "list",
"data": [{ "id": "chk_1234567890abcdef" }],
"has_more": true
}Omit both cursors to get the first page. To walk forward, take the last id of a page and pass it as starting_after. To walk back, take the first id and pass it as ending_before.
starting_after and ending_before are mutually exclusive. Sending both is a 400, since the two ask for opposite directions from different anchors and there is no sensible page to return:
{
"error": {
"type": "validation_error",
"message": "starting_after and ending_before are mutually exclusive",
"param": "ending_before"
}
}has_more is relative to the direction you are paging, not always forward. On a
starting_after page it means more rows exist after the returned set; on an ending_before page
it means more rows exist before it. This differs from Stripe, where has_more is always
forward-looking, so a client written against that definition will read it backwards on backward
pages. It lets you gate a Previous control off the same field you use for Next, but it never
reports the opposite direction, so track that yourself from whether you arrived via a cursor.
Endpoints
Checkouts
Create and manage one-time payment sessions.
| Endpoint | Description |
|---|---|
POST /checkouts | Create a checkout |
GET /checkouts/:id | Get checkout details |
GET /checkouts | List all checkouts |
POST /checkouts/:id/cancel | Cancel a checkout |
Subscription Checkouts
Single-use intents that authorize a customer to start a subscription. Customer pays the first charge and signs the on-chain authorization atomically; the resulting Subscription is the durable billing record.
| Endpoint | Description |
|---|---|
POST /subscription-checkouts | Create a subscription checkout |
GET /subscription-checkouts/:id | Get subscription checkout details |
GET /subscription-checkouts | List all subscription checkouts |
PATCH /subscription-checkouts/:id/cancel | Cancel a subscription checkout |
Subscriptions
Manage active subscriptions. Subscriptions are created when a customer completes a Subscription Checkout. There is no direct POST /subscriptions endpoint. Each charge is authorized with the @exodus/checkout-signer SDK; cap/budget raises are subscriber-authorized on-chain.
| Endpoint | Description |
|---|---|
GET /subscriptions/:id | Get subscription details |
GET /merchants/:merchantId/subscriptions | List all subscriptions |
POST /subscriptions/:id/charge | Charge a cycle |
POST /subscriptions/:id/charge-quote | Quote the next charge |
POST /subscriptions/:id/cancel | Cancel a subscription |
Subscription Charges
Per-attempt records of cycle charges. Both succeeded and failed attempts are persisted with a typed failure_reason for dunning and reconciliation.
| Endpoint | Description |
|---|---|
GET /merchants/:merchantId/charges | List subscription charges |
Payments
View payment details, capture and refund two-step payments, and recover stranded funds.
| Endpoint | Description |
|---|---|
GET /payments/:paymentId | Get payment details |
GET /payments | List all payments |
POST /payments/:paymentId/capture | Capture a payment |
POST /payments/:paymentId/refund | Refund a payment |
POST /payments/:paymentId/rescue | Rescue funds |
POST /payments/:paymentId/recover | Recover an expired payment |
GET /payments/settlement | View settlement config |
PUT /payments/settlement | Update settlement address |
Payouts (Beta)
Off-ramp crypto to a beneficiary’s bank account in fiat. See the Payouts overview.
Beneficiaries — bank accounts that receive fiat.
| Endpoint | Description |
|---|---|
POST /beneficiaries | Create a beneficiary |
GET /beneficiaries/:id | Get a beneficiary |
GET /beneficiaries | List beneficiaries |
Customers — people who send crypto, after a one-time KYC.
| Endpoint | Description |
|---|---|
POST /customers | Create a customer |
GET /customers/:id | Get a customer |
GET /customers | List customers |
Payouts — off-ramp transactions that move the funds.
| Endpoint | Description |
|---|---|
POST /payouts | Create a payout |
GET /payouts/:id | Get a payout |
GET /payouts | List payouts |
Reports
Export data as CSV for accounting and reconciliation.
| Endpoint | Description |
|---|---|
GET /reports/payments/export | Export payments as CSV |
GET /reports/subscriptions/export | Export subscriptions as CSV |
GET /reports/subscription-charges/export | Export subscription charges as CSV |
Settings
Read your business configuration and register the signer, settlement address, and webhook URL.
| Endpoint | Description |
|---|---|
GET /settings | Get settings |
POST /settings | Register the merchant signer |
PUT /settings | Update the settlement address |
PATCH /settings | Update the webhook URL |
POST /settings/webhook/secret | Regenerate the webhook secret |
POST /settings/webhook/test | Send a test webhook |
Webhooks
Receive real-time event notifications.
| Endpoint | Description |
|---|---|
GET /merchants/:merchantId/webhook-events | List webhook events |
See the Webhooks guide for event types, payload structure, and signature verification.
