Fordefi Assets API

These endpoints allow you to get information about the assets in your organization, including metadata, balances, and prices. Fordefi supports native assets and fungible tokens on each of the supported blockchains, and on many chains also non-fungible tokens. Assets are chain-specific, meaning that USDC on Ethereum is different from USDC on Polygon.

OpenAPI Specification

fordefi-assets-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Fordefi Address Book Assets API
  version: 0.2.0
  description: These endpoints allow you to list the contacts in your address book.<br><br>To add/remove contacts, visit the Fordefi web console. See the <a href='https://docs.fordefi.com/user-guide/address-book'>user guide</a> for more info.
servers:
- url: https://api.fordefi.com/
  description: Production
security:
- bearerAuth: []
tags:
- name: Assets
  description: "These endpoints allow you to get information about the assets in your organization,\n        including metadata, balances, and prices.\n        <br><br>\n        Fordefi supports native assets and fungible tokens on each of the supported blockchains,\n        and on many chains also non-fungible tokens.\n        <br><br>\n        Assets are chain-specific, meaning that USDC on Ethereum is different from USDC on Polygon.\n        "
paths:
  /api/v1/assets/owned-assets/{id}:
    get:
      tags:
      - Assets
      summary: Get Owned Asset
      description: Get a a specific asset owned by an organization.
      operationId: get_owned_asset_api_v1_assets_owned_assets__id__get
      parameters:
      - name: id
        in: path
        required: true
        schema:
          type: string
          format: uuid
          description: ID of the asset to retrieve.
          title: Id
        description: ID of the asset to retrieve.
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetOwnedAssetResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PreconditionFailedError'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValidationError'
        '500':
          description: Unexpected Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BaseError'
        '401':
          description: Unauthorized User
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BaseError'
        '403':
          description: Forbidden User
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BaseError'
        '408':
          description: Request Timeout
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BaseError'
        '429':
          description: Rate Limit Exceeded
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RateLimitError'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResourceError'
  /api/v1/assets/owned-assets:
    get:
      tags:
      - Assets
      summary: List Owned Assets
      description: Get a list of all assets owned by an organization.
      operationId: list_owned_assets_api_v1_assets_owned_assets_get
      parameters:
      - name: chains
        in: query
        required: false
        schema:
          title: Chains
          type: array
          items:
            type: string
            minLength: 1
            description: The unique chain ID. </br>Can be either one of those supported by the default chains below or a custom numeric EVM chain ID `evm_<chain_id>` if one was added to your organization. <ul><li>`"aptos_mainnet"`</li><li>`"aptos_testnet"`</li><li>`"aptos_movement_mainnet"`</li><li>`"aptos_movement_testnet"`</li><li>`"arch_mainnet"`</li><li>`"arch_testnet"`</li><li>`"canton_mainnet"`</li><li>`"cosmos_agoric-3"`</li><li>`"cosmos_akashnet-2"`</li><li>`"cosmos_archway-1"`</li><li>`"cosmos_axelar-dojo-1"`</li><li>`"cosmos_bbn-1"`</li><li>`"cosmos_celestia"`</li><li>`"cosmos_cosmoshub-4"`</li><li>`"cosmos_dydx-mainnet-1"`</li><li>`"cosmos_dydx-testnet-4"`</li><li>`"cosmos_dymension_1100-1"`</li><li>`"cosmos_injective-1"`</li><li>`"cosmos_neutron-1"`</li><li>`"cosmos_nillion-1"`</li><li>`"cosmos_noble-1"`</li><li>`"cosmos_osmosis-1"`</li><li>`"cosmos_provider"`</li><li>`"cosmos_ssc-1"`</li><li>`"cosmos_pacific-1"`</li><li>`"cosmos_stride-1"`</li><li>`"cosmos_thorchain-1"`</li><li>`"cosmos_mantra-1"`</li><li>`"exchange_binance"`</li><li>`"exchange_bybit"`</li><li>`"exchange_coinbase_international"`</li><li>`"exchange_coinbase_us"`</li><li>`"exchange_okx"`</li><li>`"exchange_kraken"`</li><li>`"ripple_mainnet"`</li><li>`"solana_mainnet"`</li><li>`"solana_devnet"`</li><li>`"solana_eclipse_mainnet"`</li><li>`"solana_fogo_mainnet"`</li><li>`"solana_fogo_testnet"`</li><li>`"stacks_mainnet"`</li><li>`"starknet_mainnet"`</li><li>`"stellar_mainnet"`</li><li>`"sui_mainnet"`</li><li>`"sui_testnet"`</li><li>`"ton_mainnet"`</li><li>`"tron_mainnet"`</li><li>`"tron_shasta"`</li><li>`"bitcoin_mainnet"`</li><li>`"bitcoin_testnet"`</li><li>`"bitcoin_testnet_v4"`</li><li>`"dogecoin_mainnet"`</li><li>`"bitcoin_cash_mainnet"`</li><li>`"pearl_testnet"`</li><li>`"pearl_mainnet"`</li><li>`"evm_1"`</li><li>`"evm_5"`</li><li>`"evm_10"`</li><li>`"evm_14"`</li><li>`"evm_16"`</li><li>`"evm_30"`</li><li>`"evm_56"`</li><li>`"evm_100"`</li><li>`"evm_130"`</li><li>`"evm_137"`</li><li>`"evm_143"`</li><li>`"evm_146"`</li><li>`"evm_169"`</li><li>`"evm_196"`</li><li>`"evm_250"`</li><li>`"evm_324"`</li><li>`"evm_999"`</li><li>`"evm_1030"`</li><li>`"evm_1100"`</li><li>`"evm_1101"`</li><li>`"evm_1329"`</li><li>`"evm_1337"`</li><li>`"evm_1666"`</li><li>`"evm_1672"`</li><li>`"evm_1729"`</li><li>`"evm_2222"`</li><li>`"evm_4200"`</li><li>`"evm_4217"`</li><li>`"evm_4663"`</li><li>`"evm_5000"`</li><li>`"evm_7000"`</li><li>`"evm_7700"`</li><li>`"evm_8453"`</li><li>`"evm_8818"`</li><li>`"evm_8819"`</li><li>`"evm_9745"`</li><li>`"evm_16661"`</li><li>`"evm_17000"`</li><li>`"evm_80001"`</li><li>`"evm_80094"`</li><li>`"evm_42161"`</li><li>`"evm_43113"`</li><li>`"evm_43114"`</li><li>`"evm_57073"`</li><li>`"evm_59144"`</li><li>`"evm_81457"`</li><li>`"evm_421614"`</li><li>`"evm_534352"`</li><li>`"evm_660279"`</li><li>`"evm_747474"`</li><li>`"evm_810180"`</li><li>`"evm_11155111"`</li><li>`"evm_ethereum_mainnet"`</li><li>`"evm_ethereum_goerli"`</li><li>`"evm_optimism_mainnet"`</li><li>`"evm_flare_mainnet"`</li><li>`"evm_flare_testnet"`</li><li>`"evm_rootstock_mainnet"`</li><li>`"evm_bsc_mainnet"`</li><li>`"evm_gnosis_mainnet"`</li><li>`"evm_unichain_mainnet"`</li><li>`"evm_polygon_mainnet"`</li><li>`"evm_monad_mainnet"`</li><li>`"evm_sonic_mainnet"`</li><li>`"evm_manta_pacific_mainnet"`</li><li>`"evm_x_layer_mainnet"`</li><li>`"evm_fantom_mainnet"`</li><li>`"evm_zksync_era_mainnet"`</li><li>`"evm_hyperevm_mainnet"`</li><li>`"evm_conflux_mainnet"`</li><li>`"evm_dymension_mainnet"`</li><li>`"evm_polygon_zkevm_mainnet"`</li><li>`"evm_sei_mainnet"`</li><li>`"evm_hypercore_mainnet"`</li><li>`"evm_aster_mainnet"`</li><li>`"evm_pharos_mainnet"`</li><li>`"evm_reya_mainnet"`</li><li>`"evm_kava_mainnet"`</li><li>`"evm_merlin_mainnet"`</li><li>`"evm_tempo_mainnet"`</li><li>`"evm_robinhood_mainnet"`</li><li>`"evm_mantle_mainnet"`</li><li>`"evm_zeta_mainnet"`</li><li>`"evm_canto_mainnet"`</li><li>`"evm_base_mainnet"`</li><li>`"evm_clink_mainnet"`</li><li>`"evm_clink_testnet"`</li><li>`"evm_plasma_mainnet"`</li><li>`"evm_zero_gravity_mainnet"`</li><li>`"evm_ethereum_holesky"`</li><li>`"evm_polygon_mumbai"`</li><li>`"evm_berachain_mainnet"`</li><li>`"evm_arbitrum_mainnet"`</li><li>`"evm_avalanche_fuji"`</li><li>`"evm_avalanche_chain"`</li><li>`"evm_ink_mainnet"`</li><li>`"evm_linea_mainnet"`</li><li>`"evm_blast_mainnet"`</li><li>`"evm_arbitrum_sepolia"`</li><li>`"evm_scroll_mainnet"`</li><li>`"evm_xai_mainnet"`</li><li>`"evm_katana_mainnet"`</li><li>`"evm_zklink_nova_mainnet"`</li><li>`"evm_ethereum_sepolia"`</li></ul>
            title: ChainUniqueId
      - name: asset_ids
        in: query
        required: false
        schema:
          title: Asset Ids
          type: array
          items:
            type: string
            format: uuid
      - name: is_hidden
        in: query
        required: false
        schema:
          title: Is Hidden
          type: boolean
      - name: search
        in: query
        required: false
        schema:
          title: Search
          type: string
      - name: vault_ids
        in: query
        required: false
        schema:
          title: Vault Ids
          type: array
          items:
            type: string
            format: uuid
      - name: end_user_ids
        in: query
        required: false
        schema:
          title: End User Ids
          type: array
          items:
            type: string
            format: uuid
      - name: only_native
        in: query
        required: false
        schema:
          type: boolean
          default: false
          title: Only Native
      - name: is_nft
        in: query
        required: false
        schema:
          title: Is Nft
          type: boolean
      - name: is_negative
        in: query
        required: false
        schema:
          title: Is Negative
          type: boolean
      - name: sort_by
        in: query
        required: false
        schema:
          title: Sort By
          type: array
          items:
            $ref: '#/components/schemas/OwnedAssetsSortableFields'
      - name: page
        in: query
        required: false
        schema:
          type: integer
          minimum: 1
          description: The page number to fetch.
          default: 1
          title: Page
        description: The page number to fetch.
      - name: size
        in: query
        required: false
        schema:
          type: integer
          maximum: 100
          minimum: 0
          description: The number of items per page.
          default: 50
          title: Size
        description: The number of items per page.
      - name: skip_count
        in: query
        required: false
        schema:
          type: boolean
          description: Whether to skip counting the total number of items.
          default: false
          title: Skip Count
        description: Whether to skip counting the total number of items.
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListOwnedAssetsResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PreconditionFailedError'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValidationError'
        '500':
          description: Unexpected Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BaseError'
        '401':
          description: Unauthorized User
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BaseError'
        '403':
          description: Forbidden User
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BaseError'
        '408':
          description: Request Timeout
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BaseError'
        '429':
          description: Rate Limit Exceeded
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RateLimitError'
  /api/v1/assets:
    put:
      tags:
      - Assets
      summary: Update Asset Configuration
      description: Update the asset's configuration under the entire organization.
      operationId: update_asset_configuration_api_v1_assets_put
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateAssetConfiguration'
        required: true
      responses:
        '204':
          description: Successful Response
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PreconditionFailedError'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValidationError'
        '500':
          description: Unexpected Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BaseError'
        '401':
          description: Unauthorized User
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BaseError'
        '403':
          description: Forbidden User
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BaseError'
        '408':
          description: Request Timeout
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BaseError'
        '429':
          description: Rate Limit Exceeded
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RateLimitError'
  /api/v1/assets/prices:
    post:
      tags:
      - Assets
      summary: Fetch Asset Prices
      description: Fetch the prices of assets.
      operationId: fetch_asset_prices_api_v1_assets_prices_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FetchAssetPricesRequest'
        required: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FetchAssetPricesResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PreconditionFailedError'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValidationError'
        '500':
          description: Unexpected Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BaseError'
        '401':
          description: Unauthorized User
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BaseError'
        '403':
          description: Forbidden User
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BaseError'
        '408':
          description: Request Timeout
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BaseError'
        '429':
          description: Rate Limit Exceeded
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RateLimitError'
  /api/v1/assets/asset-infos:
    post:
      tags:
      - Assets
      summary: Create Asset Info
      description: Create asset infos in the Fordefi platform.
      operationId: create_asset_info_api_v1_assets_asset_infos_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateAssetInfoRequest'
        required: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreateAssetInfoResponse'
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PreconditionFailedError'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValidationError'
        '500':
          description: Unexpected Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BaseError'
        '401':
          description: Unauthorized User
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BaseError'
        '403':
          description: Forbidden User
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BaseError'
        '408':
          description: Request Timeout
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BaseError'
        '429':
          description: Rate Limit Exceeded
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RateLimitError'
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ResourceError'
components:
  schemas:
    StacksAssetIdentifier:
      properties:
        type:
          type: string
          const: stacks
          title: Type
          description: Stacks asset identifier type.
        details:
          oneOf:
          - $ref: '#/components/schemas/StacksNativeAssetIdentifierRequest'
          - $ref: '#/components/schemas/StacksSip10AssetIdentifierRequest'
          discriminator:
            propertyName: type
            mapping:
              native: '#/components/schemas/StacksNativeAssetIdentifierRequest'
              sip10: '#/components/schemas/StacksSip10AssetIdentifierRequest'
        chain:
          $ref: '#/components/schemas/EnrichedStacksChain'
      type: object
      required:
      - type
      - details
      - chain
      title: StacksAssetIdentifier
    EnrichedUtxoChain:
      properties:
        chain_type:
          type: string
          const: utxo
          title: Chain Type
          description: The type of the chain.
        unique_id:
          $ref: '#/components/schemas/UtxoChainUniqueId'
          description: The UTXO chain unique ID.
        name:
          type: string
          minLength: 1
          title: Name
          description: The full blockchain name.
        native_currency_symbol:
          type: string
          minLength: 1
          title: Native Currency Symbol
          description: The native currency symbol.
          example: ETH
        native_currency_name:
          type: string
          minLength: 1
          title: Native Currency Name
          description: The native currency name.
          example: Ether
        blockchain_explorer:
          $ref: '#/components/schemas/BlockchainExplorer'
        logo_url:
          type: string
          maxLength: 2083
          minLength: 1
          format: uri
          title: Logo Url
          description: The logo URL of the chain.
        is_testnet:
          type: boolean
          title: Is Testnet
          description: Whether the chain is on a testnet.
        is_enabled:
          type: boolean
          title: Is Enabled
          description: Whether the chain is enabled.
      type: object
      required:
      - chain_type
      - unique_id
      - name
      - native_currency_symbol
      - native_currency_name
      - logo_url
      - is_testnet
      - is_enabled
      title: EnrichedUtxoChain
    TronChainUniqueId:
      type: string
      enum:
      - tron_mainnet
      - tron_shasta
      title: TronChainUniqueId
    AptosAssetIdentifierRequest:
      properties:
        type:
          type: string
          const: aptos
          title: Type
          description: Aptos asset identifier type.
        details:
          oneOf:
          - $ref: '#/components/schemas/AptosNativeAssetIdentifierRequest'
          - $ref: '#/components/schemas/AptosCoinAssetIdentifierRequest'
          - $ref: '#/components/schemas/AptosNewCoinAssetIdentifierRequest'
          discriminator:
            propertyName: type
            mapping:
              coin: '#/components/schemas/AptosCoinAssetIdentifierRequest'
              native: '#/components/schemas/AptosNativeAssetIdentifierRequest'
              new_coin: '#/components/schemas/AptosNewCoinAssetIdentifierRequest'
      type: object
      required:
      - type
      - details
      title: AptosAssetIdentifierRequest
    StarknetChainUniqueId:
      type: string
      enum:
      - starknet_mainnet
      title: StarknetChainUniqueId
    TonNativeAssetIdentifierRequest:
      properties:
        type:
          type: string
          const: native
          title: Type
          description: TON asset identifier type.
        chain:
          $ref: '#/components/schemas/TonChainUniqueId'
          description: The details of the chain of the native asset.
      type: object
      required:
      - type
      - chain
      title: TonNativeAssetIdentifierRequest
    StarknetErc20AssetIdentifierRequest:
      properties:
        type:
          type: string
          const: erc20
          title: Type
          description: Erc20 asset identifier type.
        erc20:
          $ref: '#/components/schemas/StarknetAddressRequest'
          description: The Erc20 details.
      type: object
      required:
      - type
      - erc20
      title: StarknetErc20AssetIdentifierRequest
    OwnedAsset:
      properties:
        priced_asset:
          $ref: '#/components/schemas/PricedAsset'
        balances:
          $ref: '#/components/schemas/Balances'
        balance:
          title: Balance
          deprecated: true
          type: string
          pattern: ^\d+$
          example: '1000000000000000000'
      type: object
      required:
      - priced_asset
      - balances
      title: OwnedAsset
    TronTrc20AssetIdentifierRequest:
      properties:
        type:
          type: string
          const: trc20
          title: Type
          description: Trc20 asset identifier type.
        trc20:
          $ref: '#/components/schemas/TronAddressRequest'
          description: The Trc20 details.
      type: object
      required:
      - type
      - trc20
      title: TronTrc20AssetIdentifierRequest
    ExchangeChainUniqueId:
      type: string
      enum:
      - exchange_binance
      - exchange_bybit
      - exchange_coinbase_international
      - exchange_coinbase_us
      - exchange_okx
      - exchange_kraken
      title: ExchangeChainUniqueId
    PricedAssetResponse:
      oneOf:
      - $ref: '#/components/schemas/PricedAsset'
      - $ref: '#/components/schemas/InvalidAssetRequest'
      discriminator:
        propertyName: type
        mapping:
          asset_price: '#/components/schemas/PricedAsset'
          invalid_asset: '#/components/schemas/InvalidAssetRequest'
    FetchAssetPricesRequest:
      properties:
        asset_identifiers:
          items:
            $ref: '#/components/schemas/AssetIdentifierRequest'
          type: array
          minItems: 1
          title: Asset Identifiers
          description: The assets to price.
      type: object
      required:
      - asset_identifiers
      title: FetchAssetPricesRequest
    SolanaSplTokenAssetIdentifierRequest:
      properties:
        type:
          type: string
          const: spl_token
          title: Type
          description: SPL token asset identifier type.
        token:
          $ref: '#/components/schemas/SolanaAddressRequest'
          description: The SPL token details.
      type: object
      required:
      - type
      - token
      title: SolanaSplTokenAssetIdentifierRequest
    CantonAssetIdentifierRequest:
      properties:
        type:
          type: string
          const: canton
          title: Type
          description: Canton asset identifier type.
        details:
          oneOf:
          - $ref: '#/components/schemas/CantonNativeAssetIdentifierRequest'
          - $ref: '#/components/schemas/CantonCip56TokenAssetIdentifierRequest'
          discriminator:
            propertyName: type
            mapping:
              cip56_token: '#/components/schemas/CantonCip56TokenAssetIdentifierRequest'
              native: '#/components/schemas/CantonNativeAssetIdentifierRequest'
      type: object
      required:
      - type
      - details
      title: CantonAssetIdentifierRequest
    UpdateAssetConfiguration:
      properties:
        asset:
          $ref: '#/components/schemas/AssetIdentifierRequest'
          description: The address of the ERC-20 asset to update.
        hidden:
          type: boolean
          title: Hidden
          description: '`True` to hide the token when listing assets, `False` otherwise.'
      type: object
      required:
      - asset
      - hidden
      title: UpdateAssetConfiguration
    TronAddressRequest:
      properties:
        chain:
          $ref: '#/components/schemas/TronChainUniqueId'
          description: The chain details this address is of.
        base58_repr:
          type: string
          maxLength: 34
          minLength: 34
          pattern: ^T[a-km-zA-HJ-NP-Z1-9]+$
          title: Base58 Repr
          description: Base58 representation of the address in the chain.
          example: TJCnKsPa7y5okkXvQAidZBzqx3QyQ6sxMW
      type: object
      required:
      - chain
      - base58_repr
      title: TronAddressRequest
      description: Address represents a blockchain address.
    TonAssetIdentifierRequest:
      properties:
        type:
          type: string
          const: ton
          title: Type
          description: TON asset identifier type.
        details:
          oneOf:
          - $ref: '#/components/schemas/TonNativeAssetIdentifierRequest'
          - $ref: '#/components/schemas/TonJettonAssetIdentifierRequest'
          discriminator:
            propertyName: type
            mapping:
              jetton: '#/components/schemas/TonJettonAssetIdentifierRequest'
              native: '#/components/schemas/TonNativeAssetIdentifierRequest'
      type: object
      required:
      - type
      - details
      title: TonAssetIdentifierRequest
    SuiAssetIdentifier:
      properties:
        type:
          type: string
          const: sui
          title: Type
          description: Sui asset identifier type.
        details:
          oneOf:
          - $ref: '#/components/schemas/SuiNativeAssetIdentifierRequest'
          - $ref: '#/components/schemas/SuiCoinAssetIdentifierRequest'
          discriminator:
            propertyName: type
            mapping:
              coin: '#/components/schemas/SuiCoinAssetIdentifierRequest'
              native: '#/components/schemas/SuiNativeAssetIdentifierRequest'
        chain:
          $ref: '#/components/schemas/EnrichedSuiChain'
      type: object
      required:
      - type
      - details
      - chain
      title: SuiAssetIdentifier
    TronAssetIdentifier:
      properties:
        type:
          type: string
          const: tron
          title: Type
          description: TRON asset identifier type.
        details:
          oneOf:
          - $ref: '#/components/schemas/TronNativeAssetIdentifierRequest'
          - $ref: '#/components/schemas/TronTrc20AssetIdentifierRequest'
          discriminator:
            propertyName: type
            mapping:
              native: '#/components/schemas/TronNativeAssetIdentifierRequest'
              trc20: '#/components/schemas/TronTrc20AssetIdentifierRequest'
        chain:
          $ref: '#/components/schemas/EnrichedTronChain'
      type: object
      required:
      - type
      - details
      - chain
      title: TronAssetIdentifier
    CantonNativeAssetIdentifierRequest:
      properties:
        type:
          type: string
          const: native
          title: Type
          description: Canton asset identifier type.
        chain:
          $ref: '#/components/schemas/CantonChainUniqueId'
          description: The details of the chain of the native asset.
      type: object
      required:
      - type
      - chain
      title: CantonNativeAssetIdentifierRequest
    SolanaNativeAssetIdentifierRequest:
      properties:
        type:
          type: string
          const: native
          title: Type
          description: Solana asset identifier type.
        chain:
          $ref: '#/components/schemas/SolanaChainUniqueId'
          description: The details of the chain of the native asset.
      type: object
      required:
      - type
      - chain
      title: SolanaNativeAssetIdentifierRequest
    AssetIdentifierRequest:
      oneOf:
      - $ref: '#/components/schemas/AptosAssetIdentifierRequest'
      - $ref: '#/components/schemas/ArchAssetIdentifierRequest'
      - $ref: '#/components/schemas/CantonAssetIdentifierRequest'
      - $ref: '#/components/schemas/CosmosAssetIdentifierRequest'
      - $ref: '#/components/schemas/EvmAssetIdentifierRequest'
      - $ref: '#/components/schemas/ExchangeAssetIdentifierRequest'
      - $ref: '#/components/schemas/SolanaAssetIdentifierRequest'
      - $ref: '#/components/schemas/StacksAssetIdentifierRequest'
      - $ref: '#/components/schemas/StellarAssetIdentifierRequest'
      - $ref: '#/components/schemas/StarknetAssetIdentifierRequest'
      - $ref: '#/components/schemas/SuiAssetIdentifierRequest'
      - $ref: '#/components/schemas/TonAssetIdentifierRequest'
      - $ref: '#/components/schemas/TronAssetIdentifierRequest'
      - $ref: '#/components/schemas/UtxoAssetIdentifierRequest'
      discriminator:
        propertyName: type
        mapping:
          aptos: '#/components/schemas/AptosAssetIdentifierRequest'
          arch: '#/components/schemas/ArchAssetIdentifierRequest'
          canton: '#/components/schemas/CantonAssetIdentifierRequest'
          cosmos: '#/components/schemas/CosmosAssetIdentifierRequest'
          evm: '#/components/schemas/EvmAssetIdentifierRequest'
          exchange: '#/components/schemas/ExchangeAssetIdentifierRequest'
          solana: '#/components/schemas/SolanaAssetIdentifierRequest'
          stacks: '#/components/schemas/StacksAssetIdentifierRequest'
          starknet: '#/components/schemas/StarknetAssetIdentifierRequest'
          stellar: '#/components/schemas/StellarAssetIdentifierRequest'
          sui: '#/components/schemas/SuiAssetIdentifierRequest'
          ton: '#/components/schemas/TonAssetIdentifierRequest'
          tron: '#/components/schemas/TronAssetIdentifierRequest'
          utxo: '#/components/schemas/UtxoAssetIdentifierRequest'
    EnrichedStarknetChain:
      properties:
        chain_type:
          type: string
          const: starknet
          title: Chain Type
          description: The type of the chain.
        unique_id:
          $ref: '#/components/schemas/StarknetChainUniqueId'
          description: The type of the Starknet-based chain.
        name:
          type: string
          minLength: 1
          title: Name
          description: The full blockchain name.
        native_currency_symbol:
          type: string
          minLength: 1
          title: Native Currency Symbol
          description: The native currency symbol.
          example: ETH
        native_currency_name:
          type: string
          minLength: 1
          title: Native Currency Name
          description: The native currency name.
          example: Ether
        blockchain_explorer:
          $ref: '#/components/schemas/BlockchainExplorer'
        logo_url:
          type: string
          maxLength: 2083
          minLength: 1
          format: uri
          title: Logo Url
          description: The logo URL of the chain.
        is_testnet:
          type: boolean
          title: Is Testnet
          description: Whether the chain is on a testnet.
        is_enabled:
          type: boolean
          title: Is Enabled
          description: Whether the chain is enabled.
      type: object
      required:
      - chain_type
      - unique_id
      - name
      - native_currency_symbol
      - native_currency_name
      - logo_url
      - is_testnet
      - is_enable

# --- truncated at 32 KB (111 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/fordefi/refs/heads/main/openapi/fordefi-assets-api-openapi.yml