Getting StartedQuick Start

Quickstart

Deploy V3 Custody and make your first API call in under 5 minutes to query balances or initiate a transaction.

const response = await fetch('http://localhost:3000/v1/accounts/0x742d35Cc6634C0532925a3b8D7c406D7247C748/page-balances?chain=ethereum', {
  headers: {
    'Authorization': `Bearer ${YOUR_API_KEY}`,
    'Content-Type': 'application/json',
  },
});
const balances = await response.json();
console.log(balances);
{
  "account": "0x742d35Cc6634C0532925a3b8D7c406D7247C748",
  "chain": "ethereum",
  "balances": [
    {
      "token": "0xA0b86a33... native ETH",
      "balance": "1.234 ETH",
      "usdValue": 2500.50
    }
  ],
  "timestamp": "2024-01-15T10:30:00Z"
}

Prerequisites

Before deploying V3 Custody, ensure you have the following ready:

  • Docker installed and running (version >=20.10)
  • Node.js >=18 for local development
  • A supported wallet seed phrase for MPC key generation
  • Basic familiarity with REST APIs and JSON

Reserve at least 4GB RAM for the self-hosted instance. Access to 20+ chains requires configuring RPC endpoints during setup.

Deploy V3 Custody

Deploy your self-hosted instance using Docker for quick setup.

Pull the Image

Fetch the latest V3 Custody image from the registry.

docker pull v3finance/custody:latest

Run the Container

Start the service with your configuration. Replace YOUR_SEED_PHRASE with a secure 12-24 word mnemonic.

docker run -d \
  -p 3000:3000 \
  -e SEED_PHRASE="YOUR_SEED_PHRASE" \
  -e RPC_ETHEREUM="https://mainnet.infura.io/v3/YOUR_INFURA_KEY" \
  v3finance/custody:latest

Verify Deployment

Check the logs and access the web interface at http://localhost:3000.

docker logs $(docker ps --filter ancestor=v3finance/custody:latest -q)

Your instance is now running MPC custody on your infrastructure.

Generate API Credentials

Create your first API key for programmatic access.

Access Admin Panel

Open http://localhost:3000/admin in your browser and log in with the generated admin credentials from the Docker logs.

Create API Key

Navigate to API Keys > Generate New Key.

Copy the key (format: v3c_...). Store it securely as YOUR_API_KEY.

API keys support granular permissions. For production, create role-based keys with policy restrictions.

Fetch Account Balances

Make your first API call to query balances for an account.

path
accountstring
Required

The EVM account address (e.g., 0x742d35Cc6634C0532925a3b8D7c406D7247C748).

query
chainstring
Required

Blockchain network (e.g., ethereum, polygon, arbitrum).

Initiate a Transaction with Policy Approval

Test the full flow: propose a transaction, trigger policy review, and approve.

const tx = await fetch('http://localhost:3000/v1/transactions', {
  method: 'POST',
  headers: {
    'Authorization': `Bearer ${YOUR_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    account: '0x742d35Cc6634C0532925a3b8D7c406D7247C748',
    chain: 'ethereum',
    to: '0x1234567890123456789012345678901234567890',
    value: '0.1',
    data: '0x',
    reason: 'Test transfer'
  }),
});

The transaction enters Reserved status and awaits policy approval.

Next Steps

Congratulations! You've deployed V3 Custody and made your first API call. Customize policies and scale to production.