FiveGuys API endpoint
Returns Five Guys' public menu content: every category (Burgers, Fries, Shakes, Hot Dogs, Sandwiches, Drinks, Toppings) -- each with its own short description and cover image, plus its items' name, description, calories, and image -- or one category's items when category is given. Five Guys publishes no per-item price on this surface -- pricing is store-scoped and lives only behind its ordering flow, which this endpoint does not cover. Available in English (default) and Spanish via `lang`. Calories are shown exactly as published: a single value for most items, or a range (e.g. fries' "530-1100") for build-your-own items whose calories vary by size and toppings. Some items (drink categories, a few build-your-own items) publish no calorie figure at all; their calories field is omitted rather than estimated.
/fiveguys/menuReturns Five Guys' public menu content: every category, or one category's items when category is given. This is fiveguys.com's own marketing copy and carries no per-item price. For a genuinely priced menu, use /api/v1/fiveguys/ordering-menu with a store id from /api/v1/fiveguys/ordering-locations.
Query parameters:
lang (optional, default en) — content language. One of en, es. Any other value is rejected: Five Guys' CMS silently serves English for every other language code, so accepting one would report success for a language you did not get.category (optional) — one category slug to return only that category's items. Omit to return the full menu across every category. One of: burgers, fries, shakes, dogs, sandwiches, drinks, toppings.An unrecognized category value returns 400. A category with no published items would return 404 — in practice every one of the 7 categories above always resolves.
Response includes categories[], count (total items across every returned category), source_url, and fetched_at. Each category has slug, name (fiveguys.com's longer SEO page title), description (the site's short one-line category blurb, distinct from name), image_url (the category's cover image, omitted when the category has none set), source_url (the matching fiveguys.com/menu/<slug>/ page), modified_at, and items[]. Each item has:
slug — stable within its category, derived from Five Guys' own menu card identifier (e.g. hamburger, bacon-cheeseburger).name, description — exactly as published.calories (omitted when Five Guys publishes no figure for this item — genuinely absent for the drinks category and a couple of build-your-own items such as "Burger Bowl", not a parsing gap): an object with text (the raw displayed value, e.g. "840" or "530-1100"), min, and max. min equals max for a single published value; a range (e.g. fries, whose calories vary by size) sets both ends.image_url.Pass lang=es for the Spanish menu — category names, item names, descriptions and the category blurb are all translated.
Category slugs are language-specific. The Spanish categories are the same seven products but carry entirely different slugs (menu-de-hamburguesas-hamburgers-cheeseburgers-y-mucho-mas rather than burgers), and the CMS publishes no mapping between them. So:
lang=en (the default), category is validated against the documented English slug list.lang=es, pass a Spanish slug — read them from a lang=es response's categories[].slug. An unknown slug returns 404 rather than a validation error.| Field | Filled in, of 7 checked | Values in the sample |
|---|---|---|
| slug | 7 | |
| name | 7 | “Toppings para hamburguesas, perritos y sándwiches” and 6 other values |
| description | 7 | “Condimentos y toppings recién preparados. ¡Agrega todos los…” and 6 other values |
| source_url | 7 | fiveguys.com |
| modified_at | 7 | 2026-03-11 |
| items | 7 | median 8 entries |
| image_url | 3 | fiveguys.com |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| category | string | No | Optional. One category slug to return only that category's items. Omit to return the full menu across every category. With lang=en (the default) one of: burgers, fries, shakes, dogs, sandwiches, drinks, toppings. With lang=es the slugs differ -- read them from a lang=es response's categories[].slug. | ||
| lang | string | No | Optional. Content language: en (default) or es. Allowed values: en, es. | ||
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/fiveguys/menu?lang=en" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"categories": [
{
"slug": "burgers",
"name": "Burger Menu: Hamburgers, Cheeseburgers, and more",
"description": "Fresh, hand-formed patties hot off the grill with as many toppings as you'd like.",
"image_url": "https://www.fiveguys.com/wp-content/uploads/2025/02/card-menu-burgers.jpg",
"source_url": "https://www.fiveguys.com/menu/burgers/",
"modified_at": "2026-04-16T18:10:38Z",
"items": [
{
"slug": "hamburger",
"name": "Hamburger",
"description": "Fresh, hand-formed patties hot off the grill and placed on a soft, toasted sesame seed bun. Add as many toppings as you want.",
"calories": {
"text": "840",
"min": 840,
"max": 840
},
"image_url": "https://www.fiveguys.com/wp-content/uploads/2024/12/Hamburger.jpg"
}
]
}
],
"count": 8,
"source_url": "https://www.fiveguys.com/wp-json/wp/v2/menu_category?slug=burgers",
"fetched_at": "2026-09-05T12:00:00Z"
}
}Request schema
No body schema
Response schema
#/definitions/fiveguys.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 | fiveguys.MenuResponse | No | ||||
| data.categories | array | No | ||||
| data.categories[].description | string | No | Fresh, hand-formed patties hot off the grill with as many toppings as you'd like. | Description is fiveguys.com's own short category blurb (e.g. "Fresh, hand-formed patties hot off the grill with as many toppings as you'd like."), distinct from Name (the page's long SEO title) and from any one item's own Description. | ||
| data.categories[].image_url | string | No | ImageURL is this category's own hero/cover image, resolved from the site's WordPress media library. Empty when the category has none set. | |||
| data.categories[].items | array | No | ||||
| data.categories[].items[].calories | object | No | Calories is nil when fiveguys.com does not publish a figure for this item -- genuinely absent for drink categories (Coca-Cola Freestyle, Dr Pepper, Bottled Drinks) and a couple of build-your-own items (e.g. "Burger Bowl"), not parser drift. | |||
| data.categories[].items[].calories.max | integer | No | 1100 | |||
| data.categories[].items[].calories.min | integer | No | 530 | |||
| data.categories[].items[].calories.text | string | No | 530-1100 | |||
| data.categories[].items[].description | string | No | Fresh, hand-formed patties hot off the grill and placed on a soft, toasted sesame seed bun. Add as many toppings as you want. | Description is fiveguys.com's own marketing copy for the item, exactly as published (may mention e.g. "Available at select locations."). | ||
| data.categories[].items[].image_url | string | No | ||||
| data.categories[].items[].name | string | No | Hamburger | |||
| data.categories[].items[].slug | string | No | hamburger | |||
| data.categories[].modified_at | string | No | 2026-04-16T18:10:38Z | ModifiedAt is fiveguys.com's own last-modified timestamp for this category's content (UTC, RFC3339), when published. | ||
| data.categories[].name | string | No | Burger Menu: Hamburgers, Cheeseburgers, and more | |||
| data.categories[].slug | string | No | burgers | |||
| data.categories[].source_url | string | No | https://www.fiveguys.com/menu/burgers/ | SourceURL is the live fiveguys.com page this category's content mirrors. | ||
| data.count | integer | No | 53 | Count is the total item count across every returned category. | ||
| data.fetched_at | string | No | ||||
| 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/menu?lang=en" \
-H "x-api-key: $CRAWLORA_API_KEY"