In a nutshell
The Blockradar Signing API lets you cryptographically sign plain text messages and structured data (typed data) using your wallet’s private keys. Signatures prove wallet ownership to third-party services without moving funds or paying network fees (gas).
The Blockradar Signing API lets you cryptographically sign plain text messages and structured data (typed data) using your wallet’s private keys. Signatures prove wallet ownership to third-party services without moving funds or paying network fees (gas).
Prerequisites
Before using the Signing API, ensure you have:API Key
Get your API key from the Blockradar Dashboard. Navigate to Developers to generate one.
Wallet Created
Create a master wallet from the Blockradar Dashboard. Navigate to Wallets and create one for your target blockchain. You’ll need the
walletId for signing operations.How It Works
The Signing API produces a cryptographic signature that proves you control a specific wallet address. The signed output can be verified by any third party without accessing your private keys.Message Signing
Sign plain text messages to prove wallet ownership. Works on all supported blockchains: EVM, Tron, and Solana.
Typed Data Signing
Sign structured data following the EIP-712 standard. Used for gasless approvals (EIP-2612 Permit) and authorized transfers (EIP-3009). EVM-only.
Common use cases
- Third-party provider registration — Prove you own an address when onboarding with services like Iron, Circle, or other DeFi protocols
- Gasless token approvals — Sign EIP-2612 Permit messages to authorize token spending without an on-chain transaction
- Authorized transfers — Sign EIP-3009 TransferWithAuthorization messages for delegated transfers
- Off-chain attestations — Create verifiable proofs of intent or agreement tied to a wallet address
Master Wallet vs Child Address
The Signing API is available at two levels:Master Wallet
Sign using the master wallet’s keys. Ideal for treasury-level operations and provider integrations.
Child Address
Sign using a specific child address’s keys. Use when the third party requires a signature from a deposit address.
Endpoints
| Operation | Master Wallet | Child Address |
|---|---|---|
| Sign Message | POST /v1/wallets/{walletId}/signing/message | POST /v1/wallets/{walletId}/addresses/{addressId}/signing/message |
| Sign Typed Data | POST /v1/wallets/{walletId}/signing/typed-data | POST /v1/wallets/{walletId}/addresses/{addressId}/signing/typed-data |
Message Signing
Sign a plain text message with your wallet’s private key. The API signs the message, verifies the signature matches the wallet address, and returns both the signature and a transaction record.Supported Blockchains
| Blockchain | Signing Standard | Signature Format |
|---|---|---|
| EVM (Ethereum, Polygon, BSC, Base, Arbitrum, Optimism, Celo) | EIP-191 (personal_sign) | Hex-encoded with r, s, v components |
| Tron | TronWeb signMessageV2 | Hex-encoded string |
| Solana | Ed25519 | Base58-encoded string |
Request Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
message | string | Yes | The plain text message to sign. Maximum 4,096 characters. |
reference | string | No | Your internal tracking ID. Use for idempotency — duplicate references are rejected. |
metadata | object | No | Custom key-value pairs stored with the transaction record. |
Message Signing Example
EVM Response
Tron / Solana Response
For Tron and Solana, thesignedTransaction object contains only the signature field (no r, s, v components):
Response Fields
| Field | Description |
|---|---|
id | Unique transaction ID for the signing record |
hash | The cryptographic signature. For EVM: hex string. For Tron: hex string. For Solana: base58 string. |
status | Always SUCCESS for completed signatures |
type | Always SIGNED for signing transactions |
senderAddress | The wallet address that produced the signature |
signedTransaction | Signature components. EVM includes r, s, v, and full signature. Tron and Solana include signature only. |
reference | Your provided reference string (if any) |
metadata | Your provided metadata object (if any) |
Typed Data Signing (EVM Only)
Sign structured data following the EIP-712 standard. This is used for gasless approvals, delegated transfers, and other on-chain authorization flows that require a structured signature.Supported Standards
| Standard | Use Case |
|---|---|
| EIP-712 | Generic structured data signing |
| EIP-2612 (Permit) | Gasless token approvals — approve spending without an on-chain transaction |
| EIP-3009 (TransferWithAuthorization) | Delegated transfers — authorize a transfer that a third party submits |
Request Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
domain | object | Yes | EIP-712 domain separator. Includes name, version, chainId, and verifyingContract. |
types | object | Yes | Type definitions for the structured data. |
message | object | Yes | The data to sign, conforming to the type definitions. |
EIP-2612 Permit Example
Typed Data Response
Domain Object Fields
| Field | Type | Required | Description |
|---|---|---|---|
name | string | Yes | The name of the signing domain (e.g., the token name or dApp name) |
version | string | Yes | The version of the domain |
chainId | number | Yes | The chain ID. Must match the wallet’s blockchain network. |
verifyingContract | string | Yes | The contract address that will verify the signature |
salt | string | No | Optional domain salt for EIP-712 v4 |
Child Address Signing
Sign messages or typed data using a specific child address instead of the master wallet:Webhook Events
Signing operations trigger a webhook with the transaction record:| Event | Description |
|---|---|
signed.success | Message or typed data signed and verified |
Webhook Payload
Complete Flow Example
Here’s a full implementation for signing a message and submitting the signature to a third-party provider:Error Responses
Wallet Not Found
Wallet Not Found
walletId does not exist or does not belong to your business.Address Not Found
Address Not Found
addressId does not exist or is not associated with the specified wallet.Unsupported Blockchain (Typed Data)
Unsupported Blockchain (Typed Data)
Chain ID Mismatch
Chain ID Mismatch
chainId in your typed data domain object does not match the wallet’s blockchain network.Signature Verification Failed
Signature Verification Failed
Best Practices
Security
- Use references — Track signing operations with unique reference IDs for audit trails and idempotency
- Verify the message — Before signing, confirm the message content matches what the third-party service expects
- Limit message length — Messages are capped at 4,096 characters. Keep messages concise and specific
Integration
- No gas fees — Signing operations are off-chain and do not require native token balance
- Immediate response — Signatures are generated synchronously. No polling or webhook waiting required for the signature itself
- Listen for webhooks — Use webhooks to maintain an audit trail of all signing events
Typed Data
- Match chain IDs — The
chainIdin your domain must match the wallet’s network. Use sandbox (testnet) chain IDs for testing and production (mainnet) chain IDs for live operations - Check the contract — The
verifyingContractmust be the contract that will verify the signature on-chain
API Reference
Master Wallet Endpoints
| Endpoint | Description |
|---|---|
| Sign Message | Sign a plain text message |
| Sign Typed Data | Sign EIP-712 structured data |
Child Address Endpoints
| Endpoint | Description |
|---|---|
| Sign Message | Sign a plain text message from a child address |
| Sign Typed Data | Sign EIP-712 structured data from a child address |

