Skill Rating API

Skill Rating API is a hosted REST API that turns a match log (who played, who won, optional timestamps) into skill ratings and a leaderboard using OpenSkill, Glicko-2 or Elo, and predicts the win probability of any matchup. It handles singles, doubles, teams, free-for-alls and draws, and it is stateless: nothing is stored, you keep the ratings and send them back with your next batch.

Get an API key

Quick start

Send your match log to POST /api/public/v1/rate. Each match lists its teams and who won; everything else is optional.

curl -X POST "https://skill-rating-api.p.rapidapi.com/rate" \
  -H "Content-Type: application/json" \
  -H "X-RapidAPI-Key: YOUR_KEY" -H "X-RapidAPI-Host: skill-rating-api.p.rapidapi.com" \
  -d '{"algorithm":"openskill","matches":[{"teams":[["ana"],["ben"]],"winner":0,"timestamp":"2026-10-01T18:00:00Z"},{"teams":[["cat"],["dan"]],"winner":1,"timestamp":"2026-10-01T18:30:00Z"},{"teams":[["ana","dan"],["ben","cat"]],"winner":0,"timestamp":"2026-10-02T19:00:00Z"},{"teams":[["ana"],["dan"]],"ranks":[0,0],"timestamp":"2026-10-03T18:00:00Z"},{"teams":[["ben"],["cat"]],"winner":0,"weight":0.5,"timestamp":"2026-10-03T18:45:00Z"},{"teams":[["ana"],["cat"]],"winner":0,"timestamp":"2026-10-04T18:00:00Z"}],"history":false}'

Response (the real output for the request above):

{
  "data": {
    "algorithm": "openskill",
    "params": {
      "mu": 25,
      "sigma": 8.333333333333334,
      "beta": 4.166666666666667,
      "tau": 0.08333333333333333,
      "idleTau": 0,
      "bias": 0,
      "kappa": 0.0001
    },
    "players": {
      "ana": {
        "mu": 30.5018,
        "sigma": 7.4836,
        "games": 4,
        "display": 8.0511
      },
      "ben": {
        "mu": 22.2753,
        "sigma": 7.8085,
        "games": 3,
        "display": -1.1501
      },
      "cat": {
        "mu": 18.2068,
        "sigma": 7.5946,
        "games": 4,
        "display": -4.5769
      },
      "dan": {
        "mu": 28.9659,
        "sigma": 7.684,
        "games": 3,
        "display": 5.9139
      }
    },
    "leaderboard": [
      {
        "rank": 1,
        "id": "ana",
        "display": 8.0511,
        "wins": 3,
        "losses": 0,
        "draws": 1
      },
      {
        "rank": 2,
        "id": "dan",
        "display": 5.9139,
        "wins": 2,
        "losses": 0,
        "draws": 1
      },
      {
        "rank": 3,
        "id": "ben",
        "display": -1.1501,
        "wins": 1,
        "losses": 2,
        "draws": 0
      },
      {
        "rank": 4,
        "id": "cat",
        "display": -4.5769,
        "wins": 0,
        "losses": 4,
        "draws": 0
      }
    ]
  }
}

Keep data.players and send it back as players with your next batch: rating in two calls gives exactly the same result as one call over the whole history.

Endpoints

MethodPathWhat it does
POST/api/public/v1/rateReplays a match log; returns ratings, a leaderboard and optional per-match history
POST/api/public/v1/predictWin probability per team and a 0–1 match-quality score for a hypothetical match
GET/api/public/v1/algorithmsAlgorithms, default parameters and allowed ranges

Parameters (POST /rate)

NameRequiredWhat it does
matchesyesList of matches, 1 to 5,000
matches[].teamsyes2 to 8 teams of 1 to 8 player ids, e.g. [["ana","ben"],["cat","dan"]]
matches[].winnernoIndex of the winning team (default 0)
matches[].ranksnoFinishing position per team, lower is better; equal ranks are a draw, e.g. [0,0]
matches[].weightno0.1 to 3; how much the match counts (default 1)
matches[].timestampnoISO 8601 or epoch ms; with one on every match, matches are replayed in time order
algorithmnoopenskill, glicko2, elo, custom (default openskill)
playersnoRatings from a previous response, keyed by player id (max 2,000)
paramsnoAlgorithm parameters, e.g. {"k": 24} for Elo
historynoInclude each match's expected win probability and rating changes (default true)

