x402 List API Stats API

Aggregate statistics about the x402 ecosystem

Operations 1

GET /stats Aggregate ecosystem statistics #

Documentation

Specifications

Other Resources

🔗
LLMsTxt
https://x402-list.com/llms.txt
🔗
LLMsTxt
https://x402-list.com/llms-full.txt
🔗
DeveloperPortal
https://x402-list.com/api
🔗
LLMsTxt
https://raw.githubusercontent.com/api-evangelist/x402-list-api/refs/heads/main/llms/x402-list-api-llms.txt
🔗
ToolCrosswalk
https://raw.githubusercontent.com/api-evangelist/x402-list-api/refs/heads/main/mcp/x402-list-api-tool-crosswalk.yml
🔗
ErrorCatalog
https://raw.githubusercontent.com/api-evangelist/x402-list-api/refs/heads/main/errors/x402-list-api-problem-types.yml
🔗
Plans
https://raw.githubusercontent.com/api-evangelist/x402-list-api/refs/heads/main/plans/x402-list-api-plans-pricing.yml
🔗
Pricing
https://x402-list.com/api
🔗
Conventions
https://raw.githubusercontent.com/api-evangelist/x402-list-api/refs/heads/main/conventions/x402-list-api-conventions.yml
🔗
DataModel
https://raw.githubusercontent.com/api-evangelist/x402-list-api/refs/heads/main/data-model/x402-list-api-data-model.yml
🔗
Lifecycle
https://raw.githubusercontent.com/api-evangelist/x402-list-api/refs/heads/main/lifecycle/x402-list-api-lifecycle.yml
🔗
StatusPage
https://x402-list.com/status
🔗
ChangeLog
https://raw.githubusercontent.com/api-evangelist/x402-list-api/refs/heads/main/changelog/x402-list-api-changelog.yml
🔗
Conformance
https://raw.githubusercontent.com/api-evangelist/x402-list-api/refs/heads/main/conformance/x402-list-api-conformance.yml
🔗
SpectralRules
https://raw.githubusercontent.com/api-evangelist/x402-list-api/refs/heads/main/rules/x402-list-api-spectral.yaml

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/x402-list-api-stats-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

x402-list-api-stats-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: x402 List Stats API
  version: 1.0.0
  description: Public REST API for x402-list.com - the directory of all services using the x402 protocol (HTTP 402 Payment Required).
  contact:
    name: x402 List
    url: https://x402-list.com
    email: info@x402-list.com
  termsOfService: https://x402-list.com/terms
  license:
    name: MIT
  x-data-license: CC-BY-4.0
servers:
- url: https://x402-list.com/api/v1
  description: Production
tags:
- name: Stats
  description: Aggregate statistics about the x402 ecosystem
paths:
  /stats:
    get:
      operationId: getStats
      summary: Aggregate ecosystem statistics
      description: 'Returns aggregate statistics about the x402 ecosystem: total services, endpoints, networks, uptime averages, response time averages, checks per hour, and pricing aggregates (avg/min/max/median price in USD).'
      tags:
      - Stats
      responses:
        '200':
          description: Aggregate stats with pricing breakdown
          headers:
            X-Meter-Remaining:
              $ref: '#/components/headers/MeterRemaining'
            X-Meter-Reset:
              $ref: '#/components/headers/MeterReset'
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    $ref: '#/components/schemas/AggregateStats'
                  provenance:
                    $ref: '#/components/schemas/Provenance'
              example:
                data:
                  total_services: 522
                  total_endpoints: 3132
                  total_networks: 25
                  total_networks_note: mainnet networks only; networks[] includes testnets flagged by is_mainnet
                  avg_uptime_24h: 87.9
                  avg_uptime_7d: 89
                  avg_uptime_method: per-service mean of the latest daily uptime rollup
                  avg_response_time_ms: 552
                  checks_per_hour: 1740
                  pricing:
                    avg_price_usd: 0.47
                    min_price_usd: 0
                    max_price_usd: 50
                    median_price_usd: 0.01
                  networks:
                  - abbreviation: BSE
                    is_mainnet: true
                    service_count: 490
                    avg_uptime: 88.9
                  - abbreviation: SOL
                    is_mainnet: true
                    service_count: 198
                    avg_uptime: 94.4
                  traction:
                    unique_buyers_30d: 5535
                    volume_usd_30d: 237198.115758
                    settlement_count_30d: 8485593
                    measured_services: 372
                    measured_networks:
                    - BSE
                    - POL
                    - SOL
                    coverage_of_measured_flow_pct: 17.9
                    measured_flow_freshness:
                      oldest_cursor_age_seconds: 771
                      stale_sync_groups: 0
                      total_sync_groups: 49
                      stale_facilitators: 0
                      total_facilitators: 36
                    top_10_services_share_pct: 98.3
                    top_1_service_share_pct: 87.1
                    top_1_service_top_buyer_share_pct: 99.1
                    method: dedup on settlement identity (network,tx_hash,log_index); do not sum per-service figures; measured_networks are network abbreviations, the per-service traction block uses CAIP-2 ids; coverage_of_measured_flow_pct is the listed dedup volume as a share of the flow measurable by our tracked settlers (the facilitator daily volume we measure, not the whole ecosystem); top_10_services_share_pct is the top 10 services' share of the same 30d dedup volume; both are precomputed hourly and null until the first refresh
                    caveat: measured across listed services, a measured floor over 30d, not an ecosystem total; USDC via measured facilitators only
                  verified_count: 1
                  payment_ready_count: 470
                  listing_growth:
                    new_7d: 54
                    new_30d: 194
                  facilitator_volume_usd_30d: 1296984.27
                  facilitator_volume_note: Aggregate facilitator settlement volume over 30 days across measured facilitators; a superset of the listed-services flow, not de-duplicated on settlement identity.
        '402':
          $ref: '#/components/responses/MeteredPaymentRequired'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalError'
