Customer Orders
List a single customer's order history, resolved by profile id, email, phone, Shopify customer id, or contact id, in the standard order-list contract.
GET /cdp/customers/{identifier}/orders — list a single customer's orders,
resolved from the same identifier as Get Customer. The
response is the exact same contract as List Orders:
a normalized order list plus offset pagination — just pre-filtered to one customer.
Requires the beta:cdp-commerce permission on your brand.
Request
GET /cdp/customers/{identifier}/orders
Authorization: Bearer vyg_…Path parameters
| Param | Type | Description |
|---|---|---|
identifier | string | A profile id, email, phone, Shopify customer id, or contact id — classified by shape (see Get Customer). Pass the customer.contact_id from an order here to list that customer's full history. |
Query parameters
| Param | Type | Default | Description |
|---|---|---|---|
limit | integer | 25 | Page size, clamped to a maximum of 100. |
offset | integer | 0 | Offset; offset + limit must stay within the 10,000-row window or the request is rejected 400. |
Response 200
{
"list": [
{
"id": "b2c1…",
"external_id": "4501234567890",
"number": "1001",
"state": "complete",
"billing_status": "complete",
"total": "120.00",
"currency_code": "USD",
"customer": { "contact_id": "c9f0…" },
"created_at": "2026-03-02T14:21:00.000Z",
"recovered_at": null
}
],
"totalSize": 1,
"offset": 0,
"pageSize": 25,
"scope": "your-shop.myshopify.com",
"nextCursor": null
}The envelope and each order are identical to List Orders —
see Get Order for the full per-order field reference and
line-item detail. Orders here include all states (not just completed), unlike
the commerce.total_spend summary on Get Customer,
which counts completed orders only.
A customer that resolves a profile but no local order contact returns an empty
page (list: [], totalSize: 0) — never another brand's orders.
Example
curl -s "https://cdp.vyg.app/cdp/customers/alice@example.com/orders?limit=25" \
-H "Authorization: Bearer vyg_your_key_here"Errors
| Status | When |
|---|---|
400 | Missing identifier, or a deep offset past the result window. |
401 | Missing or invalid credential. |
403 | Brand not enrolled in the commerce beta (beta_not_enabled), or no connected Shopify integration (integration_not_connected). |
404 | The customer is absent from both the profile and commerce stores — an unknown identifier or one belonging to another brand, indistinguishable by design. |
405 | Non-GET method. |
See Tenant Isolation & Scope for why cross-brand
identifiers return 404 and never leak another brand's orders.