Skip to Content

Export Payments

GET/reports/payments/export

Description

Export your payment history as a CSV file. Each row represents one payment and includes the associated checkout’s fiat amount, currency, and customer email. Supports filtering by date range and payment status.

The response is a text/csv file download. The endpoint is available to both API key holders and dashboard sessions.

Headers

HeaderDescriptionRequired
AuthorizationBearer token with your API key. Required for API key authentication; omit when using dashboard session cookies.no

Query Parameters

NameTypeDescriptionRequired
tostringEnd of date range, inclusive. Format: YYYY-MM-DD. Interpreted as end of day UTC.yes
fromstringStart 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
statusstringFilter by payment status. Repeatable. Omit to include all statuses. Valid values: client_deposit_pending, client_deposit_detected, client_deposit_confirmed, client_deposit_expired, escrow_confirmed, settled, failed, refunded.no

CSV Columns

ColumnDescription
payment_idUnique payment identifier
checkout_idAssociated checkout identifier
created_atPayment creation timestamp (ISO 8601)
statusPayment status
methodPayment method: DIRECT, TWO_STEP, GRATEFUL
tokenCrypto token used (e.g. USDC, DAI, USDT)
networkBlockchain network (e.g. base, arbitrum, polygon)
token_amountAmount in token units
deposit_addressOn-chain deposit address
payer_addressPayer wallet address
on_chain_idPayment contract on-chain identifier (distinct from transaction hashes such as deploy_tx_hash)
checkout_amountCheckout fiat amount
checkout_currencyCheckout fiat currency (e.g. USD, EUR)
customer_emailCustomer email from the checkout

Example Request

// Export settled payments from January 2024
const response = await fetch(
  'https://checkout.exodus.com/reports/payments/export?from=2024-01-01&to=2024-01-31&status=settled',
  {
    headers: {
      Authorization: 'Bearer sk_live_xxxxxxxxxxxxxxxx',
    },
  }
);
 
const csv = await response.text();
// Export all payments with no date lower bound
const response = await fetch(
  'https://checkout.exodus.com/reports/payments/export?to=2024-12-31',
  {
    headers: {
      Authorization: 'Bearer sk_live_xxxxxxxxxxxxxxxx',
    },
  }
);
// Export multiple statuses
const params = new URLSearchParams({ to: '2024-03-31' });
params.append('status', 'settled');
params.append('status', 'failed');
 
const response = await fetch(
  `https://checkout.exodus.com/reports/payments/export?${params}`,
  {
    headers: {
      Authorization: 'Bearer sk_live_xxxxxxxxxxxxxxxx',
    },
  }
);

Response

SUCCESSFUL RESPONSE (text/csv)
payment_id,checkout_id,created_at,status,method,token,network,token_amount,deposit_address,payer_address,on_chain_id,checkout_amount,checkout_currency,customer_email
pay_abc123,chk_def456,2024-01-15T10:30:00.000Z,settled,DIRECT,USDC,base,120.50,0xDeposit123,0xPayer456,0xTxHash789,120.00,USD,[email protected]
pay_ghi789,chk_jkl012,2024-01-14T09:15:00.000Z,settled,TWO_STEP,DAI,arbitrum,45.00,0xDeposit321,0xPayer654,0xTxHash987,45.00,USD,

Error 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"
  }
}
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"
  }
}

Start building

XO

Request Demo

Schedule a call with our team

Select a product
Arrow right

Start building
Grateful

Contact Us

We're here to help