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

# Get the metadata of many native assets in one call

> Resolve the metadata of up to 100 assets in one call. Every requested unit is a key of the response's data object, in request order and in your own spelling; a unit that is unknown or has none of the three kinds of metadata maps to null rather than being dropped, so the response can be read against the request without re-deriving it. onchainMetadata is only the asset's own CIP-25 entry from label 721 of its minting transaction, not the whole label-721 body, and it is an object. This differs from detailedInfo's onchainMetadata, which is the whole minting-transaction metadata as JSON text. cip68Metadata is the CIP-68 reference datum's metadata map decoded to JSON: byte strings become UTF-8 text where they are valid UTF-8, otherwise they stay hex, and chunked lists stay arrays. cip68Version is the datum's version field. metadata is the token-registry entry, the same object detailedInfo returns as metadata. Served by one Koios asset_info call, because yaci-store indexes no asset metadata. Works on mainnet, preprod and preview.



## OpenAPI

````yaml https://nexus.gerowallet.io/v3/api-docs post /api/assets/metadata
openapi: 3.1.0
info:
  title: Nexus API
  description: >-
    Multi-chain blockchain data API for Cardano (and Apex), Bitcoin, and
    Midnight.


    ## Blockchains & Networks

    Endpoints are grouped by **blockchain**. Pick the target **network** with
    the

    `network` query parameter. A network is an environment *within* a
    blockchain,

    not a separate endpoint family.


    - **Cardano & Apex**: one shared set of UTxO endpoints serves
    `CARDANO_MAINNET`,
      `CARDANO_PREPROD`, `CARDANO_PREVIEW`, `APEX_PRIME_MAINNET`, `APEX_VECTOR_MAINNET`,
      `APEX_VECTOR_TESTNET`
    - **Bitcoin**: `BITCOIN_MAINNET`, `BITCOIN_TESTNET4`

    - **Midnight**: `MIDNIGHT_MAINNET`, `MIDNIGHT_PREPROD`, `MIDNIGHT_STAGENET`


    These are the values published on each operation's `network` schema, and
    what

    generated clients send. A kebab-case alias (`cardano-mainnet`) is also
    accepted,

    and matching is case-insensitive — see the note on the parameter itself.


    ### Key scope: one chain, one network

    Each API key is scoped to **one chain and one network**, fixed at creation
    time.

    A `CARDANO_MAINNET` key cannot query `CARDANO_PREPROD`, and it cannot query

    Bitcoin or Midnight at all. Create one key per chain and network under the
    same

    account. Sending a `network` value that does not match the key returns

    **400 Network Mismatch**; omit the parameter and the request runs against
    the

    key's own network.


    What is uniform across chains is the integration surface, not the
    credential:

    one account, one base URL, one auth header, one docs site.


    ## Authentication

    Send your API key in the `X-Api-Key` header. This is the credential for

    programmatic access (create one in the dashboard; keys start with `nxs_`).

    `Authorization: Bearer <token>` is only for JWT **session** tokens issued by

    `/api/auth/login` (browser/mobile apps), not for API keys.


    ## Add-ons

    Capability is gated separately from network scope. Market data, wallet
    analytics,

    transaction building, MCP, and IPFS are paid add-ons; those endpoints return

    **402 Payment Required** on a key whose plan does not carry the matching
    add-on,

    even when the chain and network match.
  contact:
    name: Nexus Team
    url: https://nexus.gerowallet.io/support
    email: nexus@gerowallet.io
  license:
    name: Apache 2.0
    url: https://www.apache.org/licenses/LICENSE-2.0.html
  version: 1.0.0
servers:
  - url: https://nexus.gerowallet.io
    description: API Server
security:
  - apiKeyAuth: []
  - bearerAuth: []
