{
    "info": {
        "_postman_id": "b02d1ca7-a9a3-5124-9bb1-554885ed835a",
        "name": "Next Restaurant REST API (docs v6)",
        "description": "The public integration surface for Next Restaurant — enough to run a kiosk, a\nmobile app or a partner ordering front end. It is deliberately narrow: it is not\nan administration API, not a reporting API, and it does not take payment.\n\n**It is off by default.** Two switches must both be on: the **API** module under\n*Apps*, and **Enable API** under *Integrations*. Then generate the bearer token\nunder *Integrations* — it is shown once and stored only as a hash.\n\nTotals are always recomputed on the server from the menu records, so a submitted\nprice is ignored. An integration never has to replicate your tax or pricing rules,\nand a tampered request buys nothing at the wrong price.",
        "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
    },
    "variable": [
        {
            "key": "baseUrl",
            "value": "https://your-site.example/api/index.php",
            "type": "string"
        },
        {
            "key": "apiToken",
            "value": "",
            "type": "string"
        }
    ],
    "item": [
        {
            "name": "Locations",
            "item": [
                {
                    "name": "GET List Locations",
                    "request": {
                        "method": "GET",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{baseUrl}}/v1/nextrestaurant/locations",
                            "host": [
                                "{{baseUrl}}"
                            ],
                            "path": [
                                "v1",
                                "nextrestaurant",
                                "locations"
                            ]
                        },
                        "description": "List published locations\n\nEvery published location with its public details. Unpublished locations are\nnever returned. The `id` here is what the menu and order endpoints need."
                    },
                    "response": [
                        {
                            "name": "200 The published locations.",
                            "originalRequest": {
                                "method": "GET",
                                "header": [
                                    {
                                        "key": "Accept",
                                        "value": "application/json"
                                    }
                                ],
                                "url": {
                                    "raw": "{{baseUrl}}/v1/nextrestaurant/locations",
                                    "host": [
                                        "{{baseUrl}}"
                                    ],
                                    "path": [
                                        "v1",
                                        "nextrestaurant",
                                        "locations"
                                    ]
                                },
                                "description": "List published locations\n\nEvery published location with its public details. Unpublished locations are\nnever returned. The `id` here is what the menu and order endpoints need."
                            },
                            "status": "200",
                            "code": 200,
                            "_postman_previewlanguage": "json",
                            "header": [
                                {
                                    "key": "Content-Type",
                                    "value": "application/json"
                                }
                            ],
                            "body": "{\n    \"data\": [\n        {\n            \"id\": 1,\n            \"code\": \"MAIN\",\n            \"title\": \"Downtown Bistro\",\n            \"currency\": \"USD\",\n            \"timezone\": \"America/Chicago\",\n            \"service_modes\": [\n                \"dine_in\",\n                \"takeaway\",\n                \"delivery\",\n                \"qr\"\n            ],\n            \"opening_hours\": {\n                \"mon\": {\n                    \"open\": \"11:00\",\n                    \"close\": \"22:00\"\n                },\n                \"sat\": {\n                    \"open\": \"10:00\",\n                    \"close\": \"23:30\"\n                }\n            },\n            \"tax_rate\": 8.25\n        },\n        {\n            \"id\": 2,\n            \"code\": \"RIVER\",\n            \"title\": \"Riverside Grill\",\n            \"currency\": \"USD\",\n            \"timezone\": \"America/Chicago\",\n            \"service_modes\": [\n                \"dine_in\",\n                \"takeaway\",\n                \"delivery\",\n                \"qr\"\n            ],\n            \"opening_hours\": {\n                \"mon\": {\n                    \"open\": \"11:00\",\n                    \"close\": \"22:00\"\n                }\n            },\n            \"tax_rate\": 8.25\n        }\n    ]\n}"
                        }
                    ]
                }
            ]
        },
        {
            "name": "Menu",
            "item": [
                {
                    "name": "GET Get Menu",
                    "request": {
                        "method": "GET",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{baseUrl}}/v1/nextrestaurant/locations/:locationId/menu",
                            "host": [
                                "{{baseUrl}}"
                            ],
                            "path": [
                                "v1",
                                "nextrestaurant",
                                "locations",
                                ":locationId",
                                "menu"
                            ],
                            "variable": [
                                {
                                    "key": "locationId",
                                    "value": "2",
                                    "description": "A published location's id. (min 1, int64)"
                                }
                            ]
                        },
                        "description": "The live, orderable menu for a location\n\nCategories of items, in the order arranged in the admin, reflecting live\navailability **for this branch**: unpublished items, items switched off for\nthe location and 86'd items are absent, and `price` is the branch's price\nwhere one overrides the base.\n\nEach item carries everything needed to order it — its `variations`, its\n`modifier_groups` with the per-item min/max overrides already applied, and\nits declared `allergens`."
                    },
                    "response": [
                        {
                            "name": "200 The menu.",
                            "originalRequest": {
                                "method": "GET",
                                "header": [
                                    {
                                        "key": "Accept",
                                        "value": "application/json"
                                    }
                                ],
                                "url": {
                                    "raw": "{{baseUrl}}/v1/nextrestaurant/locations/:locationId/menu",
                                    "host": [
                                        "{{baseUrl}}"
                                    ],
                                    "path": [
                                        "v1",
                                        "nextrestaurant",
                                        "locations",
                                        ":locationId",
                                        "menu"
                                    ],
                                    "variable": [
                                        {
                                            "key": "locationId",
                                            "value": "2",
                                            "description": "A published location's id. (min 1, int64)"
                                        }
                                    ]
                                },
                                "description": "The live, orderable menu for a location\n\nCategories of items, in the order arranged in the admin, reflecting live\navailability **for this branch**: unpublished items, items switched off for\nthe location and 86'd items are absent, and `price` is the branch's price\nwhere one overrides the base.\n\nEach item carries everything needed to order it — its `variations`, its\n`modifier_groups` with the per-item min/max overrides already applied, and\nits declared `allergens`."
                            },
                            "status": "200",
                            "code": 200,
                            "_postman_previewlanguage": "json",
                            "header": [
                                {
                                    "key": "Content-Type",
                                    "value": "application/json"
                                }
                            ],
                            "body": "{\n    \"data\": {\n        \"location_id\": 2,\n        \"categories\": [\n            {\n                \"id\": 5,\n                \"title\": \"Pizza\",\n                \"items\": [\n                    {\n                        \"id\": 16,\n                        \"title\": \"Margherita Pizza\",\n                        \"description\": \"San Marzano tomato, fior di latte and fresh basil.\",\n                        \"price\": 13,\n                        \"has_variations\": 1,\n                        \"image\": \"images/nextrestaurant/items/16/gallery/ca98f3a212f1aac0.jpg\",\n                        \"prep_time_minutes\": 23,\n                        \"calories\": null,\n                        \"spice_level\": 0,\n                        \"is_alcohol\": 0,\n                        \"variations\": [\n                            {\n                                \"id\": 1,\n                                \"title\": \"Regular\",\n                                \"price\": 13,\n                                \"is_default\": 1\n                            },\n                            {\n                                \"id\": 2,\n                                \"title\": \"Large\",\n                                \"price\": 17,\n                                \"is_default\": 0\n                            }\n                        ],\n                        \"modifier_groups\": [\n                            {\n                                \"id\": 2,\n                                \"title\": \"Extra Toppings\",\n                                \"selection_type\": \"multiple\",\n                                \"is_required\": 0,\n                                \"min_select\": 0,\n                                \"max_select\": 4,\n                                \"free_quantity\": 0,\n                                \"modifiers\": [\n                                    {\n                                        \"id\": 5,\n                                        \"title\": \"Extra Cheese\",\n                                        \"price\": 1.5,\n                                        \"is_default\": 0,\n                                        \"max_quantity\": 1\n                                    },\n                                    {\n                                        \"id\": 6,\n                                        \"title\": \"Mushrooms\",\n                                        \"price\": 1,\n                                        \"is_default\": 0,\n                                        \"max_quantity\": 1\n                                    }\n                                ]\n                            }\n                        ],\n                        \"allergens\": [\n                            {\n                                \"id\": 5,\n                                \"title\": \"Fish\",\n                                \"presence\": \"contains\"\n                            }\n                        ]\n                    }\n                ]\n            }\n        ]\n    }\n}"
                        }
                    ]
                }
            ]
        },
        {
            "name": "Orders",
            "item": [
                {
                    "name": "POST Create Order",
                    "request": {
                        "method": "POST",
                        "header": [
                            {
                                "key": "Accept",
                                "value": "application/json"
                            },
                            {
                                "key": "Content-Type",
                                "value": "application/json"
                            }
                        ],
                        "url": {
                            "raw": "{{baseUrl}}/v1/nextrestaurant/orders",
                            "host": [
                                "{{baseUrl}}"
                            ],
                            "path": [
                                "v1",
                                "nextrestaurant",
                                "orders"
                            ]
                        },
                        "description": "Place an order\n\nCreates an ordinary order: it routes to kitchen stations by your routing\nrules, depletes stock at the status you configured, settles into the payments\nledger, and appears in reports with its channel recorded.\n\nOrders arrive **unpaid** — this endpoint records an order, it does not take\npayment.\n\nThere is no idempotency key. A retried request that actually succeeded the\nfirst time creates a second order, so on a timeout reconcile rather than\nblindly retrying.",
                        "body": {
                            "mode": "raw",
                            "raw": "{\n    \"location_id\": 2,\n    \"channel\": \"web\",\n    \"service_mode\": \"takeaway\",\n    \"notes\": \"Ring the bell at the side door\",\n    \"customer\": {\n        \"name\": \"Dana Whitfield\",\n        \"phone\": \"+1 555 0142\",\n        \"email\": \"dana@example.com\"\n    },\n    \"items\": [\n        {\n            \"item_id\": 16,\n            \"variation_id\": 2,\n            \"qty\": 1,\n            \"notes\": \"Well done\",\n            \"modifiers\": [\n                {\n                    \"modifier_id\": 5,\n                    \"qty\": 1\n                }\n            ]\n        },\n        {\n            \"item_id\": 1,\n            \"qty\": 2\n        }\n    ]\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        }
                    },
                    "response": [
                        {
                            "name": "201 The order was created.",
                            "originalRequest": {
                                "method": "POST",
                                "header": [
                                    {
                                        "key": "Accept",
                                        "value": "application/json"
                                    },
                                    {
                                        "key": "Content-Type",
                                        "value": "application/json"
                                    }
                                ],
                                "url": {
                                    "raw": "{{baseUrl}}/v1/nextrestaurant/orders",
                                    "host": [
                                        "{{baseUrl}}"
                                    ],
                                    "path": [
                                        "v1",
                                        "nextrestaurant",
                                        "orders"
                                    ]
                                },
                                "description": "Place an order\n\nCreates an ordinary order: it routes to kitchen stations by your routing\nrules, depletes stock at the status you configured, settles into the payments\nledger, and appears in reports with its channel recorded.\n\nOrders arrive **unpaid** — this endpoint records an order, it does not take\npayment.\n\nThere is no idempotency key. A retried request that actually succeeded the\nfirst time creates a second order, so on a timeout reconcile rather than\nblindly retrying.",
                                "body": {
                                    "mode": "raw",
                                    "raw": "{\n    \"location_id\": 2,\n    \"channel\": \"web\",\n    \"service_mode\": \"takeaway\",\n    \"notes\": \"Ring the bell at the side door\",\n    \"customer\": {\n        \"name\": \"Dana Whitfield\",\n        \"phone\": \"+1 555 0142\",\n        \"email\": \"dana@example.com\"\n    },\n    \"items\": [\n        {\n            \"item_id\": 16,\n            \"variation_id\": 2,\n            \"qty\": 1,\n            \"notes\": \"Well done\",\n            \"modifiers\": [\n                {\n                    \"modifier_id\": 5,\n                    \"qty\": 1\n                }\n            ]\n        },\n        {\n            \"item_id\": 1,\n            \"qty\": 2\n        }\n    ]\n}",
                                    "options": {
                                        "raw": {
                                            "language": "json"
                                        }
                                    }
                                }
                            },
                            "status": "201",
                            "code": 201,
                            "_postman_previewlanguage": "json",
                            "header": [
                                {
                                    "key": "Content-Type",
                                    "value": "application/json"
                                }
                            ],
                            "body": "{\n    \"data\": {\n        \"id\": 591,\n        \"order_number\": \"ORD-000591\",\n        \"location_id\": 2,\n        \"channel\": \"web\",\n        \"status\": \"placed\",\n        \"fulfillment_status\": \"in_kitchen\",\n        \"subtotal\": 18.5,\n        \"discount_total\": 0,\n        \"tax_total\": 1.53,\n        \"service_charge\": 0,\n        \"delivery_fee\": 0,\n        \"grand_total\": 20.03,\n        \"currency\": null,\n        \"notes\": null,\n        \"placed_at\": \"2026-09-07 21:20:26\",\n        \"items\": [\n            {\n                \"id\": 1300,\n                \"item_id\": 16,\n                \"variation_id\": 2,\n                \"name_snapshot\": \"Margherita Pizza (Large)\",\n                \"qty\": 1,\n                \"unit_price\": 17,\n                \"modifiers_total\": 1.5,\n                \"line_total\": 18.5,\n                \"notes\": null\n            }\n        ]\n    }\n}"
                        }
                    ]
                }
            ]
        }
    ],
    "auth": {
        "type": "bearer",
        "bearer": [
            {
                "key": "token",
                "value": "{{apiToken}}",
                "type": "string"
            }
        ]
    }
}