One customer and their orders
GET/v1/customers/{id}
scope customers.read
A buyer, their billing details, and every order they have placed with you — each flagged with whether it already carries an invoice, so a nightly job can pick up exactly the ones it has not billed. A buyer who has never ordered from you is customer_not_found (404), which is also what stops you reaching anyone else's customers.
Response#
| Field | Type | Description |
|---|---|---|
id | integer | The buyer id. |
name | string | The buyer's account name. |
email | string | Their account email. |
phone | string|null | Their account phone. |
orders_count | integer | How many orders they have placed with you. |
first_order_at | string | ISO-8601 UTC of their first order with you. |
last_order_at | string | ISO-8601 UTC of their most recent. |
billing | object|null | The address to invoice at. null when the order carries no address — old orders and a handful of edge cases. |
billing. | 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. |
billing. | string | Snapshotted at checkout. This is the city the parcel was actually sent to. |
billing. | string | County, judet or equivalent. Snapshotted at checkout. |
billing. | string|null | Snapshotted at checkout, falling back to the address record for the few orders carrying none. |
billing. | string | ISO 3166-1 alpha-2, e.g. RO. |
billing. | string|null | The country name in Romanian, for printing. null alongside a null address_line. |
billing. | 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. |
billing. | object|null | The company to invoice, or null for a private buyer. |
billing. | string | Registered company name. |
billing. | string|null | VAT number — the Romanian CUI/CIF, e.g. RO12345678. |
billing. | string|null | Trade register number, e.g. J16/123/2020. |
billing. | 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. |
billing. | 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. |
orders | array | Every order this buyer placed with you, newest first. |
orders[]. | integer | The order id. Use it with POST /v1/orders/{id}/invoice. |
orders[]. | string|null | Your own external_order_id, if you set one. |
orders[]. | string | Same vocabulary as GET /v1/orders. |
orders[]. | object | What the buyer paid. |
orders[]. | integer|null | Minor units — 4698 is 46.98. |
orders[]. | string|null | ISO 4217. |
orders[]. | boolean | Whether an invoice has already been attached. This is the field to filter on: false is your queue of orders still to bill. |
orders[]. | string | ISO-8601 UTC. |
Example
{
"id": 9000001,
"name": "John Doe",
"email": "[email protected]",
"phone": "+40700000000",
"orders_count": 2,
"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
},
"orders": [
{
"id": 690,
"reference": "ERP-1042",
"status": "delivered",
"total": {
"amount": 4698,
"currency": "RON"
},
"has_invoice": false,
"created_at": "2026-09-08T14:08:52Z"
}
]
}