List customers
List Customer records with cursor pagination. limit is a maximum: a page can hold fewer records while next_cursor is still set, so iterate until it is null. Filters on currency and amount match the record's own currency.
Query Parameters
- Type: stringnullableentity
External id of the entity to act for, from
GET /v1/entities. Required when signed in with OAuth (an organization can hold several entities; ask the user which one if more than one could apply). Optional with an API key, which is scoped to one entity already. - Type: array of string …100nullableexternal
_ids Exact external ids to return (repeat the key). At most 100.
- Type: array of stringnullablecurrencies
ISO 4217 codes (repeat the key). Matches the record's own currency, not the entity's functional currency.
- Type: array of stringnullableplatforms
Source platforms the records were ingested from (e.g.
stripe,ramp). Customer-inserted records carry the platform they declared, orapi. - Type: array of stringnullableplatform
_object _ids The source platform's own ids for the records (e.g. a Stripe
in_…id). - Type: booleaninclude
_deleted Include records act has since deleted. They carry
customFields.t0_deleted_at. Default false: deleted records are omitted. - Type: stringnullablecursor
Opaque cursor from the previous page's
next_cursor. Omit for the first page. - Type: integerlimitmin:1max:200
Maximum records per page (1-200). A page can hold fewer while
next_cursoris still set; iterate until it is null. - Type: booleaninclude
_total Also return
total, the number of matching records before the deleted overlay. - Type: "asc" or "desc"enumorder
Sort direction.
- Type: stringFormat: datenullabledate
_from Inclusive lower bound on the record's
date. - Type: stringFormat: datenullabledate
_to Inclusive upper bound on the record's
date. - sortconst:date
Field to sort by. Amount sorts use each record's value in the entity's functional currency, so records in different currencies can look out of order; filter by one currency for a strict amount order.
- Type: array of "invoices" or "payments"enumnullableexpand
Linked records to include under
expanded(repeat the key).
Responses
- application/json
- 400
Amount filter without exactly one currency (CAPI64), a cursor that does not match the request's filters (CAPI65), or signed in with OAuth and no
entitygiven (CAPI12). - 401
The credential was refused: none sent (CAPI11), an API key that is not valid (CAPI15), or an OAuth sign-in that has expired (CAPI16), was not issued for this API (CAPI17), names an organization T0 does not hold (CAPI18) or a membership that is no longer usable (CAPI19).
detailsays what to do. - 403
The key lacks customer_api:read, or the signed-in user cannot read this record type on the entity (CAPI71); or
entityis not the key's own (CAPI14). - 404
No such entity in your organization (CAPI13).
- 409
The entity has no applied books start date (CAPI67).
- application/json
curl 'https://api.t0.ai/v1/customers?include_deleted=false&limit=50&include_total=false&order=desc&sort=date' \
--header 'Authorization: Bearer YOUR_SECRET_TOKEN'
{
"data": [
{
"id": {
"dataType": "Adjustment",
"externalId": "string",
"platformDataType": "string",
"platformId": "string",
"platformType": "string"
},
"data": {
"customFields": {
"additionalProperty": "anything"
},
"date": "2026-11-11",
"email": "string",
"name": "string"
},
"links": [
{
"dataType": "Adjustment",
"externalId": "string",
"platformDataType": "string",
"platformId": "string",
"platformType": "string"
}
],
"expanded": {
"additionalProperty": [
{
"data": {
"amount": 1,
"currencyCode": "string",
"customFields": {
"additionalProperty": "anything"
},
"date": "2026-11-11",
"description": "string",
"endDate": "2026-11-11",
"exchangeRates": [],
"startDate": "2026-11-11"
},
"id": {
"dataType": "Adjustment",
"externalId": "string",
"platformDataType": "string",
"platformId": "string",
"platformType": "string"
},
"links": []
}
]
},
"expanded_truncated": [
"string"
]
}
],
"next_cursor": "string",
"as_of": "2026-11-11T18:10:37.118Z",
"total": 1
}