📊 Reportería y conciliación
Guía para automatizar reportes financieros — estado de resultados, cashflow, conciliación contable — consumiendo las mismas APIs que usa el dashboard de Talo.
Las 3 APIs que necesitas
| Recurso | Endpoint | ¿Qué te da? |
|---|---|---|
| Payments API | GET /payments/ | Ventas: monto facturado, estado de cada cobro, external_id de tu orden |
| Transactions API | GET /transactions/ | Movimientos de dinero: monto bruto, comisiones, impuestos y monto neto acreditado |
| Balances API | GET /balances/ | Saldo disponible actual de la cuenta |
Todos requieren Authorization: Bearer header. Genera tus credenciales desde
Dashboard → Usuario → Credenciales y consulta
Autenticación para obtener el
token.
Modelo mental
- Un pago (
payment) representa una intención de cobro (una orden). Supayment_statuste dice si se cobró (SUCCESS,OVERPAID,UNDERPAID) o no (PENDING,EXPIRED,REFUND). - Una transacción (
transaction) representa dinero que efectivamente se movió: cada transferencia recibida (INBOUND), retiro (OUTBOUND) o devolución (REFUND). - Para un estado de resultados, la fuente de verdad son las transacciones: ahí están el monto bruto (
gross_amount), la comisión de Talo (commission_amount), los impuestos (taxes[]) y el neto acreditado. - Para cashflow, combina las transacciones del período con el balance al cierre.
Paso a paso
Obtener un token
curl -X POST https://api.talo.com.ar/users/{user_id}/tokens \
-H "Content-Type: application/json" \
-d '{ "client_id": "TU_CLIENT_ID", "client_secret": "TU_CLIENT_SECRET" }'Traer las transacciones del período
Cómo funciona la paginación: GET /transactions/ devuelve los resultados de a páginas. Si hay más resultados, la respuesta incluye un campo lastEvaluatedKey con tres valores (user_id, transaction_id, creation_timestamp). Para pedir la página siguiente, reenviá esos tres valores como cursor_user_id, cursor_transaction_id y cursor_creation_timestamp. Cuando la respuesta viene sin lastEvaluatedKey, no hay más páginas.
cURL
# Página 1
curl -H "Authorization: Bearer $TALO_TOKEN" \
"https://api.talo.com.ar/transactions/?user_id=$USER_ID&start_date=2026-07-01T00:00:00.000Z&end_date=2026-07-31T23:59:59.000Z"
# Si la respuesta trae data.lastEvaluatedKey, pedí la página siguiente
# reenviando sus tres campos como cursores:
curl -H "Authorization: Bearer $TALO_TOKEN" \
"https://api.talo.com.ar/transactions/?user_id=$USER_ID&start_date=2026-07-01T00:00:00.000Z&end_date=2026-07-31T23:59:59.000Z&cursor_user_id=<lek.user_id>&cursor_transaction_id=<lek.transaction_id>&cursor_creation_timestamp=<lek.creation_timestamp>"Armar el estado de resultados
Cómo se calcula: filtrá las transacciones de tipo INBOUND (dinero que entró). Sobre ellas: las ventas brutas son la suma de gross_amount, las comisiones la suma de commission_amount, y los impuestos la suma de tax_amount dentro de cada taxes[]. El neto acreditado es ventas brutas − comisiones − impuestos. Los montos llegan como strings y algunos campos pueden venir vacíos o null — convertí con cuidado.
JavaScript
const txs = await getAllTransactions({ userId, token, startDate, endDate })
const inbound = txs.filter((tx) => tx.transactionType === "INBOUND")
const sum = (xs) => xs.reduce((a, b) => a + b, 0)
const ventasBrutas = sum(inbound.map((tx) => Number(tx.gross_amount ?? 0)))
const comisiones = sum(inbound.map((tx) => Number(tx.commission_amount ?? 0)))
const impuestos = sum(
inbound.flatMap((tx) => (tx.taxes ?? []).map((t) => Number(t.tax_amount ?? 0)))
)
const netoAcreditado = ventasBrutas - comisiones - impuestosCruzar con tus órdenes (opcional)
Cada transacción INBOUND tiene un payment_id. Con GET /payments/{payment_id} recuperas el external_id (el ID de la orden en tu sistema), el motive y los datos del cliente, para conciliar contra tu facturación.
GET /payments/ no pagina hoy en la práctica: cuando pasás user_id, la API ignora limit y no devuelve ningún cursor de salida — siempre trae todos los pagos que matchean start_date/end_date en una sola respuesta (ver detalle y Callout en Payments API). Acotá el rango de fechas para no traer de más; no dependas de cursor_id/limit para este endpoint.
Cerrar el cashflow del período
curl -H "Authorization: Bearer $TALO_TOKEN" \
"https://api.talo.com.ar/balances/?user_id=$USER_ID&preferred_currency=ARS"Saldo inicial + neto acreditado − retiros (OUTBOUND) − devoluciones (REFUND) ≈ saldo final (totalBalance).
Buenas prácticas
- Consulta por rangos de fecha acotados (por día o por semana) en lugar de traer todo el historial en cada corrida.
- Pagina siempre en
/transactions/: si la respuesta traelastEvaluatedKey, hay más resultados — esto funciona hoy y está verificado./payments/es distinto: no expone cursor de salida ni respetalimit, así que siempre trae todo lo que matchea el rango de fechas en una sola respuesta (ver nota en Payments API). - Usa webhooks para tiempo real: en lugar de hacer polling, configura
webhook_urlen tus pagos y recibe la notificación al acreditarse. Ver Webhooks. - Montos como strings: los campos monetarios (
amount,gross_amount,commission_amount) llegan como strings. Usa una librería de decimales para sumarlos si el volumen es alto. - Sandbox primero: probá tu integración contra
https://sandbox-api.talo.com.arcon el simulador de pagos.
¿Necesitas devoluciones en tu conciliación? Las transacciones de tipo REFUND
y el flujo completo están documentados en
Devoluciones.