rugbyAPI
Teams / Rankings

Rankings

Free

Ratings and ranks of the men's national sides, worked out by us from every Test since 1871 with World Rugby's published points-exchange method. Our own figures, not World Rugby's rankings.

GEThttps://api.rugbyapi.com/v1/rankings

Parameters

NameWhat it doesExample
as_ofdate, optionalThe table as it stood after the last Test on or before this date. Leave it out for the table now.2023-10-30

Any other parameter is refused with a 422 naming the ones this endpoint takes, so a typo never silently returns everything.

What each plan returns

Free key

The table now, and as it stood on any date from yesterday.

Archive

The table now, and as it stood on any date back to 1871.

Live

The table now, and as it stood on any date back to 1871.

Response fields

FieldMeaning
as_ofThe date the table stands at: after the last Test on or before it
methodHow the ratings are worked out, in words
data[].rank, ratingRank and rating; sides with ten Tests or more and one in the last four years are ranked
data[].teamTeam ID and name
data[].tests, last_testTests counted for the side, and its latest

Errors you can get

StatusCodeWhen
400key_in_addressThe key was put in the address. Send it in a header (see Authentication).
401missing_keyNo Authorization: Bearer header, or the key was rotated (invalid_key, revoked_key).
422bad_parameterA parameter is malformed, or unknown (unknown_parameter names the ones this endpoint takes).
429daily_limitToday's lookups are used. Resets at 00:00 UTC.

Every error has the same shape. All error codes

Try it live

Runs this call from your browser with your own key and shows what comes back.

Your key Get a free key
curl https://api.rugbyapi.com/v1/rankings \
  -H "Authorization: Bearer YOUR_KEY"
$ch = curl_init('https://api.rugbyapi.com/v1/rankings');
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer YOUR_KEY'],
    CURLOPT_RETURNTRANSFER => true,
]);
$data = json_decode(curl_exec($ch), true);
import requests

r = requests.get(
    "https://api.rugbyapi.com/v1/rankings",
    headers={"Authorization": "Bearer YOUR_KEY"},
)
data = r.json()
const r = await fetch('https://api.rugbyapi.com/v1/rankings', {
  headers: { Authorization: 'Bearer YOUR_KEY' }
});
const data = await r.json();
200ResponseExample from the live archive, lists cut to 3
{
  "as_of": "2026-09-19",
  "built_utc": "2026-10-21T07:05:01Z",
  "method": "Our own ratings from every men's Test we hold since 1871, with World Rugby's published points exchange: 3 for home ground, a gap of 10 at most, x1.5 when the margin is over 15, x2 at a World Cup. Not World Rugby's official rankings.",
  "count": 31,
  "data": [
    {
      "rank": 1,
      "team": {
        "id": "tm_2VD9AMP",
        "name": "South Africa"
      },
      "rating": 73.61,
      "tests": 517,
      "last_test": "2026-08-08"
    },
    {
      "rank": 2,
      "team": {
        "id": "tm_1ZPJ32N",
        "name": "New Zealand"
      },
      "rating": 72.16,
      "tests": 683,
      "last_test": "2026-07-18"
    },
    {
      "rank": 3,
      "team": {
        "id": "tm_34Y9069",
        "name": "Ireland"
      },
      "rating": 68.45,
      "tests": 793,
      "last_test": "2026-07-18"
    }
  ]
}