List Cross-sells
List cross-sells on an owner product, including inactive ones. The envelope is
{ items, pagination }. Array order is display order — see
Display order. Incomplete items are omitted — see
Incomplete items.
Default per_page is 25. A page past the last page returns empty items and
the requested current_page.
Request
Live:
GET /products/{productId}/cross-sells
Draft (same item shape; overlay collection):
GET /products/{productId}/draft/cross-sells
There is no live nested GET /products/{productId}/cross-sells/{id} — use
Get Cross-sell (GET /cross-sells/{id}). Draft get is
nested.
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
productId | string | Yes | Owner product UUID. |
Query Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
page | integer | No | 1 | Page number. |
per_page | integer | No | 25 | Items per page (min 1, max 100). |
Example Request
curl -X GET "https://cart.easy.tools/api/v1/products/0632bef5-c308-42cd-9cba-89a7a4f722bb/cross-sells" \
-H "Authorization: Bearer YOUR_API_TOKEN"
Response
Success Response (200)
{
"items": [
{
"id": "37643a70-be0f-4f09-ae36-c36e3ddb35dc",
"product_id": "70dbd819-fac2-4dcf-b655-fb925e24410b",
"variant_id": "5272bfcf-4e92-458d-b513-80ca474a16e4",
"parent_id": null,
"title": "Add the workbook",
"main_description": null,
"description": null,
"button_text": "Yes, add it",
"amount": 4900,
"currency": "usd",
"discount": null,
"validity_minutes": 15,
"one_purchase": true,
"send_offer": true,
"active": true
},
{
"id": "c1d8e4a6-7b29-4f53-a810-6e9c2d5f1b70",
"product_id": "70dbd819-fac2-4dcf-b655-fb925e24410b",
"variant_id": "d91c65aa-b221-4aa4-b626-cf0d8a198749",
"parent_id": "37643a70-be0f-4f09-ae36-c36e3ddb35dc",
"title": "Or start with the checklist",
"main_description": null,
"description": null,
"button_text": null,
"amount": 1900,
"currency": "usd",
"discount": null,
"validity_minutes": 15,
"one_purchase": true,
"send_offer": true,
"active": true
}
],
"pagination": {
"current_page": 1,
"total_pages": 1,
"per_page": 25,
"total": 2
}
}
See Cross-sell Object.
Pagination Object
| Field | Type | Description |
|---|---|---|
current_page | integer | Requested page. |
total_pages | integer | Total pages (at least 1). |
per_page | integer | Page size. |
total | integer | Total complete cross-sells on this owner. |
Error Responses
Bad Request (400)
{
"message": "Invalid product ID"
}
Returned when the path UUID is malformed.
Not Found Error (404)
{
"message": "Product with ID 0632bef5-c308-42cd-9cba-89a7a4f722bb not found"
}
Unauthorized Error (401)
{
"message": "Unauthenticated."
}
Forbidden Error (403)
{
"message": "You do not have API access to the requested store."
}