Skip to main content
POST
string
requerido
Token Bearer obtenido desde POST /login. Formato: Bearer <accessToken>.
string
requerido
Tu API key de Fire.
string
requerido
Debe ser integration. Identifica la petición como proveniente de una integración externa.
string
requerido
Identificador de la cuenta a la que pertenece la petición.
string
requerido
Identificador único de la orden en tu sistema.
string
requerido
Origen de la orden. Ejemplos: App, Kiosco.
string
Plataforma del cliente. Ejemplos: Android, iOS, Web.
object
requerido
Detalles del canal de venta. Usa valores uid de los webhooks de publicación (por ejemplo channel.updated) o de la configuración de canales en el panel (Integraciones de agregadores).
object
requerido
Detalles del servicio de fulfillment. Usa valores uid del array services en esos payloads de canal o las mismas fuentes que channel.
object
Detalles del dispositivo. null para canales sin dispositivo físico.
object
Resultado de Solicitar documento fiscal, copiado tal cual. Opcional: si no fiscalizaste antes de inyectar, omitilo — Fire resuelve la fiscalización por su cuenta.Fire toma de acá los datos del comprobante para la orden e ignora el resto. El estado del documento ante el ente lo maneja Fire: documentStatus se ignora si viene.
object
Operador o cajero que procesó la orden. null para canales de autoservicio.
string
requerido
Método de envío seleccionado por el cliente. Valores: delivery, pickup.
boolean
Indica si el cliente acumula puntos de fidelidad en esta orden.
boolean
Indica si el cliente canjea puntos de fidelidad en esta orden.
boolean
Indica si se aplican descuentos en esta orden.
string
Comentario general del cliente para toda la orden.
object
requerido
Información del cliente.
object
requerido
Tienda donde se realiza la orden.
object
requerido
Contenido de la orden.
object
requerido
Detalles del envío según selectedShippingMethod.
object
requerido
Desglose de pagos.
object
Información de fidelidad y cupones.
object
Metadata extra a nivel de orden (p. ej. dirección IP del kiosko).

Montos y tramos de precio

Fire no escala ni recalcula precios. Envía los montos en la unidad final de la moneda (por ejemplo "8.99" para USD 8.99, no centavos). Tu POS o agregador debe enviar valores ya calculados.
Las líneas de producto, payments.totals[], payments.shippingCost[] y payments.discounts[] usan las mismas claves de tramo de precio: currencyCode, subtotalWithoutTaxes, discountPercentage, discountsValue, subtotalIncludeDiscounts, taxesPercentage, taxValue, total.

Envío y descuentos

Descuentos por producto

Aplica descuentos en order.products[n].price.unitPrice y totalPrice (mismos valores cuando quantity es 1). Ejemplo: 10% de descuento sobre base 15.00 con IVA 12%discountsValue 1.50, subtotalIncludeDiscounts 13.50, taxValue 1.62, total de línea 15.12.

payments.shippingCost[]

Costos de envío como una o más filas con tramo de precio. En los ejemplos, el impuesto del envío se calcula sobre la base de envío igual que en los productos.

payments.discounts[]

Descuentos a nivel de orden (promos, cupones) como filas de tramo de precio. Úsalo cuando el descuento no esté ya reflejado en el discountsValue de cada producto y el costo lo asume el local. Puedes combinar descuentos de producto y payments.discounts[]; concilia con paymentMethods[].totalBill.

payments.totals[]

Resumen de la parte de productos de la orden. Al conciliar: productos (totals) + envío − descuentos de orden ≈ monto pagado.
Fire no rechaza la petición si paymentMethods[].totalBill difiere levemente de la suma de tramos; aun así envía valores coherentes desde tu sistema origen.

Descuentos de combo

Cuando un producto combo tiene precio contenedor 0 (es decir, type: "COMBO" con subtotalWithoutTaxes: 0), el descuento del combo no debe colocarse en la línea del contenedor. Asignar discountsValue a una base cero produce totales negativos, que Fire rechaza. En su lugar, distribuye el monto total del descuento entre los selectedModifiers que componen el combo.

Reglas

Algoritmo de reparto

Ajustar el redondeo en el último modificador para que SUM(discount_i) === D exacto. Si el reparto proporcional dejaría algún modificador con net_i < 0, capar el descuento de ese ítem a su base (discount_i = base_i, neto = 0) y redistribuir el remanente entre los demás.

Ejemplo — descuento BRL 17,94 sobre un combo (base BRL 89,68)

A continuación se muestra el patrón incorrecto (descuento en el contenedor) y el patrón correcto (descuento repartido entre modificadores).
Incorrecto — descuento en COMBO con base cero (totales negativos)
Correcto — contenedor COMBO en cero, descuento en modificadores
Desglose completo para este ejemplo (los 7 modificadores): payments.totals[0].subtotalWithoutTaxes = 89,68, subtotalIncludeDiscounts = 71,74

Descuentos del agregador

Cuando la plataforma del agregador (iFood, Rappi, UberEats, etc.) aplica un descuento promocional al cliente, el agregador reembolsa al local ese monto — el local siempre recibe el precio completo. Por eso el descuento no resta de los ingresos del local y no debe aparecer en payments.discounts[]. Modélalo como una entrada adicional en payments.paymentMethods[]:

Campos requeridos en la entrada AGGREGATOR_DISCOUNT

Regla de balance

La suma de todos los paymentMethods[].totalBill — incluida la entrada AGGREGATOR_DISCOUNT — debe ser igual al total bruto de la orden:
payments.discounts[] queda vacío.

Conciliación de los ejemplos

Notas de cálculo:
  • Entrega simple: 8.99 + 1.73 = 10.72.
  • Descuento en línea: 10% sobre 15.00 → IVA sobre 13.50 → producto 15.12; envío 3.50 + IVA 12% = 3.92; 15.12 + 3.92 = 19.04.
  • Varios productos + promo: hamburguesas 25.80 + bebida 5.00 = 30.80; + envío 3.50 = 34.30; − promo 2.00 = 32.30 pagado.
  • Descuento del agregador: productos 29.80 + embalaje 0.99 + envío 8.90 = 39.69 bruto; el cliente paga 38.69 (CREDIT) + el agregador reembolsa 1.00 (AGGREGATOR_DISCOUNT) = 39.69 ✓. payments.discounts queda vacío.