Clean REST APIs, comprehensive webhooks, and dual authentication. Create wallets, move assets, and automate treasury operations. Ship in hours, not weeks.
Go from zero to your first API call in under five minutes.
Sign up and create your organization. Your first API key is generated automatically.
curl https://api.ferros.xyz/v1/auth/signup \ -H "Content-Type: application/json" \ -d '{ "name": "Jane Smith", "email": "jane@acme.com", "password": "...", "organizationName": "Acme Corp" }'
Copy the cv_live_... key from the response. Store it securely -- it is only shown once.
// Response { "apiKey": "cv_live_sk_a1b2c3...", "user": { "id": "usr_...", "email": "jane@acme.com" } }
Create a multi-chain wallet with a single request. Addresses are generated for each chain automatically.
curl https://api.ferros.xyz/v1/wallets \ -H "X-API-Key: cv_live_..." \ -H "Content-Type: application/json" \ -d '{ "name": "Treasury", "type": "hot", "custodyMode": "custodial", "chains": ["ethereum", "polygon"] }'
Comprehensive endpoints for every aspect of digital asset management. All resources follow consistent REST conventions.
Create and manage multi-chain wallets. Supports custodial and self-custody modes with HOT, WARM, and COLD storage types.
Send, receive, and monitor blockchain transactions. Built-in approval flows, multi-sig signing, and on-chain confirmation tracking.
Customer-facing accounts with dedicated deposit addresses across multiple chains. Gas sponsorship and automated workflows included.
Trigger-based automations for forwarding funds, splitting payments, sending notifications, and executing custom logic on events.
Real-time event notifications delivered to your endpoints. HMAC-signed payloads for secure verification. Test fire from the dashboard.
Self-custody signing flow for hardware wallets and the Ferros Signer mobile app. Push notifications and deep linking built in.
One API call creates a multi-chain wallet with addresses on every chain you specify. Choose your language.
curl -X POST https://api.ferros.xyz/v1/wallets \ -H "X-API-Key: cv_live_sk_a1b2c3..." \ -H "Content-Type: application/json" \ -d '{ "name": "Treasury Primary", "type": "hot", "custodyMode": "custodial", "chains": ["ethereum", "polygon", "base"] }'
const response = await fetch("https://api.ferros.xyz/v1/wallets", { method: "POST", headers: { "X-API-Key": "cv_live_sk_a1b2c3...", "Content-Type": "application/json" }, body: JSON.stringify({ name: "Treasury Primary", type: "hot", custodyMode: "custodial", chains: ["ethereum", "polygon", "base"] }) }); const wallet = await response.json(); console.log(wallet.data.addresses);
import requests response = requests.post( "https://api.ferros.xyz/v1/wallets", headers={ "X-API-Key": "cv_live_sk_a1b2c3...", "Content-Type": "application/json" }, json={ "name": "Treasury Primary", "type": "hot", "custodyMode": "custodial", "chains": ["ethereum", "polygon", "base"] } ) wallet = response.json() print(wallet["data"]["addresses"])
Two authentication methods to fit every use case. Use API keys for server-to-server, JWT Bearer tokens for user sessions.
Pass your key in the X-API-Key header. Keys are prefixed with cv_ and stored as SHA-256 hashes. Create, rotate, and revoke keys from the dashboard or API.
X-API-Key: cv_live_sk_a1b2c3d4e5f6...
Use Authorization: Bearer header with a JWT. Tokens embed userId, orgId, and role. Ideal for user-facing sessions and the dashboard.
Authorization: Bearer eyJhbGciOi...
Subscribe to real-time events and react instantly. All payloads are HMAC-signed with your webhook secret for verification.
| Event | Description |
|---|---|
| transaction.created | A new transaction has been initiated |
| transaction.status_changed | Transaction status updated (confirming, confirmed, etc.) |
| transaction.completed | Transaction fully confirmed on-chain |
| transaction.failed | Transaction failed or was reverted |
| wallet.created | A new wallet has been created |
| address.generated | A new deposit address was derived |
| policy.triggered | A compliance policy rule was matched |
| vault.created | A new customer vault was created |
| vault.deposit | Funds deposited into a vault address |
| vault.withdrawal | Funds withdrawn from a vault |
| workflow.triggered | A workflow automation was triggered |
| workflow.completed | Workflow run completed successfully |
| workflow.failed | Workflow run failed during execution |
| gas_tank.low | Gas tank balance dropped below threshold |
Native client libraries to make integration even faster. Type-safe, well-documented, and idiomatic for each language.
In the meantime, our REST API works with any HTTP client in any language.
Create your free account, grab an API key, and deploy your first wallet in under five minutes.