> ## 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 supply-flow detail for one token

> Case-insensitive symbol lookup. For symbols that collide across tokens, send `chain` + `address` (strongest) or `canonicalId` to pin a deterministic row, or `tokenType` as a soft disambiguator. Without a pin, the largest-supply token wins and, when the symbol matches more than one distinct token, the response carries `collision: true` plus a `candidates` list so callers can re-query pinned. Returns 404 when the symbol is absent from a resolved snapshot, or when `canonicalId` is supplied but no row matches that `{symbol, canonicalId}` pair. During partial outage (stale cache, known symbol) the response carries `stale: true`; during total outage (fallback cache also empty) returns 200 with `token: null, stale: true, degraded: true`, the same outage envelope as the list endpoint, so clients can distinguish a retryable outage from a permanent 404.



## OpenAPI

````yaml GET /rwa/supply/{symbol}
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/supply/{symbol}:
    get:
      tags:
        - RWA & Pegged Tokens
      summary: Get supply-flow detail for a single token by symbol
      description: >-
        Case-insensitive symbol lookup. For symbols that collide across tokens,
        send `chain` + `address` (strongest) or `canonicalId` to pin a
        deterministic row, or `tokenType` as a soft disambiguator. Without a
        pin, the largest-supply token wins and, when the symbol matches more
        than one distinct token, the response carries `collision: true` plus a
        `candidates` list so callers can re-query pinned. Returns 404 when the
        symbol is absent from a resolved snapshot, or when `canonicalId` is
        supplied but no row matches that `{symbol, canonicalId}` pair. During
        partial outage (stale cache, known symbol) the response carries `stale:
        true`; during total outage (fallback cache also empty) returns 200 with
        `token: null, stale: true, degraded: true`, the same outage envelope as
        the list endpoint, so clients can distinguish a retryable outage from a
        permanent 404.
      operationId: getSupplyToken
      parameters:
        - name: symbol
          in: path
          required: true
          schema:
            type: string
          description: Token symbol (case-insensitive, e.g. `USDT`)
        - name: canonicalId
          in: query
          required: false
          schema:
            type: string
          description: >-
            Canonical override — pins the response to the row with this
            canonical id. Use for stable URLs on long-tail symbols that may
            collide later.
        - name: tokenType
          in: query
          required: false
          schema:
            $ref: '#/components/schemas/SupplyTokenType'
          description: Soft disambiguator when `canonicalId` is not supplied
        - name: chain
          in: query
          required: false
          schema:
            type: string
          example: eth
          description: >-
            Chain of the exact contract to resolve (pair with `address`).
            Strongest disambiguator: send `chain` + `address` so a same-symbol,
            different-contract row is never returned.
        - name: address
          in: query
          required: false
          schema:
            type: string
          example: '0xdac17f958d2ee523a2206206994597c13d831ec7'
          description: >-
            Contract address of the exact deployment (pair with `chain`). When
            the feed does not track this contract separately, the response is `{
            token: null, address_unmatched: true }` (no flows) rather than
            another same-symbol contract's flows.
      responses:
        '200':
          headers:
            x-credit-token:
              $ref: '#/components/headers/XCreditToken'
            x-credit-balance-cu:
              $ref: '#/components/headers/XCreditBalanceCu'
          description: >-
            Supply-flow row for the resolved token plus envelope. During total
            outage `token` is null and `degraded` is true.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SupplyTokenResponse'
        '400':
          description: >-
            Invalid tokenType, an unknown chain, or an address supplied without
            its chain
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '402':
          $ref: '#/components/responses/X402PaymentRequired'
        '404':
          description: >-
            Symbol not found in supply dataset (or {symbol, canonicalId} pair
            mismatch)
        '503':
          $ref: '#/components/responses/X402ServiceUnavailable'
      security:
        - api_key: []
