π¦ Get Menu
This endpoint returns the full menu structure β including categories, products, availability, and modifier groups β when requested by Blend (typically after receiving a menu.updated webhook).
Endpoint: GET /api/menu
Description: Blend calls this to retrieve the POS menu (categories, items, modifiers).
Authorization: Required (Authorization: Bearer \<token>
)
Query Parameters: (optional)
page: for pagination
per: items per page
π Field Descriptions
Field | Type | Description |
---|---|---|
page | Integer | Optional. Page number for paginated results |
per | Integer | Optional. Number of items per page |
π§Ύ Response POS
β
Success
{
"categories": [
{
"id": 1,
"name": {
"en": "Main Dishes",
"ar": "Ψ§ΩΨ£Ψ·Ψ¨Ψ§Ω Ψ§ΩΨ±Ψ¦ΩΨ³ΩΨ©"
},
"products": [
{
"id": 101,
"name": {
"en": "Grilled Chicken",
"ar": "Grilled Chicken"
},
"description": {
"en": "Grilled Chicken",
"ar": "Grilled Chicken"
},
"stock": 1,
"status": 1,
"price": 20,
"image_url": "url",
"available_branches": [
{
"branch_id": "ssssss",
"is_stock": false
},
{
"branch_id": "www",
"is_stock": true
}
],
"modifier_groups": [
{
"id": 201,
"name": {
"en": "Side Dishes",
"ar": "Side Dishes"
},
"multiple": 1,
"required": 1,
"min_selection": 0,
"max_selection": null,
"modifiers": [
{
"id": 301,
"status" : true,
"name": {
"en": "French Fries",
"ar": "French Fries"
},
"price": 15.5
},
{
"id": 302,
"status" : true,
"name": {
"en": "Mashed Potatoes",
"ar": "Mashed Potatoes"
},
"price": 15.5
}
]
}
]
}
]
}
],
"pagination": {
"from": 1,
"to": 1,
"per": 25,
"total": 1,
"current": 1,
"path": {{YOUR_END_POINT}}
}
}
π Field Descriptions
Field | Type | Description |
---|---|---|
categories | array | List of menu categories |
categories[].id | string | Category ID |
categories[].name | object | Translated names (e.g., { "en": "Main", "ar": "Ψ±Ψ¦ΩΨ³ΩΨ©" } ) |
categories[].products | array | Products under this category |
products[].id | string | Product ID |
products[].name | object | Translated names of the product |
products[].description | object | Optional translated description |
products[].stock | boolean | Whether this product is in stock |
products[].status | boolean | 1 for active, 0 for inactive |
products[].price | float | Base price of the product |
products[].image_url | string | Optional image URL |
products[].available_branches | array | Array of availability by branch |
available_branches[].branch_id | string | Branch identifier |
available_branches[].is_stock | boolean | Availability in that specific branch |
products[].modifier_groups | array | List of modifier groups linked to this product |
modifier_groups[].id | string | Modifier group ID |
modifier_groups[].name | object | Translated name |
modifier_groups[].multiple | boolean | Whether multiple modifiers can be selected |
modifier_groups[].required | boolean | Whether the modifier group is required |
modifier_groups[].min_selection | integer | Minimum number of required selections |
modifier_groups[].max_selection | integer | Maximum number of allowed selections |
modifiers[].id | string | Modifier ID |
modifiers[].name | object | Translated name |
modifiers[].price | float | Additional cost of the modifier |
modifiers[].status | boolean | Whether the modifier is active |
π§ Behavior
- Blend calls this API after receiving a menu.updated event to pull the latest full menu.
- This includes not just items, but full translation support, availability, and structure.
π§ Example Use Cases
- A new product is added β Blend pulls full menu to reflect in delivery apps.
- A modifier group is edited or reassigned β Blend gets updated data.
β Notes
- The response must be structured and complete β Blend will replace the full menu on each sync.
- If an item is hidden in a branch, it should be reflected via available_branches.
- Authentication via Bearer token is required.
Updated 10 days ago
Whatβs Next