FiveGuys API endpoint
Returns one restaurant's full menu exactly as Five Guys' own ordering platform sells it, including real per-item prices -- the one field no other endpoint in this family can surface (GET /fiveguys/menu is fiveguys.com's own marketing content and carries no price at all). Categories and items are returned with name, description, price, calories (a single value or a real range, e.g. a fountain drink sized at checkout), an image, and whether the platform currently has the item available. id is the ordering platform's own restaurant id from GET /fiveguys/ordering-locations' locations[].id -- it is not a Yext entity id and does not correspond to any id from GET /fiveguys/search, /fiveguys/nearby, /fiveguys/directory, or /fiveguys/store.
/fiveguys/ordering-menuQuery parameters:
id (required) — the ordering platform's own restaurant id, from /api/v1/fiveguys/ordering-locations' locations[].id. This is not a Yext entity id and does not correspond to any id returned by /api/v1/fiveguys/search, /api/v1/fiveguys/nearby, /api/v1/fiveguys/directory, or /api/v1/fiveguys/store — those describe the same physical restaurants through a different upstream with its own, unrelated identifiers.An id that is not the ordering platform's numeric id format is rejected as invalid before any upstream call.
The ordering platform rate-limits bursts. When it does, this endpoint returns 503 with a retry message rather than partial or malformed data; retry shortly. Responses are publicly cacheable for four hours upstream, so there is no need to poll this endpoint aggressively.
Response includes id (echoing the request), categories[], count (total item count across every category), source_url, and fetched_at. Each category has id, name, slug (when published), description (when published), and items[]. Each item has:
id, name, slug, description, short_description (when published).cost — the item's real price in the store's own currency.calories (omitted when the platform publishes no figure): an object with min and max. min equals max for a single published value. A genuine range (e.g. a fountain drink, sized at checkout) sets min below max — including a range starting at 0 calories, which is a real minimum, not a missing figure.image_url (when the platform publishes an image for this item).available_now, available_always — the platform's own live availability for this item at this store, independent of whether the store itself is open. An item can be permanently unavailable (available_always: false, available_now: false) or time-boxed to certain hours.| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| id | string | Yes | The ordering platform's restaurant id, from GET /fiveguys/ordering-locations' locations[].id | 23841 | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/fiveguys/ordering-menu?id=23841" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"id": "23841",
"categories": [
{
"id": "87071",
"name": "Burgers",
"items": [
{
"id": "1883259",
"name": "Hamburger",
"slug": "hamburger",
"description": "Fresh, hand-formed patties hot off the grill and placed on a soft, toasted sesame seed bun. Choose as many toppings as you want.",
"cost": 11.79,
"calories": {
"min": 840,
"max": 840
},
"image_url": "https://olo-images-live.imgix.net/a2/a242c316a1e04d049bb3ab0475a6bd1b.png",
"available_now": true,
"available_always": true
}
]
},
{
"id": "87074",
"name": "Drinks",
"items": [
{
"id": "1883301",
"name": "Regular Drink",
"slug": "regular-drink",
"cost": 3.59,
"calories": {
"min": 0,
"max": 360
},
"available_now": true,
"available_always": true
}
]
}
],
"count": 36,
"source_url": "https://order.fiveguys.com/restaurants/23841/menu?nomnom=add-restaurant-to-menu",
"fetched_at": "2026-09-06T14:00:00Z"
}
}Request schema
No body schema
Response schema
#/definitions/fiveguys.orderingMenuResponseDoc
| 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 | fiveguys.OrderingMenuResponse | No | ||||
| data.categories | array | No | ||||
| data.categories[].description | string | No | ||||
| data.categories[].id | string | No | 87071 | |||
| data.categories[].items | array | No | ||||
| data.categories[].items[].available_always | boolean | No | ||||
| data.categories[].items[].available_now | boolean | No | AvailableNow and AvailableAlways report the platform's own live availability for this item at this store, independent of the store's own open/closed state -- an item can be permanently 86'd (AvailableAlways false, AvailableNow false) or time-boxed to certain hours (AvailableAlways false, AvailableNow reflecting the current time). | |||
| data.categories[].items[].calories | fiveguys.OrderingMenuItemCalories | No | ||||
| data.categories[].items[].calories.max | integer | No | 840 | |||
| data.categories[].items[].calories.min | integer | No | 840 | |||
| data.categories[].items[].cost | number | No | 11.79 | Cost is the item's price in the store's own currency, exactly as published -- this is the field every other Five Guys endpoint in this family cannot surface (see the package doc's pricing section). | ||
| data.categories[].items[].description | string | No | ||||
| data.categories[].items[].id | string | No | 1883259 | |||
| data.categories[].items[].image_url | string | No | ||||
| data.categories[].items[].name | string | No | Hamburger | |||
| data.categories[].items[].short_description | string | No | ||||
| data.categories[].items[].slug | string | No | hamburger | |||
| data.categories[].name | string | No | Burgers | |||
| data.categories[].slug | string | No | burgers | |||
| data.count | integer | No | 36 | Count is the total item count across every returned category. | ||
| data.fetched_at | string | No | 2026-09-06T12:00:00Z | |||
| data.id | string | No | 23841 | ID echoes the requested ordering-platform restaurant id. | ||
| 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 |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 404 | Not Found | #/definitions/app.Response |
| 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/fiveguys/ordering-menu?id=23841" \
-H "x-api-key: $CRAWLORA_API_KEY"