List your customers
GET/v1/customers
scope customers.read
Everyone who has ordered from you, keyed on the buyer rather than the order, with the billing details from their most recent order. This is what POST /v1/orders/{id}/invoice never gave you: the order payload carries a delivery block because a courier needs a city and a postcode, and an invoice needs a street — and, for a business buyer, a company name and a VAT number. You only ever see buyers you have actually sold to.
Query parameters#
| Name | Example | |
|---|---|---|
updated_since | — | ISO 8601. A customer counts as changed when any of their orders did — a status moving to delivered is usually what makes you want to invoice. |
q | — | Match on name or email. |
limit | 50 | Max 100 |
cursor | — | next_cursor from the previous page |
Response#
| Field | Type | Description |
|---|---|---|
count | integer | Customers on this page. |
next_cursor | integer|null | Pass as cursor for the next page. null on the last one. |
data | array | The customers. |
data[]. | integer | The buyer id. Stable — use it to keep one customer record across orders. |
data[]. | string | The buyer's account name. |
data[]. | string | Their account email. |
data[]. | string|null | Their account phone. |
data[]. | integer | How many orders they have placed WITH YOU. |
data[]. | string | ISO-8601 UTC of their first order with you. |
data[]. | string | ISO-8601 UTC of their most recent. The billing block below comes from that order. |
data[]. | object|null | The address to invoice at. null when the order carries no address — old orders and a handful of edge cases. |
data[]. | string|null | Street and number. null when the buyer has since deleted the address the order pointed at — see is_live. Everything else in this block still stands, because it was snapshotted at checkout. |
data[]. | string | Snapshotted at checkout. This is the city the parcel was actually sent to. |
data[]. | string | County, judet or equivalent. Snapshotted at checkout. |
data[]. | string|null | Snapshotted at checkout, falling back to the address record for the few orders carrying none. |
data[]. | string | ISO 3166-1 alpha-2, e.g. RO. |
data[]. | string|null | The country name in Romanian, for printing. null alongside a null address_line. |
data[]. | boolean | The buyer ordered as a BUSINESS and must be invoiced as one — in Romania that means the invoice carries the company name and CUI, not the person's. Branch on this rather than on whether company happens to be populated. |
data[]. | object|null | The company to invoice, or null for a private buyer. |
data[]. | string | Registered company name. |
data[]. | string|null | VAT number — the Romanian CUI/CIF, e.g. RO12345678. |
data[]. | string|null | Trade register number, e.g. J16/123/2020. |
data[]. | boolean | READ THIS ONE. true means address_line was read from an address the buyer still controls and can edit, so it is their CURRENT street, not necessarily the one at the time of sale. Only the city, county, postcode and country are frozen. If your invoices must be reproducible, store the block when you issue the invoice rather than re-fetching it later. false means the address was deleted and address_line is null. |
data[]. | boolean | The parcel went to a locker. The address here is still the buyer's own — this is a delivery detail, not a billing one. |
Example
{
"count": 1,
"next_cursor": 98853,
"data": [
{
"id": 9000001,
"name": "John Doe",
"email": "[email protected]",
"phone": "+40700000000",
"orders_count": 3,
"first_order_at": "2026-03-02T11:40:19Z",
"last_order_at": "2026-09-08T14:08:52Z",
"billing": {
"address_line": "Str. Exemplu 12",
"city": "Brasov",
"county": "Brasov",
"postal_code": "500002",
"country_code": "RO",
"country": "România",
"is_company": true,
"company": {
"name": "Example Bike Shop SRL",
"vat_code": "RO12345678",
"registration_no": "J16/123/2020"
},
"is_live": true,
"delivered_to_locker": false
}
}
]
}