Skip to content

Webhook de Eventos de Pedidos ​

Esta seção descreve o endpoint de webhook do OpenDelivery, usado pela Ordering Application para notificar o Software Service da Goomer sobre eventos do ciclo de vida dos pedidos.

Visão Geral ​

Nesta rota a Ordering Application envia uma requisição POST para cada novo evento de pedido. A URL do webhook é informada ao integrador durante o onboarding do merchant.

Endpoint Principal ​

MétodoEndpointDescrição
POST/opendelivery/v1/newEventRecebe um evento de pedido enviado pela Ordering Application

Autenticação (Assinatura de Webhook) ​

O webhook não utiliza OAuth. A autenticidade da requisição é garantida por três headers obrigatórios:

HeaderTipoObrigatórioDescrição
x-app-idstringSimIdentificador único da Ordering Application
x-app-merchantidstringSimIdentificador único do merchant (formato {document}-{UUID})
x-app-signaturestring (SHA256)SimHMAC-SHA256 do raw body usando o client secret como chave

Importante: A Goomer preserva o raw body recebido para validar a assinatura. Proxies ou middlewares que reescrevem o corpo da requisição invalidam a verificação.

Limites de Uso (Rate Limiting) ​

LimiteJanela de Tempo
100 requisições1 minuto

Quando excedido, retorna HTTP 429.

Estrutura do Payload ​

Campos comuns a todos os eventos ​

CampoTipoObrigatórioDescrição
eventIdstring (UUID)SimIdentificador único do evento
eventTypestring (enum)SimTipo do evento (ver tabela abaixo)
orderIdstring (UUID)SimIdentificador do pedido (gerado pela Ordering Application)
orderURLstring (URI)SimURL para obter os detalhes do pedido
createdAtstring (ISO 8601)SimData/hora de criação do evento (UTC)
sourceAppIdstring (UUID)NãoAppId da Ordering Application originadora (usado por Hubs)
virtualBrandstringNãoIdentificação alternativa do merchant (dark kitchens, multi-marca)

Tipos de Evento ​

TipoDescrição
CREATEDPedido criado
CONFIRMEDPedido confirmado pelo estabelecimento
PREPARATION_REQUESTEDPreparação solicitada
PREPARINGPedido em preparação
DISPATCHEDPedido despachado para entrega
READY_FOR_PICKUPPronto para retirada
PICKUP_AREA_ASSIGNEDÁrea de retirada atribuída
PICKED_UPRetirado pelo entregador
DELIVEREDEntregue ao cliente
CONCLUDEDConcluído
CANCELLATION_REQUESTEDCancelamento solicitado
CANCELLATION_REQUEST_DENIEDSolicitação de cancelamento negada
CANCELLEDPedido cancelado
ORDER_CANCELLATION_REQUESTSolicitação de cancelamento de pedido
CANCELLED_DENIEDCancelamento do pedido negado

Exemplo de Requisição ​

http
POST /opendelivery/v1/newEvent HTTP/1.1
Host: partner-api.goomer.app
Content-Type: application/json
x-app-id: a1b2c3d4-e5f6-7890-abcd-ef1234567890
x-app-merchantid: 12345678901234-550e8400-e29b-41d4-a716-446655440000
x-app-signature: 4b3c2d1e...
json
{
  "eventId": "abb14b1f-f1c8-4706-8016-ad353e15216a",
  "eventType": "CREATED",
  "orderId": "00cf66ff-429d-4c61-9872-0fa5f2a3b66a",
  "orderURL": "https://partner-api.goomer.app/opendelivery/v1/orders/00cf66ff-429d-4c61-9872-0fa5f2a3b66a",
  "createdAt": "2025-06-24T16:53:54.433Z"
}

Comportamento de Retry e Idempotência ​

  • A Goomer responde com 204 No Content quando o evento é aceito para processamento assíncrono.
  • Se a resposta não for 2xx, espera-se que a Ordering Application reenvie o evento conforme sua política de retry.
  • Eventos com o mesmo eventId são tratados idempotentemente — reenvios não duplicam efeitos no estado interno.

Códigos de Status ​

CódigoDescrição
204Evento aceito
400Payload inválido (eventType desconhecido, campos obrigatórios faltando, etc.)
403Assinatura inválida ou headers ausentes
404Merchant não encontrado para os identificadores fornecidos
429Limite de requisições excedido

Documentação Completa ​

Para o schema OpenAPI completo, consulte a documentação técnica de referência.