Export Subscriptions
GET/reports/subscriptions/exportDescription
Export your subscriptions as a CSV file for reconciliation and analysis. Each row represents one subscription. Supports filtering by date range and subscription status.
The response is a text/csv file download. The endpoint is available to both API key holders and dashboard sessions.
Headers
| Header | Description | Required |
|---|---|---|
| Authorization | Bearer token with your API key. Required for API key authentication; omit when using dashboard session cookies. | no |
Query Parameters
| Name | Type | Description | Required |
|---|---|---|---|
| to | string | End of date range, inclusive. Format: YYYY-MM-DD. Interpreted as end of day UTC. Filters by subscription creation date. | yes |
| from | string | Start of date range, inclusive. Format: YYYY-MM-DD. Interpreted as start of day UTC. When omitted, no lower date bound is applied. When provided, the range cannot exceed 1 year. | no |
| status | string | Filter by subscription status. Repeatable. Omit to include all statuses. Valid values: active, cancelling, cancelled. | no |
CSV Columns
| Column | Description |
|---|---|
| subscription_id | Unique subscription identifier |
| onchain_id | On-chain subscription identifier |
| status | Subscription status: active, cancelling, cancelled |
| paused | Whether the subscription is paused (true/false) |
| cancel_at_period_end | Whether the subscription is set to cancel at the end of the current period (true/false) |
| subscriber | Subscriber wallet address |
| token | Payment token symbol (e.g. USDC) |
| price | Price per period, in token base units |
| price_currency | Price display currency, if set |
| cap_amount | Maximum total spend authorized, in token base units |
| period_duration | Billing period length in seconds |
| last_charged_at | Timestamp of the last charge (ISO 8601) |
| next_charge_at | Timestamp of the next scheduled charge (ISO 8601) |
| external_customer_id | Your external customer identifier, if set |
| created_at | Subscription creation timestamp (ISO 8601) |
Example Request
// Export active subscriptions created in 2026
const response = await fetch(
'https://checkout-api.exodus-int.com/reports/subscriptions/export?from=2026-01-01&to=2026-12-31&status=active',
{
headers: {
Authorization: 'Bearer sk_live_xxxxxxxxxxxxxxxx',
},
}
);
const csv = await response.text();// Export all subscriptions with no date lower bound
const response = await fetch(
'https://checkout-api.exodus-int.com/reports/subscriptions/export?to=2026-12-31',
{
headers: {
Authorization: 'Bearer sk_live_xxxxxxxxxxxxxxxx',
},
}
);Response
SUCCESSFUL RESPONSE (text/csv)
subscription_id,onchain_id,status,paused,cancel_at_period_end,subscriber,token,price,price_currency,cap_amount,period_duration,last_charged_at,next_charge_at,external_customer_id,created_at
0x9f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6f7a8b9c0d1e2f3a,0x9f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6f7a8b9c0d1e2f3a,active,false,false,0x742d35Cc6634C0532925a3b844Bc9e7595f8fE21,USDC,9990000,,120000000,2592000,2026-04-19T12:02:18.000Z,2026-05-19T12:02:18.000Z,cus_42,2026-02-19T12:02:18.000ZError Responses
MISSING REQUIRED PARAMETER
{
"error": {
"type": "validation_error",
"message": "to is required (format: YYYY-MM-DD)",
"param": "to"
}
}INVALID DATE FORMAT
{
"error": {
"type": "validation_error",
"message": "Invalid date format. Use YYYY-MM-DD",
"param": "from"
}
}INVALID DATE RANGE
{
"error": {
"type": "validation_error",
"message": "from must be before to",
"param": "from"
}
}DATE RANGE EXCEEDS 1 YEAR
{
"error": {
"type": "validation_error",
"message": "Date range cannot exceed 1 year. For larger exports, contact support.",
"param": "to"
}
}UNAUTHENTICATED
{
"error": {
"type": "authentication_error",
"message": "Authentication required"
}
}