Listar las ventas pagadas de una tienda
GET /stores/{storeKey}/sales
Devuelve las órdenes de la tienda que quedaron pagadas dentro del rango de fechas, según su fecha de pago (paid_at). Incluye las órdenes que se anularon después de pagarse, con su estado en status. Los resultados van ordenados por fecha de pago y luego por identificador, y la respuesta está paginada.
Cada elemento de data tiene la misma estructura que el data del evento Pago completo (order.paid_in_full). Sus campos están descritos en Orden aceptada y en Pago completo. Los valores reflejan el estado de la orden en el momento de la consulta; el webhook trae el estado en el momento del evento.
Las fechas son días calendario de la zona horaria America/Lima, con ambos extremos incluidos. El rango no puede superar 31 días.
Authorizations
Sección titulada «Authorizations »Parameters
Sección titulada « Parameters »Path Parameters
Sección titulada «Path Parameters »Identificador (UUID) de la tienda.
Example
2b7d9e40-c1a3-4f58-8e06-5a4d3c7b9f12Query Parameters
Sección titulada «Query Parameters »Primer día del rango, en formato AAAA-MM-DD. Es un día calendario de la zona horaria America/Lima y se incluye en el rango.
Example
2026-10-12Último día del rango, en formato AAAA-MM-DD. Es un día calendario de la zona horaria America/Lima y se incluye en el rango. Debe ser igual o posterior a date_from y no distar de ella más de 30 días, es decir, el rango no puede superar 31 días.
Example
2026-10-12Cantidad de registros por página. Por defecto 15.
Example
15Número de página, empezando en 1. Por defecto 1.
Example
1Responses
Sección titulada « Responses »Una página de las órdenes que quedaron pagadas dentro del rango de fechas, cada una con sus productos y sus pagos. Sirve para cuadrar las ventas de un periodo con su sistema.
- Van ordenadas por
paid_aty luego porid. Los registros llegan endata, los enlaces de navegación enlinksy los totales enmeta. - Un rango sin ventas responde
200condatavacío ymeta.totalen0. - Cada elemento tiene la misma estructura que el
datade Pago completo, pero con el estado de la orden al consultar, no al momento del evento. - Una orden anulada después de pagarse sigue en la lista, con
statusencanceled. created_at,sold_atypaid_atestán en UTC; el rango se interpreta en hora de Lima. Los montos son cadenas de texto, no números.
object
Órdenes pagadas de esta página, ordenadas por paid_at y luego por id.
Orden pagada. Tiene la misma estructura que data del evento Pago completo (order.paid_in_full). Los valores reflejan el estado de la orden en el momento de la consulta.
object
Identificador de la orden.
Integración de origen.
Código de la orden.
Número correlativo.
Referencia de la orden.
Información adicional.
Tipo de orden.
Estado actual de la orden. Una orden anulada después de pagarse conserva su pago y llega con canceled.
Indica si la orden está pagada.
Fecha de creación, en UTC.
Fecha y hora de la venta, en UTC.
Fecha y hora del pago, en UTC.
Mesa o punto de atención.
object
Identificador del punto de atención.
Nombre del punto de atención.
Identificador corto.
Código externo.
Moneda de la orden.
object
Identificador de la moneda.
Nombre de la moneda.
Símbolo de la moneda.
Monto de la orden con los descuentos de línea y antes del descuento global. string (2 dec).
Suma de los descuentos de línea. string (2 dec).
Descuento aplicado a la orden completa. string (2 dec).
Monto de la orden antes de descuentos. string (2 dec).
Información de entrega.
Cliente. Es null si la orden no tiene cliente.
object
Identificador del cliente.
Tipo de documento de identidad.
Número de documento de identidad.
Nombre del cliente.
Correo electrónico del cliente.
Teléfono del cliente.
Dirección del cliente.
Líneas de la orden.
Línea de la orden. Los modificadores (toppings) y los componentes de un combo (combo_products) tienen la misma estructura.
object
Identificador de la línea.
Código del ítem.
Código externo del producto.
Nombre del producto.
Alias del producto.
Descripción del producto.
Marca o proveedor.
Tipo de ítem.
Identificador del producto.
Identificador de la categoría.
Identificador de la categoría principal.
Identificador del grupo de productos.
Cantidad. string (10 dec).
Precio unitario, con impuestos. string (2 dec).
Precio unitario sin impuestos, antes de descuentos. string (5 dec).
Monto de la línea antes de su descuento. string (2 dec).
Descuento de la línea. string (2 dec).
Monto de la línea con su descuento. string (2 dec).
Monto de la línea sin impuestos, con su descuento y con la parte del descuento global que le corresponde. string (5 dec).
Costo unitario. string (10 dec).
Indica si se factura como servicio de exportación.
Estado de la línea.
Detalle de la línea.
Posición del plato.
Grupo del plato.
Almacén de la línea.
object
Identificador del almacén.
Nombre del almacén.
Código externo del almacén.
true si la línea es un modificador. Los componentes de un combo llegan con false.
Identificador de la línea a la que pertenece el modificador o el componente. Es null en las líneas de primer nivel.
Código del ítem de la línea padre. Es null en las líneas de primer nivel.
Pagos aprobados de la orden.
Pago aprobado de la orden.
object
Identificador del pago.
Estado del pago.
Identificador del medio de pago.
Tipo de medio de pago.
Nombre del medio de pago.
Monto del pago. string (2 dec).
Propina. string (2 dec).
Número de referencia.
Código de aprobación.
Primeros seis dígitos de la tarjeta.
Últimos cuatro dígitos de la tarjeta.
Fecha y hora del pago, en UTC.
Tienda de la orden.
object
Identificador de la tienda.
Nombre de la tienda.
Código externo de la tienda.
Enlaces de la paginación. Conservan los parámetros de consulta de la petición.
object
URL de la primera página.
URL de la última página.
URL de la página anterior. Es null en la primera página.
URL de la página siguiente. Es null en la última página.
Información de la paginación.
object
Número de la página actual.
Posición del primer registro de la página dentro del total. Es null si no hay registros.
Número de la última página.
Enlaces para armar un paginador.
object
URL de la página. Es null cuando no hay página anterior o siguiente.
Texto del enlace.
true en la página actual.
URL de la operación, sin parámetros de consulta.
Cantidad de registros por página.
Posición del último registro de la página dentro del total. Es null si no hay registros.
Cantidad total de registros.
Examples
Un día con una venta
{ "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" } } ], "links": { "first": "https://host-proporcionado-por-idbi/api/open/v1/stores/6a8c0e2f-5b7d-4d9b-9e3a-4f6b8d0c2e53/sales?date_from=2026-10-12&date_to=2026-10-12&page=1", "last": "https://host-proporcionado-por-idbi/api/open/v1/stores/6a8c0e2f-5b7d-4d9b-9e3a-4f6b8d0c2e53/sales?date_from=2026-10-12&date_to=2026-10-12&page=1", "prev": null, "next": null }, "meta": { "current_page": 1, "from": 1, "last_page": 1, "links": [ { "url": null, "label": "« Anterior", "active": false }, { "url": "https://host-proporcionado-por-idbi/api/open/v1/stores/6a8c0e2f-5b7d-4d9b-9e3a-4f6b8d0c2e53/sales?date_from=2026-10-12&date_to=2026-10-12&page=1", "label": "1", "active": true }, { "url": null, "label": "Siguiente »", "active": false } ], "path": "https://host-proporcionado-por-idbi/api/open/v1/stores/6a8c0e2f-5b7d-4d9b-9e3a-4f6b8d0c2e53/sales", "per_page": 15, "to": 1, "total": 1 }}Rango sin ventas
{ "data": [], "links": { "first": "https://host-proporcionado-por-idbi/api/open/v1/stores/6a8c0e2f-5b7d-4d9b-9e3a-4f6b8d0c2e53/sales?date_from=2026-10-12&date_to=2026-10-12&page=1", "last": "https://host-proporcionado-por-idbi/api/open/v1/stores/6a8c0e2f-5b7d-4d9b-9e3a-4f6b8d0c2e53/sales?date_from=2026-10-12&date_to=2026-10-12&page=1", "prev": null, "next": null }, "meta": { "current_page": 1, "from": null, "last_page": 1, "links": [ { "url": null, "label": "« Anterior", "active": false }, { "url": "https://host-proporcionado-por-idbi/api/open/v1/stores/6a8c0e2f-5b7d-4d9b-9e3a-4f6b8d0c2e53/sales?date_from=2026-10-12&date_to=2026-10-12&page=1", "label": "1", "active": true }, { "url": null, "label": "Siguiente »", "active": false } ], "path": "https://host-proporcionado-por-idbi/api/open/v1/stores/6a8c0e2f-5b7d-4d9b-9e3a-4f6b8d0c2e53/sales", "per_page": 15, "to": null, "total": 0 }}Credenciales ausentes, inválidas, deshabilitadas o vencidas. El campo error.description indica el motivo.
Formato de error de la autenticación y del control de acceso del token.
object
Detalle del error, con su código, su mensaje y su descripción.
object
Siempre es 0.
Mensaje del error.
Detalle del error, cuando existe.
Examples
Falta una de las cabeceras
{ "error": { "code": 0, "message": "No autorizado", "description": "El token es obligatorio" }}Token que no corresponde a la clave
{ "error": { "code": 0, "message": "No autorizado", "description": "El token es inválido" }}Clave inexistente
{ "error": { "code": 0, "message": "No autorizado", "description": "El token no fue encontrado" }}Token deshabilitado
{ "error": { "code": 0, "message": "No autorizado", "description": "El token está deshabilitado" }}Token vencido
{ "error": { "code": 0, "message": "No autorizado", "description": "El token expiró" }}La tienda indicada en la ruta no pertenece al token. La respuesta es la misma para una tienda ajena y para una tienda inexistente.
Formato de error de la autenticación y del control de acceso del token.
object
Detalle del error, con su código, su mensaje y su descripción.
object
Siempre es 0.
Mensaje del error.
Detalle del error, cuando existe.
Examples
{ "error": { "code": 0, "message": "Acceso denegado", "description": "El token no tiene acceso a la tienda solicitada" }}Algún parámetro de consulta no es válido. Los mensajes de errors están en español y se agrupan por nombre de campo.
Formato de error cuando los datos enviados no superan la validación.
object
Mensaje general de validación.
Mensajes de error agrupados por nombre de campo.
object
Examples
Faltan las fechas
{ "message": "Uno o más de los datos que has ingresado no cumplen con los requisitos mínimos.", "errors": { "date_from": [ "El campo date_from es obligatorio." ], "date_to": [ "El campo date_to es obligatorio." ] }}Fecha con formato incorrecto
{ "message": "Uno o más de los datos que has ingresado no cumplen con los requisitos mínimos.", "errors": { "date_from": [ "El campo date_from no corresponde con el formato de fecha Y-m-d." ] }}date_to anterior a date_from
{ "message": "Uno o más de los datos que has ingresado no cumplen con los requisitos mínimos.", "errors": { "date_to": [ "El campo date_to debe ser una fecha posterior o igual a date_from." ] }}Rango de más de 31 días
{ "message": "Uno o más de los datos que has ingresado no cumplen con los requisitos mínimos.", "errors": { "date_to": [ "El campo date_to debe ser una fecha anterior o igual a 2026-11-11." ] }}paginate fuera de rango
{ "message": "Uno o más de los datos que has ingresado no cumplen con los requisitos mínimos.", "errors": { "paginate": [ "El campo paginate no debe ser mayor a 100." ] }}