tags:
  - name: Cardano · Blocks
    description: Cardano Block API
  - name: Cardano · Policy
    description: Cardano Policy API
  - name: IPFS
    description: IPFS Content Resolution API
  - name: Bitcoin · Ordinals
    description: Ordinals + runes metadata (ord indexer)
  - name: Partner
    description: Aggregator revenue share for partner key holders
  - name: Cardano · Metadata
    description: Label-scoped transaction metadata API
  - name: Cardano · Assets
    description: Token Registry Metadata
  - name: Cardano · Transactions
    description: Cardano Transactions API
  - name: Midnight · Transactions
    description: Midnight-specific transaction endpoints (unshielded UTXOs)
  - name: Bitcoin · Mempool
    description: Bitcoin mempool snapshot
  - name: Midnight · DUST
    description: DUST registration + generation status
  - name: Cardano · Stake Pools
    description: >-
      Cardano stake pool information including registrations, retirements, and
      pool metadata
  - name: Cardano · Network
    description: Cardano Network API - Query static network / genesis parameters
  - name: Cardano · RealFi
    description: >-
      RealFi Earn (USDr / sUSDr) read API. Wallet-keyed reads take a bech32
      address; Nexus derives the key hashes RealFi matches on. Networks without
      a RealFi deployment answer 502 rather than guessing.
  - name: Cardano · Addresses
    description: Cardano Address API
  - name: Bitcoin · Addresses
    description: >-
      Bitcoin address-keyed queries: stats / balance / UTxOs via electrs;
      ordinals via ord
  - name: Bitcoin · Transactions
    description: Bitcoin transaction lookup and submission
  - name: Cardano · Governance
    description: >-
      Cardano on-chain governance: DReps, governance actions + votes,
      constitutional committee, constitution
  - name: Cardano · DReps
    description: >-
      Cardano delegate representatives (DReps): voting power, status, metadata,
      delegators
  - name: Cardano · Transaction Builder
    description: >-
      Cardano transaction building API. Builds unsigned transactions server-side
      for client-side signing and submission. Network can be specified in the
      request body or as a query parameter. Body takes precedence over query
      parameter.
  - name: Cardano · Assets
    description: Cardano Asset API
  - name: Cardano · Accounts
    description: Cardano Account API
  - name: Bitcoin · Fees
    description: Bitcoin fee-rate estimates by confirmation block target
  - name: Bitcoin · Blocks
    description: Bitcoin block lookup
  - name: Cardano · Handles
    description: ADA Handle resolution
  - name: Cardano Market Data
    description: Endpoints from cardano-market-data
  - name: Midnight · Indexer
    description: Transparent proxy to the Midnight GraphQL indexer
  - name: Cardano · Scripts
    description: Cardano script & datum API
  - name: Cardano · Epochs
    description: Cardano Epoch API - Query protocol parameters and epoch information
  - name: Bitcoin · Chain
    description: Bitcoin chain-tip and sync state
paths:
  /api/assets/metadata:
    post:
      tags:
        - Cardano · Assets
      summary: Get the metadata of many native assets in one call
      description: >-
        Resolve the metadata of up to 100 assets in one call. Every requested
        unit is a key of the response's data object, in request order and in
        your own spelling; a unit that is unknown or has none of the three kinds
        of metadata maps to null rather than being dropped, so the response can
        be read against the request without re-deriving it. onchainMetadata is
        only the asset's own CIP-25 entry from label 721 of its minting
        transaction, not the whole label-721 body, and it is an object. This
        differs from detailedInfo's onchainMetadata, which is the whole
        minting-transaction metadata as JSON text. cip68Metadata is the CIP-68
        reference datum's metadata map decoded to JSON: byte strings become
        UTF-8 text where they are valid UTF-8, otherwise they stay hex, and
        chunked lists stay arrays. cip68Version is the datum's version field.
        metadata is the token-registry entry, the same object detailedInfo
        returns as metadata. Served by one Koios asset_info call, because
        yaci-store indexes no asset metadata. Works on mainnet, preprod and
        preview.
      operationId: getAssetsMetadata
      parameters:
        - name: network
          in: query
          required: false
          schema:
            type: string
            description: >-
              Accepts either the value listed here (`CARDANO_MAINNET`) or its
              kebab-case alias (`cardano-mainnet`); matching is
              case-insensitive. Omit it and the network is taken from the API
              key. A value that disagrees with the key's own network returns 400
              Network Mismatch.
            enum:
              - CARDANO_MAINNET
              - CARDANO_PREPROD
              - CARDANO_PREVIEW
              - APEX_PRIME_MAINNET
              - APEX_VECTOR_MAINNET
              - APEX_VECTOR_TESTNET
              - MIDNIGHT_MAINNET
              - MIDNIGHT_PREPROD
              - MIDNIGHT_STAGENET
              - BITCOIN_MAINNET
              - BITCOIN_TESTNET4
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BulkAssetMetadataRequest'
        required: true
      responses:
        '200':
          description: Metadata resolved
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BulkAssetMetadataResponseDto'
                additionalProperties:
                  default: ''
                default: ''
        '400':
          description: Empty list, more than 100 units, or a malformed unit
          content:
            application/json:
              schema:
                type: string
                additionalProperties:
                  default: ''
                default: ''
                example:
                  error: At most 100 units per call
        '501':
          description: No provider on the network implements the batch metadata read
          content:
            application/json:
              schema:
                type: string
                additionalProperties:
                  default: ''
                default: ''
                example:
                  error: Operation Not Supported
        '503':
          description: Chain-data providers unavailable
          content:
            application/json:
              schema:
                type: string
                additionalProperties:
                  default: ''
                default: ''
                example:
                  error: Service Unavailable
