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

# Get holder concentration history for one token

> Daily time series of top-10/top-30 holder concentration for one token, assembled from the daily HCI snapshots (accruing since 2026-03-31). Points are sparse: dates with no snapshot are absent.

**Methodology versions.** On 2026-09-30 the holder-concentration computation changed (top holders are now fetched explicitly and the top-30 cohort is built from 30 holders; before that, the organic top-10 was computed from at most 10 fetched holders and top-30 repeated it). Values are only comparable within one `methodologyVersion`: split a chart at each date in `meta.methodologyBreaks` instead of reading the step as a market move. `meta.methodologyVersions` lists every version with the date it took effect. Earlier snapshots cannot be recomputed.



## OpenAPI

````yaml GET /rwa/hci/history
openapi: 3.0.1
info:
  title: Risk Score API
  description: API definition for Webacy Risk Scores
  version: 1.12.1
servers:
  - url: https://api.webacy.com
    description: Webacy Risk Score API (Production)
  - url: https://api-development.webacy.com
    description: Webacy Risk Score API (Development)
  - url: http://0.0.0.0:3030/api/v1/risk-score
    description: Webacy Risk Score API - Local
security:
  - api_key: []
tags:
  - name: Webhooks
    description: >-
      Subscribe to and manage real-time event notifications (currently
      DEPEG_TIER_CHANGE)
  - name: Threat Risks
    description: Analyze addresses for security threats and malicious activity
  - name: Sanction Checks
    description: Check addresses against OFAC and other sanction lists
  - name: Approval Risks
    description: Analyze token approvals and associated risks
  - name: Transaction Risks
    description: Assess risk details for blockchain transactions
  - name: Exposure Risk
    description: Understand risk profile and exposure of addresses
  - name: Contract Risk
    description: Real-time smart contract security analysis
  - name: URL Risks
    description: Analyze URLs for phishing and security threats
  - name: API Usage
    description: Monitor and manage API consumption
  - name: Holder Analysis
    description: Token holder distribution and sniper detection
  - name: Address Poisoning
    description: Detect address poisoning attack patterns
  - name: Token Analysis
    description: Comprehensive token security and market analysis
  - name: Pool Analysis
    description: Liquidity pool data and analysis
  - name: Transaction Scanning
    description: Scan and simulate transactions for risks
  - name: trading-lite
    description: Lightweight trading risk assessment
  - name: RWA & Pegged Tokens
    description: >-
      Real-world asset and pegged-token analytics (supply flows, mint/burn
      velocity)
  - name: Vault Risk v3
    description: >-
      Webacy-native v3 vault risk surface — composite grade, categories,
      coverage, and the framework taxonomy.
  - name: RWA Risk v3
    description: >-
      Webacy-native v3 RWA / stablecoin risk surface — composite grade,
      structural-health criteria, and batch scoring.
  - name: Stablecoins v3
    description: >-
      Stablecoin-only aliases of the v3 RWA routes: same grades, same shapes,
      `segment` fixed to `stablecoin`.
