Skip to main content
Docs
Documentation

Wallet NFT endpoints now correctly document EVM-only addresses

The wallet NFT endpoints previously documented the shared address parameter as accepting either an EVM or Solana address. Zerion’s NFT data does not support Solana wallets, so these endpoints now document an EVM-only address parameter. This is a documentation-only clarification. The endpoints have always rejected Solana addresses with a 400; the parameter description simply didn’t reflect that.Affected endpoints:
  • GET /v1/wallets/{address}/nft-positions/
  • GET /v1/wallets/{address}/nft-collections/
  • GET /v1/wallets/{address}/nft-portfolio
Feature
Pool filtering for balance charts

Filter wallet balance charts by liquidity-pool / vault position

New filter[pool_addresses] and filter[exclude_pool_addresses] query parameters on the wallet and wallet-set balance chart endpoints scope the chart to specific liquidity-pool / vault positions by contract address (the Uniswap V2 LP-token or ERC-4626 vault (e.g. Morpho) address). Pass up to 25 addresses. filter[pool_addresses] charts only the matching protocol positions; filter[exclude_pool_addresses] removes them while keeping the rest of the portfolio. The two are mutually exclusive; combining them returns 400. These filters select complex (protocol) positions, so combining either with filter[positions]=only_simple also returns 400.Affected endpoints:
  • GET /v1/wallets/{address}/charts/{chart_period}
  • GET /v1/wallet-sets/charts/{chart_period}
Feature
DeFi position receipt tokens

Receipt tokens for DeFi positions

Wallet and wallet-set position responses now include an optional receipt for a token representing a DeFi position.Affected endpoints:
  • GET /v1/wallets/{address}/positions/
  • GET /v1/wallet-sets/positions/
Docs
Documentation

Chart point granularity documented for balance & price charts

Documented the sampling interval (spacing between points) for each chart_period on the chart endpoints. This is a documentation-only clarification. The cadence has always been emitted by these endpoints; it simply wasn’t described in the reference.Each period samples its time window at a fixed interval: hour → 10s, day → 5m, week → 30m, month → 2h, 3months → 6h, 6months → 12h, year → 1d, 5years → 4d. For max, the interval is derived from available history, so it varies by wallet or asset.Affected endpoints:
  • GET /v1/wallets/{address}/charts/{chart_period}
  • GET /v1/wallet-sets/charts/{chart_period}
  • GET /v1/fungibles/{fungible_id}/charts/{chart_period}
  • GET /v1/fungibles/by-implementation/charts/{chart_period}
Feature
New feature

Wallet balance charts: include DeFi protocol positions

Added filter[positions] to the wallet and wallet-sets balance chart endpoints, letting you include complex DeFi protocol positions (liquidity pools, vaults) alongside plain token balances:
  • only_simple (default): token and native-coin balances held directly in the wallet. Matches previous behavior, so existing integrations are unaffected.
  • only_complex: complex DeFi protocol positions only.
  • no_filter: both.
Uniswap V2 LP positions are supported today, and support for more protocols is rolling out over time. Positions from protocols that aren’t yet supported are omitted from the chart.Affected endpoints:
  • GET /v1/wallets/{address}/charts/{chart_period}
  • GET /v1/wallet-sets/charts/{chart_period}
FeatureBreaking
Solana raw amounts

Raw on-chain amounts for Token-2022 ScaledUiAmount assets

For Token-2022 ScaledUiAmount (rebasing) assets such as SPYx, quantity.int is now the objective on-chain raw amount in base units. Use this value to build correct on-chain transactions, including max-balance (send-max) transfers, which fail on-chain when built from the scaled display amount.
  • quantity.int: objective on-chain raw amount in base units.
  • quantity.float / quantity.numeric: ready-to-display value = int / 10^decimals. For ScaledUiAmount assets, the display value is int × multiplier / 10^decimals.
Non-ScaledUiAmount assets are unaffected: their int already equals the on-chain amount.Affected endpoints:
  • GET /v1/wallets/{address}/positions/
  • GET /v1/wallet-sets/positions/
Breaking change: For ScaledUiAmount assets, quantity.int previously carried the scaled display amount and now carries the raw on-chain amount. Read the display value from quantity.float or quantity.numeric.
Improvement
Limit increase

Wallet NFT positions: page size cap raised to 500

GET /v1/wallets/{address}/nft-positions/ now accepts page[size] values up to 500 (previously capped at 100). This lets you fetch large NFT wallets in significantly fewer requests. Existing requests are unaffected; this only raises the maximum, and the default page size is 50.Affected endpoint:
  • GET /v1/wallets/{address}/nft-positions/
