Detail Product
Get details of a specific product by its ID.
Authorization
API-TOKEN Your partner API key. Send it in the API-TOKEN header on every request.
In: header
Path Parameters
Header Parameters
API contract version to target. See the Changelog for what changed in each version.
"2.0.0""2.3.0" | "2.2.0" | "2.1.0" | "2.0.0"Request Body
application/json
Response Body
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://api.flavours.sa/dev/api/v2/products/eum" \ -H "X-API-Version: 2.3.0" \ -H "Content-Type: application/json" \ -d '{ "includes": [ "aperiam" ] }'{
"meta": {
"code": 200,
"status": "success",
"message": "Product details retrieved successfully."
},
"data": {
"id": "36e99390-b8e4-4e4d-a70e-c794b3f4cf7d",
"market_id": "eef0da10-dd19-4a4c-ab3d-23dd1b548801",
"branch_id": null,
"name_en": "Minus sit",
"name_ar": "rem",
"description_en": null,
"description_ar": null,
"stock": 0,
"order": 0,
"images": [
"https://cdn.example.com/img/uploads/products/sample.png"
],
"is_active": true,
"created_at": 1792593346521,
"updated_at": 1792593346521,
"deleted_at": null,
"rating_amount": 0,
"rating_avg": "0.00",
"sold_amount": 0,
"sold_revenue": 0,
"qoyod_id": null,
"min_additionals": 0,
"max_additionals": 3,
"is_global": false,
"options_min_total": null,
"options_max_total": null,
"product_category_id": 16,
"preparation_time": 15,
"market": {
"id": "eef0da10-dd19-4a4c-ab3d-23dd1b548801",
"sector_id": 15,
"name_en": "Franecki Ltd",
"name_ar": "Wintheiser-Barrows",
"description_en": "Eaque distinctio fuga nihil vitae velit.",
"description_ar": null,
"logo_img": "https://via.placeholder.com/200x200.png/009955?text=business+logo+facilis",
"cover_img": "https://via.placeholder.com/200x200.png/009999?text=business+cover+amet",
"email": "[email protected]",
"phone_prefix": "967",
"phone_number": "7856586642",
"crn": "033-466-2828",
"tax_number": "66596607090",
"created_by": null,
"email_verified_at": 1792593329562,
"phone_verified_at": 1792593329562,
"created_at": 1792593329465,
"updated_at": 1792593340021,
"deleted_at": null,
"is_active": true,
"merchant_id": null,
"reseller_id": null,
"slug": "wisoky-feest",
"code": "ENT-0000000001",
"links": {
"website": null,
"instagram": null,
"youtube": null,
"x": null,
"call_center": null
},
"phone": "7856586642"
},
"branch": null,
"category": {
"id": 16,
"icon": "🍔",
"name_en": "Burgers",
"name_ar": "برجر",
"deleted_at": null,
"created_at": 1792593346520,
"updated_at": 1792593346520,
"market_id": "eef0da10-dd19-4a4c-ab3d-23dd1b548801",
"image_url": null
},
"exclusions": [],
"options": [],
"additionals": [],
"addon_groups": []
}
}{
"meta": {
"code": 401,
"status": "error",
"message": "Unauthenticated."
},
"data": null
}{
"meta": {
"code": 403,
"status": "error",
"message": "Unauthorized."
},
"data": null
}{
"meta": {
"code": 404,
"status": "error",
"message": "Resource not found."
},
"data": null
}{
"meta": {
"code": 500,
"status": "error",
"message": "Internal server error."
},
"data": null
}Delete Products (Alias) DELETE
Alias path for `DELETE /api/v2/products/multi` (routes/api/product.php binds both to ProductController::manyDelete). Identical `products_ids` body, response and behaviour.
List Products GET
List all products with pagination and filtering options. per_page is capped at 100: a larger value is clamped to 100, never rejected. Default mode (pagination=page or omitted) is offset pagination and returns the paginator shown below. Keyset mode (pagination=keyset) orders by product id ascending, ignores page, sort and key_by (a sort or key_by that is not a product column is still rejected with 422), and is never cached; data then is an object with data (the products), per_page, after_id (echo of the request), next_after_id (pass it as after_id for the next page; null on the last page), has_more and total (an integer on the first request, when after_id is omitted, null afterwards). Products deleted between two keyset requests do not cause later products to be skipped, and an after_id that is unknown or belongs to another market only positions the cursor inside the caller's own products. A keyset walk is not a snapshot: a product created during the walk with an id below the cursor is not returned, so take a changes-feed position before the first page and replay the feed from it after the last page.