Skip to main content
La API de tesorería sirve para resolver los IDs de cuentas bancarias que usan otros recursos, consultar saldos, recorrer movimientos y transferir fondos ARS sin abrir el dashboard. La creación y administración de cuentas bancarias continúa en la interfaz de La Pyme y en los procesos de migración. Estos endpoints de consulta requieren treasury:read:
  • GET /api/v1/bank-accounts
  • GET /api/v1/bank-accounts/{bank_account_id}
  • GET /api/v1/treasury/balances
  • GET /api/v1/treasury/movements
  • GET /api/v1/treasury/movements/{treasury_movement_id}
  • GET /api/v1/funds-transfers
  • GET /api/v1/funds-transfers/{funds_transfer_id}
POST /api/v1/funds-transfers requiere treasury:write e Idempotency-Key.

Cuentas bancarias

La colección y el detalle devuelven configuración segura como banco, nombre, moneda, CBU, alias, uso de chequera y estado. No exponen el ID de la cuenta contable vinculada, la organización, actores internos ni un saldo calculado.
Las referencias y las proyecciones financieras incluyen cuentas ARS y USD.

Saldos

GET /api/v1/treasury/balances devuelve las cuentas bancarias, cajas registradoras y cajas fuertes visibles. Podés filtrar por balance_type, balance_id, status y as_of. Los importes son enteros en unidades menores. native_amount está expresado en currency. functional_amount está expresado en functional_currency, que en esta versión siempre es ARS. En una fuente ARS, ambos valores coinciden. En una fuente USD, native_amount es el saldo USD que se usa para operar y conciliar, mientras que functional_amount es su valor contable registrado en ARS. native_amount_quality puede ser exact, derived o unavailable. Cuando un historial USD no conserva evidencia suficiente, native_amount es null: la API no adivina dólares a partir de pesos. anomaly_count informa cuántos hechos del saldo requieren revisión.
visibility_scope informa si la respuesta representa toda la organización o solo hechos propios del usuario delegado:
  • organization: proyección organizacional permitida.
  • own: suma limitada a movimientos creados por el usuario delegado.

Movimientos

GET /api/v1/treasury/movements devuelve una vista paginada del estado actual. Los filtros disponibles son balance_type, balance_id, movement_type, date_from y date_to. Una corrección autorizada de un movimiento manual elegible puede actualizar o eliminar una fila. Al sincronizar, conciliá por id y reemplazá la vista local con la respuesta más reciente. Un native_amount o functional_amount positivo aumenta el saldo y uno negativo lo reduce. functional_amount_origin indica si el valor ARS proviene de una cotización (rate), del valor contable existente (carrying_value) o de un historial sin procedencia canónica (legacy_unknown). Cuando el origen es rate, el objeto rate conserva value, rate_date y source. occurred_on es la fecha operativa. created_at es el timestamp real de persistencia. El id identifica la línea mientras el movimiento existe y puede guardarse para conciliar una vista local. Para crear un ingreso o egreso manual, usá POST /api/v1/treasury/movements. Para reemplazarlo o eliminarlo, usá PUT o DELETE en /api/v1/treasury/movements/{treasury_movement_id}. Estas operaciones requieren treasury:write e Idempotency-Key. El ID editable es treasury_movement_id de la lista; el id de la fila unificada identifica una línea contable. Antes de un PUT, consultá el detalle con GET en esa misma ruta. El detalle y las respuestas de escritura incluyen note, cost_center1_id, cost_center2_id, cost_center3_id, lines y distributions. Cada distribución contiene cost_center1_id y amount_cents en la moneda de la cuenta. Conservá estos campos cuando reconstruyas el reemplazo completo. Omitir la nota, las líneas o las distribuciones las borra; omitir contact_id conserva el contacto. Con lines, enviá los centros de costo en cada línea. No los envíes en la raíz. Para PUT y DELETE, enviá en el cuerpo JSON el updated_at que recibiste en el detalle. En DELETE, el cuerpo contiene solo ese campo. Si falta, la API devuelve 400; si el movimiento cambió desde la lectura, devuelve 409 sin reemplazarlo ni eliminarlo. Consultá el detalle de nuevo y revisá el cambio antes de decidir. En MCP, usá updatedAt con save_treasury_movement cuando enviás id, y con delete_treasury_movement. La cuenta contable predeterminada de un cliente o proveedor requiere treasury:write además del permiso para editar ese contacto. Esto también se aplica a quitarla con null. Si no vas a cambiarla, omití default_account_id. Al reutilizar la misma clave y solicitud, recibís el resultado guardado de esa operación aunque el movimiento se haya editado o eliminado después. Los permisos actuales se verifican en cada reintento. En un egreso USD, el banco sale al valor contable y cada contrapartida se convierte con exchange_rate o con BCRA de la fecha del movimiento. La diferencia se registra en Diferencia de tipo de cambio. Si falta esa cuenta y la diferencia no es cero, recibís 422 sin escrituras. En pesos, exchange_rate devuelve 400. En una edición USD sin cambios de importe, fecha, cuenta ni dirección, omitir exchange_rate conserva la cotización guardada. Enviá exchange_rate: null para volver a BCRA de la fecha del movimiento. En MCP, el campo es exchangeRate. Si cambiás alguno de esos datos de un egreso USD, omitir la cotización resuelve BCRA otra vez. Para conservar su valor, enviá explícitamente la cotización devuelta por el detalle; se registra como manual para los nuevos datos financieros. El detalle expone exchange_rate, exchange_rate_source, exchange_rate_date y exchange_difference_amount, en centavos ARS: positivo para ganancias, negativo para pérdidas y cero si no hay diferencia. Este último campo es null en ingresos y egresos antiguos sin cotización de contrapartida. Al corregir una entrada anterior, cambian el banco y la diferencia, y las contrapartidas del egreso conservan su valor. Recodificar centros de costo conserva la cotización. Editar un egreso antiguo aplica esta regla nueva, sin reprocesar otros históricos. En un egreso USD, si conservás el importe, la fecha, la cuenta y la dirección, una cotización omitida o igual a la guardada conserva su origen y fecha originales. En un ingreso USD, si conservás la cuenta, la fecha y la dirección, una cotización omitida o igual a la guardada conserva también su origen y fecha originales. Una cotización distinta se registra como manual. El detalle rechaza movimientos USD antiguos que no tengan importes nativos y contables completos.

