Ir al contenido

Orden aceptada

Identificador del evento: order.accepted

IDPOS le avisa de que una orden pasó al estado «aceptada». El aviso trae la orden completa: sus productos con modificadores y combos, los pagos, el cliente y la tienda.

Cuando una orden pasa al estado «aceptada». La orden puede estar pagada o no: revise is_paid y paid_at. El ejemplo muestra una orden sin pagar: is_paid es false, paid_at es null y payments está vacío.

  • Registrar la venta en su ERP o sistema contable en cuanto la orden se acepta.
  • Mostrar el pedido, con sus productos y su cliente, en su propio panel de seguimiento.
  • Reservar o descontar en su inventario los productos de la orden.
  1. Verifique la firma.

    Calcule el HMAC con el cuerpo crudo y compárelo con X-Webhook-Signature. Si no coincide, no procese el evento. Los pasos están en Autenticación y firma.

  2. Responda 2xx de inmediato.

    Guarde el evento en una cola y responda sin esperar a procesarlo. Si tarda más que el tiempo de espera, IDPOS lo trata como fallido y lo reintenta.

  3. Descarte los duplicados.

    Si ya procesó ese event_id del cuerpo, ya verificado, no lo procese otra vez. Como segunda clave use event_type junto con data.id (por ejemplo, order.accepted y el id de la orden).

  4. Procese el evento en segundo plano.

    Cree o actualice la orden en su sistema con los datos de data. Lea solo los campos que necesita e ignore los que no reconozca.

order.accepted.json
{
"event_id": "01J9ZK3Q7V4N8X2M5T6R1B0C9D",
"event_type": "order.accepted",
"timestamp": "2026-10-12T19:30:02Z",
"api_version": "v1",
"data": {
"id": "9b6f0c3e-1a2d-4c55-8f01-3d2a7e6b9a10",
"integration": null,
"code": "ORD-7F3K2",
"correlative": 1234,
"reference": "OV-001234",
"extra_information": null,
"type": "pick-up",
"status": "accepted",
"is_paid": false,
"created_at": "2026-10-12T19:30:00Z",
"sold_at": "2026-10-12T19:30:00Z",
"paid_at": null,
"spot": {
"id": null,
"name": null,
"slug": null,
"external_id": null
},
"currency": {
"id": "719b61f7-0e77-4e7c-8e78-7a9b51791c29",
"name": "PEN",
"symbol": "S/"
},
"subtotal_amount": "57.00",
"discount_amount": "6.00",
"global_discount_amount": "0.00",
"total_amount": "63.00",
"delivery": null,
"customer": {
"id": "e2f4a6c8-1b3d-4f57-9a0c-6d8e0f2a4b61",
"identification_type": "DNI",
"identification_value": "12345678",
"name": "CLIENTE EJEMPLO",
"email": "cliente@example.com",
"phone": "900000000",
"address": null
},
"seller": {
"id": "8c1e3a5b-7d9f-4b2a-8c4e-6f0a2b4d6e71",
"name": "Ana Torres"
},
"additional_seller": null,
"cashier": {
"id": "9d2f4b6c-8e0a-4c3b-9d5f-7a1b3c5e7f82",
"name": "Caja 1"
},
"products": [
{
"id": "3d5f7a9b-2c4e-4a68-8b0d-1e3f5a7c9d20",
"sku": "HAM-001",
"external_id": "100234",
"name": "Hamburguesa Clásica",
"alias": null,
"description": null,
"vendor": null,
"type": "product",
"product_id": "7a9c1e3f-5b7d-4f91-a3c5-0e2b4d6f8a13",
"category_id": "b1d3f5a7-9c1e-4b35-8d7f-2a4c6e8b0d24",
"main_category_id": "c2e4a6b8-0d2f-4c46-9e8a-3b5d7f9a1c35",
"product_group_id": null,
"quantity": "2.0000000000",
"unit_price": "30.00",
"unit_net_price": "25.42373",
"subtotal_amount": "60.00",
"discount_amount": "6.00",
"total_amount": "54.00",
"net_amount": "45.76271",
"unit_cost": "0.0000000000",
"issue_as_export_service": false,
"status": "pending",
"extra_detail": "sin cebolla",
"position_dish": 1,
"group_dish": 1,
"warehouse": {
"id": "d3f5b7c9-1e3a-4d57-af9b-4c6e8a0b2d46",
"name": "Cocina",
"external_id": "COC"
},
"is_modifier": false,
"parent_id": null,
"parent_sku": null,
"toppings": [
{
"id": "4e6a8c0d-3f5b-4b79-9c1e-2d4f6a8c0e31",
"sku": "TOP-QSO",
"external_id": null,
"name": "Queso extra",
"alias": null,
"description": null,
"vendor": null,
"type": "product",
"product_id": null,
"category_id": null,
"main_category_id": null,
"product_group_id": null,
"quantity": "1.0000000000",
"unit_price": "3.00",
"unit_net_price": "2.54237",
"subtotal_amount": "3.00",
"discount_amount": "0.00",
"total_amount": "3.00",
"net_amount": "2.54237",
"unit_cost": "0.0000000000",
"issue_as_export_service": false,
"status": "pending",
"extra_detail": null,
"position_dish": 1,
"group_dish": 1,
"warehouse": null,
"is_modifier": true,
"parent_id": "3d5f7a9b-2c4e-4a68-8b0d-1e3f5a7c9d20",
"parent_sku": "HAM-001",
"toppings": [],
"combo_products": []
}
],
"combo_products": []
}
],
"payments": [],
"store": {
"id": "6a8c0e2f-5b7d-4d9b-9e3a-4f6b8d0c2e53",
"name": "Tienda Centro",
"external_id": "T01"
}
}
}

