Retrieves the menu for a location as a paginated set of categories, each containing its items. Use this endpoint to render an ordering interface, populate a kiosk, or synchronize menu data with an external system.
Request Headers
| Header | Required | Description |
|---|---|---|
| Authorization | Yes | Bearer YOUR_ACCESS_TOKEN |
Request Parameters
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| location_id | string | Yes | Identifier of the location whose menu is read |
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| global_on_id | integer | Yes | Identifier of the originating ordering channel. Required for menu requests. |
| user_id | integer | Yes | Identifier of the user making the request. |
| limit | integer | No | Maximum number of categories returned per page. |
Request Example
cURL Example
curl --request GET \
--url "https://sandbox-api.softpoint.io/interface/v1/locations/YOUR_LOCATION_ID/app/menu/categories?global_on_id=16&user_id=7&limit=1" \
--header "Authorization: Bearer YOUR_ACCESS_TOKEN"
Success Response
The response is paginated. The _links object provides navigation, pagination metadata describes the result set, and data contains the categories with their embedded items. The example below is trimmed to a single category and item for brevity.
{
"_links": {
"self": { "href": ".../app/menu/categories?page=1" },
"first": { "href": ".../app/menu/categories?page=1" },
"last": { "href": ".../app/menu/categories?page=98" },
"next": { "href": ".../app/menu/categories?page=2" }
},
"page_count": 98,
"page_size": 1,
"total_items": 98,
"page": 1,
"data": [
{
"id": 200617,
"id_external": "f10",
"name": "OTHER SIDES",
"is_menu": 1,
"start_time": "00:00",
"end_time": "00:00",
"_embedded": {
"categories": [],
"items": [
{
"id": 1935001,
"id_external": "11601",
"name": "MASH POT (SD)",
"price_per_unit": 379,
"available_86": 1,
"um": "unit",
"units_per_pack": 1,
"sales_category_id": 7493,
"pos": 1,
"olo": 1,
"kiosk": 1,
"status": 1
}
]
}
}
]
}
Response Fields
| Field | Type | Description |
|---|---|---|
| _links | object | HAL navigation links for pagination (self, first, last, next). |
| page_count | integer | Total number of pages available. |
| page_size | integer | Number of categories per page. |
| total_items | integer | Total number of categories across all pages. |
| page | integer | The current page number. |
| data | array | Categories returned for the current page. |
| data[].id | integer | Internal category identifier. |
| data[].id_external | string | External category identifier. |
| data[].name | string | Category name. |
| data[].is_menu | integer | Indicates whether the category represents a menu. |
| data[].start_time | string | Time the category becomes available. |
| data[].end_time | string | Time the category stops being available. |
| data[]._embedded.categories | array | Nested subcategories, when present. |
| data[]._embedded.items | array | Items belonging to the category. |
| items[].id | integer | Internal item identifier. |
| items[].id_external | string | External item identifier. |
| items[].name | string | Item name. |
| items[].price_per_unit | integer | Item price, in minor units (cents). |
| items[].available_86 | integer | Availability flag. 1 indicates available; 0 indicates 86'd (out). |
| items[].um | string | Unit of measure. |
| items[].units_per_pack | integer | Units contained per pack. |
| items[].pos / olo / kiosk | integer | Channel availability flags for point of sale, online, and kiosk. |
| items[].status | integer | Item status. 1 indicates active. |
Error Responses
Missing Channel Identifier
Returned when global_on_id is omitted.
{
"error": {
"code": 10189,
"message": "Invalid global on id.",
"details": {
"error": "The parameter global_on_id is required"
}
}
}
Status Codes
| Code | Description |
|---|---|
| 200 | Menu retrieved successfully. |
| 401 | Missing or invalid access token, or missing required channel identifier. |
Workflow Placement
This is the entry point of the ordering flow:
-
List menu categories and items.
-
Retrieve item details as needed.
-
Price the cart.
-
Submit the order.
Notes
-
The response can be large. Use the
limitquery parameter and follow thenextlink to paginate. -
Prices are expressed in minor units (cents).
-
The
available_86flag reflects real-time item availability and should be checked before offering an item.
Common Mistakes
-
Omitting
global_on_id, which results in error code 10189. -
Assuming a single response contains the entire menu rather than paginating through all pages.
-
Displaying items where
available_86is 0 orstatusis not active.

