McDonalds API endpoint
Returns one McDonald's item's published nutrition detail: the full per-serving nutrient list (calories, protein, carbohydrates, total and saturated fat, trans fat, cholesterol, sodium, fibre, sugars, vitamins and minerals -- 21 values for a Big Mac), each with a stable machine key, a unit and a percent-daily-value where McDonald's prints one; plus the item's marketing description, allergen statement, full ingredient statement and image. Item ids come from GET /mcdonalds/menu and are market-specific, so pass the same country back. Seven markets serve this endpoint, fewer than the eight publishing a menu -- Great Britain has a menu but no nutrition surface. Combo meals legitimately carry no nutrient list. Prices are not available on this surface.
/mcdonalds/itemPrices are not available — McDonald's does not publish them on this surface.
Query parameters:
item_id (required) — McDonald's numeric product id, e.g. 200463.An item id McDonald's does not recognize returns a 404.
Response includes item_id, name, description, nutrients[], allergens, ingredients, image_url, source_url, and fetched_at.
Each entry in nutrients[] has name (the display name, e.g. Calories), key (McDonald's stable machine identifier, e.g. calories — safer to match on than the display name), value, unit, and daily_value where McDonald's prints a percent-daily-value. A Big Mac returns 21 nutrients.
value is a string rather than a number: McDonald's publishes some values with non-numeric qualifiers, and parsing to a number here would silently drop them.
Markets:
country (optional, default us) — which market. One of us, ca, au, ie, nz, ch, se.Item ids are market-specific — pass back the same country the id came from. Great Britain publishes a menu via /mcdonalds/categories and /mcdonalds/menu but has no nutrition surface, so gb is rejected here even though it is valid there. The response echoes country.
Combo meals legitimately return an empty nutrients list: McDonald's publishes nutrition for the component items, not the meal.
| Field | Filled in, of 21 checked | Values in the sample |
|---|---|---|
| name | 21 | “Calories” and 20 other values |
| key | 21 | |
| value | 21 | 0 to 2,430, median 11 |
| unit | 21 | grams (9), milligrams (8), Cal. (2) and 2 more |
| daily_value | 14 | 0 to 56, median 10 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| item_id | string | Yes | McDonald's numeric product id, from /mcdonalds/menu | 200463 | |
| country | string | No | Market (default us). One of us, ca, au, ie, nz, ch, se. Must match the market the item id came from. Allowed values: us, ca, au, ie, nz, ch, se. | us | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/mcdonalds/item?item_id=200463&country=us" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"item_id": "200463",
"name": "Big Mac",
"description": "Mouthwatering perfection starts with two 100% pure beef patties and Big Mac® sauce...",
"nutrients": [
{
"name": "Calories",
"key": "calories",
"value": "580",
"unit": "Cal."
},
{
"name": "Protein",
"key": "protein",
"value": "25",
"unit": "g"
},
{
"name": "Sodium",
"key": "sodium",
"value": "1060",
"unit": "mg"
}
],
"allergens": "Wheat, Sesame.",
"ingredients": "Ingredients: Enriched Flour (wheat Flour, Malted Barley Flour...)",
"image_url": "https://s7d1.scene7.com/is/image/mcdonalds/h-mcdonalds-Big-Mac",
"source_url": "https://www.mcdonalds.com/dnaapp/itemDetails?country=US&language=en&showLiveData=true&item=200463",
"fetched_at": "2026-08-31T05:10:00Z"
}
}Request schema
No body schema
Response schema
#/definitions/mcdonalds.itemResponseDoc
| 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 | mcdonalds.ItemResponse | No | ||||
| data.allergens | string | No | Allergens is McDonald's own allergen statement for the item. | |||
| data.country | string | No | us | Country echoes the market this item was read from. Item ids are NOT portable across markets. | ||
| data.description | string | No | ||||
| data.fetched_at | string | No | ||||
| data.image_url | string | No | ||||
| data.ingredients | string | No | Ingredients is the full ingredient statement. | |||
| data.item_id | string | No | 200463 | |||
| data.name | string | No | Big Mac | |||
| data.nutrients | array | No | Nutrients are the published per-serving nutrition values. | |||
| data.nutrients[].daily_value | string | No | 45 | DailyValue is the percent-daily-value where McDonald's prints one. | ||
| data.nutrients[].key | string | No | calories | Key is McDonald's stable machine identifier for the nutrient (e.g. "calories"), safer to match on than the display name. | ||
| data.nutrients[].name | string | No | Calories | |||
| data.nutrients[].unit | string | No | Cal. | |||
| data.nutrients[].value | string | No | 580 | Value is kept as a string because McDonald's publishes values like "580", "1060" and occasionally non-numeric qualifiers; parsing to a number here would silently drop the latter. | ||
| 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/mcdonalds/item?item_id=200463&country=us" \
-H "x-api-key: $CRAWLORA_API_KEY"