Docs

Live

BlockHelix API

Deploy a policy-guarded vault, then let an operator or agent trade within it. Every action is one API call and is verified on-chain against the vault's policy. The full interactive reference is at api.blockhelix.tech/docs ↗.

Connect

Base URL   https://api.blockhelix.tech
Auth       Authorization: Bearer <your API key>
           (service integrations: X-API-Key + X-User-Id)
Reference  https://api.blockhelix.tech/docs   (interactive OpenAPI)

Get an API key from the dashboard. Pass it as a Bearer token. Service integrations use an X-API-Key plus an X-User-Id header to scope calls to an end user.

How it works

Vaults are non-custodial. Every action an operator or agent takes goes through this API and is re-verified on-chain against a merkle-authorized policy: only whitelisted protocols, assets, and actions execute, and anything else reverts at the contract. Deposits and withdrawals are wallet-signed by the depositor; strategist trades are API-driven and bounded by the policy.

1) Deploy a vault

POST /vaults
Authorization: Bearer <api-key>
Content-Type: application/json

{
  "chainId": 8453,
  "riskProfileId": "stable-conservative",
  "baseAssetAddress": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
  "pauserAddress": "0xYourSafe",
  "payoutAddress": "0xYourAddress",
  "platformFeeBps": 100,
  "performanceFeeBps": 1000,
  "vaultName": "My Vault",
  "vaultSymbol": "MYV"
}

// 202 { "deploymentId": "dep_...", "status": "queued" }
// poll GET /vaults/:id until status is "complete"

Pick a risk profile from GET /vaults/risk-profiles. It sets the merkle policy at launch: exactly which protocols, actions, and assets the vault will ever allow.

2) Discover what it can trade

GET /vaults/:id/capabilities

// 200 - machine-readable, so an agent can plan trades from the API alone
{
  "riskProfile": "stable-conservative",
  "baseAsset": { "symbol": "USDC", "decimals": 6, "address": "0x8335..." },
  "capabilities": [
    { "protocol": "aave-v3",    "endpoint": "/trade/aave", "method": "POST",
      "actions": ["supply", "withdraw"], "assets": [ { "symbol": "USDC", ... } ] },
    { "protocol": "uniswap-v3", "endpoint": "/trade/swap", "method": "POST",
      "actions": ["swap"], "assets": [ USDC, DAI ], "pairs": [ ["USDC", "DAI"] ] }
  ]
}

An agent reads its authorized protocols, actions, assets (with addresses and decimals), and swap pairs, plus the endpoint to call for each. No out-of-band knowledge needed.

3) Trade

POST /trade/aave
{ "deploymentId": "dep_...", "action": "supply",
  "asset": "0x8335...", "amount": "5000000" }

POST /trade/swap
{ "deploymentId": "dep_...",
  "tokenIn":  "0x8335...", "tokenOut": "0x50c5...",
  "amountIn": "2000000",   "minAmountOut": "1950000000000000000" }

// 202 { "tradeId": "trd_...", "status": "queued", "warnings": [ ... ] }
// 400 if the pair is not in the vault policy, or the vault can't fund it
// poll GET /trade/:id for status + txHash

4) Read the vault

GET /vaults/:vault/nav

// 200 - read live from chain
{
  "sharePrice": "1000000", "nav": "10000000", "totalShares": "10000000",
  "balances": [
    { "symbol": "USDC", "idle": "3000000", "supplied": "5000000", "supplyApy": 0.043 },
    { "symbol": "DAI",  "idle": "2000400000000000000", "supplied": "0", "supplyApy": null }
  ]
}

Share price, NAV, and per-token balances (idle in the vault vs supplied to Aave), read live from chain. Amounts are base units; sharePrice and NAV are in the base asset.

Not live yet: risk checks

Trades are bounded by the on-chain policy (only whitelisted actions execute). The independent risk layer (price impact, slippage validation against an oracle, liquidity and position-health checks) is not active yet, and minAmountOut is caller-supplied. Every trade response carries this caveat in a warnings field. Do not use with funds you can't afford to lose.

Endpoints

POST /vaultsDeploy a policy-guarded vault
GET /vaultsList your vaults
GET /vaults/risk-profilesOffered trade-policy profiles
GET /vaults/:idDeployment status and component addresses
GET /vaults/:id/capabilitiesWhat this vault can trade (agent discovery)
GET /vaults/:vault/navLive share price, NAV, and per-token balances
POST /trade/aaveSupply to / withdraw from Aave v3
POST /trade/swapSwap between authorized assets (Uniswap v3)
GET /tradeList your trades
GET /trade/:idTrade status, txHash, and failure reason

Vault type: Veda

Vaults deploy Veda's BoringVault, an institutional, audited, battle-tested vault architecture. BlockHelix deploys a pinned version, unmodified: Veda-Labs/boring-vault@bdc38405 ↗

Agent-ready today

The REST API is built for agents: GET /vaults/:id/capabilities lets an agent discover its authorized trades, and every action is a single call bounded by the on-chain policy. An MCP server wrapping these tools is on the roadmap. The legacy Solana runtime and its MCP endpoint are frozen.