Get Subscription Checkout
GET/subscription-checkouts/:idDescription
Retrieve the current state of a subscription checkout intent. Use this to confirm whether the customer completed the subscribe flow before falling back to a success_url redirect.
Headers
| Header | Description | Required |
|---|---|---|
| Authorization | Bearer token with your API key | yes |
Path Parameters
| Name | Type | Description | Required |
|---|---|---|---|
| id | string | The subscription checkout ID (e.g. `schk_1234567890abcdef`). | yes |
Example Request
const response = await fetch(
'https://checkout-api.exodus-int.com/subscription-checkouts/schk_1234567890abcdef',
{
headers: {
Authorization: 'Bearer sk_live_xxxxxxxxxxxxxxxx',
},
},
);Response
SUCCESSFUL RESPONSE
{
"object": "subscription_checkout",
"id": "schk_1234567890abcdef",
"status": "completed",
"onchain_id": "0x9f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6f7a8b9c0d1e2f3a",
"business_name": "Acme Inc",
"subscriber": "0x742d35Cc6634C0532925a3b844Bc9e7595f8fE21",
"external_customer_id": "cus_42",
"subscription_options": [
{ "chain": "eip155:1", "token": "USDC", "subscription_manager_address": "0xa1b2c3d4e5f6789012345678901234567890abcd", "relayer_address": "0xd4e5f6a7b8c90123456789012345678901234ef1" },
{ "chain": "eip155:137", "token": "USDC", "subscription_manager_address": "0xb2c3d4e5f67890123456789012345678901234cd", "relayer_address": "0xe5f6a7b8c9d012345678901234567890123456f2" },
{ "chain": "eip155:42161", "token": "USDC", "subscription_manager_address": "0xc3d4e5f6789012345678901234567890123456cd", "relayer_address": "0xf6a7b8c9d0e12345678901234567890123456af3" }
],
"price": "9990000",
"price_currency": null,
"period_duration": 2592000,
"cap": "120000000",
"budget": "300000000",
"checkout_url": "https://checkout.exodus-int.com/subscribe/schk_1234567890abcdef",
"success_url": "https://merchant.com/subscribed",
"cancel_url": "https://merchant.com/cancelled",
"metadata": { "external_plan_ref": "pro_monthly" },
"expires_at": "2026-05-19T12:05:00Z",
"created_at": "2026-05-19T12:00:00Z",
"updated_at": "2026-05-19T12:02:18Z",
"completed_at": "2026-05-19T12:02:18Z",
"cancelled_at": null,
"expired_at": null,
"cancellation_reason": null
}Status-dependent fields
| Status | Populated fields |
|---|---|
pending | All base fields; subscriber may be null if not pre-bound; no completed_at/cancelled_at/expired_at. |
completed | subscriber, completed_at. Chain picked by the customer is reflected in the materialized Subscription. |
cancelled | cancelled_at, optional cancellation_reason. |
expired | expired_at. |
The intent response body does not carry a subscription id. The resulting Subscription (with the chain the customer picked) is delivered on the subscription_checkout.completed webhook — read its id from that payload, then fetch details via GET /subscriptions/:id. If you set a success_url, the hosted page also appends the on-chain subscription_id to that redirect.
Errors
| Status | Code | Description |
|---|---|---|
| 404 | not_found | Intent ID does not exist. |
| 403 | forbidden | Intent belongs to another merchant. |
Last updated on
