POST del pedido a las URLs HTTPS que registres en el dashboard. Tu integración no consulta pedidos en bucle.
Cómo llega un pedido a cocina
1
El cliente realiza el pedido
Storefront o un canal cierra el carrito. Fire spark inicia el fulfillment y
notifica los webhooks que coincidan.
2
El pedido llega a un estado suscrito
Suscríbete a
order.status.changed y elige los estados que te importan
(injecting, preparing, etc.). Los eventos con nombre cubren anular,
cumplir, reembolsar y revertir.3
Crea el ticket en cocina
Para el traspaso al POS o RMS, incluye
injecting en esos estados. El
payload trae el pedido completo — crea el ticket tal cual.4
Reporta el siguiente estado desde tu POS
Llama a Actualizar estado del pedido
con el siguiente estado de fulfillment. Fire spark puede enviar otro webhook.
El traspaso a cocina es
order.status.changed con data.status injecting.
No hay un evento de inyección aparte. Crea el ticket con el payload tal cual.Configura tu endpoint
Registra URLs HTTPS en Ajustes → Webhooks del dashboard (hasta 10 por entorno). Cada entorno tiene sus propios endpoints, y un pedido solo notifica los endpoints de su entorno. Elige Webhook o Callback.- Webhook — se dispara cuando el trabajo de ese nodo está cerrado (persistido, liquidado, callbacks terminados). Si el nodo espera, la fila está en
WAITINGantes del POST. Si el siguiente nodo es automático, se notifica antes de entrar. Un terminal se notifica después de finalizar el run. Si el callback falla, no se envía el webhook de ese nodo. Elige uno o más eventos. Paraorder.status.changedtambién debes elegir los estados que deben disparar (injecting,paid,preparing, …). - Callback — Fire spark espera tu
2xxal entrar a un nodo que lista este endpoint. Los eventos no aplican. Puedes registrar la misma URL una vez de cada tipo.
Los webhooks creados antes del soporte de firma solo guardaban un hash. Rota
(regenera) el secreto en el dashboard si necesitas verificar HMAC.
Firma
Cuando hay secreto, Fire spark envía:<hex> es HMAC-SHA256 del cuerpo JSON crudo con el secreto que se muestra una vez al crear o rotar (whsec_…).
Tipos de evento
No existenorder.created ni order.updated. Suscríbete a los eventos que coincidan con cómo opera tu cocina:
Valores que vas a recibir
Estos son los conjuntos cerrados. El resto dedata.order sigue Obtener pedido.
type y headers
data.status, current_states, next_states
Siempre snake_case en minúsculas. Los guiones pasan a guion bajo (awaiting-pickup-time → awaiting_pickup_time). data.status está siempre en current_states. next_states lista los siguientes estados del camino feliz a los que puedes avanzar — no los que se acaban de entrar. Los terminales (fulfilled, voided, refunded, reversed) se omiten; igual disparan eventos con nombre al entrar. Usa un valor de next_states al actualizar el estado.
No son un enum fijo — son los estados de fulfillment del comercio. Los caminos por defecto de Fire spark usan:
El comercio puede agregar otras claves (mismo patrón snake_case:
a-z, 0-9, guiones bajos). Suscríbete a las que ves en Ajustes → Webhooks.
Los eventos con nombre solo disparan con estas claves:
delivered no dispara order.fulfilled. Suscríbete a order.status.changed e incluye delivered si necesitas ese paso.
Campos de estado en data.order
Entrega
Webhooks: un intento por POST, timeout de 10 segundos. Cualquier2xx es éxito. Fire spark no reintenta solo.
Callbacks: el primer POST es inmediato. Tras cada fallo, espera min(1000 × 2^failureCount, 30000) ms y reintenta mientras failureCount < retries (default 3 → 4 POSTs máx.). Cada POST usa el timeout del endpoint (default 5s, máx. 300s). Un JSON inválido para un schema registrado (hoy INJECTING) cuenta como fallo. Si se agotan los reintentos, Fire spark entra a VOIDED (sin pago) o REVERSED (pagado) y no espera PATCH.
Payload del webhook
Cada entrega usa el mismo sobre:Objeto data
data.status es el disparador de esta entrega. current_states es el panorama ahora — el disparador más cualquier otro estado aún en curso (por ejemplo cocina y delivery a la vez). next_states es a lo que puedes hacer PATCH desde esos estados actuales. Si se entran dos estados suscritos juntos, recibes un POST por cada status, con el mismo current_states y next_states.
order.fulfillment_status es el último estado de fulfillment del pedido. order.status es el ciclo de vida (OPEN, CLOSED, …), no el disparador del webhook.
data.order es el mismo objeto que Obtener pedido.
Respuesta del callback (INJECTING)
Cuando un nodo mapeado a INJECTING invoca un callback, un 2xx no basta. Devuelve JSON:
a-zA-Z0-9_-). Fire spark los guarda en order.metadata para que salgan en Obtener pedido y en webhooks posteriores. Un 2xx con un cuerpo que no pase este schema cuenta como intento fallido.
Manejar el traspaso a cocina
- Suscríbete a
order.status.changede incluyeinjecting. - Lee
data.status,data.order_id, los ids de alcance y el objetodata.order. - Mapea
fulfillment_id,store_id,channel_id,brand_ideidde líneas a tu catálogo POS (los mismos ids de la sincronización de menús). - Crea el ticket con totales, cliente, pago y fulfillment tal como vienen.
- Responde HTTP
2xxde inmediato. - Cuando cocina avance, haz PATCH a estado del pedido con el siguiente estado de fulfillment.
Obtener un pedido manualmente
Llama a Obtener pedido con elorder_id externo si necesitas reconciliar. Requiere el scope orders:read. Cada webhook ya incluye el order completo.
Endpoints relacionados
Obtener pedido
Recupera el pedido completo por id externo
Actualizar estado
Reporta el siguiente estado de fulfillment desde tu POS