Rankings
FreeRatings 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.
Parameters
| Name | What it does | Example |
|---|---|---|
as_ofdate, optional | The 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
| Field | Meaning |
|---|---|
as_of | The date the table stands at: after the last Test on or before it |
method | How the ratings are worked out, in words |
data[].rank, rating | Rank and rating; sides with ten Tests or more and one in the last four years are ranked |
data[].team | Team ID and name |
data[].tests, last_test | Tests counted for the side, and its latest |
Errors you can get
| Status | Code | When |
|---|---|---|
400 | key_in_address | The key was put in the address. Send it in a header (see Authentication). |
401 | missing_key | No Authorization: Bearer header, or the key was rotated (invalid_key, revoked_key). |
422 | bad_parameter | A parameter is malformed, or unknown (unknown_parameter names the ones this endpoint takes). |
429 | daily_limit | Today'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.
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"
}
]
}