Firmar un mensaje con una wallet segregada
Crea una prueba de firma: la wallet segregada (custody=cbpay) firma
un sobre estructurado CBPay Signature Proof (anti-phishing) con el estándar
nativo de la red — EIP-191 para ETH/EVM, TIP-191 para TRON. La prueba queda
persistida y es verificable públicamente en verify_url (sin auth).
Requiere OTP (código de un solo uso) cuando la acción sign_message está
protegida en la política de la cuenta. La wallet debe estar custody=cbpay:
una wallet exportada (custody=client) ya no puede firmar (custody_transferred).
El sobre vive 10 minutos; una prueba firmada sigue siendo verificable después
de expirar. Emite el webhook wallet_signature_created y un email de seguridad
al titular de la cuenta.
Errores específicos: invalid_purpose, invalid_statement,
custody_transferred, proof_not_signable, sign_rejected,
nonce_failed, core_unavailable.
Autorizaciones
JWT de sesión (de register/login) o llave de API (pk_...).
X-API-Key: <token> se acepta como header alternativo.
Parámetros de ruta
ID de la wallet segregada.
Cuerpo
Propósito de la prueba (default wallet_ownership). wallet_link no se acepta aquí — usa POST /v1/wallet-links/challenges para vincular una wallet externa.
wallet_ownership, treasury_attestation Declaración opcional que la wallet atestigua (máx. 140 runas).
Respuesta
Prueba de firma creada y firmada.
Prueba criptográfica de que una wallet firmó un mensaje estructurado CBPay (EIP-191 ETH/EVM, TIP-191 TRON). Verificable públicamente vía verify_url. El envelope es el mensaje anti-phishing exacto que firmó la wallet (líneas Domain / Purpose / Wallet / Nonce / Issued / Expires / Statement; la línea Account solo aparece para proofs wallet_link). Los proofs viven 10 minutos (expires_at); un proof firmado sigue siendo verificable públicamente tras expirar.