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

# Analyst Track Record

> One analyst's accuracy record — scores and ranks, tier per asset class, call counts by source platform, recent bias, covered assets and where they publish. Public, no API key.

## What it returns

One analyst's record: `accuracy_score`, `accuracy_sample_size`, bull / bear / short / long scores
with their ranks, `overall_rank`, the tier per asset class, call counts split by source platform
(`calls.by_source`) with the definition of a call, recent bias, covered assets, the profile URL and
where they publish.

`{handle}` is the X handle, the platform handle or the `/analyst/{slug}` page slug.

## Access

Public — no API key, no session. Responses are CDN-cached for one hour and carry `score_notes`
explaining every number. Scores are comparative 0–100 values, not win probabilities — see the
[Methodology](https://consensus.cryptoquant.com/methodology).

## Notes

* A **call** is one directional (bullish or bearish) item about one tracked asset, over the whole
  stored history: X posts, TradingView ideas, Seeking Alpha articles (title + summary), Substack
  posts and sell-side analyst ratings. An article on several tickers is one call per ticker on each
  asset page and counts once per article × ticker pair in its author's total.
* `calls.by_source` keys are the [`source_platform`](/sentiment/enums) values; `sources[]` uses
  the `analyst_source` values (`twitter` = X).
* `tier` / `tiers` carry the badge key (`top1` · `top5` · `top10` · `tracked`), the pool rank and
  size, and a `reason` when the tier is `null` — see [`tier_reason`](/sentiment/enums).
* No tracked analyst matching `{handle}` answers `404 ANALYST_NOT_FOUND`.

<Tip>
  Building an agent tool? The same call backs the CryptoQuant MCP tool `get_analyst_profile` — see
  [For AI Agents](/sentiment/for-agents).
</Tip>


## OpenAPI

````yaml openapi/sentiment.json GET /analysts/{handle}
openapi: 3.1.0
info:
  title: Analyst Consensus API — CryptoQuant
  version: 2.2.0
  summary: >-
    What curated analysts say about crypto, stocks, indices and commodities, as
    numbers.
  description: >-
    What curated analysts on X, CryptoQuant, Seeking Alpha, TradingView and
    Substack (plus licensed sell-side ratings on equities) say about 1712 assets
    — crypto, US and KR equities, index ETFs, commodities — as numbers: the
    daily Analyst Consensus Index (−100 … +100, one series per asset), a
    per-asset consensus breakdown (bull / bear case, viewpoints grouped by
    thesis, source posts), per-analyst stance series, and each analyst's
    accuracy track record.


    **Two access levels.** Public, no key (per-IP rate limit, CDN-cached): `GET
    /assets` (the asset registry + every enum), `GET /consensus` without a key
    (the LATEST index point for any asset with the bull / bear case), `GET
    /analyst-views`, `GET /calls`, `GET /analysts/top`, `GET
    /analysts/{handle}`. Every public payload carries `page_url` (link it),
    `cite_as` and `data_by` ("Data by CryptoQuant Consensus" — show it with the
    numbers). With an API key (`X-API-Key` header or `api_key` query parameter):
    the index HISTORY (`GET /consensus` with `days`) and `GET
    /consensus/breakdown` on any plan; the per-analyst series `GET /sentiment`
    on the Premium and Enterprise plans only (`PLAN_REQUIRED` below). Keys are
    provisioned with the CryptoQuant Premium plan or an Enterprise agreement;
    there is no self-serve key endpoint on this host. **Raw source text** (the
    original post title / text) is provided under an Integration agreement only,
    per API key (`api_keys.raw_access`, never a plan): `GET
    /consensus/breakdown` sends `sources[].statement` on a cleared key and a ≤
    200-character `sources[].excerpt` + url on every other key — Premium,
    Enterprise and admin-owned keys included; the key-free `/analyst-views` and
    `/calls` excerpts follow the same rule. Integration use that needs the
    original text: contact sales@cryptoquant.com (`x-raw-source-text`). Thesis,
    narratives, index and labels are the same on every plan.


    **Conventions.** Dates: `date` = UTC calendar day `YYYY-MM-DD`; `date-time`
    = RFC 3339 / ISO 8601 with offset, UTC. Index and stance series are
    end-of-day: the current UTC day is excluded until complete, so values never
    change retroactively. No pagination anywhere: a series comes back whole
    (`days` is capped by the plan, 36,500 = everything; the full BTC history is
    ≈ 1,950 rows); lists are capped by `limit` (1–50). Sorting is fixed per
    endpoint and stated in its description. Filters combine with AND. Every
    error is the `Error` object: branch on `code`, read `message`, follow
    `docs_url`; `x-errors` lists every code with its recovery. Every operation
    carries `x-plan` (who may call it).


    **Agents.** Import this document as a ChatGPT GPT Action (Authentication:
    None for the public operations) or any OpenAPI tool loader; the Markdown
    version of these docs is `/llms.txt`; the same data is an MCP server at
    `/mcp` (Streamable HTTP, no auth). Pass `via=chatgpt|claude|…` so the links
    you show carry the right `utm_source`.


    **Freshness.** Index and stance series: end-of-day UTC. The breakdown is
    recomputed daily (English by 04:00 UTC, translations by 06:00 UTC); its
    opinion counts refresh every 4 hours. Public payloads are CDN-cached 5
    minutes (track record and assets: 1 hour).


    Human docs: https://consensus.cryptoquant.com/docs/api · how the numbers are
    made: https://consensus.cryptoquant.com/methodology · Markdown for agents:
    https://consensus.cryptoquant.com/llms.txt
  contact:
    name: CryptoQuant — API access and Enterprise data
    url: https://cryptoquant.com/get-in-touch
    email: support@cryptoquant.com
  termsOfService: https://consensus.cryptoquant.com/terms
  license:
    name: Proprietary — CryptoQuant Terms of Service
    url: https://consensus.cryptoquant.com/terms
servers:
  - url: https://consensus.cryptoquant.com/api/v1
    description: Analyst Consensus by CryptoQuant
security:
  - ApiKeyHeader: []
  - ApiKeyQuery: []
tags:
  - name: Registry
    description: Public, no API key. The assets the API covers and every enum it uses.
  - name: Consensus
    description: >-
      The Analyst Consensus Index: latest point public (no key); history and the
      per-asset breakdown with an API key.
  - name: Analyst views
    description: >-
      Public, no API key. What analysts are saying: narratives, per-analyst
      views, the newest calls.
  - name: Analyst track record
    description: >-
      Public, no API key. Who to trust: accuracy scores, ranks and badges per
      analyst.
  - name: Analyst stance
    description: Premium / Enterprise API key. One analyst's daily stance on an asset.
externalDocs:
  description: Sentiment Data documentation (the human rendering of this document)
  url: https://docs.cryptoquant.com/sentiment/overview
paths:
  /analysts/{handle}:
    get:
      tags:
        - Analyst track record
      summary: One analyst's track record (public, no API key)
      description: >-
        The analyst page's numbers as JSON: stored accuracy scores, category
        ranks, overall rank, best top-10 placement, call counts split per source
        and recent bias, covered assets, profile and source URLs. `{handle}` is
        the X handle, the /analyst/`<slug>` page slug or a `platform:slug` id; a
        leading @ is ignored and URL-encoding is decoded. Hidden, ineligible,
        company, news-feed and sell-side rows are 404 `ANALYST_NOT_FOUND`.
        Public; CDN-cached for one hour. Backs the MCP tool get_analyst_profile.
      operationId: getAnalystTrackRecord
      parameters:
        - name: handle
          in: path
          required: true
          schema:
            type: string
          example: caprioleio
          description: X handle / page slug / `platform:slug` id (case-insensitive).
      responses:
        '200':
          description: Track record
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AnalystTrackRecord'
              example:
                handle: caprioleio
                name: Charles Edwards
                slug: caprioleio
                profile_url: https://consensus.cryptoquant.com/analyst/caprioleio
                source_url: https://x.com/caprioleio
                sources:
                  - twitter
                role: Founder & CEO
                company: Capriole Investments
                follower_count: 0
                is_verified: false
                category: macro
                activity:
                  last_activity_at: '2026-10-02T12:34:42+00:00'
                  active_last_3_months: true
                track_record:
                  accuracy_score: 70.8
                  accuracy_sample_size: 1624
                  call_count: 2276
                  bull_score: 89.8
                  bear_score: 39.8
                  short_score: 63.9
                  long_score: 77
                  balanced_score: 39.8
                  overall_rank:
                    rank: 6
                    total: 109
                  category_ranks:
                    bull:
                      rank: 1
                      total: 111
                    bear:
                      rank: 51
                      total: 111
                    short:
                      rank: 20
                      total: 91
                    long:
                      rank: 29
                      total: 111
                  best_ranking:
                    category: bull
                    rank: 1
                    label: Bull Accuracy
                    priority: 2
                  scored: true
                  tier:
                    asset_class: crypto
                    tier: 1
                    badge: top1
                    label: Top 1%
                    eligible: true
                    reason: null
                    pool_rank: 7
                    pool_size: 106
                    percentile: 6.6038
                    score_version: v20r-btc-amp31-dir
                    computed_at: '2026-10-02T21:16:07.550877+00:00'
                  tiers:
                    crypto:
                      asset_class: crypto
                      tier: 1
                      badge: top1
                      label: Top 1%
                      eligible: true
                      reason: null
                      pool_rank: 7
                      pool_size: 106
                      percentile: 6.6038
                      score_version: v20r-btc-amp31-dir
                      computed_at: '2026-10-02T21:16:07.550877+00:00'
                calls:
                  total: 1778
                  bullish: 1160
                  bearish: 618
                  neutral: 542
                  by_source:
                    x: 1778
                    cryptoquant: 0
                    news: 0
                    tradingview: 0
                    seekingalpha: 0
                    substack: 0
                    benzinga: 0
                    other: 0
                  definition: >-
                    A call is one directional (bullish or bearish) item about
                    one tracked asset, over the whole stored history: X posts,
                    TradingView ideas, Seeking Alpha articles (title + summary),
                    Substack posts and sell-side analyst ratings. An article on
                    several tickers is one call per ticker on each asset page
                    and counts once per article × ticker pair in its author's
                    total.
                  recent_bullish_bias_pct: 70
                  recent_bias: bullish
                covered_assets:
                  - symbol: BTC
                    asset_class: crypto
                    last_post_at: '2026-09-23T04:02:49+00:00'
                  - symbol: SPY
                    asset_class: indices
                    last_post_at: '2026-08-05T06:40:15+00:00'
                citation_count: null
                score_notes:
                  accuracy_score: >-
                    Overall accuracy, 0–100: an Empirical-Bayes-adjusted hit
                    rate of the analyst's directional calls against subsequent
                    price moves, shrunk toward the pool mean when the sample is
                    small. Comparative — rank analysts on the same asset by it;
                    it is NOT a win probability.
                  accuracy_sample_size: >-
                    Number of evaluated calls behind accuracy_score. Treat
                    scores with a sample below ~10 as weak evidence.
                methodology_url: https://consensus.cryptoquant.com/methodology
                docs_url: >-
                  https://consensus.cryptoquant.com/docs/api#analyst-track-record
                as_of: '2026-10-06T07:48:28.011Z'
        '404':
          description: >-
            `ANALYST_NOT_FOUND` — no such tracked analyst (`message` points to
            /analysts/top for valid handles)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error: Analyst not found
                code: ANALYST_NOT_FOUND
                message: >-
                  No tracked analyst "nobody". Valid handles are listed by GET
                  https://consensus.cryptoquant.com/api/v1/analysts/top?asset=<symbol>.
                docs_url: https://consensus.cryptoquant.com/docs/api#errors
      security: []
      x-codeSamples:
        - lang: Shell
          source: >-
            curl -X GET
            "https://consensus.cryptoquant.com/api/v1/analysts/caprioleio"
        - lang: JavaScript
          source: >-
            fetch("https://consensus.cryptoquant.com/api/v1/analysts/caprioleio")
              .then(response => response.json())
              .then(data => console.log(data))
        - lang: NodeJS
          source: |-
            require('axios')
              .get("https://consensus.cryptoquant.com/api/v1/analysts/caprioleio")
              .then(response => console.log(response))
        - lang: Ruby
          source: >-
            require 'net/http'

            uri =
            URI("https://consensus.cryptoquant.com/api/v1/analysts/caprioleio")

            res = Net::HTTP.get_response(uri)

            puts res.body
        - lang: Python
          source: |-
            import requests
            url = "https://consensus.cryptoquant.com/api/v1/analysts/caprioleio"
            print(requests.get(url).json())
components:
  schemas:
    AnalystTrackRecord:
      type: object
      required:
        - handle
        - slug
        - profile_url
        - sources
        - activity
        - track_record
        - calls
        - covered_assets
        - as_of
      properties:
        handle:
          type: string
          description: X handle, or `<platform>:<slug>` for a platform-only analyst.
        name:
          type:
            - string
            - 'null'
        profile_url:
          type: string
          format: uri
          description: The analyst page on the site (cite this).
        source_url:
          type:
            - string
            - 'null'
          format: uri
          description: >-
            Where the analyst publishes (X, CryptoQuant, TradingView, Seeking
            Alpha, Substack).
        sources:
          type: array
          items:
            type: string
            enum:
              - twitter
              - cryptoquant
              - seekingalpha
              - tradingview
              - substack
              - other
          description: Stored provenance of the analyst row (`twitter` = X).
        role:
          type:
            - string
            - 'null'
        company:
          type:
            - string
            - 'null'
        category:
          type:
            - string
            - 'null'
          description: >-
            Analyst category label (e.g. `technical`, `macro`); free text, null
            when unset.
        slug:
          type: string
          description: Page slug (`/analyst/<slug>`).
        follower_count:
          type:
            - integer
            - 'null'
          minimum: 0
        is_verified:
          type: boolean
        activity:
          type: object
          required:
            - last_activity_at
            - active_last_3_months
          properties:
            last_activity_at:
              type:
                - string
                - 'null'
              format: date-time
            active_last_3_months:
              type:
                - boolean
                - 'null'
              description: >-
                null = no activity on record (new or seed-only analyst), not
                "inactive".
        track_record:
          type: object
          required:
            - accuracy_score
            - call_count
            - overall_rank
            - category_ranks
            - scored
            - tier
            - tiers
          properties:
            accuracy_score:
              type:
                - number
                - 'null'
              minimum: 0
              maximum: 100
              description: >-
                Overall accuracy, 0–100: Empirical-Bayes-adjusted hit rate of
                directional calls vs. subsequent price, shrunk toward the pool
                mean for small samples. Comparative within an asset; NOT a win
                probability.
            accuracy_sample_size:
              type:
                - integer
                - 'null'
              minimum: 0
              description: >-
                Evaluated calls behind accuracy_score; below ~10 is weak
                evidence.
            call_count:
              type:
                - integer
                - 'null'
              minimum: 0
              description: >-
                All-time directional (bullish or bearish) posts on tracked
                assets.
            bull_score:
              type:
                - number
                - 'null'
              minimum: 0
              maximum: 100
              description: Accuracy, 0–100, on calls made in bull market phases.
            bear_score:
              type:
                - number
                - 'null'
              minimum: 0
              maximum: 100
              description: Accuracy, 0–100, on calls made in bear market phases.
            short_score:
              type:
                - number
                - 'null'
              minimum: 0
              maximum: 100
              description: Accuracy, 0–100, of calls evaluated over the short horizon.
            long_score:
              type:
                - number
                - 'null'
              minimum: 0
              maximum: 100
              description: Accuracy, 0–100, of calls evaluated over the long horizon.
            balanced_score:
              type:
                - number
                - 'null'
              minimum: 0
              maximum: 100
              description: Mean of bull_score and bear_score when both exist.
            overall_rank:
              type:
                - object
                - 'null'
              properties:
                rank:
                  type: integer
                  minimum: 1
                total:
                  type: integer
                  minimum: 1
              description: Rank by accuracy_score among every analyst holding one.
            category_ranks:
              type: object
              properties:
                bull:
                  type:
                    - object
                    - 'null'
                  properties:
                    rank:
                      type: integer
                      minimum: 1
                    total:
                      type: integer
                      minimum: 1
                bear:
                  type:
                    - object
                    - 'null'
                  properties:
                    rank:
                      type: integer
                      minimum: 1
                    total:
                      type: integer
                      minimum: 1
                short:
                  type:
                    - object
                    - 'null'
                  properties:
                    rank:
                      type: integer
                      minimum: 1
                    total:
                      type: integer
                      minimum: 1
                long:
                  type:
                    - object
                    - 'null'
                  properties:
                    rank:
                      type: integer
                      minimum: 1
                    total:
                      type: integer
                      minimum: 1
            best_ranking:
              type:
                - object
                - 'null'
              properties:
                category:
                  type: string
                  enum:
                    - bull
                    - bear
                    - short
                    - long
                    - overall
                rank:
                  type: integer
                  minimum: 1
                label:
                  type: string
                priority:
                  type: integer
              description: >-
                The analyst's best top-10 placement across the categories, if
                any.
            scored:
              type: boolean
            tier:
              description: >-
                Headline badge: the best tier across the analyst's scored asset
                classes (1 < 5 < 10, then class order). null = nothing stored
                for the analyst (show "Tracked").
              anyOf:
                - type: object
                  allOf:
                    - $ref: '#/components/schemas/AccuracyTier'
                - type: 'null'
            tiers:
              type: object
              additionalProperties:
                $ref: '#/components/schemas/AccuracyTier'
              description: >-
                Every asset class with a stored tier row, keyed by class. A
                class absent here is unscored for this analyst.
        calls:
          type:
            - object
            - 'null'
          required:
            - total
            - bullish
            - bearish
            - neutral
            - by_source
            - definition
            - recent_bullish_bias_pct
            - recent_bias
          properties:
            total:
              type: integer
              minimum: 0
            bullish:
              type: integer
              minimum: 0
            bearish:
              type: integer
              minimum: 0
            neutral:
              type: integer
              minimum: 0
              description: Neutral labelled posts — reported for context, never a call.
            by_source:
              type:
                - object
                - 'null'
              description: >-
                The analyst's directional calls per source over the whole stored
                history (sums to `total`). `benzinga` is always 0 for a tracked
                analyst (sell-side authors are not on the roster). null while
                the breakdown function is not on the database.
              required:
                - x
                - cryptoquant
                - news
                - tradingview
                - seekingalpha
                - substack
                - benzinga
                - other
              properties:
                x:
                  type: integer
                  minimum: 0
                cryptoquant:
                  type: integer
                  minimum: 0
                news:
                  type: integer
                  minimum: 0
                tradingview:
                  type: integer
                  minimum: 0
                seekingalpha:
                  type: integer
                  minimum: 0
                substack:
                  type: integer
                  minimum: 0
                benzinga:
                  type: integer
                  minimum: 0
                other:
                  type: integer
                  minimum: 0
            definition:
              type: string
              description: >-
                What one call is: one directional (bullish or bearish) item
                about one tracked asset, every source, whole history; an article
                on several tickers counts once per article × ticker pair.
            recent_bullish_bias_pct:
              type:
                - number
                - 'null'
              minimum: 0
              maximum: 100
              description: >-
                Bullish share of the last 30 directional posts within three
                months.
            recent_bias:
              type:
                - string
                - 'null'
              enum:
                - bullish
                - bearish
                - balanced
                - null
        covered_assets:
          type: array
          items:
            type: object
            required:
              - symbol
              - asset_class
              - last_post_at
            properties:
              symbol:
                type: string
              asset_class:
                type: string
                enum:
                  - crypto
                  - equities
                  - indices
                  - commodities
              last_post_at:
                type:
                  - string
                  - 'null'
                format: date-time
          description: Most recent post first.
        citation_count:
          type:
            - integer
            - 'null'
          minimum: 0
        score_notes:
          type: object
          additionalProperties:
            type: string
        methodology_url:
          type: string
          format: uri
        docs_url:
          type: string
          format: uri
        as_of:
          type: string
          format: date-time
    Error:
      type: object
      description: >-
        Every non-2xx body. Branch on `code`; `error` is the legacy short reason
        kept for pre-2026-10-06 clients.
      required:
        - error
        - code
        - message
        - docs_url
      properties:
        error:
          type: string
          description: >-
            Legacy short reason ("Invalid asset", "API key required", "Rate
            limit exceeded" …), unchanged wording.
        code:
          type: string
          enum:
            - API_KEY_REQUIRED
            - INVALID_API_KEY
            - PLAN_REQUIRED
            - RAW_ACCESS_REQUIRED
            - DAILY_LIMIT_EXCEEDED
            - RATE_LIMIT_EXCEEDED
            - INVALID_PARAMETER
            - UNKNOWN_ASSET
            - ANALYST_NOT_FOUND
            - ANALYST_NOT_ELIGIBLE
            - NO_DATA
            - SERVICE_UNAVAILABLE
            - INTERNAL_ERROR
          description: >-
            Stable machine code. Status and recovery per code: see `x-errors` at
            the document root.
        message:
          type: string
          description: Human explanation, with the accepted values for a parameter error.
        docs_url:
          type: string
          format: uri
          description: >-
            Where the error is documented (/docs/api#errors, or #plans for
            PLAN_REQUIRED).
        param:
          type: string
          description: The offending query parameter (INVALID_PARAMETER, UNKNOWN_ASSET).
        required_plans:
          type: array
          items:
            type: string
            enum:
              - premium
              - enterprise
          description: Plans that may call the endpoint (PLAN_REQUIRED).
        plan:
          type: string
          description: The key's current plan label, upper-cased (PLAN_REQUIRED).
        upgrade_url:
          type: string
          format: uri
          description: Self-serve upgrade (PLAN_REQUIRED, DAILY_LIMIT_EXCEEDED).
        contact_url:
          type: string
          format: uri
          description: Enterprise / sales contact (PLAN_REQUIRED, DAILY_LIMIT_EXCEEDED).
        limit:
          type:
            - integer
            - 'null'
          description: Daily quota (DAILY_LIMIT_EXCEEDED).
        used:
          type:
            - integer
            - 'null'
          description: Requests used today (DAILY_LIMIT_EXCEEDED).
        reset:
          type: string
          description: When the quota resets ("Daily at midnight UTC").
        retry_after:
          type: integer
          minimum: 1
          description: Seconds to wait (RATE_LIMIT_EXCEEDED; also the Retry-After header).
        docs:
          type: string
          format: uri
          deprecated: true
          description: Legacy alias of docs_url on API_KEY_REQUIRED.
        upgradeUrl:
          type: string
          format: uri
          deprecated: true
          description: Legacy alias of upgrade_url on PLAN_REQUIRED.
    AccuracyTier:
      type: object
      description: >-
        Accuracy percentile-tier badge for one asset class (Ki 2026-09-30). What
        people see is the badge, stated against all analysts: tier 1 = "Top 1%"
        (top 10% of the eligible tracked pool), 5 = "Top 5%" (top 50%), 10 =
        "Top 10%" (the rest of the eligible pool); null = "Tracked" (no badge,
        `reason` says why). Computed daily from the stored accuracy score; the
        precise position (pool_rank / pool_size / percentile) is for detail
        views and agents only.
      required:
        - asset_class
        - tier
        - badge
        - label
        - eligible
        - reason
      properties:
        asset_class:
          type: string
          enum:
            - crypto
            - equities
            - indices
            - commodities
            - macro
        tier:
          type:
            - integer
            - 'null'
          enum:
            - 1
            - 5
            - 10
            - null
          description: >-
            Badge number: 1 = Top 1%, 5 = Top 5%, 10 = Top 10%; null = no badge
            (Tracked).
        badge:
          type: string
          enum:
            - top1
            - top5
            - top10
            - tracked
          description: Stable key for the UI (i18n / icon).
        label:
          type: string
          enum:
            - Top 1%
            - Top 5%
            - Top 10%
            - Tracked
          description: English badge text.
        eligible:
          type: boolean
          description: >-
            True when the analyst is inside the class pool (scored, not
            excluded, ≥ 30 directional calls). A thin pool (< 10) keeps
            eligible=true with tier null and reason pool_too_small.
        reason:
          type:
            - string
            - 'null'
          enum:
            - excluded
            - ineligible
            - news_feed
            - company
            - unscored
            - insufficient_calls
            - pool_too_small
            - null
          description: >-
            Why tier is null; null when a tier is set. unscored = no accuracy
            score for this asset class.
        pool_rank:
          type:
            - number
            - 'null'
          minimum: 1
          description: >-
            Midrank position from the top inside the eligible pool (1 = best;
            tied analysts share one position, e.g. 2.5).
        pool_size:
          type:
            - integer
            - 'null'
          minimum: 0
          description: Eligible analysts in the class when computed.
        percentile:
          type:
            - number
            - 'null'
          minimum: 0
          maximum: 100
          description: >-
            100 × pool_rank / pool_size: position from the top in percent (0 =
            best).
        score_version:
          type:
            - string
            - 'null'
          description: >-
            Score source the tier was computed from (`v20`, or an active
            alternative such as `v20r-btc-amp31-dir`).
        computed_at:
          type:
            - string
            - 'null'
          format: date-time
  securitySchemes:
    ApiKeyHeader:
      type: apiKey
      in: header
      name: X-API-Key
      description: >-
        Provisioned with the CryptoQuant Premium plan or an Enterprise agreement
        (no self-serve). Keys start with `unbias_live_`.
    ApiKeyQuery:
      type: apiKey
      in: query
      name: api_key
      description: Same key as a query parameter (avoid in logged URLs).

````

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