Acepta USDT y USDC
Recibe pagos en stablecoins en el checkout alojado o con una dirección de depósito permanente por cliente, y acredita a tu cliente una vez por pago.
Qué vas a hacer
Los compradores pagan 1 USDT o 1 USDC por dólar. La moneda llega a tu saldo USDT o USDC (cada uno es aparte), neto de tu comisión de stablecoins, que pagas tú: el comprador no ve comisión. Elige el checkout alojado para pedidos, o una dirección de depósito para recargas.
- USDT (y USDC, por separado) habilitado en tu cuenta por VEXPay.
- Un endpoint de webhook suscrito a
payment.completedypayment.canceled.
Pasos: checkout alojado
- Crea una sesión
POST /v1/checkout/sessionsconamountUsdymethodsque incluyausdty/ousdc(o sinmethodspara ofrecer todo). - El comprador elige moneda y red
El checkout muestra las redes habilitadas para esa moneda. Los pagos en TON necesitan el tag/memo que se muestra.
- El comprador envía la moneda
Una página de pago muestra la dirección y el monto exacto. La página de estado pasa de iniciado a confirmación de red y a completado; el comprador puede cerrarla.
- Entrega desde el webhook
payment.completedtraecurrency,amount,fee,network,txHashesy la referencia de tucheckoutSession.
Pasos: dirección de depósito por cliente
- Lista las redes
GET /v1/crypto/networks?currency=USDT(oUSDC) muestra las redes habilitadas para ti. - Obtén la dirección
POST /v1/crypto/deposit-addressesconcustomerRef(el id de tu cliente: 1–128 caracteres de letras, dígitos y_ . : @ -),networky opcionalmentecurrency. Llamarlo de nuevo para el mismo cliente, moneda y red devuelve la misma dirección. - Muéstrasela a tu cliente
Muestra la
address, y eltagsiempre quetagRequiredsea true. El cliente puede enviar cualquier monto, cuando quiera. - Acredita a tu cliente
Cada depósito dispara
payment.completedconcustomerRef. Acreditaamount − feeuna sola vez porpaymentId.
curl --request POST "${API_URL}/v1/crypto/deposit-addresses" \
--header "content-type: application/json" \
--header "x-api-key: ${VEXPAY_API_KEY}" \
--data '{ "customerRef": "user_123", "network": "TRC20", "currency": "USDT" }'Comprueba que funcionó
- En Test, usa los botones de prueba de la página de pago para confirmar, cancelar o enviar de menos; cada resultado envía su webhook con
livemode: false. - Una dirección de depósito de Test todavía no puede recibir un depósito simulado. Prueba tu código de acreditación con el checkout alojado, que envía el mismo
payment.completed. GET /v1/crypto/balancesmuestra el crédito comoheldhastanextReleaseAten Live, y luego comoavailable.
Si algo sale mal
| Síntoma | Causa probable | Qué hacer |
|---|---|---|
403 method_not_allowed | USDT o USDC no habilitado en tu cuenta | Pide a VEXPay que lo habilite. |
400 unsupported_network | Esa red no está habilitada para esa moneda | Elige una de GET /v1/crypto/networks. |
payment.completed por más del monto | El comprador envió de más | Todo lo que llegó se acredita, neto de la comisión, y el checkout se marca como pagado. Para devolver el excedente, pide al comprador una dirección y envíalo con POST /v1/crypto/payouts (aplica la comisión de payout). Nunca lo devuelvas a la dirección de origen: suele ser un exchange que no lo acreditará. |
payment.completed con underpaid: true | El comprador envió menos del monto | Lo que llegó se acredita, neto de la comisión; el checkout no se marca como pagado. Resuelve la diferencia con el comprador. |
| Depósito en TON sin asociar al cliente | Falta el tag/memo | Muestra siempre tag cuando tagRequired es true. Contacta al soporte de VEXPay con el hash de la transacción. |
| Llegó un depósito pero no el webhook | Una moneda o red que no está habilitada para ti | Contacta al soporte de VEXPay con el hash de la transacción. |
502/503 processor_unavailable | Falla temporal | Reintenta más tarde; las otras monedas siguen funcionando en el checkout. |
Comisiones: Precios. Sacar las monedas: Retirar tu saldo. Relacionado: USDT y USDC