AimRank Analytics API

The Analytics API from AimRank — 14 operation(s) for analytics.

Operations 14

GET /api/v1/analytics/ranking/{ranking_id}/consensus Get Ranking Consensus #
GET /api/v1/analytics/rankings/{ranking_id}/bootstrap-ci Get Ranking Bootstrap Ci #
GET /api/v1/analytics/rankings/{ranking_id}/transitivity Get Ranking Transitivity #
GET /api/v1/analytics/rankings/{ranking_id}/agreement Get Ranking Agreement #
GET /api/v1/analytics/rankings/{ranking_id}/coverage Get Ranking Coverage #
GET /api/v1/analytics/rankings/{ranking_id}/ceiling Get Ceiling #
GET /api/v1/analytics/rankings/{ranking_id}/plackett-luce Get Plackett Luce #
GET /api/v1/analytics/rankings/{ranking_id}/crowd-bt Get Crowd Bt #
GET /api/v1/analytics/rankings/{ranking_id}/per-annotator-agreement Get Per Annotator Agreement #
GET /api/v1/analytics/domains Get Domain Statistics #
GET /api/v1/analytics/collective Get Collective Intelligence #
GET /api/v1/analytics/anomalies Get User Anomalies #
GET /api/v1/analytics/entity/{entity_id}/matchup-history Get Entity Matchup History #

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/aimrank-io:aimrank-io-analytics-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

aimrank-io-analytics-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: AimRank Analytics API
  description: Ranking-as-a-Service API — Turn binary comparisons into calibrated rankings with Glicko-2, Bradley-Terry, TrueSkill, and cross-domain transfer learning. Includes webhooks, API keys, RLHF exports, and embeddable widgets.
  version: 4.12.0
