fiat_to_crypto. Tú eliges cómo se paga cada orden: con fiat que ya tienes en el saldo Pending Fund del comercio, o mediante un pagador que envía una transferencia bancaria para esa orden en particular. Cuando la orden se completa, la cripto se abona a la billetera de VelaFi del comercio. Desde ahí la conservas, la retiras o haces que se envíe automáticamente a una dirección externa.
Para la referencia completa de campos, consulta la guía On-ramp (fiat a cripto) y Crear una orden de on-ramp.
Elige un modelo de fondeo
Cómo funciona
Antes de empezar
- Acceso a la API. Una clave de API, las IP de tus servidores en la lista blanca y un token de negocio para el header
X-BH-TOKEN. Consulta Autenticación. - Un comercio verificado. El
merchantIdde la orden debe ser un comercio de tu cuenta que haya pasado la verificación. Consulta Comercios. - Una cuenta de moneda activada. El comercio necesita una cuenta activa para la moneda fiat. Consulta Activar la cuenta de un comercio.
- Webhooks registrados. Registra
ORDER_WEBHOOK, además deFUNDING_WEBHOOKsi prefondeas yCRYPTO_WITHDRAW_WEBHOOKsi retiras. Consulta Webhooks. Tu endpoint debe devolver HTTP2xxcon el cuerpo{"callbackStatus":"SUCCESS"}; de lo contrario, la entrega cuenta como fallida. Consulta Entrega y reintentos.
Construye el flujo
1
Solo prefondeado: fondea el saldo Pending Fund
Obtén los datos de depósito de la cuenta de moneda del comercio con Obtener la cuenta Pending Fund (
GET /v2/merchant/addfunds) y envía el fiat ahí. Cada depósito abonado dispara un evento FUNDING_WEBHOOK con type DEPOSIT y status 2.Revisa el saldo actual con Listar cuentas de comercio (balance) antes de crear órdenes grandes.Si ya cobras pagos en la cuenta de moneda del comercio, esos depósitos forman este saldo. Consulta Cobrar pagos locales con cuentas virtuales.2
Opcional: fija el tipo de cambio con una cotización
Llama a Obtener una cotización cripto/fiat con Un
from igual al fiat, to igual a la cripto y createQuoteId=true. El price está expresado en fiat por 1 unidad de cripto.quoteId es válido durante 10 segundos en producción (300 segundos en el sandbox), es de un solo uso y está vinculado al country, el fiat y la cripto para los que se emitió. Solicítalo justo antes de crear la orden. Sin un quoteId, la orden se cotiza al momento de crearse.3
Crea la orden
Llama a Si la solicitud excede el tiempo de espera, busca la orden por
POST /v2/order/fiat_to_crypto. Envía siempre un clientId único (hasta 40 caracteres) para que puedas reintentar de forma segura y encontrar la orden después.- Prefondeado
- Pago por orden
Establece VelaFi revisa el saldo del comercio en esa moneda cuando crea la orden. Si el saldo no cubre el monto de la orden, la solicitud se rechaza con un error de saldo insuficiente y no se crea ninguna orden. Si el saldo la cubre, la orden se paga desde el saldo justo después de crearse y pasa a
paymentId en 70 (VelaFi Pending Fund).60 (Completada), a menos que primero requiera revisión o documentos (10, 11 o 31). El cargo aparece en Registros de fondeo como un registro BUY_CRYPTO.Response
clientId antes de reintentar. Consulta Idempotencia y reintentos.4
Solo pago por orden: muestra las instrucciones de pago
Llama a Obtener una orden con
orderType=fiat_to_crypto y muestra al pagador el contenido de paymentInfo (por ejemplo, la CLABE para SPEI) y el fiatAmount exacto.Cuando se abona la transferencia del pagador, VelaFi la aplica a las órdenes abiertas de la misma cuenta de moneda. Un depósito que es exactamente igual al monto de una orden se aplica primero a esa orden. De lo contrario, los depósitos se aplican a la orden abierta más antigua. Una orden con depositAlias solo se paga con depósitos a esa cuenta virtual. Una orden sin él se puede pagar con cualquier depósito en la cuenta de moneda, incluido el fiat que ya está en el saldo Pending Fund.5
Da seguimiento a la orden hasta que se complete
Espera los eventos
ORDER_WEBHOOK o consulta periódicamente GET /v2/order/detail?orderType=fiat_to_crypto&clientId={clientId}. La orden está terminada cuando orderStatus es 60, y falló cuando es 70, 80 u 81. Cuando consultas, una orden rechazada en revisión se muestra como 80 y una rechazada en revisión de riesgos como 81; el webhook envía ambas como 70. Consulta Estados de las órdenes. La cripto (cryptoAmount) queda entonces en la billetera del comercio. Revísala con Obtener el saldo cripto.6
Opcional: envía la cripto fuera de la billetera
Tienes dos opciones:
- Retiro automático por orden. Si VelaFi habilitó el retiro automático de on-ramp para tu cuenta, agrega
networkyaddressa la solicitud de creación. Después de que la orden se completa, VelaFi retiracryptoAmounta esa dirección y envíaON_RAMP_WITHDRAW_WEBHOOKcuando el retiro es exitoso. En producción,networkdebe serPOLoSPL20. Envía ambos campos o ninguno. Las cuentas sin esta función se rechazan con “You are currently not a user of the onRamp automatic withdrawal service.” Consulta Evento de retiro de on-ramp. - Retírala tú mismo. Agrega el destino a tu lista blanca de retiros y después llama a Crear un retiro cripto (
POST /v2/assets/withdraw) con tu propioclientIdúnico. Usa Obtener la cuota de retiro para conocer los valores válidos dechainTypey los mínimos.
CRYPTO_WITHDRAW_WEBHOOK cuando llegan a un estado final. En un retiro automático, su clientId es el orderId del on-ramp.Webhooks que debes manejar
Los eventos pueden llegar más de una vez y fuera de orden, y se pueden omitir estados intermedios. Elimina duplicados y lee la orden con
GET /v2/order/detail cuando un evento no coincida con el estado que tienes. Consulta Entrega y reintentos.
Maneja las fallas
La ventana de pago
Una orden de pago por orden espera en40 solo por un tiempo limitado. VelaFi define la ventana para tu cuenta. No se devuelve en el detalle de la orden, así que pide el valor a tu contacto en VelaFi y muestra al pagador una fecha límite basada en createTime. Cuando pasa la ventana sin un pago completo, la orden se cancela. Se reporta como orderStatus 70 en el detalle de la orden y en ORDER_WEBHOOK. Una orden cancelada no se puede reabrir.
Si el pagador paga después de que la orden fue cancelada, la transferencia igual se abona al saldo Pending Fund del comercio (recibes un FUNDING_WEBHOOK DEPOSIT). No se aplica a la orden cancelada. Crea una nueva orden por ese monto, que entonces se paga desde el saldo, o dispersa el dinero con Reclamar fondos Pending Fund.
Concilia
- Órdenes: Obtener una orden por
orderIdoclientIdes la fuente de verdad de cada orden:orderStatus,fiatAmount,fiatFee,cryptoAmount,orderPrice,failCodeyfailReason. Usa Listar órdenes con un rango de tiempo para los totales diarios. También lista órdenes que no se crearon mediante la API. - Saldo fiat: Listar registros de fondeo muestra cada
DEPOSITyBUY_CRYPTO, para ambos modelos de fondeo. Listar flujos fiat da el libro contable línea por línea con saldos acumulados. - Salida de cripto: Listar retiros cripto por
clientId, hasta questatussea6(exitoso),7(fallido) o9(cancelado).
Prueba en el sandbox
- Usa
https://api-test.velafi.com. Los webhooks no se envían en el sandbox, así que consulta periódicamenteGET /v2/order/detail. - Fondea el saldo de un comercio de prueba, o paga una orden de pago por orden, con el simulador de depósitos fiat (
depositAliasapunta a una cuenta virtual). Consulta Herramientas de prueba del sandbox. - En el sandbox, un
quoteIddura 300 segundos, y el retiro automático aceptaPOLoTSPL20comonetwork. - Los simuladores solo producen depósitos exitosos. No puedes simular un pago devuelto. Prueba el camino de expiración creando una orden de pago por orden y no pagándola.
Lista de verificación para salir a producción
- Cada solicitud de creación envía un
clientIdúnico, y los timeouts se resuelven buscando elclientIdantes de reintentar. - Los flujos prefondeados revisan el saldo y manejan el rechazo por saldo insuficiente sin reintentar la misma solicitud en un ciclo.
- Los flujos de pago por orden muestran
paymentInfo, el monto exacto y una fecha límite, y crean una nueva orden después de70. - Cada pagador tiene una cuenta virtual (
depositAlias) si usas pago por orden para varios pagadores en una misma cuenta de moneda. - El endpoint de
ORDER_WEBHOOKverifica la firma, devuelve{"callbackStatus":"SUCCESS"}con HTTP2xxy elimina duplicados sobreorderId+orderStatus. - Un proceso programado concilia las órdenes abiertas, los registros de fondeo y los retiros contra la API.
- Los destinos de retiro están en la lista blanca, o el retiro automático está habilitado y probado con
networkyaddress.