APIs.io Ratings API

The APIs.io API rating system — a 0–100 composite score, five bands, a trend marker, and six weighted facets measuring how complete, governed, and integration-ready each provider's public API surface is. Rubric v0.3.

Operations 8

GET /providers/{slug}/rating One provider's rating. #
GET /ratings Ranked ratings leaderboard. #
GET /ratings/rubric The rating rubric. #
GET /providers/{slug}/rating/history A provider's rating movement. #
GET /ratings/movers The biggest rating movers. #
GET /providers/{slug}/rating/facets One provider's score at facet depth (Pro). #
GET /providers/{slug}/agent-readiness Agent-readiness dimensions (Pro). #
GET /providers/{slug}/evidence How the score was established. #

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/apis-io-ratings-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 email required.

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

OpenAPI Specification

apis-io-ratings-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: APIs.io Ratings API
  description: |-
    The APIs.io API rating system — a 0–100 composite score, five bands, a trend marker, and six weighted facets measuring how complete, governed, and integration-ready each provider's public API surface is. Rubric v0.3.

    This is the Ratings surface of the [APIs.io API](https://apis.io/api/v1) — one of 17 contracts split from the full API by tag, each documented and governed on its own. See the APIs.json index for the whole set.
  version: 1.5.0
  contact:
    name: API Evangelist
    url: https://apis.io
  license:
    name: CC BY 4.0
    url: https://creativecommons.org/licenses/by/4.0/
servers:
  - url: https://apis.io/api/v1
    description: Production server.
tags:
  - name: Ratings
    description: The APIs.io API rating system — a 0–100 composite score, five bands, a trend marker, and six weighted facets measuring how complete, governed, and integration-ready each provider's public API surface is. Rubric v0.3.
paths:
  /providers/{slug}/rating:
    get:
      operationId: getProviderRating
      x-tier: pro
      x-mcp-tool: get_provider_rating
      security: []
      tags:
        - Ratings
      summary: One provider's rating.
      description: Returns the full rating breakdown for a single provider — composite, band, trend, delta, and all six facet scores.
      parameters:
        - $ref: "#/components/parameters/ProviderSlug"
      responses:
        "200":
          description: One provider's rating.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ProviderScore"
          headers:
            ratelimit-policy:
              $ref: "#/components/headers/RateLimitPolicy"
            x-ratelimit-tier:
              $ref: "#/components/headers/RateLimitTier"
            x-ratelimit-limit:
              $ref: "#/components/headers/RateLimitLimit"
            x-ratelimit-window:
              $ref: "#/components/headers/RateLimitWindow"
        "402":
          $ref: "#/components/responses/UpgradeRequired"
        "404":
          $ref: "#/components/responses/NotFound"
  /ratings:
    get:
      operationId: listRatings
      x-tier: pro
      x-mcp-tool: find_ratings
      security: []
      tags:
        - Ratings
      summary: Ranked ratings leaderboard.
      description: Providers ranked by composite score, highest first. Filter by band, score range, trend, or a facet threshold (`facet` + `min_facet`), and scope to providers or tags. Each entry carries rank, composite, band, trend, and the six facet scores.
      parameters:
        - $ref: "#/components/parameters/BandFilter"
        - $ref: "#/components/parameters/MinScore"
        - $ref: "#/components/parameters/MaxScore"
        - $ref: "#/components/parameters/TrendFilter"
        - $ref: "#/components/parameters/FacetFilter"
        - $ref: "#/components/parameters/MinFacet"
        - $ref: "#/components/parameters/Providers"
        - $ref: "#/components/parameters/Tags"
        - name: sort
          in: query
          description: Sort order (composite descending by default).
          schema:
            type: string
            enum:
              - composite
              - trend
              - name
            default: composite
            maxLength: 1024
        - $ref: "#/components/parameters/Page"
        - $ref: "#/components/parameters/Limit"
        - $ref: "#/components/parameters/Format"
      responses:
        "200":
          description: Ranked ratings leaderboard.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/RatingList"
          headers:
            ratelimit-policy:
              $ref: "#/components/headers/RateLimitPolicy"
            x-ratelimit-tier:
              $ref: "#/components/headers/RateLimitTier"
            x-ratelimit-limit:
              $ref: "#/components/headers/RateLimitLimit"
            x-ratelimit-window:
              $ref: "#/components/headers/RateLimitWindow"
        "400":
          $ref: "#/components/responses/BadRequest"
        "402":
          $ref: "#/components/responses/UpgradeRequired"
  /ratings/rubric:
    get:
      operationId: getRatingRubric
      tags:
        - Ratings
      summary: The rating rubric.
      description: Returns the versioned rubric behind every score — the five bands and their thresholds, the six facets and their weights, and the trend thresholds. Use it to interpret any `score` block.
      responses:
        "200":
          description: The rating rubric.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/Rubric"
          headers:
            ratelimit-policy:
              $ref: "#/components/headers/RateLimitPolicy"
            x-ratelimit-tier:
              $ref: "#/components/headers/RateLimitTier"
            x-ratelimit-limit:
              $ref: "#/components/headers/RateLimitLimit"
            x-ratelimit-window:
              $ref: "#/components/headers/RateLimitWindow"
        "400":
          $ref: "#/components/responses/BadRequest"
      security: []
      x-tier: free
      x-mcp-tool: get_rating_rubric
  /providers/{slug}/rating/history:
    get:
      operationId: getRatingHistory
      x-tier: pro
      x-mcp-tool: get_rating_history
      x-agent-skill: track-api-changes
      security: []
      tags:
        - Ratings
      summary: A provider's rating movement.
      description: Returns a provider's current score/band/trend and the implied previous-build point. apis.io stores the current score plus week-over-week movement, not a full time series.
      parameters:
        - $ref: "#/components/parameters/ProviderSlug"
      responses:
        "200":
          description: The provider's rating history.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
          headers:
            ratelimit-policy:
              $ref: "#/components/headers/RateLimitPolicy"
            x-ratelimit-tier:
              $ref: "#/components/headers/RateLimitTier"
            x-ratelimit-limit:
              $ref: "#/components/headers/RateLimitLimit"
            x-ratelimit-window:
              $ref: "#/components/headers/RateLimitWindow"
        "402":
          $ref: "#/components/responses/UpgradeRequired"
        "404":
          $ref: "#/components/responses/NotFound"
  /ratings/movers:
    get:
      operationId: findRatingMovers
      x-tier: pro
      x-mcp-tool: find_rating_movers
      x-agent-skill: track-api-changes
      security: []
      tags:
        - Ratings
      summary: The biggest rating movers.
      description: Returns the providers whose composite score moved most (up and down) versus the previous scoring build.
      parameters:
        - $ref: "#/components/parameters/Limit"
      responses:
        "200":
          description: Up and down movers.
          content:
            application/json:
              schema:
                type: object
                additionalProperties: true
          headers:
            ratelimit-policy:
              $ref: "#/components/headers/RateLimitPolicy"
            x-ratelimit-tier:
              $ref: "#/components/headers/RateLimitTier"
            x-ratelimit-limit:
              $ref: "#/components/headers/RateLimitLimit"
            x-ratelimit-window:
              $ref: "#/components/headers/RateLimitWindow"
        "402":
          $ref: "#/components/responses/UpgradeRequired"
  /providers/{slug}/rating/facets:
    get:
      operationId: getProviderFacets
      x-tier: pro
      x-mcp-tool: get_provider_facets
      security: []
      tags:
        - Ratings
      summary: One provider's score at facet depth (Pro).
      description: The facets the composite is built from, plus any regulatory regime that applies and how it was matched. The composite is one number; these are the parts a team can act on.
      parameters:
        - $ref: "#/components/parameters/ProviderSlug"
      responses:
        "200":
          description: One provider's score at facet depth (Pro).
          content:
            application/json:
              schema:
                type: object
          headers:
            ratelimit-policy:
              $ref: "#/components/headers/RateLimitPolicy"
            x-ratelimit-tier:
              $ref: "#/components/headers/RateLimitTier"
            x-ratelimit-limit:
              $ref: "#/components/headers/RateLimitLimit"
            x-ratelimit-window:
              $ref: "#/components/headers/RateLimitWindow"
        "402":
          $ref: "#/components/responses/UpgradeRequired"
        "404":
          $ref: "#/components/responses/NotFound"
  /providers/{slug}/agent-readiness:
    get:
      operationId: getProviderAgentReadiness
      x-tier: pro
      x-mcp-tool: get_agent_readiness
      security: []
      tags:
        - Ratings
      summary: Agent-readiness dimensions (Pro).
      description: The dimension-by-dimension agent readiness of one provider — spec presence, MCP server, auth clarity, idempotency, error semantics, rate-limit signal, well-known catalog, consent identity and the rest. A standalone score, not a slice of the composite.
      parameters:
        - $ref: "#/components/parameters/ProviderSlug"
      responses:
        "200":
          description: Agent-readiness dimensions (Pro).
          content:
            application/json:
              schema:
                type: object
          headers:
            ratelimit-policy:
              $ref: "#/components/headers/RateLimitPolicy"
            x-ratelimit-tier:
              $ref: "#/components/headers/RateLimitTier"
            x-ratelimit-limit:
              $ref: "#/components/headers/RateLimitLimit"
            x-ratelimit-window:
              $ref: "#/components/headers/RateLimitWindow"
        "402":
          $ref: "#/components/responses/UpgradeRequired"
        "404":
          $ref: "#/components/responses/NotFound"
  /providers/{slug}/evidence:
    get:
      operationId: getProviderEvidence
      x-tier: free
      x-mcp-tool: get_provider_evidence
      security: []
      tags:
        - Ratings
      summary: How the score was established.
      description: "Provenance for each part of a provider's score: first-party (they published it), verified (we fetched and confirmed it), or derived (we inferred it), plus contract coverage and callability. Free and deliberately ungated — the basis for a claim should never sit behind the claim. Call this before quoting or disputing a score."
      parameters:
        - $ref: "#/components/parameters/ProviderSlug"
      responses:
        "200":
          description: How the score was established.
          content:
            application/json:
              schema:
                type: object
          headers:
            ratelimit-policy:
              $ref: "#/components/headers/RateLimitPolicy"
            x-ratelimit-tier:
              $ref: "#/components/headers/RateLimitTier"
            x-ratelimit-limit:
              $ref: "#/components/headers/RateLimitLimit"
            x-ratelimit-window:
              $ref: "#/components/headers/RateLimitWindow"
        "404":
          $ref: "#/components/responses/NotFound"
components:
  schemas:
    Trend:
      type: string
      description: Week-over-week movement in composite score (±5 thresholds).
      enum:
        - rising
        - flat
        - falling
      maxLength: 1024
    Facets:
      type: object
      description: The six facet scores, each 0–100.
      properties:
        discoverability:
          type: number
          minimum: 0
          maximum: 100
          description: Discoverability facet score (weight 0.10).
          examples:
            - 59
        contract_quality:
          type: number
          minimum: 0
          maximum: 100
          description: Contract Quality facet score (weight 0.25).
          examples:
            - 82
        governance:
          type: number
          minimum: 0
          maximum: 100
          description: Governance facet score (weight 0.12).
          examples:
            - 48
        operational_transparency:
          type: number
          minimum: 0
          maximum: 100
          description: Operational Transparency facet score (weight 0.13).
          examples:
            - 66
        developer_ergonomics:
          type: number
          minimum: 0
          maximum: 100
          description: Developer Ergonomics facet score (weight 0.20).
          examples:
            - 64
        commercial_clarity:
          type: number
          minimum: 0
          maximum: 100
          description: Commercial Clarity facet score (weight 0.20).
          examples:
            - 71
    Band:
      type: string
      description: Rating band derived from the composite score.
      enum:
        - exemplar
        - strong
        - developing
        - thin
        - minimal
      maxLength: 1024
    FacetName:
      type: string
      description: One of the six rating facets.
      enum:
        - discoverability
        - contract_quality
        - governance
        - operational_transparency
        - developer_ergonomics
        - commercial_clarity
      maxLength: 1024
    Problem:
      type: object
      description: |
        A Problem Details object per [RFC 9457](https://www.rfc-editor.org/rfc/rfc9457).
        Served as `application/problem+json`. Extension members (e.g. `parameter`) may be
        added alongside the standard fields.
      properties:
        type:
          type: string
          format: uri
          default: about:blank
          description: A URI identifying the problem type; dereferences to human-readable docs.
          examples:
            - https://apis.io/problems/invalid-parameter
          maxLength: 2048
        title:
          type: string
          description: A short, human-readable summary of the problem type.
          examples:
            - Invalid parameter
          maxLength: 1024
        status:
          type: integer
          minimum: 100
          maximum: 599
          description: The HTTP status code, repeated for convenience.
          examples:
            - 400
        detail:
          type: string
          description: A human-readable explanation specific to this occurrence.
          maxLength: 20000
          examples:
            - "`match` must be one of: any, all."
        instance:
          type: string
          format: uri-reference
          description: A URI reference identifying the specific occurrence (typically the request path).
          maxLength: 2048
          examples:
            - /v1/search
        parameter:
          type: string
          description: Extension member — the offending query/path parameter, when applicable.
          maxLength: 1024
          examples:
            - match
      required:
        - type
        - title
        - status
      additionalProperties: true
    Rubric:
      type: object
      description: The rating rubric — bands, facet weights, and trend thresholds.
      properties:
        schema_version:
          type: string
          examples:
            - "0.3"
          maxLength: 1024
          description: Version of this rubric.
        bands:
          type: array
          items:
            type: object
            properties:
              label:
                $ref: "#/components/schemas/Band"
                description: The band's name.
              min:
                type: number
                description: Inclusive lower bound of the composite range.
                maximum: 1000000000
                examples:
                  - 80
              description:
                type: string
                maxLength: 20000
                description: What the band means.
                examples:
                  - Publishes a complete
          maxItems: 1000
          description: The bands a composite score falls into
        facets:
          type: array
          items:
            type: object
            properties:
              name:
                $ref: "#/components/schemas/FacetName"
                description: The facet's stable name.
              label:
                type: string
                maxLength: 1024
                description: Display name of the facet.
                examples:
                  - Contract quality
              weight:
                type: number
                description: Share of the composite (the six weights sum to 1.0).
                maximum: 1000000000
                examples:
                  - 0.25
              description:
                type: string
                maxLength: 20000
                description: What the facet measures.
                examples:
                  - Whether the contract is present
          maxItems: 1000
          description: The facets that compose a score
        trending:
          type: object
          properties:
            rising_threshold:
              type: number
              examples:
                - 5
              maximum: 1000000000
              description: Composite-score gain since the previous run at or above which a provider counts as rising.
            falling_threshold:
              type: number
              examples:
                - -5
              maximum: 1000000000
              description: Composite-score loss since the previous run at or below which a provider counts as falling.
          description: The thresholds that decide whether a score counts as rising or falling.
    RatingList:
      type: object
      properties:
        meta:
          $ref: "#/components/schemas/Meta"
          description: Pagination and echoed-query metadata for this page.
        data:
          type: array
          items:
            $ref: "#/components/schemas/RatingEntry"
          maxItems: 1000
          description: The rated providers on this page
      required:
        - meta
        - data
      description: A page of rated providers
    Meta:
      type: object
      description: Pagination and echoed-query metadata for collection responses.
      properties:
        total:
          type: integer
          description: Total matching items across all pages.
          maximum: 1000000
          examples:
            - 1039
        page:
          type: integer
          maximum: 1000000
          description: The 1-based page this response represents.
          examples:
            - 1
        limit:
          type: integer
          maximum: 1000
          description: Items requested per page.
          examples:
            - 25
        pages:
          type: integer
          description: Total number of pages.
          maximum: 1000000
          examples:
            - 42
        query:
          type: object
          additionalProperties: true
          description: The effective query parameters, echoed back.
      required:
        - total
        - page
        - limit
        - pages
    ProviderScore:
      type: object
      description: A provider's rating, rubric v0.3.
      properties:
        composite:
          type: number
          minimum: 0
          maximum: 100
          description: Weighted composite of the six facets.
          examples:
            - 66.3
        band:
          $ref: "#/components/schemas/Band"
          description: The band the composite score falls into.
        trend:
          $ref: "#/components/schemas/Trend"
          description: Which way the score has moved since the previous run.
        delta:
          type: number
          description: Composite change since the previous snapshot.
          examples:
            - 0
          maximum: 1000000000
        previous_composite:
          type: number
          minimum: 0
          maximum: 100
          description: The composite from the previous scoring run
          examples:
            - 66.3
        scored_at:
          type: string
          format: date
          maxLength: 10
          description: When this score was computed.
          examples:
            - 2026-08-27
        schema_version:
          type: string
          examples:
            - "0.3"
          maxLength: 1024
          description: Version of the scoring rubric this score was computed under.
        facets:
          $ref: "#/components/schemas/Facets"
          description: The facet scores that compose the composite.
      required:
        - composite
        - band
    RatingEntry:
      type: object
      description: A ranked provider in the ratings leaderboard.
      properties:
        rank:
          type: integer
          description: 1-based position in the filtered, score-sorted list.
          maximum: 2147483647
          examples:
            - 1
        provider_slug:
          type: string
          maxLength: 1024
          description: Slug of the rated company.
          examples:
            - twilio
        provider_name:
          type: string
          maxLength: 1024
          description: Display name of the rated company.
          examples:
            - Twilio
        composite:
          type: number
          minimum: 0
          maximum: 100
          description: The company's composite Kin Score.
          examples:
            - 66.3
        band:
          $ref: "#/components/schemas/Band"
          description: The band this composite score falls into.
        trend:
          $ref: "#/components/schemas/Trend"
          description: Which way this score has moved since the previous run.
        facets:
          $ref: "#/components/schemas/Facets"
          description: The facet scores that compose the composite.
      required:
        - provider_slug
        - composite
        - band
  parameters:
    Format:
      name: format
      in: query
      required: false
      description: Set to `csv` for a spreadsheet-ready response on row-shaped endpoints. Defaults to JSON.
      schema:
        type: string
        enum:
          - csv
    ProviderSlug:
      name: slug
      in: path
      required: true
      description: Provider slug (e.g. `twilio`).
      schema:
        type: string
        maxLength: 1024
    Limit:
      name: limit
      in: query
      description: Items per page.
      schema:
        type: integer
        minimum: 1
        maximum: 100
        default: 25
    Page:
      name: page
      in: query
      description: 1-based page number.
      schema:
        type: integer
        minimum: 1
        default: 1
        maximum: 1000000
    FacetFilter:
      name: facet
      in: query
      description: Facet to apply `min_facet` against.
      schema:
        $ref: "#/components/schemas/FacetName"
    BandFilter:
      name: band
      in: query
      description: Filter by one or more rating bands.
      style: form
      explode: false
      schema:
        type: array
        items:
          $ref: "#/components/schemas/Band"
        maxItems: 1000
    MinScore:
      name: min_score
      in: query
      description: Minimum composite score (0–100).
      schema:
        type: number
        minimum: 0
        maximum: 100
    Tags:
      name: tags
      in: query
      description: Comma-separated tags to filter by. Tag names are Title Case (e.g. Messaging); lowercase slugs (e.g. messaging) are also accepted.
      style: form
      explode: false
      example:
        - Messaging
        - Authentication
      schema:
        type: array
        items:
          type: string
          maxLength: 1024
        maxItems: 1000
    TrendFilter:
      name: trend
      in: query
      description: Filter by trend marker.
      schema:
        $ref: "#/components/schemas/Trend"
    MaxScore:
      name: max_score
      in: query
      description: Maximum composite score (0–100).
      schema:
        type: number
        minimum: 0
        maximum: 100
    Providers:
      name: providers
      in: query
      description: Comma-separated provider slugs to scope results to.
      style: form
      explode: false
      schema:
        type: array
        items:
          type: string
          maxLength: 1024
        maxItems: 1000
    MinFacet:
      name: min_facet
      in: query
      description: Minimum score (0–100) for the facet named by `facet`.
      schema:
        type: number
        minimum: 0
        maximum: 100
  responses:
    NotFound:
      description: Resource not found.
      content:
        application/problem+json:
          schema:
            $ref: "#/components/schemas/Problem"
          example:
            type: https://apis.io/problems/not-found
            title: Resource not found
            status: 404
            detail: No API found with aid `twilio:nope`.
            instance: /v1/apis/twilio:nope
      headers:
        ratelimit-policy:
          $ref: "#/components/headers/RateLimitPolicy"
        x-ratelimit-tier:
          $ref: "#/components/headers/RateLimitTier"
        x-ratelimit-limit:
          $ref: "#/components/headers/RateLimitLimit"
        x-ratelimit-window:
          $ref: "#/components/headers/RateLimitWindow"
    BadRequest:
      description: Malformed request (bad parameter value).
      content:
        application/problem+json:
          schema:
            $ref: "#/components/schemas/Problem"
          example:
            type: https://apis.io/problems/invalid-parameter
            title: Invalid parameter
            status: 400
            detail: "`match` must be one of: any, all."
            instance: /v1/search
            parameter: match
      headers:
        ratelimit-policy:
          $ref: "#/components/headers/RateLimitPolicy"
        x-ratelimit-tier:
          $ref: "#/components/headers/RateLimitTier"
        x-ratelimit-limit:
          $ref: "#/components/headers/RateLimitLimit"
        x-ratelimit-window:
          $ref: "#/components/headers/RateLimitWindow"
    UpgradeRequired:
      description: Payment Required — this operation needs a paid tier. Send a plan key in `X-API-Key`.
      content:
        application/problem+json:
          schema:
            $ref: "#/components/schemas/Problem"
          example:
            type: https://apis.io/problems/upgrade-required
            title: Upgrade required
            status: 402
            detail: This endpoint requires the Understanding or Influence plan.
            instance: /v1/ratings
      headers:
        ratelimit-policy:
          $ref: "#/components/headers/RateLimitPolicy"
        x-ratelimit-tier:
          $ref: "#/components/headers/RateLimitTier"
        x-ratelimit-limit:
          $ref: "#/components/headers/RateLimitLimit"
        x-ratelimit-window:
          $ref: "#/components/headers/RateLimitWindow"
  headers:
    RateLimitPolicy:
      description: The quota and burst policy applied to this key, in the RFC 9745 RateLimit-Policy form.
      schema:
        type: string
        maxLength: 1024
      example: "\"quota\";q=500;w=86400, \"burst\";q=5;w=1"
    RateLimitTier:
      description: The tier the call was served at. Keyless callers are served `free`.
      schema:
        type: string
        enum:
          - free
          - pro
          - business
      example: free
    RateLimitLimit:
      description: Requests allowed in the current quota window.
      schema:
        type: integer
        maximum: 1000000
      example: 500
    RateLimitWindow:
      description: Length of the quota window, in seconds.
      schema:
        type: integer
        maximum: 1000000
      example: 86400
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: X-API-Key
      description: Send a plan key to be served above the free tier. Keyless callers get the free tier; a call that needs a paid tier answers 402 rather than refusing the connection.