USDT, USDC, BTC,
GOLD) y siempre entre saldos de la misma moneda: el asset que envías
es el asset que recibe el destino, sin conversión.
Funcionan entre cualquier combinación de cuentas:
| Origen | Destino | Comisión |
|---|---|---|
| Persona | Persona | 0 |
| Persona | Empresa | 0 |
| Empresa | Persona | 0 |
| Empresa | Empresa | 0 |
Crear una transferencia
El destino se identifica porto_account_id, to_email, to_phone
(teléfono verificado) o to_contact_id (un
contacto de tu libreta):
asset es opcional y por defecto USDT; acepta USDT, USDC, BTC o
GOLD y el destino recibe en esa misma moneda.
Respuesta 201 — la transferencia es síncrona e inmediata:
idempotency_key — 200 con la transferencia
original:
transfer_received y ambos ven
el movimiento en su historial (transfer_out / transfer_in).
Cada transferencia guarda al destinatario como contacto
automáticamente (envía
"save_contact": false para no guardarlo). Por
seguridad, to_phone solo resuelve cuentas con el teléfono verificado
por OTP; si más de una cuenta comparte el número responde
422 recipient_ambiguous.Consultar transferencias
Lista las transferencias de tu cuenta (enviadas y recibidas), con paginación y filtros de fecha:direction (sent o received) desde tu perspectiva.
Reglas
- Solo entre cuentas CBPay activas; las cuentas internas del sistema no pueden recibir.
- Siempre misma moneda en origen y destino: no hay conversión entre
saldos (
USDT→USDT,GOLD→GOLD, …). - No puedes transferirte a ti mismo (
400 self_transfer). - Requiere
idempotency_key(body o headerIdempotency-Key); el replay devuelve200conidempotency_hit: true. amountacepta hasta los decimales de la moneda: 6 paraUSDT/USDC/GOLD, 8 paraBTC.
Errores
| HTTP | error | Causa |
|---|---|---|
| 400 | recipient_required | Falta to_account_id, to_email, to_phone y to_contact_id |
| 400 | invalid_amount | Monto inválido, demasiados decimales o asset no soportado |
| 400 | invalid_phone | to_phone no se pudo normalizar a E.164 |
| 400 | self_transfer | Origen y destino son la misma cuenta |
| 402 | insufficient_funds | Saldo disponible insuficiente en esa moneda |
| 404 | recipient_not_found | El email/ID no corresponde a una cuenta CBPay, o ningún teléfono verificado coincide |
| 422 | recipient_ambiguous | Más de una cuenta comparte ese teléfono (usa to_account_id o to_email) |
| 422 | contact_not_linked | El contacto no tiene cuenta CBPay asociada |
| 422 | recipient_unavailable | La cuenta destino está bloqueada/cerrada |