> ## 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.

# Recent Calls

> The newest directional calls on an asset — analyst, stance, the post's ≤ 200-character excerpt, source link and analyst page, newest first. Public, no API key.

## What it returns

`/calls?asset=&limit=` — the newest directional calls (analyst, stance, the post's ≤ 200-character
excerpt, source link, analyst page), newest first, `limit` 1–50.

A **call** = one directional (bullish / bearish) post about this asset by a tracked, eligible
analyst; neutral posts are not calls.

## Access

Public — no API key. 60 requests / minute per IP, cached 5 minutes.

## Notes

* `excerpt` = the first ≤ 200 characters of the post (original language); quote it with its
  `source_url` and the analyst's `profile_url`. The full statement is provided under an
  Integration agreement only (contact [sales@cryptoquant.com](mailto:sales@cryptoquant.com)) —
  see [Raw source text](/sentiment/plans-and-access#raw-source-text).
* Carries `page_url`, `cite_as` and `data_by` — show the attribution with the numbers; `via=`
  tags the links.


## OpenAPI

````yaml openapi/sentiment.json GET /calls
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:
  /calls:
    get:
      tags:
        - Analyst views
      summary: Newest analyst calls on an asset (public, no API key)
      description: >-
        The newest directional calls on one asset, newest first by
        `published_at`: a call = one bullish / bearish post about the asset by a
        tracked, eligible analyst (neutral posts are not calls). Each row:
        analyst, stance, the post's `excerpt` (first ≤ 200 characters, original
        language — never the full text without a key cleared under an
        Integration agreement), `source_url`, `published_at`, `profile_url`.
        Public, no API key. Per-IP limit 60 requests / minute (per function
        instance); CDN-cached 5 minutes (`Cache-Control: public, s-maxage=300,
        stale-while-revalidate=3600`). Backs the MCP tool get_recent_calls.
        History / bulk stays with the keyed API.
      operationId: getRecentCalls
      parameters:
        - name: asset
          in: query
          required: false
          description: >-
            Any registered asset, case-insensitive: the symbol (`BTC`, `NVDA`,
            `005930`, `XAU`), the route key (`bitcoin`, `samsung-electronics`),
            the display name (`Bitcoin`), an alias ticker (`GLD` → XAU) or a
            retired ticker (`MATIC` → POL). The response reports the canonical
            symbol. The full list: `GET /assets`. A market aggregate
            (`crypto-market`) is not accepted. Unknown → 400 `UNKNOWN_ASSET`.
          schema:
            type: string
            default: BTC
          example: NVDA
        - name: limit
          in: query
          required: false
          description: Rows to return, clamped to 1–50 silently; unparsable = 10.
          schema:
            type: integer
            minimum: 1
            maximum: 50
            default: 10
          example: 20
        - name: via
          in: query
          required: false
          description: >-
            The surface the agent runs on; sets `utm_source` on every link in
            the payload. Unknown values fall back to the default.
          schema:
            type: string
            enum:
              - chatgpt
              - claude
              - mcp
              - gemini
              - perplexity
              - api
            default: chatgpt
          example: claude
      responses:
        '200':
          description: Newest calls
          headers:
            X-RateLimit-Limit:
              description: Per-IP requests allowed per minute (60).
              schema:
                type: integer
            X-RateLimit-Remaining:
              description: Requests left in the current minute for this IP.
              schema:
                type: integer
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RecentCallsResponse'
              example:
                asset: BTC
                asset_name: Bitcoin
                count: 2
                calls:
                  - handle: trader1sz
                    name: TraderSZ
                    stance: bearish
                    excerpt: >-
                      now what do you think happens if $BTC takes a little
                      sneeze? https://t.co/E6YKg42FtY
                    source_url: https://x.com/trader1sz/status/2107313628827251104
                    source_type: tweet
                    published_at: '2026-10-06T03:34:55+00:00'
                    profile_url: >-
                      https://consensus.cryptoquant.com/analyst/trader1sz?utm_source=api&utm_medium=gpt-action&utm_campaign=calls
                  - handle: the_daily_digits
                    name: The Daily Digits
                    stance: bullish
                    excerpt: >-
                      $2.1B sits on $95K BTC calls for Oct 30, Deribit's biggest
                      strike.


                      Futures OI lags 13% below its $29.3B peak.


                      Max pain sits at $78K, 9% under spot.
                    source_url: >-
                      https://cryptoquant.com/insights/quicktake/6ac453b68fa8e62507c0bf1b
                    source_type: quicktake
                    published_at: '2026-10-06T01:49:42+00:00'
                    profile_url: >-
                      https://consensus.cryptoquant.com/analyst/the_daily_digits?utm_source=api&utm_medium=gpt-action&utm_campaign=calls
                definition: >-
                  A call = one directional (bullish / bearish) post about this
                  asset by a tracked, eligible analyst; neutral posts are not
                  calls. Newest first. excerpt = the first ≤ 200 characters of
                  the post (original language); quote it with its source_url and
                  the analyst's profile_url — the full statement is provided
                  under an Integration agreement only (contact
                  sales@cryptoquant.com).
                page_url: >-
                  https://consensus.cryptoquant.com/consensus/btc?utm_source=api&utm_medium=gpt-action&utm_campaign=calls
                top_analysts_url: >-
                  https://consensus.cryptoquant.com/analysts?asset=btc&sort=accuracy&utm_source=api&utm_medium=gpt-action&utm_campaign=calls
                methodology_url: >-
                  https://consensus.cryptoquant.com/methodology?utm_source=api&utm_medium=gpt-action&utm_campaign=calls
                cite_as: >-
                  Data by CryptoQuant Consensus —
                  https://consensus.cryptoquant.com/consensus/btc
                data_by: Data by CryptoQuant Consensus
                as_of: '2026-10-06T07:48:25.838Z'
        '400':
          description: '`UNKNOWN_ASSET`'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error: Unknown asset
                code: UNKNOWN_ASSET
                message: >-
                  "DOGE2" is not a registered asset. Use a ticker, route key or
                  name from https://consensus.cryptoquant.com/api/v1/assets
                  (symbol / key / name / aliases, case-insensitive). Market
                  aggregates are not assets.
                docs_url: https://consensus.cryptoquant.com/docs/api#errors
                param: asset
        '429':
          description: >-
            Per-IP limit on the key-free path (60 requests / minute per function
            instance). Wait `Retry-After` seconds, or use an API key for higher
            limits.
          headers:
            Retry-After:
              schema:
                type: integer
            X-RateLimit-Limit:
              schema:
                type: integer
            X-RateLimit-Remaining:
              schema:
                type: integer
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error: Rate limit exceeded
                code: RATE_LIMIT_EXCEEDED
                message: >-
                  Public endpoint: per-IP limit reached. Wait 37 s
                  (Retry-After), or use an API key for higher limits.
                docs_url: https://consensus.cryptoquant.com/docs/api#errors
                retry_after: 37
        '500':
          description: '`INTERNAL_ERROR` — retry once after a few seconds.'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                error: Internal server error
                code: INTERNAL_ERROR
                message: >-
                  Something went wrong on our side. Retry once after a few
                  seconds; if it persists, report the URL to support.
                docs_url: https://consensus.cryptoquant.com/docs/api#errors
      security: []
      x-codeSamples:
        - lang: Shell
          source: >-
            curl -X GET
            "https://consensus.cryptoquant.com/api/v1/calls?asset=BTC&limit=10"
        - lang: JavaScript
          source: >-
            fetch("https://consensus.cryptoquant.com/api/v1/calls?asset=BTC&limit=10")
              .then(response => response.json())
              .then(data => console.log(data))
        - lang: NodeJS
          source: |-
            require('axios')
              .get("https://consensus.cryptoquant.com/api/v1/calls?asset=BTC&limit=10")
              .then(response => console.log(response))
        - lang: Ruby
          source: >-
            require 'net/http'

            uri =
            URI("https://consensus.cryptoquant.com/api/v1/calls?asset=BTC&limit=10")

            res = Net::HTTP.get_response(uri)

            puts res.body
        - lang: Python
          source: >-
            import requests

            url =
            "https://consensus.cryptoquant.com/api/v1/calls?asset=BTC&limit=10"

            print(requests.get(url).json())