components:
  schemas:
    Provenance:
      type: object
      description: Data provenance and license block. Present once per response, top-level in the envelope alongside data (and meta where present), never per item. Declares the CC BY 4.0 data license and how to attribute this data.
      properties:
        license:
          type: string
          enum:
          - CC-BY-4.0
          description: SPDX identifier of the data license (Creative Commons Attribution 4.0 International).
        attribution_required:
          type: boolean
          description: Whether attribution is required when reusing this data (always true under CC BY 4.0).
        attribution:
          type: string
          description: Ready-to-use attribution string to display when reusing this data.
          example: 'Data: x402-list.com (CC BY 4.0)'
        cite_as:
          type: string
          format: uri
          description: 'Canonical URL to cite as the source of this specific resource: the human-readable page where one exists, otherwise the request URL without its query string.'
          example: https://x402-list.com/services/acme-generate
        source:
          type: string
          format: uri
          description: Canonical site origin behind the directory.
          example: https://x402-list.com
    AggregateStats:
      type: object
      description: Aggregate statistics about the x402 ecosystem
      properties:
        total_services:
          type: integer
        total_endpoints:
          type: integer
        total_networks:
          type: integer
          description: Count of distinct networks that carry current pricing on an active endpoint, recomputed live from the pricing rows. Networks the reference table classifies as testnet are excluded; a chain not yet in the reference table still counts. The networks[] array is built by an inner join on the reference table and omits chains absent from it, so networks[] can be SHORTER than this count (not longer) when live pricing spans chains the reference table has not yet catalogued.
        total_networks_note:
          type: string
          description: Human-readable reminder of the total_networks semantics served in-band with the response
        avg_uptime_24h:
          type: number
        avg_uptime_7d:
          type: number
        avg_uptime_method:
          type: string
          description: How per-network avg_uptime is computed. Identical to the method used by /networks.
        avg_response_time_ms:
          type: integer
        checks_per_hour:
          type: integer
        pricing:
          type: object
          properties:
            avg_price_usd:
              type: number
            min_price_usd:
              type: number
            max_price_usd:
              type: number
            median_price_usd:
              type: number
        networks:
          type: array
          items:
            type: object
            properties:
              abbreviation:
                type: string
              is_mainnet:
                type: boolean
              service_count:
                type: integer
              avg_uptime:
                type: number
        traction:
          type: object
          description: 'Measured on-chain traction aggregated across ALL listed services over the last 30 days. Computed directly over the raw settlements, deduplicated on settlement identity (network, tx_hash, log_index), and NEVER summed from the per-service assessment.traction figures (distinct buyers are not additive across services, and summing pro-quota volume would reintroduce shared-attribution rounding). USDC only, via measured facilitators: a measured floor across the listed directory, not an ecosystem total.'
          properties:
            unique_buyers_30d:
              type:
              - integer
              - 'null'
              description: Distinct on-chain buyer addresses across listed services over the trailing 30 days (deduplicated, not a sum of per-service buyer counts). null until the first hourly precompute commits the cache row, never a fake 0.
            volume_usd_30d:
              type:
              - number
              - 'null'
              description: USDC settlement volume across listed services over the trailing 30 days (USD; a measured floor, not summed from per-service figures). null until the first hourly precompute, never a fake 0.
            settlement_count_30d:
              type:
              - integer
              - 'null'
              description: 'Deduped settlement count across listed services over the trailing 30 days. Distinct from any per-service tx_count_30d: this is a count of deduped settlement legs, not a sum. null until the first hourly precompute, never a fake 0.'
            measured_services:
              type:
              - integer
              - 'null'
              description: Number of listed services with at least one attributed settlement in the window (walks the payTo mapping with the last_seen + 1 day grace). null until the first hourly precompute, never a fake 0.
            measured_networks:
              type: array
              items:
                type: string
              description: Network abbreviations settled on in the window (e.g. BSE, SOL). Abbreviations here, unlike the per-service traction block which uses CAIP-2 ids. Empty until the first hourly precompute.
            coverage_of_measured_flow_pct:
              type:
              - number
              - 'null'
              description: 'Coverage KPI: the listed dedup settlement volume (volume_usd_30d) as a percentage of the flow measurable by our tracked settlers over the same 30 days (the facilitator daily volume we measure, NOT the whole ecosystem, so it is a floor on our coverage of the flow we can see). Precomputed hourly; null until the first refresh (never a fake 0). The denominator is also declared in-band in method.'
            measured_flow_freshness:
              type:
              - object
              - 'null'
              description: 'How fresh the flow behind coverage_of_measured_flow_pct is (W2-13#3). Coverage says how much of the measurable flow we cover, not whether that flow is still being ingested: a settler-sync cursor frozen hours ago keeps serving a coverage figure that looks current. Measured at SYNC-GROUP grain (facilitator x network x token), which is the unit that actually freezes: a facilitator can sync Base every 15 minutes while its Solana groups have not completed in hours, and rolling that up by newest completion would report it as live. Always present as a key; null only when the freshness read itself failed at response time (the rest of the response still serves). An empty sync state is never null: it reads 0 of 0, never a fabricated freshness. Aggregate only, and it reports the same sync-state table, at the same grain and with the same 2-hour threshold, as the ingest block of GET /api/health, which is where the site-level liveness verdict lives.'
              properties:
                oldest_cursor_age_seconds:
                  type:
                  - integer
                  - 'null'
                  description: 'Age, in whole seconds at response time, of the most-behind sync GROUP''s last clean settler-sync completion (not the most-behind facilitator: a partly frozen facilitator is reported by its frozen group, never by its freshest one). null when no tracked group has ever completed a sync (an absence of measurement, never a fresh 0); such a group is counted in stale_sync_groups.'
                stale_sync_groups:
                  type: integer
                  description: 'Sync groups whose cursor is frozen past the staleness threshold (2 hours, well above the 15-minute sync cadence) or that never completed a sync. This is the size of the freeze: the settlement flow those groups carry is decaying, so a non-zero value means the coverage figure is computed over a partly stale window.'
                total_sync_groups:
                  type: integer
                  description: 'Settler-sync groups (facilitator x network x token) tracked at all: the denominator for stale_sync_groups.'
                stale_facilitators:
                  type: integer
                  description: 'Facilitators with AT LEAST ONE frozen sync group. Any-stale on purpose: a facilitator counts here as soon as part of its ingest is frozen, even while its other networks keep completing, because the flow it contributes is already partial. Read it next to stale_sync_groups: how many settlement paths are affected, against how much of the ingest.'
                total_facilitators:
                  type: integer
                  description: 'Facilitators carrying a settler-sync state row at all: the denominator for stale_facilitators.'
            top_10_services_share_pct:
              type:
              - number
              - 'null'
              description: 'Concentration disclosure: the share of the 30d dedup volume held by the top 10 services (ranked by volume via the payTo mapping). The numerator is the deduped settlements mapped to any top-10 service, never a sum of the per-service figures; the denominator is the same whole-window dedup total (volume_usd_30d). Precomputed hourly; null until the first refresh.'
            top_1_service_share_pct:
              type:
              - number
              - 'null'
              description: 'Concentration disclosure one level deeper than top_10: the share of the 30d dedup volume held by the SINGLE largest service (ranked by volume via the payTo mapping). By construction top_1 <= top_10. Same hourly precompute; null until the first refresh (never a fake 0).'
            top_1_service_top_buyer_share_pct:
              type:
              - number
              - 'null'
              description: 'One level deeper again: within that single largest service, the share of ITS 30d volume held by its own single largest buyer. Same hourly precompute; null until the first refresh (never a fake 0).'
            method:
              type: string
              description: 'How the aggregate is computed: dedup on settlement identity, never a sum of the per-service figures; also declares the coverage_of_measured_flow_pct denominator and the top_10_services_share_pct basis in-band'
            caveat:
              type: string
              description: 'In-band honesty note: a measured floor across listed services over 30d, not an ecosystem total; USDC via measured facilitators only'
        verified_count:
          type: integer
          description: 'Number of services in the FORTE verified tier (treno D3): a paid delivery-probe settled and delivered, drift-revocable. Same predicate as the ?verified=true list filter. Starts at 0 and grows only with real payments. SEMANTIC CHANGE: this used to count the broad "answers a valid 402 and is alive" set, which is now payment_ready_count.'
        payment_ready_count:
          type: integer
          description: 'Number of services in the BASE payment-ready tier (treno D3): answered a valid x402 challenge and alive within the decay window (a probe success within the last 7 days, or api-key exempt). Same predicate as the ?payment_ready=true list filter. The broad signal verified_count used to carry.'
        listing_growth:
          type: object
          description: 'TRENO A D9: how many services were first listed recently.'
          properties:
            new_7d:
              type: integer
              description: Services first listed in the last 7 days
            new_30d:
              type: integer
              description: Services first listed in the last 30 days
        facilitator_volume_usd_30d:
          type:
          - number
          - 'null'
          description: 'TRENO A D9: aggregate settlement volume (USD) over the trailing 30 days across measured (enabled) facilitators. A non-deduped SUPERSET of the listed-services flow (it is not restricted to listed payTo mappings), so it is not comparable one-to-one with the traction block. null (never a fabricated 0) until facilitator snapshots exist. See facilitator_volume_note.'
        facilitator_volume_note:
          type: string
          description: In-band note framing facilitator_volume_usd_30d as a non-deduped superset of the listed-services flow
    PaymentRequirements:
      type: object
      description: A single x402 payment option (one element of accepts[]).
      properties:
        scheme:
          type: string
          enum:
          - exact
        network:
          type: string
          description: CAIP-2 network id
          example: eip155:8453
        asset:
          type: string
          description: Token contract address
          example: '0x833589fcd6edb6e08f4c7c32d4f71b54bda02913'
        amount:
          type: string
          description: Atomic USDC (6 decimals) as a string; "500000" = $0.50
          example: '500000'
        payTo:
          type: string
          description: Receiving wallet address
        maxTimeoutSeconds:
          type: integer
          example: 300
        extra:
          type: object
          description: EIP-712 signing domain parameters
          properties:
            name:
              type: string
              example: USD Coin
            version:
              type: string
              example: '2'
    Error:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: integer
            message:
              type: string
    PaymentRequired:
      type: object
      description: x402 v2 PaymentRequired body returned on a 402 (also base64-encoded in the PAYMENT-REQUIRED response header).
      properties:
        x402Version:
          type: integer
          enum:
          - 2
        accepts:
          type: array
          items:
            $ref: '#/components/schemas/PaymentRequirements'
        resource:
          type: object
          description: The paid resource this 402 guards (echoed by the x402 server).
          properties:
            url:
              type: string
              example: https://x402-list.com/api/v1/submit
            description:
              type: string
              example: Resubmission fee after a rejected submission
            mimeType:
              type: string
              example: application/json
            serviceName:
              type: string
              example: x402 List
        error:
          type: string
          description: App-level error code, e.g. resubmission_fee_required
        message:
          type: string
          description: Human-readable explanation with a pointer to /api (body only; absent from the PAYMENT-REQUIRED header)
  headers:
    MeterRemaining:
      schema:
        type: integer
      description: Free metered GET requests left today for this IP (see the metering note in the API description).
    MeterReset:
      schema:
        type: integer
      description: 'Unix timestamp (seconds) at which this IP''s free daily metered-GET quota resets: the next 00:00 UTC. Same shape as X-RateLimit-Reset. Lets a caller behind a shared egress IP tell when the per-IP quota rolls over.'
  responses:
    RateLimited:
      description: Rate limit exceeded
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error:
              code: 429
              message: Too many requests. Please slow down.
    MeteredPaymentRequired:
      description: 'Metered: this IP is beyond the free daily quota (2,000 GET requests/day per IP on /api/v1/*). Each further request costs $0.01 USDC (x402) on Base. Pay accepts[0] with an x402-capable client and retry the same request with a PAYMENT-SIGNATURE header; the successful response then carries a PAYMENT-RESPONSE header. The PAYMENT-REQUIRED response header carries the same x402 PaymentRequired object base64-encoded, without the app-level message field (body only).'
      headers:
        PAYMENT-REQUIRED:
          schema:
            type: string
          description: base64 JSON of the x402 PaymentRequired object
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/PaymentRequired'
    InternalError:
      description: Internal server error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error:
              code: 500
              message: Internal server error