components:
  schemas:
    BulkAssetMetadataRequest:
      type: object
      default: null
      description: Bulk asset metadata request
      properties:
        units:
          type: array
          default: ''
          description: >-
            Asset units (56-hex policy id followed by the asset-name hex), max
            100 per call
          example:
            - >-
              9a2ec5c92daccbb269611a9eae7a40f9788d3f9c0229661b6234286f000de1406f766f3532
          items:
            type: string
            pattern: ^[a-fA-F0-9]{56}(?:[a-fA-F0-9]{2}){0,32}$
          maxItems: 100
          minItems: 0
      required:
        - units
    BulkAssetMetadataResponseDto:
      type: object
      default: null
      description: Asset metadata keyed by unit
      properties:
        data:
          type: object
          additionalProperties:
            $ref: '#/components/schemas/AssetMetadataEntryDto'
          default: ''
          description: >-
            Unit to its metadata. Every requested unit is present, in request
            order and in the caller's spelling; a unit that is unknown or has
            none of the three kinds of metadata maps to null.
          example:
            9a2ec5c92daccbb269611a9eae7a40f9788d3f9c0229661b6234286f000de1406f766f3532:
              onchainMetadata: null
              cip68Metadata:
                name: OVO 52
                image: ipfs://QmerWgPdvgPqS2KUo7jMKd2UUNt5D68iEmTJcTM4Ffv5XQ
                mediaType: image/gif
              cip68Version: 1
              metadata: null
    AssetMetadataEntryDto:
      type: object
      default: null
      description: CIP-25, CIP-68 and token-registry metadata of one asset
      properties:
        onchainMetadata:
          type: string
          default: ''
          description: >-
            The asset's own CIP-25 entry from label 721 of its minting
            transaction: only this asset's object, not the whole label-721 body.
            Null when the minting transaction carries no entry for the asset.
          example:
            name: OVO 52
            image: ipfs://QmerWgPdvgPqS2KUo7jMKd2UUNt5D68iEmTJcTM4Ffv5XQ
        cip68Metadata:
          type: string
          default: ''
          description: >-
            The CIP-68 reference datum's metadata map decoded to JSON. Byte
            strings are UTF-8 text where they are valid UTF-8 with no control
            characters, otherwise hex. Chunked lists (strings split into 64-byte
            pieces) are kept as arrays. Null when the asset has no reference
            datum.
          example:
            name: OVO 52
            image: ipfs://QmerWgPdvgPqS2KUo7jMKd2UUNt5D68iEmTJcTM4Ffv5XQ
            mediaType: image/gif
        cip68Version:
          type: integer
          format: int32
          default: ''
          description: >-
            The CIP-68 reference datum's version field. Null when there is no
            reference datum or it carries no integer version.
          example: 1
        metadata:
          $ref: '#/components/schemas/AssetMetadataDto'
          default: ''
          description: >-
            The CIP-26 token-registry entry, the same object GET
            /api/assets/detailedInfo returns as metadata. Null when the asset is
            not in the registry.
    AssetMetadataDto:
      type: object
      properties:
        name:
          type: string
        description:
          type: string
        ticker:
          type: string
        url:
          type: string
        logo:
          type: string
        decimals:
          type: integer
          format: int32
  securitySchemes:
    apiKeyAuth:
      type: apiKey
      description: >-
        ### API key (programmatic access — recommended)

        Send your API key in the `X-Api-Key` header. Keys start with `nxs_` and
        are

        created in the dashboard (or via **POST /api/keys** with a session JWT).


        Each key is scoped to **one chain and one network** (for example

        `CARDANO_MAINNET`), fixed at creation time. It cannot query a different
        network

        on the same chain, and it cannot query a different chain at all. A
        mismatched

        `network` parameter returns **400 Network Mismatch**. Create one key per
        chain

        and network under the same account.


        This is the credential most integrations should use.
      name: X-Api-Key
      in: header
    bearerAuth:
      type: http
      description: >-
        ### JWT session token (browser / mobile apps)

        A short-lived JWT issued by `/api/auth/login` or `/api/auth/device`,
        sent as

        `Authorization: Bearer <token>`. This is the **session** credential for
        the web

        dashboard and mobile apps, not for server-to-server API access.


        For programmatic API access use an **API key** in the `X-Api-Key` header

        instead — do **not** put an `nxs_` API key in this Bearer field.
      scheme: bearer
      bearerFormat: JWT

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.