For the complete documentation index, see llms.txt. This page is also available as Markdown.

Vaults

Endpoints for discovering the vaults that belong to your organization and inspecting state on a specific vault. The API uses a "tenant" to represent your organization. All endpoints are tenant-scoped — the tenant is resolved from your API key, and vaults outside your tenancy are not visible.

For authentication, base URL, request/response conventions, and the error envelope, see the API Reference. Create an API key first via Quick Start. Examples below assume the key is in $VEDA_API_KEY.

Concepts

A vault is a set of smart contracts — built on Veda's BoringVault architecture — that abstracts DeFi complexity via a risk manager (also referred to as a curator), and adds enterprise compliance controls. A vault generates yield by allocating depositor funds, per the curator's instructions, to trusted DeFi protocols using predefined yield strategies. Depositors receive vault receipt tokens that prove ownership of their deposited funds, and only depositors can withdraw — not Veda, not the curator.

A vault can be deployed on one or more chains; the same vault_address appears on each chain it's been deployed to. Its Manager contract on each chain holds that chain's current merkle root — a single onchain commitment to the allowlist of actions the curator (or a delegated strategist) is permitted to execute there. For how the allowlist works and how the underlying tree is structured, see Policy Manager & Merkle Trees.

Tenant denial returns 404, not 403. Asking for a vault that isn't part of your tenant returns 404 vault_not_found — the API does not distinguish "doesn't exist" from "exists but not yours."


1. List vaults

GET /v1/vaults

Returns the vaults that belong to the tenant on your API key, across every chain.

Query parameters

Name
Type
Required
Notes

cursor

string

No

Opaque cursor from a previous response's page.next_cursor — omit on the first call.

Example request

curl https://api.veda.tech/v1/vaults \
  -H "Authorization: Bearer $VEDA_API_KEY"

Example response

  • chains is the set of chains the vault is deployed on.

  • links is keyed by chain — each chain has its own self and roots resource. The link strings are returned unversioned (no /v1/ prefix); they're resource paths relative to the API host. Prepend /v1 (or the base URL) when calling them.

Errors

Status
Code
Cause

401

unauthenticated

Missing, expired, or revoked API key

429

rate_limited

API key rate limit exceeded

See API Reference → Errors for the envelope and the shape of authentication / rate-limit responses.


2. Get the latest metrics snapshot

Returns the most recent metrics snapshot for a vault on a given chain. Snapshots are produced daily by the share-price runner and capture share price, total assets, total supply, per-protocol position breakdown, and asset prices — all at a specific block.

Path parameters

Name
Type
Notes

chain

string

Lowercase chain slug — see Chain Support

vault_address

string

The BoringVault contract address

Example request

