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

# Compare one underlying asset across venues

> Resolve an underlying asset and compare its venue instruments. For example GOLD includes recognized aliases such as PAXG; canonical identifiers are different from venue symbols such as xyz:GOLD. Position-count bias and notional exposure measure different things. Missing optional venue fields mean unavailable, not zero. Aggregated wallet counts sum per-venue counts and do not deduplicate wallets across venues.



## OpenAPI

````yaml /api-reference/openapi.json get /api/public/v1/assets/{canonical}/cross-market
openapi: 3.1.0
info:
  title: coinversa-api
  version: 0.1.0
servers:
  - url: https://api.coinversa.ai
    description: Production
security: []
paths:
  /api/public/v1/assets/{canonical}/cross-market:
    get:
      tags:
        - Cross-market intelligence
      summary: Compare one underlying asset across venues
      description: >-
        Resolve an underlying asset and compare its venue instruments. For
        example GOLD includes recognized aliases such as PAXG; canonical
        identifiers are different from venue symbols such as xyz:GOLD.
        Position-count bias and notional exposure measure different things.
        Missing optional venue fields mean unavailable, not zero. Aggregated
        wallet counts sum per-venue counts and do not deduplicate wallets across
        venues.
      operationId: get-api-public-v1-assets-by-canonical-cross-market
      parameters:
        - description: >-
            Underlying asset identifier or recognized alias, e.g. GOLD or PAXG;
            not a venue instrument identifier.
          example: GOLD
          in: path
          name: canonical
          required: true
          schema:
            description: >-
              Underlying asset identifier or recognized alias, e.g. GOLD or
              PAXG; not a venue instrument identifier.
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetAssetCrossMarketBody'
          description: OK
          headers:
            X-Billing-Grace-Expires:
              $ref: '#/components/headers/X-Billing-Grace-Expires'
            X-Billing-State:
              $ref: '#/components/headers/X-Billing-State'
            X-RateLimit-Daily:
              $ref: '#/components/headers/X-RateLimit-Daily'
            X-RateLimit-Daily-Reset:
              $ref: '#/components/headers/X-RateLimit-Daily-Reset'
            X-RateLimit-Monthly:
              $ref: '#/components/headers/X-RateLimit-Monthly'
            X-RateLimit-Monthly-Reset:
              $ref: '#/components/headers/X-RateLimit-Monthly-Reset'
            X-RateLimit-Next:
              $ref: '#/components/headers/X-RateLimit-Next'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
            X-RateLimit-Reset:
              $ref: '#/components/headers/X-RateLimit-Reset'
            X-RateLimit-Route:
              $ref: '#/components/headers/X-RateLimit-Route'
            X-RateLimit-Scope:
              $ref: '#/components/headers/X-RateLimit-Scope'
            X-RateLimit-Tier:
              $ref: '#/components/headers/X-RateLimit-Tier'
            X-Request-ID:
              $ref: '#/components/headers/X-Request-ID'
        '400':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/APIError'
          description: Bad Request
          headers:
            X-Request-ID:
              $ref: '#/components/headers/X-Request-ID'
        '403':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/APIError'
          description: Forbidden
          headers:
            X-Request-ID:
              $ref: '#/components/headers/X-Request-ID'
        '404':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/APIError'
          description: Not Found
          headers:
            X-Request-ID:
              $ref: '#/components/headers/X-Request-ID'
        '422':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/APIError'
          description: Unprocessable Entity
          headers:
            X-Request-ID:
              $ref: '#/components/headers/X-Request-ID'
        '429':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/APIError'
          description: Too Many Requests
          headers:
            Retry-After:
              $ref: '#/components/headers/Retry-After'
            X-Billing-Grace-Expires:
              $ref: '#/components/headers/X-Billing-Grace-Expires'
            X-Billing-State:
              $ref: '#/components/headers/X-Billing-State'
            X-RateLimit-Daily:
              $ref: '#/components/headers/X-RateLimit-Daily'
            X-RateLimit-Daily-Reset:
              $ref: '#/components/headers/X-RateLimit-Daily-Reset'
            X-RateLimit-Monthly:
              $ref: '#/components/headers/X-RateLimit-Monthly'
            X-RateLimit-Monthly-Reset:
              $ref: '#/components/headers/X-RateLimit-Monthly-Reset'
            X-RateLimit-Next:
              $ref: '#/components/headers/X-RateLimit-Next'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
            X-RateLimit-Reset:
              $ref: '#/components/headers/X-RateLimit-Reset'
            X-RateLimit-Route:
              $ref: '#/components/headers/X-RateLimit-Route'
            X-RateLimit-Scope:
              $ref: '#/components/headers/X-RateLimit-Scope'
            X-RateLimit-Tier:
              $ref: '#/components/headers/X-RateLimit-Tier'
            X-Request-ID:
              $ref: '#/components/headers/X-Request-ID'
        '500':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/APIError'
          description: Internal Server Error
          headers:
            X-Request-ID:
              $ref: '#/components/headers/X-Request-ID'
        '504':
          content:
            application/problem+json:
              schema:
                $ref: '#/components/schemas/APIError'
          description: Gateway Timeout
          headers:
            X-Request-ID:
              $ref: '#/components/headers/X-Request-ID'
      security:
        - apiKey: []