components:
  schemas:
    SupplyTokenType:
      type: string
      description: >-
        Backing mechanism derived by the pipeline from the upstream peg
        mechanism.
      enum:
        - fiat
        - crypto
        - synthetic
        - other
    SupplyTokenResponse:
      type: object
      required:
        - token
        - generated_at
        - stale
        - degraded
      properties:
        token:
          description: >-
            null when `degraded` is true (total outage, no snapshot to resolve
            the symbol against) or when `address_unmatched` is true.
          anyOf:
            - $ref: '#/components/schemas/SupplyItem'
            - type: object
              nullable: true
              enum:
                - null
        generated_at:
          type: string
          format: date-time
          nullable: true
        stale:
          type: boolean
          description: >-
            true when the snapshot is older than 25h or served from the fallback
            cache during an upstream data outage.
        degraded:
          type: boolean
          description: >-
            true only during a total supply-pipeline outage (stale snapshot AND
            zero tokens). When true, `token` is null — retry later rather than
            treating the response as a permanent miss. Same field on
            `SupplyListResponse`.
        address_unmatched:
          type: boolean
          description: >-
            Present and true when `chain` + `address` was supplied but the feed
            does not track that exact contract. `token` is null and no flows are
            attributed, instead of returning another same-symbol contract's
            flows. Distinct from an outage (`degraded`).
        collision:
          type: boolean
          description: >-
            Present and true when the symbol matches more than one distinct
            token and no pin (`canonicalId` or `chain` + `address`) was
            supplied. `token` still resolves to the largest-supply row, but
            callers should disambiguate via `candidates`.
        candidates:
          type: array
          items:
            $ref: '#/components/schemas/SupplyCandidate'
          description: All same-symbol candidate rows when `collision` is true.
    SupplyItem:
      type: object
      description: >-
        One row per tracked pegged token, aggregated across chains. Percent
        fields are emitted as fractions rather than 0-100 percentages; signed
        net-flow fields such as `net_24h_pct`, `net_7d_pct`, and `net_30d_pct`
        may be negative when burns/redemptions exceed mints. Nullable fields are
        always present on the wire; `null` means the underlying baseline/data is
        unavailable, not that the field itself is missing.
      required:
        - symbol
        - name
        - canonical_id
        - token_type
        - peg_type
        - supply
        - net_24h
        - net_7d
        - net_30d
        - net_90d
        - minted_24h
        - burned_24h
        - minted_7d
        - burned_7d
        - net_24h_pct
        - net_7d_pct
        - net_30d_pct
        - pressure_vs_30d
        - risk_score_as_of_generated_at
        - risk_tier_as_of_generated_at
        - has_bridged_data
        - total_native_supply
        - total_bridged_supply
        - bridged_fraction
        - organic_net_24h
        - bridge_flow_pct
        - chains
      properties:
        symbol:
          type: string
        name:
          type: string
        canonical_id:
          type: string
          description: >-
            Canonical pegged-token id — stable across pipeline runs. Supply to
            `/rwa/supply/{symbol}?canonicalId=<id>` to pin a deterministic row
            when a symbol collision exists.
        llama_id:
          type: string
          deprecated: true
          description: >-
            DEPRECATED — use `canonical_id`. Mirror of `canonical_id` retained
            for one release for back-compat; will be removed.
        token_type:
          $ref: '#/components/schemas/SupplyTokenType'
        peg_type:
          type: string
          description: Peg type (e.g. `peggedUSD`, `peggedEUR`).
        supply:
          type: number
          format: double
        net_24h:
          type: number
          format: double
        net_7d:
          type: number
          format: double
        net_30d:
          type: number
          format: double
        net_90d:
          type: number
          format: double
          nullable: true
        minted_24h:
          type: number
          format: double
        burned_24h:
          type: number
          format: double
        minted_7d:
          type: number
          format: double
        burned_7d:
          type: number
          format: double
        net_24h_pct:
          type: number
          format: double
          nullable: true
          description: 24h net flow as a fraction of t-1d supply.
        net_7d_pct:
          type: number
          format: double
          nullable: true
        net_30d_pct:
          type: number
          format: double
          nullable: true
        pressure_vs_30d:
          type: number
          format: double
          description: >-
            Today's 24h net flow vs the 30d daily baseline, as a fraction of
            current supply.
        risk_score_as_of_generated_at:
          type: integer
          nullable: true
          description: >-
            Risk score denormalized from the risk-monitor pipeline at the supply
            snapshot's generated_at. Not live — can lag /rwa/peg-canary by up to
            25h. null when the upstream snapshot had no entry for this token.
        risk_tier_as_of_generated_at:
          anyOf:
            - $ref: '#/components/schemas/SupplyRiskTier'
            - type: string
              nullable: true
              enum:
                - null
        has_bridged_data:
          type: boolean
        total_native_supply:
          type: number
          format: double
        total_bridged_supply:
          type: number
          format: double
        bridged_fraction:
          type: number
          format: double
          nullable: true
          description: >-
            Bridged supply as a fraction of total supply. null when
            `has_bridged_data` is false.
        organic_net_24h:
          type: number
          format: double
          nullable: true
        bridge_flow_pct:
          type: number
          format: double
          nullable: true
          description: >-
            Absolute bridge contribution to 24h net flow, as a fraction of
            |net_24h|. null when `has_bridged_data` is false or net_24h is zero.
        chains:
          type: object
          description: >-
            Per-chain supply breakdown keyed by internal Chain slug (e.g. `eth`,
            `arb`, `tron`). Upstream chain names are rewritten on read; chains
            without an internal Chain counterpart are dropped. `sum(chains)` may
            be less than `supply` when per-chain attribution is incomplete.
          additionalProperties:
            type: number
            format: double
    SupplyCandidate:
      type: object
      description: >-
        Compact identity row for a symbol-collision candidate: enough to
        re-query pinned by `canonicalId` or `chain` + `address`.
      required:
        - canonical_id
        - symbol
        - name
        - token_type
        - supply
        - addresses
      properties:
        canonical_id:
          type: string
        symbol:
          type: string
        name:
          type: string
        token_type:
          type: string
          nullable: true
        supply:
          type: number
        addresses:
          type: object
          additionalProperties:
            type: string
          description: Per-chain contract addresses (chain slug → address)
    SupplyRiskTier:
      type: string
      description: >-
        Risk tier denormalized from the risk-monitor pipeline at the supply
        snapshot's generated_at (not live).
      enum:
        - critical
        - warning
        - watch
        - ok
  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
    X402ServiceUnavailable:
      description: >-
        x402 paywall fails CLOSED: if payment configuration is incomplete or
        invalid, the x402 route unexpectedly has no payment requirement, or the
        facilitator, credit store, or settlement is unavailable, a gated keyless
        request returns 503 (`Payment service temporarily unavailable`) rather
        than serving the resource unpaid.
      content:
        application/json:
          example:
            message: Payment service temporarily unavailable
  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.