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

# Token metadata (on-chain + off-chain)

> Resolves token metadata across multiple sources, in order:
Metaplex (PDA from Token Metadata Program) → Token 2022 → internal Data API.

On-chain `name`, `symbol`, and `uri` are pulled from whichever source
responds first. If a `uri` is present, the off-chain JSON is fetched
(via IPFS gateway when applicable) and returned under `offChain`.

Result is cached per mint; a single retry-after-1s pass handles tokens
that aren't fully indexed yet.

**`dexPaid`** indicates whether the token has DexScreener
"Enhanced Token Info" (the team paid for the profile). Sourced from a
per-region in-memory cache fed by DexScreener's profile WebSocket;
misses trigger a throttled on-demand `/orders/v1/solana/{mint}` check
in the background (rate-capped well under DexScreener's 60 req/min
limit). The first response for an unseen mint may return
`dexPaid: null`; the next call returns the resolved boolean.




## OpenAPI

````yaml openapi-spec/history.yaml get /api/sol/tokens/metadata/{tokenMint}
openapi: 3.0.3
info:
  title: Raze Database API
  description: >
    Paid subscription API for Solana transaction data and history.


    Also hosts write utilities (`/utils/sol/*`): token launch, transfer, burn,

    consolidate, fees claim/config, and agent initialize — previously on

    `router.raze.bot`. Mixer/distribute removed 2026-07-25.


    ## Batch Requests

    All endpoints with path parameters (mint, signer, address, tokenMint,
    ownerAddress) support batch queries

    via comma-separated values. For example:
    `/api/sol/trades/mint/mint1,mint2,mint3?limit=50`


    - Maximum 10 values per batch request

    - Each value must be a valid address (>= 32 characters)

    - Single values behave identically to non-batch requests

    - Batch response format: `{ "success": true, "results": { "value1": {...},
    "value2": {...} }, "count": N, "timestamp": "..." }`

    - Each key in `results` contains the full single-entity response

    - Queries run in parallel for maximum performance
  version: 1.0.0
servers:
  - url: https://api.raze.bot
    description: >-
      Raze global History API — GeoDNS routes to the nearest region
      automatically
security:
  - ApiKeyAuth: []
