options na API) são escolhas que o cliente faz ao comprar um item: bebidas, molhos, ingredientes extras. Este guia cobre como criá-los, atualizá-los e controlar obrigatoriedade.Para a referência conceitual (tipos de grupo, campos obrigatórios), veja Fundamentos.optionGroups) com opções (options):{
"optionGroups": [
{
"id": "550e8400-e29b-41d4-a716-446655440010",
"name": "Escolha uma bebida",
"status": "AVAILABLE",
"optionGroupType": "OFFER_UNIT",
"min": 0,
"max": 1,
"optionIds": ["opt-coke", "opt-juice"]
}
],
"options": [
{
"id": "opt-coke",
"productId": "prod-coke",
"status": "AVAILABLE",
"price": {"value": 8.00}
},
{
"id": "opt-juice",
"productId": "prod-juice",
"status": "AVAILABLE",
"price": {"value": 10.00}
}
]
}optionIds. Cada opção referencia um product pelo productId.PUT /items:curl --request PUT \
--url 'https://merchant-api.ifood.com.br/catalog/v2.0/merchants/YOUR_MERCHANT_ID/items' \
--header 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
--header 'Content-Type: application/json' \
--data '{
"item": {
"id": "item-burger",
"type": "DEFAULT",
"status": "AVAILABLE",
"price": {"value": 25.00}
},
"products": [
{
"id": "prod-burger",
"name": "Hamburger",
"optionGroups": [
{"id": "550e8400-e29b-41d4-a716-446655440010", "min": 0, "max": 1},
{"id": "og-sauces", "min": 0, "max": 2}
]
},
{"id": "prod-coke", "name": "Coca-Cola"},
{"id": "prod-ketchup", "name": "Ketchup"},
{"id": "prod-mayo", "name": "Maionese"}
],
"optionGroups": [
{
"id": "550e8400-e29b-41d4-a716-446655440010",
"name": "Escolha uma bebida",
"status": "AVAILABLE",
"optionGroupType": "OFFER_UNIT",
"optionIds": ["opt-coke"]
},
{
"id": "og-sauces",
"name": "Escolha molhos",
"status": "AVAILABLE",
"optionGroupType": "INGREDIENTS",
"optionIds": ["opt-ketchup", "opt-mayo"]
}
],
"options": [
{
"id": "opt-coke",
"productId": "prod-coke",
"status": "AVAILABLE",
"price": {"value": 8.00}
},
{
"id": "opt-ketchup",
"productId": "prod-ketchup",
"status": "AVAILABLE",
"price": {"value": 0}
},
{
"id": "opt-mayo",
"productId": "prod-mayo",
"status": "AVAILABLE",
"price": {"value": 0}
}
]
}'price, mesmo que seja 0.PATCH /options/price em vez de reenviar o item inteiro:curl --request PATCH \
--url 'https://merchant-api.ifood.com.br/catalog/v2.0/merchants/YOUR_MERCHANT_ID/options/price' \
--header 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
--header 'Content-Type: application/json' \
--data '{
"optionId": "opt-coke",
"price": {"value": 9.00}
}'PATCH /options/status:curl --request PATCH \
--url 'https://merchant-api.ifood.com.br/catalog/v2.0/merchants/YOUR_MERCHANT_ID/options/status' \
--header 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
--header 'Content-Type: application/json' \
--data '{
"optionId": "opt-coke",
"status": "UNAVAILABLE"
}'min e max no grupo para controlar quantas opções o cliente pode escolher:| Regra | min | max |
|---|---|---|
| Obrigatório, 1 escolha | 1 | 1 |
| Obrigatório, múltiplas escolhas | 2 | 3 |
| Opcional, 1 escolha | 0 | 1 |
| Opcional, múltiplas escolhas | 0 | 5 |
AVAILABLE, o item inteiro fica indisponível. Diagnostique com GET /catalogs/{catalogId}/unsellableItems.PATCH /products/price em Endpoints.