Cada transacción aprobada genera un movimiento en tu cuenta virtual: el registro de cuánto entró, qué se descontó por comisiones, fees, IVA y retenciones, cuánto queda liquidado y desde cuándo puedes disponer de ese dinero.
Es lo que necesitas para conciliar: la transacción te dice qué cobraste, el movimiento te dice qué recibes.
El ambiente (Pruebas o Producción) sale del token que uses
(api-access:test o api-access:production); no se envía como parámetro. Ver
Autenticación.
{info} Solo aparecen movimientos de transacciones liquidadas por Efipay como agregador. Si operas con tu propio código de comercio ante la red, el dinero no pasa por tu cuenta virtual y no verás movimientos.
Descripción: Devuelve los movimientos de tu cuenta virtual, paginados y ordenados del más reciente al más antiguo.
GET /api/v1/virtual-account/movements
| Nombre del campo | Descripción | Reglas |
|---|---|---|
| start_date | Inicio del rango, sobre la fecha de creación del movimiento | ['nullable', 'date_format:Y-m-d', 'before_or_equal:finish_date'] |
| finish_date | Fin del rango. No puede ser futura | ['nullable', 'date_format:Y-m-d', 'before_or_equal:today', 'after_or_equal:start_date'] |
| offices | Ids de las sucursales a consultar. Si lo omites, se consultan todas tus sucursales | ['nullable', 'array'] |
| offices.* | Cada id debe ser de una de tus sucursales | ['required', 'exists:offices,id'] |
| availability | all todas, available solo el dinero ya disponible, to_release solo el que falta por liberar |
['nullable', 'in:all,available,to_release'] |
| transaction_id | Filtra por el transaction_id exacto de la transacción asociada |
['nullable', 'string'] |
| per_page | Movimientos por página. Por defecto 15 |
['nullable', 'integer', 'min:1', 'max:100'] |
curl -X GET \
'/api/v1/virtual-account/movements?start_date=2026-08-01&finish_date=2026-08-31&availability=available&per_page=50' \
-H 'Authorization: Bearer ACCESS_TOKEN' \
-H 'Accept: application/json'
{success} Respuesta satisfactoria code:
200 { "data": [ { "environment": "Producción", "concept": "Venta con tarjeta de crédito", "transaction_id": 20481, "authorization_number": "163427", "transaction_amount": 120000, "subtotal": 116154.4, "liquidated_amount": 115690.78, "commission": 3230.4, "fee": 0, "gravamen": 463.62, "iva": 0, "iva_commission": 613.78, "iva_fee": 0, "rete_iva": 0, "rete_ica": 0, "rete_fte": 0, "transaction_date": "2026-08-14T15:22:41.000000Z", "available_at": "2026-08-16T00:00:00.000000Z", "days_difference": "hace 2 semanas", "plan_detail_feature": { "commission": 2.69, "min_commission": 900, "fee": 0, "gravamen": 0.4 } } ], "links": { "first": "https://sag-qa.efipay.co/api/v1/virtual-account/movements?page=1", "last": "https://sag-qa.efipay.co/api/v1/virtual-account/movements?page=3", "prev": null, "next": "https://sag-qa.efipay.co/api/v1/virtual-account/movements?page=2" }, "meta": { "current_page": 1, "from": 1, "last_page": 3, "per_page": 50, "to": 50, "total": 118 } }
{danger} Rango de fechas inválido code:
422 { "message": "El campo finish_date debe ser una fecha anterior o igual a hoy.", "errors": { "finish_date": [ "El campo finish_date debe ser una fecha anterior o igual a hoy." ] } }
Descripción: Devuelve el movimiento de una transacción concreta, por su
transaction_id. La respuesta es el objeto plano, sin el sobre data de los
listados.
GET /api/v1/virtual-account/movements/{transaction_id}
| Nombre del campo | Descripción | Reglas |
|---|---|---|
| transaction_id | El transaction_id (consecutivo) de la transacción asociada, en la ruta |
['required', 'string'] |
curl -X GET \
'/api/v1/virtual-account/movements/20481' \
-H 'Authorization: Bearer ACCESS_TOKEN' \
-H 'Accept: application/json'
{success} Respuesta satisfactoria code:
200 { "environment": "Producción", "concept": "Venta con tarjeta de crédito", "transaction_id": 20481, "authorization_number": "163427", "transaction_amount": 120000, "subtotal": 116154.4, "liquidated_amount": 115690.78, "commission": 3230.4, "fee": 0, "gravamen": 463.62, "iva": 0, "iva_commission": 613.78, "iva_fee": 0, "rete_iva": 0, "rete_ica": 0, "rete_fte": 0, "transaction_date": "2026-08-14T15:22:41.000000Z", "available_at": "2026-08-16T00:00:00.000000Z", "days_difference": "hace 2 semanas", "plan_detail_feature": { "commission": 2.69, "min_commission": 900, "fee": 0, "gravamen": 0.4 } }
{danger} No existe, no es tuya, o es del otro ambiente code:
404
{warning} Un
404aquí casi siempre significa una de tres cosas: estás consultando con el token del otro ambiente, la transacción todavía no está aprobada, o no se liquidó por agregador. No significa que la transacción no exista.
Todos los importes van en pesos colombianos.
| Campo | Qué es |
|---|---|
| environment | Producción o Pruebas |
| concept | Descripción del movimiento |
| transaction_id | El consecutivo de la transacción asociada, o el id del ajuste |
| authorization_number | Código de autorización de la red. Puede ser null |
| transaction_amount | Lo que pagó tu cliente |
| commission | Comisión de Efipay |
| iva_commission | IVA sobre esa comisión |
| fee | Fee fijo por transacción, si tu plan lo tiene |
| iva_fee | IVA sobre el fee |
| iva | IVA de la transacción misma |
| subtotal | transaction_amount menos comisiones, fees e IVAs |
| gravamen | 4×1000 sobre el subtotal |
| liquidated_amount | Lo que efectivamente recibes: subtotal menos gravamen |
| rete_iva, rete_ica, rete_fte | Retenciones, cuando aplican a tu comercio |
| transaction_date | Fecha de compensación; si aún no compensa, la de creación |
| available_at | Desde cuándo puedes disponer del dinero. null si aún no se define |
| days_difference | Lectura humana de available_at ("en 2 días", "hace 2 semanas"). null si no hay fecha |
| plan_detail_feature | Las tasas de tu plan que se aplicaron. Puede ser null |
Campos de plan_detail_feature
| Campo | Qué es |
|---|---|
| commission | Porcentaje de comisión de tu plan |
| min_commission | Comisión mínima por transacción |
| fee | Fee fijo configurado |
| gravamen | Porcentaje de gravamen configurado |
{info} Concilia con
liquidated_amount.transaction_amountes lo que pagó tu cliente, no lo que entra a tu cuenta.