paths:
  /rwa/hci/history:
    get:
      tags:
        - Depeg Monitor
      summary: Holder Concentration Index history for one token
      description: >-
        Daily time series of top-10/top-30 holder concentration for one token,
        assembled from the daily HCI snapshots (accruing since 2026-03-31).
        Points are sparse: dates with no snapshot are absent.


        **Methodology versions.** On 2026-09-30 the holder-concentration
        computation changed (top holders are now fetched explicitly and the
        top-30 cohort is built from 30 holders; before that, the organic top-10
        was computed from at most 10 fetched holders and top-30 repeated it).
        Values are only comparable within one `methodologyVersion`: split a
        chart at each date in `meta.methodologyBreaks` instead of reading the
        step as a market move. `meta.methodologyVersions` lists every version
        with the date it took effect. Earlier snapshots cannot be recomputed.
      operationId: getHolderConcentrationIndexHistory
      parameters:
        - name: address
          in: query
          required: true
          description: >-
            Token address. EVM addresses match in any casing; Solana addresses
            are case-sensitive.
          schema:
            type: string
          example: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48'
        - name: chain
          in: query
          required: false
          description: >-
            Chain slug (e.g. eth, bsc, sol). When omitted, the first chain the
            address appears on is used for the whole series.
          schema:
            type: string
          example: eth
        - name: days
          in: query
          required: false
          description: Lookback window in days (default 90, max 180).
          schema:
            type: integer
            minimum: 1
            maximum: 180
            default: 90
      responses:
        '200':
          headers:
            x-credit-token:
              $ref: '#/components/headers/XCreditToken'
            x-credit-balance-cu:
              $ref: '#/components/headers/XCreditBalanceCu'
          description: Ascending per-day HCI points with window metadata
          content:
            application/json:
              schema:
                type: object
                properties:
                  token:
                    type: object
                    nullable: true
                    properties:
                      chain:
                        type: string
                      address:
                        type: string
                      symbol:
                        type: string
                      name:
                        type: string
                        nullable: true
                  days:
                    type: integer
                    description: Requested lookback window
                  points:
                    type: array
                    description: Ascending by date; sparse.
                    items:
                      type: object
                      properties:
                        date:
                          type: string
                          format: date
                          description: Snapshot date
                        generatedAt:
                          type: string
                          format: date-time
                          nullable: true
                          description: When the pipeline generated that snapshot
                        top10Index:
                          type: number
                          nullable: true
                          description: >-
                            Top-10 holder concentration index (0-1), same field
                            as `holderConcentration.top10.index` on `GET
                            /rwa/hci`
                        top10TopPct:
                          type: number
                          nullable: true
                          description: >-
                            Share of supply held by the top-10 organic holders
                            (%, 0-100), same field as
                            `holderConcentration.top10.topSharePct` on `GET
                            /rwa/hci`: 0 when every top-10 holder is a protocol
                            contract, null when the point was computed from
                            aggregate totals. Points from before the pipeline
                            published the raw share separately reported the raw
                            share here for tokens whose top-10 were all protocol
                            contracts; the API resolves those points to 0 with
                            the legacy value in `top10RawTopPct`, so the field
                            has one meaning across the whole series.
                            `top10RawTopPct` is null on other older points.
                        top10RawTopPct:
                          type: number
                          nullable: true
                          description: >-
                            Share of supply held by the top-10 holders with
                            every holder counted (%, 0-100), same field as
                            `holderConcentration.top10.rawTopSharePct` on `GET
                            /rwa/hci`. Null on points produced before the
                            pipeline published it (spec 1.12.0), except
                            all-contracts and aggregate-sourced points, whose
                            legacy raw share is resolved here.
                        top10Source:
                          type: string
                          nullable: true
                          enum:
                            - holders
                            - aggregate
                            - null
                          description: >-
                            Same as `holderConcentration.top10.source` on `GET
                            /rwa/hci`: `aggregate` points have `top10TopPct`
                            null and a raw-based `top10Index`. Null on points
                            that predate the field.
                        top10RiskBand:
                          type: string
                          nullable: true
                          enum:
                            - low
                            - medium
                            - high
                            - extreme
                            - null
                        top30Index:
                          type: number
                          nullable: true
                          description: Top-30 holder concentration index (0-1)
                        holderCount:
                          type: integer
                          nullable: true
                        methodologyVersion:
                          type: integer
                          description: >-
                            HCI methodology the snapshot was computed with: 1
                            before 2026-09-30, 2 from 2026-09-30. Only compare
                            points that share a version.
                      required:
                        - date
                        - generatedAt
                        - top10Index
                        - top10TopPct
                        - top10RawTopPct
                        - top10Source
                        - top10RiskBand
                        - top30Index
                        - holderCount
                        - methodologyVersion
                  meta:
                    type: object
                    properties:
                      snapshotsScanned:
                        type: integer
                        description: Dated snapshots that existed inside the window
                      pointsFound:
                        type: integer
                        description: Snapshots in which the token appeared
                      from:
                        type: string
                        format: date
                        nullable: true
                      to:
                        type: string
                        format: date
                        nullable: true
                      methodologyBreaks:
                        type: array
                        items:
                          type: string
                          format: date
                        description: >-
                          Dates inside (from, to] where the methodology changed;
                          the series is not comparable across them.
                      methodologyVersions:
                        type: array
                        description: >-
                          Every HCI methodology version and the first snapshot
                          date it applies to, so `methodologyVersion` can be
                          read without the docs.
                        items:
                          type: object
                          required:
                            - version
                            - from
                          properties:
                            version:
                              type: integer
                            from:
                              type: string
                              format: date
                              description: First snapshot date computed with this version
                    required:
                      - snapshotsScanned
                      - pointsFound
                      - from
                      - to
                      - methodologyBreaks
                      - methodologyVersions
                required:
                  - token
                  - days
                  - points
                  - meta
              example:
                token:
                  chain: eth
                  address: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48'
                  symbol: usdc
                  name: USD Coin
                days: 2
                points:
                  - date: '2026-09-28'
                    generatedAt: '2026-09-28T03:31:48.876925Z'
                    top10Index: 0.0974
                    top10TopPct: 9.74
                    top10RawTopPct: null
                    top10Source: null
                    top10RiskBand: low
                    top30Index: 0.0974
                    holderCount: 8955027
                    methodologyVersion: 1
                  - date: '2026-09-29'
                    generatedAt: '2026-09-29T03:32:16.173899Z'
                    top10Index: 0.0972
                    top10TopPct: 9.72
                    top10RawTopPct: null
                    top10Source: null
                    top10RiskBand: low
                    top30Index: 0.0972
                    holderCount: 8956887
                    methodologyVersion: 1
                  - date: '2026-09-30'
                    generatedAt: '2026-09-30T04:15:49.754747Z'
                    top10Index: 0.1443
                    top10TopPct: 14.43
                    top10RawTopPct: null
                    top10Source: null
                    top10RiskBand: low
                    top30Index: 0.1714
                    holderCount: 8961918
                    methodologyVersion: 2
                meta:
                  snapshotsScanned: 3
                  pointsFound: 3
                  from: '2026-09-28'
                  to: '2026-09-30'
                  methodologyBreaks:
                    - '2026-09-30'
                  methodologyVersions:
                    - version: 1
                      from: '2026-03-31'
                    - version: 2
                      from: '2026-09-30'
        '400':
          description: Missing address or invalid chain/days value
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '402':
          $ref: '#/components/responses/X402PaymentRequired'
        '404':
          description: Token has no HCI history in the requested window
        '503':
          description: HCI history temporarily unavailable (upstream data or cache failure)