Example response

  • as_of is the ISO-8601 UTC timestamp of the snapshot's source block; block_number is that block.

  • snapshot_type indicates the metric model used for this vault (e.g. yield_streaming). Type-specific fields (like the yield_streaming block below) only appear when the corresponding snapshot_type is active.

  • share_price, total_assets, total_supply, position balances, prices in prices, and yield_streaming.vested_amount are returned as strings to preserve full precision for assets whose values can fall outside safe float ranges.

  • positions is the per-protocol breakdown of vault holdings as of block_number. Each entry is { protocol, asset, balance }. To value a position in the vault's base asset, look up its price at prices[chain][asset] and multiply: balance × price.

  • prices is a top-level chain → asset → string-price map. The base case is one chain (the vault's own); the structure leaves room for cross-chain holdings.

  • base_asset is the asset that share_price, total_assets, and total_supply are denominated in. May come back as "unknown" for snapshots where the base asset hasn't been resolved yet.

  • yield_streaming is present only when snapshot_type is yield_streaming — see About yield streaming below for what these fields represent and why the vault uses this model.

About yield streaming

Yield-streaming vaults distribute earned yield linearly into the share price over a configurable vesting window, instead of applying it as a single rate jump. This defends against MEV and other value-extraction attacks on discrete rate updates — an attacker who front-runs a rate jump only captures the sliver of yield that has vested between their deposit and its execution, so the attack isn't profitable.

When snapshot_type is yield_streaming, the yield_streaming block on the response reports the current vesting tranche:

  • vested_amount (string, denominated in base_asset) — the size of the yield tranche being streamed into the share price over the current window. This entire amount accrues into share_price linearly across the window.

  • vesting_duration_seconds (int) — length of the vesting window in seconds. Production vaults typically use 43200 (12 hours).

Errors

Status
Code
Cause

401

unauthenticated

Missing, expired, or revoked API key

404

vault_not_found

Vault does not exist on this chain, or is not in your tenant

429

rate_limited

API key rate limit exceeded


3. List metrics snapshot history

Returns the history of metrics snapshots for a vault on a given chain — newest first. Each entry has the same shape as Get the latest metrics snapshot. Cursor-paginated.

Path parameters

Name
Type
Notes

chain

string

Lowercase chain slug — see Chain Support

vault_address

string

The BoringVault contract address

Query parameters

Name
Type
Required
Notes

cursor

string

No

Opaque cursor from a previous response's page.next_cursor — omit on the first call.

Example request

Example response (abbreviated)

Errors

Status
Code
Cause

401

unauthenticated

Missing, expired, or revoked API key

404

vault_not_found

Vault does not exist on this chain, or is not in your tenant

429

rate_limited

API key rate limit exceeded


4. List roots set on a vault

Returns the roots that have been set on a vault on a given chain — both current and historical. Tenant-scoped: a vault outside your tenant (or a chain the vault isn't deployed on) returns 404 vault_not_found. Cursor-paginated. Default sort: active DESC — active roots first, then inactive.

Path parameters

Name
Type
Notes

chain

string

Lowercase chain slug — see Chain Support

vault_address

string

The BoringVault contract address

Query parameters

Name
Type
Required
Notes

cursor

string

No

Opaque cursor from a previous response's page.next_cursor — omit on the first call.

Example request

Example response

  • One entry is returned per (root_hash, strategist) pair — a vault that authorizes multiple strategists under the same root appears multiple times, once per strategist.

Errors

Status
Code
Cause

401

unauthenticated

Missing, expired, or revoked API key

404

vault_not_found

Vault does not exist on this chain, or is not in your tenant

429

rate_limited

API key rate limit exceeded


5. List daily data

Returns the daily share-price, APY, TVL, and base-asset accounting series for a vault over a date range. Cursor-paginated; the requested range is echoed back on meta so the response is self-describing.

This endpoint uses the camel-case path segment dailyData to match the upstream contract; the rest of the API uses snake_case in paths.

Path parameters

Name
Type
Notes

chain

string

Lowercase chain slug — see Chain Support

vault_address

string

The BoringVault contract address

Query parameters

Name
Type
Required
Notes

from

string

No

Start of the range, ISO-8601 UTC (e.g. 2026-05-01T00:00:00Z). Omit to default to the earliest available day for the vault.

to

string

No

End of the range, ISO-8601 UTC (e.g. 2026-06-12T00:00:00Z). Omit to default to the latest available day for the vault.

cursor

string

No

Opaque cursor from a previous response's page.next_cursor — omit on the first call.

Calling the endpoint without from / to returns the full series for the vault, paginated. The meta block on the response reflects the effective range applied by the server, so you can tell what window the data actually covers even when you omit one or both params.

Example request

Example response

  • One entry per day in the requested range, in chronological order.

  • share_price and daily_apy are floats; total_assets, tvl_usd, and price_usd are returned as strings to preserve full precision for assets whose value can fall outside safe float ranges.

  • daily_apy is fractional — 0.015506… means 1.55%, not 155%.

  • meta.from / meta.to report the effective range the server applied — either the values you supplied, or the defaults (earliest and latest available days) when omitted.

Errors

Status
Code
Cause

401

unauthenticated

Missing, expired, or revoked API key

404

vault_not_found

Vault does not exist on this chain, or is not in your tenant

422

validation_failed

from / to malformed, or tofrom

429

rate_limited

API key rate limit exceeded


Go on to next: Policy Manager & Merkle Trees — how a vault's allowlist is encoded as a merkle tree and committed onchain.

Last updated