FUNDING_WEBHOOK que indica la cuenta virtual a la que llegó el dinero. Desde ese saldo puedes dispersar pagos, mover fondos a otro comercio o comprar cripto.
Cómo funciona
Una cuenta o una por pagador
Una cuenta virtual sirve solo para atribución. No tiene saldo propio: cada depósito, en cualquier cuenta virtual, se abona al saldo único de la cuenta de moneda del comercio. Lleva los saldos por pagador en tu propio libro contable, indexados por
depositAlias.Antes de empezar
- Acceso a la API. Una clave de API, la IP de tu servidor en la lista blanca y un token de negocio en el header
X-BH-TOKEN. Consulta Autenticación. - Un comercio verificado. Consulta Crear un comercio.
- Una cuenta de moneda activa para la moneda y el canal en los que quieres cobrar (status
2en Listar cuentas de comercio). Consulta Activar la cuenta de un comercio. - Un endpoint de
FUNDING_WEBHOOKregistrado y que devuelva la confirmación requerida. Consulta Webhooks y Configuración de webhooks.
Canales que admiten cuentas virtuales
El comercio ya debe tener una cuenta de moneda activa en ese canal. Una cuenta de moneda en un canal que no admite cuentas virtuales devuelve
-5084 (esta moneda no admite múltiples cuentas virtuales). default, en cualquier combinación de mayúsculas y minúsculas, está reservado.
Paso a paso
1
Crea una cuenta virtual para cada pagador
Llama a
POST /v2/merchant/virtual/accounts con el comercio, la moneda, el canal y un alias que tú elijas. Usa un ID estable de tu sistema, como tu ID de cliente, para que puedas relacionar los depósitos sin una tabla de búsqueda. El alias es permanente.cURL
Response
status es 1 (pendiente) mientras el canal configura la cuenta, 2 cuando está activa y 3 si falló. Las cuentas ARS (63) devuelven 2 de inmediato. Enviar el mismo alias otra vez mientras está pendiente devuelve -5085; una vez que está activa, -5086.2
Obtén los datos bancarios del alias
Consulta periódicamente Guarda los datos asociados al pagador. Los links de imágenes QR en
GET /v2/merchant/virtual/addfunds con depositAlias hasta que el status del registro sea 2 y después lee su fieldList. Las claves dependen del canal y se listan en Claves de fieldList por método de pago.cURL
fieldList expiran una hora después de la respuesta, así que obtén uno nuevo cada vez que lo vuelvas a mostrar. Para fondear la cuenta principal del comercio, llama a GET /v2/merchant/addfunds.3
Muestra al pagador qué debe hacer
Muestra al pagador los datos de su alias. Lo que hace el pagador depende del riel:
4
Maneja el webhook de depósito
Cuando se abona el depósito, VelaFi crea un registro de fondeo de tipo
DEPOSIT con status 2 y envía un FUNDING_WEBHOOK. Verifica el header signature, guarda el evento y devuelve HTTP 200 con {"callbackStatus":"SUCCESS"}. Abona al pagador identificado por depositAlias en tu libro contable. Consulta Webhooks que debes manejar.5
Revisa el saldo
Lee el saldo del comercio con
GET /v2/merchant/accounts: el balance del registro de esa moneda y ese canal. Este es el monto disponible para pagos, transferencias y órdenes de on-ramp.cURL
Webhooks que debes manejar
Suscríbete aFUNDING_WEBHOOK. Un solo webhook recibe los eventos de todos los comercios de tu cuenta. Un evento de depósito se ve así (todos los valores son strings):
FUNDING_WEBHOOK (DEPOSIT)
La lista completa de campos está en Evento de fondeo.
Maneja las fallas
- Eventos duplicados o fuera de orden. El mismo evento puede llegar más de una vez, y un evento cuyo status cambió antes de la entrega se descarta. Haz que tu handler sea idempotente sobre
eventType+txId+status, y lee el registro con Listar registros de fondeo cuando necesites su estado más reciente. - Webhooks perdidos. Si tu endpoint estaba caído o respondió de forma incorrecta, no se reenvía nada. Ejecuta la conciliación de abajo de forma programada para que no se pierda ningún depósito.
- Depósito sin
depositAlias. Los pagos a los datos de la cuenta principal del comercio, o los rieles que no reportan el alias, no tienen una cuenta virtual con la cual relacionarse. Retenlos para revisión manual usando los campos del pagador ybankWebhookInfo. - Falla la creación de la cuenta virtual.
status3significa que el canal rechazó la cuenta.-5079significa que la cuenta no está habilitada para esa moneda y ese canal, y-5071significa que la cuenta de moneda del comercio en ese canal no está activa. Revisa la cuenta del comercio antes de reintentar. - Alias de COP rechazado. Para
68y69, el alias debe tener de 6 a 21 letras mayúsculas o dígitos.
Concilia
Los registros de fondeo son la fuente de verdad de lo que se abonó al saldo:GET /v2/merchant/funding/recordscontype=DEPOSIT, unfiaty una ventanastartTime/endTime(la ventana se aplica a la hora de finalización). Compara cada registro con status2contra los webhooks que guardaste y procesa los que te hayan faltado. En los depósitos,webhookInfocontiene los mismos detalles del proveedor quebankWebhookInfo, incluidodepositAlias.GET /v2/merchant/fiat/flowspara el historial del saldo línea por línea: cada línea tiene el cambio (changed), el saldo acumulado (total) y eltxIdrelacionado. Úsalo para comprobar que el saldo en Listar cuentas de comercio es igual a la suma de tus movimientos.
pageSize), y los flujos fiat hasta 1,000 por página. Recorre las páginas con currentPage.
Prueba en el sandbox
Usahttps://api-test.velafi.com con credenciales de sandbox. Ahí puedes crear y listar cuentas virtuales, y abonar depósitos de prueba con el simulador de depósitos fiat (POST /v2/platform/test/deposit). Envía depositAlias para mandar el depósito a una cuenta virtual.
- Los webhooks no se disparan en el sandbox. Prueba tu handler enviándole tú mismo payloads de ejemplo, y revisa el resultado de cada depósito simulado con Listar registros de fondeo.
- El simulador solo produce depósitos exitosos. No puede producir un depósito fallido o devuelto.
Lista de verificación para salir a producción
- El endpoint de
FUNDING_WEBHOOKverifica la firma y devuelve HTTP200con{"callbackStatus":"SUCCESS"}rápidamente, muy por debajo del timeout de 60 segundos. - El handler es idempotente sobre
eventType+txId+statuse ignora los eventos que ya procesó. - Cada pagador tiene su propia cuenta virtual, y el alias corresponde a un solo cliente en tu sistema.
- Tu libro contable lleva los saldos por pagador; no esperas que VelaFi mantenga un saldo por cuenta virtual.
- Los depósitos sin
depositAliasvan a una cola de revisión. - Un proceso programado compara los registros de fondeo (
type=DEPOSIT) con los webhooks guardados y procesa los faltantes. - Los códigos QR y los links de pago se obtienen de nuevo antes de mostrarse.