Migration: No client changes required. To reduce round-trips on large wallets, raise page[size] up to 500 and keep following the links.next cursor to paginate.
Improvement
Limit increase

Find wallets within subscription: page size cap raised to 2000

GET /v1/tx-subscriptions/{subscription_id}/wallets now accepts page[size] values up to 2000 (previously capped at 100). The default page size remains 100, so existing clients are unaffected.Affected endpoint:
  • GET /v1/tx-subscriptions/{subscription_id}/wallets
Feature
New feature

Wallet balance charts: exclude fungibles

Added filter[exclude_fungible_ids] to the wallet and wallet-sets balance chart endpoints. Use it to drop a small set of tokens from the chart instead of enumerating everything you want to keep. Same shape as filter[fungible_ids]: comma-separated, capped at 25 ids. Combining it with filter[fungible_ids] returns 400; pick one.Affected endpoints:
  • GET /v1/wallets/{address}/charts/{chart_period}
  • GET /v1/wallet-sets/charts/{chart_period}
Deprecation
Endpoint deprecation

Swap Offers API: deprecated

GET /v1/swap/offers/ is now deprecated and has been hidden from the API reference. Use GET /v1/swap/quotes/ instead, which covers the same use cases and adds native support for Solana and EVM ↔ Solana bridges.Sunset date: the endpoint will be permanently disabled on July 1, 2026. Requests after that date will fail.Migration:
  • Switch calls from GET /v1/swap/offers/ to GET /v1/swap/quotes/.
  • The response body shape differs: transactions are wrapped in chain-agnostic evm / solana envelopes, and fees are split into separate protocol_fee / bridge_fee / network_fee blocks. See the Swap Quotes reference for the full schema.
  • Quotes are returned best-first (sorted by output_amount_after_fees), matching the ordering you already get from /v1/swap/offers/.
Fix
Documentation clarifications

Reference docs: clarifications across PnL, swap, and wallet endpoints

Refreshed several reference-doc descriptions to better match how the API actually behaves. No behavior changes. Every update describes behavior that’s already live in production.Clarifications:
  • PnL since / till is a hard limit, not a guideline (GET /wallets/{address}/pnl, GET /wallet-sets/pnl). PnL is pre-computed at standard marks (now, 1 day ago, 1 week ago, 1 month ago, 1 year ago, beginning of the year); other timestamps are accepted only when fewer than 3,000 transactions sit between your timestamp and the nearest mark, otherwise the request errors out.
  • Swap endpoints rewritten (GET /v1/swap/offers/, GET /v1/swap/fungibles/). /v1/swap/offers/ returns ready-to-sign transaction data in a single call (0.8% Zerion fee included in the quoted amounts), not a multi-step quote-then-execute flow as previously documented. /v1/swap/fungibles/ is a token-picker helper for cross-chain swaps only.
  • Swap section reordered to quotesoffersfungibles, surfacing /v1/swap/quotes/ as the modern primary endpoint.
  • Wallet address validation documented (WalletAddress parameter, GET /wallets/{address}/transactions/). Addresses must be valid EVM or Solana; untracked addresses return 400 (API-1903).
  • filter[operation_types] duplicated enum removed (GET /wallets/{address}/transactions/, GET /wallets/transactions/, GET /wallet-sets/transactions/). The bulleted list was rendered twice and the inline copy was stale (missing bid); the schema $ref is now the single source of truth.
  • PATCH /v1/tx-subscriptions/{id}/wallets 100-address batch cap documented. The add and remove arrays accept at most 100 addresses per request; maxItems: 100 is now in the schema.
Migration: No client changes required. API responses and error behavior are unchanged. These updates only correct the reference documentation to match the limits the API has already been enforcing.
Fix
Documentation fix

Webhooks: payload example fix

Fixed two errors in the example payloads on the Webhooks page. No breaking changes. The production webhook payload format is unchanged; only the documentation examples were wrong.Corrections:
  • data.type is "callback" (the docs incorrectly showed "transaction_notification").
  • The rollback indicator deleted: true is on the transaction resource at included[0].attributes.deleted (the docs incorrectly showed it on data.attributes.deleted).
Migration: No client changes required. Verify your webhook handler reads the rollback flag from the transaction resource inside included, not from data.attributes.
Feature
New feature

Swap Quotes API: new endpoint

