openapi: 3.0.3
info:
  version: 1.0.0
  title: REST API
  description: REST-like API provides access to rich Zerion ecosystem.
  contact:
    name: Zerion API
    url: https://developers.zerion.io/
    email: api@zerion.io
servers:
  - description: Production API
    url: https://api.zerion.io
security:
  - APIKeyBasicAuth: []
tags:
  - name: wallets
    description: Operations related to wallets, such as portfolio charts, positions, and transactions.
  - name: wallet sets
    description: Operations on a wallet set — aggregated portfolio data across at most one EVM address and one Solana address queried together.
  - name: fungibles
    description: Operations related to fungible assets, such as list them all, search or get by ID.
  - name: chains
    description: Operations related to chains, such as list all chains.
  - name: swap
    description: Operations related to swapping and bridging assets.
  - name: gas
    description: Operations related to gas.
  - name: nfts
    description: Operations related to non fungible assets, such list them, search or get by ID.
  - name: dapps
    description: Operations related to decentralized applications, such as list them all, search or get by ID.
  - name: subscriptions to transactions
    description: Operations related to subscriptions to transactions.
paths:
  /v1/wallets/{address}/charts/{chart_period}:
    get:
      operationId: getWalletChart
      summary: Get wallet balance chart
      description: |
        Returns a portfolio balance chart for a wallet over a time period, based on the start and end timestamps you pass. Results can be filtered by chain and asset type, giving the same view as the chart in the Zerion interface.

        **Complex positions.** By default the chart counts only simple positions: token and native-coin balances held directly in the wallet. Set `filter[positions]` to `only_complex` or `no_filter` to also include complex DeFi protocol positions. Uniswap V2, V3 and V4 liquidity positions and ERC-4626 vault positions (e.g. Morpho) are supported today, and support for more protocols is rolling out over time. Positions that aren't yet supported are omitted from the chart, whether the whole protocol is unsupported or only that individual position.
      x-mint:
        metadata:
          description: Portfolio value over time for a wallet, filterable by chain and asset type, over any start and end timestamp.
      tags:
        - wallets
      parameters:
        - $ref: '#/components/parameters/ChartPeriod'
        - $ref: '#/components/parameters/Currency'
        - $ref: '#/components/parameters/WalletAddress'
        - name: filter[chain_ids]
          in: query
          style: form
          explode: false
          description: Account only for balance on these chains (comma-separated list). Available chain ids can be found in chains endpoints.
          schema:
            type: array
            example:
              - aurora
            maxItems: 25
            items:
              type: string
        - name: filter[fungible_ids]
          in: query
          style: form
          explode: false
          description: Account only for balance of given fungible assets (comma-separated list). Mutually exclusive with `filter[exclude_fungible_ids]` — combining both returns `400`.
          schema:
            type: array
            maxItems: 25
            items:
              type: string
              maxLength: 44
        - name: filter[exclude_fungible_ids]
          in: query
          style: form
          explode: false
          description: Exclude balance contributions from the given fungible assets (comma-separated list). Useful when the set you want to keep is large but the set you want to omit is small. Mutually exclusive with `filter[fungible_ids]` — combining both returns `400`.
          schema:
            type: array
            maxItems: 25
            items:
              type: string
              maxLength: 44
        - name: filter[pool_addresses]
          in: query
          style: form
          explode: false
          description: |
            Restrict the balance chart to specific liquidity-pool / vault positions (comma-separated list). Only the matching protocol positions are charted; simple token and native-coin balances are excluded.

            Each protocol is identified by a different value:

            - **Uniswap V2** — the LP-token contract address, e.g. `0xb4e16d0168e52d35cacd2c6185b44281ec28c9dc`.
            - **Uniswap V3** — the pool contract address, e.g. `0x4e68ccd3e89f51c3074ca5072bbac773960dfa36`.
            - **Uniswap V4** — the LP NFT, written as `<position_manager_address>:<token_id>`, e.g. `0xbd216513d74c8cf14cf4747e6aaa6420ff64ee9e:229217`. `token_id` must be the canonical decimal representation of an unsigned 256-bit integer: one or more decimal digits, no leading zeros, and a value from `0` through `2^256 - 1` (`115792089237316195423570985008687907853269984665640564039457584007913129639935`), inclusive. Invalid or out-of-range values return `400`. Raw V4 pool IDs are 32-byte hashes, not contract addresses, and return `400`. Uniswap V3 also accepts the LP NFT form; it selects the same position as the pool contract address.
            - **ERC-4626 vaults**, e.g. Morpho — the vault contract address.

            Every one of these values is available from the positions endpoint, with `filter[positions]=no_filter`: `attributes.pool_address` carries the pool contract address, `attributes.receipt.fungible_info.implementations[].address` the LP token or vault share address, and `attributes.receipt.nft_info` the LP NFT's `contract_address` and `token_id` — join those two with a colon.

            Addresses are case-insensitive. A syntactically valid address that matches none of the wallet's positions is not an error: the response is `200` with an all-zero series.

            These are complex (protocol) positions, so passing `filter[positions]=only_simple` alongside this filter returns `400`. Omitting `filter[positions]` applies `no_filter` rather than its usual `only_simple` default, so the selected positions are actually charted. Mutually exclusive with `filter[exclude_pool_addresses]` — combining both returns `400`.
          schema:
            type: array
            maxItems: 25
            items:
              type: string
              maxLength: 121
        - name: filter[exclude_pool_addresses]
          in: query
          style: form
          explode: false
          description: |
            Exclude specific liquidity-pool / vault positions from the balance chart (comma-separated list). The matching positions are removed; the rest of the portfolio, simple balances included, is kept.

            Values take the same form as in `filter[pool_addresses]`: the Uniswap V2 LP-token address, the Uniswap V3 pool contract address, the Uniswap V4 LP NFT as `<position_manager_address>:<token_id>`, or the ERC-4626 vault address — all obtainable from the positions endpoint, and all case-insensitive. A syntactically valid address matching none of the wallet's positions excludes nothing and returns `200`; a raw V4 pool id is rejected with `400`. `token_id` must be the canonical decimal representation of an unsigned 256-bit integer: one or more decimal digits, no leading zeros, and a value from `0` through `2^256 - 1` (`115792089237316195423570985008687907853269984665640564039457584007913129639935`), inclusive. Invalid or out-of-range values return `400`.

            These are complex (protocol) positions, so passing `filter[positions]=only_simple` alongside this filter — which would already drop every protocol position, making the exclusion a no-op — returns `400`. Omitting `filter[positions]` applies `no_filter` rather than its usual `only_simple` default. Mutually exclusive with `filter[pool_addresses]` — combining both returns `400`.
          schema:
            type: array
            maxItems: 25
            items:
              type: string
              maxLength: 121
        - name: filter[positions]
          in: query
          style: form
          explode: false
          description: |
            Which positions to include in the balance chart.
            - `only_simple` (default) — simple positions only: wallet token and native-coin balances.
            - `only_complex` — complex DeFi protocol positions only (e.g. liquidity-pool and vault positions).
            - `no_filter` — include both simple and complex positions.

            Uniswap V2, V3 and V4 liquidity positions and ERC-4626 vault positions (e.g. Morpho) are supported today, and support for more protocols is rolling out over time.

            Passing `filter[pool_addresses]` or `filter[exclude_pool_addresses]` without `filter[positions]` applies `no_filter` instead of the `only_simple` default — a pool filter selects complex positions, so the default would make it a no-op.
          schema:
            type: string
            default: only_simple
            enum:
              - only_simple
              - only_complex
              - no_filter
      responses:
        '200':
          $ref: '#/components/responses/ChartsResponse'
        '400':
          $ref: '#/components/responses/MalformedParameters'
        '401':
          $ref: '#/components/responses/UnauthenticatedError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /v1/wallets/{address}/pnl:
    get:
      operationId: getWalletPNL
      summary: Get wallet PnL
      description: |
        Returns the profit and loss (PnL) of a wallet: unrealized PnL, realized PnL and net invested amounts, with filters for asset categories such as NFTs. Calculations use FIFO (first in, first out).

        The very first request for a wallet may return a `503`, which should be retried later. Only the `503` carries a `Retry-After` header.

        Addresses Zerion does not track return a `400`. That covers contract addresses which are not smart-contract wallets; Safe and ERC-4337 accounts work as normal.

        Wallets with over 1 million actions cannot be served and return a `422` once the limit is detected.
      x-mint:
        metadata:
          description: Realized and unrealized PnL for a wallet, FIFO-based, with net invested and per-asset-category filters.
      tags:
        - wallets
      parameters:
        - $ref: '#/components/parameters/Currency'
        - $ref: '#/components/parameters/WalletAddress'
        - name: filter[chain_ids]
          in: query
          style: form
          explode: false
          description: Calculate PnL only for specified chains (comma-separated list).
          schema:
            type: array
            example:
              - ethereum
              - polygon
            maxItems: 25
            items:
              type: string
        - name: filter[fungible_ids]
          in: query
          style: form
          explode: false
          description: |
            Account only for PnL related to given fungible assets (comma-separated list). Maximum of 100 fungible IDs allowed.

            When filtering by fungible_ids or fungible_implementations, assets without available prices are automatically excluded from calculations instead of causing an error. Excluded assets are returned in the response metadata for transparency.
          schema:
            type: array
            maxItems: 100
            items:
              type: string
              maxLength: 44
        - name: filter[fungible_implementations]
          in: query
          style: form
          explode: false
          description: |
            Account only for PnL related to given fungible asset implementations (comma-separated list of chain:address pairs). Maximum of 100 implementations allowed.
            example: "base:0xae16c445d8a4082cecb49a9465e4dd5499df947d,ethereum:0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48"

            When filtering by fungible_ids or fungible_implementations, assets without available prices are automatically excluded from calculations instead of causing an error. Excluded assets are returned in the response metadata for transparency.
          schema:
            type: array
            maxItems: 100
            items:
              type: string
        - name: since
          in: query
          required: false
          description: |-
            Only account sales since the given date.
            A unix timestamp in milliseconds.
            **Note:** 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 values are supported only if fewer than 3,000 transactions sit between your timestamp and the nearest mark — otherwise the request errors out.
          schema:
            type: string
            example: '1688842525735'
            minLength: 13
            maxLength: 13
        - name: till
          in: query
          required: false
          description: |-
            Only account sales till the given date.
            A unix timestamp in milliseconds.
            **Note:** 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 values are supported only if fewer than 3,000 transactions sit between your timestamp and the nearest mark — otherwise the request errors out.
          schema:
            type: string
            example: '1688842525735'
            minLength: 13
            maxLength: 13
      responses:
        '200':
          $ref: '#/components/responses/PNLResponse'
        '400':
          $ref: '#/components/responses/MalformedParameters'
        '401':
          $ref: '#/components/responses/UnauthenticatedError'
        '422':
          $ref: '#/components/responses/QueryNotSupported'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '503':
          $ref: '#/components/responses/RetryAfter'
  /v1/wallets/{address}/portfolio:
    get:
      operationId: getWalletPortfolio
      summary: Get wallet portfolio
      description: |
        Returns the portfolio overview of a wallet, with the total value broken down by chain and by position type.

        **Simple positions by default.** `filter[positions]` defaults to `only_simple`, so the totals cover tokens held directly in the wallet and exclude DeFi protocol positions. Pass `no_filter` to have protocol positions counted too.

        **Solana limitation.** Protocol positions are not supported for Solana addresses yet.

        **See also:** [Resource IDs](https://developers.zerion.io/endpoints-and-schema#resource-ids)
      x-mint:
        metadata:
          description: A wallet's total portfolio value, broken down by chain and position type.
      tags:
        - wallets
      parameters:
        - name: filter[positions]
          in: query
          required: false
          description: |
            This parameter allows to customize the aggregation of DeFi positions within a portfolio based on their types. The aggregation can include:

              - `only_simple`: Only includes wallet-type positions, which are basic, non-protocol related assets. This is the default selection if the parameter is not specified.
              - `only_complex`: Aggregates positions associated with DeFi protocols only (e.g., staked assets, liquidity pools), like Uniswap or Aave, excluding simple wallet positions.
              - `no_filter`: Provides an aggregated view of both protocol-related and simple wallet positions without any filtering.

            The selection of filters affects the composition of the aggregated portfolio results, allowing for tailored analysis and reporting based on the types of positions of interest.

            > ⚠️ Note: Enterprise usage of this API may be subject to different pricing models depending on the selected filter type. For detailed pricing information, please contact `api@zerion.io`.
          schema:
            type: string
            default: only_simple
            enum:
              - only_simple
              - only_complex
              - no_filter
        - $ref: '#/components/parameters/Currency'
        - $ref: '#/components/parameters/WalletAddress'
      responses:
        '200':
          $ref: '#/components/responses/PortfolioResponse'
        '400':
          $ref: '#/components/responses/MalformedParameters'
        '401':
          $ref: '#/components/responses/UnauthenticatedError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /v1/wallets/{address}/positions/:
    get:
      operationId: listWalletPositions
      summary: Get wallet fungible positions
      description: |
        Returns the fungible positions of a wallet: tokens and native coins held directly, plus DeFi protocol positions when `filter[positions]` is set to `only_complex` or `no_filter`.

        **Liquidity pool positions.** A liquidity pool (Uniswap, Curve, Balancer and similar) returns one position per token in the pool, not one position for the pool. Positions from the same pool share an `attributes.group_id`, so group on that value to render a pool as a single row. A Uniswap V2 USDC/WETH pool, for example, returns a WETH position and a USDC position carrying the same `group_id`.

        **Not paginated.** All matching positions come back in a single response; there is no `links.next` and `page[size]` is ignored. Filters and sorting are applied server-side, so keep the request URL within a safe length (2000 characters is safe across virtually every client and server).

        **Solana limitation.** Protocol positions are not supported for Solana addresses yet.

        **See also:** [Testnets (`X-Env: testnet`)](https://developers.zerion.io/supported-blockchains#testnets) · [Filtering and the 2000-character URL limit](https://developers.zerion.io/pagination-and-filtering#filtering) · [Resource IDs](https://developers.zerion.io/endpoints-and-schema#resource-ids)
      x-mint:
        metadata:
          description: A wallet's token balances and DeFi positions across every supported chain, priced and ready to render.
      tags:
        - wallets
      parameters:
        - name: filter[positions]
          in: query
          required: false
          description: |
            This parameter allows users to filter DeFi positions based on their types. There are three options:

            - `only_simple`: Retrieves exclusively wallet-type positions. These are basic, non-protocol related positions. This option is applied if parameter is not specified.
            - `only_complex`: Fetches only positions associated with all DeFi protocols (including staked assets, liquidity pools, etc), like Uniswap or Aave. This option excludes simple wallet positions.
            - `no_filter`: Applies no filtering, thus returning both protocol-related and simple wallet positions.

            > ⚠️ Note: Different pricing models are applied for enterprise usage of this API, depending on the filter type selected. For detailed pricing information, please reach out to us at `api@zerion.io`.
          schema:
            type: string
            default: only_simple
            enum:
              - only_simple
              - only_complex
              - no_filter
        - $ref: '#/components/parameters/Currency'
        - $ref: '#/components/parameters/WalletAddress'
        - name: filter[position_types]
          in: query
          style: form
          explode: false
          description: |
            Keep only positions with these types (comma-separated list).

            Possible values:
            - `deposit` - Assets deposited into a DeFi protocol (e.g., supplied to lending pools, deposited in vaults, or provided as liquidity)
            - `loan` - Borrowed assets representing a debt position that needs to be repaid
            - `locked` - Assets locked for a specific period or purpose (e.g., vote-escrowed tokens, time-locked tokens)
            - `staked` - Assets staked in a protocol to earn rewards, participate in consensus, or for governance purposes
            - `reward` - Earned rewards that are claimable or have been distributed but not yet withdrawn
            - `wallet` - Regular assets held directly in the wallet, not actively deposited in any protocol
            - `investment` - Investment positions such as tokenized funds, indices, or structured products
          schema:
            type: array
            maxItems: 8
            items:
              $ref: '#/components/schemas/PositionType'
        - name: filter[chain_ids]
          in: query
          style: form
          explode: false
          description: Keep only positions from these chains (comma-separated list). Available chain ids can be found in chains endpoints.
          schema:
            type: array
            example:
              - polygon
            maxItems: 25
            items:
              type: string
        - name: filter[fungible_ids]
          in: query
          style: form
          explode: false
          description: Keep only positions related to given fungible assets (comma-separated list).
          schema:
            type: array
            maxItems: 25
            items:
              type: string
              maxLength: 44
        - name: filter[dapp_ids]
          in: query
          style: form
          explode: false
          description: Keep only positions related to these decentralized applications (dapps) (comma-separated list).
          schema:
            type: array
            example:
              - polygon
            maxItems: 25
            items:
              type: string
              maxLength: 32
              minLength: 1
        - name: filter[trash]
          in: query
          required: false
          description: Filter positions based on the `is_trash` flag. If no flag is specified, then `only_non_trash` is applied.
          schema:
            type: string
            default: only_non_trash
            enum:
              - only_trash
              - only_non_trash
              - no_filter
        - name: sort
          in: query
          required: false
          description: Choose how the result should be ordered
          schema:
            type: string
            default: value
            enum:
              - '-value'
              - value
        - name: X-Env
          in: header
          description: Custom header that allows you to get data for testnets.
          required: false
          schema:
            type: string
            enum:
              - testnet
      responses:
        '200':
          $ref: '#/components/responses/PositionsListResponse'
        '400':
          $ref: '#/components/responses/MalformedParameters'
        '401':
          $ref: '#/components/responses/UnauthenticatedError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '503':
          $ref: '#/components/responses/RetryAfter'
  /v1/wallets/{address}/transactions/:
    get:
      operationId: listWalletTransactions
      summary: Get wallet transactions
      description: |
        Returns the transactions associated with a wallet.

        **Solana limitation.** NFT transactions are not supported for Solana addresses yet.

        **See also:** [Testnets (`X-Env: testnet`)](https://developers.zerion.io/supported-blockchains#testnets) · [Filtering and the 2000-character URL limit](https://developers.zerion.io/pagination-and-filtering#filtering) · [Resource IDs](https://developers.zerion.io/endpoints-and-schema#resource-ids)
      x-mint:
        metadata:
          description: Decoded transaction history for a wallet, with transfers, approvals, fees and dapp context.
      tags:
        - wallets
      parameters:
        - $ref: '#/components/parameters/Currency'
        - $ref: '#/components/parameters/Page'
        - name: address
          in: path
          required: true
          description: Address of the wallet. Must be a valid EVM or Solana address. Returns 400 if the address is not one Zerion tracks, such as a token contract, router or exchange hot wallet. Smart-contract wallets like Safe and ERC-4337 accounts are tracked as normal.
          schema:
            type: string
        - name: filter[search_query]
          in: query
          required: false
          description: Query for a full-text search.
          schema:
            type: string
            example: Trade
            minLength: 2
            maxLength: 64
        - name: filter[operation_types]
          in: query
          required: false
          description: Return only transactions with specified types (comma-separated list). See the operation type schema for the full list of values.
          style: form
          explode: false
          schema:
            type: array
            items:
              $ref: '#/components/schemas/Type'
        - name: filter[asset_types]
          in: query
          required: false
          description: Return only transactions that contain specified asset types (comma-separated list).
          style: form
          explode: false
          schema:
            type: array
            items:
              $ref: '#/components/schemas/AssetType'
        - name: filter[chain_ids]
          in: query
          required: false
          description: Return only transactions from specified chains (comma-separated list). You can find available chain ids in chain endpoints.
          style: form
          explode: false
          schema:
            type: array
            items:
              type: string
              example: polygon
        - name: filter[fungible_ids]
          in: query
          required: false
          description: Return only transactions with fungibles with specified ids (comma-separated list).
          style: form
          explode: false
          schema:
            type: array
            items:
              type: string
              example: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48'
        - name: filter[min_mined_at]
          in: query
          required: false
          description: Return only transactions since specific date. Timestamp in milliseconds.
          schema:
            type: string
            example: '1688842525735'
            minLength: 13
            maxLength: 13
        - name: filter[max_mined_at]
          in: query
          required: false
          description: Return only transactions until specific date. Timestamp in milliseconds.
          schema:
            type: string
            example: '1694192535967'
            minLength: 13
            maxLength: 13
        - name: filter[trash]
          in: query
          required: false
          description: Filter transactions based on the `is_trash` flag. If no flag is specified, then `no_filter` is applied.
          schema:
            type: string
            default: no_filter
            enum:
              - only_trash
              - only_non_trash
              - no_filter
        - name: filter[fungible_implementations]
          in: query
          style: form
          explode: false
          required: false
          description: |
            Specify implementations of fungible tokens as a comma-separated list of `chain:address` pairs.

            Example format: `ethereum:0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48,polygon:0x123456789abcdef123456789abcdef123456789`

            Each item consists of a blockchain `chain_id` and an `address`, separated by a colon (`:`). Multiple pairs can be provided using commas (`,`).
          schema:
            type: array
            items:
              type: string
              example: ethereum:0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
        - name: X-Env
          in: header
          description: Custom header that allows you to get data for testnets.
          required: false
          schema:
            type: string
            enum:
              - testnet
      responses:
        '200':
          $ref: '#/components/responses/TransactionsListResponse'
        '400':
          $ref: '#/components/responses/MalformedParameters'
        '401':
          $ref: '#/components/responses/UnauthenticatedError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /v1/wallets/{address}/nft-positions/:
    get:
      operationId: listWalletNFTPositions
      summary: Get wallet NFT positions
      description: |
        Returns the NFT positions held by a wallet.

        **First request for a new wallet.** If the address has not been indexed before, this endpoint returns a `202` while the data is being prepared. Poll until you get a `200`, and give up after about two minutes: past that, a `202` almost always means something went wrong rather than that the wallet is still loading.

        **See also:** [Testnets (`X-Env: testnet`)](https://developers.zerion.io/supported-blockchains#testnets) · [Filtering and the 2000-character URL limit](https://developers.zerion.io/pagination-and-filtering#filtering) · [Resource IDs](https://developers.zerion.io/endpoints-and-schema#resource-ids)
      x-mint:
        metadata:
          description: Every NFT a wallet holds, with media, traits, collection and floor price.
      tags:
        - wallets
      parameters:
        - $ref: '#/components/parameters/EVMWalletAddress'
        - name: filter[chain_ids]
          in: query
          style: form
          explode: false
          description: Keep only positions from the specified chains (comma-separated list). Available chains IDs can be found in chains endpoint.
          schema:
            type: array
            example:
              - ethereum
              - polygon
            maxItems: 25
            items:
              type: string
        - name: filter[collections_ids]
          in: query
          style: form
          explode: false
          description: Keep only positions from collections with specified IDs (comma-separated list). The IDs are returned inside the 'collection' field of each NFT.
          schema:
            type: array
            items:
              type: integer
              format: int64
        - name: sort
          in: query
          required: false
          description: The order of NFTs in the result.
          schema:
            type: string
            example: '-floor_price'
            enum:
              - created_at
              - '-created_at'
              - floor_price
              - '-floor_price'
        - name: include
          in: query
          required: false
          style: form
          explode: false
          description: Array of related resources to be included to the response (comma-separated list). This parameter corresponds to the JSON API schema.
          schema:
            type: array
            items:
              type: string
              example: nfts
              enum:
                - nfts
                - nft_collections
                - wallet_nft_collections
        - $ref: '#/components/parameters/Currency'
        - $ref: '#/components/parameters/NFTPositionsPage'
        - name: X-Env
          in: header
          description: Custom header that allows you to get data for testnets.
          required: false
          schema:
            type: string
            enum:
              - testnet
      responses:
        '200':
          $ref: '#/components/responses/NFTPositionsResponse'
        '202':
          $ref: '#/components/responses/NFTPositionsProcessingResponse'
        '400':
          $ref: '#/components/responses/MalformedParameters'
        '401':
          $ref: '#/components/responses/UnauthenticatedError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /v1/wallets/{address}/nft-collections/:
    get:
      operationId: listWalletNFTCollections
      summary: Get wallet NFT collections
      description: |
        Returns the NFT collections held by a wallet.

        **First request for a new wallet.** If the address has not been indexed before, this endpoint returns a `202` while the data is being prepared. Poll until you get a `200`, and give up after about two minutes: past that, a `202` almost always means something went wrong rather than that the wallet is still loading.

        **See also:** [Testnets (`X-Env: testnet`)](https://developers.zerion.io/supported-blockchains#testnets) · [Filtering and the 2000-character URL limit](https://developers.zerion.io/pagination-and-filtering#filtering) · [Resource IDs](https://developers.zerion.io/endpoints-and-schema#resource-ids)
      x-mint:
        metadata:
          description: The NFT collections a wallet holds, with per-collection holdings count and floor price.
      tags:
        - wallets
      parameters:
        - $ref: '#/components/parameters/EVMWalletAddress'
        - name: filter[chain_ids]
          in: query
          style: form
          explode: false
          description: Keep only collections from the specified chains (comma-separated list). Available chain IDs can be found in the chains endpoint.
          schema:
            type: array
            example:
              - ethereum
              - polygon
            maxItems: 25
            items:
              type: string
        - $ref: '#/components/parameters/WalletNFTCollectionsSort'
        - $ref: '#/components/parameters/Currency'
        - name: include
          in: query
          required: false
          style: form
          explode: false
          description: Array of related resources to be included to the response (comma-separated list). This parameter corresponds to the JSON API schema.
          schema:
            type: array
            items:
              type: string
              example: nft_collections
              enum:
                - nft_collections
        - name: X-Env
          in: header
          description: Custom header that allows you to get data for testnets.
          required: false
          schema:
            type: string
            enum:
              - testnet
      responses:
        '200':
          $ref: '#/components/responses/NFTCollectionsResponse'
        '202':
          $ref: '#/components/responses/NFTCollectionsProcessingResponse'
        '400':
          $ref: '#/components/responses/MalformedParameters'
        '401':
          $ref: '#/components/responses/UnauthenticatedError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /v1/wallets/{address}/nft-portfolio:
    get:
      operationId: getWalletNftPortfolio
      summary: Get wallet NFT portfolio
      description: |
        Returns the NFT portfolio overview of a wallet.

        **First request for a new wallet.** If the address has not been indexed before, this endpoint returns a `202` while the data is being prepared. Poll until you get a `200`, and give up after about two minutes: past that, a `202` almost always means something went wrong rather than that the wallet is still loading.

        **See also:** [Testnets (`X-Env: testnet`)](https://developers.zerion.io/supported-blockchains#testnets)
      x-mint:
        metadata:
          description: Aggregate NFT portfolio value for a wallet, totalled from floor prices across chains.
      tags:
        - wallets
      parameters:
        - $ref: '#/components/parameters/Currency'
        - $ref: '#/components/parameters/EVMWalletAddress'
        - name: X-Env
          in: header
          description: Custom header that allows you to get data for testnets.
          required: false
          schema:
            type: string
            enum:
              - testnet
      responses:
        '200':
          $ref: '#/components/responses/NFTPortfolioResponse'
        '202':
          $ref: '#/components/responses/NFTPortfolioProcessingResponse'
        '400':
          $ref: '#/components/responses/MalformedParameters'
        '401':
          $ref: '#/components/responses/UnauthenticatedError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /v1/wallet-sets/charts/{chart_period}:
    get:
      operationId: getWalletSetChart
      summary: Get wallet set balance chart
      description: |
        Returns a portfolio balance chart for a wallet set over a time period, based on the start and end timestamps you pass. A wallet set is one EVM address, one Solana address, or both; at least one is required. Results can be filtered by chain and asset type.

        **Complex positions.** By default the chart counts only simple positions: token and native-coin balances held directly in the wallet. Set `filter[positions]` to `only_complex` or `no_filter` to also include complex DeFi protocol positions. Uniswap V2, V3 and V4 liquidity positions and ERC-4626 vault positions (e.g. Morpho) are supported today, and support for more protocols is rolling out over time. Positions that aren't yet supported are omitted from the chart, whether the whole protocol is unsupported or only that individual position.
      x-mint:
        metadata:
          description: Combined portfolio value over time for an EVM and Solana address, filterable by chain and asset type.
      tags:
        - wallet sets
      parameters:
        - $ref: '#/components/parameters/WalletSetAddresses'
        - $ref: '#/components/parameters/ChartPeriod'
        - $ref: '#/components/parameters/Currency'
        - name: filter[chain_ids]
          in: query
          style: form
          explode: false
          description: Account only for balance on these chains (comma-separated list). Available chain ids can be found in chains endpoints.
          schema:
            type: array
            example:
              - aurora
            maxItems: 25
            items:
              type: string
        - name: filter[fungible_ids]
          in: query
          style: form
          explode: false
          description: Account only for balance of given fungible assets (comma-separated list). Mutually exclusive with `filter[exclude_fungible_ids]` — combining both returns `400`.
          schema:
            type: array
            maxItems: 25
            items:
              type: string
              maxLength: 44
        - name: filter[exclude_fungible_ids]
          in: query
          style: form
          explode: false
          description: Exclude balance contributions from the given fungible assets (comma-separated list). Useful when the set you want to keep is large but the set you want to omit is small. Mutually exclusive with `filter[fungible_ids]` — combining both returns `400`.
          schema:
            type: array
            maxItems: 25
            items:
              type: string
              maxLength: 44
        - name: filter[pool_addresses]
          in: query
          style: form
          explode: false
          description: |
            Restrict the balance chart to specific liquidity-pool / vault positions (comma-separated list). Only the matching protocol positions are charted; simple token and native-coin balances are excluded.

            Each protocol is identified by a different value:

            - **Uniswap V2** — the LP-token contract address, e.g. `0xb4e16d0168e52d35cacd2c6185b44281ec28c9dc`.
            - **Uniswap V3** — the pool contract address, e.g. `0x4e68ccd3e89f51c3074ca5072bbac773960dfa36`.
            - **Uniswap V4** — the LP NFT, written as `<position_manager_address>:<token_id>`, e.g. `0xbd216513d74c8cf14cf4747e6aaa6420ff64ee9e:229217`. `token_id` must be the canonical decimal representation of an unsigned 256-bit integer: one or more decimal digits, no leading zeros, and a value from `0` through `2^256 - 1` (`115792089237316195423570985008687907853269984665640564039457584007913129639935`), inclusive. Invalid or out-of-range values return `400`. Raw V4 pool IDs are 32-byte hashes, not contract addresses, and return `400`. Uniswap V3 also accepts the LP NFT form; it selects the same position as the pool contract address.
            - **ERC-4626 vaults**, e.g. Morpho — the vault contract address.

            Every one of these values is available from the positions endpoint, with `filter[positions]=no_filter`: `attributes.pool_address` carries the pool contract address, `attributes.receipt.fungible_info.implementations[].address` the LP token or vault share address, and `attributes.receipt.nft_info` the LP NFT's `contract_address` and `token_id` — join those two with a colon.

            Addresses are case-insensitive. A syntactically valid address that matches none of the wallet's positions is not an error: the response is `200` with an all-zero series.

            These are complex (protocol) positions, so passing `filter[positions]=only_simple` alongside this filter returns `400`. Omitting `filter[positions]` applies `no_filter` rather than its usual `only_simple` default, so the selected positions are actually charted. Mutually exclusive with `filter[exclude_pool_addresses]` — combining both returns `400`.
          schema:
            type: array
            maxItems: 25
            items:
              type: string
              maxLength: 121
        - name: filter[exclude_pool_addresses]
          in: query
          style: form
          explode: false
          description: |
            Exclude specific liquidity-pool / vault positions from the balance chart (comma-separated list). The matching positions are removed; the rest of the portfolio, simple balances included, is kept.

            Values take the same form as in `filter[pool_addresses]`: the Uniswap V2 LP-token address, the Uniswap V3 pool contract address, the Uniswap V4 LP NFT as `<position_manager_address>:<token_id>`, or the ERC-4626 vault address — all obtainable from the positions endpoint, and all case-insensitive. A syntactically valid address matching none of the wallet's positions excludes nothing and returns `200`; a raw V4 pool id is rejected with `400`. `token_id` must be the canonical decimal representation of an unsigned 256-bit integer: one or more decimal digits, no leading zeros, and a value from `0` through `2^256 - 1` (`115792089237316195423570985008687907853269984665640564039457584007913129639935`), inclusive. Invalid or out-of-range values return `400`.

            These are complex (protocol) positions, so passing `filter[positions]=only_simple` alongside this filter — which would already drop every protocol position, making the exclusion a no-op — returns `400`. Omitting `filter[positions]` applies `no_filter` rather than its usual `only_simple` default. Mutually exclusive with `filter[pool_addresses]` — combining both returns `400`.
          schema:
            type: array
            maxItems: 25
            items:
              type: string
              maxLength: 121
        - name: filter[positions]
          in: query
          style: form
          explode: false
          description: |
            Which positions to include in the balance chart.
            - `only_simple` (default) — simple positions only: wallet token and native-coin balances.
            - `only_complex` — complex DeFi protocol positions only (e.g. liquidity-pool and vault positions).
            - `no_filter` — include both simple and complex positions.

            Uniswap V2, V3 and V4 liquidity positions and ERC-4626 vault positions (e.g. Morpho) are supported today, and support for more protocols is rolling out over time.

            Passing `filter[pool_addresses]` or `filter[exclude_pool_addresses]` without `filter[positions]` applies `no_filter` instead of the `only_simple` default — a pool filter selects complex positions, so the default would make it a no-op.
          schema:
            type: string
            default: only_simple
            enum:
              - only_simple
              - only_complex
              - no_filter
      responses:
        '200':
          $ref: '#/components/responses/ChartsResponse-2'
        '400':
          $ref: '#/components/responses/MalformedParameters'
        '401':
          $ref: '#/components/responses/UnauthenticatedError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /v1/wallet-sets/pnl:
    get:
      operationId: getWalletSetPNL
      summary: Get wallet set PnL
      description: |
        Returns the profit and loss (PnL) of a wallet set: unrealized PnL, realized PnL and net invested amounts, with filters for asset categories such as NFTs. Calculations use FIFO (first in, first out). A wallet set is one EVM address, one Solana address, or both; at least one is required.

        The very first request for a wallet set may return a `503`, which should be retried later. Only the `503` carries a `Retry-After` header.

        Addresses Zerion does not track return a `400`. That covers contract addresses which are not smart-contract wallets; Safe and ERC-4337 accounts work as normal.

        The 1 million action limit applies per address: if any address in the set is over it, the request returns a `422` once the limit is detected.
      x-mint:
        metadata:
          description: Realized and unrealized PnL across an EVM and Solana address combined, FIFO-based.
      tags:
        - wallet sets
      parameters:
        - $ref: '#/components/parameters/WalletSetAddresses'
        - $ref: '#/components/parameters/Currency'
        - name: filter[chain_ids]
          in: query
          style: form
          explode: false
          description: Calculate PnL only for specified chains (comma-separated list).
          schema:
            type: array
            example:
              - ethereum
              - polygon
            maxItems: 25
            items:
              type: string
        - name: filter[fungible_ids]
          in: query
          style: form
          explode: false
          description: |
            Account only for PnL related to given fungible assets (comma-separated list). Maximum of 100 fungible IDs allowed.

            When filtering by fungible_ids or fungible_implementations, assets without available prices are automatically excluded from calculations instead of causing an error. Excluded assets are returned in the response metadata for transparency.
          schema:
            type: array
            maxItems: 100
            items:
              type: string
              maxLength: 44
        - name: filter[fungible_implementations]
          in: query
          style: form
          explode: false
          description: |
            Account only for PnL related to given fungible asset implementations (comma-separated list of chain:address pairs). Maximum of 100 implementations allowed.
            example: "base:0xae16c445d8a4082cecb49a9465e4dd5499df947d,ethereum:0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48"

            When filtering by fungible_ids or fungible_implementations, assets without available prices are automatically excluded from calculations instead of causing an error. Excluded assets are returned in the response metadata for transparency.
          schema:
            type: array
            maxItems: 100
            items:
              type: string
        - name: since
          in: query
          required: false
          description: |-
            Only account sales since the given date.
            A unix timestamp in milliseconds.
            **Note:** 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 values are supported only if fewer than 3,000 transactions sit between your timestamp and the nearest mark — otherwise the request errors out.
          schema:
            type: string
            example: '1688842525735'
            minLength: 13
            maxLength: 13
        - name: till
          in: query
          required: false
          description: |-
            Only account sales till the given date.
            A unix timestamp in milliseconds.
            **Note:** 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 values are supported only if fewer than 3,000 transactions sit between your timestamp and the nearest mark — otherwise the request errors out.
          schema:
            type: string
            example: '1688842525735'
            minLength: 13
            maxLength: 13
      responses:
        '200':
          $ref: '#/components/responses/PNLResponse-2'
        '400':
          $ref: '#/components/responses/MalformedParameters'
        '401':
          $ref: '#/components/responses/UnauthenticatedError'
        '422':
          $ref: '#/components/responses/QueryNotSupported'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '503':
          $ref: '#/components/responses/RetryAfter'
  /v1/wallet-sets/portfolio:
    get:
      operationId: getWalletSetPortfolio
      summary: Get wallet set portfolio
      description: |
        Returns the portfolio overview of a wallet set, with the total value broken down by chain and by position type. A wallet set is one EVM address, one Solana address, or both; at least one is required.

        **Simple positions by default.** `filter[positions]` defaults to `only_simple`, so the totals cover tokens held directly in the wallet and exclude DeFi protocol positions. Pass `no_filter` to have protocol positions counted too.

        **Solana limitation.** Protocol positions are not supported for Solana addresses yet.

        **See also:** [Resource IDs](https://developers.zerion.io/endpoints-and-schema#resource-ids)
      x-mint:
        metadata:
          description: Combined portfolio value for an EVM and Solana address, broken down by chain and position type.
      tags:
        - wallet sets
      parameters:
        - $ref: '#/components/parameters/WalletSetAddresses'
        - name: filter[positions]
          in: query
          required: false
          description: |
            This parameter allows to customize the aggregation of DeFi positions within a portfolio based on their types. The aggregation can include:

              - `only_simple`: Only includes wallet-type positions, which are basic, non-protocol related assets. This is the default selection if the parameter is not specified.
              - `only_complex`: Aggregates positions associated with DeFi protocols only (e.g., staked assets, liquidity pools), like Uniswap or Aave, excluding simple wallet positions.
              - `no_filter`: Provides an aggregated view of both protocol-related and simple wallet positions without any filtering.

            The selection of filters affects the composition of the aggregated portfolio results, allowing for tailored analysis and reporting based on the types of positions of interest.

            > ⚠️ Note: Enterprise usage of this API may be subject to different pricing models depending on the selected filter type. For detailed pricing information, please contact `api@zerion.io`.
          schema:
            type: string
            default: only_simple
            enum:
              - only_simple
              - only_complex
              - no_filter
        - $ref: '#/components/parameters/Currency'
      responses:
        '200':
          $ref: '#/components/responses/PortfolioResponse-2'
        '400':
          $ref: '#/components/responses/MalformedParameters'
        '401':
          $ref: '#/components/responses/UnauthenticatedError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /v1/wallet-sets/positions/:
    get:
      operationId: listWalletSetPositions
      summary: Get wallet set fungible positions
      description: |
        Returns the fungible positions of a wallet set: tokens and native coins held directly, plus DeFi protocol positions when `filter[positions]` is set to `only_complex` or `no_filter`. A wallet set is one EVM address, one Solana address, or both; at least one is required.

        **Liquidity pool positions.** A liquidity pool (Uniswap, Curve, Balancer and similar) returns one position per token in the pool, not one position for the pool. Positions from the same pool share an `attributes.group_id`, so group on that value to render a pool as a single row. A Uniswap V2 USDC/WETH pool, for example, returns a WETH position and a USDC position carrying the same `group_id`.

        **Not paginated.** All matching positions come back in a single response; there is no `links.next` and `page[size]` is ignored. Filters and sorting are applied server-side, so keep the request URL within a safe length (2000 characters is safe across virtually every client and server).

        **Solana limitation.** Protocol positions are not supported for Solana addresses yet.

        **See also:** [Testnets (`X-Env: testnet`)](https://developers.zerion.io/supported-blockchains#testnets) · [Filtering and the 2000-character URL limit](https://developers.zerion.io/pagination-and-filtering#filtering) · [Resource IDs](https://developers.zerion.io/endpoints-and-schema#resource-ids)
      x-mint:
        metadata:
          description: Token balances and DeFi positions across an EVM and Solana address, returned as one combined set.
      tags:
        - wallet sets
      parameters:
        - $ref: '#/components/parameters/WalletSetAddresses'
        - name: filter[positions]
          in: query
          required: false
          description: |
            This parameter allows users to filter DeFi positions based on their types. There are three options:

            - `only_simple`: Retrieves exclusively wallet-type positions. These are basic, non-protocol related positions. This option is applied if parameter is not specified.
            - `only_complex`: Fetches only positions associated with all DeFi protocols (including staked assets, liquidity pools, etc), like Uniswap or Aave. This option excludes simple wallet positions.
            - `no_filter`: Applies no filtering, thus returning both protocol-related and simple wallet positions.

            > ⚠️ Note: Different pricing models are applied for enterprise usage of this API, depending on the filter type selected. For detailed pricing information, please reach out to us at `api@zerion.io`.
          schema:
            type: string
            default: only_simple
            enum:
              - only_simple
              - only_complex
              - no_filter
        - $ref: '#/components/parameters/Currency'
        - name: filter[position_types]
          in: query
          style: form
          explode: false
          description: |
            Keep only positions with these types (comma-separated list).

            Possible values:
            - `deposit` - Assets deposited into a DeFi protocol (e.g., supplied to lending pools, deposited in vaults, or provided as liquidity)
            - `loan` - Borrowed assets representing a debt position that needs to be repaid
            - `locked` - Assets locked for a specific period or purpose (e.g., vote-escrowed tokens, time-locked tokens)
            - `staked` - Assets staked in a protocol to earn rewards, participate in consensus, or for governance purposes
            - `reward` - Earned rewards that are claimable or have been distributed but not yet withdrawn
            - `wallet` - Regular assets held directly in the wallet, not actively deposited in any protocol
            - `investment` - Investment positions such as tokenized funds, indices, or structured products
          schema:
            type: array
            maxItems: 8
            items:
              $ref: '#/components/schemas/PositionType'
        - name: filter[chain_ids]
          in: query
          style: form
          explode: false
          description: Keep only positions from these chains (comma-separated list). Available chain ids can be found in chains endpoints.
          schema:
            type: array
            example:
              - polygon
            maxItems: 25
            items:
              type: string
        - name: filter[fungible_ids]
          in: query
          style: form
          explode: false
          description: Keep only positions related to given fungible assets (comma-separated list).
          schema:
            type: array
            maxItems: 25
            items:
              type: string
              maxLength: 44
        - name: filter[dapp_ids]
          in: query
          style: form
          explode: false
          description: Keep only positions related to these decentralized applications (dapps) (comma-separated list).
          schema:
            type: array
            example:
              - polygon
            maxItems: 25
            items:
              type: string
              maxLength: 32
              minLength: 1
        - name: filter[trash]
          in: query
          required: false
          description: Filter positions based on the `is_trash` flag. If no flag is specified, then `only_non_trash` is applied.
          schema:
            type: string
            default: only_non_trash
            enum:
              - only_trash
              - only_non_trash
              - no_filter
        - name: sort
          in: query
          required: false
          description: Choose how the result should be ordered
          schema:
            type: string
            default: value
            enum:
              - '-value'
              - value
        - name: X-Env
          in: header
          description: Custom header that allows you to get data for testnets.
          required: false
          schema:
            type: string
            enum:
              - testnet
      responses:
        '200':
          $ref: '#/components/responses/PositionsListResponse-2'
        '400':
          $ref: '#/components/responses/MalformedParameters'
        '401':
          $ref: '#/components/responses/UnauthenticatedError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /v1/wallet-sets/transactions/:
    get:
      operationId: listWalletSetTransactions
      summary: Get wallet set transactions
      description: |
        Returns the transactions associated with a wallet set. A wallet set is one EVM address, one Solana address, or both; at least one is required.

        **Solana limitation.** NFT transactions are not supported for Solana addresses yet.

        **See also:** [Testnets (`X-Env: testnet`)](https://developers.zerion.io/supported-blockchains#testnets) · [Filtering and the 2000-character URL limit](https://developers.zerion.io/pagination-and-filtering#filtering) · [Resource IDs](https://developers.zerion.io/endpoints-and-schema#resource-ids)
      x-mint:
        metadata:
          description: Decoded transaction history across an EVM and Solana address, merged into one timeline.
      tags:
        - wallet sets
      parameters:
        - $ref: '#/components/parameters/WalletSetAddresses'
        - $ref: '#/components/parameters/Currency'
        - $ref: '#/components/parameters/Page'
        - name: filter[search_query]
          in: query
          required: false
          description: Query for a full-text search.
          schema:
            type: string
            example: Trade
            minLength: 2
            maxLength: 64
        - name: filter[operation_types]
          in: query
          required: false
          description: Return only transactions with specified types (comma-separated list). See the operation type schema for the full list of values.
          style: form
          explode: false
          schema:
            type: array
            items:
              $ref: '#/components/schemas/Type'
        - name: filter[asset_types]
          in: query
          required: false
          description: Return only transactions that contain specified asset types (comma-separated list).
          style: form
          explode: false
          schema:
            type: array
            items:
              $ref: '#/components/schemas/AssetType'
        - name: filter[chain_ids]
          in: query
          required: false
          description: Return only transactions from specified chains (comma-separated list). You can find available chain ids in chain endpoints.
          style: form
          explode: false
          schema:
            type: array
            items:
              type: string
              example: polygon
        - name: filter[fungible_ids]
          in: query
          required: false
          description: Return only transactions with fungibles with specified ids (comma-separated list).
          style: form
          explode: false
          schema:
            type: array
            items:
              type: string
              example: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48'
        - name: filter[min_mined_at]
          in: query
          required: false
          description: Return only transactions since specific date. Timestamp in milliseconds.
          schema:
            type: string
            example: '1688842525735'
            minLength: 13
            maxLength: 13
        - name: filter[max_mined_at]
          in: query
          required: false
          description: Return only transactions until specific date. Timestamp in milliseconds.
          schema:
            type: string
            example: '1694192535967'
            minLength: 13
            maxLength: 13
        - name: filter[trash]
          in: query
          required: false
          description: Filter transactions based on the `is_trash` flag. If no flag is specified, then `no_filter` is applied.
          schema:
            type: string
            default: no_filter
            enum:
              - only_trash
              - only_non_trash
              - no_filter
        - name: filter[fungible_implementations]
          in: query
          style: form
          explode: false
          required: false
          description: |
            Specify implementations of fungible tokens as a comma-separated list of `chain:address` pairs.

            Example format: `ethereum:0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48,polygon:0x123456789abcdef123456789abcdef123456789`

            Each item consists of a blockchain `chain_id` and an `address`, separated by a colon (`:`). Multiple pairs can be provided using commas (`,`).
          schema:
            type: array
            items:
              type: string
              example: ethereum:0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48
        - name: X-Env
          in: header
          description: Custom header that allows you to get data for testnets.
          required: false
          schema:
            type: string
            enum:
              - testnet
      responses:
        '200':
          $ref: '#/components/responses/TransactionsListResponse-2'
        '400':
          $ref: '#/components/responses/MalformedParameters'
        '401':
          $ref: '#/components/responses/UnauthenticatedError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /v1/fungibles/:
    get:
      operationId: listFungibles
      summary: Get list of fungible assets
      description: |
        Returns a paginated list of the fungible assets Zerion supports, with search and filtering. When nothing matches the filters, the response is an empty list with a `200` status.

        `filter[implementation_address]` ignores `filter[search_query]`. This may change in the future.

        **See also:** [Filtering and the 2000-character URL limit](https://developers.zerion.io/pagination-and-filtering#filtering) · [Resource IDs](https://developers.zerion.io/endpoints-and-schema#resource-ids)
      x-mint:
        metadata:
          description: Search and filter the token catalog Zerion supports, with prices, market data and per-chain implementations.
      tags:
        - fungibles
      parameters:
        - $ref: '#/components/parameters/Currency'
        - $ref: '#/components/parameters/Page'
        - name: filter[search_query]
          in: query
          required: false
          description: Query for a full-text search.
          schema:
            type: string
            example: Index
            minLength: 1
            maxLength: 66
        - name: filter[implementation_chain_id]
          in: query
          required: false
          description: Keep only fungibles from this chain. Available chain ids can be found in chains endpoints.
          schema:
            type: string
            example: polygon
        - name: filter[implementation_address]
          in: query
          required: false
          description: Keep only fungibles deployed at given address. Is it possible that different fungibles are deployed at the same address on different chains.
          schema:
            type: string
            minLength: 32
            maxLength: 44
            example: '0x2af1df3ab0ab157e1e2ad8f88a7d04fbea0c7dc6'
        - name: filter[fungible_implementations]
          in: query
          required: false
          style: form
          explode: false
          description: |
            Keep only fungibles with given implementations (comma-separated list of chain:address pairs). Maximum of 25 implementations allowed.
            example: "base,ethereum:0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48"

            This filter is mutually exclusive with `filter[implementation_chain_id]` and `filter[implementation_address]`.
          schema:
            type: array
            maxItems: 25
            items:
              type: string
        - name: filter[fungible_ids]
          in: query
          required: false
          description: Keep only fungibles with the given ids (comma-separated list)
          style: form
          explode: false
          schema:
            type: array
            maxItems: 25
            items:
              type: string
              maxLength: 44
        - $ref: '#/components/parameters/FilterAssetClass'
        - $ref: '#/components/parameters/FilterHasAssetClass'
        - name: sort
          in: query
          required: false
          description: Choose how the result should be ordered
          schema:
            type: string
            enum:
              - '-market_data.market_cap'
              - market_data.market_cap
              - '-market_data.price.last'
              - market_data.price.last
              - '-market_data.price.percent_change_1d'
              - market_data.price.percent_change_1d
              - '-market_data.price.percent_change_30d'
              - market_data.price.percent_change_30d
              - '-market_data.price.percent_change_90d'
              - market_data.price.percent_change_90d
              - '-market_data.price.percent_change_365d'
              - market_data.price.percent_change_365d
              - '-market_data.trading_volumes.volume_1d'
              - market_data.trading_volumes.volume_1d
      responses:
        '200':
          $ref: '#/components/responses/FungiblesListResponse'
        '400':
          $ref: '#/components/responses/MalformedParameters'
        '401':
          $ref: '#/components/responses/UnauthenticatedError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /v1/fungibles/{fungible_id}:
    get:
      operationId: getFungibleById
      summary: Get fungible asset by ID
      description: |
        Returns a fungible asset by its unique identifier.
      x-mint:
        metadata:
          description: Metadata, current price and market data for a single token, by its Zerion fungible ID.
      tags:
        - fungibles
      parameters:
        - name: fungible_id
          in: path
          required: true
          description: Unique fungible ID
          schema:
            type: string
            maxLength: 44
        - $ref: '#/components/parameters/Currency'
      responses:
        '200':
          $ref: '#/components/responses/SingleFungibleResponse'
        '400':
          $ref: '#/components/responses/MalformedParameters'
        '401':
          $ref: '#/components/responses/UnauthenticatedError'
        '404':
          $ref: '#/components/responses/NotFoundResponse'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /v1/fungibles/{fungible_id}/charts/{chart_period}:
    get:
      operationId: getFungibleChart
      summary: Get a chart for a fungible asset
      description: |
        Returns the price chart for a fungible asset over a selected period.
      x-mint:
        metadata:
          description: Historical price chart for a token over a selected period, by Zerion fungible ID.
      tags:
        - fungibles
      parameters:
        - name: fungible_id
          in: path
          required: true
          description: Unique fungible ID
          schema:
            type: string
            maxLength: 44
        - $ref: '#/components/parameters/ChartPeriod'
        - $ref: '#/components/parameters/Currency'
      responses:
        '200':
          $ref: '#/components/responses/SingleFungibleChartResponse'
        '400':
          $ref: '#/components/responses/MalformedParameters'
        '401':
          $ref: '#/components/responses/UnauthenticatedError'
        '404':
          $ref: '#/components/responses/NotFoundResponse'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '503':
          $ref: '#/components/responses/RetryAfter'
  /v1/fungibles/by-implementation:
    get:
      operationId: getFungibleByImplementation
      summary: Get fungible asset by implementation
      description: |
        Returns a fungible asset by its implementation, so you can look it up by chain and contract address without knowing its Zerion ID.

        An implementation is either a `chain` on its own (for a native coin) or a `chain:address` pair, for example `ethereum` or `ethereum:0xa5a4214bb5f00c86b7969b7dc007302e4f6f05d6`.
      x-mint:
        metadata:
          description: Look up a token by chain and contract address, without knowing its Zerion fungible ID.
      tags:
        - fungibles
      parameters:
        - name: implementation
          in: query
          required: true
          description: |
            Fungible implementation in the format `chain` or `chain:address`
            (e.g., "ethereum:0xa5a4214bb5f00c86b7969b7dc007302e4f6f05d6").

            If only the chain is provided without an address (e.g., "ethereum"), it will return the base asset of that chain.
          schema:
            type: string
        - $ref: '#/components/parameters/Currency'
      responses:
        '200':
          $ref: '#/components/responses/SingleFungibleResponse'
        '400':
          $ref: '#/components/responses/MalformedParameters'
        '401':
          $ref: '#/components/responses/UnauthenticatedError'
        '404':
          $ref: '#/components/responses/NotFoundResponse'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /v1/fungibles/by-implementation/charts/{chart_period}:
    get:
      operationId: getFungibleChartByImplementation
      summary: Get a chart for a fungible asset by implementation
      description: |
        Returns the price chart for a fungible asset over a selected period, identified by its implementation.

        An implementation is a `chain:address` pair, for example `ethereum:0xa5a4214bb5f00c86b7969b7dc007302e4f6f05d6`.
      x-mint:
        metadata:
          description: Historical price chart for a token, addressed by chain and contract address instead of Zerion fungible ID.
      tags:
        - fungibles
      parameters:
        - name: implementation
          in: query
          required: true
          description: |
            Fungible implementation in the format chain:address
            (e.g., "ethereum:0xa5a4214bb5f00c86b7969b7dc007302e4f6f05d6").

            If only the chain is provided without an address (e.g., "ethereum"), it will return the chart for the base asset of that chain.
          schema:
            type: string
        - $ref: '#/components/parameters/ChartPeriod'
        - $ref: '#/components/parameters/Currency'
      responses:
        '200':
          $ref: '#/components/responses/SingleFungibleChartResponse'
        '400':
          $ref: '#/components/responses/MalformedParameters'
        '401':
          $ref: '#/components/responses/UnauthenticatedError'
        '404':
          $ref: '#/components/responses/NotFoundResponse'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '503':
          $ref: '#/components/responses/RetryAfter'
  /v1/chains/:
    get:
      operationId: listChains
      summary: Get list of all chains
      description: |
        Returns every chain supported by Zerion, with the chain IDs used by all other endpoints. Useful for populating chain selectors or validating a chain ID before calling anything else.

        **See also:** [Testnets (`X-Env: testnet`)](https://developers.zerion.io/supported-blockchains#testnets)
      x-mint:
        metadata:
          description: Every blockchain the Zerion API supports, with the chain IDs, icons, native assets and feature flags used by all other endpoints.
      tags:
        - chains
      parameters:
        - name: X-Env
          in: header
          description: Custom header that allows you to get data for testnets.
          required: false
          schema:
            type: string
            enum:
              - testnet
      responses:
        '200':
          $ref: '#/components/responses/ChainsListResponse'
        '400':
          $ref: '#/components/responses/MalformedParameters'
        '401':
          $ref: '#/components/responses/UnauthenticatedError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /v1/chains/{chain_id}:
    get:
      operationId: getChainById
      summary: Get chain by ID
      description: |
        Returns a single chain by its unique chain ID.

        **See also:** [Testnets (`X-Env: testnet`)](https://developers.zerion.io/supported-blockchains#testnets)
      x-mint:
        metadata:
          description: Look up one supported chain by its chain ID, with name, icon, native asset and per-chain feature flags.
      tags:
        - chains
      parameters:
        - name: chain_id
          in: path
          required: true
          description: Unique chain ID
          schema:
            type: string
        - name: X-Env
          in: header
          description: Custom header that allows you to get data for testnets.
          required: false
          schema:
            type: string
            enum:
              - testnet
      responses:
        '200':
          $ref: '#/components/responses/SingleChainResponse'
        '400':
          $ref: '#/components/responses/MalformedParameters'
        '401':
          $ref: '#/components/responses/UnauthenticatedError'
        '404':
          $ref: '#/components/responses/NotFoundResponse'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /v1/swap/quotes/:
    get:
      operationId: swapQuotes
      summary: Get swap and bridge quotes
      description: |
        Returns quotes from multiple liquidity sources for a same-chain swap or a cross-chain bridge between two fungible assets. Supports EVM chains and Solana, including EVM ↔ Solana bridges.

        **Liquidity sources.** Each quote comes from one DEX, aggregator, or bridge, identified by `liquidity_source` in the response. Supported sources include 0x Exchange, 1inch, Bungee, Jupiter, KyberSwap, LI.FI, Relay, Uniswap, and Velora. The set evolves over time, so read `liquidity_source.id` from the response instead of hardcoding source names.

        Quotes are returned best-first: sorted in descending order by the fiat value of `output_amount_after_fees` (output amount minus network, protocol and bridge fees that are not already included in the rate). Quotes with the same score are tied-broken alphabetically by `liquidity_source.id`, so identical requests always return quotes in the same order.

        The `input` and `output` parameters are objects encoded with bracket notation in the URL — the request is sent as a flat query string. For example:

        ```
        GET /v1/swap/quotes/?currency=usd&input[chain_id]=base&input[fungible_id]=0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2&input[amount]=0.001&output[fungible_id]=0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48&from=0xd8da6bf26964af9d7eed9e03e53415d37aa96045&to=0xd8da6bf26964af9d7eed9e03e53415d37aa96045
        ```
      x-mint:
        metadata:
          description: Compare same-chain swap and cross-chain bridge quotes from multiple DEXs, aggregators and bridges, best first.
      tags:
        - swap
      parameters:
        - name: currency
          in: query
          required: false
          description: Currency in which fiat values of amounts and fees in the response are expressed.
          example: usd
          schema:
            type: string
            default: usd
        - name: from
          in: query
          required: true
          description: Address of the wallet performing the swap. Must match the chain type of `input[chain_id]` (EVM hex or Solana base58).
          example: '0x42b9df65b219b3dd36ff330a4dd8f327a6ada990'
          schema:
            type: string
        - name: to
          in: query
          required: true
          description: Recipient of the output asset. Must match the chain type of `output[chain_id]`. For a same-chain swap to the same wallet, set `to` equal to `from`.
          example: '0xd8da6bf26964af9d7eed9e03e53415d37aa96045'
          schema:
            type: string
        - name: input
          in: query
          required: true
          description: The asset being sent.
          style: deepObject
          explode: true
          schema:
            type: object
            required:
              - chain_id
              - fungible_id
              - amount
            properties:
              chain_id:
                type: string
                description: Chain ID the input asset lives on.
                example: base
              fungible_id:
                type: string
                description: Unique fungible ID of the input asset.
                minLength: 3
                maxLength: 44
                example: '0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2'
              amount:
                type: string
                description: Human-readable input amount as a positive decimal (not in the smallest unit).
                example: '0.001'
        - name: output
          in: query
          required: true
          description: The asset being received.
          style: deepObject
          explode: true
          schema:
            type: object
            required:
              - fungible_id
            properties:
              chain_id:
                type: string
                description: Chain ID the output asset lives on. Defaults to `input[chain_id]` (same-chain swap).
                example: base
              fungible_id:
                type: string
                description: Unique fungible ID of the output asset.
                minLength: 3
                maxLength: 44
                example: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48'
        - name: slippage_percent
          in: query
          required: false
          description: Maximum acceptable slippage in percent. When omitted, an auto-slippage value is chosen.
          example: 2
          schema:
            type: number
            format: float
            minimum: 0
      responses:
        '200':
          $ref: '#/components/responses/SwapQuotesResponse'
        '400':
          $ref: '#/components/responses/MalformedParameters'
        '401':
          $ref: '#/components/responses/UnauthenticatedError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /v1/swap/fungibles/:
    get:
      operationId: swapFungibles
      summary: List fungibles available for bridging
      description: |
        Returns the list of tokens available for bridging between two chains. Use this to populate a token picker UI. Only relevant for cross-chain swaps, same-chain swaps don't require this step.
      x-mint:
        metadata:
          description: List the tokens available for bridging between two chains, for populating a token picker.
      tags:
        - swap
      parameters:
        - name: input
          in: query
          required: false
          style: deepObject
          explode: true
          schema:
            type: object
            properties:
              chain_id:
                type: string
                description: Initial chain id the user want exchange fungibles from. If nothing specified then `ethereum` is used.
                example: ethereum
        - name: output
          in: query
          required: false
          style: deepObject
          explode: true
          schema:
            type: object
            properties:
              chain_id:
                type: string
                description: Target chain id the user want receive fungibles on. If nothing specified then `ethereum` is used.
                example: polygon
        - name: direction
          in: query
          description: 'The direction parameter is a parameter that determines the flow of fungibles involved in the transaction. It can have three possible values: ''input'', ''output'', or ''both''. The value ''input'' indicates that the API endpoint will only return fungibles that the user can send. The value ''output'' indicates that the API endpoint will only return fungibles that the user can receive. The value ''both'' means that the API endpoint will return fungibles which are ''input'' and ''output'' at the same time. In other words - intersection for ''input'' and output''. If nothing specified then `both` is used.'
          example: both
          schema:
            type: string
            enum:
              - input
              - output
              - both
      responses:
        '200':
          $ref: '#/components/responses/SwapFungiblesResponse'
        '400':
          $ref: '#/components/responses/MalformedParameters'
        '401':
          $ref: '#/components/responses/UnauthenticatedError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /v1/gas-prices/:
    get:
      operationId: listGasPrices
      summary: Get list of all available gas prices
      description: |
        Returns real-time gas prices for every supported chain, at each speed tier. Gas prices move with network demand, so read them shortly before building a transaction rather than caching them.
      x-mint:
        metadata:
          description: Real-time gas price estimates for every supported chain, at each speed tier.
      tags:
        - gas
      parameters:
        - name: filter[chain_ids]
          in: query
          required: false
          description: Return only gas prices from specified chains (comma-separated list). You can find available chain ids in chain endpoints.
          style: form
          explode: false
          schema:
            type: array
            items:
              type: string
              example: polygon
        - name: filter[gas_types]
          in: query
          required: false
          description: Return only gas prices with specified gas-type (comma-separated list).
          style: form
          explode: false
          schema:
            type: array
            items:
              $ref: '#/components/schemas/Type-2'
      responses:
        '200':
          $ref: '#/components/responses/GasPricesResponse'
        '400':
          $ref: '#/components/responses/MalformedParameters'
        '401':
          $ref: '#/components/responses/UnauthenticatedError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /v1/nfts/:
    get:
      operationId: listNFTs
      summary: Get list of NFTs
      description: |
        Returns a list of NFTs matching the references you pass. Both ERC-721 and ERC-1155 are covered.

        **See also:** [Testnets (`X-Env: testnet`)](https://developers.zerion.io/supported-blockchains#testnets) · [Resource IDs](https://developers.zerion.io/endpoints-and-schema#resource-ids)
      x-mint:
        metadata:
          description: Batch-look up NFTs by reference, covering both ERC-721 and ERC-1155, with media and traits.
      tags:
        - nfts
      parameters:
        - name: filter[references]
          in: query
          style: form
          explode: false
          description: |
            Keep only NFTs matching specified references.

            Reference format is `chain_id:contract_address:token_id`.

            References should be separated by comma `,`.

            `chain_id`- ID of the chain where NFT exists, can be found in /chains endpoint.

            `contract_address` address of the deployed contract which NFT belongs to.

            `token_id` id of the NFT within specified `contract_address`.

            NOTE: parameter currently is mandatory and can not be omitted.
          schema:
            type: string
            example: ethereum:0x932261f9fc8da46c4a22e31b45c4de60623848bf:93673,polygon:0x3d8c06e65ebf06a9d40f313a35353be06bd46038:104901
            minItems: 1
            maxItems: 10
            items:
              type: string
        - $ref: '#/components/parameters/Currency'
        - name: include
          in: query
          required: false
          style: form
          explode: false
          description: Array of related resources to be included to the response (comma-separated list). This parameter corresponds to the JSON API schema.
          schema:
            type: array
            items:
              type: string
              example: nft_collections
              enum:
                - nft_collections
        - name: X-Env
          in: header
          description: Custom header that allows you to get data for testnets.
          required: false
          schema:
            type: string
            enum:
              - testnet
      responses:
        '200':
          $ref: '#/components/responses/NFTsResponse'
        '400':
          $ref: '#/components/responses/MalformedParameters'
        '401':
          $ref: '#/components/responses/UnauthenticatedError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /v1/nfts/{nft_id}:
    get:
      operationId: getNFTById
      summary: Get single NFT by ID
      description: |
        Returns a single NFT by its unique identifier.

        **See also:** [Testnets (`X-Env: testnet`)](https://developers.zerion.io/supported-blockchains#testnets)
      x-mint:
        metadata:
          description: Look up one NFT by its unique ID, with media, traits and collection context.
      tags:
        - nfts
      parameters:
        - name: nft_id
          in: path
          required: true
          description: NFT unique identifier
          schema:
            type: string
        - $ref: '#/components/parameters/Currency'
        - name: include
          in: query
          required: false
          style: form
          explode: false
          description: Array of related resources to be included to the response (comma-separated list). This parameter corresponds to the JSON API schema.
          schema:
            type: array
            items:
              type: string
              example: nft_collections
              enum:
                - nft_collections
        - name: X-Env
          in: header
          description: Custom header that allows you to get data for testnets.
          required: false
          schema:
            type: string
            enum:
              - testnet
      responses:
        '200':
          $ref: '#/components/responses/NFTResponse'
        '400':
          $ref: '#/components/responses/MalformedParameters'
        '401':
          $ref: '#/components/responses/UnauthenticatedError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /v1/dapps:
    get:
      operationId: listDApps
      summary: Get list of DApps
      description: |
        Returns a list of dapps. Dapp metadata is also embedded in position and transaction responses, so most integrations never need to call this endpoint directly.

        **See also:** [Resource IDs](https://developers.zerion.io/endpoints-and-schema#resource-ids)
      x-mint:
        metadata:
          description: Browse dapp metadata (names, icons, categories) used to label DeFi positions and transactions.
      tags:
        - dapps
      parameters:
        - $ref: '#/components/parameters/Page'
      responses:
        '200':
          $ref: '#/components/responses/DAppsResponse'
        '400':
          $ref: '#/components/responses/MalformedParameters'
        '401':
          $ref: '#/components/responses/UnauthenticatedError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /v1/dapps/{dapp_id}:
    get:
      operationId: getDAppByID
      summary: Get DApp by ID
      description: |
        Returns a single dapp by its unique identifier.
      x-mint:
        metadata:
          description: Look up one dapp by its ID, with the name and icon used to label DeFi positions and transactions.
      tags:
        - dapps
      parameters:
        - name: dapp_id
          in: path
          required: true
          description: DApp's unique identifier
          schema:
            type: string
      responses:
        '200':
          $ref: '#/components/responses/DAppResponse'
        '400':
          $ref: '#/components/responses/MalformedParameters'
        '401':
          $ref: '#/components/responses/UnauthenticatedError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /v1/tx-subscriptions/:
    get:
      operationId: findWalletTransactionsSubscription
      summary: Find subscriptions
      description: |
        Returns your transaction subscriptions. The response is currently capped at 1000 subscriptions.

        **See also:** [Resource IDs](https://developers.zerion.io/endpoints-and-schema#resource-ids)
      x-mint:
        metadata:
          description: List your webhook subscriptions, filtered by wallet or chain.
      tags:
        - subscriptions to transactions
      parameters:
        - name: filter[chain_ids]
          in: query
          required: false
          description: Comma-separated chain ids. Finds subscriptions on the specified chains. Searches over all chains if omitted.
          style: form
          explode: false
          schema:
            type: array
            items:
              type: string
              example: polygon
      responses:
        '200':
          $ref: '#/components/responses/SubscriptionsResponse'
        '400':
          $ref: '#/components/responses/MalformedParameters'
        '401':
          $ref: '#/components/responses/UnauthenticatedError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
    post:
      operationId: createSubscriptionWalletTransactions
      summary: Create subscription
      description: |
        Creates a subscription that pushes a notification to your callback URL whenever a subscribed wallet transacts. The typical use case is wallet activity alerts, like the push notifications in the Zerion app.

        Your callback host has to be whitelisted before it will receive anything. [webhook.site](https://webhook.site) URLs work out of the box for testing; to use your own host, request whitelisting from the [Zerion dashboard](https://dashboard.zerion.io) or email `api@zerion.io` with the address and the callback URL. A `dev` key is limited to one subscription of at most 5 wallets, valid for one week; production keys have no wallet or time limit.

        Only transactions mined after the subscription is created are reported, prices in the payload are always `null`, and delivery is best-effort. The [Webhooks guide](https://developers.zerion.io/webhooks) covers the payload format, signature verification, retry behaviour and delivery guarantees.

        **Event filtering.** Attach `filters` to narrow what a subscription delivers. Only exclusion is supported: a matching event is dropped and no webhook is sent for it.

        ```json
        {
          "callback_url": "https://webhook.site/fcd606d2-f5bd-4832-9874-ff07c980b5a3",
          "addresses": ["0x42b9df65b219b3dd36ff330a4dd8f327a6ada990"],
          "chain_ids": ["ethereum"],
          "filters": {
            "exclude": {
              "types": ["send"],
              "is_spam": true,
              "protocol_ids": ["uniswap-v3"],
              "addresses": ["0x0000000000000000000000000000000000000001"]
            }
          }
        }
        ```

        Conditions are independent and combined with OR, so the example above drops a `send`, or spam, or anything attributed to `uniswap-v3`, or anything involving that address. Adding a condition can only reduce what you receive. `is_spam` accepts only `true`; empty lists, duplicates, unknown transaction types and unknown field names are rejected. Omitting `filters`, or sending `null`, leaves the subscription unfiltered, and responses omit the field when none are set.

        **Failed transactions.** Failed transactions sent from a subscribed wallet have always been reported. Webhooks are now also delivered when a transaction addressed to a subscribed smart-contract wallet fails on-chain, with `"status": "failed"`. The payload carries one `execute` act with the wallet as `contract_address`, and empty `transfers` and `approvals` arrays. An ERC-4337 `UserOperation` that fails inside a successful bundle transaction is not reported. This applies to EVM chains only; Solana subscriptions are unaffected.

        **See also:** [Webhooks guide](https://developers.zerion.io/webhooks) · [Resource IDs](https://developers.zerion.io/endpoints-and-schema#resource-ids)
      x-mint:
        metadata:
          description: Create a webhook subscription that pushes transaction notifications for a set of wallets to your callback URL.
      tags:
        - subscriptions to transactions
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - callback_url
                - addresses
              properties:
                callback_url:
                  type: string
                  description: |
                    Callback URL where updates will be delivered to
                  example: https://webhook.site/fcd606d2-f5bd-4832-9874-ff07c980b5a3
                addresses:
                  type: array
                  description: |
                    Addresses of the wallets to create subscription for. Maximum 100 addresses per subscription.
                    Note: Free tier accounts are limited to 5 addresses per subscription.
                  items:
                    type: string
                    description: Address of the wallet.
                    example: '0x42b9df65b219b3dd36ff330a4dd8f327a6ada990'
                chain_ids:
                  type: array
                  description: |
                    Subscribe for transactions from specified chains. Leave empty to subscribe for all supported chains.
                    You can find available chain ids in chain endpoints.
                  items:
                    type: string
                    example: polygon
                filters:
                  $ref: '#/components/schemas/Filters'
      responses:
        '201':
          $ref: '#/components/responses/SubscriptionResponse'
        '400':
          $ref: '#/components/responses/MalformedParameters'
        '401':
          $ref: '#/components/responses/UnauthenticatedError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      callbacks:
        TransactionCallback:
          <your webhook URL>:
            post:
              summary: Notification
              requestBody:
                $ref: '#/components/requestBodies/NotificationResponse'
              responses:
                '200':
                  description: Successful callback processing
                '400':
                  description: Invalid request
                '500':
                  description: Server error
  /v1/tx-subscriptions/{subscription_id}:
    get:
      operationId: GetWalletTransactionsSubscription
      summary: Find subscription by ID
      description: |
        Returns a single transaction subscription by its ID, including the wallets and chains it covers.

        **See also:** [Resource IDs](https://developers.zerion.io/endpoints-and-schema#resource-ids)
      x-mint:
        metadata:
          description: Fetch one webhook subscription by ID, with the wallets and chains it monitors and its callback URL.
      tags:
        - subscriptions to transactions
      parameters:
        - name: subscription_id
          in: path
          required: true
          description: ID of the subscription
          schema:
            type: string
      responses:
        '200':
          $ref: '#/components/responses/SubscriptionResponse'
        '400':
          $ref: '#/components/responses/MalformedParameters'
        '401':
          $ref: '#/components/responses/UnauthenticatedError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
    delete:
      operationId: DeleteWalletTransactionsSubscription
      summary: Delete subscription by ID
      description: |
        Deletes an existing subscription. Notifications stop immediately and the subscription cannot be restored. To pause a subscription and keep its wallet list, disable it instead.

        **See also:** [Resource IDs](https://developers.zerion.io/endpoints-and-schema#resource-ids)
      x-mint:
        metadata:
          description: Permanently delete a webhook subscription and stop notifications for all of its wallets.
      tags:
        - subscriptions to transactions
      parameters:
        - name: subscription_id
          in: path
          required: true
          description: ID of the subscription
          schema:
            type: string
      responses:
        '204':
          description: Successful subscription deletion with no content
        '400':
          $ref: '#/components/responses/MalformedParameters'
        '401':
          $ref: '#/components/responses/UnauthenticatedError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /v1/tx-subscriptions/{subscription_id}/wallets:
    get:
      operationId: GetSubscribedWalletsInSubscription
      summary: Find wallets within subscription
      description: |
        Returns the wallets in a subscription.

        **See also:** [Resource IDs](https://developers.zerion.io/endpoints-and-schema#resource-ids)
      x-mint:
        metadata:
          description: List the wallet addresses a webhook subscription currently monitors.
      tags:
        - subscriptions to transactions
      parameters:
        - $ref: '#/components/parameters/SubscriptionWalletsPage'
        - name: subscription_id
          in: path
          required: true
          description: ID of the subscription
          schema:
            type: string
            example: 77e77447-1586-40e8-a75b-467ef939a0b1
      responses:
        '200':
          $ref: '#/components/responses/SubscriptionWalletsResponse'
        '400':
          $ref: '#/components/responses/MalformedParameters'
        '401':
          $ref: '#/components/responses/UnauthenticatedError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
    patch:
      operationId: PatchSubscribedWalletsInSubscription
      summary: Patch wallets within subscription
      description: |
        Patches the wallet list of a subscription, leaving wallets you do not mention untouched. To replace the list outright, use `PUT` instead.

        **See also:** [Resource IDs](https://developers.zerion.io/endpoints-and-schema#resource-ids)
      x-mint:
        metadata:
          description: Add or remove wallets in a webhook subscription without resending the whole list.
      tags:
        - subscriptions to transactions
      parameters:
        - name: subscription_id
          in: path
          required: true
          description: ID of the subscription
          schema:
            type: string
            example: 77e77447-1586-40e8-a75b-467ef939a0b1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                add:
                  type: array
                  maxItems: 100
                  description: |
                    Addresses of the wallets to add to subscription. Maximum 100 addresses per request.
                  items:
                    type: string
                    description: Address of the wallet.
                    example: '0x42b9df65b219b3dd36ff330a4dd8f327a6ada990'
                remove:
                  type: array
                  maxItems: 100
                  description: |
                    Addresses of the wallets to remove from subscription. Maximum 100 addresses per request.
                  items:
                    type: string
                    description: Address of the wallet.
                    example: '0x42b9df65b219b3dd36ff330a4dd8f327a6ada990'
      responses:
        '200':
          description: Successful callback processing
        '400':
          $ref: '#/components/responses/MalformedParameters'
        '401':
          $ref: '#/components/responses/UnauthenticatedError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
    put:
      operationId: ReplaceSubscribedWalletsInSubscription
      summary: Replace wallets within subscription
      description: |
        Replaces the wallet list of a subscription. Any wallet missing from the request is unsubscribed. To add or remove individual wallets, use `PATCH` instead.

        **See also:** [Resource IDs](https://developers.zerion.io/endpoints-and-schema#resource-ids)
      x-mint:
        metadata:
          description: Replace the entire wallet list of a webhook subscription in one call.
      tags:
        - subscriptions to transactions
      parameters:
        - name: subscription_id
          in: path
          required: true
          description: ID of the subscription
          schema:
            type: string
            example: 77e77447-1586-40e8-a75b-467ef939a0b1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                wallets:
                  type: array
                  description: |
                    Addresses of the wallets to replace current list with
                  items:
                    type: string
                    description: Address of the wallet.
                    example: '0x42b9df65b219b3dd36ff330a4dd8f327a6ada990'
      responses:
        '200':
          description: Successful callback processing
        '400':
          $ref: '#/components/responses/MalformedParameters'
        '401':
          $ref: '#/components/responses/UnauthenticatedError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /v1/tx-subscriptions/{subscription_id}/wallets/count:
    get:
      operationId: GetSubscribedWalletsCountInSubscription
      summary: Count wallets within subscription
      description: |
        Returns the number of wallets in a subscription. Use this instead of listing the wallets when you only need the total.

        **See also:** [Resource IDs](https://developers.zerion.io/endpoints-and-schema#resource-ids)
      x-mint:
        metadata:
          description: Count how many wallets a webhook subscription currently monitors.
      tags:
        - subscriptions to transactions
      parameters:
        - name: subscription_id
          in: path
          required: true
          description: ID of the subscription
          schema:
            type: string
            example: 77e77447-1586-40e8-a75b-467ef939a0b1
      responses:
        '200':
          $ref: '#/components/responses/SubscriptionWalletsCountResponse'
        '400':
          $ref: '#/components/responses/MalformedParameters'
        '401':
          $ref: '#/components/responses/UnauthenticatedError'
        '404':
          $ref: '#/components/responses/NotFoundResponse'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /v1/tx-subscriptions/{subscription_id}/callback_url:
    patch:
      operationId: UpdateCallbackUrlInSubscription
      summary: Update callback URL within subscription
      description: |
        Updates the callback URL of a subscription. The new host has to be whitelisted by Zerion first, see [Testing webhooks](https://developers.zerion.io/webhooks#testing-webhooks).

        **See also:** [Resource IDs](https://developers.zerion.io/endpoints-and-schema#resource-ids)
      x-mint:
        metadata:
          description: Point an existing webhook subscription at a new callback URL.
      tags:
        - subscriptions to transactions
      parameters:
        - name: subscription_id
          in: path
          required: true
          description: ID of the subscription
          schema:
            type: string
            example: 77e77447-1586-40e8-a75b-467ef939a0b1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                callback_url:
                  type: string
                  description: |
                    The new callback URL to be used for the subscription.
                  example: https://webhook.site/new-callback-url
      responses:
        '200':
          description: Successfully updated callback URL
        '400':
          $ref: '#/components/responses/MalformedParameters'
        '401':
          $ref: '#/components/responses/UnauthenticatedError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /v1/tx-subscriptions/{subscription_id}/enable:
    patch:
      operationId: EnableSubscription
      summary: Enable a specific subscription
      description: |
        Sets a subscription's status to `enabled`. Transactions mined while the subscription was disabled are not replayed.

        **See also:** [Resource IDs](https://developers.zerion.io/endpoints-and-schema#resource-ids)
      x-mint:
        metadata:
          description: Resume a paused webhook subscription and start receiving notifications again.
      tags:
        - subscriptions to transactions
      parameters:
        - name: subscription_id
          in: path
          required: true
          description: ID of the subscription
          schema:
            type: string
            example: 77e77447-1586-40e8-a75b-467ef939a0b1
      responses:
        '204':
          description: Successfully updated subscription status to enabled
        '400':
          $ref: '#/components/responses/MalformedParameters'
        '401':
          $ref: '#/components/responses/UnauthenticatedError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /v1/tx-subscriptions/{subscription_id}/disable:
    patch:
      operationId: DisableSubscription
      summary: Disable a specific subscription
      description: |
        Sets a subscription's status to `disabled`. Notifications stop, but the subscription and its wallet list are kept, so you can enable it again later.

        **See also:** [Resource IDs](https://developers.zerion.io/endpoints-and-schema#resource-ids)
      x-mint:
        metadata:
          description: Pause a webhook subscription without deleting it or losing its wallet list.
      tags:
        - subscriptions to transactions
      parameters:
        - name: subscription_id
          in: path
          required: true
          description: ID of the subscription
          schema:
            type: string
            example: 77e77447-1586-40e8-a75b-467ef939a0b1
      responses:
        '204':
          description: Successfully updated subscription status to disabled
        '400':
          $ref: '#/components/responses/MalformedParameters'
        '401':
          $ref: '#/components/responses/UnauthenticatedError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /v1/tx-subscriptions/{subscription_id}/chain_ids:
    patch:
      operationId: UpdateChainIdsInSubscription
      summary: Update chain IDs within subscription
      description: |
        Updates the chains a subscription covers. The chain IDs you send replace the existing list rather than adding to it.

        **See also:** [Resource IDs](https://developers.zerion.io/endpoints-and-schema#resource-ids)
      x-mint:
        metadata:
          description: Change which chains a webhook subscription monitors, replacing the current chain list.
      tags:
        - subscriptions to transactions
      parameters:
        - name: subscription_id
          in: path
          required: true
          description: ID of the subscription
          schema:
            type: string
            example: 77e77447-1586-40e8-a75b-467ef939a0b1
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                chain_ids:
                  type: array
                  description: |
                    The list of new chain IDs to replace the current associated chain IDs in the subscription.
                  items:
                    type: string
                    description: A chain ID.
                    example: ethereum
      responses:
        '200':
          description: Successfully updated chain IDs
        '400':
          $ref: '#/components/responses/MalformedParameters'
        '401':
          $ref: '#/components/responses/UnauthenticatedError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
components:
  securitySchemes:
    APIKeyBasicAuth:
      type: http
      scheme: basic
      description: To test endpoints here, paste your API key from the [dashboard](https://dashboard.zerion.io/) into the username field and leave the password empty.
  parameters:
    ChartPeriod:
      name: chart_period
      in: path
      required: true
      description: |
        Chart period. Determines both the time window covered and the spacing
        between chart points (`points`). Each period samples the window at a fixed
        interval, so the number of points is roughly constant (~290–460) regardless
        of period:

        | Period     | Point interval | Time window         |
        | ---------- | -------------- | ------------------- |
        | `hour`     | 10 seconds     | last 1 hour         |
        | `day`      | 5 minutes      | last 24 hours       |
        | `week`     | 30 minutes     | last 7 days         |
        | `month`    | 2 hours        | last 30 days        |
        | `3months`  | 6 hours        | last 90 days        |
        | `6months`  | 12 hours       | last 180 days       |
        | `year`     | 1 day          | last 365 days       |
        | `5years`   | 4 days         | last 5 years        |
        | `max`      | varies         | full available history |

        Point counts are approximate, and `begin_at` / `end_at` are aligned to the
        interval. For `max`, the interval is derived from the amount of available
        history (targeting ~400 points), so it varies; for wallet and wallet-set
        charts the spacing is at least 1 day.
      schema:
        type: string
        minLength: 3
        maxLength: 7
        default: day
        enum:
          - hour
          - day
          - week
          - month
          - 3months
          - 6months
          - year
          - 5years
          - max
    Currency:
      name: currency
      in: query
      required: false
      description: Denominated currency value of returned prices
      schema:
        type: string
        default: usd
        enum:
          - eth
          - btc
          - usd
          - eur
          - krw
          - rub
          - gbp
          - aud
          - cad
          - inr
          - jpy
          - nzd
          - try
          - zar
          - cny
          - chf
    WalletAddress:
      name: address
      in: path
      required: true
      description: The web3 wallet address. Must be a valid EVM or Solana address. The PnL endpoint additionally requires an address Zerion tracks, and returns 400 otherwise; see that endpoint's description for what that excludes.
      example: '0x42b9df65b219b3dd36ff330a4dd8f327a6ada990'
      schema:
        $ref: '#/components/schemas/WalletAddress'
    Page:
      name: page
      in: query
      required: false
      description: Pagination parameters
      style: deepObject
      explode: true
      schema:
        type: object
        properties:
          after:
            type: string
            nullable: true
            minLength: 1
            maxLength: 64
            description: |
              This field is used for result pagination. You SHOULD NOT use this parameter directly.
              To get the next page of the results you should use `links.next` field.
              Omit it to return the first page.
          size:
            type: integer
            format: uint8
            description: Set maximum number of items per a page in the pagination.
            default: 100
            minimum: 1
            maximum: 100
    EVMWalletAddress:
      name: address
      in: path
      required: true
      description: The web3 wallet address. Must be a valid EVM address. Returns 400 if the address is not one Zerion tracks, such as a token contract, router or exchange hot wallet. Smart-contract wallets like Safe and ERC-4337 accounts are tracked as normal.
      example: '0x42b9df65b219b3dd36ff330a4dd8f327a6ada990'
      schema:
        $ref: '#/components/schemas/EVMAddress'
    NFTPositionsPage:
      name: page
      in: query
      required: false
      description: Pagination parameters
      style: deepObject
      explode: true
      schema:
        type: object
        properties:
          after:
            type: string
            nullable: true
            minLength: 1
            maxLength: 64
            description: |
              This field is used for result pagination. You SHOULD NOT use this parameter directly.
              To get the next page of the results you should use `links.next` field.
              Omit it to return the first page.
          size:
            type: integer
            format: int32
            description: Set maximum number of items per a page in the pagination.
            default: 50
            minimum: 1
            maximum: 500
    WalletNFTCollectionsSort:
      name: sort
      in: query
      required: false
      description: The order of NFTs in the result.
      schema:
        type: string
        example: '-total_floor_price'
        enum:
          - '-max_changed_at'
          - min_changed_at
          - total_floor_price
          - '-total_floor_price'
    WalletSetAddresses:
      name: addresses
      in: query
      required: true
      style: form
      explode: false
      description: |
        A list of wallet addresses forming a wallet set.
        example: 0x42b9df65b219b3dd36ff330a4dd8f327a6ada990,8BH9pjtgyZDC4iAQH5ZiYDZ1MDWC98xki2V8NzqqKW3K

        The set must contain at least one address and may include at most one address per supported chain type (currently EVM and Solana).
        The order of addresses does not matter.

        Returns 400 if an address in the set is not one Zerion tracks, such as a token contract, router
        or exchange hot wallet.
      schema:
        type: array
        minItems: 1
        maxItems: 2
        items:
          type: string
    FilterAssetClass:
      name: filter[asset_class]
      in: query
      required: false
      style: form
      explode: false
      description: |
        Keep only fungibles whose `asset_class` is one of the given values (comma-separated). Values are the
        public `asset_class` vocabulary; `tokenized_treasury`, `other_financial` and `other_non_financial` each
        cover every underlying class they group, and `unknown` selects fungibles identified as a likely RWA with
        the specific class still pending.

        Part of the RWA classification add-on, enabled per organization: organizations without it get `403`.

        Mutually exclusive with `filter[has_asset_class]`. Cannot be combined with `filter[fungible_ids]`,
        `filter[fungible_implementations]`, `filter[implementation_address]`, or an address given as
        `filter[search_query]` — those look fungibles up directly and would not apply the filter, so the request
        is refused with `400` instead. Combines with `filter[implementation_chain_id]`, a text
        `filter[search_query]`, `sort`, and pagination.
      schema:
        type: array
        minItems: 1
        maxItems: 7
        items:
          $ref: '#/components/schemas/AssetClass'
      example:
        - tokenized_stock
        - tokenized_treasury
    FilterHasAssetClass:
      name: filter[has_asset_class]
      in: query
      required: false
      description: |
        Keep only fungibles that carry an `asset_class` — any class, including `unknown`. The only accepted
        value is `true`: this filter has one meaning, and `false` is refused with `400` rather than read as
        "not an RWA" (absence of `asset_class` is not a negative signal, see the attribute's description).

        Part of the RWA classification add-on, enabled per organization: organizations without it get `403`.

        Mutually exclusive with `filter[asset_class]`, and subject to the same combination rules: refused with
        `400` alongside `filter[fungible_ids]`, `filter[fungible_implementations]`, `filter[implementation_address]`,
        or an address given as `filter[search_query]`; combines with `filter[implementation_chain_id]`, a text
        `filter[search_query]`, `sort`, and pagination.
      schema:
        type: boolean
        enum:
          - true
      example: true
    SubscriptionWalletsPage:
      name: page
      in: query
      required: false
      description: Pagination parameters
      style: deepObject
      explode: true
      schema:
        type: object
        properties:
          after:
            type: string
            nullable: true
            minLength: 1
            maxLength: 64
            description: |
              This field is used for result pagination. You SHOULD NOT use this parameter directly.
              To get the next page of the results you should use `links.next` field.
              Omit it to return the first page.
          size:
            type: integer
            format: int32
            description: Set maximum number of items per a page in the pagination.
            default: 100
            minimum: 1
            maximum: 2000
  schemas:
    EVMAddress:
      type: string
      description: Ethereum-compatible address (EVM).
      pattern: ^0x[a-fA-F0-9]{40}$
      example: '0x42b9df65b219b3dd36ff330a4dd8f327a6ada990'
    SolanaAddress:
      type: string
      description: Solana address
      pattern: ^[1-9A-HJ-NP-Za-km-z]{32,44}$
      example: 8BH9pjtgyZDC4iAQH5ZiYDZ1MDWC98xki2V8NzqqKW3K
    WalletAddress:
      oneOf:
        - $ref: '#/components/schemas/EVMAddress'
        - $ref: '#/components/schemas/SolanaAddress'
      description: A wallet address, which can be either an EVM or Solana address
    ResponseLinks:
      type: object
      properties:
        self:
          type: string
          format: url
          example: https://api.zerion.io/v1/wallets/0x42b9df65b219b3dd36ff330a4dd8f327a6ada990/charts/day
    Attributes:
      type: object
      required:
        - begin_at
        - end_at
      properties:
        begin_at:
          type: string
          description: Begin timestamp of the chart
          example: '2023-01-18T11:00:00Z'
        end_at:
          type: string
          description: End timestamp of the chart
          example: '2023-01-25T10:30:00Z'
        points:
          type: array
          description: Sorted list of chart points. The spacing between points depends on `chart_period` — see that parameter for the per-period interval.
          items:
            type: array
            description: Chart point - tuple of two items, the first one is timestamp, the second one is a balance in requested currency
            items:
              oneOf:
                - type: integer
                - type: number
            minItems: 2
            maxItems: 2
            example:
              - 1674039600
              - 1145.00999
    Container:
      type: object
      required:
        - type
        - id
      properties:
        type:
          type: string
          description: Resource type
          enum:
            - wallet_chart
        id:
          type: string
          description: Wallet chart unique identifier
          example: 0x42b9df65b219b3dd36ff330a4dd8f327a6ada990-day
        attributes:
          $ref: '#/components/schemas/Attributes'
    Response:
      type: object
      required:
        - links
        - data
      properties:
        links:
          $ref: '#/components/schemas/ResponseLinks'
        data:
          $ref: '#/components/schemas/Container'
    WalletPNLResponseLinks:
      type: object
      required:
        - self
      properties:
        self:
          type: string
          format: url
          example: https://api.zerion.io/v1/wallets/0x42b9df65b219b3dd36ff330a4dd8f327a6ada990/pnl
    Statistics:
      type: object
      description: PnL statistics for an individual fungible.
      properties:
        average_buy_price:
          type: number
          format: float
          description: The average price at which the fungible was purchased.
          example: 1258.8
        average_sell_price:
          type: number
          format: float
          description: The average price at which the fungible was sold.
          example: 1224.96
        total_gain:
          type: number
          format: float
          description: The sum of realized and unrealized gains for this fungible.
          example: -6900.85
        realized_gain:
          type: number
          format: float
          description: The gain (or loss) realized from selling this fungible, calculated using the FIFO method.
          example: -6871.21
        unrealized_gain:
          type: number
          format: float
          description: The potential gain (or loss) on unsold holdings of this fungible.
          example: -29.64
        relative_total_gain_percentage:
          type: number
          format: float
          description: The percentage return on total investment for this fungible.
          example: -11.38
        relative_realized_gain_percentage:
          type: number
          format: float
          description: The percentage return on realized trades for this fungible.
          example: -15.15
        relative_unrealized_gain_percentage:
          type: number
          format: float
          description: The percentage return on open positions for this fungible.
          example: -0.19
        total_fee:
          type: number
          format: float
          description: The sum of all transaction fees associated with this fungible.
          example: 4679.93
        total_invested:
          type: number
          format: float
          description: The total amount invested in this fungible (sum of all buy transactions).
          example: 60643.33
        realized_cost_basis:
          type: number
          format: float
          description: The cost basis of closed (sold) positions for this fungible.
          example: 45363.2
        net_invested:
          type: number
          format: float
          description: The total amount invested in this fungible that has not been sold.
          example: 15280.13
        received_external:
          type: number
          format: float
          description: The cumulative value of this fungible received from other wallets.
          example: 35402.73
        sent_external:
          type: number
          format: float
          description: The cumulative value of this fungible sent to other wallets.
          example: 22213.21
        sent_for_nfts:
          type: number
          format: float
          description: The cumulative value of this fungible sent in transactions where the wallet receives NFTs.
          example: 1713.23
        received_for_nfts:
          type: number
          format: float
          description: The cumulative value of this fungible received in transactions where the wallet sends NFTs.
          example: 1635.05
    Breakdown:
      type: object
      description: |
        Detailed PnL breakdown by individual fungibles.
        Contains per-fungible statistics keyed either by fungible ID or by implementation (chain:address pair).
        Only returned when the request includes filters for fungibles (fungible_ids or fungible_implementations).
      properties:
        by_id:
          type: object
          description: PnL statistics broken down by fungible ID.
          additionalProperties:
            $ref: '#/components/schemas/Statistics'
          example:
            eth:
              average_buy_price: 1258.8
              average_sell_price: 1224.96
              total_gain: -6900.85
              realized_gain: -6871.21
              unrealized_gain: -29.64
              relative_total_gain_percentage: -11.38
              relative_realized_gain_percentage: -15.15
              relative_unrealized_gain_percentage: -0.19
              total_fee: 4679.93
              total_invested: 60643.33
              realized_cost_basis: 45363.2
              net_invested: 15280.13
              received_external: 35402.73
              sent_external: 22213.21
              sent_for_nfts: 1713.23
              received_for_nfts: 1635.05
        by_implementation:
          type: object
          description: PnL statistics broken down by fungible implementation (chain:address pair).
          additionalProperties:
            $ref: '#/components/schemas/Statistics'
          example:
            ethereum:0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48:
              average_buy_price: 1
              average_sell_price: 1
              total_gain: 0
              realized_gain: 0
              unrealized_gain: 0
              relative_total_gain_percentage: 0
              relative_realized_gain_percentage: 0
              relative_unrealized_gain_percentage: 0
              total_fee: 12.5
              total_invested: 5000
              realized_cost_basis: 3000
              net_invested: 2000
              received_external: 1000
              sent_external: 500
              sent_for_nfts: 0
              received_for_nfts: 0
    Attributes-2:
      type: object
      properties:
        total_gain:
          type: number
          format: float
          description: |
            Total Gain.

            The sum of realized and unrealized gains across all fungible assets, calculated using the FIFO (First In, First Out) method.
          example: -637.8173517
        realized_gain:
          type: number
          format: float
          description: |
            Realized Gain.

            The gain (or loss) realized from the sale of fungible assets, calculated using the FIFO (First In, First Out) method (the
            earliest purchases are matched with the earliest sales).
            The cost basis of the oldest assets is subtracted from the sale proceeds.
          example: -655.3618983
        unrealized_gain:
          type: number
          format: float
          description: |
            Unrealized Gain.

            The potential gain (or loss) on unsold fungible assets, calculated as the difference between their current market value and cost basis using the FIFO method (the
            earliest purchases are matched with the earliest sales).
          example: 17.5445466
        relative_total_gain_percentage:
          type: number
          format: float
          description: |
            Relative Total Gain Percentage.

            The percentage return on total investment, combining both realized and unrealized gains.
          example: -11.38
        relative_realized_gain_percentage:
          type: number
          format: float
          description: |
            Relative Realized Gain Percentage.

            The percentage return on realized trades, calculated as realized gain divided by realized cost basis.
          example: -15.15
        relative_unrealized_gain_percentage:
          type: number
          format: float
          description: |
            Relative Unrealized Gain Percentage.

            The percentage return on open positions, calculated as unrealized gain divided by the current cost basis of held assets.
          example: -0.19
        total_fee:
          type: number
          format: float
          description: |
            Total Fees Paid.

            The sum of all transaction fees associated with asset trades.
          example: 281.9088917
        total_invested:
          type: number
          format: float
          description: |
            Total Invested Amount.

            The total amount invested in fungible assets (sum of all buy transactions), calculated using the FIFO method.
          example: 701.2
        realized_cost_basis:
          type: number
          format: float
          description: |
            Realized Cost Basis.

            The cost basis of closed (sold) positions, calculated using the FIFO method.
          example: 655.36
        net_invested:
          type: number
          format: float
          description: |
            Net Invested Amount.

            The total amount invested in fungible assets that have not been sold, calculated using the FIFO method (the earliest purchases are
            matched with the earliest sales).
          example: 45.84218703
        received_external:
          type: number
          format: float
          description: |
            Received Amount from Other Wallets.

            The cumulative value of all fungible assets received from other wallets.

            Note: This value does not include amounts traded internally within the wallet but does include `received_for_nfts`.
          example: 133971.2931
        sent_external:
          type: number
          format: float
          description: |
            Sent Amount to Other Wallets.

            The cumulative value of all fungible assets sent to other wallets.

            Note: This value does not include amounts traded internally within the wallet but does include `sent_for_nfts`.
          example: 133270.089
        sent_for_nfts:
          type: number
          format: float
          description: |
            Sent Amount for NFTs.

            The cumulative value of all fungible assets sent in transactions where the wallet receives NFTs.
          example: 133971.2931
        received_for_nfts:
          type: number
          format: float
          description: |
            Received Amount for NFTs.

            The cumulative value of all fungible assets received in transactions where the wallet sends NFTs.
          example: 133971.2931
        breakdown:
          $ref: '#/components/schemas/Breakdown'
    WalletPNLContainer:
      type: object
      required:
        - type
        - id
        - attributes
      properties:
        type:
          type: string
          description: Resource type
          enum:
            - pnl
        id:
          type: string
          description: PNL unique ID
          example: '0x42b9df65b219b3dd36ff330a4dd8f327a6ada990'
        attributes:
          $ref: '#/components/schemas/Attributes-2'
    WalletPNLResponse:
      type: object
      required:
        - links
        - data
      properties:
        links:
          $ref: '#/components/schemas/WalletPNLResponseLinks'
        data:
          $ref: '#/components/schemas/WalletPNLContainer'
        meta:
          type: object
          description: |
            Metadata about the PnL calculation (only present when assets were excluded from the calculation).
            The structure matches the filter type used in the request:
            - When filtering by `fungible_ids`, the meta contains an `excluded_fungible_ids` array
            - When filtering by `fungible_implementations`, the meta contains an `excluded_fungible_implementations` array
            - If both filters are used, both fields may appear in the meta
          properties:
            excluded_fungible_ids:
              type: array
              items:
                type: string
              description: Fungible asset IDs that were excluded due to missing prices (only present when the request used fungible_ids filter)
              example:
                - 4a702a34-5cfd-41af-96ad-bd1c45c3672e
            excluded_fungible_implementations:
              type: array
              items:
                type: string
              description: |
                Asset implementations that were excluded due to missing prices (only present when the request used fungible_implementations filter).
                Format matches the user's query format: "chain:address" for regular tokens, "chain:" for base assets.
              example:
                - ethereum:0x6b175474e89094c44da98b954eedeac495271d0f
                - 'ethereum:'
    ResponseLinks-2:
      type: object
      required:
        - self
      properties:
        self:
          type: string
          format: url
          example: https://api.zerion.io/v1/wallets/0x42b9df65b219b3dd36ff330a4dd8f327a6ada990/portfolio
    PositionsDistributionByType:
      type: object
      required:
        - wallet
        - deposited
        - borrowed
        - locked
        - staked
      properties:
        wallet:
          type: number
          format: float
          description: Total value of asset on the wallet in selected currency
          example: 1864.774102420957
        deposited:
          type: number
          format: float
          description: Total value of deposited assets in selected currency
          example: 78.04192492782934
        borrowed:
          type: number
          format: float
          description: Total value of borrowed assets in selected currency
          example: 0.9751475798305564
        locked:
          type: number
          format: float
          description: Total value of locked assets in selected currency
          example: 5.780032725068765
        staked:
          type: number
          format: float
          description: Total value of staked assets in selected currency
          example: 66.13183205505294
    PositionsDistributionByChain:
      type: object
      additionalProperties:
        type: number
        format: double
        description: Total value of asset on the chain in selected currency
      example:
        arbitrum: 458.3555051522226
        aurora: 72.01031337463428
        avalanche: 17.128850607339444
        base: 55.01550749900544
        binance-smart-chain: 5.561075880033699
        celo: 31.293849330045006
        ethereum: 1214.009900354964
        fantom: 84.58514074264951
        linea: 8.258227109505139
        optimism: 573.032664994399
        polygon: 64.31407562634853
        xdai: 113.1679493137936
        zksync-era: 9.451002156306377
    Total:
      type: object
      required:
        - positions
      description: Total portfolio values across all wallet positions and NFT
      properties:
        positions:
          type: number
          format: float
          description: Total value of all positions
          example: 2017.4858230069574
    Change:
      type: object
      description: Portfolio changes
      required:
        - absolute_1d
        - percent_1d
      properties:
        absolute_1d:
          type: number
          format: float
          description: Daily absolute portfolio change value
          example: 102.0271468171374
        percent_1d:
          type: number
          format: float
          description: Daily portfolio change percent
          example: 5.326512552079021
    Attributes-3:
      type: object
      properties:
        positions_distribution_by_type:
          $ref: '#/components/schemas/PositionsDistributionByType'
        positions_distribution_by_chain:
          $ref: '#/components/schemas/PositionsDistributionByChain'
        total:
          $ref: '#/components/schemas/Total'
        changes:
          $ref: '#/components/schemas/Change'
    Container-2:
      type: object
      required:
        - type
        - id
        - attributes
      properties:
        type:
          type: string
          description: Resource type
          enum:
            - portfolio
        id:
          type: string
          description: Portfolio unique ID
          example: '0x42b9df65b219b3dd36ff330a4dd8f327a6ada990'
        attributes:
          $ref: '#/components/schemas/Attributes-3'
    Response-2:
      type: object
      required:
        - links
        - data
      properties:
        links:
          $ref: '#/components/schemas/ResponseLinks-2'
        data:
          $ref: '#/components/schemas/Container-2'
    PositionType:
      type: string
      nullable: true
      description: |
        Position's type indicating how the assets are being used or their current state.
      enum:
        - deposit
        - loan
        - locked
        - staked
        - reward
        - wallet
        - investment
      x-enum-descriptions:
        - deposit - assets deposited into a DeFi protocol (e.g., lending pools, vaults, LP positions)
        - loan - borrowed assets representing a debt position
        - locked - assets locked for a period or purpose (e.g., veTokens, time-locks)
        - staked - assets staked to earn rewards or participate in consensus
        - reward - earned but unclaimed rewards
        - wallet - assets held directly in the user wallet
        - investment - tokenized funds, indices, structured products
    ResponseLinks-3:
      type: object
      required:
        - self
      properties:
        self:
          type: string
          format: url
          example: https://api.zerion.io/v1/wallets/0x42b9df65b219b3dd36ff330a4dd8f327a6ada990/positions/
    EncryptedQuantity:
      type: object
      additionalProperties: false
      required:
        - handle
      description: |
        Opaque encrypted quantity, present only for clients enabled to receive encrypted values.
        Its presence means the quantity is unknown, not a measured zero balance.
        Where a quantity field is required, its numeric components remain zero compatibility placeholders and must not be used to infer a balance or value.
        The corresponding position or transfer value is null; public asset unit prices remain available.
      properties:
        handle:
          type: string
          pattern: ^0x[0-9a-f]{64}$
          description: Opaque 32-byte ciphertext handle encoded as lowercase hexadecimal with a 0x prefix.
    Quantity:
      type: object
      required:
        - int
        - decimals
        - float
        - numeric
      properties:
        int:
          type: string
          description: Objective on-chain raw amount in base units. Use this value for building on-chain transactions.
          example: '12345678'
        decimals:
          type: integer
          description: Decimal number precision of the quantity - digits after the floating point.
          example: 5
        float:
          type: number
          format: float
          description: Ready-to-display value = int / 10^decimals. For Token-2022 ScaledUiAmount assets (a small subset of Solana tokens), the display value is int × multiplier / 10^decimals.
          example: 123.45678
        numeric:
          type: string
          description: Ready-to-display value = int / 10^decimals. For Token-2022 ScaledUiAmount assets (a small subset of Solana tokens), the display value is int × multiplier / 10^decimals.
          example: '123.45678'
    Change-2:
      type: object
      description: Position changes
      required:
        - absolute_1d
        - percent_1d
      properties:
        absolute_1d:
          type: number
          format: float
          description: Daily absolute position change value
          example: 0.272309794
        percent_1d:
          type: number
          format: float
          description: Daily position change percent
          example: 5.326512552079021
    AssetClass:
      type: string
      description: 'Asset classification for the fungible — tokenized real-world assets and stablecoins. A paid add-on, enabled per organization — returned on `GET /v1/fungibles/`, `GET /v1/fungibles/{fungible_id}`, `GET /v1/fungibles/by-implementation`, and on the `fungible_info` of `GET /v1/wallets/{address}/positions/` and `GET /v1/wallet-sets/{wallet_set_id}/positions/`, only for organizations that have it. The `fungible_info` of a transaction — transfers, fees, approvals, refunds — never carries it. Omitted when the fungible is unclassified or its classification has been cleared. Absence does not mean the fungible is not an RWA. The value `unknown` is different from absence: it is a positive classification — the fungible is a likely RWA, with the specific class still pending.'
      enum:
        - commodity
        - tokenized_stock
        - tokenized_treasury
        - stablecoin
        - other_financial
        - other_non_financial
        - unknown
      x-enum-descriptions:
        commodity: Tokenized commodities (e.g. gold).
        tokenized_stock: Tokenized equities, including tokenized ETFs.
        tokenized_treasury: Tokenized treasury and government-debt products.
        stablecoin: Fiat-pegged stablecoins.
        other_financial: Financial instruments outside the classes above (e.g. funds, bonds, private credit).
        other_non_financial: Non-financial real-world assets (e.g. tokenized real estate, carbon credits, collectibles).
        unknown: Identified as a likely RWA, specific class still pending.
    Icon:
      type: object
      description: Icon related to object.
      properties:
        url:
          type: string
          nullable: true
          format: url
          description: URL of the icon.
          example: https://token-icons.s3.amazonaws.com/0x0391d2021f89dc339f60fff84546ea23e337750f.png
    Flags:
      type: object
      required:
        - verified
      properties:
        verified:
          type: boolean
          description: Whether this fungible verified or not
          example: true
    Implementation:
      type: object
      required:
        - chain_id
        - decimals
      properties:
        chain_id:
          type: string
          description: Unique id of the chain.
          example: ethereum
        address:
          type: string
          nullable: true
          description: Implementation address on the chain. `null` for the chain's native asset (for example ETH on Ethereum, HYPE on HyperEVM), which has no contract address.
          example: '0x2af1df3ab0ab157e1e2ad8f88a7d04fbea0c7dc6'
        decimals:
          type: integer
          description: Number of decimals points of the implementation.
          example: 18
    MarketDataChanges:
      type: object
      properties:
        percent_1d:
          type: number
          nullable: true
          format: double
          description: Price relative change in percent for 1 day
          example: -0.7379066649086338
        percent_30d:
          type: number
          nullable: true
          format: double
          description: Price relative change in percent for 30 days
          example: -2.499465618806962
        percent_90d:
          type: number
          nullable: true
          format: double
          description: Price relative change in percent for 90 days
          example: 11.316340269371775
        percent_365d:
          type: number
          nullable: true
          format: double
          description: Price relative change in percent for 1 year
          example: null
    TradingVolumes:
      type: object
      properties:
        volume_1d:
          type: number
          format: double
          description: Trading volume over the last 24 hours in the selected currency.
          example: 40096375.69294812
    MarketData:
      type: object
      required:
        - price
      properties:
        total_supply:
          type: number
          format: double
          description: Total market supply of fungible
          example: 29905.762448515918
        circulating_supply:
          type: number
          format: double
          description: Circulating value of fungible
          example: 29905.762448515918
        fully_diluted_valuation:
          type: number
          format: double
          description: Total market capitalization of fungible in selected currency
          example: 3196313.736038149
        market_cap:
          type: number
          format: double
          description: Circulating market capitalization of fungible in selected currency
          example: 3196313.736038149
        price:
          type: number
          nullable: true
          format: double
          description: Latest fungible price
          example: 106.87952669793131
        changes:
          $ref: '#/components/schemas/MarketDataChanges'
        trading_volumes:
          $ref: '#/components/schemas/TradingVolumes'
    Info:
      type: object
      required:
        - name
        - symbol
        - icon
        - flags
        - implementations
      properties:
        id:
          type: string
          description: Unique identifier of the fungible asset.
          example: 0230395c-2b01-46d8-b2d6-ce8121d51f9e
        name:
          type: string
          description: Displayable name of the fungible asset.
          example: Bankless BED Index
        symbol:
          type: string
          description: Displayable symbol of the fungible asset.
          example: BED
        asset_class:
          $ref: '#/components/schemas/AssetClass'
        description:
          type: string
          nullable: true
          description: Brief description of the fungible. Currently available at transaction callback notifications only.
          example: The BED index is meant to track crypto’s top 3 investab.
        icon:
          type: object
          allOf:
            - $ref: '#/components/schemas/Icon'
          nullable: true
        flags:
          $ref: '#/components/schemas/Flags'
        implementations:
          type: array
          description: Implementation details of the fungible on various chains.
          items:
            $ref: '#/components/schemas/Implementation'
        market_data:
          type: object
          allOf:
            - $ref: '#/components/schemas/MarketData'
          nullable: true
          description: Market data for the fungible, including price, supply, and market cap information. Currently available at transaction callback notifications only.
    Flags-2:
      type: object
      required:
        - displayable
      properties:
        displayable:
          type: boolean
          description: Whether this position should be displayable and calculated in the wallet or not
          example: true
        is_trash:
          type: boolean
          description: Is the position classified by Zerion as trash.
    DAppInfo:
      type: object
      properties:
        name:
          type: string
          example: AAVE
          description: |
            Human readable representation of DApp. That offers more intuitive understanding for users.

            Note: only available for positions within protocols.
        icon:
          $ref: '#/components/schemas/Icon'
        url:
          type: string
          format: url
          description: URL of the DApp the position relates to.
          example: https://app.aave.com/
    ReceiptNftInfo:
      type: object
      description: |
        The LP NFT that backs this position, present on Uniswap V3 and V4 liquidity positions.

        Join `contract_address` and `token_id` with a colon to get the value the balance-chart endpoints accept in `filter[pool_addresses]` and `filter[exclude_pool_addresses]`, e.g. `0xc36442b4a4522e871399cd717abdd847ab11fe88:1303743`.
      properties:
        chain_id:
          type: string
          description: Chain the LP NFT is held on.
          example: ethereum
        contract_address:
          type: string
          description: Address of the position-manager contract that issued the LP NFT.
          example: '0xc36442b4a4522e871399cd717abdd847ab11fe88'
        token_id:
          type: string
          description: 'ERC-721 token ID of the LP NFT. It must be the canonical decimal representation of an unsigned 256-bit integer: one or more decimal digits, no leading zeros, and a value from `0` through `2^256 - 1` (`115792089237316195423570985008687907853269984665640564039457584007913129639935`), inclusive. The balance-chart pool filters return `400` for token IDs that do not meet these requirements.'
          example: '1303743'
    Receipt:
      type: object
      description: |
        Token representing a DeFi position.

        A position carries either `fungible_info` — an LP token or an ERC-4626 vault share — or `nft_info`, for the Uniswap V3 and V4 liquidity positions represented by an LP NFT. Never both.
      properties:
        fungible_info:
          $ref: '#/components/schemas/Info'
        nft_info:
          $ref: '#/components/schemas/ReceiptNftInfo'
    Attributes-4:
      type: object
      required:
        - quantity
        - name
      properties:
        encrypted_quantity:
          $ref: '#/components/schemas/EncryptedQuantity'
        parent:
          type: string
          nullable: true
          description: Id of parent position
          example: 0x111c47865ade3b172a928df8f990bc7f2a3b9aaa-polygon-asset-none-
        protocol:
          type: string
          nullable: true
          description: Protocol which the position is belong to.
        protocol_module:
          type: string
          description: |
            The specific module or functionality within a DeFi protocol where this position is held. This categorizes the type of protocol interaction.

            Possible values and their meanings:

            - `deposit` - Generic deposit module for protocols with simple deposit functionality
            - `lending` - Lending and borrowing protocols (e.g., Aave, Compound) where users can supply or borrow assets
            - `yield` - Yield optimization and aggregator protocols (e.g., Yearn Finance) that automatically maximize returns
            - `liquidity_pool` - Automated Market Maker (AMM) liquidity pools (e.g., Uniswap, Curve) where users provide liquidity for trading
            - `staked` - Staking modules where assets are staked for rewards, governance, or network security
            - `leveraged_farming` - Leveraged yield farming protocols (e.g., Alpaca Finance) that enable leveraged positions on farms
            - `nft_staked` - NFT staking modules where NFTs are staked to earn rewards
            - `farming` - Yield farming and reward distribution modules (e.g., liquidity mining programs)
            - `locked` - Token locking mechanisms such as vote-escrowed (ve) tokens or time-locked positions
            - `vesting` - Token vesting schedules for team allocations, investor tokens, or earned rewards
            - `rewards` - Unclaimed rewards modules representing rewards that have been earned but not yet claimed
            - `investment` - Investment product modules such as tokenized funds, indices, or structured investment vehicles
          example: lending
        pool_address:
          type: string
          description: Address of the pool the position belongs to if applicable
          example: '0x109830a1aaad605bbf02a9dfa7b0b92ec2fb7daa'
        name:
          type: string
          description: Human readable position name
          example: Asset
        group_id:
          type: string
          description: Unique ID which could be used to group position within DApp naturally for convenience of users. For example for UniswapV2 it is grouping by specific pool.
          example: 0a771a0064dad468045899032c7fb01a971f973f7dff0a5cdc3ce199f45e94d7
        position_type:
          $ref: '#/components/schemas/PositionType'
        quantity:
          $ref: '#/components/schemas/Quantity'
        value:
          type: number
          nullable: true
          format: float
          description: Position value in requested currency
          example: 5.384656557642683
        price:
          type: number
          format: float
          description: Price of position's asset
          example: 0.043615722
        changes:
          $ref: '#/components/schemas/Change-2'
        fungible_info:
          $ref: '#/components/schemas/Info'
        flags:
          $ref: '#/components/schemas/Flags-2'
        updated_at:
          type: string
          description: |
            ISO-8601 timestamp the position was updated at.
            The field indicates when our service last checked and updated the balance.
            This update typically occurs immediately after any event causing a change in position.
          example: '2023-11-10T23:00:00Z'
        updated_at_block:
          type: integer
          format: int32
          description: Number of the block of the position
        application_metadata:
          $ref: '#/components/schemas/DAppInfo'
        receipt:
          $ref: '#/components/schemas/Receipt'
    RelationshipLinks:
      type: object
      required:
        - related
      properties:
        related:
          type: string
          format: url
          description: URL to the current chain.
          example: https://api.zerion.io/v1/chains/polygon
    ContainerShort:
      type: object
      required:
        - type
        - id
      properties:
        type:
          type: string
          description: Chain resource type.
          example: chains
        id:
          type: string
          description: Chain unique identifier.
          example: polygon
    Relationship:
      type: object
      required:
        - links
        - data
      properties:
        links:
          $ref: '#/components/schemas/RelationshipLinks'
        data:
          $ref: '#/components/schemas/ContainerShort'
    ContainerShort-2:
      type: object
      required:
        - type
        - id
      properties:
        type:
          type: string
          description: Decentralized application resource type.
          example: dapps
        id:
          type: string
          description: Decentralized application ID
          example: aave-v3
    Relationship-2:
      type: object
      required:
        - data
      properties:
        data:
          $ref: '#/components/schemas/ContainerShort-2'
    Relationships:
      type: object
      required:
        - chain
        - fungible
      properties:
        chain:
          $ref: '#/components/schemas/Relationship'
        fungible:
          type: object
          required:
            - links
            - data
          properties:
            links:
              type: object
              required:
                - related
              properties:
                related:
                  format: url
                  example: https://api.zerion.io/v1/fungibles/0x111c47865ade3b172a928df8f990bc7f2a3b9aaa
            data:
              type: object
              required:
                - type
                - id
              properties:
                type:
                  type: string
                  example: fungibles
                id:
                  type: string
                  example: '0x111c47865ade3b172a928df8f990bc7f2a3b9aaa'
        dapp:
          $ref: '#/components/schemas/Relationship-2'
    Container-3:
      type: object
      required:
        - type
        - id
        - attributes
      properties:
        type:
          type: string
          description: Resource type
          enum:
            - positions
        id:
          type: string
          description: Position's unique id
          example: 0x111c47865ade3b172a928df8f990bc7f2a3b9aaa-polygon-asset-none-
        attributes:
          $ref: '#/components/schemas/Attributes-4'
        relationships:
          $ref: '#/components/schemas/Relationships'
    Response-3:
      type: object
      required:
        - links
        - data
      properties:
        links:
          $ref: '#/components/schemas/ResponseLinks-3'
        data:
          type: array
          items:
            $ref: '#/components/schemas/Container-3'
    Type:
      type: string
      description: |
        Type of the transaction operation. This field indicates the primary action performed in the transaction.

        Possible values and their meanings:

        - `approve` - Grant permission to a smart contract to access and spend tokens on behalf of the wallet
        - `bid` - Place a bid in a prediction market
        - `burn` - Destroy tokens permanently, reducing the total token supply
        - `claim` - Claim earned rewards, airdrops, or vested tokens from a protocol
        - `delegate` - Delegate tokens or voting power to another address
        - `deploy` - Deploy a new smart contract to the blockchain
        - `deposit` - Deposit assets into a protocol (e.g., lending pool, liquidity pool, vault)
        - `execute` - Execute a smart contract function or complex interaction that doesn't fit other specific types
        - `mint` - Create new tokens, increasing the total token supply
        - `receive` - Receive tokens from another wallet address
        - `revoke` - Revoke previously granted token spending permissions from a smart contract
        - `revoke_delegation` - Revoke a previously delegated token or voting power
        - `send` - Send tokens to another wallet address
        - `trade` - Exchange or swap assets (e.g., on a DEX)
        - `withdraw` - Withdraw assets from a protocol (e.g., from lending pools, liquidity pools, or vaults)
      example: trade
      enum:
        - approve
        - bid
        - burn
        - claim
        - delegate
        - deploy
        - deposit
        - execute
        - mint
        - receive
        - revoke
        - revoke_delegation
        - send
        - trade
        - withdraw
    AssetType:
      type: string
      description: Type of concrete asset.
      example: fungible
      enum:
        - fungible
        - nft
    ResponseLinks-4:
      type: object
      required:
        - self
      properties:
        self:
          type: string
          format: url
          example: https://api.zerion.io/v1/wallets/0x42b9df65b219b3dd36ff330a4dd8f327a6ada990/transactions/?currency=usd&page%5Bsize%5D=10
        next:
          type: string
          format: url
          example: https://api.zerion.io/v1/wallets/0x42b9df65b219b3dd36ff330a4dd8f327a6ada990/transactions/?currency=usd&page%5BlastId%5D=950ac208a5545dd19a1b2eb8edaef36c&page%5BlastTimestamp%5D=2022-12-08T09%3A12%3A35Z&page%5Bsize%5D=10
    Fee:
      type: object
      description: The fee that was paid for the transaction.
      required:
        - fungible_info
        - quantity
        - price
        - value
      properties:
        fungible_info:
          type: object
          allOf:
            - $ref: '#/components/schemas/Info'
          nullable: true
        quantity:
          $ref: '#/components/schemas/Quantity'
        price:
          type: number
          nullable: true
          format: float
          description: Price of the asset when the transaction was mined. Can be null if price information is unavailable.
          example: 2542.23
        value:
          type: number
          nullable: true
          format: float
          description: The fee value in requested currency. Can be null if value cannot be calculated.
          example: 39.965672931101786
    Refund:
      type: object
      description: The refund that was received for the transaction.
      required:
        - fungible_info
        - quantity
        - value
        - price
      properties:
        fungible_info:
          type: object
          allOf:
            - $ref: '#/components/schemas/Info'
          nullable: true
        quantity:
          $ref: '#/components/schemas/Quantity'
        price:
          type: number
          nullable: true
          format: float
          description: Price of the asset when the transaction was mined.
          example: 2542.23
        value:
          type: number
          nullable: true
          format: float
          description: The refund value in requested currency.
          example: 5.123456789
    InterfaceEnum:
      type: string
      description: The standard that the NFT contract follows, e.g. ERC-721.
      example: erc1155
      enum:
        - erc721
        - erc1155
    ContentLink:
      type: object
      required:
        - url
      properties:
        url:
          type: string
          format: url
          description: URL to the content
          example: https://token-icons.s3.amazonaws.com/0x1494ca1f11d487c2bbe4543e90080aeba4ba3c2b.png
        content_type:
          type: string
          description: MIME content type
          example: image/png
    Content:
      type: object
      properties:
        preview:
          allOf:
            - description: The URL of the preview image
            - $ref: '#/components/schemas/ContentLink'
        detail:
          allOf:
            - description: The URL of the full-size image
            - $ref: '#/components/schemas/ContentLink'
        audio:
          allOf:
            - description: The URL of the audio file
            - $ref: '#/components/schemas/ContentLink'
        video:
          allOf:
            - description: The URL of the video file
            - $ref: '#/components/schemas/ContentLink'
    Flags-3:
      type: object
      properties:
        is_spam:
          type: boolean
          description: Indicates whether the NFT spam or not.
    Info-2:
      type: object
      required:
        - contract_address
        - token_id
        - name
        - interface
        - flags
      properties:
        contract_address:
          type: string
          description: Address of the contract of the NFT.
          example: '0x74ee68a33f6c9f113e22b3b77418b75f85d07d22'
        token_id:
          type: string
          description: Unique identifier of the NFT inside the contract.
          example: '10'
        name:
          type: string
          description: Name of the NFT.
          example: '#10 De·genesis'
        interface:
          $ref: '#/components/schemas/InterfaceEnum'
        content:
          $ref: '#/components/schemas/Content'
        flags:
          $ref: '#/components/schemas/Flags-3'
    Transfer:
      type: object
      required:
        - direction
        - quantity
        - value
        - price
        - sender
        - recipient
        - act_id
      properties:
        encrypted_quantity:
          $ref: '#/components/schemas/EncryptedQuantity'
        fungible_info:
          $ref: '#/components/schemas/Info'
        nft_info:
          $ref: '#/components/schemas/Info-2'
        direction:
          type: string
          description: Direction of the transfer.
          example: in
          enum:
            - in
            - out
            - self
        quantity:
          $ref: '#/components/schemas/Quantity'
        value:
          type: number
          nullable: true
          format: float
          description: Value of the transfer in requested currency. Can be null if value cannot be calculated.
          example: 0
        price:
          type: number
          nullable: true
          format: float
          description: Historical price of the asset. Can be null if price information is unavailable.
          example: 0
        sender:
          type: string
          description: Address of the sender of the transfer.
          example: '0x60a26d69263ef43e9a68964ba141263f19d71d51'
        recipient:
          type: string
          description: Address of the recipient of the transfer.
          example: '0x60a26d69263ef43e9a68964ba141263f19d71d51'
        act_id:
          type: string
          description: Identifier of the act to which the transfer belongs
          example: '2'
    Approval:
      type: object
      required:
        - quantity
        - sender
        - act_id
      properties:
        fungible_info:
          $ref: '#/components/schemas/Info'
        nft_info:
          $ref: '#/components/schemas/Info-2'
        quantity:
          $ref: '#/components/schemas/Quantity'
        sender:
          type: string
          description: Address of the sender of the approval.
          example: '0x60a26d69263ef43e9a68964ba141263f19d71d51'
        act_id:
          type: string
          description: Identifier of the act to which the transfer belongs
          example: '1'
    CollectionInfo:
      type: object
      required:
        - id
        - name
        - icon_url
      properties:
        id:
          type: string
          description: Collection id.
        name:
          type: string
          description: Collection name.
          example: '0x60a26d69263ef43e9a68964ba141263f19d71d51'
        icon_url:
          type: string
          description: Identifier of the act to which the transfer belongs.
          example: '1'
    CollectionApproval:
      type: object
      required:
        - cancelled
        - spender
        - act_id
      properties:
        collection_info:
          $ref: '#/components/schemas/CollectionInfo'
        cancelled:
          type: boolean
          description: Indicates if the approval has been cancelled or granted.
        spender:
          type: string
          description: Address of the spender of the approval.
          example: '0x60a26d69263ef43e9a68964ba141263f19d71d51'
        act_id:
          type: string
          description: Identifier of the act to which the transfer belongs.
          example: '1'
    Delegation:
      type: object
      description: Delegation created on an EVM chain.
      required:
        - address
        - act_id
      properties:
        chain_id:
          type: string
          example: ethereum
        address:
          type: string
          example: '0x42b9df65b219b3dd36ff330a4dd8f327a6ada990'
        act_id:
          type: string
          example: '1'
    ExecutionMethod:
      type: object
      properties:
        id:
          type: string
          description: Execution method id. First 4 bytes of keccak256 of method signature in hex format.
          example: '0x095ea7b3'
        name:
          type: string
          description: Human readable name of the method.
          example: Approve
    DAppInfo-2:
      type: object
      required:
        - contract_address
      properties:
        name:
          type: string
          example: AAVE
          description: |
            Human readable representation of DApp, that wallet interacted to. That offers more intuitive understanding for users.
        icon:
          $ref: '#/components/schemas/Icon'
        contract_address:
          type: string
          description: The address of the executed contract.
          example: '0x794a61358d6845594f94dc1db02a252b5b4814ad'
        method:
          $ref: '#/components/schemas/ExecutionMethod'
    Flags-4:
      type: object
      properties:
        is_trash:
          type: boolean
          description: Is the transaction classified by Zerion as trash.
    ActType:
      type: string
      description: Type of act in the transaction.
      example: trade
      enum:
        - send
        - receive
        - trade
        - deposit
        - withdraw
        - approve
        - execute
        - deploy
        - fee
        - mint
        - burn
        - claim
        - delegate
        - revoke_delegation
        - bid
    Act:
      type: object
      required:
        - id
        - type
      properties:
        id:
          type: string
          description: Unique identifier of the act within the transaction.
          example: '1'
        type:
          $ref: '#/components/schemas/ActType'
        fee_kind:
          type: string
          description: |
            Classification of the fee for acts of type `fee`. Omitted for non-fee acts.

            Possible values:
              - ui — Fee charged by the UI / client application (e.g., a wallet or dApp frontend)
              - jito — Jito tip paid on Solana for priority inclusion
          enum:
            - ui
            - jito
          example: ui
        sent_from:
          type: string
          description: Address of the actual sender of this act. Only set when it differs from the transaction-level `sent_from`, e.g. in ERC-4337 bundler transactions.
          example: '0x42b9df65b219b3dd36ff330a4dd8f327a6ada990'
        application_metadata:
          $ref: '#/components/schemas/DAppInfo-2'
    Attributes-5:
      type: object
      required:
        - operation_type
        - hash
        - mined_at_block
        - mined_at
        - sent_from
        - sent_to
        - status
        - nonce
        - fee
        - transfers
        - approvals
      properties:
        address:
          type: string
          description: Wallet address for which this transaction is being retrieved.
          example: '0x42b9df65b219b3dd36ff330a4dd8f327a6ada990'
        operation_type:
          $ref: '#/components/schemas/Type'
        hash:
          type: string
          description: Hash of the transaction.
          example: '0x109d8622084d562263230ba5de412b5cd7c372019131e2c9d0a8aa4925eb6034'
        mined_at_block:
          type: integer
          format: int32
          description: Number of a block where the transaction was mined.
          example: 15345739
        mined_at:
          type: string
          description: Timestamp string in ISO 8601 format when the transaction was mined.
          example: '2022-08-15T11:26:31+00:00'
        sent_from:
          type: string
          description: Address of a sender of the transaction. It could be a smart contract address too.
          example: '0x42b9df65b219b3dd36ff330a4dd8f327a6ada990'
        sent_to:
          type: string
          description: Address of a recipient of the transaction. It could a be smart contract address too.
          example: '0x794a61358d6845594f94dc1db02a252b5b4814ad'
        status:
          type: string
          description: |
            `confirmed` — mined and executed successfully.
            `failed` — mined but did not execute (out of gas, invalid signature, invalid nonce, or a revert; the cause is not distinguished).
            `pending` — not yet mined.
          example: confirmed
          enum:
            - confirmed
            - failed
            - pending
        nonce:
          type: integer
          format: int32
          description: Nonce of the transaction.
          example: 3757
        fee:
          $ref: '#/components/schemas/Fee'
        refund:
          $ref: '#/components/schemas/Refund'
        transfers:
          type: array
          description: List of transfers. An empty list is returned if the transaction does not have any transfers.
          items:
            $ref: '#/components/schemas/Transfer'
        approvals:
          type: array
          description: List of approvals. An empty list is returned if the transaction does not have any approvals.
          items:
            $ref: '#/components/schemas/Approval'
        collection_approvals:
          type: array
          description: List of collection approvals. An empty list is returned if the transaction does not have any collection approvals.
          items:
            $ref: '#/components/schemas/CollectionApproval'
        delegations:
          type: array
          description: List of delegations.
          items:
            $ref: '#/components/schemas/Delegation'
        application_metadata:
          $ref: '#/components/schemas/DAppInfo-2'
        flags:
          $ref: '#/components/schemas/Flags-4'
        acts:
          type: array
          description: List of acts happened in the transaction for the wallet. Each transfer and approval belongs to one of the acts.
          items:
            $ref: '#/components/schemas/Act'
        paymaster:
          type: string
          description: Address of a transaction fee payer.
          example: '0x794a61358d6845594f94dc1db02a252b5b4814ad'
    Relationships-2:
      type: object
      properties:
        chain:
          $ref: '#/components/schemas/Relationship'
        dapp:
          $ref: '#/components/schemas/Relationship-2'
    Container-4:
      type: object
      required:
        - type
        - id
        - attributes
      properties:
        type:
          type: string
          description: Resource type
          enum:
            - transactions
        id:
          type: string
          description: Unique ID of the transaction.
          example: 52d994a173d755e99845e861d534a419
        attributes:
          $ref: '#/components/schemas/Attributes-5'
        relationships:
          $ref: '#/components/schemas/Relationships-2'
    Response-4:
      type: object
      required:
        - links
        - data
      properties:
        links:
          $ref: '#/components/schemas/ResponseLinks-4'
        data:
          type: array
          items:
            $ref: '#/components/schemas/Container-4'
    ResponseManyLinks:
      type: object
      required:
        - self
      properties:
        self:
          type: string
          format: url
          example: https://api.zerion.io/v1/wallets/0x42b9df65b219b3dd36ff330a4dd8f327a6ada990/nft-positions/
    Content-2:
      type: object
      properties:
        icon:
          allOf:
            - description: The URL for the collection's icon.
            - $ref: '#/components/schemas/Icon'
        banner:
          allOf:
            - description: The URL for the collection's banner image.
            - $ref: '#/components/schemas/ContentLink'
    Info-3:
      type: object
      description: Represents an NFT collection short info.
      properties:
        name:
          type: string
          description: The name of the collection.
        description:
          type: string
          description: The description of the collection.
        content:
          $ref: '#/components/schemas/Content-2'
    Attributes-6:
      type: object
      properties:
        changed_at:
          type: string
          description: The date and the time when the position was updated in ISO format.
          example: '2023-02-28T19:24:39Z'
        amount:
          type: string
          description: The quantity of the NFT position.
          example: '1'
        price:
          type: number
          format: float
          description: The lowest price (floor) of the position's NFT. Measured in the requested currency.
          example: 0.043615722
        value:
          type: number
          format: float
          description: The lowest value of the NFT position (floor). Measured in the requested currency.
        nft_info:
          $ref: '#/components/schemas/Info-2'
        collection_info:
          $ref: '#/components/schemas/Info-3'
    ContainerShort-3:
      type: object
      required:
        - type
        - id
      properties:
        type:
          type: string
          description: NFTs resource type.
          example: nfts
        id:
          type: string
          description: Unique identifier of the NFT.
    Relationship-3:
      type: object
      required:
        - data
      properties:
        data:
          $ref: '#/components/schemas/ContainerShort-3'
    ContainerShort-4:
      type: object
      properties:
        type:
          type: string
          description: NFT collections resource type.
          example: nft_collections
        id:
          type: integer
          description: Unique NFT collection ID.
          example: 14
    Relationship-4:
      type: object
      required:
        - data
      properties:
        data:
          $ref: '#/components/schemas/ContainerShort-4'
    Relationships-3:
      type: object
      required:
        - chain
        - nft_collection
      properties:
        chain:
          allOf:
            - description: The blockchain on which the NFT position exists.
            - $ref: '#/components/schemas/Relationship'
        nft:
          allOf:
            - description: The NFT which represents the position.
            - $ref: '#/components/schemas/Relationship-3'
        nft_collection:
          allOf:
            - description: The NFT collection which the NFT belongs to.
            - $ref: '#/components/schemas/Relationship-4'
    Attribute:
      type: object
      required:
        - key
      properties:
        key:
          type: string
          description: |
            Attribute key. The key is not unique and is it possible to have several attributes
            with the same key.
          example: Rarity
        value:
          type: string
          description: Attribute value
          example: common
    Metadata:
      type: object
      description: Metadata associated with the NFT.
      properties:
        name:
          type: string
          description: The name of the NFT
        description:
          type: string
          description: The description of the NFT
        tags:
          type: array
          description: The list of tags associated with the NFT
          items:
            type: string
        content:
          $ref: '#/components/schemas/Content'
        attributes:
          type: array
          description: The list of attributes associated with the NFT
          items:
            $ref: '#/components/schemas/Attribute'
    MarketDataPrices:
      type: object
      description: The prices associated with the NFT expressed in the currency specified in the request parameters.
      properties:
        floor:
          type: number
          format: float
          description: The lowest known price for the NFT.
    LastSale:
      type: object
      description: Information about last sale of the NFT.
      properties:
        price:
          type: number
          format: float
          description: The last known sale price of the NFT in the currency specified in the request parameters.
          example: 31
        quantity:
          allOf:
            - description: The quantity of the NFT in the last sale.
            - $ref: '#/components/schemas/Quantity'
    MarketData-2:
      type: object
      properties:
        prices:
          $ref: '#/components/schemas/MarketDataPrices'
        last_sale:
          $ref: '#/components/schemas/LastSale'
    ExternalLink:
      type: object
      required:
        - url
      properties:
        type:
          type: string
          description: Type of the link
          example: website
        name:
          type: string
          description: Displayable name of the link
          example: Website
        url:
          type: string
          format: url
          description: Link to the external resource
          example: https://www.indexcoop.com
    ExternalLinks:
      type: array
      description: A list of relevant URLs.
      items:
        $ref: '#/components/schemas/ExternalLink'
    Attributes-7:
      type: object
      description: Represents attributes of a non-fungible token (NFT) corresponding to JSON API specification.
      required:
        - contract_address
        - token_id
      properties:
        contract_address:
          type: string
          description: The address of the contract that manages the NFT.
          example: '0x74ee68a33f6c9f113e22b3b77418b75f85d07d22'
        token_id:
          type: string
          description: The unique identifier for the NFT within its contract.
          example: '10'
        interface:
          $ref: '#/components/schemas/InterfaceEnum'
        metadata:
          $ref: '#/components/schemas/Metadata'
        market_data:
          $ref: '#/components/schemas/MarketData-2'
        external_links:
          $ref: '#/components/schemas/ExternalLinks'
        flags:
          $ref: '#/components/schemas/Flags-3'
    Relationships-4:
      type: object
      description: Represents relationships of a non-fungible token (NFT) corresponding to JSON API specification.
      required:
        - chain
      properties:
        chain:
          allOf:
            - description: The blockchain on which the NFT exists.
            - $ref: '#/components/schemas/Relationship'
        nft_collection:
          allOf:
            - description: The collection that the NFT belongs to.
            - $ref: '#/components/schemas/Relationship-4'
    Container-5:
      type: object
      description: Represents a non-fungible token (NFT).
      required:
        - type
        - id
      properties:
        type:
          type: string
          description: NFTs resource type.
          example: nfts
        id:
          type: string
          description: Unique identifier of the NFT.
        attributes:
          $ref: '#/components/schemas/Attributes-7'
        relationships:
          $ref: '#/components/schemas/Relationships-4'
    Metadata-2:
      type: object
      description: Metadata associated with the NFT.
      properties:
        name:
          type: string
          description: The name of the collection.
        description:
          type: string
          description: The description of the collection.
        content:
          $ref: '#/components/schemas/Content-2'
        payment_token_symbol:
          type: string
          description: The symbol for the payment token used by the collection.
    MarketDataPrices-2:
      type: object
      description: Prices associated with the NFT collection expressed in the currency specified in the request parameters.
      properties:
        floor:
          type: number
          format: float
          description: The lowest known price for an NFT in the collection.
    MarketData-3:
      type: object
      description: Contains marketplace data for a collection of NFTs.
      properties:
        prices:
          $ref: '#/components/schemas/MarketDataPrices-2'
    Implementation-2:
      type: object
      description: Represents a blockchain implementation of an NFT collection.
      required:
        - chain_id
        - address
      properties:
        chain_id:
          type: string
          description: The chain ID where the collection is deployed.
          example: ethereum
        address:
          type: string
          nullable: true
          description: The contract address of the collection on the chain.
          example: '0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d'
    ContainerAttributes:
      type: object
      description: Represents an NFT collection attributes corresponding to JSON API specification.
      properties:
        metadata:
          $ref: '#/components/schemas/Metadata-2'
        market_data:
          $ref: '#/components/schemas/MarketData-3'
        implementations:
          type: array
          description: List of blockchain implementations where this collection is deployed
          items:
            $ref: '#/components/schemas/Implementation-2'
    Container-6:
      type: object
      properties:
        type:
          type: string
          description: NFT collections resource type.
          example: nft_collections
        id:
          type: integer
          description: Unique NFT collection ID.
          example: 14
        attributes:
          $ref: '#/components/schemas/ContainerAttributes'
    Attributes-8:
      type: object
      required:
        - nfts_count
        - total_floor_price
      properties:
        min_changed_at:
          type: string
          nullable: true
          description: The earliest `changed_at` date and time alongside all wallet's positions from the collection.
          example: '2020-02-28T19:24:39Z'
        max_changed_at:
          type: string
          nullable: true
          description: The most recent `changed_at` date and time alongside all wallet's positions from the collection.
          example: '2023-02-28T19:24:39Z'
        nfts_count:
          type: string
          description: The total quantity of the wallet's NFT positions from the collection.
          example: '1'
        total_floor_price:
          type: number
          format: float
          description: The lowest price (floor) of the all wallet's NFTs positions from the collection. Measured in the requested currency.
        collection_info:
          $ref: '#/components/schemas/Info-3'
    Relationships-5:
      type: object
      required:
        - chains
        - nft_collection
      properties:
        chains:
          type: array
          description: The blockchain on which the NFT collection exists.
          items:
            $ref: '#/components/schemas/Relationship'
        nft_collection:
          allOf:
            - description: The NFT collection itself.
            - $ref: '#/components/schemas/Relationship-4'
    Container-7:
      type: object
      description: The NFT collection held by the wallet.
      required:
        - type
        - id
        - attributes
      properties:
        type:
          type: string
          description: NFT collection resource type.
          example: wallet_nft_collections
        id:
          type: integer
          description: NFT collection's unique ID.
          example: 14
        attributes:
          $ref: '#/components/schemas/Attributes-8'
        relationships:
          $ref: '#/components/schemas/Relationships-5'
    Included:
      type: array
      items:
        anyOf:
          - $ref: '#/components/schemas/Container-5'
          - $ref: '#/components/schemas/Container-6'
          - $ref: '#/components/schemas/Container-7'
    Container-8:
      type: object
      description: The NFT position of the wallet.
      required:
        - type
        - id
        - attributes
      properties:
        type:
          type: string
          description: NFT positions resource type.
          example: nft_positions
        id:
          type: string
          description: NFT position's unique ID.
          example: 0x42b9df65b219b3dd36ff330a4dd8f327a6ada990:ethereum:22:0x909899c5dbb5002610dd8543b6f638be56e3b17e:57896044618658097711785492504343953928676686534345912800509039648547174119787
        attributes:
          $ref: '#/components/schemas/Attributes-6'
        relationships:
          $ref: '#/components/schemas/Relationships-3'
        included:
          $ref: '#/components/schemas/Included'
    ResponseMany:
      type: object
      required:
        - links
        - data
      properties:
        links:
          $ref: '#/components/schemas/ResponseManyLinks'
        data:
          type: array
          items:
            $ref: '#/components/schemas/Container-8'
    ProcessingResponseMany:
      type: object
      required:
        - links
        - data
      properties:
        links:
          $ref: '#/components/schemas/ResponseManyLinks'
        data:
          type: array
          example: []
    ResponseLinks-5:
      type: object
      required:
        - self
      properties:
        self:
          type: string
          format: url
          example: https://api.zerion.io/v1/wallets/0x42b9df65b219b3dd36ff330a4dd8f327a6ada990/nft-collections/
    Included-2:
      type: array
      items:
        anyOf:
          - $ref: '#/components/schemas/Container-6'
    Response-5:
      type: object
      required:
        - links
        - data
      properties:
        links:
          $ref: '#/components/schemas/ResponseLinks-5'
        data:
          type: array
          items:
            allOf:
              - $ref: '#/components/schemas/Container-7'
              - type: object
                properties:
                  included:
                    $ref: '#/components/schemas/Included-2'
    ResponseLinks-6:
      type: object
      required:
        - self
      properties:
        self:
          type: string
          format: url
          example: https://api.zerion.io/v1/wallets/0x42b9df65b219b3dd36ff330a4dd8f327a6ada990/nft-portfolio/?currency=usd
    PositionsDistributionByChain-2:
      type: object
      properties:
        arbitrum:
          type: number
          format: float
          description: Total value of NFTs on arbitrum chain in selected currency
          example: 140.14877478334236
        aurora:
          type: number
          format: float
          description: Total value of NFTs on polygon chain in selected currency
          example: 75.59585404617037
        avalanche:
          type: number
          format: float
          description: Total value of NFTs on avalanche chain in selected currency
          example: 54.39483513803602
        binance-smart-chain:
          type: number
          format: float
          description: Total value of NFTs on bsc chain in selected currency
          example: 1439.98965199211
        ethereum:
          type: number
          format: float
          description: Total value of NFTs on ethereum chain in selected currency
          example: 1439.98965199211
        fantom:
          type: number
          format: float
          description: Total value of NFTs on fantom chain in selected currency
          example: 104.5039957833603
        loopring:
          type: number
          format: float
          description: Total value of NFTs on loopring chain in selected currency
          example: 0
        optimism:
          type: number
          format: float
          description: Total value of NFTs on optimism chain in selected currency
          example: 55.111921042409875
        polygon:
          type: number
          format: float
          description: Total value of NFTs on polygon chain in selected currency
          example: 37.55943746454931
        solana:
          type: number
          format: float
          description: Total value of NFTs on solana chain in selected currency
          example: 0
        xdai:
          type: number
          format: float
          description: Total value of NFTs on xdai chain in selected currency
          example: 74.08441891963194
      additionalProperties:
        type: number
        format: float
        description: Total value of NFTs in selected currency on specified chain.
        example: 123.5
    Attributes-9:
      type: object
      properties:
        positions_distribution_by_chain:
          $ref: '#/components/schemas/PositionsDistributionByChain-2'
    Container-9:
      type: object
      required:
        - type
        - id
        - attributes
      properties:
        type:
          type: string
          example: wallet_nft_portfolio
        id:
          type: string
          description: NFT portfolio unique ID
          example: nft-portfolio-0x42b9df65b219b3dd36ff330a4dd8f327a6ada990
        attributes:
          $ref: '#/components/schemas/Attributes-9'
    Response-6:
      type: object
      required:
        - links
        - data
      properties:
        links:
          $ref: '#/components/schemas/ResponseLinks-6'
        data:
          $ref: '#/components/schemas/Container-9'
    ProcessingResponse:
      type: object
      required:
        - links
      properties:
        links:
          $ref: '#/components/schemas/ResponseLinks-6'
        data:
          type: object
    ResponseLinks-8:
      type: object
      properties:
        self:
          type: string
          format: url
          example: https://api.zerion.io/v1/wallet-sets/charts/week?addresses=0x42b9df65b219b3dd36ff330a4dd8f327a6ada990%2C8BH9pjtgyZDC4iAQH5ZiYDZ1MDWC98xki2V8NzqqKW3K&currency=eth&filter%5Bchain_ids%5D=ethereum%2Csolana
    Container-11:
      type: object
      required:
        - type
        - id
      properties:
        type:
          type: string
          description: Resource type
          enum:
            - wallet_chart
        id:
          type: string
          description: Wallet set chart unique identifier
          example: 0x42b9df65b219b3dd36ff330a4dd8f327a6ada990,8BH9pjtgyZDC4iAQH5ZiYDZ1MDWC98xki2V8NzqqKW3K-week
        attributes:
          $ref: '#/components/schemas/Attributes'
    Response-8:
      type: object
      required:
        - links
        - data
      properties:
        links:
          $ref: '#/components/schemas/ResponseLinks-8'
        data:
          $ref: '#/components/schemas/Container-11'
    ResponseLinks-9:
      type: object
      required:
        - self
      properties:
        self:
          type: string
          format: url
          example: https://api.zerion.io/v1/wallet-sets/pnl?addresses=0x42b9df65b219b3dd36ff330a4dd8f327a6ada990%2C8BH9pjtgyZDC4iAQH5ZiYDZ1MDWC98xki2V8NzqqKW3K&currency=eth&filter%5Bchain_ids%5D=ethereum%2Csolana&filter%5Bfungible_ids%5D=11111111111111111111111111111111%2Ceth
    Container-12:
      type: object
      required:
        - type
        - id
        - attributes
      properties:
        type:
          type: string
          description: Resource type
          enum:
            - pnl
        id:
          type: string
          description: Wallet set PNL unique ID
          example: 0x42b9df65b219b3dd36ff330a4dd8f327a6ada990,8BH9pjtgyZDC4iAQH5ZiYDZ1MDWC98xki2V8NzqqKW3K
        attributes:
          $ref: '#/components/schemas/Attributes-2'
    Response-9:
      type: object
      required:
        - links
        - data
      properties:
        links:
          $ref: '#/components/schemas/ResponseLinks-9'
        data:
          $ref: '#/components/schemas/Container-12'
        meta:
          type: object
          description: |
            Metadata about the PnL calculation (only present when assets were excluded from the calculation).
            The structure matches the filter type used in the request:
            - When filtering by `fungible_ids`, the meta contains an `excluded_fungible_ids` array
            - When filtering by `fungible_implementations`, the meta contains an `excluded_fungible_implementations` array
            - If both filters are used, both fields may appear in the meta
          properties:
            excluded_fungible_ids:
              type: array
              items:
                type: string
              description: Fungible asset IDs that were excluded due to missing prices (only present when the request used fungible_ids filter)
              example:
                - 4a702a34-5cfd-41af-96ad-bd1c45c3672e
            excluded_fungible_implementations:
              type: array
              items:
                type: string
              description: |
                Asset implementations that were excluded due to missing prices (only present when the request used fungible_implementations filter).
                Format matches the user's query format: "chain:address" for regular tokens, "chain:" for base assets.
              example:
                - ethereum:0x6b175474e89094c44da98b954eedeac495271d0f
                - 'ethereum:'
    ResponseLinks-10:
      type: object
      required:
        - self
      properties:
        self:
          type: string
          format: url
          example: https://api.zerion.io/v1/wallet-sets/portfolio?addresses=0x42b9df65b219b3dd36ff330a4dd8f327a6ada990%2C8BH9pjtgyZDC4iAQH5ZiYDZ1MDWC98xki2V8NzqqKW3K&currency=eth&filter%5Bpositions%5D=no_filter
    Response-10:
      type: object
      required:
        - links
        - data
      properties:
        links:
          $ref: '#/components/schemas/ResponseLinks-10'
        data:
          $ref: '#/components/schemas/Container-2'
    ResponseLinks-11:
      type: object
      required:
        - self
      properties:
        self:
          type: string
          format: url
          example: https://api.zerion.io/v1/wallet-sets/positions/?addresses=0x42b9df65b219b3dd36ff330a4dd8f327a6ada990%2C8BH9pjtgyZDC4iAQH5ZiYDZ1MDWC98xki2V8NzqqKW3K&currency=eth&filter%5Bchain_ids%5D=ethereum%2Csolana&filter%5Bpositions%5D=only_simple&filter%5Btrash%5D=only_non_trash&sort=value
    Response-11:
      type: object
      required:
        - links
        - data
      properties:
        links:
          $ref: '#/components/schemas/ResponseLinks-11'
        data:
          type: array
          items:
            $ref: '#/components/schemas/Container-3'
    ResponseLinks-12:
      type: object
      required:
        - self
      properties:
        self:
          type: string
          format: url
          example: http://api.zerion.io/v1/wallet-sets/transactions/?addresses=0x42b9df65b219b3dd36ff330a4dd8f327a6ada990%2C8BH9pjtgyZDC4iAQH5ZiYDZ1MDWC98xki2V8NzqqKW3K&currency=eth&filter%5Bchain_ids%5D=arbitrum%2Csolana&filter%5Bmax_mined_at%5D=1764246600000&filter%5Btrash%5D=no_filter&page%5Bafter%5D=WyIiLCIiXQ%3D%3D&page%5Bsize%5D=5
        next:
          type: string
          format: url
          example: http://api.zerion.io/v1/wallet-sets/transactions/?addresses=0x42b9df65b219b3dd36ff330a4dd8f327a6ada990%2C8BH9pjtgyZDC4iAQH5ZiYDZ1MDWC98xki2V8NzqqKW3K&currency=eth&filter%5Bchain_ids%5D=arbitrum%2Csolana&filter%5Bmax_mined_at%5D=1764246600000&filter%5Btrash%5D=no_filter&page%5Bafter%5D=WyIyMDI1LTExLTI3VDA4OjQwOjU3WiIsImYxNWMwOTEzYTBlMzVhMjk4NDZhODY1ZmVjYjQyZDUwIl0%3D&page%5Bsize%5D=5
    Response-12:
      type: object
      required:
        - links
        - data
      properties:
        links:
          $ref: '#/components/schemas/ResponseLinks-12'
        data:
          type: array
          items:
            $ref: '#/components/schemas/Container-4'
    ResponseManyLinks-2:
      type: object
      required:
        - self
      properties:
        self:
          type: string
          format: url
          example: https://api.zerion.io/v1/fungibles/
        first:
          type: string
          format: url
          example: https://api.zerion.io/v1/fungibles/
        next:
          type: string
          format: url
          example: https://api.zerion.io/v1/fungibles/
        prev:
          type: string
          format: url
          example: https://api.zerion.io/v1/fungibles/
    ImplementationMarketData:
      type: object
      properties:
        trading_volumes:
          $ref: '#/components/schemas/TradingVolumes'
    AttributesImplementation:
      type: object
      required:
        - chain_id
        - address
        - decimals
      properties:
        chain_id:
          type: string
          description: Unique id of the chain.
          example: ethereum
        address:
          type: string
          nullable: true
          description: 'Implementation address on the chain. Empty (`""`) for the chain''s native asset (for example ETH on Ethereum, HYPE on HyperEVM), which has no contract address. To look a native asset up, use `GET /v1/fungibles/by-implementation?implementation=<chain_id>` or the chain''s `native_fungible` relationship on `GET /v1/chains/{chain_id}`. Note: `fungible_info.implementations[]` on wallet endpoints returns `null` for the same case.'
          example: '0x2af1df3ab0ab157e1e2ad8f88a7d04fbea0c7dc6'
        decimals:
          type: integer
          description: Number of decimals points of the implementation.
          example: 18
        market_data:
          $ref: '#/components/schemas/ImplementationMarketData'
        deployment_date:
          type: string
          format: date-time
          description: Date and time when the token contract was deployed on this chain (ISO 8601).
          example: '2020-09-09T11:11:13Z'
    Attributes-11:
      type: object
      required:
        - name
        - symbol
        - flags
        - external_links
        - implementations
        - market_data
      properties:
        name:
          type: string
          description: Displayable name of the fungible.
          example: Bankless BED Index
        symbol:
          type: string
          description: Displayable symbol of the fungible.
          example: BED
        asset_class:
          $ref: '#/components/schemas/AssetClass'
        description:
          type: string
          nullable: true
          description: Brief description of the fungible.
          example: The BED index is meant to track crypto's top 3 investab.
        icon:
          $ref: '#/components/schemas/Icon'
        flags:
          $ref: '#/components/schemas/Flags'
        external_links:
          $ref: '#/components/schemas/ExternalLinks'
        implementations:
          type: array
          description: Implementation details of the fungible on various chains.
          items:
            $ref: '#/components/schemas/AttributesImplementation'
        market_data:
          $ref: '#/components/schemas/MarketData'
    Relationships-6:
      type: object
      required:
        - chart_hour
        - chart_day
        - chart_week
        - chart_month
        - chart_year
        - chart_max
      properties:
        chart_hour:
          type: object
          required:
            - links
            - data
          properties:
            links:
              type: object
              required:
                - related
              properties:
                related:
                  format: url
                  example: https://api.zerion.io/v1/fungibles/0x2af1df3ab0ab157e1e2ad8f88a7d04fbea0c7dc6/charts/hour
            data:
              type: object
              required:
                - type
                - id
              properties:
                type:
                  type: string
                  example: fungible_charts
                id:
                  type: string
                  example: 0x2af1df3ab0ab157e1e2ad8f88a7d04fbea0c7dc6-hour
        chart_day:
          type: object
          required:
            - links
            - data
          properties:
            links:
              type: object
              required:
                - related
              properties:
                related:
                  format: url
                  example: https://api.zerion.io/v1/fungibles/0x2af1df3ab0ab157e1e2ad8f88a7d04fbea0c7dc6/charts/day
            data:
              type: object
              required:
                - type
                - id
              properties:
                type:
                  type: string
                  example: fungible_charts
                id:
                  type: string
                  example: 0x2af1df3ab0ab157e1e2ad8f88a7d04fbea0c7dc6-day
        chart_week:
          type: object
          required:
            - links
            - data
          properties:
            links:
              type: object
              required:
                - related
              properties:
                related:
                  format: url
                  example: https://api.zerion.io/v1/fungibles/0x2af1df3ab0ab157e1e2ad8f88a7d04fbea0c7dc6/charts/week
            data:
              type: object
              required:
                - type
                - id
              properties:
                type:
                  type: string
                  example: fungible_charts
                id:
                  type: string
                  example: 0x2af1df3ab0ab157e1e2ad8f88a7d04fbea0c7dc6-week
        chart_month:
          type: object
          required:
            - links
            - data
          properties:
            links:
              type: object
              required:
                - related
              properties:
                related:
                  format: url
                  example: https://api.zerion.io/v1/fungibles/0x2af1df3ab0ab157e1e2ad8f88a7d04fbea0c7dc6/charts/month
            data:
              type: object
              required:
                - type
                - id
              properties:
                type:
                  type: string
                  example: fungible_charts
                id:
                  type: string
                  example: 0x2af1df3ab0ab157e1e2ad8f88a7d04fbea0c7dc6-month
        chart_year:
          type: object
          required:
            - links
            - data
          properties:
            links:
              type: object
              required:
                - related
              properties:
                related:
                  format: url
                  example: https://api.zerion.io/v1/fungibles/0x2af1df3ab0ab157e1e2ad8f88a7d04fbea0c7dc6/charts/year
            data:
              type: object
              required:
                - type
                - id
              properties:
                type:
                  type: string
                  example: fungible_charts
                id:
                  type: string
                  example: 0x2af1df3ab0ab157e1e2ad8f88a7d04fbea0c7dc6-year
        chart_max:
          type: object
          required:
            - links
            - data
          properties:
            links:
              type: object
              required:
                - related
              properties:
                related:
                  format: url
                  example: https://api.zerion.io/v1/fungibles/0x2af1df3ab0ab157e1e2ad8f88a7d04fbea0c7dc6/charts/max
            data:
              type: object
              required:
                - type
                - id
              properties:
                type:
                  type: string
                  example: fungible_charts
                id:
                  type: string
                  example: 0x2af1df3ab0ab157e1e2ad8f88a7d04fbea0c7dc6-max
    Container-13:
      type: object
      description: Object, representing fungible asset.
      required:
        - type
        - id
      properties:
        type:
          type: string
          description: Fungible resource type
          example: fungibles
        id:
          type: string
          description: Fungible unique identifier
          example: '0x2af1df3ab0ab157e1e2ad8f88a7d04fbea0c7dc6'
        attributes:
          $ref: '#/components/schemas/Attributes-11'
        relationships:
          $ref: '#/components/schemas/Relationships-6'
    ResponseMany-2:
      type: object
      required:
        - links
        - data
      properties:
        links:
          $ref: '#/components/schemas/ResponseManyLinks-2'
        data:
          type: array
          items:
            $ref: '#/components/schemas/Container-13'
    ResponseLinks-13:
      type: object
      properties:
        related:
          type: string
          format: url
          example: https://api.zerion.io/v1/fungibles/0x2af1df3ab0ab157e1e2ad8f88a7d04fbea0c7dc6
    Response-13:
      type: object
      required:
        - links
        - data
      properties:
        links:
          $ref: '#/components/schemas/ResponseLinks-13'
        data:
          $ref: '#/components/schemas/Container-13'
    ResponseLinks-14:
      type: object
      properties:
        self:
          type: string
          format: url
          example: https://api.zerion.io/v1/fungibles/fda0820a-9cff-40f5-997b-a76b9f9d60e7/charts/day
    Attributes-12:
      type: object
      required:
        - begin_at
        - end_at
      properties:
        begin_at:
          type: string
          description: Begin timestamp of the chart
          example: '2023-01-18T11:00:00Z'
        end_at:
          type: string
          description: End timestamp of the chart
          example: '2023-01-25T10:30:00Z'
        stats:
          type: object
          required:
            - first
            - min
            - avg
            - max
            - last
          properties:
            first:
              type: number
              format: double
              description: First chart value
              example: 1145.00999
            min:
              type: number
              format: double
              description: Minimum value on the chart
              example: 1133.034
            avg:
              type: number
              format: double
              description: Average chart value
              example: 1689.1110093
            max:
              type: number
              format: double
              description: Maximum value on the chart
              example: 2345.601
            last:
              type: number
              format: double
              description: Last chart value
              example: 1515.34
        points:
          type: array
          description: Sorted list of chart points
          items:
            type: array
            description: Chart point - tuple of two items, the first one is timestamp, the second one is a price in requested currency
            items:
              oneOf:
                - type: integer
                - type: number
            minItems: 2
            maxItems: 2
            example:
              - 1674039600
              - 1145.00999
    Container-14:
      type: object
      required:
        - type
        - id
      properties:
        type:
          type: string
          description: Fungible chart resource type
          example: fungible_charts
        id:
          type: string
          description: Fungible chart unique identifier
          example: fda0820a-9cff-40f5-997b-a76b9f9d60e7-week
        attributes:
          $ref: '#/components/schemas/Attributes-12'
    Response-14:
      type: object
      required:
        - links
        - data
      properties:
        links:
          $ref: '#/components/schemas/ResponseLinks-14'
        data:
          $ref: '#/components/schemas/Container-14'
    ResponseLinks-15:
      type: object
      required:
        - self
      properties:
        self:
          type: string
          format: url
          description: URL of current resource
          example: https://api.zerion.io/v1/chains/
    Explorer:
      type: object
      required:
        - name
      description: Chain explorer data
      properties:
        name:
          type: string
          description: Human readable explorer name
          example: polygonScan
        token_url_format:
          type: string
          format: url
          description: URL with placeholders that leads to a token page
          example: https://explorer.mainnet.polygon.dev/token/{ADDRESS}
        tx_url_format:
          type: string
          format: url
          description: URL with placeholders that points to a transaction page
          example: https://explorer.mainnet.polygon.dev/tx/{HASH}
        home_url:
          type: string
          format: url
          description: URL leads to the explorer homepage
          example: https://explorer.mainnet.polygon.dev
    RPC:
      type: object
      description: Chain RPC servers data
      properties:
        internal_server_url_format:
          type: string
          format: url
          description: URL with placeholders of RPC server which can be used for project purposes
          example: https://mainnet.polygon.dev/{polygon_API_KEY}
        public_servers_url:
          type: array
          description: List of URL of public RPC servers which can be used by everyone
          items:
            type: string
            format: url
            example: https://mainnet.polygon.dev
    Flags-5:
      type: object
      description: Various chain related boolean flags
      required:
        - supports_trading
        - supports_sending
        - supports_bridge
      properties:
        supports_trading:
          type: boolean
          description: Whether trading is supported on Zerion for this chain or not
          example: true
        supports_sending:
          type: boolean
          description: Whether sending is supported on Zerion for this chain or not
          example: true
        supports_bridge:
          type: boolean
          description: Whether bridges are supported on Zerion for this chain or not
          example: true
    Attributes-13:
      type: object
      description: Attributes of chain resource
      required:
        - name
      properties:
        external_id:
          type: string
          description: Community used chain ID
          example: '0x4e454152'
        name:
          type: string
          description: Human readable chain name
          example: polygon
        icon:
          $ref: '#/components/schemas/Icon'
        explorer:
          $ref: '#/components/schemas/Explorer'
        rpc:
          $ref: '#/components/schemas/RPC'
        flags:
          $ref: '#/components/schemas/Flags-5'
    ContainerShort-5:
      type: object
      required:
        - type
        - id
      properties:
        type:
          type: string
          description: Fungible resource type
          example: fungibles
        id:
          type: string
          description: Fungible unique identifier
          example: '0x2af1df3ab0ab157e1e2ad8f88a7d04fbea0c7dc6'
    ResponseShort:
      type: object
      required:
        - links
        - data
      properties:
        links:
          $ref: '#/components/schemas/ResponseLinks-13'
        data:
          $ref: '#/components/schemas/ContainerShort-5'
    Relationships-7:
      type: object
      required:
        - native_fungible
      properties:
        native_fungible:
          $ref: '#/components/schemas/ResponseShort'
        wrapped_native_fungible:
          $ref: '#/components/schemas/ResponseShort'
    Container-15:
      type: object
      required:
        - type
        - id
      properties:
        type:
          type: string
          description: Chain resource type
          example: chains
        id:
          type: string
          description: Chain unique identifier
          example: polygon
        attributes:
          $ref: '#/components/schemas/Attributes-13'
        relationships:
          $ref: '#/components/schemas/Relationships-7'
    Response-15:
      type: object
      required:
        - links
        - data
      properties:
        links:
          $ref: '#/components/schemas/ResponseLinks-15'
        data:
          type: array
          items:
            $ref: '#/components/schemas/Container-15'
    ResponseLinks-16:
      type: object
      required:
        - self
      properties:
        self:
          type: string
          format: url
          description: URL of the current chain.
          example: https://api.zerion.io/v1/chains/polygon
    ChainResponse:
      type: object
      required:
        - links
        - data
      properties:
        links:
          $ref: '#/components/schemas/ResponseLinks-16'
        data:
          $ref: '#/components/schemas/Container-15'
    ResponseLinks-17:
      type: object
      required:
        - self
      properties:
        self:
          type: string
          format: url
          example: https://api.zerion.io/v1/wallet/0x42b9df65b219b3dd36ff330a4dd8f327a6ada990/swap-list
    QuoteAmount:
      type: object
      properties:
        quantity:
          type: string
          description: Human-readable amount as a decimal string. Absent for `output_amount_after_fees` of a cross-chain bridge when the fees are denominated in different tokens and a single-token quantity is not well-defined; in that case the fiat fields (`value`/`usd_value`) still carry the net amount.
          example: '0.001'
        value:
          type: number
          format: float
          description: Fiat value of the amount in the requested `currency`. Absent when no price is known for the asset.
          example: 2.2830463441233997
        usd_value:
          type: number
          format: float
          description: Fiat value of the amount in USD. Absent when no price is known for the asset.
          example: 2.2830463441233997
        currency:
          type: string
          description: Currency code that `value` is expressed in, in upper case (matches the requested `currency` query parameter). Present only when `value` is present.
          example: USD
    RelationshipData:
      type: object
      required:
        - type
        - id
      properties:
        type:
          type: string
          description: Fungible resource type
          example: fungibles
        id:
          type: string
          description: Fungible unique identifier.
          example: eth
    EVMCustomData:
      type: object
      description: Chain-specific transaction extras. Currently used for zkSync Era paymaster parameters.
      properties:
        paymaster_params:
          type: object
          description: Paymaster sponsorship parameters. Absent on transactions that do not use a paymaster.
          required:
            - paymaster
            - paymaster_input
          properties:
            paymaster:
              type: string
              description: Address of the paymaster contract.
            paymaster_input:
              type: string
              description: Calldata for the paymaster.
        gas_per_pubdata_byte:
          type: string
          description: Gas per pubdata byte (zkSync-specific). Absent when the source did not provide it.
    EVMTransaction:
      type: object
      description: EVM transaction in a form ready to be signed by an EVM wallet. Numeric fields are encoded as `0x`-prefixed hex strings.
      required:
        - type
        - from
        - to
        - nonce
        - chain_id
        - gas
        - value
        - data
      properties:
        type:
          type: string
          description: EIP-2718 transaction type.
          example: '0x2'
        from:
          type: string
          description: Address that should sign and send the transaction.
          example: '0xbf9db3564c22fd22ff30a8db7f689d654bf5f1fd'
        to:
          type: string
          description: Address the transaction is sent to (typically the swap router contract).
          example: '0xb2be281e8b11b47fec825973fc8bb95332022a54'
        nonce:
          type: string
          description: Transaction nonce at the time the quote was built. The wallet may need to refresh it at signing time if the on-chain value has changed.
          example: '0x42'
        chain_id:
          type: string
          description: EIP-155 chain ID.
          example: '0x1'
        gas:
          type: string
          description: Gas limit.
          example: '0x1c138'
        gas_price:
          type: string
          description: Legacy (Type-0/1) gas price. Mutually exclusive with `max_fee` / `max_priority_fee` — present for legacy transactions, absent for EIP-1559.
          example: '0x9502f900'
        max_fee:
          type: string
          description: EIP-1559 max fee per gas. Mutually exclusive with `gas_price` — present for EIP-1559 transactions, absent for legacy.
          example: '0xc6a17141'
        max_priority_fee:
          type: string
          description: EIP-1559 max priority fee per gas. Mutually exclusive with `gas_price` — present for EIP-1559 transactions, absent for legacy.
          example: '0x35aeb151'
        value:
          type: string
          description: Native-asset value attached to the transaction, in wei.
          example: '0x0'
        data:
          type: string
          description: Calldata.
          example: '0xa9059cbb000000000000000000000000d8da6bf26964af9d7eed9e03e53415d37aa9604500000000000000000000000000000000000000000000000000000000000003e8'
        custom_data:
          allOf:
            - description: Chain-specific extra fields (currently zkSync paymaster parameters). Omitted on chains that don't need them.
            - $ref: '#/components/schemas/EVMCustomData'
    SolanaTransaction:
      type: object
      description: Solana transaction ready to be signed by a Solana wallet.
      required:
        - raw
      properties:
        raw:
          type: string
          description: Base64-encoded raw Solana transaction bytes.
    MultichainTransaction:
      type: object
      description: Transaction payload in a chain-agnostic envelope. Exactly one of `evm` or `solana` is present, depending on the chain on which the transaction must be sent.
      properties:
        evm:
          type: object
          description: EVM transaction payload. Present only for EVM-chain transactions.
          allOf:
            - $ref: '#/components/schemas/EVMTransaction'
        solana:
          type: object
          description: Solana transaction payload. Present only for Solana transactions.
          allOf:
            - $ref: '#/components/schemas/SolanaTransaction'
    QuoteAttributes:
      type: object
      required:
        - liquidity_source
        - input_amount
        - output_amount
        - minimum_output_amount
        - output_amount_after_fees
        - slippage_percent
      properties:
        liquidity_source:
          type: object
          required:
            - id
            - name
          properties:
            id:
              type: string
              description: Identifier of the liquidity source providing this quote.
              example: relay
            name:
              type: string
              description: Display name of the liquidity source.
              example: Relay
            icon:
              $ref: '#/components/schemas/Icon'
        input_amount:
          allOf:
            - description: Amount of the input asset being sent.
            - $ref: '#/components/schemas/QuoteAmount'
        output_amount:
          allOf:
            - description: Estimated amount of the output asset to be received before slippage.
            - $ref: '#/components/schemas/QuoteAmount'
        minimum_output_amount:
          allOf:
            - description: Minimum amount of the output asset to be received after slippage.
            - $ref: '#/components/schemas/QuoteAmount'
        output_amount_after_fees:
          allOf:
            - description: Amount of the output asset after subtracting fees. Same shape as `output_amount`; `value`/`usd_value` are absent when fiat conversion is unavailable.
            - $ref: '#/components/schemas/QuoteAmount'
        rate:
          type: array
          description: Two-element pair describing the exchange rate between the input and the output asset. Absent when no rate could be computed (e.g. for an errored quote).
          items:
            type: object
            required:
              - value
              - symbol
            properties:
              value:
                type: number
                format: double
                example: 1
              symbol:
                type: string
                example: WETH
        slippage_percent:
          type: number
          format: float
          description: Slippage tolerance baked into this quote, in percent. Equals the `slippage_percent` query parameter when provided; otherwise an auto-slippage value chosen by Zerion based on the asset pair's volatility and liquidity. This is the slippage that will actually apply to the executed swap (used to compute `minimum_output_amount` and forwarded to the upstream provider when building the transaction).
          example: 2
        protocol_fee:
          type: object
          description: Zerion protocol fee applied to this quote. Absent when the route is not subject to a protocol fee.
          required:
            - amount
            - base_percentage
            - percentage
            - included_in_rate
          properties:
            amount:
              $ref: '#/components/schemas/QuoteAmount'
            fungible:
              allOf:
                - description: Fungible asset in which the fee is taken. Absent when the source did not identify a fungible (e.g. native-asset fees).
                - $ref: '#/components/schemas/RelationshipData'
            base_percentage:
              type: number
              format: float
              description: Default Zerion fee percentage before any waivers or overrides.
              example: 0.67
            percentage:
              type: number
              format: float
              description: Effective fee percentage applied to this quote (after waivers and thresholds).
              example: 0
            included_in_rate:
              type: boolean
              description: Whether the fee is already deducted from the rate (and `output_amount`) or applied separately.
              example: false
        bridge_fee:
          type: object
          description: Fee charged by the provider for routing through bridge-style settlement. Typically appears on cross-chain quotes; may also appear on same-chain quotes when the provider routes through bridge infrastructure (e.g. Relay). Absent when the route does not charge a bridge fee.
          required:
            - amount
            - included_in_rate
          properties:
            amount:
              $ref: '#/components/schemas/QuoteAmount'
            fungible:
              allOf:
                - description: Fungible asset in which the fee is taken. Absent when the source did not identify a fungible.
                - $ref: '#/components/schemas/RelationshipData'
            included_in_rate:
              type: boolean
              example: true
        network_fee:
          type: object
          description: Network (gas) fee covered by the swap. Absent when the source did not provide a network-fee estimate (e.g. price-only quote with no transaction).
          required:
            - amount
            - free
          properties:
            amount:
              $ref: '#/components/schemas/QuoteAmount'
            fungible:
              allOf:
                - description: Fungible asset in which the fee is taken. Absent when the source did not identify a fungible.
                - $ref: '#/components/schemas/RelationshipData'
            free:
              type: boolean
              description: Whether the network fee is sponsored.
        transaction_approve:
          type: object
          description: ERC-20 approve transaction that must be signed before the swap. Absent for Solana swaps, EVM swaps with the chain's native asset as input, and when sufficient allowance is already granted.
          allOf:
            - $ref: '#/components/schemas/MultichainTransaction'
        transaction_swap:
          type: object
          description: Swap transaction to be signed by the wallet. Absent when the quote is informational only (e.g. the wallet's balance is insufficient and `error` is set).
          allOf:
            - $ref: '#/components/schemas/MultichainTransaction'
        error:
          type: object
          description: Reason this quote cannot be executed as-is. Absent when the quote is executable.
          required:
            - code
            - hint
          properties:
            code:
              type: string
              description: Machine-readable error code. New values may be added; clients should treat unknown values as `unspecified`.
              enum:
                - unspecified
                - not_enough_input_asset_balance
                - not_enough_base_asset_balance
                - input_amount_is_too_small
              example: not_enough_input_asset_balance
            message:
              type: string
              description: Human-readable description of the error. Absent when the source did not provide a message.
              example: Input asset balance is not enough to execute a swap
            hint:
              type: string
              description: Suggested action the user can take to resolve the error. New values may be added; clients should treat unknown values as `unspecified`.
              enum:
                - unspecified
                - topup
                - increase_input_amount
              example: topup
        estimated_time_seconds:
          type: number
          format: float
          description: Estimated time until the output asset is delivered, when the source provides one. Bridge providers typically include it; same-chain DEX aggregators usually do not, but providers that route through bridge-style settlement may include it on same-chain quotes too.
          example: 2
    RelationshipLinks-2:
      type: object
      required:
        - related
      properties:
        related:
          type: string
          format: url
          description: URL to the current fungible.
          example: https://api.zerion.io/v1/fungibles/eth
    QuoteRelationships:
      type: object
      required:
        - input_chain
        - output_chain
      properties:
        input_chain:
          allOf:
            - description: Source chain the swap originates from.
            - $ref: '#/components/schemas/Relationship'
        output_chain:
          allOf:
            - description: Target chain the output asset is delivered on.
            - $ref: '#/components/schemas/Relationship'
        input_fungible:
          description: Fungible asset being sent.
          type: object
          required:
            - links
            - data
          properties:
            links:
              $ref: '#/components/schemas/RelationshipLinks-2'
            data:
              $ref: '#/components/schemas/RelationshipData'
        output_fungible:
          description: Fungible asset being received.
          type: object
          required:
            - links
            - data
          properties:
            links:
              $ref: '#/components/schemas/RelationshipLinks-2'
            data:
              $ref: '#/components/schemas/RelationshipData'
    QuoteContainer:
      type: object
      required:
        - type
        - id
        - attributes
        - relationships
      properties:
        type:
          type: string
          example: swap_quotes
        id:
          type: string
          description: Quote's unique id.
          example: 589a0095e2111df5276ebf073fff9a8bfb821f34
        attributes:
          $ref: '#/components/schemas/QuoteAttributes'
        relationships:
          $ref: '#/components/schemas/QuoteRelationships'
    QuotesResponse:
      type: object
      required:
        - links
        - data
      properties:
        links:
          $ref: '#/components/schemas/ResponseLinks-17'
        data:
          type: array
          items:
            $ref: '#/components/schemas/QuoteContainer'
    FungiblesResponseLinks:
      type: object
      required:
        - self
      properties:
        self:
          type: string
          format: url
          description: URL of current resource
          example: https://api.zerion.io/v1/swap/fungibles
    FungiblesResponse:
      type: object
      required:
        - links
        - data
      properties:
        links:
          $ref: '#/components/schemas/FungiblesResponseLinks'
        data:
          type: array
          items:
            $ref: '#/components/schemas/Container-13'
    Type-2:
      type: string
      description: Format of the gas.
      example: classic
      enum:
        - classic
        - eip1559
        - optimistic
    Classic:
      type: object
      properties:
        slow:
          type: integer
          format: uint256
          example: 48000000000
          description: The gas price for a slow transaction.
        standard:
          type: integer
          format: uint256
          example: 48000000000
          description: The gas price for a standard transaction.
        fast:
          type: integer
          format: uint256
          example: 51000000000
          description: The gas price for a fast transaction.
        rapid:
          type: integer
          nullable: true
          format: uint256
          example: null
          description: The gas price for a rapid transaction.
    EIP1559Option:
      type: object
      properties:
        priority_fee:
          type: integer
          format: uint256
          description: The suggested gas price (in wei) that you are willing to pay in order to ensure acceptance of your transaction.
          example: 590637816
        max_fee:
          type: integer
          format: uint256
          description: The suggested upper limit for the gas price (in wei) that you are willing to pay in order to ensure acceptance of your transaction.
          example: 95409362184
        estimation_seconds:
          type: integer
          format: uint64
          description: An estimation of the time, measured in seconds, required for a transaction to be confirmed on the blockchain.
          example: 195
    EIP1559:
      type: object
      properties:
        base_fee:
          type: integer
          format: uint256
          description: The base fee is an algorithmically determined amount of gas that is required for a transaction to be included in a block. It is dynamically adjusted based on network demand and burned whenever a transaction is included in a block.
          example: 47409362184
        fast:
          allOf:
            - description: Object that stores information about the gas price for a slow transaction.
            - $ref: '#/components/schemas/EIP1559Option'
        slow:
          allOf:
            - description: Object that stores information about the gas price for a slow transaction.
            - $ref: '#/components/schemas/EIP1559Option'
        rapid:
          allOf:
            - description: Object that stores information about the gas price for a rapid transaction.
            - $ref: '#/components/schemas/EIP1559Option'
        standard:
          allOf:
            - description: Object that stores information about the gas price for a standard transaction.
            - $ref: '#/components/schemas/EIP1559Option'
    Optimistic:
      type: object
      properties:
        l1:
          type: integer
          format: uint64
          example: 18330244428
          description: The total cost of submitting a transaction to Ethereum. This cost is incurred in addition to the L2 execution fee and is typically the primary cost component of a transaction on Optimism.
        l2:
          type: integer
          format: uint64
          example: 1000000
          description: The cost of computation and storage used in executing a transaction on Layer 2. This is equivalent to the gas used multiplied by the gas price attached to the transaction.
        fixed_overhead:
          type: integer
          format: uint64
          example: 2100
          description: A fixed overhead cost denominated in gas that is included in the L1 data fee calculation. This value is currently set to 2100 and does not vary based on the size or complexity of the transaction.
        dynamic_overhead:
          type: integer
          format: uint64
          example: 1000000
          description: A dynamic overhead cost that scales the L1 fee paid by a fixed number. This value is currently set to 1.0 and is included in the L1 data fee calculation. The L1 gas price used to charge the data fee is automatically updated when new data is received from Ethereum, which may result in users paying a higher or lower than estimated L1 data fee by up to 25%.
    Attributes-14:
      type: object
      properties:
        updated_at:
          type: string
          description: Date and time when the price was updated in ISO format.
          example: '2023-02-28T19:24:39.000Z'
        gas_type:
          $ref: '#/components/schemas/Type-2'
        info:
          oneOf:
            - allOf:
                - description: Object that stores gas prices in classic format.
                - $ref: '#/components/schemas/Classic'
            - allOf:
                - description: 'Object that stores gas prices under the EIP-1559 proposal: https://eips.ethereum.org/EIPS/eip-1559'
                - $ref: '#/components/schemas/EIP1559'
            - allOf:
                - description: Object that stores information related to gas prices on the Optimism blockchain.
                - $ref: '#/components/schemas/Optimistic'
    Relationships-8:
      type: object
      description: Gas price related resources.
      properties:
        chain:
          $ref: '#/components/schemas/Relationship'
    Container-16:
      type: object
      properties:
        type:
          type: string
          description: Gas price resource type.
          example: gas-prices
        id:
          type: string
          description: Gas price unique identifier.
          example: gas-polygon-classic
        attributes:
          $ref: '#/components/schemas/Attributes-14'
        relationships:
          $ref: '#/components/schemas/Relationships-8'
    Links:
      type: object
      required:
        - self
      properties:
        self:
          type: string
          format: url
          example: https://api.zerion.io/v1/gas-prices
    Response-16:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/Container-16'
        links:
          $ref: '#/components/schemas/Links'
    ResponseLinks-18:
      type: object
      required:
        - self
      properties:
        self:
          type: string
          description: Link to the current response
          example: https://api.zerion.io/v1/nfts/?currency=usd&filter%5Breferences%5D=ethereum%3A0x909899c5dbb5002610dd8543b6f638be56e3b17e%3A57896044618658097711785492504343953928676686534345912800509039648547174119787%2Cpolygon%3A0x3a422450db73c450310e6e24191d4221a5be81b1%3A30&include=nft_collections
    ResponseData:
      type: array
      items:
        $ref: '#/components/schemas/Container-5'
    ContainerAttributesNoMarketData:
      type: object
      description: Represents an NFT collection attributes corresponding to JSON API specification.
      properties:
        metadata:
          $ref: '#/components/schemas/Metadata-2'
        implementations:
          type: array
          description: List of blockchain implementations where this collection is deployed
          items:
            $ref: '#/components/schemas/Implementation-2'
    ContainerNoMarketData:
      type: object
      properties:
        type:
          type: string
          description: NFT collections resource type.
          example: nft_collections
        id:
          type: integer
          description: Unique NFT collection ID.
          example: 14
        attributes:
          $ref: '#/components/schemas/ContainerAttributesNoMarketData'
    ResponseIncluded:
      type: array
      items:
        anyOf:
          - $ref: '#/components/schemas/ContainerNoMarketData'
    Response-17:
      type: object
      required:
        - links
        - data
      properties:
        links:
          $ref: '#/components/schemas/ResponseLinks-18'
        data:
          $ref: '#/components/schemas/ResponseData'
        included:
          $ref: '#/components/schemas/ResponseIncluded'
    ResponseLinks-19:
      type: object
      required:
        - self
      properties:
        self:
          type: string
          description: Link to the current response
          example: https://api.zerion.io/v1/nfts/polygon:0x3a422450db73c450310e6e24191d4221a5be81b1:2/?currency=usd&include=nft_collections
    Response-18:
      type: object
      required:
        - links
        - data
      properties:
        links:
          $ref: '#/components/schemas/ResponseLinks-19'
        data:
          $ref: '#/components/schemas/Container-5'
        included:
          $ref: '#/components/schemas/ResponseIncluded'
    ResponseLinks-20:
      type: object
      required:
        - self
      properties:
        self:
          type: string
          description: Link to the current response
    Attributes-15:
      type: object
      description: Represents attributes of a decentralized application (DApp) corresponding to JSON API specification.
      properties:
        name:
          type: string
          description: The name of the decentralized application.
          example: AAVE V3
        description:
          type: string
          description: A brief summary or details about the decentralized application.
          example: Earn interest, borrow assets, and build applications.
        icon:
          allOf:
            - description: The URL for the application's icon.
            - $ref: '#/components/schemas/Icon'
        url:
          type: string
          format: url
          description: Link to the DApp
          example: https://aave.com/
        manage_positions_url:
          type: string
          format: url
          description: A link to the page for managing application positions or configurations.
          example: https://app.aave.com/
        external_links:
          $ref: '#/components/schemas/ExternalLinks'
    Container-17:
      type: object
      description: Represents a decentralized application (DApp).
      required:
        - type
        - id
      properties:
        type:
          type: string
          description: DApps resource type.
          example: dapps
        id:
          type: string
          description: Unique identifier of the DApp.
        attributes:
          $ref: '#/components/schemas/Attributes-15'
    ResponseData-2:
      type: array
      items:
        $ref: '#/components/schemas/Container-17'
    Response-19:
      type: object
      required:
        - links
        - data
      properties:
        links:
          $ref: '#/components/schemas/ResponseLinks-20'
        data:
          $ref: '#/components/schemas/ResponseData-2'
    Response-20:
      type: object
      required:
        - links
        - data
      properties:
        links:
          $ref: '#/components/schemas/ResponseLinks-20'
        data:
          $ref: '#/components/schemas/Container-17'
    Filters:
      type: object
      nullable: true
      description: |
        Exclusion filters for the subscription. Conditions are combined with OR: an
        event matching any one of them is dropped and no webhook is delivered for it.
        Omit the field, or send `null`, to receive every event the subscription
        covers. Filters are absent from the response when none are set.

        Field paths below refer to the delivered webhook transaction payload, not to
        this subscription resource. A condition does not match an event lacking the
        value it compares, so an event with no `dapp` is not excluded by
        `protocol_ids`.
      required:
        - exclude
      properties:
        exclude:
          type: object
          description: Conditions that drop an event. At least one must be present.
          properties:
            types:
              type: array
              description: |
                Drop events by transaction type, matched against
                `attributes.operation_type` — not the resource-level `type` (always
                `"transactions"`), nor the per-act `acts[].type`.
              items:
                type: string
                example: send
            is_spam:
              type: boolean
              description: |
                Drop events classified as spam, delivered as
                `attributes.flags.is_trash`; there is no `is_spam` field in the
                payload. Only `true` is accepted.
              example: true
            protocol_ids:
              type: array
              description: |
                Drop events by protocol, matched against `relationships.dapp.id` only.
              items:
                type: string
                example: uniswap-v3
            addresses:
              type: array
              description: |
                Drop events by address, matched against `attributes.sent_from` and
                `attributes.sent_to` only.
              items:
                type: string
                example: '0x0000000000000000000000000000000000000001'
    Attributes-16:
      type: object
      required:
        - callback_url
        - created_at
        - updated_at
      properties:
        callback_url:
          type: string
          description: Callback URL where updates delivered to
          example: https://webhook.site/fcd606d2-f5bd-4832-9874-ff07c980b5a3
        created_at:
          type: string
          description: Timestamp string in ISO 8601 format when the subscription was created
          example: '2022-08-15T11:26:31+00:00'
        updated_at:
          type: string
          description: Timestamp string in ISO 8601 format when the subscription was last renewed
          example: '2022-08-15T11:26:31+00:00'
        filters:
          $ref: '#/components/schemas/Filters'
    Relationships-9:
      type: object
      properties:
        chains:
          type: array
          items:
            $ref: '#/components/schemas/Relationship'
    Container-18:
      type: object
      required:
        - type
        - id
        - attributes
        - relationships
      properties:
        type:
          type: string
          example: transactions_subscription
        id:
          type: string
          description: Unique ID of the transaction subscription.
          example: 52d994a173d755e99845e861d534a419
        attributes:
          $ref: '#/components/schemas/Attributes-16'
        relationships:
          $ref: '#/components/schemas/Relationships-9'
    Response-21:
      type: object
      required:
        - data
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/Container-18'
    Response-22:
      type: object
      required:
        - data
      properties:
        data:
          $ref: '#/components/schemas/Container-18'
    Attributes-17:
      type: object
      required:
        - timestamp
        - callback_url
        - address
      properties:
        timestamp:
          type: string
          description: Timestamp when notification was generated.
          example: '2024-07-31T00:17:36Z'
        callback_url:
          type: string
          description: URL to the callback endpoint.
          example: https://example.com/callback
        address:
          type: string
          description: Address of the subscription wallet.
          example: '0x42b9df65b219b3dd36ff330a4dd8f327a6ada990'
    Relationships-10:
      type: object
      required:
        - subscription
      properties:
        subscription:
          type: object
          required:
            - type
            - id
          properties:
            type:
              type: string
              example: tx-subscriptions
            id:
              type: string
              example: 87db77a6-17eb-4ca8-af0e-e43cbe9c83c6
    Container-19:
      type: object
      required:
        - type
        - id
        - attributes
        - relationships
      properties:
        type:
          type: string
          example: transaction_notification
        id:
          type: string
          description: Unique ID of the notification.
          example: 52d994a173d755e99845e861d534a419
        attributes:
          $ref: '#/components/schemas/Attributes-17'
        relationships:
          $ref: '#/components/schemas/Relationships-10'
    Included-3:
      type: array
      items:
        $ref: '#/components/schemas/Container-4'
    Response-23:
      type: object
      required:
        - data
      properties:
        data:
          $ref: '#/components/schemas/Container-19'
        included:
          $ref: '#/components/schemas/Included-3'
    ResponseLinks-21:
      type: object
      required:
        - self
      properties:
        self:
          type: string
          format: url
          example: https://api.zerion.io/v1/tx-subscriptions/77e77447-1586-40e8-a75b-467ef939a0b1/wallets?page%5Bsize%5D=10
        next:
          type: string
          format: url
          example: https://api.zerion.io/v1/tx-subscriptions/77e77447-1586-40e8-a75b-467ef939a0b1/wallets?page%5Bsize%5D=10&page%5Bafter%5D=MjAyNS0xMC0wMVQxMjowNzo1NlosNjhkZDE5OWMyMDFlODI3ODQzZmZkN2Jl
    Attributes-18:
      type: object
      required:
        - addresses
      properties:
        addresses:
          type: array
          description: Addresses of the wallets within subscription
          items:
            type: string
            example: '0x42b9df65b219b3dd36ff330a4dd8f327a6ada990'
    PaginatedRelationshipLinks:
      type: object
      required:
        - related
      properties:
        self:
          type: string
          format: url
          example: https://api.zerion.io/v1/tx-subscriptions/8bf9db31-eb59-4fa9-973c-34e3428acf5d/wallets?page%5Bsize%5D=10
        next:
          type: string
          format: url
          example: https://api.zerion.io/v1/tx-subscriptions/8bf9db31-eb59-4fa9-973c-34e3428acf5d/wallets?page%5Bsize%5D=10&page%5Bafter%5D=MjAyNS0xMC0wMVQxMjowNzo1NlosNjhkZDE5OWMyMDFlODI3ODQzZmZkN2Jl
        related:
          type: string
          format: url
          description: URL to the current subscription
          example: https://api.zerion.io/v1/tx-subscriptions/8bf9db31-eb59-4fa9-973c-34e3428acf5d
    RelationshipContainer:
      type: object
      required:
        - type
        - id
      properties:
        type:
          type: string
          description: Subscription resource type
          example: subscription
        id:
          type: string
          description: Subscription unique identifier
          example: 8bf9db31-eb59-4fa9-973c-34e3428acf5d
    PaginatedRelationship:
      type: object
      required:
        - links
        - data
      properties:
        links:
          $ref: '#/components/schemas/PaginatedRelationshipLinks'
        data:
          $ref: '#/components/schemas/RelationshipContainer'
    Relationships-11:
      type: object
      properties:
        subscription:
          $ref: '#/components/schemas/PaginatedRelationship'
    Container-20:
      type: object
      required:
        - type
        - id
        - attributes
        - relationships
      properties:
        type:
          type: string
          example: transactions_subscription_wallets
        id:
          type: string
          description: Unique ID
          example: 52d994a173d755e99845e861d534a419-wallets
        attributes:
          $ref: '#/components/schemas/Attributes-18'
        relationships:
          $ref: '#/components/schemas/Relationships-11'
    Response-24:
      type: object
      required:
        - links
        - data
      properties:
        links:
          $ref: '#/components/schemas/ResponseLinks-21'
        data:
          $ref: '#/components/schemas/Container-20'
    Attributes-19:
      type: object
      required:
        - count
      properties:
        count:
          type: integer
          format: int64
          description: Number of wallets within the subscription
          example: 42
    Container-21:
      type: object
      required:
        - type
        - id
        - attributes
        - relationships
      properties:
        type:
          type: string
          example: transactions_subscription_wallets_count
        id:
          type: string
          description: Unique ID
          example: 52d994a173d755e99845e861d534a419-wallets-count
        attributes:
          $ref: '#/components/schemas/Attributes-19'
        relationships:
          $ref: '#/components/schemas/Relationships-11'
    Response-25:
      type: object
      required:
        - links
        - data
      properties:
        links:
          $ref: '#/components/schemas/ResponseLinks-21'
        data:
          $ref: '#/components/schemas/Container-21'
  responses:
    ChartsResponse:
      description: Resource for the requested wallet chart
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Response'
    MalformedParameters:
      description: Parameters are malformed
      content:
        application/json:
          schema:
            type: object
            properties:
              errors:
                type: array
                items:
                  type: object
                  properties:
                    title:
                      type: string
                      description: Error short title
                      example: Parameter is malformed
                    detail:
                      type: string
                      description: Long description of the error
                      example: Some validation errors will be described here
    UnauthenticatedError:
      description: Unauthenticated request
      content:
        application/json:
          schema:
            type: object
            properties:
              errors:
                type: array
                items:
                  type: object
                  properties:
                    title:
                      type: string
                      description: Error short title
                      example: Unauthorized Error
                    detail:
                      type: string
                      description: Long description of the error
                      example: The API key is invalid, please, make sure that you are using a valid key
    TooManyRequests:
      description: Too many requests error
      content:
        application/json:
          schema:
            type: object
            properties:
              errors:
                type: array
                items:
                  type: object
                  properties:
                    title:
                      type: string
                      description: Error short title
                      example: Too many requests
                    detail:
                      type: string
                      description: Long description of the error
                      example: Your request had been throttled
    PNLResponse:
      description: Response for requested wallet's pnl
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/WalletPNLResponse'
    QueryNotSupported:
      description: |
        The request cannot be served and retrying will not change that.

        Unlike a `503`, this response carries no `Retry-After` header. Contact support if you
        need the request enabled.
      content:
        application/json:
          schema:
            type: object
            properties:
              errors:
                type: array
                items:
                  type: object
                  properties:
                    title:
                      type: string
                      description: Error short title
                      example: This request is not supported
                    detail:
                      type: string
                      description: Long description of the error
                      example: This request cannot be processed, and retrying will not help. Please contact support if you need it enabled.
    RetryAfter:
      description: |
        Service is temporarily unavailable.

        A transient state: the data is being prepared. Retry after the delay given in the
        `Retry-After` header. Wallets with long histories can need several attempts.
      headers:
        Retry-After:
          description: |
            Indicates how long the client should wait before making a follow-up request.
          schema:
            type: integer
            example: 10
            description: Number of seconds to wait.
      content:
        application/json:
          schema:
            type: object
            properties:
              errors:
                type: array
                items:
                  type: object
                  properties:
                    title:
                      type: string
                      description: Error short title
                      example: Service is temporarily unavailable
                    detail:
                      type: string
                      description: Long description of the error
                      example: Please, retry later (check the Retry-After header)
    PortfolioResponse:
      description: Response for requested wallet's portfolio
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Response-2'
    PositionsListResponse:
      description: Response for requested list of positions
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Response-3'
    TransactionsListResponse:
      description: Response for requested list of transactions
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Response-4'
    NFTPositionsResponse:
      description: Response for requested list of NFT positions.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ResponseMany'
    NFTPositionsProcessingResponse:
      description: Request accepted, but NFT positions are still being aggregated.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ProcessingResponseMany'
    NFTCollectionsResponse:
      description: Response for requested list of NFT collections.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Response-5'
    NFTCollectionsProcessingResponse:
      description: Request accepted, but NFT collections held by the wallet are still being aggregated.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ProcessingResponseMany'
    NFTPortfolioResponse:
      description: Response for requested wallet's portfolio
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Response-6'
    NFTPortfolioProcessingResponse:
      description: Request accepted, but nft portfolio is still being aggregated
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ProcessingResponse'
    ChartsResponse-2:
      description: Resource for the requested wallet set chart
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Response-8'
    PNLResponse-2:
      description: Response for requested wallet set PnL
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Response-9'
    PortfolioResponse-2:
      description: Response for requested wallet set portfolio
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Response-10'
    PositionsListResponse-2:
      description: Response for requested list of positions
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Response-11'
    TransactionsListResponse-2:
      description: Response for requested list of transactions
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Response-12'
    FungiblesListResponse:
      description: Response for requested list of fungibles
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ResponseMany-2'
    SingleFungibleResponse:
      description: Resource for requested fungible
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Response-13'
    NotFoundResponse:
      description: Resource was not found
      content:
        application/json:
          schema:
            type: object
            properties:
              errors:
                type: array
                items:
                  type: object
                  properties:
                    title:
                      type: string
                      description: Error short title
                      example: Resource was not found
                    detail:
                      type: string
                      description: Long description of the error
                      example: Requested resource was not found, try later
    SingleFungibleChartResponse:
      description: Resource for the requested fungible chart
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Response-14'
    ChainsListResponse:
      description: Response for requested list of chains
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Response-15'
    SingleChainResponse:
      description: Response for requested chain
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ChainResponse'
    SwapQuotesResponse:
      description: Response for the requested swap quotes.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/QuotesResponse'
    SwapFungiblesResponse:
      description: Response for requested list available for bridge fungibles.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/FungiblesResponse'
    GasPricesResponse:
      description: List of gas prices
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Response-16'
    NFTsResponse:
      description: Response for requested list of NFTs
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Response-17'
    NFTResponse:
      description: Requested NFT
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Response-18'
    DAppsResponse:
      description: Response for requested list of DApps
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Response-19'
    DAppResponse:
      description: Requested DApp
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Response-20'
    SubscriptionsResponse:
      description: Response for requested wallet's transactions subscription
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Response-21'
    SubscriptionResponse:
      description: Response for requested wallet's transactions subscription
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Response-22'
    SubscriptionWalletsResponse:
      description: Response for wallets within subscription
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Response-24'
    SubscriptionWalletsCountResponse:
      description: Response for wallets count within subscription
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Response-25'
  requestBodies:
    NotificationResponse:
      description: Response for requested list of transactions
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Response-23'
x-readme:
  samples-languages:
    - curl
    - javascript
    - python
    - kotlin
    - swift
    - go