Limits: 5,000 matches, 2,000 players and 2 MB of JSON per request; 2 to 8 teams of 1 to 8 players per match. Full schema: openapi.json.

Algorithms

AlgorithmBest for
OpenSkill (Weng-Lin, default) (openskill)Bayesian μ/σ ratings built for teams, doubles and free-for-alls; the patent-free TrueSkill alternative
Glicko-2 (glicko2)Rating, deviation and volatility; the chess-style choice for 1v1 with uncertainty
Elo (elo)The classic single number with a K-factor; simplest to explain
Club Points (custom)Points-style rating with tunable margins and upset bonuses

Pricing

PlanPriceQuota
BASIC (RapidAPI)Free200 requests / month
PRO (RapidAPI)$12 / month10,000 requests / month
ULTRA (RapidAPI)$39 / month100,000 requests / month
Apify Actor$0.20 per 1,000 rated matchesPay per match, up to 5,000 matches per run

Every RapidAPI request can rate up to 5,000 matches.

How it compares

OptionHow it worksPrice
Skill Rating APIHosted REST API; OpenSkill, Glicko-2 and Elo; teams, draws and weights; rates a whole match log in one call; win-probability endpointFree 200 requests/month; $12 for 10,000; $39 for 100,000; Apify $0.20 per 1,000 matches
Oanor Elo Rating APIHosted REST API; Elo only; one 1v1 result per callFree 4,835 calls/month; $6 for 14,350; $26 for 194,500; $64 for 1,015,000
openskill (npm) / openskill.pyOpen-source library (MIT); you host it and store the ratingsFree; your own servers and code
glicko2 (npm)Open-source library (MIT); Glicko-2 for 1v1Free; your own servers and code
TrueSkill (trueskill / ts-trueskill)Open-source libraries (BSD / MIT); Microsoft permits the TrueSkill brand only for Xbox Live games or non-commercial projectsFree for non-commercial use

Competitor prices as listed on their own pages on 2026-10-24.

Frequently asked questions

Is there an API that calculates Elo or Glicko-2 ratings from a list of match results?

Yes. Skill Rating API takes your whole match log in one POST to /api/public/v1/rate (up to 5,000 matches) and returns every player's rating, games played and a ranked leaderboard. Set algorithm to elo, glicko2 or openskill.

How do I rate players in team games or doubles?

Use OpenSkill (the default). Each match lists its teams, e.g. [["ana","ben"],["cat","dan"]], and who won or each team's finishing position. Up to 8 teams of 8 players per match, so free-for-alls and battle royales work too.

What is a patent-free alternative to Microsoft TrueSkill?

OpenSkill (the Weng-Lin Bayesian rating method). It gives the same kind of μ and σ team ratings as TrueSkill, while Microsoft permits the TrueSkill brand only for Xbox Live games and non-commercial projects. Skill Rating API uses OpenSkill by default.

How do I build a matchmaking or leaderboard backend without storing ratings on a server?

Send the matches, keep the players object from the response, and send it back with the next batch. Rating in two calls gives exactly the same result as rating the whole history in one, so your own database holds the ratings and the API stores nothing.

How do I predict who will win a match from player ratings?

POST /api/public/v1/predict with the teams and the players' current ratings. It returns each team's win probability and a 0–1 match-quality score, which you can use to pick balanced pairings. Every rated match also returns the expected win probability before it was played.

Can I rank AI models or prompts from pairwise comparisons?

Yes. Treat each model as a player and each head-to-head judgement as a match (winner, or ranks [0,0] for a tie). Glicko-2 or OpenSkill also give an uncertainty (σ), so you can see which rankings are still unsettled.

Does it handle draws, match weights and the order matches were played?

Draws are equal ranks. A weight from 0.1 to 3 makes a match count less or more (friendlies at half weight, finals at double). Matches are replayed in the order sent, or by timestamp when every match has one.

How much does Skill Rating API cost?

RapidAPI: free for 200 requests a month, PRO $12/month for 10,000 requests, ULTRA $39/month for 100,000 requests; each request can rate up to 5,000 matches. Apify: pay per event, $0.20 per 1,000 rated matches.

Is my match data stored?

No. The API is stateless: no database, no disk, no logging of request bodies. Ratings exist only in the response you receive.

Free tools

Last updated 2026-10-24. Machine-readable summary: llms.txt.