paths:
  /api/sol/tokens/metadata/{tokenMint}:
    get:
      summary: Token metadata (on-chain + off-chain)
      description: >
        Resolves token metadata across multiple sources, in order:

        Metaplex (PDA from Token Metadata Program) → Token 2022 → internal Data
        API.


        On-chain `name`, `symbol`, and `uri` are pulled from whichever source

        responds first. If a `uri` is present, the off-chain JSON is fetched

        (via IPFS gateway when applicable) and returned under `offChain`.


        Result is cached per mint; a single retry-after-1s pass handles tokens

        that aren't fully indexed yet.


        **`dexPaid`** indicates whether the token has DexScreener

        "Enhanced Token Info" (the team paid for the profile). Sourced from a

        per-region in-memory cache fed by DexScreener's profile WebSocket;

        misses trigger a throttled on-demand `/orders/v1/solana/{mint}` check

        in the background (rate-capped well under DexScreener's 60 req/min

        limit). The first response for an unseen mint may return

        `dexPaid: null`; the next call returns the resolved boolean.
      operationId: getTokenMetadata
      parameters:
        - name: tokenMint
          in: path
          required: true
          schema:
            type: string
          example: Fyx78ew4wRY26gPj5CkTyuZ4kvW7CkPff5Jm2vNspump
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TokenMetadataResponse'
        '400':
          description: Invalid mint address
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: No metadata found across any source
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
components:
  schemas:
    TokenMetadataResponse:
      type: object
      properties:
        success:
          type: boolean
        metadata:
          type: object
          properties:
            tokenMint:
              type: string
            onChain:
              type: object
              description: |
                Merged on-chain view. Always carries the base fields; additional
                fields are present depending on which resolver produced them
                (Metaplex fields and/or mint-account fields).
              properties:
                name:
                  type: string
                symbol:
                  type: string
                uri:
                  type: string
                source:
                  type: string
                  enum:
                    - metaplex
                    - token2022
                    - dataApi
                  description: Which resolver returned the on-chain fields.
                updateAuthority:
                  type: string
                sellerFeeBasisPoints:
                  type: integer
                primarySaleHappened:
                  type: boolean
                isMutable:
                  type: boolean
                editionNonce:
                  type: integer
                  nullable: true
                tokenStandard:
                  type: integer
                  nullable: true
                tokenStandardName:
                  type: string
                  nullable: true
                creators:
                  type: array
                  items:
                    type: object
                    properties:
                      address:
                        type: string
                      verified:
                        type: boolean
                      share:
                        type: integer
                ownerProgram:
                  type: string
                ownerProgramName:
                  type: string
                decimals:
                  type: integer
                supply:
                  type: string
                uiSupply:
                  type: number
                mintAuthority:
                  type: string
                  nullable: true
                freezeAuthority:
                  type: string
                  nullable: true
                isInitialized:
                  type: boolean
                tokenExtensions:
                  type: array
                  nullable: true
                  items:
                    type: object
            metaplex:
              type: object
              nullable: true
              description: Raw Metaplex Token Metadata account, when present.
              properties:
                key:
                  type: integer
                updateAuthority:
                  type: string
                mint:
                  type: string
                data:
                  type: object
                  properties:
                    name:
                      type: string
                    symbol:
                      type: string
                    uri:
                      type: string
                    sellerFeeBasisPoints:
                      type: integer
                creators:
                  type: array
                  items:
                    type: object
                    properties:
                      address:
                        type: string
                      verified:
                        type: boolean
                      share:
                        type: integer
                primarySaleHappened:
                  type: boolean
                isMutable:
                  type: boolean
                editionNonce:
                  type: integer
                  nullable: true
                tokenStandard:
                  type: integer
                  nullable: true
                tokenStandardName:
                  type: string
                  nullable: true
            mintAccount:
              type: object
              nullable: true
              description: Parsed SPL mint account, when readable.
              properties:
                ownerProgram:
                  type: string
                ownerProgramName:
                  type: string
                decimals:
                  type: integer
                supply:
                  type: string
                uiSupply:
                  type: number
                mintAuthority:
                  type: string
                  nullable: true
                freezeAuthority:
                  type: string
                  nullable: true
                isInitialized:
                  type: boolean
                tokenExtensions:
                  type: array
                  nullable: true
                  items:
                    type: object
            offChain:
              type: object
              nullable: true
              description: Normalized off-chain JSON fetched from `uri` when present.
              properties:
                name:
                  type: string
                symbol:
                  type: string
                description:
                  type: string
                image:
                  type: string
                animationUrl:
                  type: string
                  nullable: true
                externalUrl:
                  type: string
                  nullable: true
                twitter:
                  type: string
                  nullable: true
                telegram:
                  type: string
                  nullable: true
                website:
                  type: string
                  nullable: true
                imageSource:
                  type: string
                  nullable: true
            metadataSource:
              type: string
              enum:
                - metaplex
                - token2022
                - dataApi
            dexPaid:
              type: boolean
              nullable: true
              description: |
                `true` / `false` once resolved; `null` while the backend
                hasn't seen this mint yet (an on-demand DexScreener
                `/orders` check is enqueued — the next request returns the
                answer). Monotonic in practice: never demoted true → false.
            timestamp:
              type: string
              format: date-time
    ErrorResponse:
      type: object
      properties:
        error:
          type: string
        message:
          type: string
        code:
          type: string
        success:
          type: boolean
      example:
        error: Unauthorized
        message: Invalid API key
        code: INVALID_KEY
        success: false
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: query
      name: apiKey

````