Toda prueba expira 10 minutos después de emitida (
expires_at). Una
prueba atestigua un momento en el tiempo; si una contraparte necesita una
fresca, crea una nueva firma.El sobre anti-phishing
CBPay jamás firma un mensaje libre. Ambos flujos construyen el mismo sobre estructurado, así quien firma siempre ve qué se atestigua, qué wallet firma y hasta cuándo es válido:wallet_link agrega una línea Account: con tu id de cuenta
enmascarado. Una firma cuyo sobre está expirado, aún no es válido o está
ligado a otra wallet se rechaza.
1. Firma server-side (wallet segregada)
Firma con una wallet segregada custodiada por CBPay (custody: cbpay). Como este flujo produce una firma con una llave
custodiada, exige KYC aprobado y un desafío OTP.
1
Crea el desafío OTP
Pide un código de un solo uso para la acción
sign_message y verifícalo
para obtener un X-OTP-Token (ver OTP).2
Solicita la firma
purpose es wallet_ownership o treasury_attestation. statement es una
línea de texto libre opcional (máx. 140 runas) embebida en el sobre.201
3
Comparte el link público
Envía
verify_url a la contraparte. Lo abre sin credenciales y ve la
prueba, su estado y la firma.wallet_signature_created.
Listar, detalle y revocar
2. Vincular una wallet externa (MetaMask / TronLink)
Para probar la titularidad de una wallet cuyas llaves tienes tú (no custodiada por CBPay), completa un challenge firmado:1
Crea el challenge
201
2
Firma el sobre en la wallet
Muestra el texto de
envelope al titular y pídele firmarlo exactamente
como se muestra con la wallet de address (MetaMask personal_sign
para eth, TronLink para tron). El challenge expira en 10 minutos.3
Envía la firma
200
purpose: wallet_link) y
dispara el webhook wallet_linked. Listar y revocar vínculos:
3. Verificación pública
Cualquiera con el link puede verificar una prueba — sin cuenta, sin token:200
valid es true solo cuando la prueba está firmada, no revocada, no expirada
y la firma sigue calzando con el sobre (verified_live re-chequea la
criptografía en cada llamada). Un código desconocido o mal formado devuelve
404 not_found.
Estados
Errores
Webhooks
Suscríbete a estos eventos (ver Webhooks):wallet_signature_created
wallet_linked
FAQ
¿Una prueba de firma mueve fondos o cuesta gas?
¿Una prueba de firma mueve fondos o cuesta gas?
No. Firmar un mensaje es puramente criptográfico: sin transacción
on-chain, sin fee de red, sin cambio de saldo.
¿Cuánto tiempo es válida una prueba?
¿Cuánto tiempo es válida una prueba?
10 minutos desde
issued_at. Después el link público muestra la prueba
como expirada. Crea una nueva firma cuando se necesite una atestación
fresca.¿Puedo revocar una prueba?
¿Puedo revocar una prueba?
Sí —
POST /v1/signature-proofs/{proofID}/revoke. El link público sigue
funcionando y reporta status: revoked, así las verificaciones pasadas
siguen siendo auditables.¿Qué wallets pueden firmar en el flujo wallet-link?
¿Qué wallets pueden firmar en el flujo wallet-link?
Cualquier wallet que soporte
personal_sign en Ethereum (EIP-191) o
firma de mensajes en TRON (TIP-191) — MetaMask, TronLink y wallets
compatibles.¿Por qué se rechazó mi statement?
¿Por qué se rechazó mi statement?
El sobre acepta hasta 140 runas de statement. Requests sobre 280
caracteres fallan con
invalid_statement; entre 141 y 280 el sobre los
rechaza con sign_rejected.