components:
  headers:
    XCreditToken:
      description: >-
        Opaque bearer token for a prepaid x402 CU balance. Send it as
        `x-credit-token` to spend that balance. If the balance is insufficient
        and a payment for its verified payer settles, the same token is topped
        up and returned; otherwise the paid call returns a new independent
        token.
      schema:
        type: string
    XCreditBalanceCu:
      description: CU remaining for the returned or presented credit token after this call.
      schema:
        type: integer
        minimum: 0
        example: 480
  responses:
    UnauthorizedError:
      description: Authorization information is missing or invalid
      content:
        application/json:
          example:
            message: Unauthorized
    X402PaymentRequired:
      description: >-
        Keyless x402 payment required. Returned for a keyless caller (gateway
        entry `x-webacy-entry: x402`) with no prepaid CU balance or insufficient
        CU on the presented credit token. Identified by the base64
        `PAYMENT-REQUIRED` response header; the body carries the x402 challenge
        (a USDC price on Base and a Stripe-minted deposit address). Pay it, then
        retry with the `PAYMENT-SIGNATURE` header to unlock the resource and
        receive a credit token. An authenticated api-key caller with a
        past_due/unpaid subscription may instead receive a different 402
        (`Subscription payment required`, plain JSON, no `PAYMENT-REQUIRED`
        header).
      headers:
        PAYMENT-REQUIRED:
          description: >-
            Base64-encoded x402 challenge (network, asset, amount, payTo,
            resource.url). The edge rollout supplies the canonical public
            request path through a valid gateway claim; missing or invalid
            claims safely fall back to the public origin plus an internal path
            identifier. resource.url is not yet suitable for publishing to a
            public x402 discovery catalog (Coinbase's Bazaar): route-specific
            declarations and live paid validation are still pending.
          schema:
            type: string
      content:
        application/json:
          example:
            x402Version: 1
            error: payment required
  securitySchemes:
    api_key:
      type: apiKey
      in: header
      name: x-api-key

````

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