Added GET /v1/swap/quotes/, which returns swap quotes from multiple liquidity sources for both same-chain swaps and cross-chain bridges. Supports EVM chains and Solana, including EVM ↔ Solana bridges.
Differences from /v1/swap/offers/:
  • Native support for Solana wallets and bridges between EVM and Solana chains.
  • The response body has been restructured: transactions are wrapped in chain-agnostic evm/solana envelopes, fees are split into separate protocol_fee / bridge_fee / network_fee blocks.
The legacy /v1/swap/offers/ endpoint remains for backward compatibility.
Feature
New feature

Transactions API: fee acts

Transactions and acts may now carry the type fee, and a new fee_kind field on Act classifies fee acts. No breaking changes. This is an additive change.New fee type value: Both the transaction-level type enum and the per-act type (ActType) enum now include fee. A fee-typed act represents a fee charge that appears alongside existing acts in the transaction’s acts array; a transaction whose primary operation is a fee charge will surface type: fee at the top level.New fee_kind field on Act: Optional string that classifies a fee act. Only present on acts of type fee.
  • ui: fee charged by the UI / client application (e.g., a wallet or dApp frontend)
  • jito: Jito tip paid on Solana for priority inclusion
Affected endpoints:
  • GET /wallets/{address}/transactions/
  • GET /wallet-sets/transactions/
Migration: No client changes required. Clients that enumerate transaction or act types should be prepared to receive fee in addition to the previously documented values; unknown types should be handled gracefully. To surface fee acts to end users, render acts with type: fee and optionally distinguish them by fee_kind.
Feature
New feature

Wallet Sets API: new endpoints

Added five new endpoints for wallet sets, which provide aggregated portfolio data across up to one EVM and one Solana address simultaneously.Pass one or two addresses via the addresses query parameter (at most one EVM and one Solana address):
New endpoints:
  • GET /wallet-sets/portfolio
  • GET /wallet-sets/positions/
  • GET /wallet-sets/transactions/
  • GET /wallet-sets/charts/{chart_period}
  • GET /wallet-sets/pnl
Feature
New feature

Fungibles API: sort by trading volume

Added 24-hour trading volume as a new sort option for GET /fungibles/.
  • -market_data.trading_volumes.volume_1d: highest volume first
  • market_data.trading_volumes.volume_1d: lowest volume first
Feature
New feature

Fungibles API: new fields

Added trading volume and deployment date fields to fungible data. No breaking changes.New fields in FungibleAttributes.market_data:
  • trading_volumes.volume_1d: total 24-hour trading volume across all chains
New fields in AttributesImplementation (new dedicated type for implementations array, backward compatible with all existing fields):
  • market_data.trading_volumes.volume_1d: 24-hour trading volume on this chain
  • deployment_date: ISO 8601 datetime when the token contract was deployed
Fix
Documentation fix

Transactions API: OpenAPI documentation fix

Fixed OpenAPI schema inconsistencies between documentation and implementation for the /transactions endpoints. No breaking changes. API responses remain unchanged; only the OpenAPI spec was corrected.Nullable fields corrected:
  • Fee: fungible_info, price, value marked as nullable
  • Refund: fungible_info, price, value marked as nullable
  • Transfer: price, value marked as nullable
  • Fungible Info: icon marked as nullable
Missing fields documented:
  • Transaction attributes: address, refund, delegations
  • Fungible Info: id
Migration: No client changes required. Clients using generated models should ensure they handle null values, as these were already nullable in practice.
Feature
New feature

Chart periods: new time values

Added two new time period values to the chart_period parameter:
  • 6months: 6-month chart period
  • 5years: 5-year chart period
These complement the existing options: hour, day, week, month, 3months, year, and max.Affected endpoints:
  • GET /wallets/{address}/charts/{chart_period}
  • GET /fungibles/{fungible_id}/charts/{chart_period}
  • GET /fungibles/by-implementation/charts/{chart_period}
Feature
New feature

Portfolio API: sync parameter

Added new sync query parameter to the /wallets/{address}/portfolio endpoint.
  • true: Triggers a position sync and waits up to 30 seconds for fresh portfolio data before responding.
  • false (default): Returns immediately with cached data.
Clients should configure appropriate timeout settings when using sync=true.
Feature
New feature

Positions API: sync parameter

Added new sync query parameter to the /wallets/{address}/positions endpoint.
  • true: Waits up to 30 seconds for protocol positions to be updated and returns fresh data.
  • false (default): Returns immediately with available position data.
Clients should configure appropriate timeout settings when using sync=true.