Representa una orden o pedido de un cliente dentro de una company.
Una orden puede ser de productos (asociada a un comercio vía branch_id) o de envío
directo / servicio (sin branch_id). El ciclo de vida se controla con el bitmask status;
los flags booleanos derivados (is_status_confirmed, is_payment_confirmed,
is_provider_assigned, is_status_being_prepared, is_status_prepared,
is_provider_collected, is_status_arrived, is_status_completed, is_status_completed_ok,
is_status_canceled, is_status_expired, …) se definen en onInitializeBitMaskBags().
Hitos con timestamp (se registran para estadísticas de tiempos de entrega):
paid_at → being_prepared_at → prepared_at → collected_at → arrived_at → completed_at.
Duraciones autocalculadas en segundos (OrderHandler::onSaving()):
preparation_time: prepared_at − being_prepared_at.total_preparation_time: prepared_at − paid_at en órdenes inmediatas; prepared_at − being_prepared_at en programadas.collection_time: collected_at − prepared_at.arrival_time: arrived_at − paid_at (solo órdenes inmediatas).Al cierre del día (00:00 hora local) las órdenes finalizadas se archivan: se asigna
deleted_at (soft delete = archivado, no borrado físico).
status_for_clients, status_for_shoppers, status_for_providers, status_for_company_admins,
status_for_branch_admins, status_for_partners, status_for_payment son códigos de texto
estables (constantes, no localizados). Valen N/A cuando la audiencia no aplica a la orden
(p. ej. status_for_shoppers en una orden sin shopper); no debería ocurrir en apps reales.
latest_status es el valor de status inmediatamente anterior al actual.
status_data es solo para depurar los bitmasks; se mantiene por retrocompatibilidad y no
debe usarse en integraciones nuevas.
Todos los montos usan sufijo _e2 (entero = monto × 100). Definiciones:
subtotal_original_e2: total de productos, sin descuentos.subtotal_e2: subtotal_original_e2 tras aplicar descuentos de precio base.tax_e2: suma de la lista taxes (envío, servicio de app, shopper, descuentos, tarifas extra…).total_e2: monto final. Equivale a subtotal_e2 + tax_e2.branch_subtotal_e2: monto de cara al comercio. subtotal_original_e2 − branch_discounts_e2
(descuentos asumidos por el comercio).delivery_fee_e2: costo del envío de la orden.delivery_fee_e2_paid_for_client: cuánto de ese envío pagó el cliente (0 si hay promo de
envío gratis; total o parcial según promociones).delivery_fee_to_pay_e2: cuánto se le debe pagar al repartidor por el envío.Orden de cálculo: se suma subtotal_original_e2 → se aplican descuentos de base_price
(subtotal_e2) → se calculan y registran en taxes: descuentos de subtotal, servicio de app
(service_fee_e2), envío y sus descuentos, shopper y sus descuentos, tarifas adicionales
(config global + comercio) → tax_e2 = suma de taxes → total_e2 = subtotal_e2 + tax_e2.
Si el método de pago aplica comisión, se cobra total_e2 + payment_fee_e2 sin alterar los
montos de la orden (payment_fee_e2 vive en Payment).
branch_id el punto de recolección es la ubicación del comercio
(pickup_*_e6 no se usan). En órdenes sin branch_id se usan pickup_latitude_e6,
pickup_longitude_e6 y pickup_address.number: correlativo desde 1 por branch_id; en órdenes sin comercio, correlativo por company_id.uid: identificador legible para el usuario. Con comercio: "<número de comercio>-<número de orden>".
Sin comercio: prefijo L + secuencia global de la company (ej. L001-0000001).client_address (string plano) está deprecado en favor de
client_address_data (país, address_line_1/2, postal_code, …). Coexisten por retrocompatibilidad.client_*_e6 y pickup_*_e6 están siendo reemplazados por locations
(lista de OrderLocation), que soporta multiparada e incluye started_at, arrived_at
y notes por parada.source: null en órdenes nativas; el nombre del origen (Ridery, WhatsApp, Square, …)
cuando la creó una integración externa.currency_snapshot, company_currency_snapshot, shopper_snapshot,
order_provider_snapshot): copias congeladas al crear la orden; cambios posteriores en el
origen (moneda por defecto de la company, teléfono/vehículo del repartidor…) no la afectan.| Atributo | Tipo | Descripción |
|---|---|---|
id |
int |
|
number |
int\|null |
Número correlativo de la orden (por branch_id, o por company_id si no hay comercio) |
status |
int |
Bitmask de estado; ver flags is_* y onInitializeBitMaskBags() |
subtotal_e2 |
int |
Total de productos tras descuentos de precio base (× 100) |
total_e2 |
int |
Monto final de la orden. Equivale a subtotal_e2 + tax_e2 (× 100) |
tax_e2 |
int |
Suma de la lista taxes: envío, servicio de app, shopper, descuentos, tarifas extra (× 100) |
notes |
string\|null |
Notas de entrega escritas por el cliente |
scheduled_at |
datetime\|null |
Fecha/hora de entrega solicitada (órdenes programadas); null = inmediata |
client_latitude_e6 |
int |
Latitud del punto de entrega (× 1e6) |
client_longitude_e6 |
int |
Longitud del punto de entrega (× 1e6) |
client_address_data |
array\|null |
Dirección de entrega estructurada (país, address_line_1/2, postal_code…) |
pickup_latitude_e6 |
int |
Latitud del punto de recolección; solo órdenes sin branch_id (× 1e6) |
pickup_longitude_e6 |
int |
Longitud del punto de recolección; solo órdenes sin branch_id (× 1e6) |
pickup_address |
string\|null |
Dirección de recolección; solo órdenes sin branch_id |
completed_at |
datetime\|null |
Momento de finalización de la orden (entrega o cancelación) |
deleted_at |
datetime\|null |
Momento de archivado (soft delete al cierre del día en hora local) |
created_at |
datetime\|null |
|
updated_at |
datetime\|null |
|
company_id |
int |
Company dueña de la orden |
client_id |
int\|null |
Cliente dueño de la orden |
creator_id |
int\|null |
Admin que creó la orden en nombre del cliente; null si la creó el propio cliente |
branch_id |
int\|null |
Comercio (sucursal) de la orden; null en envío directo / servicio |
uid |
string\|null |
Identificador legible: "<comercio>-<orden>" con comercio, o "<code de company>-<secuencia>" con prefijo L sin comercio (ej. L001-0000001) |
receiver_name |
string\|null |
Nombre de quien recibe |
receiver_phone |
string\|null |
Teléfono de quien recibe |
is_gift |
bool\|null |
La recibe otra persona distinta a quien creó la orden |
shopper_id |
int\|null |
Repartidor que actúa de shopper (selecciona los productos); solo supermercados |
currency_iso |
string\|null |
Moneda en la que paga el cliente esta orden |
branch_group_id |
int\|null |
Comercio (marca, no sucursal) al que pertenece; usado en reportes por comercio |
subtotal_original_e2 |
int\|null |
Total de productos sin descuentos (× 100) |
branch_rating_id |
int\|null |
Calificación que el cliente dejó al comercio por esta orden |
paid_at |
datetime\|null |
Momento del hito de pago (FLAG_PAID / FLAG_POST_PAYMENT; no se sobreescribe) |
being_prepared_at |
datetime\|null |
Momento en que el comercio/shopper inició la preparación |
prepared_at |
datetime\|null |
Momento en que la orden quedó lista |
collected_at |
datetime\|null |
Momento en que el repartidor recolectó la orden |
arrived_at |
datetime\|null |
Momento de llegada del repartidor al punto de entrega |
preparation_time |
int\|null |
Segundos de preparación: prepared_at − being_prepared_at |
total_preparation_time |
int\|null |
Segundos totales de preparación: desde paid_at (inmediatas) o desde being_prepared_at (programadas) |
collection_time |
int\|null |
Segundos entre orden lista y recolección: collected_at − prepared_at |
arrival_time |
int\|null |
Segundos desde el pago hasta la llegada al destino; solo órdenes inmediatas |
fleet_association_id |
int\|null |
Asociación/tarifa de envío elegida para la orden (aunque aún no haya repartidor asignado) |
source |
string\|null |
Origen externo de la orden (Ridery, WhatsApp, Square…); null en órdenes nativas |
city_id |
int\|null |
Ciudad de la orden (del comercio, o del destino si no hay comercio); define visibilidad para admins de ciudad |
client_address |
string\|null |
Dirección de entrega en texto plano (deprecado: usar client_address_data) |
locations |
array\|null |
Paradas de la entrega (lista de {@link OrderLocation}); reemplaza a client_*_e6 / pickup_*_e6 y soporta multiparada |
order_edit_data |
OrderEditData\|null |
Datos de la edición de la orden en curso (cambios de ítems pendientes de confirmar) |
ordered_goods |
array\|null |
Lista de productos de la orden (snapshot) |
is_service |
bool |
BitMask (({@link self::status} & 0x1) !== 0) |
is_pickup_enabled |
bool |
BitMask (({@link self::status} & 0x2) !== 0) |
is_type_digital |
bool |
BitMask (({@link self::status} & 0x4) !== 0) |
is_delivery |
bool |
BitMask (({@link self::status} & 0x8) !== 0) |
is_bid_waiting_client |
bool |
BitMask (({@link self::status} & 0x10) !== 0) |
is_bid_waiting_admin |
bool |
BitMask (({@link self::status} & 0x20) !== 0) |
is_bid_waiting_provider |
bool |
BitMask (({@link self::status} & 0x40) !== 0) |
is_asap |
bool |
BitMask (({@link self::status} & 0x80) !== 0) |
is_status_unconfirmed |
bool |
BitMask (({@link self::status} & 0x100) !== 0) |
is_payment_waiting_confirmation |
bool |
BitMask (({@link self::status} & 0x200) !== 0) |
is_payment_confirmed |
bool |
BitMask (({@link self::status} & 0x400) !== 0) |
is_provider_assigned |
bool |
BitMask (({@link self::status} & 0x800) !== 0) |
is_provider_started |
bool |
BitMask (({@link self::status} & 0x1000) !== 0) |
is_status_arrived |
bool |
BitMask (({@link self::status} & 0x2000) !== 0) |
is_provider_working |
bool |
BitMask (({@link self::status} & 0x4000) !== 0) |
is_status_completed |
bool |
BitMask (({@link self::status} & 0x8000) !== 0) |
is_status_canceled |
bool |
BitMask (({@link self::status} & 0x10000) !== 0) |
is_status_completed_ok |
bool |
BitMask (({@link self::status} & 0x20000) !== 0) |
is_refund_applied |
bool |
BitMask (({@link self::status} & 0x40000) !== 0) |
is_refund_pending |
bool |
BitMask (({@link self::status} & 0x80000) !== 0) |
is_payment_later |
bool |
BitMask (({@link self::status} & 0x100000) !== 0) |
is_status_being_prepared |
bool |
BitMask (({@link self::status} & 0x200000) !== 0) |
is_status_prepared |
bool |
BitMask (({@link self::status} & 0x400000) !== 0) |
is_provider_arrived |
bool |
BitMask (({@link self::status} & 0x800000) !== 0) |
is_provider_collected |
bool |
BitMask (({@link self::status} & 0x1000000) !== 0) |
is_status_expired |
bool |
BitMask (({@link self::status} & 0x2000000) !== 0) |
is_shopper_allowed |
bool |
BitMask (({@link self::status} & 0x4000000) !== 0) |
is_shopper_assigned |
bool |
BitMask (({@link self::status} & 0x8000000) !== 0) |
is_pool_private |
bool |
BitMask (({@link self::status} & 0x10000000) !== 0) |
is_invoice_allowed |
bool |
BitMask (({@link self::status} & 0x20000000) !== 0) |
is_for_shipping |
bool |
BitMask (({@link self::status} & 0x40000000) !== 0) |
has_item_updates |
bool |
BitMask (({@link self::status} & 0x80000000) !== 0) |
is_sent_to_pool |
bool |
BitMask (({@link self::status} & 0x100000000) !== 0) |
is_trip |
bool |
BitMask (({@link self::status} & 0x200000000) !== 0) |
is_trip_locked |
bool |
BitMask (({@link self::status} & 0x400000000) !== 0) |
is_bot_attempting |
bool |
BitMask (({@link self::status} & 0x800000000) !== 0) |
is_no_provider_dispatch |
bool |
BitMask (({@link self::status} & 0x1000000000) !== 0) |
is_dispatched_without_provider |
bool |
BitMask (({@link self::status} & 0x2000000000) !== 0) |
is_payment_later_required |
bool |
BitMask (({@link self::status} & 0x4000000000) !== 0) |
is_type_good |
bool |
BitMask (({@link self::status} & 0x1) === 0) |
is_scheduled |
bool |
BitMask (({@link self::status} & 0x80) === 0) |
is_status_confirmed |
bool |
BitMask (({@link self::status} & 0x100) === 0) |
is_no_bid_waiting |
bool |
BitMask ((({@link self::status} & 0x70) >> 4) === 0) |
additional_delivery_fee_e2 |
int |
|
admin_url |
string |
|
administrator_notes |
Collection |
Notas de administración registradas ante incidencias |
allLogs |
ApiLog> |
|
allOrderedGoodItems |
OrderedGood> |
|
allPayments |
Payment> |
|
amount_for_debugging |
Money\|null |
|
applied_taxes |
array |
|
assignedOrderProviders |
OrderProvider> |
|
assigning_bot_status |
string\|null |
|
balance |
OrderBalance |
|
base_delivery_fee_e2 |
int |
|
base_price_e2 |
int |
|
bids |
Bid> |
|
bids_snapshot |
array |
|
branch |
Branch\|null |
|
branch_group |
BranchGroup\|null |
|
branchPendingFee |
BranchPendingFee\|null |
|
branchRating |
BranchRating\|null |
|
branch_subtotal_e2 |
int |
Monto de cara al comercio: subtotal_original_e2 − branch_discounts_e2 (× 100) |
cancellationReason |
OrderCancellationReason\|null |
|
cashback_e2 |
int |
|
cashbacks |
CouponUsage> |
|
charges_e2 |
int |
|
client |
Client\|null |
|
client_debt_e2 |
int |
|
client_payment_e2 |
int |
|
clientRating |
ClientRating\|null |
|
client_rating_e2 |
int |
Calificación que el cliente dejó al comercio, × 100 (ej. 450 = 4.5) |
clientRatings |
ClientRating> |
|
company |
Company |
|
companyActiveOrder |
CompanyActiveOrder\|null |
|
company_currency_snapshot |
Currency\|null |
Moneda por defecto de la company al momento de crear la orden (snapshot) |
creator |
Admin\|null |
|
currency_rates |
array |
|
currency_snapshot |
Currency\|null |
Moneda del comercio al momento de crear la orden (snapshot; puede tener tasa distinta a la de la company) |
current_delay_in_seconds |
int |
|
delivery_eta_in_seconds |
int |
Tiempo estimado del delivery desde que se recolecta la orden (segundos) |
delivery_fee_e2 |
int |
Costo del envío de la orden (× 100) |
delivery_fee_e2_paid_for_client |
int |
Cuánto del envío pagó el cliente: 0 con promo de envío gratis, total, o parcial según promos (× 100) |
delivery_fee_to_pay_e2 |
int |
Cuánto se le debe pagar al repartidor por el envío (× 100) |
delivery_notes |
string |
|
desired_pickup_at |
datetime\|null |
|
destination_city |
City\|null |
|
device |
array\|null |
Metadatos del dispositivo que creó la orden |
discount_e2 |
int |
|
discounts |
CouponUsage> |
|
discountsAndCashbacks |
CouponUsage> |
|
driver_assigning_delay_in_seconds |
int |
|
effective_discount_e2 |
int |
|
effective_service_fee_e2 |
int |
|
estimated_max_weight |
int |
|
estimated_route |
DirectionsEstimated\|null |
Ruta del trayecto de delivery calculada por el servicio externo de rutas (distancia y tiempo) |
estimated_route_for_assigned_provider |
DirectionsEstimated\|null |
|
external_id |
string\|null |
|
external_source |
string\|null |
|
fleet |
Fleet\|null |
|
fleet_association |
FleetAssociation\|null |
|
fleet_association_shipment_action |
string\|null |
|
full_delivery_eta_in_seconds |
int |
Tiempo estimado total de la orden (segundos) |
full_preparation_eta_in_seconds |
int |
|
generalInvoiceItems |
GeneralInvoiceItem> |
|
gmv_e2 |
int |
|
goodRatings |
GoodRating> |
|
goods |
Good> |
|
google_maps_url |
string\|null |
|
gross_total_e2 |
int |
|
histories |
OrderHistory> |
|
initial_eta |
datetime |
|
invoiceDocumentItems |
InvoiceDocumentItem> |
|
is_arriving_for_pickup |
bool |
|
is_expiration_allowed |
bool |
|
is_provider_chat_allowed |
bool |
El cliente puede chatear con el repartidor de esta orden |
is_provider_dial_allowed |
bool |
El cliente puede llamar al repartidor de esta orden |
items_quantity |
int |
|
last_status_change |
int |
|
latest_status |
string |
Valor de status inmediatamente anterior al actual |
local_date |
datetime |
|
logs |
ApiLog> |
|
notifications |
Notification> |
|
order_location_history |
Collection |
|
orderProviderServices |
OrderProviderService> |
|
order_provider_snapshot |
OrderProvider\|null |
Datos congelados del repartidor asignado a la orden |
orderProviders |
OrderProvider> |
|
orderedGoodItems |
OrderedGood> |
|
orderedGoodItemsWithPromo |
OrderedGood> |
|
ordered_goods_history |
Collection |
|
package_content |
string\|null |
|
package_description |
string |
|
package_info |
PackageInfo\|null |
|
paid_amount_e2 |
int |
|
partner |
array\|null |
Datos del servicio externo que creó la orden (incluye su OrderID externo y campos propios de la integración) |
partner_name |
string\|null |
Nombre del servicio/asociado externo |
partner_pod_pin |
string\|null |
PIN para validar la entrega entre el comercio y el servicio externo |
partner_provider_id |
int\|null |
|
partner_validation_code |
array\|null |
|
partner_validation_url |
string\|null |
URL con un QR para autorizar la entrega |
payment_attempting |
string\|null |
Método de pago que el usuario está intentando (Stripe, PayPal…); pago aún no concretado |
payment_balance_e2 |
int |
|
payment_debt_e2 |
int |
|
payment_error |
string\|null |
Último error de pago; se limpia cuando hay un pago exitoso |
payment_types |
array |
Tipos de pago realizados sobre la orden |
payments |
Payment> |
|
pickup_delay_in_seconds |
int |
|
pickup_eta |
datetime |
|
pickup_eta_in_seconds |
int |
|
probable_eta |
datetime\|null |
ETA total estimado por el sistema: preparación del comercio + llegada del repartidor + trayecto |
promo_code |
CouponUsage\|null |
|
promo_code_e2 |
int |
|
promo_code_tax |
OrderTax\|null |
|
proofOfDeliveries |
ProofOfDelivery> |
|
providerPendingFees |
ProviderPendingFee> |
|
providerRatings |
ProviderRating> |
|
providers |
Provider> |
|
relatedBalanceMovements |
BalanceMovement> |
|
revenue_e2 |
int |
|
selected_payment_method |
SelectedPaymentMethod\|null |
Método elegido para pago contra entrega (POS, efectivo…) |
service_charge |
array\|null |
Servicio de envío elegido para la orden (el fleet_association ganador entre los candidatos) |
service_fee_e2 |
int |
Comisión de servicio de la app aplicada a la orden (× 100) |
service_matches |
array\|null |
|
shopper |
Provider\|null |
|
shopper_attachments |
Collection |
Adjuntos cargados por el shopper (ej. fotos de la compra) |
shopper_fee_e2 |
int |
|
shopper_fee_to_pay_e2 |
int |
|
shopper_notes |
Collection |
Notas registradas por el shopper |
shopper_snapshot |
Provider\|null |
Datos congelados del shopper asignado |
snapshots |
OrderDataSnapshot> |
|
status_data |
array |
Volcado de los bitmasks para depuración; se mantiene por retrocompatibilidad, no usar en integraciones |
status_for_branch_admins |
string |
Código de estado estable para administradores del comercio; N/A si no aplica |
status_for_clients |
string |
Código de estado estable para el cliente; N/A si no aplica |
status_for_company_admins |
string |
Código de estado estable para administradores de la company; N/A si no aplica |
status_for_partners |
string |
Código de estado estable para el servicio/asociado externo; N/A si no aplica |
status_for_payment |
string |
Código de estado de pago estable; N/A si no aplica |
status_for_providers |
string |
Código de estado estable para el repartidor; N/A si no aplica |
status_for_shoppers |
string |
Código de estado estable para el shopper; N/A si no aplica |
subtotal_discount_e2 |
int |
|
subtotal_promo_code_e2 |
int |
|
tab_groups |
array |
|
taxes |
OrderTax> |
Detalle de cargos y descuentos aplicados a la orden (delivery, servicio, promos…) |
taxes_for_branch |
Collection |
|
tracking_url |
string\|null |
|
weight |
int |
Crear orden (deprecado)
Crea una Order para un cliente en un comercio, armando internamente un carrito.
{warning} Endpoint deprecado. Use el flujo de Cart (Carrito).
| Método | URI | Cabeceras |
|---|---|---|
| POST | /companies/{companyId}/branches/{branchId}/clients/{clientId}/orders |
Authorization |
{
"receiver_name": "string|max:64",
"receiver_phone": "string|max:32",
"client_dni": "string|max:32",
"client_phone": "string|max:32",
"client_name": "string|max:128",
"client_email": "string|email:rfc,filter",
"is_gift": "boolean",
"client_latitude_e6": "required_without:client_address_id|integer|between:-90000000,90000000",
"client_longitude_e6": "required_with:client_latitude_e6||integer|between:-180000000,180000000",
"client_address": "string|max:512",
"client_address_id": "integer",
"pickup_latitude_e6": "integer|between:-90000000,90000000",
"pickup_longitude_e6": "integer|between:-180000000,180000000",
"pickup_address": "string|max:512",
"provider_id": "integer",
"scheduled_at": "date",
"use_local_tz": "boolean",
"notes": "string|max:255",
"goods": [
{
"good_id": "required|integer|exists:goods,id",
"quantity": "required|integer|min:1",
"units": "nullable|numeric|min:0.000001",
"provider_id": "integer",
"notes": "string|max:255",
"properties": [
{
"property_id": "required|integer",
"value": "required|string"
}
]
}
],
"subtotal_e2": "integer|min:0",
"service_charge_id": "nullable|integer",
"service_charge": "nullable|array",
"available_delivery_providers": "nullable|array",
"use_balance": "boolean",
"coupon_code": "nullable|string|min:5|max:20",
"cart_identifier": "integer|min:0",
"all_errors": "",
"simulate": "",
"force_scheduling": "boolean",
"force_providers": [
"integer"
]
}
| Código | HTTP | Cuándo ocurre |
|---|---|---|
EC140 |
400 | El client_address_id indicado no pertenece al cliente o no existe. |
EF312 |
400 | El coupon_code no es válido o ya fue utilizado. |
EF323 |
400 | El código corresponde a una gift card; solo se canjea desde el perfil. |
EC603 |
400 | El contenido del carrito resultante no es válido. |
EC229 |
400 | Uno o más ítems del pedido no son válidos. |
{info} Soporta: Paginación Filters Carga dinámica
Listar órdenes
Lista las Order accesibles para el usuario autenticado. Si no se envía city_id y
el usuario es administrador de una ciudad, se filtra automáticamente por su ciudad.
Parámetros de query adicionales:
city_id: filtra por la ciudad del comercio de la orden.assignment: shopper | deliverer | any | none — estado de asignación de la orden.mode: deleted | all — incluye órdenes archivadas (fuerza la paginación).| Método | URI | Cabeceras |
|---|---|---|
| GET | /companies/{companyId}/orders |
Authorization |
{info} Soporta: Paginación Filters Carga dinámica
Listar órdenes de un comercio (marca)
Lista las Order de todas las sucursales del branch_group (comercio/marca)
indicado. Con mode=deleted o mode=all incluye órdenes archivadas.
| Método | URI | Cabeceras |
|---|---|---|
| GET | /companies/{companyId}/branch-groups/{branchGroupId}/orders |
Authorization |
{info} Soporta: Paginación Filters Carga dinámica
Listar órdenes de un comercio
Lista las Order de la sucursal indicada. Con is_paid=1 (o si el comercio tiene
auto-asignación de repartidor al pagar) filtra por órdenes pagadas. Con mode=deleted o
mode=all incluye órdenes archivadas.
| Método | URI | Cabeceras |
|---|---|---|
| GET | /companies/{companyId}/branches/{branchId}/orders |
Authorization |
{info} Soporta: Paginación Filters Carga dinámica
Listar órdenes de un cliente
Lista las Order del cliente indicado. Con mode=deleted o mode=all incluye
órdenes archivadas.
| Método | URI | Cabeceras |
|---|---|---|
| GET | /companies/{companyId}/clients/{clientId}/orders |
Authorization |
{info} Soporta: Filters
Devuelve las Order en curso del cliente (según CompanyActiveOrder), sin paginar.
| Método | URI | Cabeceras |
|---|---|---|
| GET | /companies/{companyId}/clients/{clientId}/orders/active |
Authorization |
Devuelve las Order que el repartidor puede tomar según sus habilitaciones (repartidor, shopper, envío, viaje), su pertenencia a flotas, la distancia al punto de recolección, geocercas, restricciones de método de pago a flota y la configuración de pool del comercio. Las órdenes con partner externo se excluyen. Cada orden consultada queda registrada como vista por el repartidor.
| Método | URI | Cabeceras |
|---|---|---|
| GET | /companies/{companyId}/providers/{providerId}/orders/available |
Authorization |
{info} Soporta: Paginación
Listar órdenes creadas por un administrador
Lista las Order cuyo creator_id es el administrador indicado (órdenes que ese
admin registró en nombre de un cliente). Con mode=deleted o mode=all incluye órdenes
archivadas.
| Método | URI | Cabeceras |
|---|---|---|
| GET | /companies/{companyId}/admins/{adminId}/orders |
Authorization |
| Método | URI | Cabeceras |
|---|---|---|
| GET | /companies/{companyId}/orders/{orderId}/order-histories |
Authorization |
{info} Soporta: Carga dinámica
Mostrar orden
Devuelve el detalle completo de una Order, incluido el snapshot del servicio de
envío (service_charge). Acepta órdenes archivadas. Cuando la consulta un repartidor, éste
queda registrado como visor de la orden.
| Método | URI | Cabeceras |
|---|---|---|
| GET | /companies/{companyId}/orders/{orderId} |
Authorization |
{info} Soporta: Paginación Filters Carga dinámica
Actualizar orden
Actualiza campos editables de una Order y gestiona las notas de administración
(admin_notes): con admin_note_id edita una nota existente (guardando una versión previa
si cambió el texto); sin él, crea una nota nueva. Acepta órdenes archivadas.
| Método | URI | Cabeceras |
|---|---|---|
| PATCH | /companies/{companyId}/orders/{orderId} |
Authorization |
{
"admin_note_id": "nullable|integer|min:1",
"admin_notes": "nullable|string|max:512"
}
{info} Soporta: Paginación Filters Carga dinámica
Crea una evidencia (imagen) y lo vincula a una nota de administrador de una Orden.
Se puede visualizar por el atributo de Orden: administrator_notes.attachments
| Método | URI | Cabeceras |
|---|---|---|
| POST | /companies/{companyId}/orders/{orderId}/add-attachment |
Authorization |
{
"admin_notes": "nullable|string|max:512",
"attachment": "nullable|image|mimes:jpeg,png,bmp|max:8192"
}
{info} Soporta: Paginación Filters Carga dinámica
Crea una evidencia (text) con su imagen y lo vincula a una nota de administrador de una Orden.
Se puede visualizar por el atributo de Orden: administrator_notes.attachments
| Método | URI | Cabeceras |
|---|---|---|
| POST | /orders/{orderId}/administrator-notes |
Authorization |
{
"admin_notes": "nullable|string|max:512",
"attachment": "nullable|image|mimes:jpeg,png,bmp|max:8192"
}
{info} Soporta: Paginación Filters Carga dinámica
Crea una evidencia (imagen) y una nota (texto) de un shopper y lo vincula a una orden.
Útil para subir facturas o evidencias de la compra.
Se puede visualizar por el atributo de Orden: shopper_notes.
Sólo disponible para el shopper asignado.
| Método | URI | Cabeceras |
|---|---|---|
| POST | /companies/{companyId}/orders/{orderId}/add-shopper-notes |
Authorization |
{
"shopper_notes": [
{
"text": "nullable|string|max:512",
"attachments": [
"required|image|mimes:jpeg,png,bmp|max:8192"
]
}
]
}
{info} Soporta: Paginación Filters Carga dinámica
Aplica el cambio de dirección de destino de la Order previamente calculado con
check-destination-address: actualiza tarifa de envío, ETA y flota asignada, y guarda el
historial de ubicaciones. Si aumenta la deuda, la orden vuelve a estado de pago pendiente.
| Método | URI | Cabeceras |
|---|---|---|
| POST | /companies/{companyId}/orders/{orderId}/update-destination-address |
Authorization |
{
"client_latitude_e6": "required|integer|between:-90000000,90000000",
"client_longitude_e6": "required|integer|between:-180000000,180000000",
"client_address": "nullable|string|max:512",
"address_notes": "nullable|string|max:255",
"contact_name": "nullable|string|max:80",
"contact_phone": "nullable|string|max:20",
"contact_instructions": "nullable|string|max:1024"
}
| Código | HTTP | Cuándo ocurre |
|---|---|---|
EC100 |
400 | La orden no admite repartidor. |
EC116 |
400 | La orden ya está finalizada. |
EC244 |
400 | La orden no soporta envío a domicilio. |
EC240 |
400 | No hay un cálculo previo válido para esa dirección; ejecute primero check-destination-address. |
Ejecuta una acción de transición sobre varias Order a la vez (campo ids). El
parámetro de ruta action acepta: set-confirmed, set-paid, set-running, set-ready,
set-completed, set-post-payment, set-being-prepared, set-prepared. Cada orden se
procesa como si se llamara al endpoint individual correspondiente; la respuesta detalla el
resultado por orden. Los errores de negocio son los del endpoint de la acción elegida.
| Método | URI | Cabeceras |
|---|---|---|
| POST | /companies/{companyId}/orders/batch-action/{action} |
Authorization |
{
"ids": [
"integer|min:1"
],
"payload": ""
}
Confirma una Order pendiente y le asigna su number correlativo. Solo aplica a
órdenes de comercio con al menos un producto.
| Método | URI | Cabeceras |
|---|---|---|
| POST | /companies/{companyId}/orders/{orderId}/set-confirmed |
Authorization |
| Código | HTTP | Cuándo ocurre |
|---|---|---|
EC116 |
400 | La orden ya está finalizada. |
EC103 |
400 | La orden ya estaba confirmada. |
EC242 |
400 | La orden no está asociada a un comercio. |
EC138 |
400 | La orden no tiene productos. |
Registra un pago manual sobre la Order en nombre de un administrador. Útil para resolver incidencias con pagos ya recibidos fuera de la plataforma.
| Método | URI | Cabeceras |
|---|---|---|
| POST | /companies/{companyId}/orders/{orderId}/set-paid |
Authorization |
{
"type": "string|in:gateway,form,post-payment,balance",
"name": "string",
"ref": "string"
}
| Código | HTTP | Cuándo ocurre |
|---|---|---|
EC116 |
400 | La orden ya está finalizada. |
EC102 |
400 | La orden no está confirmada. |
EC105 |
400 | La orden ya está pagada. |
EC106 |
400 | La orden tiene reportes de pago pendientes de validación. |
Marca una Order de comercio como en curso. Solo para órdenes que no requieren repartidor (retiro en tienda o consumo en local).
| Método | URI | Cabeceras |
|---|---|---|
| POST | /companies/{companyId}/orders/{orderId}/set-running |
Authorization |
| Código | HTTP | Cuándo ocurre |
|---|---|---|
EC101 |
400 | La orden admite repartidor; use el flujo de asignación en su lugar. |
EC108 |
400 | La orden ya fue iniciada. |
EC242 |
400 | La orden no está asociada a un comercio. |
Marca una Order de comercio como lista para entregar. Solo para órdenes que no requieren repartidor.
| Método | URI | Cabeceras |
|---|---|---|
| POST | /companies/{companyId}/orders/{orderId}/set-ready |
Authorization |
| Código | HTTP | Cuándo ocurre |
|---|---|---|
EC116 |
400 | La orden ya está finalizada. |
EC102 |
400 | La orden no está confirmada. |
EC242 |
400 | La orden no está asociada a un comercio. |
EC101 |
400 | La orden admite repartidor; use el flujo de asignación en su lugar. |
Marca una Order como entregada. Requiere que el método de pago esté definido. Si la orden requiere repartidor y ya está en estado "llegó", exige verificación en dos pasos: se completará sin generar ganancia para ningún repartidor.
| Método | URI | Cabeceras |
|---|---|---|
| POST | /companies/{companyId}/orders/{orderId}/set-completed |
Authorization |
| Código | HTTP | Cuándo ocurre |
|---|---|---|
EC116 |
400 | La orden ya está finalizada. |
EC104 |
400 | La orden no tiene método de pago definido. |
Cancela una Order. Si ya estaba completada con éxito, se marca como no entregada (a efectos de facturación) y se exige verificación en dos pasos, porque puede disparar un reembolso al cliente y anular el pago al repartidor o al comercio. Envía un correo de aviso.
| Método | URI | Cabeceras |
|---|---|---|
| POST | /companies/{companyId}/orders/{orderId}/set-canceled |
Authorization |
{
"reason": "required|string|max:64",
"target_user_type": {
"nullable": true,
"string": true
}
}
| Código | HTTP | Cuándo ocurre |
|---|---|---|
EC116 |
400 | La orden ya está cancelada. |
Permite avanzar una Order sin pago previo: se cobrará al momento de la entrega (POS, efectivo, etc.). Requiere orden de comercio, no digital y que admita repartidor.
| Método | URI | Cabeceras |
|---|---|---|
| POST | /companies/{companyId}/orders/{orderId}/set-post-payment |
Authorization |
{
"id": "nullable|string",
"currency_iso": "required_with:id|string|min:3|max:8",
"cash_amount_e2": "nullable|integer|min:1"
}
| Código | HTTP | Cuándo ocurre |
|---|---|---|
EC116 |
400 | La orden ya está finalizada. |
EC144 |
400 | La orden es digital y no admite pago contra entrega. |
EC100 |
400 | La orden no admite repartidor. |
EC242 |
400 | La orden no está asociada a un comercio. |
EC105 |
400 | La orden ya está pagada. |
EC504 |
400 | El método de pago no está disponible para el pool privado de la orden. |
Salda la deuda de la Order debitando el saldo disponible del cliente.
| Método | URI | Cabeceras |
|---|---|---|
| POST | /companies/{companyId}/orders/{orderId}/set-balance-payment |
Authorization |
| Código | HTTP | Cuándo ocurre |
|---|---|---|
EC116 |
400 | La orden ya está finalizada. |
EC105 |
400 | La orden ya está pagada. |
EF500 |
400 | El saldo del cliente es insuficiente para cubrir la deuda de la orden. |
Marca que el comercio inició la preparación de la Order. Registra being_prepared_at.
| Método | URI | Cabeceras |
|---|---|---|
| POST | /companies/{companyId}/orders/{orderId}/set-being-prepared |
Authorization |
| Código | HTTP | Cuándo ocurre |
|---|---|---|
EC116 |
400 | La orden ya está finalizada. |
EC102 |
400 | La orden no está confirmada. |
EC126 |
400 | La orden ya está en preparación. |
EC128 |
400 | La orden ya está preparada. |
EC242 |
400 | La orden no está asociada a un comercio. |
Marca la Order como preparada y lista para entregar (al repartidor o al cliente).
Con assign_shopper_as_deliverer: true el shopper asignado queda también como repartidor.
| Método | URI | Cabeceras |
|---|---|---|
| POST | /companies/{companyId}/orders/{orderId}/set-prepared |
Authorization |
{
"assign_shopper_as_deliverer": "nullable|boolean"
}
| Código | HTTP | Cuándo ocurre |
|---|---|---|
EC116 |
400 | La orden ya está finalizada. |
EC102 |
400 | La orden no está confirmada. |
EC242 |
400 | La orden no está asociada a un comercio. |
EC138 |
400 | La orden no tiene productos. |
EC135 |
400 | Se pidió usar el shopper como repartidor pero la orden no tiene shopper asignado. |
Pasa la Order al pool privado: el envío lo maneja el propio comercio. Requiere que el comercio tenga una flota propia.
| Método | URI | Cabeceras |
|---|---|---|
| POST | /companies/{companyId}/orders/{orderId}/set-private-pool |
Authorization |
| Código | HTTP | Cuándo ocurre |
|---|---|---|
EC116 |
400 | La orden ya está finalizada. |
EC102 |
400 | La orden no está confirmada. |
EC100 |
400 | La orden no admite repartidor. |
EC114 |
400 | La orden ya está asignada. |
EC142 |
400 | La orden ya está en el pool privado. |
EC242 |
400 | La orden no está asociada a un comercio. |
ES020 |
400 | El comercio no tiene una flota propia habilitada. |
Pasa la Order al pool público: el envío puede asignarse a cualquier flota de la plataforma.
| Método | URI | Cabeceras |
|---|---|---|
| POST | /companies/{companyId}/orders/{orderId}/set-public-pool |
Authorization |
| Código | HTTP | Cuándo ocurre |
|---|---|---|
EC116 |
400 | La orden ya está finalizada. |
EC102 |
400 | La orden no está confirmada. |
EC100 |
400 | La orden no admite repartidor. |
EC114 |
400 | La orden ya está asignada. |
EC141 |
400 | La orden no está en el pool privado. |
EC242 |
400 | La orden no está asociada a un comercio. |
Devuelve las opciones de servicio de envío (flotas/tarifas) calculadas para la Order, tomadas del snapshot de matches. Requiere orden con repartidor y sin asignar.
| Método | URI | Cabeceras |
|---|---|---|
| GET | /companies/{companyId}/orders/{orderId}/available-fleets |
Authorization |
| Código | HTTP | Cuándo ocurre |
|---|---|---|
EC100 |
400 | La orden no admite repartidor. |
EC114 |
400 | La orden ya está asignada. |
EC238 |
400 | La orden no tiene una lista de opciones de envío disponible. |
Cambia la flota/tarifa de envío de la Order eligiendo una de las opciones del
snapshot de matches (service_charge_id).
| Método | URI | Cabeceras |
|---|---|---|
| POST | /companies/{companyId}/orders/{orderId}/set-selected-fleet |
Authorization |
{
"service_charge_id": "required|integer"
}
| Código | HTTP | Cuándo ocurre |
|---|---|---|
EC100 |
400 | La orden no admite repartidor, o el partner externo ya está asignado. |
EC114 |
400 | La orden ya está asignada. |
EC238 |
400 | La orden no tiene una lista de opciones de envío disponible. |
EC239 |
400 | El service_charge_id indicado no está en la lista de opciones de la orden. |
EC241 |
400 | No se puede cambiar de flota por una restricción de pago a flota (POS). |
Encola la Order para asignación automática de repartidor según la configuración
vigente. Con force: true fuerza el reintento aunque ya haya un intento en curso.
| Método | URI | Cabeceras |
|---|---|---|
| POST | /companies/{companyId}/orders/{orderId}/send-to-pool |
Authorization |
{
"force": "bool"
}
| Código | HTTP | Cuándo ocurre |
|---|---|---|
EC116 |
400 | La orden ya está finalizada. |
EC102 |
400 | La orden no está confirmada. |
EC100 |
400 | La orden no admite repartidor. |
EC114 |
400 | La orden ya está asignada y su flota no admite reenvío al pool. |
Solo válido para órdenes creadas con entrega a cargo del comercio (is_no_provider_dispatch). Habilita la posterior completación de la orden.
| Método | URI | Cabeceras |
|---|---|---|
| POST | /orders/{orderId}/set-dispatched-without-provider |
Authorization |
Quita la Order de la facturación del comercio: el comercio no recibirá pago por ella. Exige verificación en dos pasos. La orden debe estar finalizada y asociada a un comercio.
| Método | URI | Cabeceras |
|---|---|---|
| POST | /companies/{companyId}/orders/{orderId}/exclude-invoices |
Authorization |
| Código | HTTP | Cuándo ocurre |
|---|---|---|
EC242 |
400 | La orden no está asociada a un comercio. |
EC115 |
400 | La orden no está finalizada. |
EC147 |
400 | La orden ya está excluida de facturación, o su conciliación ya fue excluida, o ya tiene una factura emitida. |
Reincorpora la Order a la facturación del comercio: el comercio recibirá el pago correspondiente aunque la orden no se haya entregado al cliente. Exige verificación en dos pasos. La orden debe estar finalizada y asociada a un comercio.
| Método | URI | Cabeceras |
|---|---|---|
| POST | /companies/{companyId}/orders/{orderId}/include-invoices |
Authorization |
| Código | HTTP | Cuándo ocurre |
|---|---|---|
EC242 |
400 | La orden no está asociada a un comercio. |
EC115 |
400 | La orden no está finalizada. |
EC147 |
400 | La orden ya está incluida en facturación, o su conciliación ya fue incluida, o ya tiene una factura emitida. |
{info} Soporta: Paginación Filters Carga dinámica
Recalcula la tarifa y el ETA del envío de la Order para una nueva dirección de
destino, sin aplicarlo. El resultado se cachea 5 minutos para confirmarlo luego con
update-destination-address.
| Método | URI | Cabeceras |
|---|---|---|
| POST | /companies/{companyId}/orders/{orderId}/check-destination-address |
Authorization |
{
"client_latitude_e6": "required|integer|between:-90000000,90000000",
"client_longitude_e6": "required|integer|between:-180000000,180000000"
}
| Código | HTTP | Cuándo ocurre |
|---|---|---|
EC100 |
400 | La orden no admite repartidor. |
EC116 |
400 | La orden ya está finalizada. |
EC244 |
400 | La orden no soporta envío a domicilio. |
EC240 |
400 | No hay flota de envío disponible para la nueva dirección. |
Variante de creación para administradores: identifica al cliente por client_email
(client_name, client_dni, client_phone opcionales) y lo crea si no existe; luego crea
la Order igual que el endpoint de creación de cliente.
{warning} Endpoint deprecado. Use el flujo de Cart (Carrito).
| Método | URI | Cabeceras |
|---|---|---|
| POST | /companies/{companyId}/branches/{branchId}/orders |
Authorization |
{
"receiver_name": "string|max:64",
"receiver_phone": "string|max:32",
"client_dni": "string|max:32",
"client_phone": "string|max:32",
"client_name": "string|max:128",
"client_email": "string|email:rfc,filter",
"is_gift": "boolean",
"client_latitude_e6": "required_without:client_address_id|integer|between:-90000000,90000000",
"client_longitude_e6": "required_with:client_latitude_e6||integer|between:-180000000,180000000",
"client_address": "string|max:512",
"client_address_id": "integer",
"pickup_latitude_e6": "integer|between:-90000000,90000000",
"pickup_longitude_e6": "integer|between:-180000000,180000000",
"pickup_address": "string|max:512",
"provider_id": "integer",
"scheduled_at": "date",
"use_local_tz": "boolean",
"notes": "string|max:255",
"goods": [
{
"good_id": "required|integer|exists:goods,id",
"quantity": "required|integer|min:1",
"units": "nullable|numeric|min:0.000001",
"provider_id": "integer",
"notes": "string|max:255",
"properties": [
{
"property_id": "required|integer",
"value": "required|string"
}
]
}
],
"subtotal_e2": "integer|min:0",
"service_charge_id": "nullable|integer",
"service_charge": "nullable|array",
"available_delivery_providers": "nullable|array",
"use_balance": "boolean",
"coupon_code": "nullable|string|min:5|max:20",
"cart_identifier": "integer|min:0",
"all_errors": "",
"simulate": "",
"force_scheduling": "boolean",
"force_providers": [
"integer"
]
}
| Código | HTTP | Cuándo ocurre |
|---|---|---|
EC140 |
400 | El client_address_id indicado no pertenece al cliente o no existe. |
EF312 |
400 | El coupon_code no es válido o ya fue utilizado. |
EF323 |
400 | El código corresponde a una gift card; solo se canjea desde el perfil. |
EC603 |
400 | El contenido del carrito resultante no es válido. |
EC229 |
400 | Uno o más ítems del pedido no son válidos. |
| Método | URI | Cabeceras |
|---|---|---|
| PUT | /companies/{companyId}/orders/{orderId}/shoppers/{providerId} |
Authorization |
| Método | URI | Cabeceras |
|---|---|---|
| DELETE | /companies/{companyId}/orders/{orderId}/shoppers/{providerId} |
Authorization |
Agrega un OrderTax de tipo ajuste (amount_e2 positivo o negativo) a la
Order, con description. Con adjust_client_balance: true el ajuste impacta el
saldo/deuda del cliente (soporta pagos parciales si la orden no está preparada ni es de
pago diferido). Con is_forced: true se permite ajustar aunque la orden ya tenga factura,
recalculándola. El monto final de la orden no puede quedar en negativo.
| Método | URI | Cabeceras |
|---|---|---|
| POST | /companies/{companyId}/orders/{orderId}/adjust |
Authorization |
{
"amount_e2": "required|integer",
"description": "required|string|max:128",
"adjust_client_balance": "required|boolean",
"is_forced": "nullable|boolean"
}
| Código | HTTP | Cuándo ocurre |
|---|---|---|
EC124 |
400 | La orden está cancelada. |
EC146 |
400 | La orden ya tiene una factura emitida (use is_forced para ajustar igualmente). |
allLogs HasMany ApiLogallOrderedGoodItems HasMany OrderedGoodallPayments HasMany PaymentassignedOrderProviders HasMany OrderProviderbids HasMany Bidbranch BelongsTo BranchbranchPendingFee HasOne BranchPendingFeebranchRating HasOne BranchRatingcancellationReason HasOne OrderCancellationReasoncashbacks HasMany CouponUsageclient BelongsTo ClientclientRating HasOne ClientRatingclientRatings HasMany ClientRatingcompany BelongsTo CompanycompanyActiveOrder HasOne CompanyActiveOrdercreator BelongsTo Admindiscounts HasMany CouponUsagediscountsAndCashbacks HasMany CouponUsagegeneralInvoiceItems HasMany GeneralInvoiceItemgoodRatings HasMany GoodRatinggoods HasMany Goodhistories HasMany OrderHistoryinvoiceDocumentItems HasMany InvoiceDocumentItemlogs HasMany ApiLogorderProviderServices HasMany OrderProviderServiceorderProviders HasMany OrderProviderorderedGoodItems HasMany OrderedGoodorderedGoodItemsWithPromo HasMany OrderedGoodpayments HasMany PaymentproofOfDeliveries HasMany ProofOfDeliveryproviderPendingFees HasMany ProviderPendingFeeproviderRatings HasMany ProviderRatingproviders HasMany ProviderrelatedBalanceMovements HasMany BalanceMovementshopper BelongsTo Providersnapshots HasMany OrderDataSnapshottaxes HasMany OrderTax