tags:
- name: Analytics
paths:
  /api/v1/analytics/ranking/{ranking_id}/trends:
    get:
      tags:
      - Analytics
      summary: Get Ranking Trends
      description: 'Get rating trends for top entities in a ranking.


        Shows how ratings have changed over time and identifies

        rising/falling entities.'
      operationId: get_ranking_trends_api_v1_analytics_ranking__ranking_id__trends_get
      parameters:
      - name: ranking_id
        in: path
        required: true
        schema:
          type: string
          title: Ranking Id
      - name: days
        in: query
        required: false
        schema:
          type: integer
          maximum: 90
          minimum: 7
          default: 30
          title: Days
      - name: limit
        in: query
        required: false
        schema:
          type: integer
          maximum: 50
          minimum: 1
          default: 10
          title: Limit
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/EntityTrend'
                title: Response Get Ranking Trends Api V1 Analytics Ranking  Ranking Id  Trends Get
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/analytics/ranking/{ranking_id}/consensus:
    get:
      tags:
      - Analytics
      summary: Get Ranking Consensus
      description: 'Get consensus metrics for a ranking.


        Shows how much users agree on rankings and identifies

        controversial matchups.'
      operationId: get_ranking_consensus_api_v1_analytics_ranking__ranking_id__consensus_get
      parameters:
      - name: ranking_id
        in: path
        required: true
        schema:
          type: string
          title: Ranking Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RankingConsensus'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/analytics/rankings/{ranking_id}/bootstrap-ci:
    get:
      tags:
      - Analytics
      summary: Get Ranking Bootstrap Ci
      description: 'Bradley-Terry ratings with bootstrap confidence intervals.


        LMSYS / Chatbot Arena reporting format: an L2-regularised BT fit over the

        ranking''s votes plus vote-level bootstrap percentile intervals. Votes are

        filtered the way the live rating filters them — a repeat by the same

        identity on the same pair never counts twice — and fraud-flagged votes are

        excluded; draws count as half a win each way. If the comparison graph is

        disconnected, ratings are only comparable within a component.


        This is an analytics endpoint; the leaderboard itself shows the ranking''s

        configured engine (Glicko-2 by default), not these numbers.'
      operationId: get_ranking_bootstrap_ci_api_v1_analytics_rankings__ranking_id__bootstrap_ci_get
      parameters:
      - name: ranking_id
        in: path
        required: true
        schema:
          type: string
          title: Ranking Id
      - name: n_bootstrap
        in: query
        required: false
        schema:
          type: integer
          maximum: 2000
          minimum: 50
          default: 200
          title: N Bootstrap
      - name: confidence
        in: query
        required: false
        schema:
          type: number
          maximum: 0.99
          minimum: 0.8
          default: 0.95
          title: Confidence
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/analytics/rankings/{ranking_id}/transitivity:
    get:
      tags:
      - Analytics
      summary: Get Ranking Transitivity
      description: 'Detect 3-cycles (transitivity violations) in the preference graph.


        A high cycle rate (>10%) signals noisy preferences or unclear criteria.

        RLHF training pipelines use this to decide whether to filter cycling

        triples or train a noise-tolerant reward model (e.g., cDPO).'
      operationId: get_ranking_transitivity_api_v1_analytics_rankings__ranking_id__transitivity_get
      parameters:
      - name: ranking_id
        in: path
        required: true
        schema:
          type: string
          title: Ranking Id
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/analytics/rankings/{ranking_id}/agreement:
    get:
      tags:
      - Analytics
      summary: Get Ranking Agreement
      description: 'Inter-annotator agreement metrics for a ranking.


        Returns Cohen''s κ (if exactly 2 voters), Fleiss'' κ (N voters),

        Krippendorff''s α (the preferred nominal-data IAA metric), and Scott''s π,

        plus a Landis-Koch interpretation bucket.


        Values of `None` mean the dataset has insufficient coverage (e.g., no

        matchup has received ≥ 2 votes) — which is honest rather than misleading.

        Used by AI-lab buyers who need to know whether our preference data is

        reliable before training a reward model on it.


        If the ranking has `min_raters_per_pair > 1`, pairs below that threshold

        are excluded from the IAA computation (and the response reports both

        pre- and post-filter coverage so buyers can see the cost of the cut).'
      operationId: get_ranking_agreement_api_v1_analytics_rankings__ranking_id__agreement_get
      parameters:
      - name: ranking_id
        in: path
        required: true
        schema:
          type: string
          title: Ranking Id
      - name: min_raters
        in: query
        required: false
        schema:
          anyOf:
          - type: integer
            minimum: 1
          - type: 'null'
          description: Override the ranking's min_raters_per_pair when computing IAA. Defaults to the ranking's configured value.
          title: Min Raters
        description: Override the ranking's min_raters_per_pair when computing IAA. Defaults to the ranking's configured value.
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/analytics/rankings/{ranking_id}/coverage:
    get:
      tags:
      - Analytics
      summary: Get Ranking Coverage
      description: 'Multi-rater coverage report.


        For every (entity_a, entity_b) pair, count distinct voters and report

        what fraction of pairs meet the `min_raters` threshold. AI-lab buyers

        use this to gate "is this dataset publication-quality?" — a κ of 0.7 on

        100 pairs each rated 3+ times is far more credible than 0.7 on 1000

        pairs each rated once.'
      operationId: get_ranking_coverage_api_v1_analytics_rankings__ranking_id__coverage_get
      parameters:
      - name: ranking_id
        in: path
        required: true
        schema:
          type: string
          title: Ranking Id
      - name: min_raters
        in: query
        required: false
        schema:
          type: integer
          maximum: 20
          minimum: 1
          default: 3
          title: Min Raters
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/analytics/rankings/{ranking_id}/ceiling:
    get:
      tags:
      - Analytics
      summary: Get Ceiling
      description: 'Pairwise-κ ceiling estimate from qualification attempts.


        The ceiling is the upper bound any judge / RM can credibly hit on

        this domain — no model can exceed human inter-rater agreement

        without overfitting noise. Compute by having SMEs jointly rate the

        qualification gold-standard items, then taking the mean of pairwise

        Cohen κ across all SME pairs that have at least

        `min_overlapping_items` jointly-rated items.


        Pilot SLA pattern: refund threshold = mean ceiling κ − 5pp.'
      operationId: get_ceiling_api_v1_analytics_rankings__ranking_id__ceiling_get
      parameters:
      - name: ranking_id
        in: path
        required: true
        schema:
          type: string
          title: Ranking Id
      - name: min_overlapping_items
        in: query
        required: false
        schema:
          type: integer
          maximum: 500
          minimum: 2
          default: 20
          title: Min Overlapping Items
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/analytics/rankings/{ranking_id}/plackett-luce:
    get:
      tags:
      - Analytics
      summary: Get Plackett Luce
      description: 'Plackett-Luce listwise ranking aggregation.


        Plackett (1975) / Luce (1959). Generalises Bradley-Terry from pairs

        to ranked lists of K items. For pairwise data this collapses to BT

        MLE; the value of PL surfaces when voters give top-K rankings

        (top-3 of 8, top-5 of 12, etc.) — common in IR + GRPO-style

        inference-time training.


        On AimRank''s pairwise vote data, this endpoint converts each

        (winner, loser) pair into a length-2 PL ranking and fits the

        listwise likelihood. For ranked-list inputs (top-K voting via

        session grouping), call ``services/plackett_luce.fit_plackett_luce``

        directly with explicit ranked lists.'
      operationId: get_plackett_luce_api_v1_analytics_rankings__ranking_id__plackett_luce_get
      parameters:
      - name: ranking_id
        in: path
        required: true
        schema:
          type: string
          title: Ranking Id
      - name: min_appearances_per_entity
        in: query
        required: false
        schema:
          type: integer
          maximum: 200
          minimum: 1
          default: 2
          title: Min Appearances Per Entity
      - name: max_iterations
        in: query
        required: false
        schema:
          type: integer
          maximum: 2000
          minimum: 10
          default: 300
          title: Max Iterations
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/analytics/rankings/{ranking_id}/crowd-bt:
    get:
      tags:
      - Analytics
      summary: Get Crowd Bt
      description: 'CrowdBT joint fit — entity scores + annotator reliability η.


        Chen et al. 2013, "Pairwise Ranking Aggregation in a Crowdsourced

        Setting." Each annotator k gets a learned reliability parameter

        η_k ∈ [0, 1] alongside the BT entity scores. Versus AimRank''s

        operational κ-weighting (Layer 4): same goal, fitted jointly via

        L-BFGS-B instead of computed post-hoc against majority consensus.


        Use this when:

        - You want a principled per-annotator quality signal (not threshold-

        based) for downstream κ-weighted DPO training

        - Your data has identifiable annotators with ≥ ``min_votes_per_annotator``

        votes each

        - Anti-correlated raters (η < 0.5) need to surface explicitly, not

        collapse into "noisy"


        Falls back to ``converged=false`` with a reason when data is too

        sparse — see ``services/crowd_bt.py`` for the failure modes.'
      operationId: get_crowd_bt_api_v1_analytics_rankings__ranking_id__crowd_bt_get
      parameters:
      - name: ranking_id
        in: path
        required: true
        schema:
          type: string
          title: Ranking Id
      - name: min_votes_per_annotator
        in: query
        required: false
        schema:
          type: integer
          maximum: 200
          minimum: 1
          default: 5
          title: Min Votes Per Annotator
      - name: min_votes_per_entity
        in: query
        required: false
        schema:
          type: integer
          maximum: 200
          minimum: 1
          default: 2
          title: Min Votes Per Entity
      - name: max_iterations
        in: query
        required: false
        schema:
          type: integer
          maximum: 2000
          minimum: 10
          default: 300
          title: Max Iterations
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/analytics/rankings/{ranking_id}/per-annotator-agreement:
    get:
      tags:
      - Analytics
      summary: Get Per Annotator Agreement
      description: 'Per-annotator κ vs the majority-vote consensus.


        Surfaces noisy / low-quality annotators so the ranking owner can drop

        them from RLHF exports. Owner-only — exposes per-voter quality which

        is sensitive. Returns annotators sorted worst-first (lowest κ).


        `min_pairs` excludes annotators with too few overlapping pairs to

        estimate κ stably (default 3).'
      operationId: get_per_annotator_agreement_api_v1_analytics_rankings__ranking_id__per_annotator_agreement_get
      parameters:
      - name: ranking_id
        in: path
        required: true
        schema:
          type: string
          title: Ranking Id
      - name: min_pairs
        in: query
        required: false
        schema:
          type: integer
          minimum: 1
          default: 3
          title: Min Pairs
      - name: limit
        in: query
        required: false
        schema:
          type: integer
          maximum: 1000
          minimum: 1
          default: 50
          title: Limit
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
  /api/v1/analytics/domains:
    get:
      tags:
      - Analytics
      summary: Get Domain Statistics
      description: 'Get statistics for all domains.


        Shows which domains have the most activity and accuracy.'
      operationId: get_domain_statistics_api_v1_analytics_domains_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/DomainStats'
                type: array
                title: Response Get Domain Statistics Api V1 Analytics Domains Get
  /api/v1/analytics/collective:
    get:
      tags:
      - Analytics
      summary: Get Collective Intelligence
      description: 'Get overall collective intelligence metrics for the platform.


        This is the main "health" view of the collective intelligence.'
      operationId: get_collective_intelligence_api_v1_analytics_collective_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CollectiveIntelligence'
  /api/v1/analytics/anomalies:
    get:
      tags:
      - Analytics
      summary: Get User Anomalies
      description: Get anomalies detected in the current user's rankings.
      operationId: get_user_anomalies_api_v1_analytics_anomalies_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
  /api/v1/analytics/entity/{entity_id}/matchup-history:
    get:
      tags:
      - Analytics
      summary: Get Entity Matchup History
      description: 'Get matchup history for an entity.


        Shows who the entity has been compared against and results.


        Gated by the visibility spine (404, never 403). It had no auth at all: an

        anonymous caller holding one entity id could walk every opponent of a

        PRIVATE ranking, names and outcomes included (2026-10-09).'
      operationId: get_entity_matchup_history_api_v1_analytics_entity__entity_id__matchup_history_get
      parameters:
      - name: entity_id
        in: path
        required: true
        schema:
          type: string
          title: Entity Id
      - name: limit
        in: query
        required: false
        schema:
          type: integer
          maximum: 100
          minimum: 1
          default: 20
          title: Limit
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
components:
  schemas:
    DomainStats:
      properties:
        domain:
          type: string
          title: Domain
        ranking_count:
          type: integer
          title: Ranking Count
        entity_count:
          type: integer
          title: Entity Count
        total_votes:
          type: integer
          title: Total Votes
        unique_voters:
          type: integer
          title: Unique Voters
        avg_votes_per_ranking:
          type: number
          title: Avg Votes Per Ranking
        avg_accuracy:
          type: number
          title: Avg Accuracy
      type: object
      required:
      - domain
      - ranking_count
      - entity_count
      - total_votes
      - unique_voters
      - avg_votes_per_ranking
      - avg_accuracy
      title: DomainStats
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    EntityTrend:
      properties:
        entity_id:
          type: string
          title: Entity Id
        entity_name:
          type: string
          title: Entity Name
        current_rating:
          type: number
          title: Current Rating
        rating_change_7d:
          type: number
          title: Rating Change 7D
        rating_change_30d:
          type: number
          title: Rating Change 30D
        vote_count_7d:
          type: integer
          title: Vote Count 7D
        trend:
          type: string
          title: Trend
        trend_points:
          items:
            $ref: '#/components/schemas/TrendPoint'
          type: array
          title: Trend Points
      type: object
      required:
      - entity_id
      - entity_name
      - current_rating
      - rating_change_7d
      - rating_change_30d
      - vote_count_7d
      - trend
      - trend_points
      title: EntityTrend
    RankingConsensus:
      properties:
        ranking_id:
          type: string
          title: Ranking Id
        ranking_name:
          type: string
          title: Ranking Name
        total_votes:
          type: integer
          title: Total Votes
        unique_voters:
          type: integer
          title: Unique Voters
        average_agreement:
          anyOf:
          - type: number
          - type: 'null'
          title: Average Agreement
        krippendorff_alpha:
          anyOf:
          - type: number
          - type: 'null'
          title: Krippendorff Alpha
        n_pairs_with_multiple_voters:
          type: integer
          title: N Pairs With Multiple Voters
          default: 0
        controversial_matchups:
          type: integer
          title: Controversial Matchups
        decisive_matchups:
          type: integer
          title: Decisive Matchups
      type: object
      required:
      - ranking_id
      - ranking_name
      - total_votes
      - unique_voters
      - average_agreement
      - controversial_matchups
      - decisive_matchups
      title: RankingConsensus
    TrendPoint:
      properties:
        date:
          type: string
          title: Date
        rating:
          type: number
          title: Rating
        vote_count:
          type: integer
          title: Vote Count
      type: object
      required:
      - date
      - rating
      - vote_count
      title: TrendPoint
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
            - type: string
            - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
        input:
          title: Input
        ctx:
          type: object
          title: Context
      type: object
      required:
      - loc
      - msg
      - type
      title: ValidationError
    CollectiveIntelligence:
      properties:
        total_rankings:
          type: integer
          title: Total Rankings
        total_entities:
          type: integer
          title: Total Entities
        total_votes:
          type: integer
          title: Total Votes
        total_voters:
          type: integer
          title: Total Voters
        avg_votes_per_voter:
          type: number
          title: Avg Votes Per Voter
        top_domains:
          items:
            additionalProperties: true
            type: object
          type: array
          title: Top Domains
        most_active_rankings:
          items:
            additionalProperties: true
            type: object
          type: array
          title: Most Active Rankings
        accuracy_distribution:
          additionalProperties:
            type: integer
          type: object
          title: Accuracy Distribution
      type: object
      required:
      - total_rankings
      - total_entities
      - total_votes
      - total_voters
      - avg_votes_per_voter
      - top_domains
      - most_active_rankings
      - accuracy_distribution
      title: CollectiveIntelligence
      description: Overall platform intelligence metrics.
  securitySchemes:
    APIKeyHeader:
      type: apiKey
      in: header
      name: X-API-Key