Skip to main content
POST
Creates an order in Fire. The POS, the kiosk, and aggregator integrators use it to send their sales straight to Fire without changing the body they already build: only the URL, the credential, and how you read the response change. This is version 2: it takes the POS and kiosk order structure and the aggregator structure. If your system already sends orders in Fire format, use Create order (v1). Both versions are current and end up in the same place: same validations, same response. Fire recognizes the kind of order from the body’s channel.uid:
  • If the channel belongs to an aggregator (iFood, 99Food, Keeta, Rappi), the body is the one from Inject order (camelCase, with prices and totals).
  • Any other channel (POS, kiosk) uses the POS and kiosk structure described below (snake_case, unit price only: Fire calculates the totals).
Once created, the order follows the same lifecycle as any Fire order: taxes, business day, fiscal document, and events.

Authentication

string
required
Your Fire API key with the orders:write scope. Authorization: Bearer <api_key> is also accepted. The key must be bound to a vendor: the order’s account comes from that vendor. A key without a vendor is rejected with 403. You don’t need to send the account header; if it arrives, it is ignored.

Customer identity (POS and kiosk)

Send exactly one of these two headers. If you send neither, or both, the order is rejected with 400 VALIDATION_ERROR. Aggregator orders don’t use them.
string
Identifier of the device’s anonymous session (POS or kiosk). This is the usual case.
string
Identifier of a registered customer.

Body — POS and kiosk

string
required
Unique order code in your system. If an order with that code already exists for your vendor, the response is 409.
string
required
Order vendor (e.g. 11.6.1350).
string
required
Catalog of the sales channel.
string
COMPLETED if the sale is closed; OPEN if it is still waiting to be charged. An order that does not arrive as COMPLETED + SUCCEEDED stays pending payment.
string
SUCCEEDED if it has already been charged.
object
required
Sales channel. Its uid decides how the body is read.
object
required
Sale service.
object
required
Store of the sale.
object
required
Delivery method and catalog.
object
Device that recorded the sale: uid, name, metadata.
object
Cashier or operator: uid, name, session (uid, start_timestamp, end_timestamp). null on the kiosk.
object
Customer data: uid, name, last_name, phone (required if you send the object), email, gov_id_type, gov_id_number.
object
Billing data: gov_id_type, gov_id_number, business_name.
object
Additional sale data, e.g. display_code (number used to call the order) and kiosk or POS data.
object[]
required
Order products.
object[]
required
Order payments.

Body — aggregators

The same body as Inject order, unchanged. Fire identifies it as an aggregator order by channel.uid and records it as closed and paid.

Response

boolean
true when the order was created.
object

Errors

Every request is recorded in Fire with its body and the rejection reason, including rejected ones. If you retry an order that was already created, the response is 409 and it isn’t duplicated.