Chipotle API endpoint
Returns Chipotle's menu presentation metadata -- the data no other Chipotle endpoint carries. Categories are the menu nav sections (Burrito, Bowl, Salad, ...) with their own description, imagery and the customization sections each offers. Items carry per-item nutrition (calories and portion) and dietary tag codes. Item sections and item groups describe the customization pick-groups and shared item aliases (e.g. cauliflower rice offered as both an entree side and a taco filling). Dietary tag groups are the full tag taxonomy (Plant Based, Lifestyle, I'm Avoiding, ...) that item dietary tag codes join against for a human-readable name and badge. Join on item_id against /chipotle/menu or /chipotle/restaurant/menu for prices; this endpoint has none.
/chipotle/menu/metadataReturns Chipotle's menu presentation metadata — the only source in this family for nutrition, dietary tags, and menu navigation structure.
None of the other Chipotle endpoints carry this data. /api/v1/chipotle/menu and /api/v1/chipotle/restaurant/menu list orderable items and (for the latter) their prices, but neither publishes calories, portion size, or dietary/allergen tags. This endpoint is the join target: fetch it alongside either menu endpoint and match on item_id.
The response has five parts:
categories[] — the menu nav sections (Burrito, Bowl, Salad, Tacos, ...), each with its own description, thumbnail_image_url/banner_image_url, the customization item_sections[] it offers, and the item_ids[] it lists. sort_order is the position in Chipotle's top-level nav bar and is omitted for categories only reachable as a sub-section (e.g. "Chips & Sides"), not shown in the nav itself.items[] — per-item nutrition[] (name/value/unit, e.g. {"name":"Calories","value":"180","unit":"cal"}) and dietary_tags[] (short codes like vege, keto), plus any merchandising tags[]. Carries no price.item_sections[] — the customization pick-groups (e.g. AddonContentGroup, alias "Add-Ons | Always On The Side") and the item ids each offers.item_groups[] — shared item aliases used across menu contexts, e.g. Mexican Cauliflower Rice offered as both an entree side and a taco filling, with the calorie range Chipotle displays for it.dietary_tag_groups[] — the full tag taxonomy (Plant Based, Lifestyle, I'm Avoiding, ...), each with a badge color and its member tags. dietary_tag_groups[].tags[].tag_code is what items[].dietary_tags values join against for the human-readable tag_name (e.g. vege → "Vegetarian").Query parameters:
channel (optional) — the ordering surface. One of web, web-mobile. Default web-mobile, the surface chipotle.com's own responsive site uses. Matching is case-insensitive; any other value is rejected as invalid. (Chipotle's kiosk channel exists upstream but returns empty categories/items — it is in-store hardware, not a consumer read surface — and is intentionally not offered here.)region (optional) — the country catalog. One of US, CA. Default US. Any other value is rejected as invalid (Chipotle only serves these two through this surface; anything else 500s upstream).Response includes channel, region, categories[], items[], item_sections[], item_groups[], dietary_tag_groups[], source_url, and fetched_at.
| Field | Filled in, of 423 checked | Values in the sample |
|---|---|---|
| item_id | 423 | |
| thumbnail_url | 423 | chipotle.com |
| is_rewards_exclusive | 423 | true in 0 of 423 |
| nutrition | 423 | median 2 entries |
| dietary_tags | 337 | median 2 entries |
| tags | 214 | median 2 entries |
| as_customization_name | 7 | Extra (4), Normal (3) |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| channel | string | No | Ordering surface. One of web, web-mobile. Default web-mobile. Allowed values: web, web-mobile. | web-mobile | |
| region | string | No | Country catalog. One of US, CA. Default US. Allowed values: US, CA. | US | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/chipotle/menu/metadata?channel=web®ion=US" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"channel": "web-mobile",
"region": "US",
"categories": [
{
"category_id": "a062f745-2dac-4d39-9437-27f4d047502c",
"type": "default",
"display_name": "Burrito",
"menu_item_type": "Burrito",
"description": "Your choice of freshly grilled meat or sofritas wrapped in a warm flour tortilla...",
"item_sections": [
"RiceContentGroup",
"BeansContentGroup",
"Toppings"
],
"is_rewards_exclusive": false,
"sort_order": 1,
"item_ids": [
"CMG-16",
"CMG-15",
"CMG-8"
]
}
],
"items": [
{
"item_id": "CMG-1",
"thumbnail_url": "https://www.chipotle.com/content/dam/chipotle/menu/menu-items/cmg-6601-chicken/web-mobile/order.png",
"nutrition": [
{
"name": "Calories",
"value": "180",
"unit": "cal"
},
{
"name": "Portion",
"value": "4",
"unit": "oz"
}
],
"dietary_tags": [
"pale",
"keto"
]
}
],
"item_sections": [
{
"name": "AddonContentGroup",
"display_name": "Add-Ons | Always On The Side",
"sort_order": 10,
"item_ids": [
"CMG-5414",
"CMG-5410"
]
}
],
"item_groups": [
{
"name": "CauliRiceEntree",
"display_name": "Mexican Cauliflower Rice",
"default_item_id": "CMG-1036",
"calorie_range_min": 60,
"calorie_range_max": 60
}
],
"dietary_tag_groups": [
{
"group_id": "4c5a70f6-40f5-4a8e-968a-3b69f675ab7f",
"group_name": "Plant Based",
"badge_text": "V",
"badge_color": "#6e7c1b",
"select_type": "single",
"is_active": true,
"tags": [
{
"tag_code": "vege",
"tag_name": "Vegetarian",
"preferred_badge_text": "V",
"sort_order": 1
},
{
"tag_code": "vega",
"tag_name": "Vegan",
"preferred_badge_text": "V+",
"sort_order": 2
}
]
}
],
"source_url": "https://services.chipotle.com/menu-metadata/v1/menu-metadata?channel=web-mobile®ion=US",
"fetched_at": "2026-09-01T10:15:00Z"
}
}Request schema
No body schema
Response schema
#/definitions/chipotle.menuMetadataResponseDoc
| 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 | chipotle.MenuMetadataResponse | No | ||||
| data.categories | array | No | ||||
| data.categories[].banner_image_url | string | No | ||||
| data.categories[].category_id | string | No | a062f745-2dac-4d39-9437-27f4d047502c | |||
| data.categories[].description | string | No | ||||
| data.categories[].display_name | string | No | Burrito | |||
| data.categories[].is_rewards_exclusive | boolean | No | false | |||
| data.categories[].item_ids | array | No | CMG-16,CMG-15 | |||
| data.categories[].item_sections | array | No | RiceContentGroup,BeansContentGroup | |||
| data.categories[].menu_item_type | string | No | Burrito | |||
| data.categories[].sort_order | integer | No | 1 | SortOrder is this category's position in Chipotle's top-level menu nav. It is a pointer and omitted for categories only reachable as a customization sub-section (e.g. "Chips & Sides"), not in the nav bar itself -- those have no real position to report. | ||
| data.categories[].tags | array | No | ||||
| data.categories[].tags[].type | string | No | rewards | |||
| data.categories[].tags[].value | string | No | Exclusive | |||
| data.categories[].thumbnail_image_url | string | No | ||||
| data.categories[].type | string | No | default | Type is Chipotle's own category kind: default, quantity, nested or preconfigured. | ||
| data.channel | string | No | web-mobile | |||
| data.dietary_tag_groups | array | No | ||||
| data.dietary_tag_groups[].badge_color | string | No | #6e7c1b | |||
| data.dietary_tag_groups[].badge_text | string | No | V | |||
| data.dietary_tag_groups[].group_id | string | No | 4c5a70f6-40f5-4a8e-968a-3b69f675ab7f | |||
| data.dietary_tag_groups[].group_name | string | No | Plant Based | |||
| data.dietary_tag_groups[].is_active | boolean | No | true | |||
| data.dietary_tag_groups[].select_type | string | No | single | |||
| data.dietary_tag_groups[].sort_order | integer | No | 0 | |||
| data.dietary_tag_groups[].subheader | string | No | Tagged items contain your selection. | |||
| data.dietary_tag_groups[].tags | array | No | ||||
| data.dietary_tag_groups[].tags[].preferred_badge_text | string | No | V | |||
| data.dietary_tag_groups[].tags[].sort_order | integer | No | 1 | |||
| data.dietary_tag_groups[].tags[].tag_code | string | No | vege | TagCode is the short code items reference in their own dietary_tags list (see MenuMetadataItem.DietaryTags). | ||
| data.dietary_tag_groups[].tags[].tag_name | string | No | Vegetarian | |||
| data.fetched_at | string | No | ||||
| data.item_groups | array | No | ||||
| data.item_groups[].calorie_range_max | integer | No | 60 | |||
| data.item_groups[].calorie_range_min | integer | No | 60 | |||
| data.item_groups[].default_item_id | string | No | CMG-1036 | |||
| data.item_groups[].display_name | string | No | Mexican Cauliflower Rice | |||
| data.item_groups[].display_range_format | boolean | No | false | |||
| data.item_groups[].name | string | No | CauliRiceEntree | |||
| data.item_sections | array | No | ||||
| data.item_sections[].display_name | string | No | Add-Ons | Always On The Side | |||
| data.item_sections[].has_select_none_option | boolean | No | false | |||
| data.item_sections[].item_ids | array | No | CMG-5414,CMG-5410 | |||
| data.item_sections[].name | string | No | AddonContentGroup | |||
| data.item_sections[].sort_order | integer | No | 10 | |||
| data.items | array | No | ||||
| data.items[].as_customization_name | string | No | Normal | AsCustomizationName is the label Chipotle shows for this item when it appears as a customization choice rather than a standalone item. | ||
| data.items[].dietary_tags | array | No | vege,vega,pale,keto | DietaryTags are tag codes (e.g. "vege", "keto") joinable against DietaryTagGroups[].Tags[].TagCode for the human-readable name. | ||
| data.items[].is_rewards_exclusive | boolean | No | false | |||
| data.items[].item_id | string | No | CMG-1 | |||
| data.items[].nutrition | array | No | ||||
| data.items[].nutrition[].name | string | No | Calories | |||
| data.items[].nutrition[].unit | string | No | cal | |||
| data.items[].nutrition[].value | string | No | 180 | |||
| data.items[].tags | array | No | ||||
| data.items[].tags[].type | string | No | rewards | |||
| data.items[].tags[].value | string | No | Exclusive | |||
| data.items[].thumbnail_url | string | No | ||||
| data.region | string | No | US | |||
| 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 |
| 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/chipotle/menu/metadata?channel=web®ion=US" \
-H "x-api-key: $CRAWLORA_API_KEY"