Pular para o conteúdo principal

Criar e manter produtos do menu

Este guia cobre a criação de um produto com suas variantes, a associação de categorias de modificadores, e as atualizações que você fará depois — visibilidade, estoque e preço.

O fluxo em resumo​

Etapa 1 — categorias e cozinhas​

Um produto pertence a uma categoria e a uma cozinha; resolva ambos os ids primeiro:

GET /v1/menu/categories
GET /v1/menu/kitchens

Escopo necessário: menu:read. Uma categoria comporta no máximo 50 produtos — criar um além desse limite é rejeitado com catalog_limit_reached_products_per_category.

Etapa 2 — criar o produto​

POST /v1/menu/products

Escopo necessário: menu:write. Os preços são decimais, não em unidades mínimas, como em todos os endpoints de menu. Aceita application/json (sem imagem) ou multipart/form-data (campo product = o mesmo JSON como string, campo image = um arquivo jpeg/jpg/png/webp de até 5 MB).

curl -X POST https://public-api.olaclick.app/v1/menu/products \
-H "Authorization: Bearer olk_live_..." \
-H "Content-Type: application/json" \
-d '{
"category_id": "6b2f1a04-1c7e-4a2b-9f11-2d8e0b3c4d55",
"kitchen_id": "9c4f4203-9e2c-403d-88cc-7c0ce9e0f572",
"name": "Classic Burger",
"description": "Beef patty, cheddar, lettuce, tomato",
"variants": [
{
"name": "Regular",
"price": 8.5,
"original_price": 10,
"sku": "BURGER-REG"
}
]
}'
CampoObrigatórioNotas
category_id, kitchen_idSimPrecisam pertencer à sua empresa; um kitchen_id desconhecido é rejeitado com 422, um category_id desconhecido com 404.
nameSim1–191 caracteres.
descriptionNãoAté 550 caracteres.
visibleNãoPadrão true.
variantsSim1–30 itens. Cada um precisa de name, price, original_price (preço de lista) e sku (no máximo 20 caracteres); price não pode exceder original_price. cost e packaging_price são somente-escrita (aceitos, nunca retornados).
modifier_category_idsNãoAté 100 UUIDs distintos, na ordem de exibição. Omita para um produto sem modificadores.

A resposta é o produto criado com suas variantes e categorias de modificadores — veja a Referência da API REST para o shape completo.

Etapa 3 — adicionar ou atualizar variantes​

Um produto pode ganhar mais variantes (tamanhos, apresentações) depois de criado:

POST /v1/menu/products/{id}/variants
{ "name": "Large", "price": 10.5, "original_price": 12, "sku": "BURGER-LRG" }

Escopo necessário: menu:write. Mesmos campos obrigatórios de uma variante no corpo de criação: name, original_price, price, sku.

Para alterar uma variante existente — incluindo seu price, stock ou stock_threshold — use:

PATCH /v1/menu/products/{id}/variants/{variantId}
{ "stock": 40, "stock_threshold": 5 }

Todos os campos são opcionais, mas ao menos um é obrigatório; price ainda não pode exceder original_price quando ambos estão presentes na requisição.

Etapa 4 — sincronizar categorias de modificadores​

Liste o que está disponível, depois substitua a associação do produto em uma única chamada:

GET /v1/menu/modifier-categories
PUT /v1/menu/products/{id}/modifier-categories
{ "modifier_category_ids": ["8e2b4d6f-9a0c-4e1b-85d7-9f2a4c6e8b10"] }

Isso substitui as categorias de modificadores do produto por completo, na ordem informada — não é um diff de adicionar/remover. Todo id precisa ser distinto; um array vazio desassocia todas as categorias de modificadores.

Escopo necessário: menu:write.

Etapa 5 — atualizações (visibilidade, estoque, preço)​

  • Visibilidade, controle de estoque, mensagem para o cliente: PATCH /v1/menu/products/{id} — name, description, visible, stock_enabled, messages_for_customers. Ao menos um campo é obrigatório; a resposta não inclui variants (chame GET /v1/menu/products/{id} para o produto completo).
  • Estoque e preço por variante: PATCH /v1/menu/products/{id}/variants/{variantId}, como acima.

Erros de validação comuns​

StatusCódigoQuando
422validation_failed (kitchen_not_found)kitchen_id não pertence à sua empresa.
404não encontradocategory_id não existe ou pertence a outra empresa (na criação); o produto (e, nos endpoints de variante, a variante) não existe.
422catalog_limit_reached_products_per_categoryA categoria já tem 50 produtos.
422catalog_limit_reached_variants_per_productO produto já tem o número máximo de variantes permitido.
422validation_failedO price de uma variante excede seu original_price; um corpo de atualização não tem campos; modifier_category_ids tem duplicatas.
422modifier_category_not_foundUm item de modifier_category_ids não existe ou pertence a outra empresa.
403insufficient_scopeA API key não tem menu:read ou menu:write.

Fazendo isso pelo servidor MCP​

FerramentaO que faz
list_categories / list_kitchensResolve category_id / kitchen_id
create_productCria um produto com suas variantes (somente JSON, sem imagem)
create_product_variantAdiciona uma variante a um produto existente
update_product_variantAtualiza uma variante (preço, estoque, etc.)
list_modifier_categoriesEncontra modifier_category_ids válidos
sync_product_modifier_categoriesSubstitui as categorias de modificadores de um produto
list_products / get_productNavega o catálogo

Escopos necessários: menu:read, menu:write.

Observação: alterar a própria visibilidade/flag de controle de estoque de um produto (PATCH /v1/menu/products/{id}) é exclusivo do REST — ainda não há uma ferramenta MCP para isso.

Exemplos de prompts:

"Crie um produto chamado Classic Burger na categoria 6b2f1a04-1c7e-4a2b-9f11-2d8e0b3c4d55, cozinha 9c4f4203-9e2c-403d-88cc-7c0ce9e0f572, com uma variante a 8.5"

"Defina o estoque para 40 na variante ... do produto ..."

Veja a página do Servidor MCP para todos os parâmetros de cada ferramenta.