Starbucks API endpoint
Returns Starbucks' full menu as a category tree: top-level categories, their child categories, and every product with its product number, form, product type, sizes, default size, availability, and image. Pair a product's product_number and form with /starbucks/product to fetch full detail including nutrition. store_number optionally scopes the menu to one store, using a store number from /starbucks/stores; a store-scoped menu marks items that store does not carry with availability NotAvailableHere, while the unscoped menu reports everything as Available. market selects which country catalog to return, one of us or ca, defaulting to us; the two differ substantially (roughly 282 US products vs 253 CA, with exclusives on both sides). Only these two markets are available.
/starbucks/menumarket is optional, one of us or ca, defaults to us. The two catalogs differ substantially — roughly 282 US products versus 253 CA, with exclusives on both sides (Banana Bread Latte and Maple Mini Pancakes are CA-only; the Protein Box line is US-only). These are the only two markets available.
store_number is optional, a Starbucks store number from /starbucks/stores, e.g. 101-54.
Notable response behavior:
children; products hang off the category that lists them. A category holds either child categories or products, not usually both.product_number and form. Pair those two with /starbucks/product/{product_number}/{form} to fetch full detail including nutrition. product_detail_url is the matching page on starbucks.com.form is the lowercase form slug: hot, iced, single, packaged, whole-bean, or via.product_type is Starbucks' own coarse classification in the menu tree: Beverage, Food, or Coffee.availability is Available for every product on the unscoped menu. When store_number is given, items that store does not carry are marked NotAvailableHere, so a store-scoped menu is the only way to get real per-store availability.category_count counts top-level categories; product_count counts distinct products anywhere in the tree.| Field | Filled in, of 9 checked | Values in the sample |
|---|---|---|
| name | 9 | “The Latest” and 8 other values |
| display_order | 9 | 1 to 9, median 5 |
| children | 9 | median 2 entries |
| image_url | 1 | cloudassets.starbucks.com |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| store_number | string | No | Starbucks store number to scope availability to, e.g. 101-54 | 101-54 | |
| market | string | No | us | Starbucks country site to read. One of: us, ca. Defaults to us Allowed values: us, ca. | us |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/starbucks/menu?market=us" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"store_number": "101-54",
"category_count": 9,
"product_count": 265,
"source_url": "https://www.starbucks.com/apiproxy/v1/ordering/menu?storeNumber=101-54",
"fetched_at": "2026-08-30T10:31:08Z",
"categories": [
{
"name": "The Latest",
"display_order": 1,
"children": [
{
"name": "Trending",
"display_order": 1,
"products": [
{
"name": "Iced Pumpkin Cream Chai",
"product_number": "2123774",
"form": "iced",
"product_type": "Beverage",
"availability": "Available",
"image_url": "https://cloudassets.starbucks.com/is/image/sbuxcorp/IcedPumpkinCreamChaiTeaLatte",
"display_order": 1,
"sizes": [
"Tall",
"Grande",
"Venti"
],
"default_size": "Grande",
"default_size_sku": "11151107",
"menu_uri": "/product/2123774/iced",
"product_detail_url": "https://www.starbucks.com/menu/product/2123774/iced"
}
]
}
]
}
]
}
}Request schema
No body schema
Response schema
#/definitions/starbucks.menuResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | starbucks.MenuResponse | No | ||||
| data.categories | array | No | ||||
| data.categories[].children | array | No | ||||
| data.categories[].display_order | integer | No | ||||
| data.categories[].hero_image_url | string | No | ||||
| data.categories[].image_url | string | No | ||||
| data.categories[].name | string | No | ||||
| data.categories[].products | array | No | ||||
| data.categories[].products[].availability | string | No | Availability is "Available" on the unscoped menu; a store-scoped menu also returns "NotAvailableHere" for items that store lacks. | |||
| data.categories[].products[].default_size | string | No | ||||
| data.categories[].products[].default_size_sku | string | No | ||||
| data.categories[].products[].display_order | integer | No | ||||
| data.categories[].products[].form | string | No | Form is the normalized, lowercase form slug ("iced", "hot", "single", "packaged", "whole-bean", "via") taken from the product's own menu URI. It is the second path segment Product requires. | |||
| data.categories[].products[].image_url | string | No | ||||
| data.categories[].products[].menu_uri | string | No | ||||
| data.categories[].products[].name | string | No | ||||
| data.categories[].products[].product_detail_url | string | No | ||||
| data.categories[].products[].product_number | string | No | ||||
| data.categories[].products[].product_type | string | No | ProductType is Starbucks' own coarse classification: "Beverage", "Food", or "Coffee". | |||
| data.categories[].products[].sizes | array | No | ||||
| data.category_count | integer | No | CategoryCount counts top-level categories; ProductCount counts distinct products anywhere in the tree. | |||
| data.fetched_at | string | No | ||||
| data.market | string | No | ||||
| data.product_count | integer | No | ||||
| data.source_url | string | No | ||||
| data.store_number | string | No | ||||
| msg | string | No | OK |
| 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/starbucks/menu?market=us" \
-H "x-api-key: $CRAWLORA_API_KEY"