Saltar al contenido principal

API: movimientos y reportes

Contrato general en Cómo funciona la API. Todos estos endpoints piden reports:read, que la key tiene, y quedan acotados a su cuenta.

Los rangos from y to son obligatorios (ISO 8601) y la paginación es por cursor: pide la página siguiente con cursor=<nextCursor> hasta que llegue null.

Entregas

GET /transactions
GET /transactions/summary
GET /transactions/:id/delivery-evidence

Query de GET /transactions:

ParámetroTipoNotas
from, toISO 8601obligatorios
businessLinevending | eas
isDeliveredbooleantrue exitosas, false fallidas
methodstringCASH, CASHLESS, CARD, WALLET, BRE_B, REMOTE
operationId, deviceId, deviceSerial, controllerSerialstring
productId, consumerIdentificationstring
isReturnablebooleansolo EAS
fieldsstringlista de campos separada por coma, para acortar la respuesta
cursorstringpaginación
limitenteromáx. 1000
curl -G https://api.inssacs.com/transactions \
-H 'x-api-key: ics_…' \
--data-urlencode 'from=2026-08-01T00:00:00.000Z' \
--data-urlencode 'to=2026-08-31T23:59:59.999Z' \
--data-urlencode 'businessLine=vending' \
--data-urlencode 'isDelivered=true' \
--data-urlencode 'limit=500'

Respuesta:

{
"items": [
{
"id": "019fecb9-43e9-7969-aa90-eaf1aaf1f1db",
"date": "2026-08-11T12:41:03.000Z",
"businessLine": "vending",
"isDelivered": true,
"method": "CASHLESS",
"failureReason": null,
"currency": "COP",
"device": { "serial": "ICS595DDE99B", "name": "Vending Corferias 1" },
"consumer": { "name": "Juan Pérez", "identification": "1023456789", "codeId": "1023456789" },
"product": {
"name": "Chocoramo", "selection": "26", "cost": 2800, "sellValue": 4000,
"priceWithoutTax": 3361, "tax": 19, "taxValue": 639, "profit": 1200,
"balancePaid": 4000, "rechargePaid": 0
}
}
],
"nextCursor": "eyJkYXRlIjoiMjAyNi0wOC0xMVQxMjo0MTowMy4wMDBaIn0"
}

GET /transactions/summary acepta los mismos filtros y devuelve conteo, valor total y desglose por tipo. GET /transactions/:id/delivery-evidence devuelve una URL temporal del video de la entrega (EAS), con su expiración.

Recargas

GET /transactions/recharges

Query: from, to (obligatorios), operationId, deviceId, consumerIdentification, consumerCode, cursor, limit. Cada ítem trae amount, balanceAfter, el código y el dispositivo.

Devoluciones

GET /transactions/returns
GET /transactions/returns/:id/evidence

Devuelve los pares entrega ↔ devolución de productos retornables, con estado, fechas de entrega y devolución, y las claves de los dos videos. El endpoint de evidencia entrega la URL temporal.

Crédito disponible

GET /consumers/report
POST /consumers/report/exports
GET /consumers/report/exports/:id

GET /consumers/report da el saldo por código: subsidio, recarga, perfil, acumulable y fechas de último subsidio y última recarga. Query: operationId, search, cursor, limit.

Dashboard

GET /dashboard/summary
GET /dashboard/timeseries
GET /dashboard/products
GET /dashboard/devices
GET /dashboard/heatmap
GET /dashboard/payment-methods

Query común: from, to, accountId (el de la key), operationId opcional y, en timeseries, granularity (hour, day, week). Agregan solo ventas vending.

Exportaciones a Excel

Proceso asíncrono en dos pasos.

POST /transactions/exports → 202 { "id": "…", "status": "pending" }
GET /transactions/exports/:id → 200 { "status": "ready", "url": "https://…", "expiresAt": "…" }

Cuerpo del POST:

CampoTipoObligatorioNotas
from, toISO 8601rango
columnsstring[]al menos una; las columnas del reporte
businessLine, method, deviceId, productId, consumerIdentificationstringnomismos filtros que la lista
isDelivered, isReturnablebooleanno
timeZonestringnozona IANA para renderizar fechas (America/Bogota)
localestringnoidioma de los encabezados

Estados: pendingrunningready | failed. Se sondea el GET hasta ready y se descarga la url (temporal). Una exportación a la vez por actor: si hay otra en curso, 409 transactions.export.already_running.

El mismo patrón aplica a POST /consumers/report/exports.

Auditoría

GET /audit-logs

Query: resourceType, action, search, from, to, page, pageSize. Devuelve quién hizo qué y los valores anterior y nuevo. Útil para replicar la trazabilidad en un sistema propio: las acciones que haga la key aparecen con su etiqueta como autor.

Selectores y recibos

GET /selectors/:key # catálogos estáticos: currencies, product_types, code_types…
GET /receipts/:frameUuid # comprobante público de una entrega (no requiere autenticación)

GET /selectors/product_types es el que da los valores válidos del campo type de un producto.