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.

OpenAPI Specification

apis-io-ratings-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: .io Search APIs Ratings API
  description: This is the technical API contract for the search API for the APIs.io search engine.
  version: 0.1.0
  contact:
    name: Kin Lane
    email: info@apievangelist.com
servers:
- url: https://search-api.apis.io
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'
        '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'
      responses:
        '200':
          description: Ranked ratings leaderboard.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RatingList'
        '400':
          $ref: '#/components/responses/BadRequest'
  /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'
        '400':
          $ref: '#/components/responses/BadRequest'
      security: []
  /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
        '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
components:
  schemas:
    Band:
      type: string
      description: Rating band derived from the composite score.
      enum:
      - exemplar
      - strong
      - developing
      - thin
      - minimal
      maxLength: 1024
    Rubric:
      type: object
      description: The rating rubric — bands, facet weights, and trend thresholds.
      properties:
        schema_version:
          type: string
          examples:
          - '0.3'
          maxLength: 1024
        bands:
          type: array
          items:
            type: object
            properties:
              label:
                $ref: '#/components/schemas/Band'
              min:
                type: number
                description: Inclusive lower bound of the composite range.
                maximum: 1000000000
              description:
                type: string
                maxLength: 20000
          maxItems: 1000
        facets:
          type: array
          items:
            type: object
            properties:
              name:
                $ref: '#/components/schemas/FacetName'
              label:
                type: string
                maxLength: 1024
              weight:
                type: number
                description: Share of the composite (the six weights sum to 1.0).
                maximum: 1000000000
              description:
                type: string
                maxLength: 20000
          maxItems: 1000
        trending:
          type: object
          properties:
            rising_threshold:
              type: number
              examples:
              - 5
              maximum: 1000000000
            falling_threshold:
              type: number
              examples:
              - -5
              maximum: 1000000000
    RatingList:
      type: object
      properties:
        meta:
          $ref: '#/components/schemas/Meta'
        data:
          type: array
          items:
            $ref: '#/components/schemas/RatingEntry'
          maxItems: 1000
      required:
      - meta
      - data
    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
        page:
          type: integer
          maximum: 1000000
        limit:
          type: integer
          maximum: 1000
        pages:
          type: integer
          description: Total number of pages.
          maximum: 1000000
        query:
          type: object
          additionalProperties: true
          description: The effective query parameters, echoed back.
      required:
      - total
      - page
      - limit
      - pages
    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
        provider_slug:
          type: string
          maxLength: 1024
        provider_name:
          type: string
          maxLength: 1024
        composite:
          type: number
          minimum: 0
          maximum: 100
        band:
          $ref: '#/components/schemas/Band'
        trend:
          $ref: '#/components/schemas/Trend'
        facets:
          $ref: '#/components/schemas/Facets'
      required:
      - provider_slug
      - composite
      - band
    Trend:
      type: string
      description: Week-over-week movement in composite score (±5 thresholds).
      enum:
      - rising
      - flat
      - falling
      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
        instance:
          type: string
          format: uri-reference
          description: A URI reference identifying the specific occurrence (typically the request path).
          maxLength: 2048
        parameter:
          type: string
          description: Extension member — the offending query/path parameter, when applicable.
          maxLength: 1024
      required:
      - type
      - title
      - status
      additionalProperties: true
    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'
        trend:
          $ref: '#/components/schemas/Trend'
        delta:
          type: number
          description: Composite change since the previous snapshot.
          examples:
          - 0.0
          maximum: 1000000000
        previous_composite:
          type: number
          minimum: 0
          maximum: 100
        scored_at:
          type: string
          format: date
          maxLength: 10
        schema_version:
          type: string
          examples:
          - '0.3'
          maxLength: 1024
        facets:
          $ref: '#/components/schemas/Facets'
      required:
      - composite
      - band
    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).
        contract_quality:
          type: number
          minimum: 0
          maximum: 100
          description: Contract Quality facet score (weight 0.25).
        governance:
          type: number
          minimum: 0
          maximum: 100
          description: Governance facet score (weight 0.12).
        operational_transparency:
          type: number
          minimum: 0
          maximum: 100
          description: Operational Transparency facet score (weight 0.13).
        developer_ergonomics:
          type: number
          minimum: 0
          maximum: 100
          description: Developer Ergonomics facet score (weight 0.20).
        commercial_clarity:
          type: number
          minimum: 0
          maximum: 100
          description: Commercial Clarity facet score (weight 0.20).
  parameters:
    TrendFilter:
      name: trend
      in: query
      description: Filter by trend marker.
      schema:
        $ref: '#/components/schemas/Trend'
    MinScore:
      name: min_score
      in: query
      description: Minimum composite score (0–100).
      schema:
        type: number
        minimum: 0
        maximum: 100
    MaxScore:
      name: max_score
      in: query
      description: Maximum composite score (0–100).
      schema:
        type: number
        minimum: 0
        maximum: 100
    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
    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
    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
    ProviderSlug:
      name: slug
      in: path
      required: true
      description: Provider slug (e.g. `twilio`).
      schema:
        type: string
        maxLength: 1024
    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
    FacetFilter:
      name: facet
      in: query
      description: Facet to apply `min_facet` against.
      schema:
        $ref: '#/components/schemas/FacetName'
    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
    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
  securitySchemes:
    api_key:
      type: apiKey
      name: x-api-key
      in: header