List customers
/v1/customersReturns the club's managed customer list (each ClubUser), oldest relationship first. Cursor-paginate by passing the id of the last customer you received as starting_after. This list is scoped to the club tied to your API key. Note: it covers customers with a club relationship — it does not include one-off guests who never became customers.
Active by default. Archived customers are omitted unless you pass ?include=archived. Retrieving one by id always works, archived or not, so a stored link never breaks.
Finding one person. Pass ?email= to narrow to a single exact address — the lookup to do before deciding whether to create someone. It is matched case-insensitively (the same way the platform decides whether an address is already taken) and is an exact match, never a pattern: % and _ are compared literally.
Authorization
bearerAuth Your club API key. Send it as Authorization: Bearer oc_live_….
In: header
Query Parameters
Number of results, 1–100 (default 25).
1 <= value <= 100Cursor: the id of the last customer from the previous page.
Exact email address, matched case-insensitively. Returns the one customer with that address, or an empty list. Archived customers are still excluded unless you also pass ?include=archived. An empty value is rejected rather than ignored.
Comma-separated opt-ins. archived adds archived customers (each with a non-null archived_at); ended_subscriptions adds ended / cancelled / expired subscriptions. Combine them: ?include=archived,ended_subscriptions. Unknown values are ignored.
Response Body
application/json
application/json
application/json
application/json
curl -X GET "https://api.getopencourt.com/v1/customers"{
"object": "list",
"data": [
{
"id": "3f29c4a1-7b6d-4e52-9c81-2a4b6d8e0f13",
"object": "customer",
"email": "sarah.chen@gmail.com",
"first_name": "Sarah",
"last_name": "Chen",
"phone": "+15551234567",
"first_became_customer_at": "2026-01-15T14:30:00.000Z",
"updated_at": "2026-02-02T09:12:00.000Z",
"archived_at": null,
"subscriptions": [
{
"id": "a1b2c3d4-5e6f-4708-9192-a3b4c5d6e7f8",
"object": "subscription",
"customer_id": "3f29c4a1-7b6d-4e52-9c81-2a4b6d8e0f13",
"type": "membership",
"status": "active",
"product": {
"id": "d4c3b2a1-6f5e-4807-8291-f8e7d6c5b4a3",
"name": "Gym Access Membership",
"slug": "gym-access"
},
"plan": {
"id": "f8e7d6c5-b4a3-4019-8273-6f5e4d3c2b1a",
"name": "Gym Access — Monthly"
},
"current_period_end": "2026-07-09T00:00:00.000Z",
"trial_end": null,
"next_payment_at": "2026-07-09T00:00:00.000Z",
"cancel_at_period_end": false,
"frozen_until": null,
"started_at": "2026-01-09T00:00:00.000Z",
"canceled_at": null,
"updated_at": "2026-06-14T17:03:10.000Z"
}
]
}
],
"has_more": true,
"url": "string"
}{
"error": {
"type": "string",
"code": "string",
"message": "string",
"param": "string",
"request_id": "string"
}
}{
"error": {
"type": "string",
"code": "string",
"message": "string",
"param": "string",
"request_id": "string"
}
}{
"error": {
"type": "string",
"code": "string",
"message": "string",
"param": "string",
"request_id": "string"
}
}