Cómo leer las tablas: el tipo aparece debajo del nombre del campo y «nulo» indica que puede venir como null. Los demás términos están en la guía de lectura de campos.

CampoDescripción
id
string (UUID)
Identificador de la orden
integration
string · nulo
Integración de origen
code
string · nulo
Código de la orden
correlative
entero · nulo
Número correlativo
reference
string · nulo
Referencia de la orden
extra_information
objeto · nulo
Información adicional
type
string · nulo
Tipo de orden
status
string
Estado de la orden
is_paid
booleano
Indica si la orden está pagada
created_at
string (fecha) · nulo
Fecha de creación
sold_at
string (fecha) · nulo
Fecha y hora de la venta
paid_at
string (fecha) · nulo
Fecha y hora del pago
subtotal_amount
string (2 dec)
Monto de la orden con los descuentos de línea y antes del descuento global: total_amount menos discount_amount
discount_amount
string (2 dec)
Suma de los descuentos de línea. No incluye el descuento global
global_discount_amount
string (2 dec)
Descuento aplicado a la orden completa. Se resta de subtotal_amount
total_amount
string (2 dec)
Monto de la orden antes de descuentos
delivery
objeto · nulo
Información de entrega
CampoDescripción
spot
objeto
Mesa o punto de atención
spot.id
string (UUID) · nulo
Identificador del punto de atención
spot.name
string · nulo
Nombre del punto de atención
spot.slug
string · nulo
Identificador corto
spot.external_id
string · nulo
Código externo
CampoDescripción
currency
objeto
Moneda
currency.id
string (UUID) · nulo
Identificador de la moneda
currency.name
string · nulo
Nombre de la moneda
currency.symbol
string · nulo
Símbolo de la moneda
CampoDescripción
customer
objeto · nulo
Cliente
customer.id
string (UUID) · nulo
Identificador del cliente
customer.identification_type
string · nulo
Tipo de documento de identidad
customer.identification_value
string · nulo
Número de documento de identidad
customer.name
string · nulo
Nombre del cliente
customer.email
string · nulo
Correo electrónico del cliente
customer.phone
string · nulo
Teléfono del cliente
customer.address
string · nulo
Dirección del cliente

Vendedores y caja (seller, additional_seller, cashier)

Sección titulada «Vendedores y caja (seller, additional_seller, cashier)»
CampoDescripción
seller
objeto · nulo
Usuario que registró la venta. Es null si la orden no tiene vendedor o si ese usuario fue eliminado
seller.id
string (UUID)
Identificador del usuario
seller.name
string
Nombre del usuario
additional_seller
objeto · nulo
Vendedor adicional asignado a la orden. Es null si la orden no tiene vendedor adicional o si ese usuario fue eliminado
additional_seller.id
string (UUID)
Identificador del vendedor adicional
additional_seller.name
string
Nombre del vendedor adicional
cashier
objeto · nulo
Caja en la que se registró la orden. Es null si la orden no tiene caja o si la caja fue eliminada
cashier.id
string (UUID)
Identificador de la caja
cashier.name
string
Nombre de la caja

Los modificadores (toppings[]) y los componentes de un combo (combo_products[]) tienen la misma estructura que cada elemento de products[].

