rugbyAPI
Players / Seasons

Seasons

Archive

Appearances, starts, tries, kicks, cards and points for each competition and season.

GEThttps://api.rugbyapi.com/v1/players/{id}/seasons

Parameters

NameWhat it doesExample
idpath, requiredThe ID in the path.pl_2TS991Z

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

Not included. Returns 403 with the upgrade link.

Archive

Included.

Live

Included.

Response fields

FieldMeaning
data[].competition, seasonID and name of each
data[].apps, starts, replacement_appsAppearances, and how many started or came off the bench
data[].tries, conversions, penalties, drop_goalsScoring
data[].yellow_cards, red_cardsCards
data[].pointsPoints scored

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).
403plan_requiredYour plan is below Archive.
404not_foundNo player with that ID (bad_id if it is not in our format).
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/players/pl_2TS991Z/seasons \
  -H "Authorization: Bearer YOUR_KEY"
$ch = curl_init('https://api.rugbyapi.com/v1/players/pl_2TS991Z/seasons');
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/players/pl_2TS991Z/seasons",
    headers={"Authorization": "Bearer YOUR_KEY"},
)
data = r.json()
const r = await fetch('https://api.rugbyapi.com/v1/players/pl_2TS991Z/seasons', {
  headers: { Authorization: 'Bearer YOUR_KEY' }
});
const data = await r.json();
200ResponseExample from the live archive, lists cut to 3
{
  "player": {
    "id": "pl_2TS991Z",
    "name": "Tom Bowen"
  },
  "count": 7,
  "data": [
    {
      "competition": {
        "id": "cp_0Z553MH",
        "name": "European Rugby Champions Cup"
      },
      "season": {
        "id": "ss_10H7V4D",
        "name": "2026-27"
      },
      "apps": 1,
      "starts": 1,
      "replacement_apps": 0,
      "tries": 0,
      "conversions": 0,
      "penalties": 0,
      "drop_goals": 0,
      "yellow_cards": 0,
      "red_cards": 0,
      "points": 0,
      "starts_counted_from": "matchday lineups"
    },
    {
      "competition": {
        "id": "cp_2EW9542",
        "name": "United Rugby Championship"
      },
      "season": {
        "id": "ss_1VSX6S8",
        "name": "2026-27"
      },
      "apps": 1,
      "starts": 2,
      "replacement_apps": 1,
      "tries": 0,
      "conversions": 0,
      "penalties": 0,
      "drop_goals": 0,
      "yellow_cards": 0,
      "red_cards": 0,
      "points": 0,
      "starts_counted_from": "matchday lineups"
    },
    {
      "competition": {
        "id": "cp_383QJ5X",
        "name": "Challenge Cup"
      },
      "season": {
        "id": "ss_1VC9AG2",
        "name": "2025-26"
      },
      "apps": 3,
      "starts": 3,
      "replacement_apps": 0,
      "tries": 2,
      "conversions": 0,
      "penalties": 0,
      "drop_goals": 0,
      "yellow_cards": 0,
      "red_cards": 0,
      "points": 10,
      "starts_counted_from": "matchday lineups"
    }
  ]
}