Skip to main content
Cuando un cliente hace un pedido en cualquier canal conectado, Fire spark hace 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 WAITING antes 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. Para order.status.changed también debes elegir los estados que deben disparar (injecting, paid, preparing, …).
  • Callback — Fire spark espera tu 2xx al 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 existen order.created ni order.updated. Suscríbete a los eventos que coincidan con cómo opera tu cocina:
Un webhook suscrito a order.status.changed (estado voided) y a order.voided recibe dos POSTs. Distínguelos por type e id. data.status es el estado que disparó ese POST.

Valores que vas a recibir

Estos son los conjuntos cerrados. El resto de data.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. Cualquier 2xx 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:
Ambos campos siguen las mismas reglas de id externo (1–64 caracteres, 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

  1. Suscríbete a order.status.changed e incluye injecting.
  2. Lee data.status, data.order_id, los ids de alcance y el objeto data.order.
  3. Mapea fulfillment_id, store_id, channel_id, brand_id e id de líneas a tu catálogo POS (los mismos ids de la sincronización de menús).
  4. Crea el ticket con totales, cliente, pago y fulfillment tal como vienen.
  5. Responde HTTP 2xx de inmediato.
  6. Cuando cocina avance, haz PATCH a estado del pedido con el siguiente estado de fulfillment.
Evita tickets duplicados: el mismo order_id puede entregarse más de una vez. Usa el id del sobre, o order_id más data.status.

Obtener un pedido manualmente

Llama a Obtener pedido con el order_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