CampoDescripción
products
lista
Líneas de la orden
products[].id
string (UUID)
Identificador de la línea
products[].sku
string · nulo
Código del ítem
products[].external_id
string · nulo
Código externo del producto
products[].name
string
Nombre del producto
products[].alias
string · nulo
Alias del producto
products[].description
string · nulo
Descripción del producto
products[].vendor
string · nulo
Marca o proveedor
products[].type
string · nulo
Tipo de ítem
products[].product_id
string (UUID) · nulo
Identificador del producto
products[].category_id
string (UUID) · nulo
Identificador de la categoría
products[].main_category_id
string (UUID) · nulo
Identificador de la categoría principal
products[].product_group_id
string (UUID) · nulo
Identificador del grupo de productos
products[].quantity
string (10 dec)
Cantidad
products[].unit_price
string (2 dec)
Precio unitario, con impuestos
products[].unit_net_price
string (5 dec)
Precio unitario sin impuestos, antes de descuentos
products[].subtotal_amount
string (2 dec)
Monto de la línea antes de su descuento
products[].discount_amount
string (2 dec)
Descuento de la línea
products[].total_amount
string (2 dec)
Monto de la línea con su descuento: subtotal_amount menos discount_amount
products[].net_amount
string (5 dec)
Monto de la línea sin impuestos, con su descuento y con la parte del descuento global que le corresponde. Ver Monto neto de la línea
products[].unit_cost
string (10 dec)
Costo unitario
products[].issue_as_export_service
booleano
Facturar como servicio de exportación
products[].status
string
Estado de la línea
products[].extra_detail
string · nulo
Detalle de la línea
products[].position_dish
entero · nulo
Posición del plato
products[].group_dish
entero · nulo
Grupo del plato
products[].warehouse
objeto · nulo
Almacén de la línea (id, name, external_id)
products[].is_modifier
booleano
true si la línea es un modificador (toppings[]). Los componentes de un combo llegan con false
products[].parent_id
string (UUID) · nulo
Identificador de la línea a la que pertenece el modificador o el componente. null en las líneas de primer nivel
products[].parent_sku
string · nulo
Código del ítem de la línea padre. null en las líneas de primer nivel
products[].toppings
lista
Modificadores (misma estructura que products[])
products[].combo_products
lista
Componentes del combo (misma estructura que products[])

net_amount es lo que la línea aporta a la venta sin ningún impuesto. Sirve para registrar la venta neta por producto en su ERP o sistema contable sin tener que repartir usted el descuento global.

  • Parte de total_amount, es decir, ya incluye el descuento de la línea.
  • Le resta la parte del descuento global que le toca. El descuento global se reparte entre las líneas en proporción a su total_amount, incluidos modificadores y componentes de combo.
  • Quita todos los impuestos de la línea, no solo el IGV.
  • Las líneas anuladas no participan del reparto.

Ejemplo: una orden con una línea de S/ 20.00 con S/ 5.00 de descuento (total_amount 15.00) y otra de S/ 40.00 sin descuento, con un descuento global de S/ 5.50. El descuento global es el 10 % de 55.00, así que a la primera línea le tocan S/ 1.50 y a la segunda S/ 4.00. Si el producto lleva 31 % de impuestos, net_amount es 13.50 / 1.31 = 10.30534 y 36.00 / 1.31 = 27.48092.

net_amount es un cálculo por línea y puede diferir por redondeo de los importes del Comprobante emitido. Para los importes tributarios del comprobante, use ese evento.

CampoDescripción
payments
lista
Pagos aprobados de la orden
payments[].id
string (UUID)
Identificador del pago
payments[].status
string
Estado del pago
payments[].method_id
string (UUID) · nulo
Identificador del medio de pago
payments[].method_type
string · nulo
Tipo de medio de pago
payments[].method_name
string · nulo
Nombre del medio de pago
payments[].amount
string (2 dec)
Monto del pago
payments[].tip
string (2 dec)
Propina
payments[].reference_number
string · nulo
Número de referencia
payments[].approval_code
string · nulo
Código de aprobación
payments[].first_six_digits
string · nulo
Primeros seis dígitos de la tarjeta
payments[].last_four_digits
string · nulo
Últimos cuatro dígitos de la tarjeta
payments[].paid_at
string (fecha) · nulo
Fecha y hora del pago
CampoDescripción
store
objeto
Tienda
store.id
string (UUID) · nulo
Identificador de la tienda
store.name
string · nulo
Nombre de la tienda
store.external_id
string · nulo
Código externo de la tienda