components:
  schemas:
    GetAssetCrossMarketBody:
      additionalProperties: false
      properties:
        $schema:
          description: A URL to the JSON Schema for this object.
          examples:
            - https://api.coinversa.ai/schemas/GetAssetCrossMarketBody.json
          format: uri
          readOnly: true
          type: string
        aggregate:
          $ref: '#/components/schemas/CrossMarketAggregate'
          description: >-
            Totals over available venue positioning. Missing venue data can make
            these partial.
        asset:
          $ref: '#/components/schemas/CrossMarketAssetSummary'
          description: Identity and venue coverage of the underlying asset.
        query:
          description: Trimmed input identifier.
          type: string
        resolvedCanonical:
          description: Resolved underlying asset identifier after alias mapping.
          type: string
        venues:
          description: >-
            Venue instruments; omitted optional metrics mean unavailable, not
            zero.
          items:
            $ref: '#/components/schemas/CrossMarketVenue'
          type:
            - array
            - 'null'
      required:
        - query
        - resolvedCanonical
        - asset
        - aggregate
        - venues
      type: object
    APIError:
      additionalProperties: false
      properties:
        $schema:
          description: A URL to the JSON Schema for this object.
          examples:
            - https://api.coinversa.ai/schemas/APIError.json
          format: uri
          readOnly: true
          type: string
        code:
          description: Machine-readable error code; retained for compatibility.
          type: string
        current_tier:
          description: Caller's effective tier
          type: string
        detail:
          description: >-
            A human-readable explanation specific to this occurrence of the
            problem.
          examples:
            - Property foo is required but is missing.
          type: string
        errors:
          description: Optional list of individual error details
          items:
            $ref: '#/components/schemas/ErrorDetail'
          type:
            - array
            - 'null'
        instance:
          description: >-
            A URI reference that identifies the specific occurrence of the
            problem.
          examples:
            - https://example.com/error-log/abc123
          format: uri
          type: string
        reason:
          description: >-
            More specific recovery reason when available: missing_api_key,
            invalid_api_key, insufficient_tier, or invalid_parameters. HTTP
            statuses and legacy code values remain unchanged.
          type: string
        required_tier:
          description: Minimum tier for this operation
          type: string
        status:
          description: HTTP status code
          examples:
            - 400
          format: int64
          type: integer
        title:
          description: >-
            A short, human-readable summary of the problem type. This value
            should not change between occurrences of the error.
          examples:
            - Bad Request
          type: string
        type:
          default: about:blank
          description: A URI reference to human-readable documentation for the error.
          examples:
            - https://example.com/errors/example
          format: uri
          type: string
        upgrade_url:
          description: Where to upgrade
          type: string
      type: object
    CrossMarketAggregate:
      additionalProperties: false
      properties:
        biasRange:
          description: Maximum minus minimum available venue position-count bias.
          format: double
          type: number
        longNotional:
          description: Sum of long position notional, USD.
          format: double
          type: number
        longPositions:
          description: Sum of long positions over available venue data.
          format: int64
          type: integer
        netBias:
          description: >-
            Position-count bias:
            (longPositions-shortPositions)/(longPositions+shortPositions); zero
            when denominator is zero.
          format: double
          type: number
        shortNotional:
          description: Sum of short position notional, USD.
          format: double
          type: number
        shortPositions:
          description: Sum of short positions over available venue data.
          format: int64
          type: integer
        totalOpenInterest:
          description: Sum of available venue open interest, USD.
          format: double
          type: number
        totalPositions:
          description: Sum of directory position counts across venues.
          format: int64
          type: integer
        totalUniqueWallets:
          description: >-
            Sum of per-venue unique wallet counts; the same wallet can be
            counted on multiple venues.
          format: int64
          type: integer
        totalUnrealizedPnl:
          description: Sum of available unrealized position PnL, USD.
          format: double
          type: number
        totalVolume24h:
          description: Sum of available 24-hour venue traded notional, USD.
          format: double
          type: number
      required:
        - totalOpenInterest
        - totalVolume24h
        - totalPositions
        - longPositions
        - shortPositions
        - longNotional
        - shortNotional
        - netBias
        - biasRange
        - totalUnrealizedPnl
        - totalUniqueWallets
      type: object
    CrossMarketAssetSummary:
      additionalProperties: false
      properties:
        canonical:
          description: Resolved underlying asset identifier.
          type: string
        crossMarket:
          description: Whether the asset is listed on more than one venue.
          type: boolean
        synonyms:
          description: >-
            Recognized economically linked ticker aliases, not independent
            assets.
          items:
            type: string
          type:
            - array
            - 'null'
        venueCount:
          description: Number of venue instruments in the directory.
          format: int64
          type: integer
      required:
        - canonical
        - synonyms
        - crossMarket
        - venueCount
      type: object
    CrossMarketVenue:
      additionalProperties: false
      properties:
        avgLongLeverage:
          description: Average leverage of long positions, multiple.
          format: double
          type: number
        avgShortLeverage:
          description: Average leverage of short positions, multiple.
          format: double
          type: number
        collateral:
          description: Venue collateral token.
          type: string
        dex:
          description: Venue identifier, e.g. hl or xyz.
          type: string
        fundingRate:
          description: Available funding rate as supplied by the venue, not annualized.
          format: double
          type: number
        isSynonym:
          description: >-
            Whether this ticker is recognized as an alias of the canonical
            underlying asset.
          type: boolean
        longNotional:
          description: Long position notional, USD; omitted when unavailable.
          format: double
          type: number
        longPositions:
          description: Number of long positions; omitted when unavailable.
          format: int64
          type: integer
        markPx:
          description: Available mark price, USD per unit.
          format: double
          type: number
        netBias:
          description: Position-count bias from -1 to +1; omitted when unavailable.
          format: double
          type: number
        openInterest:
          description: Available open interest, USD; omitted when unavailable.
          format: double
          type: number
        positions:
          description: Available position count; omitted when unavailable.
          format: int64
          type: integer
        shortNotional:
          description: Short position notional, USD; omitted when unavailable.
          format: double
          type: number
        shortPositions:
          description: Number of short positions; omitted when unavailable.
          format: int64
          type: integer
        symbol:
          description: Exact market symbol, e.g. xyz:GOLD.
          type: string
        ticker:
          description: Venue ticker without dex prefix.
          type: string
        totalUnrealizedPnl:
          description: Sum of unrealized position PnL, USD.
          format: double
          type: number
        uniqueWallets:
          description: >-
            Unique wallets in this venue instrument; not deduplicated against
            other venues.
          format: int64
          type: integer
        volume24h:
          description: Available traded notional over 24 hours, USD.
          format: double
          type: number
      required:
        - dex
        - symbol
        - ticker
        - isSynonym
        - collateral
      type: object
    ErrorDetail:
      additionalProperties: false
      properties:
        location:
          description: >-
            Where the error occurred, e.g. 'body.items[3].tags' or
            'path.thing-id'
          type: string
        message:
          description: Error message text
          type: string
        value:
          description: The value at the given location
      type: object
  headers:
    X-Billing-Grace-Expires:
      description: RFC3339 time when billing grace expires, when applicable.
      schema:
        type: string
    X-Billing-State:
      description: Billing grace state, when applicable.
      schema:
        type: string
    X-RateLimit-Daily:
      description: >-
        Daily account allowance reported by the existing counter check, clamped
        at zero. Best-effort; present only for a capped tier that reaches the
        quota check.
      schema:
        type: string
    X-RateLimit-Daily-Reset:
      description: >-
        Unix seconds (UTC) after the selected daily quota bucket expires. Not a
        source-data timestamp.
      schema:
        type: string
    X-RateLimit-Monthly:
      description: >-
        Monthly account allowance reported by the existing counter check,
        clamped at zero. Best-effort; present only for a capped tier that
        reaches the quota check.
      schema:
        type: string
    X-RateLimit-Monthly-Reset:
      description: >-
        Unix seconds (UTC) after the selected monthly quota bucket expires.
        Follows the existing billing anchor.
      schema:
        type: string
    X-RateLimit-Next:
      description: >-
        Legacy Go duration string until the next token is available across the
        checked buckets; not the daily/monthly reset.
      schema:
        type: string
    X-RateLimit-Remaining:
      description: >-
        Minimum remaining tokens across the checked minute and per-route token
        buckets (account for keys, IP for anonymous requests). Not a
        fixed-window request allowance.
      schema:
        type: string
    X-RateLimit-Reset:
      description: >-
        Unix seconds (UTC), rounded up, when the checked token buckets next
        permit a request, assuming no competing traffic. Not a full bucket
        refill.
      schema:
        type: string
    X-RateLimit-Route:
      description: Remaining tokens in the account's per-route token bucket.
      schema:
        type: string
    X-RateLimit-Scope:
      description: >-
        account for authenticated requests (shared across keys); ip for
        anonymous requests. Describes the limiter scope, not the key's resolved
        tier.
      schema:
        type: string
    X-RateLimit-Tier:
      description: Effective tier for this request; only present after access checks pass.
      schema:
        type: string
    X-Request-ID:
      description: >-
        Server-generated correlation ID. Include it in a support report; not a
        guarantee that an unauthenticated request appears in account usage logs.
      schema:
        type: string
    Retry-After:
      description: >-
        On HTTP 429, whole seconds to wait before retrying, rounded up. Other
        traffic may still consume the available allowance.
      schema:
        type: string
  securitySchemes:
    apiKey:
      description: >-
        Create an API key at https://developers.coinversa.ai/keys. REST limits
        are shared across keys by account; access uses the effective tier of the
        presented key.
      in: header
      name: X-API-Key
      type: apiKey

````