Reportes, exportaciones y programaciones
Estado documental: Contrato propuesto. Las rutas, campos, límites y tiempos pasan a estado confirmado solo después de su implementación y verificación.
Objetivo: Inventariar consultas, exportaciones grandes y reportes programados para la empresa.
Filtros comunes
from
to
timezone
payment_order_status
financial_status
payment_order_uid
payment_method
payment_instrument_type
channel
user_id
shift_id
device_id
external_transaction_id
min_amount
max_amount
page
page_size
sort
Los filtros disponibles dependen del reporte. El rango temporal y la zona horaria deben aparecer en la respuesta.
En reportes asociados a Payment Orders, payment_order_status representa el lifecycle de la orden —por ejemplo open, confirmed, expired o cancelled— mientras financial_status conserva la dimensión financiera o de Reconciliation, por ejemplo late_detected, amount_difference o ambiguous. failed no es un terminal comercial público de Payment Order y no debe mezclarse con el lifecycle comercial. Los fallos técnicos pertenecen a la telemetría o infraestructura correspondiente.
payment_order_uid identifica la Payment Order dentro de YUPY y external_transaction_id mantiene la correlación comercial con el sistema origen. payment_method representa el medio solicitado. Cuando un reporte exponga información del instrumento resuelto por YUPY, esa dimensión es descriptiva y no implica que el caller la seleccione al crear un Web Checkout.
Reportes de consulta inmediata
| Audiencia | Método | Ruta propuesta | Uso | Idempotencia | Eventos o callbacks relacionados |
|---|---|---|---|---|---|
| Reportes | GET |
/v1/reports/overview |
Resumen ejecutivo del periodo. | No | Ninguno |
| Reportes | GET |
/v1/reports/transactions |
Detalle de operaciones de cobro / Payment Orders. El nombre histórico de la ruta no redefine la identidad canónica. | No | Ninguno |
| Reportes | GET |
/v1/reports/reconciliation |
Resultados de conciliación. | No | Ninguno |
| Reportes | GET |
/v1/reports/pending-cases |
Pendientes y antigüedad. | No | Ninguno |
| Reportes | GET |
/v1/reports/late-payments |
Pagos tardíos. | No | Ninguno |
| Reportes | GET |
/v1/reports/amount-differences |
Todas las diferencias. | No | Ninguno |
| Reportes | GET |
/v1/reports/underpayments |
Pagos incompletos. | No | Ninguno |
| Reportes | GET |
/v1/reports/overpayments |
Pagos en exceso. | No | Ninguno |
| Reportes | GET |
/v1/reports/ambiguous-payments |
Casos ambiguos. | No | Ninguno |
| Reportes | GET |
/v1/reports/cancelled-with-payment |
Canceladas con pago posterior. | No | Ninguno |
| Reportes | GET |
/v1/reports/evidence |
Constancias recibidas. | No | Ninguno |
| Reportes | GET |
/v1/reports/ocr |
Resultados y calidad OCR. | No | Ninguno |
| Reportes | GET |
/v1/reports/refunds |
Devoluciones y estados. | No | Ninguno |
| Reportes | GET |
/v1/reports/shifts |
Turnos. | No | Ninguno |
| Reportes | GET |
/v1/reports/users |
Actividad por usuario. | No | Ninguno |
| Reportes | GET |
/v1/reports/devices |
Actividad por dispositivo. | No | Ninguno |
| Reportes | GET |
/v1/reports/checkout-sessions |
Sesiones y vencimientos. | No | Ninguno |
| Reportes | GET |
/v1/reports/deliveries |
Entregas conversacionales. | No | Ninguno |
| Reportes | GET |
/v1/reports/webhook-deliveries |
Callbacks enviados. | No | Ninguno |
| Reportes | GET |
/v1/reports/api-usage |
Consumo de API. | No | Ninguno |
| Reportes | GET |
/v1/reports/duplicate-detections |
Duplicados detectados. | No | Ninguno |
| Reportes | GET |
/v1/reports/confirmation-times |
Tiempos de confirmación. | No | Ninguno |
| Reportes | GET |
/v1/reports/claims |
Reclamos. | No | Ninguno |
| Reportes | GET |
/v1/reports/audit-log |
Auditoría cliente. | No | Ninguno |
| Reportes | GET |
/v1/reports/source-health |
Salud resumida de fuentes, sin secretos. | No | Ninguno |
Ejemplo: pagos tardíos
GET /v1/reports/late-payments?from=2026-07-01T00:00:00-05:00&to=2026-07-31T23:59:59-05:00&page=1&page_size=50
{
"report_type": "late_payments",
"period": {
"from": "2026-07-01T00:00:00-05:00",
"to": "2026-07-31T23:59:59-05:00",
"timezone": "America/Lima"
},
"data": [
{
"payment_order_uid": "pay_01JXYZ",
"external_transaction_id": "ORDER-10482",
"payment_order_status": "expired",
"financial_status": "late_detected",
"expected_amount": "85.50",
"detected_amount": "85.50",
"closed_at": "2026-07-20T15:00:00-05:00",
"detected_at": "2026-07-20T15:10:00-05:00"
}
],
"pagination": {
"page": 1,
"page_size": 50,
"total_items": 1,
"total_pages": 1
},
"request_id": "req_01JXYZ"
}
En este ejemplo la Payment Order ya estaba expired y cerrada cuando se detectó evidencia financiera posterior. financial_status = "late_detected" no reabre la Payment Order, no elimina closed_at y no vuelve a ocupar el Counter que fue liberado.
El antiguo reporte específico de opciones de pago se retira del catálogo activo. Esta página no inventa una ruta sustituta: el análisis por medio e instrumento utiliza las dimensiones payment_method y payment_instrument_type dentro de los reportes que las soporten.
| Audiencia | Método | Ruta propuesta | Uso | Idempotencia | Eventos o callbacks relacionados |
|---|---|---|---|---|---|
| Reportes | POST |
/v1/report-jobs |
Solicitar exportación grande. | Obligatoria | report.queued |
| Reportes | GET |
/v1/report-jobs |
Listar trabajos. | No | Ninguno |
| Reportes | GET |
/v1/report-jobs/{job_id} |
Consultar estado. | No | Ninguno |
| Reportes | GET |
/v1/report-jobs/{job_id}/download |
Descargar archivo temporal. | No | Ninguno |
| Reportes | POST |
/v1/report-jobs/{job_id}/cancel |
Cancelar trabajo pendiente. | Obligatoria | report.cancelled |
Ejemplo: solicitar CSV
POST /v1/report-jobs
Idempotency-Key: 64d4fde2-a6d4-41a5-bb75-6a5f4fa94fa7
{
"report_type": "late_payments",
"format": "csv",
"filters": {
"from": "2026-07-01T00:00:00-05:00",
"to": "2026-07-31T23:59:59-05:00"
}
}
{
"job_id": "rpt_01JXYZ",
"status": "queued",
"report_type": "late_payments",
"format": "csv",
"request_id": "req_01JXYZ"
}
Eventos de trabajos
report.queued
report.processing
report.ready
report.failed
report.cancelled
Reportes programados
| Audiencia | Método | Ruta propuesta | Uso | Idempotencia | Eventos o callbacks relacionados |
|---|---|---|---|---|---|
| Administración | POST |
/v1/report-schedules |
Crear programación. | Obligatoria | report_schedule.created |
| Administración | GET |
/v1/report-schedules |
Listar programaciones. | No | Ninguno |
| Administración | GET |
/v1/report-schedules/{id} |
Consultar programación. | No | Ninguno |
| Administración | PATCH |
/v1/report-schedules/{id} |
Modificar programación. | Obligatoria | report_schedule.updated |
| Administración | DELETE |
/v1/report-schedules/{id} |
Desactivar programación. | Obligatoria | report_schedule.deactivated |
| Administración | POST |
/v1/report-schedules/{id}/run |
Ejecutar ahora. | Obligatoria | report.queued |
| Administración | GET |
/v1/report-schedules/{id}/runs |
Consultar ejecuciones. | No | Ninguno |
Ejemplo: programación
{
"report_type": "late_payments",
"frequency": "hourly",
"timezone": "America/Lima",
"recipients": [
{
"channel": "email",
"address": "operaciones@empresa.com"
},
{
"channel": "whatsapp",
"recipient_reference": "supervisor_norte"
}
],
"active": true
}
La frecuencia, horario, destinatarios y formatos se acuerdan con la empresa. La documentación no promete una frecuencia fija universal.
Errores principales
| HTTP | Código | Descripción |
|---|---|---|
| 422 | report_type_not_supported |
Tipo no disponible. |
| 202 | report_not_ready |
Trabajo todavía en proceso. |
| 410 | report_expired |
Descarga temporal vencida. |
| 500 | report_generation_failed |
No pudo generarse. |
| 422 | invalid_report_filter |
Filtro no válido para el reporte. |
Changelog — Payment Order / API Engine
2026-08-09 — Payment Order / API Engine v1.0: el ejemplo de pagos tardíos pasó de yupy_transaction_id/ypt_... a payment_order_uid/pay_...; los filtros comunes separaron payment_order_status del financial_status y retiraron el antiguo operational_status; se incorporaron payment_order_uid y payment_instrument_type; se retiró del catálogo activo /v1/reports/payment-options sin inventar una ruta sustituta; y el ejemplo de pago tardío documentó closed_at, payment_order_status = expired y financial_status = late_detected sin reapertura ni reocupación del Counter. Los report jobs, exportaciones, eventos report.* y programaciones se preservaron.
Exposición externa: el callback payment_order.terminal usa pagado | cancelado | timeout.