Skip to content
Alchemy Logo

Portfolio APIs

Everything you need to view onchain assets.

Portfolio APIs include everything you need to build a view of a user's assets: fungibles, NFTs, and their transactions.

  • Multi-chain: All Portfolio APIs are multi-chain -- get all the data you need in a single API request, instead of parallelizing dozens of calls across different networks.
  • Powerful: Query for the metadata you need (e.g. cached images, token metadata, prices) within the same API call.
  • Constantly improving: These APIs are continuously improving, based on customer feedback.
  • Long-term partners: We have 7+ years of experience supporting the largest onchain customers and will be around to support you for the long term.
  • Scalable: These APIs power some of the biggest wallets in the space -- rest assured that we can scale with you.
Get Tokens By WalletNFTs By WalletTransaction History
Image 1Image 2Image 3
Ideal for: Multi-chain token experiences, balance indexing

How it works: Call an API to get balances, metadata, and prices.
Ideal for: NFT drops, token gating, analytics, wallets, marketplaces

How it works: Call an API to return multi-chain and complete NFT data.
Ideal for: Wallets

How it works: Call an API to get all transactions across different networks for a set of addresses.

The four multichain fan-out endpoints below can succeed on some networks and fail on others within a single request. Applies to:

When one or more networks in a request fail (upstream error, or a per-network timeout: 5s on paginated requests, 10s on fetch-all), the request still returns HTTP 200 with whatever succeeded, plus a top-level error object describing which networks did not.

The error key is omitted entirely when every requested network succeeds; it is not present-and-null.

{
  "data": { /* successful results, possibly an empty array */ },
  "error": {
    "message": "Failed to fetch tokens on certain networks",
    "partialErrors": [
      { "network": "robinhood-mainnet", "message": "Internal server error" }
    ]
  }
}

error.message is a human-readable summary that currently reads "Failed to fetch tokens on certain networks" on the token endpoints and "Failed to fetch NFTs on certain networks" on the NFT endpoints. error.partialErrors[].message is currently always the literal string "Internal server error". Treat both messages as opaque strings, not enumerable error codes; they do not distinguish upstream errors from per-network timeouts.

  • HTTP 200 does not mean every network returned data. Always check for the presence of error before treating the response as complete.
  • Every requested network can fail. If it does, the result array is empty and partialErrors contains one entry per network, still at HTTP 200.
  • Networks can repeat in partialErrors. A network appears more than once when the request body contained multiple entries that covered it.
  • Failed networks are dropped from pagination. They are not retried on subsequent pageKey requests, so retry a failed network as a fresh request rather than expecting it on the next page.
  • The top-level error is separate from data.tokens[].error on Tokens By Wallet. The former reports networks that failed entirely; the latter reports a per-token metadata or pricing failure within an otherwise successful network response.

Treat partialErrors as retryable. Retry only the listed networks in a fresh request, surface the partial data to end users rather than discarding the whole response, and stop after a fixed number of retries so a persistently failing network cannot block the rest of the payload.

Get in touch with us directly:

Email: [email protected]

Was this page helpful?