Skip to main content
PUT
Una orden que nace en el kiosko y se cobra en caja queda abierta hasta el cobro. En ese tiempo el cajero puede necesitar corregirla: el cliente pide factura con su RUC, o hay que cargar el número de localizador que tiene impreso. Este endpoint corrige esos datos sin tocar el cobro.
Solo órdenes abiertas. Una orden cobrada, cancelada o con factura emitida ya produjo sus consecuencias y no se corrige hacia atrás.

Corregir orden vs. Confirmar pago

Son dos endpoints distintos a propósito. Uno corrige la orden, el otro la cobra, y ninguno escribe lo del otro. Los medios de pago no se corrigen acá. Si el body trae payments.paymentMethods o un status, la respuesta es 400: el estado de la orden se deriva del cobro y solo lo escribe Confirmar pago. Lo rechazamos en vez de ignorarlo porque un APPROVED descartado en silencio sería plata que vos das por cobrada y nosotros no.

El flujo completo

No hace falta ningún paso extra para que la factura salga con los datos corregidos. Cuando el cobro salda, Fire arma el evento order.completed leyendo la orden en ese momento, así que viaja con lo último que corregiste.

Autenticación

string
requerido
Tu API key de Fire con scope orders:write. La key debe ser vendor-scoped — las keys sin vendorId se rechazan con 403.

Path params

string
requerido
Cualquiera de las tres referencias públicas de la orden:Es el mismo conjunto que aceptan Obtener orden y Confirmar pago.

Cuerpo

Dos campos de control, siempre, y uno o más bloques. Lo que no mandás no se toca.
integer
requerido
La revision de la orden que leíste con Obtener orden. Si la orden cambió desde entonces —otra caja la corrigió—, la respuesta es 409 STALE_REVISION y no se escribe nada. Así dos cajas no se pisan sin enterarse.
string
requerido
Un identificador único por corrección (hasta 200 caracteres), generado por vos. Si la respuesta no te llega y reintentás con la misma clave, recibís 200 duplicate y la corrección no se aplica dos veces.Sin esta clave, un reintento chocaría contra expectedRevision —que ya avanzó— y no podrías saber si tu corrección entró o si otro escribió.

Localizador y kiosko — additionalInfo

Se aplica campo a campo: mandá solo lo que cambia. Si corregís el localizador, el nombre del buzzer y el email de factura quedan como estaban.
string
El localizador: el número que el cliente tiene impreso y que se canta al entregar.
string
Nombre con el que se llama al cliente.
string
Email al que se envía la factura.
boolean
Si el cliente quiere la factura impresa.

Consumidor final — client

Este bloque REEMPLAZA al comprador entero. No es un parche: lo que no mandes queda vacío. Mandar { "uid": "…", "name": "Juan" } sobre una orden que tenía RUC borra el RUC.Es deliberado. Nombre, documento y dirección son un solo dato: mezclar el nombre nuevo con el documento viejo produce una factura mal emitida, y eso solo se arregla anulando y volviendo a emitir. Mandá siempre el comprador completo, no la diferencia.
string
requerido
Identificador del cliente. Obligatorio justamente porque el bloque reemplaza: sin él la orden quedaría sin cliente. Usá el que ya tiene la orden.
string
Tipo de documento: CEDULA, RUC, PASAPORTE (Ecuador); CC, NIT (Colombia); CPF, CNPJ (Brasil); o FINAL_CONSUMER.
string
Número de documento. Se aceptan puntos, guiones y espacios; Fire los quita. Un relleno de dígitos repetidos (9999999999999, 222222222222) se trata como consumidor final.
string
Nombre o razón social.
string
Apellido.
string
Email del comprador.
object
El destinatario de la factura, y es el que manda. Fire arma el comprador del comprobante leyendo primero billingInformation (govIdType, govIdNumber, name —o businessName si no viene name—, email, address) y recién después los campos de client. Existe aparte porque la factura puede ir a una empresa distinta de la persona.Si corregís el documento, ponelo acá. Las órdenes del kiosko traen este bloque con consumidor final: corregir solo client.govIdNumber y reenviar billingInformation como estaba deja el comprobante en consumidor final. Si no lo mandás, queda vacío y se usa client.
Fire recalcula a partir de este bloque el comprador que imprime el comprobante. No hace falta mandarlo aparte.

Productos — todavía no

Corregir productos y totales todavía no está habilitado. Si el body trae order o payments, la respuesta es 400. Lo vamos a habilitar cuando se valide también que los impuestos y el total cuadren con las líneas, igual que al crear la orden.

Petición

Qué hace Fire con lo que enviás

Guardá la revision de la respuesta: es la que tenés que mandar en la próxima corrección.

Cuándo no se puede corregir

Cada caso tiene su código, porque cada uno pide una acción distinta. Todos son 409 y no escriben nada. La verificación ocurre en el mismo instante de la escritura, así que si un cobro entra justo mientras corregís, uno de los dos espera al otro: nunca se pisan.

Idempotencia y concurrencia

Reintentar es seguro. Si la respuesta no te llegó, reenviá el mismo body con la misma idempotencyKey: Usá una clave nueva por cada corrección distinta. Reusar una clave para otro cambio devuelve duplicate y el cambio nuevo no se aplica.

Eventos

Este endpoint no emite eventos. La corrección queda en la orden, y cuando se cobra, el order.completed sale con los datos corregidos: localizador, comprador y datos de facturación.
No hay order.updated, a propósito. La entrega de eventos no está ordenada: un aviso de corrección que llegara después del order.completed sería un hecho viejo sobre el que tu sistema podría actuar por error.

Validaciones

Todas devuelven 400 salvo donde se indique. Ramificá por el code, no por el texto: el mensaje se puede reescribir, el código es contrato.

Respuestas

Relacionado

Obtener orden

Leé la revision antes de corregir.

Confirmar pago

Cobrá la orden cuando ya está corregida.