Crear una transferencia interna
Mueve saldo entre dos cuentas CBPay, de forma atómica y siempre gratuita — funciona cualquier combinación: persona a persona, persona a empresa, empresa a persona o empresa a empresa. Funciona con los cuatro saldos virtuales (USDT default, USDC, BTC, GOLD) y siempre entre saldos de la misma moneda (sin conversión). El destino se resuelve por to_account_id, to_email, to_phone (solo teléfonos verificados por OTP) o to_contact_id. Cada transferencia guarda al destinatario como contacto automáticamente (desactívalo con save_contact: false). Los suscriptores de webhooks del receptor reciben transfer_received.
Autorizaciones
JWT de sesión (de register/login) o llave de API (pk_...).
X-API-Key: <token> se acepta como header alternativo.
Encabezados
Alternativa al campo idempotency_key del body.
Cuerpo
String decimal positivo, hasta los decimales de la moneda (6 para USDT/USDC/GOLD, 8 para BTC).
"10.500000"
Teléfono E.164 de la cuenta destino. Solo resuelven cuentas con el teléfono verificado por OTP (si no, 404 recipient_not_found; 422 recipient_ambiguous si más de una cuenta comparte el número).
Envía directo a un contacto de tu libreta (usa su cuenta CBPay enlazada, o su teléfono verificado).
Token del QR de perfil de la cuenta destino (escaneado desde su QR CBPay). También acepta el payload extendido del QR de checkout (cbpay:pay?to=…&checkout=…) — el checkout token embebido se honra automáticamente.
Token opcional de un link de cobro universal para pagarlo directo. El destino se fuerza a la cuenta del link y el monto debe cubrir el due cotizado server-side en el asset elegido (422 checkout_amount_mismatch con el due actualizado si no). Al completar, el link se liquida y auto-convierte a su settlement_asset.
Moneda del saldo a mover; el destino recibe en esta misma moneda.
USDT, USDC, BTC, GOLD El destino se guarda como contacto automáticamente; envía false para no guardarlo.