McDonalds API endpoint
Returns one market's McDonald's menu categories -- 13 in the United States at time of writing, including breakfast, burgers, chicken-and-fish-sandwiches, mcnuggets-and-mccrispy-strips, snack-wrap, fries-sides, happy-meal, sweets-treats, mccafe-coffees, drinks, sauces-and-condiments and the two value menus; other markets publish their own, from 6 in Switzerland to 17 in Australia. Each entry's slug is the value GET /mcdonalds/menu takes. Slugs are not portable between markets, so pass the same country back. Eight markets publish a reachable menu, fewer than the ten the restaurant locator covers.
/mcdonalds/categoriesTakes no parameters.
13 categories at time of writing: extra-value-meals-menu, mcvalue-menu, breakfast, burgers, chicken-and-fish-sandwiches, mcnuggets-and-mccrispy-strips, snack-wrap, fries-sides, happy-meal, sweets-treats, mccafe-coffees, drinks, sauces-and-condiments.
Response includes categories[], count, source_url, and fetched_at. Each category has slug, name, and url.
Markets:
country (optional, default us) — which market. One of us, ca, gb, au, ie, nz, ch, se.Category slugs and item ids are market-specific: whats-new exists in Great Britain and Ireland but not the United States, and the same numeric item id means different products in different markets. Always pass the same country back through /mcdonalds/categories → /mcdonalds/menu → /mcdonalds/item. The response echoes country so a mixed-market workflow stays self-describing.
The three endpoints support different market sets — the locator ten, the catalog eight, nutrition seven — because McDonald's publishes different surfaces per market, not because of a limitation here. Great Britain, for example, publishes a menu but no nutrition surface. Sweden's menu lives under a different path segment (/se/sv-se/var-meny, not /se/sv-se/menu) than every other market, but otherwise uses the same page shape.
| Field | Filled in, of 17 checked | Values in the sample |
|---|---|---|
| slug | 17 | |
| name | 17 | “World Menu Heist” and 16 other values |
| url | 17 | mcdonalds.com |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| country | string | No | Market (default us). One of us, ca, gb, au, ie, nz, ch, se. Allowed values: us, ca, gb, 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/categories?country=us" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"categories": [
{
"slug": "breakfast",
"name": "Breakfast",
"url": "https://www.mcdonalds.com/us/en-us/full-menu/breakfast.html"
}
],
"count": 13,
"source_url": "https://www.mcdonalds.com/us/en-us/full-menu.html",
"fetched_at": "2026-08-31T05:10:00Z"
}
}Request schema
No body schema
Response schema
#/definitions/mcdonalds.categoriesResponseDoc
| 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.CategoriesResponse | No | ||||
| data.categories | array | No | ||||
| data.categories[].name | string | No | Breakfast | |||
| data.categories[].slug | string | No | breakfast | |||
| data.categories[].url | string | No | ||||
| data.count | integer | No | 13 | |||
| data.country | string | No | us | Country echoes the market these slugs belong to. Slugs are NOT portable across markets -- pass the same country back to /mcdonalds/menu. | ||
| 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 |
|---|---|---|
| 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/categories?country=us" \
-H "x-api-key: $CRAWLORA_API_KEY"