Zaxbys API endpoint
Returns Zaxby's full national reference menu: every category and product, with description, calories, image, and a full recursive customization tree (size/protein/sauce choices, each with its own real price delta). This is national reference data, not store-priced -- most items list cost 0 because real pricing is store-specific and requires a signed-in ordering session this endpoint does not have. Many items price entirely through a required customization selection rather than a base cost, so cost 0 on an item is expected, not a bug.
/zaxbys/menuNo query parameters.
Response includes categories[], category_count, product_count, source_url, and fetched_at. Each category has id, name, image, slug, catering (marks a catering-only section), spotlight, and products[]. Each product has product_id, title, description, short_description, image, calories, cost, size, badges, tags, customization_available, available_now, and groups[] — a recursive customization tree: each group has id, name, and options[], and each option has id, name, cost, default, and its own nested groups[] (e.g. choosing Boneless can reveal a further "Sauced or not?" group).
| Field | Filled in, of 15 checked | Values in the sample |
|---|---|---|
| id | 15 | |
| name | 15 | “Featured Items” and 14 other values |
| image | 15 | olo-images-live.imgix.net |
| slug | 15 | |
| catering | 15 | true in 4 of 15 |
| spotlight | 15 | true in 1 of 15 |
| products | 15 | median 7 entries |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/zaxbys/menu" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"categories": [
{
"id": 71357,
"name": "Fingerz™ & Wings Meals",
"image": "https://olo-images-live.imgix.net/dc/example.png",
"catering": false,
"slug": "fingerz-wings-meals",
"spotlight": true,
"products": [
{
"product_id": 113251777,
"title": "Lemon Pepper Wings & Things Meal",
"description": "5 Traditional Wings tossed in our zesty, tangy Lemon Pepper Dry Rub with Ranch, plus 3 Chicken Fingerz™ with Zax Sauce®.",
"calories": "1440 - 1770",
"cost": 0,
"customization_available": true,
"available_now": true,
"groups": [
{
"id": 4157392792,
"name": "Boneless or traditional?",
"options": [
{
"id": 17466794649,
"name": "Boneless",
"cost": 0,
"default": true,
"groups": [
{
"id": 4157392906,
"name": "Sauced or not?",
"options": [
{
"id": 17466794964,
"name": "Regular Fingerz",
"cost": 15,
"default": true
},
{
"id": 17466794963,
"name": "Sauced Fingerz",
"cost": 17,
"default": false
}
]
}
]
}
]
}
]
}
]
}
],
"category_count": 15,
"product_count": 106,
"source_url": "https://zapi.zaxbys.com/v1/menu/generic?includePrimaryModifiers=true",
"fetched_at": "2026-09-05T00:00:00Z"
}
}Request schema
No body schema
Response schema
#/definitions/zaxbys.menuResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | Code is the HTTP status code or a custom code used to indicate the result of the request @example 200 | |||
| data | zaxbys.MenuResponse | No | ||||
| data.categories | array | No | ||||
| data.categories[].catering | boolean | No | Catering marks a catering-only section (larger platters/boxed lunches), separate from the everyday menu. | |||
| data.categories[].id | integer | No | ||||
| data.categories[].image | string | No | ||||
| data.categories[].name | string | No | Fingerz™ & Wings Meals | |||
| data.categories[].products | array | No | ||||
| data.categories[].products[].available_now | boolean | No | AvailableNow reflects the upstream's own current-availability flag (e.g. a limited-time item outside its active window is excluded here, not filtered out of the response -- callers can decide what to do with a not-currently-available item). | |||
| data.categories[].products[].badges | array | No | ||||
| data.categories[].products[].calories | string | No | 1440 - 1770 | |||
| data.categories[].products[].cost | number | No | 0 | |||
| data.categories[].products[].customization_available | boolean | No | ||||
| data.categories[].products[].description | string | No | ||||
| data.categories[].products[].groups | array | No | ||||
| data.categories[].products[].groups[].id | integer | No | ||||
| data.categories[].products[].groups[].name | string | No | Boneless or traditional? | |||
| data.categories[].products[].groups[].options | array | No | ||||
| data.categories[].products[].groups[].options[].cost | number | No | 17 | |||
| data.categories[].products[].groups[].options[].default | boolean | No | ||||
| data.categories[].products[].groups[].options[].groups | array | No | ||||
| data.categories[].products[].groups[].options[].id | integer | No | ||||
| data.categories[].products[].groups[].options[].name | string | No | Sauced Fingerz | |||
| data.categories[].products[].image | string | No | ||||
| data.categories[].products[].product_id | integer | No | 113251777 | |||
| data.categories[].products[].short_description | string | No | ||||
| data.categories[].products[].size | string | No | ||||
| data.categories[].products[].tags | array | No | ||||
| data.categories[].products[].title | string | No | Lemon Pepper Wings & Things Meal | |||
| data.categories[].slug | string | No | ||||
| data.categories[].spotlight | boolean | No | ||||
| data.category_count | integer | No | 15 | |||
| data.fetched_at | string | No | ||||
| data.product_count | integer | No | 106 | |||
| data.source_url | string | No | ||||
| msg | unknown | No | Msg is the message that describes the result of the request @example "Request successful" |
| Status | Description | Schema |
|---|---|---|
| 429 | Too Many Requests | #/definitions/app.Response |
| 503 | Service Unavailable | #/definitions/app.Response |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/zaxbys/menu" \
-H "x-api-key: $CRAWLORA_API_KEY"