Ir al contenido

Pago completo

Identificador del evento: order.paid_in_full

IDPOS le avisa de que una orden quedó totalmente pagada. El aviso trae la orden completa, con el detalle de sus pagos.

Cuando una orden queda totalmente pagada: una orden pagada en partes genera este evento al completarse el pago, no en cada pago parcial. La misma orden puede llegar en más de un evento Pago completo, cada uno con su propio event_id; use event_type + data.id para registrar la venta una sola vez. El ejemplo muestra is_paid en true, paid_at con la fecha del pago y los pagos en payments.

  • Confirmar el cobro de la orden en su ERP o sistema contable.
  • Conciliar los pagos por medio de pago, con su monto y su propina.
  • Liberar en su sistema un pedido que esperaba el pago.

Al cerrar el turno, el evento Cierre de turno (shift.closed) le envía el total cobrado por la caja. Úselo para confirmar que recibió todos los Pago completo de ese turno: consulte cómo cuadrar el turno.

  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.paid_in_full y el id de la orden).

  4. Procese el evento en segundo plano.

    Actualice el estado de pago de la orden en su sistema con is_paid, paid_at y payments. Si todavía no conoce la orden porque Orden aceptada no llegó, créela con estos datos: la orden completa viene en el evento.

order.paid_in_full.json
{
"event_id": "01J9ZK4S9X6M2P7Q8R3T5V1W0Y",
"event_type": "order.paid_in_full",
"timestamp": "2026-10-12T19:45: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": true,
"created_at": "2026-10-12T19:30:00Z",
"sold_at": "2026-10-12T19:30:00Z",
"paid_at": "2026-10-12T19:45:00Z",
"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": [
{
"id": "5f7b9d1e-4a6c-4c8a-8d2f-3e5a7c9b1d42",
"status": "approved",
"method_id": "1b3d5f7a-9c2e-4d6b-8f1a-3c5e7a9b2d93",
"method_type": "card",
"method_name": "Visa",
"amount": "57.00",
"tip": "0.00",
"reference_number": "123456",
"approval_code": "A1B2C3",
"first_six_digits": "411111",
"last_four_digits": "1111",
"paid_at": "2026-10-12T19:45:00Z"
}
],
"store": {
"id": "6a8c0e2f-5b7d-4d9b-9e3a-4f6b8d0c2e53",
"name": "Tienda Centro",
"external_id": "T01"
}
}
}

Los campos de data son los mismos que los de Orden aceptada. Consulte esa tabla para el detalle de cada uno.

CampoQué indica
is_paidtrue cuando la orden está totalmente pagada.
paid_atFecha y hora del pago.
paymentsPagos de la orden, con medio de pago, monto, propina y referencias.