x402 List API Recommender API

Rank the best x402 service(s) for a need (the public HTTP recommender)

Operations 1

GET /best Recommend the best x402 service(s) for a need #

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-recommender-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-recommender-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: x402 List Recommender 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: Recommender
  description: Rank the best x402 service(s) for a need (the public HTTP recommender)
paths:
  /best:
    get:
      operationId: getBestServices
      summary: Recommend the best x402 service(s) for a need
      description: Ranks the directory and returns the best x402 service(s) for a stated need, in one request (no paging). The ranking is the same two-stage relevance-then-quality scoring the MCP x402_find_best_service tool uses, run server-side. It is scored mostly on per-service reliability (live status, verification, uptime, response time), x402 compliance, and price (USD), filtered by category and network, with a SMALL (about 10%) weight on on-chain traction (settlement volume, transaction count, and unique buyers measured per service over its known payTo via recognized settlers, a conservative undercount). A deterministic danger flag removes a service from this surface entirely (its slug is listed in excluded_danger); a residual warning is penalized but kept. When a free-text q is given, each candidate is also scored on how well the query matches its AI-derived capability tags and summary plus its name/description/category (falling back to a plain substring match). The x402 compliance term is the share of deterministic conformance checks the service passes, capped at 0.6 (the floor of the C band) when at least one of its EVM routes is missing the EIP-712 domain parameters a standard x402 client needs in order to sign a payment. That cap is a statement about the payment envelope, not about the merit of the service, and it is what moved the scoring to generation 2. The generation served today is 3, which also gates the on-chain traction term on an absolute 30-day volume floor, discounts a payout concentrated on one buyer, and scores a service that publishes no payTo as zero instead of renormalizing around it. Scores produced under an earlier generation are not comparable with these; meta.ranking_version on every response says which one produced it. This endpoint is free and metered like every other GET on /api/v1/* (beyond the free daily quota it answers 402; see the metering note). Prices are decimal US dollars.
      tags:
      - Recommender
      parameters:
      - name: q
        in: query
        schema:
          type: string
        description: Free-text need description, matched against each service name/description/category plus its AI-derived capability tags and summary.
      - name: category
        in: query
        schema:
          type: string
          enum:
          - AI
          - Blockchain
          - Compute
          - Content
          - Data
          - Finance
          - Other
          - Verification
        description: Desired service category from the closed category set (case-insensitive). A value outside the set returns 400; omit for all.
      - name: network
        in: query
        schema:
          type: string
        description: Required network name or abbreviation, e.g. "Base" or "BSE". A value outside the known network set returns 400.
      - name: max_price_usd
        in: query
        schema:
          type: number
          minimum: 0
        description: Cap on min_price_usd in US dollars; a service priced cheaper or equal passes (a service with no known price is excluded).
      - name: require_verified
        in: query
        schema:
          type: boolean
          default: false
        description: 'If true, only FORTE-tier verified services are eligible (treno D3: a paid delivery-probe settled and delivered, drift-revocable; the payment-ready base tier is NOT included). A hard filter on the eligible pool, not a scoring input, so it does not change ranking_version. A value other than true/false returns 400.'
      - name: prefer
        in: query
        schema:
          type: string
          enum:
          - balanced
          - cheapest
          - fastest
          - most_reliable
          default: balanced
        description: Tie-breaking emphasis for the ranking weights. A value outside the enum returns 400.
      - name: limit
        in: query
        schema:
          type: integer
          default: 5
          minimum: 1
          maximum: 20
        description: How many ranked recommendations to return (clamped to 1-20).
      - name: include_facilitator_context
        in: query
        schema:
          type: boolean
          default: false
        description: If true, also return top facilitators by 7d settlement volume as separate ecosystem context (NOT per-service). A value other than true/false returns 400.
      responses:
        '200':
          description: Ranked recommendations plus the ranking basis and any danger-excluded slugs. meta.ranking_version pins the scoring generation.
          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/BestResult'
                  meta:
                    type: object
                    properties:
                      ranking_version:
                        type: integer
                        description: 'Scoring generation; bumps when the ranking math or its weights change. Currently 3: the compliance term carries the signability cap described above (generation 2) and the traction term carries an absolute volume floor with a single-buyer discount (generation 3). Pin it if you compare scores over time.'
                  provenance:
                    $ref: '#/components/schemas/Provenance'
              example:
                data:
                  recommendations:
                  - rank: 1
                    slug: weather-x402
                    name: Weather x402
                    category: Data
                    status: online
                    verified: true
                    payment_ready: true
                    uptime_24h: 100
                    avg_response_time_ms: 120
                    min_price_usd: 0.01
                    price_max_usd: 0.01
                    category_percentile_max: 10
                    distinct_price_count: 1
                    networks:
                    - BSE
                    endpoint_count: 2
                    compliance_grade: A
                    compliance_failed_checks: []
                    risk_level: clean
                    capability_tags:
                      value:
                      - weather
                      - forecast
                      confidence: 0.9
                      source: ai
                    traction_status: measured
                    volume_usd_30d: 42.5
                    unique_buyers_30d: 7
                    shared_payout: false
                    top_buyer_share_30d: 0.3
                    score: 0.82
                    relevance: 1
                    quality: 0.79
                    why: online, verified, 100% 24h uptime, 120ms, $0.01 min price, compliance A
                  ranking_basis: Two stages. (1) RELEVANCE ... (2) QUALITY ...
                  excluded_danger: []
                  facilitator_context: null
                meta:
                  ranking_version: 3
        '400':
          description: Invalid parameter (prefer, require_verified, include_facilitator_context, max_price_usd, category, or a network outside the known set)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '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
    FacilitatorContext:
      type: object
      description: 'Ecosystem facilitator context (NOT per-service): top facilitators by 7d settlement volume with a two-state verification flag.'
      properties:
        facilitator_id:
          type: string
        name:
          type: string
        volume_usd_7d:
          type: number
          description: decimal US dollars
        tx_count_7d:
          type: integer
        verification:
          type: string
          enum:
          - on-chain
          - listed
          description: '"on-chain" iff observed on-chain volume greater than zero, else "listed"'
    BestResult:
      type: object
      description: 'The GET /best data block: ranked recommendations plus the ranking basis, danger-excluded slugs, and optional facilitator context.'
      properties:
        recommendations:
          type: array
          items:
            $ref: '#/components/schemas/BestRecommendation'
        ranking_basis:
          type: string
          description: Plain-language description of how the ranking was produced (the two-stage relevance-then-quality blend).
        excluded_danger:
          type: array
          items:
            type: string
          description: Slugs removed from the recommendation set by a deterministic danger flag (blocklist or impersonation match only).
        facilitator_context:
          description: Top facilitators by 7d settlement volume when include_facilitator_context=true, otherwise null.
          oneOf:
          - type: array
            items:
              $ref: '#/components/schemas/FacilitatorContext'
          - type: 'null'
        note:
          type: string
          description: Present only when no service matched the given filters.
    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'
    BestRecommendation:
      type: object
      description: One ranked service recommendation from GET /best. All *_usd fields are decimal US dollars.
      properties:
        rank:
          type: integer
          description: 1-based position in the returned ranking
        slug:
          type: string
        name:
          type: string
        category:
          type: string
        status:
          type: string
          enum:
          - online
          - degraded
          - offline
          - unknown
        verified:
          type: boolean
          description: 'FORTE tier (treno D3): paid delivery-probe settled and delivered, drift-revocable, no time decay. The tier require_verified filters on.'
        payment_ready:
          type: boolean
          description: 'BASE tier (treno D3): answers a valid x402 challenge and is alive. The broad signal verified used to carry.'
        uptime_24h:
          type:
          - number
          - 'null'
        avg_response_time_ms:
          type:
          - integer
          - 'null'
        min_price_usd:
          type:
          - number
          - 'null'
          description: Entry (min) price in USD
        price_max_usd:
          type:
          - number
          - 'null'
          description: Highest tier price in USD; equals min_price_usd when flat
        category_percentile_max:
          type:
          - number
          - 'null'
        distinct_price_count:
          type:
          - integer
          - 'null'
          description: 1 = flat pricing, greater than 1 = tiered
        networks:
          type: array
          items:
            type: string
        endpoint_count:
          type: integer
        compliance_grade:
          type:
          - string
          - 'null'
          description: x402 conformance grade, capped at C when at least one EVM route is missing the EIP-712 domain parameters a standard x402 client needs in order to sign
        compliance_failed_checks:
          type:
          - array
          - 'null'
          items:
            type: string
          description: Ids of the conformance checks that failed; [] = all pass, null = none graded. eip712_domain_extra here means a standard x402 client cannot sign a payment for at least one route of this service
        risk_level:
          type:
          - string
          - 'null'
          enum:
          - clean
          - warning
          - danger
          - null
        capability_tags:
          type:
          - object
          - 'null'
          description: AI-derived capability tags marked {value, confidence, source:"ai"}, or null when the model could not ground them
          properties:
            value:
              type: array
              items:
                type: string
            confidence:
              type: number
              description: 0-1
            source:
              type: string
              enum:
              - ai
        traction_status:
          type:
          - string
          - 'null'
          enum:
          - measured
          - no-payto
          - unmeasured-network
          - unresponsive
          - null
        volume_usd_30d:
          type:
          - number
          - 'null'
          description: Conservative undercount; pro-quota on a shared payout
        unique_buyers_30d:
          type:
          - number
          - 'null'
        shared_payout:
          type:
          - boolean
          - 'null'
        top_buyer_share_30d:
          type:
          - number
          - 'null'
          description: 0-1 concentration of the single largest buyer; a published signal, NOT part of the score
        score:
          type: number
          description: Final blended score (0-1), rounded to 2 decimals
        relevance:
          type:
          - number
          - 'null'
          description: Relevance sub-score (0-1) when a free-text q was given, else null
        quality:
          type: number
          description: Measured quality sub-score (0-1)
        why:
          type: string
          description: Short human-readable rationale
    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