Takeat
Versão da documentação
CatálogoProdutos

Documentação

Gerenciar produtos

Crie, edite e controle a disponibilidade do cardápio por canal.

A Nova API V1.0 permite cadastrar e editar produtos do restaurante sem expor exclusão. Com OAuth, as operações de escrita exigem products:write; consultar um produto ou o catálogo exige products:read, e o menu usa menu:read. A sessão do restaurante também é aceita, sem escopos de integração, e só pode alterar produtos do restaurant_id assinado no token.

Para entender o efeito de cada alteração, consulte a Referência de campos do produto: preços por canal, promoções, esgotamento, venda por peso e padrões na criação.

Antes de começar

Use o access_token obtido pelo OAuth, não a chave tk_ diretamente. Nos exemplos, TAKEAT_API_URL é https://public-api.takeat.app, sem /v1 no final. Substitua os IDs pelos registros do seu restaurante.

Se a credencial OAuth permite mais de um restaurante, acrescente ?restaurant_id=85 à URL de cada chamada, usando o ID autorizado desejado. Com sessão de restaurante, o contexto vem do token; um restaurant_id conflitante é rejeitado. O restaurante não é escolhido pelo corpo JSON.

ObjetivoRotaEscopo OAuth
Consultar categorias e produtos no formato legadoGET /v1/productsproducts:read
Consultar os campos atuais e a versão de um produtoGET /v1/products/{productId}products:read
Criar um produtoPOST /v1/productsproducts:write
Editar campos, inclusive esgotamentoPUT /v1/products/{productId}products:write
Editar de 1 a 100 produtos atomicamentePUT /v1/products/bulkproducts:write
Alterar somente os canais de vendaPATCH /v1/products/{productId}/availabilityproducts:write
Consultar o menu e o preço efetivo de um canalGET /v1/menumenu:read

Teste também altera dados reais

tk_test_ identifica a credencial, mas não cria um banco sandbox. As chamadas abaixo modificam o cardápio real do restaurante autorizado.

Criar um produto

O produto deve apontar para uma categoria não removida do mesmo restaurante. Uma categoria indisponível não é removida: ela pode receber produtos, mas continuará oculta no menu filtrado por disponibilidade.

curl -X POST "$TAKEAT_API_URL/v1/products" \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Takeat Burger",
    "product_category_id": 10,
    "price": 28.00,
    "delivery_price": 31.00,
    "available": true,
    "available_in_delivery": true
  }'

Obrigatórios: name, product_category_id e price. Quando não informadas, as duas disponibilidades começam como true, sold_off, use_weight e has_starting_price como false, e charge_service_tax como true.

Editar um produto

Consulte GET /v1/products/{productId} para obter os campos editáveis e o updated_at atual. Produtos removidos ou de outro restaurante retornam 404.

PUT /v1/products/{productId} é parcial: envie somente os campos que devem mudar. Campos ausentes permanecem intactos; preços promocionais e de delivery aceitam null para remover o valor.

description também aceita null para limpar. Envie preços como números JSON (por exemplo, 34.90), embora a consulta os retorne como strings ("34.90"). Não envie campos somente de leitura, como restaurant_id, created_at e updated_at, no corpo de edição.

Na edição, price: 0 é permitido; valores negativos ou com mais de duas casas decimais são rejeitados. A criação continua exigindo price positivo. Salão e delivery são independentes: não altere os dois canais sem intenção explícita.

Opcionalmente envie expected_updated_at com o updated_at consultado. Se o produto mudou desde a consulta, a API responde 409 product_update_conflict. Consulte novamente e peça uma nova aprovação; não repita a escrita automaticamente.

curl -X PUT "$TAKEAT_API_URL/v1/products/42" \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "name": "Takeat Burger Duplo", "price": 34.90 }'

Não existe DELETE /v1/products/{productId} nesta API.

Editar vários produtos

PUT /v1/products/bulk recebe um array diretamente no corpo, com 1 a 100 objetos. Cada objeto contém id e os campos parciais que devem mudar:

[
  { "id": 42, "price": 0, "expected_updated_at": "2026-08-26T14:00:00.000Z" },
  { "id": 43, "delivery_price": 0 }
]

IDs repetidos são rejeitados com 400 duplicate_product_ids, mesmo quando os objetos alteram campos diferentes. Um campo inválido, alteração vazia, produto/categoria inexistente ou versão desatualizada impede todo o lote. A operação é atômica e retorna um array de produtos na ordem recebida.

Para agentes de IA, mostre todos os valores atuais e propostos e aguarde a aprovação do operador antes da chamada. A API exige credenciais válidas, mas a aplicação integradora é responsável por obter essa aprovação humana.

Campos fiscais são enviados em fiscal_info como alterações parciais; null limpa um campo. O identificador interno fiscal_group_id não é exposto nem editável. As respostas incluem fiscal e o alias compatível fiscal_info; veja a explicação de cada atributo fiscal.

Alterar disponibilidade

Use a rota focada quando a alteração for somente de canal:

curl -X PATCH "$TAKEAT_API_URL/v1/products/42/availability" \
  -H "Authorization: Bearer $ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "available": false,
    "available_in_delivery": true
  }'
CampoCanal
availableVenda presencial, balcão e consumo no local
available_in_deliveryDelivery e retirada pelo fluxo de delivery

Os campos são independentes e ao menos um deles deve ser enviado. Depois da alteração, GET /v1/menu?only_available=true passa a refletir o novo estado no canal correspondente.

Para sinalizar falta temporária, envie { "sold_off": true } no PUT individual ou em lote; sold_off não é aceito no PATCH /availability. O menu exclui esgotados com only_available=true. Com false, retorna availability.sold_out e o motivo em availability.resolved.reason. Horários e escolhas obrigatórias também afetam a elegibilidade. Confira as regras do menu.

Resposta

Criação, edição e disponibilidade retornam o produto atualizado. Valores monetários são strings com duas casas. Exemplo abreviado:

{
  "id": 42,
  "restaurant_id": 85,
  "product_category_id": 10,
  "name": "Takeat Burger Duplo",
  "price": "34.90",
  "delivery_price": "31.00",
  "available": false,
  "available_in_delivery": true,
  "created_at": "2026-08-26T12:00:00.000Z",
  "updated_at": "2026-08-26T14:00:00.000Z"
}

O produto e a categoria são sempre verificados contra o restaurante resolvido pela credencial. IDs de outro restaurante respondem 404, sem revelar que o registro existe.

Erros comuns

HTTP / keyComo resolver
400 por corpo inválidoConfira tipos, limite de duas casas decimais, campos aceitos e pelo menos uma alteração efetiva.
400 product_changes_requiredEnvie um campo editável; apenas id, expected_updated_at ou um objeto fiscal vazio não bastam.
400 duplicate_product_idsAgrupe as mudanças de cada produto em um único objeto do lote.
404 product_not_foundConfira o ID e o restaurante autorizado; o produto pode ter sido removido.
404 product_category_not_foundEscolha uma categoria não removida do mesmo restaurante.
409 product_update_conflictConsulte os valores atuais e revise a proposta antes de reenviar. No lote, nenhum produto foi alterado.

Se a escrita foi aceita, mas o produto não aparece ou o preço parece diferente, veja o guia de diagnóstico.

Consulte também Gerenciar complementos para editar opções, preços, fiscal e disponibilidade, individualmente ou em lote.

On this page