---
title: "List customers"
method: GET
path: "/v1/customers"
tags: ["Customers"]
---

# List customers

`GET /v1/customers`

## Request

- Base URL: `https://api.affiliaterail.com`
- URL: `https://api.affiliaterail.com/v1/customers`
- Auth: HTTP bearer

Six explicit statuses, `refunded` included. The envelope is the same flat `{ data, has_more, total_count }` as every other list.

**Scope:** `read`

## Query parameters

- `program_id` string, required: Required on every list
- `limit` string: 1 to 100, default 25
- `starting_after` string: Object id; returns the page after it (older)
- `ending_before` string: Object id; returns the page before it (newer)
- `expand[]` union: Relations to embed: partner, referral, link
  - string
  - string[]
- `include[]` union: Nothing to include on this resource
  - string
  - string[]
- `partner_id` string
- `status` 'lead' | 'trial' | 'active' | 'cancelled' | 'refunded' | 'suspended'
- `email` string
- `external_customer_id` string

## Response `200`

Customers

- CustomerList
  - `data` Customer[], required
    - `id` string, required: Prefixed id (`cus_…`)
    - `object` 'customer', required
    - `program_id` string, required: Prefixed id (`prg_…`)
    - `partner_id` string, required: Prefixed id (`part_…`)
    - `referral_id` string, nullable, required: Prefixed id (`ref_…`)
    - `link_id` string, nullable, required: Prefixed id (`lnk_…`)
    - `coupon_id` string, nullable, required: Prefixed id (`cpn_…`)
    - `processor` 'stripe' | 'paddle' | 'chargebee' | 'manual' | 'api' | 'null', nullable, required
    - `external_customer_id` string, nullable, required
    - `external_subscription_id` string, nullable, required
    - `email` string, nullable, required
    - `name` string, nullable, required
    - `identifier` string, nullable, required
    - `status` 'lead' | 'trial' | 'active' | 'cancelled' | 'refunded' | 'suspended', required
    - `tracked_by` 'link' | 'coupon' | 'manual' | 'api', required
    - `lead_at` string, date-time, nullable, required: ISO-8601, UTC
    - `converted_at` string, date-time, nullable, required: ISO-8601, UTC
    - `metadata` object, nullable, required: Your own key/value data, stored as given
    - `created_at` string, date-time, required: ISO-8601, UTC
    - `updated_at` string, date-time, required: ISO-8601, UTC
  - `has_more` boolean, required: Pass the last object's id as `starting_after` to fetch the next page
  - `total_count` integer, required: Count of every object matching the filters, ignoring the cursor

## Other responses

- `400`: Invalid request
- `401`: Missing or unknown API key
- `403`: Key lacks the required scope
- `404`: No such object in your organization
- `422`: The request was understood and refused
- `429`: Rate limited: see Retry-After

---

[API](https://skmtc.dev/affiliaterail/apis/affiliaterail-api.md) · [All operations](https://skmtc.dev/affiliaterail/apis/affiliaterail-api/llms.txt) · [OpenAPI document](https://skmtc.dev/affiliaterail/apis/affiliaterail-api/revisions/ea41f345c092?raw)
