Wendys API endpoint
Returns one item's full detail. A simple item (is_combo false) returns its description, base price, calories, every size/weight variant (e.g. Small/Medium/Large fries, each with its own price and calories, with is_default marking the one Wendy's own page pre-selects), and every modifier component -- default (comes with the item), extra (a paid add-on) and required (the caller must pick one option from a named group, e.g. a salad's dressing) -- each with its own ingredient description and allergen list, since Wendy's publishes allergens per-component rather than as one whole-item field. The top-level allergens field is the union across default components and each required group's default-selected option only. A combo (is_combo true) instead returns combo_slots: its entree/side/drink composition and every product each slot can be built from, since a combo's own price and calories vary by what is chosen. A combo slot's product ids are the same items sold standalone in their own categories -- call this endpoint again on one of those for its own full component/allergen detail. Category and item slugs come from GET /wendys/categories and GET /wendys/menu.
/wendys/itemQuery parameters:
category (required) — category slug from /api/v1/wendys/categories, e.g. hamburgers.item (required) — item slug from /api/v1/wendys/menu's items[].slug, e.g. daves-combo.is_combo: false)Response includes description, base_price, calories, components[], variants[], and allergens[].
variants[] lists every size/weight variant (e.g. Small/Medium/Large fries), each with its own item_id, name, short_name, description, base_price, calories, and is_default — a single-size item has exactly one variant. The top-level description/base_price/calories fields mirror the default variant.components[] lists every modifier making up the default variant: group is default (comes with the item), extra (a paid add-on), or required (the caller must choose one option from a named group, e.g. a salad's dressing — required_group_name and is_default_option are set for these). Each component has its own description and allergens[], since Wendy's publishes allergens per-component (in the ingredient statement's "CONTAINS: ..." line) rather than as one whole-item field.allergens[] at the top level is the union of allergens across the item's default components and each required group's default-selected option only — i.e. the item's allergen profile as configured on Wendy's own page before any customization.is_combo: true)Response instead includes combo_slots[]: each slot (slot_type — ENTREE, SIDE, DRINK, etc.) lists every options[] product it can be built from (product_id, name, base_price, calories, is_default), since a combo's own price and calories vary by what is chosen in each slot. A combo slot's product ids are the same items sold standalone in their own categories — call /api/v1/wendys/item again on one of those for its own full component/allergen detail.
Example responses:
{"code":200,"msg":"OK","data":{"category":"hamburgers","item":"parmesan-caesar-salad","name":"Parmesan Caesar Salad","is_combo":false,"description":"Made fresh daily with romaine lettuce, grilled chicken, Italian cheeses, a crunchy Parmesan crumble (crouton), and creamy Caesar dressing.","base_price":7.99,"calories":"520 Cal","components":[{"name":"Grilled Chicken","description":"Boneless Skinless Chicken Breast Meat with Rib Meat, Water...","group":"default"},{"name":"Caesar Dressing","description":"Soybean Oil, Water, Distilled Vinegar, Parmesan Cheese...CONTAINS: ANCHOVIES, EGG, MILK.","group":"required","required_group_name":"Dressing","is_default_option":true,"allergens":["Anchovies","Egg","Milk"]}],"variants":[{"item_id":"42208","name":"Parmesan Caesar Salad","base_price":7.99,"calories":"520 Cal","is_default":true}],"allergens":["Anchovies","Egg","Milk"],"source_url":"https://order.wendys.com/us/en/national/menu/hamburgers/parmesan-caesar-salad","fetched_at":"2026-09-01T00:00:00Z"}}
{"code":200,"msg":"OK","data":{"category":"combos","item":"daves-combo","name":"Dave's Combo","is_combo":true,"combo_slots":[{"slot_type":"ENTREE","name":"Dave's Hamburger Combo","options":[{"product_id":"10000000000081","name":"Dave's Single®","base_price":8.13,"calories":"560 Cal","is_default":true},{"product_id":"10000000000082","name":"Dave's Double®","base_price":9.79,"calories":"810 Cal"}]},{"slot_type":"SIDE","options":[{"product_id":"10000000000090","name":"Small Fries","base_price":2.79,"calories":"260 Cal","is_default":true}]}],"source_url":"https://order.wendys.com/us/en/national/menu/combos/daves-combo","fetched_at":"2026-09-01T00:00:00Z"}}
| Field | Filled in, of 3 checked | Values in the sample |
|---|---|---|
| slot_type | 3 | “ENTREE” and 2 other values |
| name | 3 | “Dave's Hamburger Combo” and 2 other values |
| options | 3 | median 11 entries |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| category | string | Yes | Category slug from /wendys/categories | hamburgers | |
| item | string | Yes | Item slug from /wendys/menu's items[].slug | daves-combo | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/wendys/item?category=hamburgers&item=daves-combo" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"category": "hamburgers",
"item": "parmesan-caesar-salad",
"name": "Parmesan Caesar Salad",
"is_combo": false,
"description": "Made fresh daily with romaine lettuce, grilled chicken, Italian cheeses, a crunchy Parmesan crumble (crouton), and creamy Caesar dressing.",
"base_price": 7.99,
"calories": "520 Cal",
"components": [
{
"name": "Grilled Chicken",
"description": "Boneless Skinless Chicken Breast Meat with Rib Meat, Water...",
"group": "default"
},
{
"name": "Caesar Dressing",
"description": "Soybean Oil, Water, Distilled Vinegar, Parmesan Cheese...CONTAINS: ANCHOVIES, EGG, MILK.",
"group": "required",
"required_group_name": "Dressing",
"is_default_option": true,
"allergens": [
"Anchovies",
"Egg",
"Milk"
]
}
],
"variants": [
{
"item_id": "42208",
"name": "Parmesan Caesar Salad",
"base_price": 7.99,
"calories": "520 Cal",
"is_default": true
}
],
"allergens": [
"Anchovies",
"Egg",
"Milk"
],
"source_url": "https://order.wendys.com/us/en/national/menu/hamburgers/parmesan-caesar-salad",
"fetched_at": "2026-09-01T00:00:00Z"
}
}Request schema
No body schema
Response schema
#/definitions/wendys.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 | wendys.ItemResponse | No | ||||
| data.allergens | array | No | Allergens is the union of allergens across the item's default components and each required group's default-selected option -- i.e. the item's allergen profile as configured on Wendy's own page before any customization. Customizing (removing a default component, picking a different required option) changes this in ways this summary field cannot capture; Components lists every option's own allergens individually for that. | |||
| data.base_price | number | No | 7.99 | |||
| data.calories | string | No | 520 Cal | |||
| data.category | string | No | hamburgers | |||
| data.combo_slots | array | No | ComboSlots is set only when IsCombo is true. | |||
| data.combo_slots[].name | string | No | Dave's Hamburger Combo | |||
| data.combo_slots[].options | array | No | ||||
| data.combo_slots[].options[].base_price | number | No | 5.59 | |||
| data.combo_slots[].options[].calories | string | No | 560 Cal | |||
| data.combo_slots[].options[].is_default | boolean | No | ||||
| data.combo_slots[].options[].name | string | No | Dave's Single® | |||
| data.combo_slots[].options[].product_id | string | No | 10000000000081 | |||
| data.combo_slots[].slot_type | string | No | ENTREE | |||
| data.components | array | No | ||||
| data.components[].allergens | array | No | Wheat,Milk | |||
| data.components[].description | string | No | ||||
| data.components[].group | string | No | default | Group is "default" (comes with the item), "extra" (a paid add-on), or "required" (the caller must choose one option from a named group, e.g. a salad's dressing). | ||
| data.components[].is_default_option | boolean | No | ||||
| data.components[].name | string | No | Grilled Chicken | |||
| data.components[].price | number | No | 0.5 | |||
| data.components[].required_group_name | string | No | Dressing | RequiredGroupName and IsDefaultOption are only set for Group == "required" -- e.g. RequiredGroupName "Dressing", with IsDefaultOption true on whichever dressing Wendy's page pre-selects. | ||
| data.description | string | No | Description, BasePrice, Calories, Components and Variants are set only when IsCombo is false. | |||
| data.fetched_at | string | No | ||||
| data.image_url | string | No | ||||
| data.is_combo | boolean | No | ||||
| data.item | string | No | daves-combo | |||
| data.name | string | No | Dave's Combo | |||
| data.source_url | string | No | ||||
| data.variants | array | No | ||||
| data.variants[].base_price | number | No | 2.79 | |||
| data.variants[].calories | string | No | 260 Cal | |||
| data.variants[].description | string | No | ||||
| data.variants[].is_default | boolean | No | IsDefault marks the variant Wendy's own page selects by default. | |||
| data.variants[].item_id | string | No | 40054 | |||
| data.variants[].name | string | No | Small Natural-Cut Fries | |||
| data.variants[].short_name | string | No | Small | |||
| 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/wendys/item?category=hamburgers&item=daves-combo" \
-H "x-api-key: $CRAWLORA_API_KEY"