> ## Documentation Index
> Fetch the complete documentation index at: https://docs.octav.fi/llms.txt
> Use this file to discover all available pages before exploring further.

# Migrate to Octav

> Move from any portfolio or wallet-data API to Octav with drop-in endpoint and field mappings

Already integrated another portfolio, wallet-data, or DeFi API? Octav is designed as a **drop-in upgrade**. In most cases a multi-call, multi-vendor integration collapses into a **single `GET /v1/portfolio` call** that returns wallet tokens, decoded DeFi positions, net worth, and P\&L across EVM **and** Solana.

<Info>
  **Get your API key** at [data.octav.fi](https://data.octav.fi/), then follow the guide for your current provider below.
</Info>

## Why teams switch to Octav

<CardGroup cols={2}>
  <Card title="One call, everything" icon="layer-group">
    Wallet tokens **and** decoded DeFi positions **and** net worth in a single request. No merging three endpoints, no deduping receipt tokens.
  </Card>

  <Card title="EVM + Solana, same shape" icon="link">
    The same endpoint and response shape work for `0x…` and base58 addresses across 90+ chains. No separate Solana integration.
  </Card>

  <Card title="Deepest DeFi decoding" icon="vault">
    Lending, LP, staking, perps, options, vesting and prediction markets are turned into real positions with underlying assets, health rates, and a per-asset price source.
  </Card>

  <Card title="Precomputed USD + P&L" icon="calculator">
    Every asset ships with `price`, `value`, cost basis and open/closed P\&L. No client-side pricing, no separate price feed.
  </Card>
</CardGroup>

## Pick your provider

<CardGroup cols={2}>
  <Card title="From DeBank" icon="right-left" href="/api/migrate/from-debank">
    Collapse `all_token_list` + `all_complex_protocol_list` + `total_balance` into one call, and add Solana.
  </Card>

  <Card title="From Zerion" icon="right-left" href="/api/migrate/from-zerion">
    Swap JSON:API positions for a flat, USD-priced portfolio, with receipt tokens decoded once (no double-count).
  </Card>

  <Card title="From Zapper" icon="right-left" href="/api/migrate/from-zapper">
    Replace the `portfolioV2` GraphQL query with a single REST call.
  </Card>

  <Card title="From Mobula" icon="right-left" href="/api/migrate/from-mobula">
    Merge `wallet/portfolio` + `wallet/defi-positions` into one response, with sanity-checked pricing.
  </Card>

  <Card title="From Nansen" icon="right-left" href="/api/migrate/from-nansen">
    Replace the two profiler/portfolio POST endpoints with one call, no receipt-token double-count.
  </Card>

  <Card title="From Sim (Dune)" icon="right-left" href="/api/migrate/from-sim">
    Keep token balances, add the decoded DeFi positions Sim sunset, plus Solana.
  </Card>

  <Card title="From GoldRush (Covalent)" icon="right-left" href="/api/migrate/from-goldrush">
    Replace `balances_v2` and add the DeFi decoding GoldRush deprecated.
  </Card>

  <Card title="From TopLedger" icon="right-left" href="/api/migrate/from-topledger">
    Keep Solana DeFi decoding, add loose token holdings, EVM, and mark-to-market perps.
  </Card>
</CardGroup>

## Authentication mapping

Whatever header your current provider uses, Octav uses a standard **Bearer** token.

| Provider   | Their auth                            | Octav                         |
| ---------- | ------------------------------------- | ----------------------------- |
| DeBank     | `AccessKey: <key>`                    | `Authorization: Bearer <key>` |
| Zerion     | `Authorization: Basic base64(<key>:)` | `Authorization: Bearer <key>` |
| Zapper     | `x-zapper-api-key: <key>`             | `Authorization: Bearer <key>` |
| Mobula     | `Authorization: <key>`                | `Authorization: Bearer <key>` |
| Nansen     | `apikey: <key>`                       | `Authorization: Bearer <key>` |
| Sim (Dune) | `X-Sim-Api-Key: <key>`                | `Authorization: Bearer <key>` |
| GoldRush   | `Authorization: Bearer <key>`         | `Authorization: Bearer <key>` |
| TopLedger  | `x-api-key: <key>`                    | `Authorization: Bearer <key>` |

```bash cURL theme={null}
curl -X GET "https://api.octav.fi/v1/portfolio?addresses=0x6426af179aabebe47666f345d69fd9079673f6cd" \
  -H "Authorization: Bearer YOUR_API_KEY"
```

See [Authentication](/api/authentication) for details.

## The core idea: one endpoint

Most providers split a portfolio across several calls (tokens, DeFi, net worth) and sometimes several products (EVM vs Solana). Octav returns all of it from one endpoint:

| What you want       | Typical elsewhere | Octav                                                                       |
| ------------------- | ----------------- | --------------------------------------------------------------------------- |
| Wallet tokens       | one call          | [`GET /v1/portfolio`](/api/endpoints/portfolio) → `assetByProtocols.wallet` |
| DeFi positions      | separate call     | same `GET /v1/portfolio` → `assetByProtocols.<protocol>`                    |
| Net worth + P\&L    | separate call     | same response → `networth`, `openPnl`, `closedPnl`                          |
| Per-chain breakdown | separate call     | same response → `chains`                                                    |
| Solana              | separate product  | same call, base58 address                                                   |
| Transaction history | separate call     | [`GET /v1/transactions`](/api/endpoints/transactions)                       |

`GET /v1/portfolio` returns an **array with one entry per address**, so unwrap the first element for a single address (`const [portfolio] = await res.json()` / `res.json()[0]`). Each portfolio groups assets by protocol, then chain, then position:

```
portfolio.assetByProtocols.<protocol>.chains.<chain>.protocolPositions.<POSITION>.assets[]
```

Valid `<POSITION>` keys include `WALLET`, `LENDING`, `LIQUIDITYPOOL`, `STAKED`, `FARMING`, `MARGIN`, `DEPOSIT`, `REWARDS`, `YIELD`, `VAULT`, and `LOCKED`.

Each asset carries `symbol`, `name`, `balance`, `price`, `value`, `decimal`, `contract`, and `chainContract` — already priced, so you never compute USD values yourself.

<Tip>
  Prefer not to touch REST at all? The [Octav MCP server](/api/ai-development/mcp-server) and [CLI](/api/ai-development/cli) expose the same data to agents and scripts.
</Tip>

## Need a hand?

Migrating a live integration? We are happy to map your exact response shape or unblock an edge case.

<CardGroup cols={2}>
  <Card title="Join our Discord" icon="discord" href="https://discord.com/invite/qvcknAa73A">
    Ask the team directly and get migration help.
  </Card>

  <Card title="Developer Portal" icon="key" href="https://data.octav.fi/">
    Create your API key and manage credits.
  </Card>
</CardGroup>