components:
  schemas:
    RecentCallsResponse:
      type: object
      required:
        - asset
        - asset_name
        - count
        - calls
        - definition
        - page_url
        - cite_as
        - data_by
        - as_of
      properties:
        asset:
          type: string
        asset_name:
          type: string
        count:
          type: integer
          minimum: 0
        calls:
          type: array
          items:
            $ref: '#/components/schemas/AgentCall'
          description: Newest first.
        definition:
          type: string
          description: What a call is — quote with the list.
        page_url:
          type: string
          format: uri
          description: >-
            The canonical page on the site for this answer, UTM-tagged for the
            calling surface (`via`). Link it in every answer.
        top_analysts_url:
          type: string
          format: uri
          description: The asset's analysts ranked by accuracy (site page).
        methodology_url:
          type: string
          format: uri
          description: How the numbers are made.
        cite_as:
          type: string
          description: >-
            Attribution line + the untagged canonical URL, e.g. "Data by
            CryptoQuant Consensus —
            https://consensus.cryptoquant.com/consensus/btc".
        data_by:
          type: string
          enum:
            - Data by CryptoQuant Consensus
          description: Show this next to the numbers.
        as_of:
          type: string
          format: date-time
          description: Generation time of the payload (UTC).
    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.
    AgentCall:
      type: object
      required:
        - handle
        - stance
        - excerpt
        - published_at
        - profile_url
      properties:
        handle:
          type: string
        name:
          type:
            - string
            - 'null'
        stance:
          type: string
          enum:
            - bullish
            - bearish
        excerpt:
          type: string
          maxLength: 200
          description: >-
            The first ≤ 200 characters of the call's post (sentence / word
            boundary, ellipsis when cut, original language); never the full text
            on this key-free endpoint.
        source_url:
          type:
            - string
            - 'null'
          format: uri
        source_type:
          type:
            - string
            - 'null'
          enum:
            - tweet
            - quicktake
            - research
            - news
            - seekingalpha
            - tradingview
            - substack
            - youtube
            - telegram
            - bluesky
            - null
        published_at:
          type: string
          format: date-time
        profile_url:
          type: string
          format: uri
  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.