Chipotle API endpoint
Returns one restaurant's live online menu split into entrees, sides, drinks and non-food items. This is the only Chipotle endpoint that carries prices: every item has both a dine-in price and a delivery price, which genuinely differ. Each item also carries its full customization tree -- contents (the individual fillings, salsas and sides that make it up, each with their own price pair) and content_groups (how many picks each group allows). Prices are per-restaurant, so two restaurants will legitimately return different numbers for the same item.
/chipotle/restaurant/menuThis is the only Chipotle endpoint that carries prices. Every item has both a dine-in price and a delivery_price, which genuinely differ. Prices are per-restaurant, so two restaurants will legitimately return different numbers for the same item.
Query parameters:
restaurant_number (required) — Chipotle's numeric restaurant id, e.g. 3982.include_unavailable (optional, default false) — include items the restaurant currently has unavailable.Response includes restaurant_number, entrees[], sides[], drinks[], non_food_items[], source_url, and fetched_at. Each item has item_id, name, category, type, pos_id, primary_filling, pricing (price, delivery_price), available, delivery_eligible, max_quantity, contents[], and content_groups[].
| Field | Filled in, of 65 checked | Values in the sample |
|---|---|---|
| item_id | 65 | |
| name | 65 | “Steak Burrito” and 64 other values |
| category | 65 | Entree in all 65 |
| type | 65 | “Burrito” and 8 other values |
| pos_id | 65 | |
| primary_filling | 65 | “Steak” and 10 other values |
| pricing | 65 | |
| available | 65 | true in 65 of 65 |
| delivery_eligible | 65 | true in 65 of 65 |
| max_quantity | 65 | 1 |
| contents | 65 | median 20 entries |
| content_groups | 65 | median 3 entries |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| restaurant_number | string | Yes | Chipotle's numeric restaurant id | 3982 | |
| include_unavailable | boolean | No | Include items the restaurant currently has unavailable (default false) | true | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/chipotle/restaurant/menu?restaurant_number=3982&include_unavailable=true" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"restaurant_number": 3982,
"entrees": [
{
"item_id": "CMG-5390",
"name": "2 Large Chips & 3 Large Sides",
"category": "Entree",
"type": "BYOChips",
"pos_id": 6023,
"primary_filling": "Large Chips (2)",
"pricing": {
"price": 19,
"delivery_price": 24.7
},
"available": true,
"delivery_eligible": true,
"max_quantity": 1,
"contents": [
{
"item_id": "CMG-5382",
"name": "Large Guacamole",
"type": "Included",
"pos_id": 6020,
"pricing": {
"price": 0,
"delivery_price": 0
},
"group_name": "BYOAlwaysIncludedContentGroup",
"delivery_eligible": true
}
],
"content_groups": [
{
"name": "BYOSalsaContentGroup",
"min_quantity": 1,
"max_quantity": 1
}
]
}
],
"sides": [],
"drinks": [],
"source_url": "https://services.chipotle.com/menuinnovation/v1/restaurants/3982/onlinemenu?channelId=web&includeUnavailableItems=false",
"fetched_at": "2026-08-31T04:20:00Z"
}
}Request schema
No body schema
Response schema
#/definitions/chipotle.restaurantMenuResponseDoc
| 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.RestaurantMenuResponse | No | ||||
| data.drinks | array | No | MenuItem record, 26 fields: available, category, content_groups, contents, delivery_eligible, item_id, max_quantity, name, pos_id, pricing, primary_filling, type. Described under Chipotle Menu API. | |||
| data.entrees | array | No | MenuItem record, 26 fields: available, category, content_groups, contents, delivery_eligible, item_id, max_quantity, name, pos_id, pricing, primary_filling, type. Described under Chipotle Menu API. | |||
| data.fetched_at | string | No | ||||
| data.non_food_items | array | No | MenuItem record, 26 fields: available, category, content_groups, contents, delivery_eligible, item_id, max_quantity, name, pos_id, pricing, primary_filling, type. Described under Chipotle Menu API. | |||
| data.restaurant_number | integer | No | 3982 | |||
| data.sides | array | No | MenuItem record, 26 fields: available, category, content_groups, contents, delivery_eligible, item_id, max_quantity, name, pos_id, pricing, primary_filling, type. Described under Chipotle Menu API. | |||
| 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/chipotle/restaurant/menu?restaurant_number=3982&include_unavailable=true" \
-H "x-api-key: $CRAWLORA_API_KEY"