Status de sync do menu
API
Status de sync do menu
Endpoint de entrada para o qual seu integrador faz POST quando termina de publicar o menu/produtos de um vendor. O Fire finaliza os sync logs pendentes do vendor e recalcula o status de sync do menu. Um status por vendor por padrão (tudo ou nada), a menos que você envie eventId para atingir um único assignment de agregador.
POST
Status de sync do menu
Este endpoint é de entrada: seu integrador (o sistema que publica o catálogo do Fire downstream, um agregador, um cliente XMART, um POS, etc.) faz POST nele assim que termina a publicação assíncrona dos produtos de um vendor. O Fire autentica a requisição, resolve o vendor, finaliza todos os sync logs que ficaram pendentes para esse vendor e recalcula o
syncStatus do menu afetado. Este é o callback que fecha o ciclo aberto por um evento de publicação de menu/produtos que carrega autoPublish.
Este endpoint é síncrono. O Fire autentica, resolve o vendor, finaliza os sync logs pendentes, recalcula o status do menu e responde
200 OK com a quantidade de linhas que alterou (updated). Não há fila nem polling; diferente dos webhooks de status do pedido do agregador e KDS, o trabalho já está feito quando a resposta retorna.O id de correlação é opcional. Se você enviar
eventId (somente canais agregador), o Fire fecha apenas a linha de sync daquele assignment. Se você omiti-lo, a única chave é vendorId, e o Fire aplica o resultado a todas as linhas de sync pendentes do vendor para a entidade resolvida a partir de type (tudo ou nada): se o vendor tinha vários assignments e apenas alguns falharam, você ainda envia um único FAILED, e todas as linhas pendentes desse vendor vão para FAILED, porque sem eventId o Fire não consegue saber qual assignment falhou. Nesse caso, a correção se apoia no lock por vendor do Fire, já que nunca há mais de uma leva de publicação pendente para um vendor por vez. Veja Correlação e o lock do vendor.Autenticação
Este endpoint requer uma API key vendor-scoped com o escopowebhooks:xmart (binding de account + vendor). O Fire exige que o vendorId do body pertença a esse vendor. Keys sem o escopo, ou sem binding de vendor, são rejeitadas com 403 Forbidden.
string
obrigatório
Sua API key do Fire vendor-scoped com escopo
webhooks:xmart. Gere uma em Developers → API Management para o account/vendor cujos resultados de sync esta key pode reportar.string
Opcional
Bearer <token>, aceito como alternativa legacy ao x-api-key. Envie um ou outro.Corpo da requisição
string
obrigatório
O identificador do vendor no formato dotted (ex.
100.6.1350), o mesmo valor que o Fire usa nos sync logs e nas lojas. Deve pertencer ao vendor vinculado à sua API key.Os payloads de publicação de saída carregam o id do vendor numérico legacy (ex.
1350) dentro de list. Este callback é diferente: envie o id dotted.string
obrigatório
Qual entidade seu integrador publicou. Comparado sem diferenciar maiúsculas/minúsculas.
PRODUCTSfinaliza ambas as dimensões do vendor, a de menu e a de produtos; o sync de menu empurra os produtos do vendor downstream, e seu integrador reporta o resultado comoPRODUCTS.- Qualquer outro valor (
STORES, …) finaliza apenas as linhas pendentes daquela entidade.
string
obrigatório
O resultado da publicação para o vendor. Enum:
SUCCESS | FAILED.string
Detalhe opcional (motivo da falha, trace do provedor). Armazenado nas linhas finalizadas como o detalhe de erro quando
status é FAILED; ignorado (e limpo) quando status é SUCCESS. Se omitido com status em FAILED, o Fire armazena uma mensagem de falha genérica padrão.string
O
event.id do envelope Fire que seu integrador recebeu para esse assignment (menu.updated / product.updated), formato evt_<12 hex> (ex. evt_9f2c41ab77de). Um por assignment (loja × canal × fulfillment).Quando presente, o Fire fecha apenas a linha de sync daquele assignment, em vez de varrer todas as linhas pendentes do vendor. Somente canais agregador: omita para outros integradores, que recebem a varredura por vendor descrita acima.type — o que é finalizado
Exemplos
PRODUCTS — publicação bem-sucedida
PRODUCTS — publicação falhou (com detalhe)
PRODUCTS — canal agregador, um único assignment falhou (eventId)
O que o Fire faz
Uma vez autenticado e resolvido, o Fire, em uma única passagem síncrona:- Se
eventIdestiver presente, resolve a única linha de sync pendente que corresponde, comvendorIdcomo guard. Caso contrário, resolve as entidades afetadas a partir detype(PRODUCTS→ menu e produtos; qualquer outro → aquela entidade somente) e mira em todas as linhas pendentes do vendor para essas entidades. - Finaliza a(s) linha(s) resolvida(s): define o
statusque você enviou, carimba o momento de conclusão e registramessagecomo o detalhe de erro quando éFAILED. A quantidade de linhas alteradas é retornada comoupdated. - Se não havia linhas pendentes, é um no-op idempotente →
200comupdated: 0. - Recalcula o
syncStatusdo menu afetado a partir de suas linhas finalizadas:- alguma dimensão ainda pendente →
PENDING - todas terminais e todas bem-sucedidas →
SYNCED - todas terminais e alguma falha →
FAILED
- alguma dimensão ainda pendente →
- Finalizar as linhas libera o lock do vendor: não há mais linhas pendentes para essas entidades, então a próxima leva de publicação do vendor pode começar.
Resposta
No sucesso o endpoint retorna200 OK com a quantidade de linhas de sync que alterou, envolvida no envelope padrão de sucesso do Fire. Um 200 significa que o trabalho está feito: os logs estão finalizados e o status do menu recalculado.
boolean
Sempre
true em uma resposta 200.boolean
Sempre
true quando a requisição foi processada.number
Quantas linhas de sync pendentes foram finalizadas. Sem
eventId, pode ser qualquer quantidade entre as linhas pendentes do vendor; 0 em um no-op idempotente. Com eventId, é 0 ou 1: no máximo a única linha de assignment que correspondeu.Uma falha ao finalizar linhas ou recalcular o status do menu volta como
400 DOMAIN_ERROR, não 500, mesmo sendo uma falha do lado servidor (ex. um erro transitório de banco de dados). Veja Idempotência e retentativas: uma política ingênua de “retentar somente diante de 5xx” não vai retentar esse caso.Idempotência e retentativas
O callback é seguro para reexecutar. Ele se chaveia sobre as linhas pendentes do vendor, então:
O endpoint é seguro de reexecutar em todos esses casos: uma retentativa após uma finalização bem-sucedida é um no-op limpo (
updated: 0), e uma retentativa após DOMAIN_ERROR tenta novamente a mesma finalização.
Correlação e o lock do vendor
ComeventId (canais agregador): o Fire faz o match da linha diretamente por esse id, com vendorId como guard. Sem ambiguidade: o callback fecha exatamente o assignment ao qual se refere.
Sem eventId: a única chave é vendorId. O Fire se apoia em um lock por vendor: enquanto uma leva de publicação está em andamento, as linhas do vendor ficam pendentes e nenhuma segunda leva pode começar, então todas as linhas pendentes do vendor pertencem à leva que este callback finaliza.
Relação com o fluxo de publicação
Este callback é a contraparte da flagautoPublish que o Fire define no último request de publicação por vendor de um evento de publicação de menu/produtos. Essa flag diz ao seu integrador para publicar a leva downstream; quando a publicação termina, seu integrador reporta o resultado aqui para que o Fire finalize os sync logs e recalcule o syncStatus do menu.
Relacionado
Publicação de menu
O fluxo de publicação que este callback fecha: como o Fire emite o menu/produtos que um vendor deve publicar.
Status do pedido do agregador
O webhook de entrada irmão para o status de entrega, mesmo modelo de auth, mas assíncrono (fila + polling).
Menu atualizado
O evento de saída de publicação de menu que carrega o catálogo a publicar.
Autenticação
Como funcionam as API keys, escopos e o binding de vendor.

