Api reference
Sign Message
Sign arbitrary messages with HSM/MPC keys.
Sign arbitrary messages with HSM/MPC keys.
Endpoint
POST /signDescription
Signs arbitrary messages using HSM/MPC keys. Supports both raw messages and EIP-712 structured data.
Request Body
{
"messages": [
"hello world",
"hello web3"
],
"format": "rsv",
"hashed": false,
"signer": {
"clientId": "your-fireblocks-client-id",
"versionId": "1"
},
"eip712": {
"address": "0x...",
"chainId": "137"
}
}Response
[
{
"address": "0xdb074b3c323a7ad418ebbe66bad231f43f680563",
"publicKey": "049113caedb5d570dc9a47974f819b9d2c88ffcf622c1f3c756be7955d9f16eae28d8f00ec4fa359c311ae4c25b58d2b1d872d6e4c37600494416d856615fb7e4b",
"signatures": [
{
"r": "...",
"s": "...",
"v": 27
}
],
"errors": null
}
]Response Fields
address(string): The public address of the signerpublicKey(string): The public key of the signersignatures(array): Array of signature objects with r, s, v valueserrors(array, nullable): Array of error messages if signing failed
Example Request
curl -X POST https://api.msa.omnes.tech/sign \
-H "Content-Type: application/json" \
-d '{
"messages": [
"hello world",
"hello web3"
],
"format": "rsv",
"hashed": false,
"signer": {
"clientId": "your-fireblocks-client-id",
"versionId": "1"
}
}'const response = await fetch('https://api.msa.omnes.tech/sign', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
messages: ['hello world', 'hello web3'],
format: 'rsv',
hashed: false,
signer: {
clientId: 'your-fireblocks-client-id',
versionId: '1',
},
}),
});
const result = await response.json();
console.log('Signer address:', result[0].address);
console.log('Signatures:', result[0].signatures);import requests
url = "https://api.msa.omnes.tech/sign"
payload = {
"messages": [
"hello world",
"hello web3"
],
"format": "rsv",
"hashed": False,
"signer": {
"clientId": "your-fireblocks-client-id",
"versionId": "1"
}
}
response = requests.post(url, json=payload)
result = response.json()
print(f"Signer address: {result[0]['address']}")
print(f"Signatures: {result[0]['signatures']}")Use Cases
- Message authentication: Sign messages for authentication purposes
- EIP-712 signing: Sign structured data for dApps
- Batch signing: Sign multiple messages in a single request
- HSM/MPC signing: Use enterprise-grade signing infrastructure
Best Practices
- Use EIP-712 for structured data: Use EIP-712 format for better UX and security
- Handle errors: Check for errors in the response array
- Verify signatures: Always verify signatures on-chain or off-chain
- Protect credentials: Never expose HSM/MPC credentials
Related Endpoints
- Transact Signer - Execute transactions with HSM/MPC
💡 Tip: Use EIP-712 format for signing structured data. This provides better UX and security compared to raw message signing.