Transferencias de fondos

Una transferencia mueve fondos entre dos identidades compuestas. Siempre enviá balance_type y balance_id tanto en source como en destination: un mismo UUID puede identificar una caja registradora y una caja fuerte distintas. La primera versión admite únicamente dos puntas denominadas en ARS. amount es un entero en centavos. Por ejemplo, 125000 representa ARS 1.250,00. Además, occurred_on es una fecha de negocio argentina YYYY-MM-DD. No envíes currency: la API la comprueba en las dos puntas y devuelve 422 si encuentra USD o una combinación de monedas. La creación confirma un hecho financiero completo en una sola transacción: una transferencia, un efecto negativo en el origen, uno positivo en el destino y un asiento balanceado. No tiene status, actualización, cancelación ni eliminación. La política de tesorería permite que el saldo de origen quede negativo. No existe un error de fondos insuficientes para esta operación.
La respuesta 201 incluye dos accounting_effects, siempre en orden origen y destino. Sus importes tienen signos opuestos y suman cero. Cada treasury_movement_id es el id durable que también aparece en GET /api/v1/treasury/movements. No se exponen cuentas contables ni IDs de las patas internas. Repetir exactamente el mismo cuerpo con la misma Idempotency-Key devuelve el mismo recurso sin duplicar el movimiento de dinero. Reusar la clave con un cuerpo distinto devuelve 409 IDEMPOTENCY_CONFLICT. Una punta inexistente, oculta o de otra organización devuelve 404. Una punta o cuenta vinculada inactiva devuelve 409. Una fecha futura, moneda no soportada o configuración contable faltante devuelve 422. La visibilidad se evalúa sobre ambas puntas. Una integración delegada no puede ver una transferencia si una de ellas queda fuera de sus cajas o cajas fuertes asignadas. Con visibilidad own, además, solo aparecen hechos creados por ese usuario.

Listar y obtener una transferencia

La colección se ordena por occurred_on, created_at e id, en orden descendente. date_from y date_to son inclusivos. Para filtrar por cualquiera de las dos puntas, enviá juntos balance_type y balance_id.
Los elementos de la lista omiten accounting_effects. Usá el detalle cuando necesites seguir los movimientos contables:

Paginación y sincronización

Las cuatro colecciones usan cursor y limit. Guardá next_cursor y repetí la misma consulta mientras has_more sea true. Consultar estos endpoints no produce efectos ni requiere Idempotency-Key. La API no agrega eventos webhook de tesorería. Para una sincronización periódica, consultá saldos, movimientos o transferencias con los filtros de fecha y cursor adecuados.