> ## 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 Stablecoin Risk Detail

> Stablecoin-only twin of `GET /v3/rwa/{address}`: identical response for a stablecoin; answers **404** when the token resolves to an RWA (`metadata.asset_type = rwa`) and names `GET /v3/rwa/{address}` as the route to use. The class is derived, not asserted: `stablecoin` means "pegged and not a classified RWA", so a token that is graded but not yet classified takes the stablecoin arm and answers **200**. Read `metadata.asset_class` to tell a confirmed fiat token (`fiat`) from a not-yet-classified one (`null`); classification coverage is still expanding, so that second set is shrinking over time.

Stablecoin-only twin of [`GET /v3/rwa/{address}`](/api-reference/rwa-v3/get-rwa-risk-detail). Identical response for a stablecoin.

<Warning>
  **Higher score = more risk.** `composite.score` and every `categories.*.score` run **0–100** (`A+` ≈ 0, `F` ≈ 100). See [Score Polarity](/api-reference/rwa-v3#score-polarity).
</Warning>

## Responses specific to this route

| Status | When |
| - | - |
| `404` | The token is not in the graded universe at all. |
| `404` | The token is graded but resolves to an RWA. The message names `GET /api/v3/rwa/{address}?chain=<chain>` as the route to use. |
| `503` | The classification could not be loaded, so membership cannot be proven. Retry, or use `GET /v3/rwa/{address}`, which serves both segments. |

Both return the same status with no distinguishing error code, so the two are only separable by the message text — which is **not** a stable contract. The safe rule: a `404` here does not imply the token is an RWA, and retrying an ungraded token against `/v3/rwa/{address}` will `404` as well.

The segment gate reads the same derived value the list and grades routes filter on, exposed as `metadata.segment` and mirrored on the legacy `metadata.asset_type`, so the three surfaces cannot disagree.

<Note>
  The class is derived, not asserted. A token that is graded but not yet classified takes the `stablecoin` arm and answers `200`. Read `metadata.asset_class` to separate a confirmed fiat token (`"fiat"`) from one carrying none (`null`) — either not classified yet, or classified as stable without a confirmed backing.
</Note>

`metadata.asset_type` carries the same value as `metadata.segment` and predates the split; prefer `segment` in new integrations.

<Note>
  Reclassification is not immediate here. Membership and the derived classification are both cached, so a freshly retagged token can keep returning its previous answer for a few minutes.
</Note>


## OpenAPI

````yaml GET /v3/stablecoins/{address}
openapi: 3.0.1
info:
  title: Risk Score API
  description: API definition for Webacy Risk Scores
  version: 1.9.0
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:
  /v3/stablecoins/{address}:
    get:
      tags:
        - Stablecoins v3
      summary: Get v3 stablecoin risk detail (Webacy-native)
      description: >-
        Stablecoin-only twin of `GET /v3/rwa/{address}`: identical response for
        a stablecoin; answers **404** when the token resolves to an RWA
        (`metadata.asset_type = rwa`) and names `GET /v3/rwa/{address}` as the
        route to use. The class is derived, not asserted: `stablecoin` means
        "pegged and not a classified RWA", so a token that is graded but not yet
        classified takes the stablecoin arm and answers **200**. Read
        `metadata.asset_class` to tell a confirmed fiat token (`fiat`) from a
        not-yet-classified one (`null`); classification coverage is still
        expanding, so that second set is shrinking over time.
      operationId: getStablecoinRiskDetailV3
      parameters:
        - name: address
          in: path
          required: true
          schema:
            type: string
          description: Token contract address.
        - name: chain
          in: query
          required: true
          schema:
            type: string
            enum:
              - eth
              - base
              - bsc
              - pol
              - opt
              - arb
              - avax
              - sol
              - stellar
              - hedera
              - tron
              - sui
              - ton
              - sei
              - btc
              - gnosis
          description: Chain identifier (e.g. eth, base, pol). Required.
        - name: grading_scheme
          in: query
          required: false
          schema:
            type: string
            enum:
              - v1
              - v2
              - peg
            default: v2
          description: >-
            Grading scheme to pin — selects the per-category weights and
            letter-grade band table. Default `v2` (alias of `v1`'s weights,
            standard 11-band grade scale). `peg` is the peg-loss-focused
            weighting. `v3`/`v4`/`peg-liquidity` are registered but withheld
            behind the `v3-grading-scheme` feature flag. Unknown values return
            400 with the supported list.
      responses:
        '200':
          headers:
            x-credit-token:
              $ref: '#/components/headers/XCreditToken'
            x-credit-balance-cu:
              $ref: '#/components/headers/XCreditBalanceCu'
          description: Webacy-native v3 RWA / stablecoin detail.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RwaV3Response'
              example:
                schema_version: '3.5'
                classification_available: true
                metadata:
                  address: '0x100faa513ac917181eb29f73b64bf7a434a206fe'
                  chain: base
                  symbol: usdb
                  name: USDBridge
                  asset_type: stablecoin
                  segment: stablecoin
                  asset_class: fiat
                  subclass: null
                  market_cap_usd: null
                composite:
                  grading_scheme: v1
                  grade: A-
                  stars: 5
                  score: 14.5
                  contributors:
                    smart_contract:
                      score: 41.5
                      weight: 0.2
                      weighted_contribution: 8.3
                    operational_governance:
                      score: 41.5
                      weight: 0.15
                      weighted_contribution: 6.2
                    asset_collateral:
                      score: 0
                      weight: 0.3
                      weighted_contribution: 0
                    market_liquidity:
                      score: 0
                      weight: 0.2
                      weighted_contribution: 0
                    counterparty:
                      score: 0
                      weight: 0
                      weighted_contribution: 0
                    hack_exploit_history:
                      score: 0
                      weight: 0.15
                      weighted_contribution: 0
                    chain_infrastructure:
                      score: 0
                      weight: 0
                      weighted_contribution: 0
                  upstream_risk: 12
                  clamped_by_upstream: false
                  score_source: framework
                  drivers_complete: true
                  drivers:
                    - category: smart_contract
                      category_name: Smart contract
                      score: 41.5
                      weight: 0.2
                      weighted_contribution: 8.3
                      criteria:
                        - key: audited
                          name: Has third-party audits
                          status: warn
                          evidence:
                            audit_count: 1
                            auditor_tier: mid
                        - key: mint_cap_present
                          name: Minting is capped
                          status: warn
                          evidence:
                            mint_cap_status: uncapped
                categories:
                  asset_collateral:
                    score: 0
                    criteria:
                      share_price_stable:
                        name: Not depegged
                        status: pass
                        data_quality:
                          confidence: 0.95
                          last_observed_at: '2026-06-02T09:49:36Z'
                          source: rwa-grade-pipeline
                      mint_burn_anomaly:
                        name: No mint/burn anomalies
                        status: pass
                        data_quality:
                          confidence: 0.95
                          last_observed_at: '2026-06-02T09:49:36Z'
                          source: rwa-grade-pipeline
                  smart_contract:
                    score: 41.5
                    criteria:
                      audited:
                        name: Has third-party audits
                        status: warn
                        data_quality:
                          confidence: 0.95
                          last_observed_at: '2026-06-02T09:49:36Z'
                          source: rwa-grade-pipeline
                      mint_cap_present:
                        name: Minting is capped
                        status: warn
                        data_quality:
                          confidence: 0.95
                          last_observed_at: '2026-06-02T09:49:36Z'
                          source: rwa-grade-pipeline
                coverage:
                  framework_version: v1
                  total_criteria: 12
                  live_criteria: 8
                  per_category:
                    smart_contract:
                      live: 2
                      total: 2
                    operational_governance:
                      live: 2
                      total: 4
                    asset_collateral:
                      live: 2
                      total: 3
                    market_liquidity:
                      live: 1
                      total: 2
                    counterparty:
                      live: 0
                      total: 0
                    hack_exploit_history:
                      live: 1
                      total: 1
                    chain_infrastructure:
                      live: 0
                      total: 0
                attributes:
                  market:
                    price_usd: 1
                    volume_24h_usd: 45000000
                  liquidity:
                    total_dex_liquidity_usd: 50000000
                    liquidity_depth_tier: deep
                  classification:
                    token_type: standard
                  issuer:
                    issuer: Example Labs
                    is_bridged: false
                    bridged_fraction: 0.04
                    reserve_attestation_provider: Deloitte
                    reserve_attestation_type: monthly_attestation
                    reserve_attestation_date: '2026-06-30'
                    reserve_attestation_lag_days: 10
                  audits:
                    audit_count: 5
                    auditor_tier: top
                    last_audit_date: '2026-02-15'
                    audit_firms:
                      - OpenZeppelin
                      - Trail of Bits
                  governance:
                    governance_tier: strong
                    owner_is_multisig: true
                    multisig_threshold: 4
                    multisig_signer_count: 8
                    owner_timelock_seconds: 86400
                    upgrade_admin_address: '0xC0ffee0000000000000000000000000000000002'
                    upgrade_admin_is_eoa: false
                    currently_paused: false
                    governance_alert: null
                    governance_alert_detail: null
                    mint_role_is_single_eoa: false
                    mint_role_alert: null
                    mint_authority: null
                    mint_activity_total_minted_30d: null
                    mint_activity_tx_count_30d: null
                    mint_activity_alert: null
                    upgrades_30d: 0
                    pause_events_90d: 0
                    ownership_changes_90d: 1
                    mint_role_grants_90d: 2
                    mint_role_revocations_90d: 0
                  hacks:
                    has_exploit_history: false
                    exploit_total_usd: null
                    hack_classification: null
                    hack_technique: null
                  sanctions:
                    sanctions_status: null
                    sanctions_designations: null
        '400':
          description: Invalid address, chain, or grading_scheme.
        '402':
          $ref: '#/components/responses/X402PaymentRequired'
        '403':
          description: Missing or invalid x-api-key.
        '404':
          description: Token not graded, or not a stablecoin (use GET /v3/rwa/{address})
        '503':
          $ref: '#/components/responses/ClassificationOrPaymentUnavailable'
      security:
        - api_key: []
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
  schemas:
    RwaV3Response:
      type: object
      description: >-
        Webacy-native v3 RWA / stablecoin detail. Same shape family as
        VaultV3Response, minus the `risk` pass-through (the v2 RWA grade has no
        risk envelope; the headline signal is `composite`, floored by
        `upstream_risk`).
      properties:
        schema_version:
          type: string
          example: '3.5'
        metadata:
          $ref: '#/components/schemas/RwaV3Metadata'
        composite:
          $ref: '#/components/schemas/V3Composite'
        categories:
          type: object
          additionalProperties:
            $ref: '#/components/schemas/V3Category'
        coverage:
          $ref: '#/components/schemas/V3Coverage'
        attributes:
          $ref: '#/components/schemas/RwaAttributes'
        classification_available:
          type: boolean
          description: >-
            false when the asset classification could not be loaded —
            `metadata.asset_type` falls back to `stablecoin` and `asset_class` /
            `subclass` are null. `GET /v3/stablecoins/{address}` fails closed
            (503) in that state.
      required:
        - schema_version
        - metadata
        - composite
        - categories
        - coverage
        - attributes
    RwaV3Metadata:
      type: object
      description: Structural fact sheet for an RWA / stablecoin — identities only.
      properties:
        address:
          type: string
        chain:
          type: string
        symbol:
          type: string
        name:
          type: string
          nullable: true
        asset_type:
          type: string
          enum:
            - stablecoin
            - rwa
        asset_class:
          type: string
          nullable: true
          example: fiat
          description: Asset class; null when unclassified.
        segment:
          type: string
          enum:
            - stablecoin
            - rwa
          description: >-
            The computed category the `segment` filter selects on, derived from
            `asset_class` / `is_rwa` (`rwa` = `is_rwa` true and not fiat,
            `stablecoin` = everything else). Returned so a client can see why a
            row matched without re-implementing the rule. It is a derived
            category, not a classification dimension value.
        subclass:
          type: string
          nullable: true
          example: tbill
          description: Asset subclass; null when none.
        market_cap_usd:
          type: number
          nullable: true
      required:
        - address
        - chain
        - symbol
        - name
        - asset_type
        - market_cap_usd
    V3Composite:
      type: object
      description: >-
        Headline grade block. POLARITY (load-bearing): `score` is 0–100, HIGHER
        = WORSE (A+ = 0, F = 100) — same direction as the v2 `risk.score` on the
        same response. `score = max(Σ contributors·weight, upstream_risk)`:
        floored from below by the upstream pipeline risk.
      properties:
        grading_scheme:
          type: string
          example: v1
        grade:
          type: string
          enum:
            - A+
            - A
            - A-
            - B+
            - B
            - B-
            - C
            - C-
            - D
            - E
            - F
        stars:
          type: integer
          minimum: 1
          maximum: 5
        score:
          type: number
          description: 0–100, higher = worse; rounded to one decimal.
        contributors:
          type: object
          description: 'Dense map: every WebacyCategory key is present.'
          additionalProperties:
            $ref: '#/components/schemas/V3Contributor'
        upstream_risk:
          type: number
          nullable: true
          description: >-
            Verbatim upstream pipeline risk (0–100, higher = worse). Acts as a
            lower bound on `score`. `null` when there is no upstream score
            (data-only vaults, e.g. Kamino on Solana awaiting native scoring) —
            in that case no upstream floor is applied. Guard against null before
            formatting.
        clamped_by_upstream:
          type: boolean
          description: >-
            true iff upstream_risk exceeded the framework composite and pulled
            `score` up.
        score_source:
          type: string
          enum:
            - framework
            - upstream
          description: >-
            What set the emitted `score`: `framework` when the v3 weighted
            composite won, `upstream` when the pipeline floor did (equivalent to
            `clamped_by_upstream`).
        drivers:
          type: array
          description: >-
            Ranked subcategory drivers of the grade (descending by
            `weighted_contribution`), each with the warn/fail criteria and
            evidence that drove it. Detail endpoints only (`GET
            /v3/vaults/{address}`, `GET /v3/rwa/{address}`); batch/list omit it.
            Read with `drivers_complete`: an empty `[]` is only a clean grade
            when `drivers_complete` is true.
          items:
            $ref: '#/components/schemas/V3CompositeDriver'
        drivers_complete:
          type: boolean
          description: >-
            Whether `drivers` is the complete explanation of the grade. `true`
            (framework-sourced) ⇒ `drivers` fully attribute it and `[]` means a
            genuinely clean grade. `false` (upstream-clamped) ⇒ `drivers`
            reflect only the framework sub-signal and can be empty even on a bad
            grade — render `upstream_risk`, not "no risk". Detail endpoints
            only, alongside `drivers`.
      required:
        - grading_scheme
        - grade
        - stars
        - score
        - contributors
        - upstream_risk
        - clamped_by_upstream
    V3Category:
      type: object
      description: >-
        A Webacy-native category. `score` is 0–100, HIGHER = WORSE
        (risk-magnitude; A+ = 0, F = 100). Categories with no live criteria emit
        `{ score: 0, criteria: {} }`.
      properties:
        score:
          type: number
          description: 0–100, higher = worse. Integer in practice.
        criteria:
          type: object
          additionalProperties:
            $ref: '#/components/schemas/V3Criterion'
      required:
        - score
        - criteria
    V3Coverage:
      type: object
      description: >-
        How many criteria are live today vs defined by the framework — so what
        the grade reflects is on the wire, not just in docs.
      properties:
        framework_version:
          type: string
          example: v1
        total_criteria:
          type: integer
        live_criteria:
          type: integer
        per_category:
          type: object
          additionalProperties:
            $ref: '#/components/schemas/V3CategoryCoverage'
      required:
        - framework_version
        - total_criteria
        - live_criteria
        - per_category
    RwaAttributes:
      type: object
      description: >-
        Curated, grouped passthrough of the RWA grade record's detail-only
        facts. Always present as a block; individual leaves are null when the
        underlying value is not available. The safety score/grade are
        intentionally excluded — `composite` remains the only grade.
      properties:
        market:
          type: object
          properties:
            price_usd:
              type: number
              nullable: true
              description: >-
                Live monitor price (the overlaid value whose timestamp is
                metadata.price_as_of), not the 6-hourly snapshot.
            volume_24h_usd:
              type: number
              nullable: true
          required:
            - price_usd
            - volume_24h_usd
        liquidity:
          type: object
          properties:
            total_dex_liquidity_usd:
              type: number
              nullable: true
            liquidity_depth_tier:
              type: string
              nullable: true
              enum:
                - deep
                - medium
                - shallow
                - very_low
                - null
          required:
            - total_dex_liquidity_usd
            - liquidity_depth_tier
        classification:
          type: object
          properties:
            token_type:
              type: string
              nullable: true
          required:
            - token_type
        issuer:
          type: object
          properties:
            issuer:
              type: string
              nullable: true
            is_bridged:
              type: boolean
              nullable: true
            bridged_fraction:
              type: number
              nullable: true
            reserve_attestation_provider:
              type: string
              nullable: true
            reserve_attestation_type:
              type: string
              nullable: true
            reserve_attestation_date:
              type: string
              nullable: true
            reserve_attestation_lag_days:
              type: number
              nullable: true
          required:
            - issuer
            - is_bridged
            - bridged_fraction
            - reserve_attestation_provider
            - reserve_attestation_type
            - reserve_attestation_date
            - reserve_attestation_lag_days
        audits:
          type: object
          properties:
            audit_count:
              type: number
              nullable: true
            auditor_tier:
              type: string
              nullable: true
              enum:
                - top
                - mid
                - low
                - basic
                - null
            last_audit_date:
              type: string
              nullable: true
            audit_firms:
              type: array
              nullable: true
              items:
                type: string
          required:
            - audit_count
            - auditor_tier
            - last_audit_date
            - audit_firms
        governance:
          type: object
          properties:
            governance_tier:
              type: string
              nullable: true
              enum:
                - strong
                - adequate
                - weak
                - critical
                - null
            owner_is_multisig:
              type: boolean
              nullable: true
            multisig_threshold:
              type: number
              nullable: true
            multisig_signer_count:
              type: number
              nullable: true
            owner_timelock_seconds:
              type: number
              nullable: true
            upgrade_admin_address:
              type: string
              nullable: true
            upgrade_admin_is_eoa:
              type: boolean
              nullable: true
            currently_paused:
              type: boolean
              nullable: true
            governance_alert:
              type: string
              nullable: true
              enum:
                - critical
                - warning
                - null
            governance_alert_detail:
              type: string
              nullable: true
            mint_role_is_single_eoa:
              type: boolean
              nullable: true
            mint_role_alert:
              type: string
              nullable: true
              enum:
                - critical
                - warning
                - null
            mint_authority:
              type: object
              nullable: true
              description: Structured mint-authority descriptor; shape omitted here.
            mint_activity_total_minted_30d:
              type: number
              nullable: true
            mint_activity_tx_count_30d:
              type: number
              nullable: true
            mint_activity_alert:
              type: string
              nullable: true
              enum:
                - critical
                - warning
                - null
            upgrades_30d:
              type: number
              nullable: true
            pause_events_90d:
              type: number
              nullable: true
            ownership_changes_90d:
              type: number
              nullable: true
            mint_role_grants_90d:
              type: number
              nullable: true
            mint_role_revocations_90d:
              type: number
              nullable: true
          required:
            - governance_tier
            - owner_is_multisig
            - multisig_threshold
            - multisig_signer_count
            - owner_timelock_seconds
            - upgrade_admin_address
            - upgrade_admin_is_eoa
            - currently_paused
            - governance_alert
            - governance_alert_detail
            - mint_role_is_single_eoa
            - mint_role_alert
            - mint_authority
            - mint_activity_total_minted_30d
            - mint_activity_tx_count_30d
            - mint_activity_alert
            - upgrades_30d
            - pause_events_90d
            - ownership_changes_90d
            - mint_role_grants_90d
            - mint_role_revocations_90d
        hacks:
          type: object
          properties:
            has_exploit_history:
              type: boolean
              nullable: true
            exploit_total_usd:
              type: number
              nullable: true
            hack_classification:
              type: string
              nullable: true
            hack_technique:
              type: string
              nullable: true
          required:
            - has_exploit_history
            - exploit_total_usd
            - hack_classification
            - hack_technique
        sanctions:
          type: object
          properties:
            sanctions_status:
              type: string
              nullable: true
              enum:
                - none
                - proposed
                - designated
                - null
            sanctions_designations:
              type: array
              nullable: true
              items:
                type: object
          required:
            - sanctions_status
            - sanctions_designations
      required:
        - market
        - liquidity
        - classification
        - issuer
        - audits
        - governance
        - hacks
        - sanctions
    V3Contributor:
      type: object
      description: >-
        One row of `composite.contributors`: a category's resolved score and its
        weight under the current grading scheme.
      properties:
        score:
          type: number
          description: 0–100, higher = worse. Integer.
        weight:
          type: number
          description: >-
            Category weight under the grading scheme (sums to 1 across
            categories).
        weighted_contribution:
          type: number
          description: >-
            Points this category adds to the framework composite — `score ×
            weight`, rounded to one decimal. The rounded sum across contributors
            approximates the framework composite (each contribution is rounded
            independently).
      required:
        - score
        - weight
    V3CompositeDriver:
      type: object
      description: >-
        One ranked subcategory driver of the grade (descending by
        `weighted_contribution`), with the warn/fail criteria that drove it.
        NOTE: for RWA, `criteria` are descriptive context, not a numeric
        decomposition of `score` (RWA category scores come from inverted v2
        pillars, not criterion penalties).
      properties:
        category:
          type: string
          example: market_liquidity
        category_name:
          type: string
          example: Market & liquidity
        score:
          type: number
        weight:
          type: number
        weighted_contribution:
          type: number
        criteria:
          type: array
          items:
            $ref: '#/components/schemas/V3DriverCriterion'
      required:
        - category
        - category_name
        - score
        - weight
        - weighted_contribution
        - criteria
    V3Criterion:
      type: object
      description: >-
        One graded criterion: pass/warn/fail verdict, human-readable label,
        provenance, and the underlying values behind the verdict.
      properties:
        name:
          type: string
          description: >-
            Human-readable criterion label, mirrored from the framework
            taxonomy.
          example: Large-holder concentration bounded
        status:
          type: string
          enum:
            - pass
            - warn
            - fail
        data_quality:
          $ref: '#/components/schemas/V3DataQuality'
        evidence:
          type: object
          description: >-
            Underlying values behind the verdict — the actual risk numbers (e.g.
            `{ hci_10: 0.34 }`, `{ looping_rate: 0.82 }`, `{ audit_count: 1,
            auditor_tier: "mid" }`). For tag-driven vault criteria with no
            numeric field, a non-pass verdict carries `{ triggered_by_tag: <tag>
            }`. Omitted when no value is available.
          additionalProperties: true
          example:
            hci_10: 0.34
      required:
        - status
        - data_quality
    V3CategoryCoverage:
      type: object
      properties:
        live:
          type: integer
        total:
          type: integer
      required:
        - live
        - total
    V3DriverCriterion:
      type: object
      description: >-
        One non-pass criterion inside a composite driver — the specific
        warn/fail check that pulled a subcategory's score up, with the evidence
        behind it.
      properties:
        key:
          type: string
          example: large_holder_concentration
        name:
          type: string
          example: Large-holder concentration bounded
        status:
          type: string
          enum:
            - warn
            - fail
        evidence:
          type: object
          description: Underlying values behind the verdict, when available.
          additionalProperties: true
          example:
            hci_10: 0.34
      required:
        - key
        - name
        - status
    V3DataQuality:
      type: object
      description: >-
        Provenance envelope on every emitted v3 criterion. Vault criteria
        currently report vault-level freshness uniformly; RWA / stablecoin
        criteria report true per-source values.
      properties:
        confidence:
          type: number
          description: 0–1 confidence in the underlying data point.
          example: 0.95
        last_observed_at:
          type: string
          format: date-time
          description: Upstream observation timestamp.
        source:
          type: string
          example: rwa-grade-pipeline
      required:
        - confidence
        - last_observed_at
        - source
  responses:
    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
    ClassificationOrPaymentUnavailable:
      description: >-
        Fails CLOSED for one of two causes.


        **Asset classification unavailable** — the asset classification could
        not be loaded while an asset-class filter was in force (an explicit
        `segment`, or `/v3/stablecoins/grades` and `/v3/stablecoins/{address}`,
        which pin one). NOTE: the `/v3/stablecoins` LIST route is NOT in this
        set — it is served from a cached token set, so a classification outage
        yields a stale or empty list with 200, never a 503. The request fails
        rather than return an unfiltered superset presented as the filtered
        answer. Retry, or call the `/v3/rwa` equivalent without `segment` to get
        unstamped rows with `classification_available: false`.


        **x402 payment service unavailable** — 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 rather than serving the
        resource unpaid.


        The `message` field distinguishes them.
      content:
        application/json:
          examples:
            assetClassificationUnavailable:
              summary: Asset classification unavailable
              value:
                message: >-
                  segment=rwa cannot be applied: the asset classification is
                  temporarily unavailable
            paymentServiceUnavailable:
              summary: x402 payment service unavailable
              value:
                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.