DocumentationTeams and players
Volleyball player API
GET/v1/players/{id}
One player: name, nationality, date of birth, height, weight, position and hand where known, every team they have played for, and their career competition by competition: matches, wins, points, kills, aces and blocks.
Parameters
This endpoint takes the parameters below.
| Name | Type | What it does | Example |
|---|---|---|---|
id | path | The player id, in the address. Required. | pl_3gy482nb |
Request
Send your key in the Authorization header as a Bearer token, or in X-API-Key. A key in the address is refused, so it never ends up in a log.
# One player, the teams they have played for and their career, competition by competition curl "https://api.volleyballapi.com/v1/players/pl_3gy482nb" \ -H "Authorization: Bearer $VBA_KEY"
$ch = curl_init('https://api.volleyballapi.com/v1/players/pl_3gy482nb'); curl_setopt_array($ch, [ CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('VBA_KEY')], CURLOPT_RETURNTRANSFER => true, ]); $res = json_decode(curl_exec($ch), true); print_r($res['data']);
import os, requests r = requests.get( "https://api.volleyballapi.com/v1/players/pl_3gy482nb", headers={"Authorization": f"Bearer {os.environ['VBA_KEY']}"}, ) print(r.json()["data"])
const res = await fetch("https://api.volleyballapi.com/v1/players/pl_3gy482nb", { headers: { "X-API-Key": process.env.VBA_KEY }, }); const { data, meta } = await res.json();
Response
Every answer is data plus meta. This is a real answer to the request above, counted 2026-10-12, with long lists cut short.
{
"data": {
"id": "pl_3gy482nb",
"name": "Nilsson Wilhelm",
"first_name": "Wilhelm",
"last_name": "Nilsson",
"gender": "men",
"federation": null,
"nationality": "SE",
"birth_date": "1994-02-17",
"birth_year": 1994,
"height_cm": null,
"weight_kg": null,
"spike_cm": null,
"block_cm": null,
"position": null,
"hand": null,
"teams": [
{
"id": "tm_jvsdmegn",
"name": "Linköpings VC",
"discipline": "indoor",
"gender": "men",
"kind": "club",
"federation": null,
"country_code": "SE"
},
{
"id": "tm_sccry270",
"name": "VBF RIG Falköping",
"discipline": "indoor",
"gender": "men",
"kind": "club",
"federation": null,
"country_code": "SE"
},
{
"id": "tm_wgy9pn7s",
"name": "Falkenberg",
"discipline": "indoor",
"gender": "men",
"kind": "club",
"federation": null,
"country_code": "SE"
}
],
"career": [
{
"season": 2019,
"discipline": "indoor",
"competition": { "id": "cp_9fv7dmv4", "name": "Elitserien Herrar" },
"team": { "id": "tm_jvsdmegn", "name": "Linköpings VC" },
"first_match": "2019-10-05",
"last_match": "2020-02-29",
"matches": 17,
"won": 8,
"points": 156,
"kills": 99,
"aces": 7,
"blocks": 50
},
{
"season": 2018,
"discipline": "indoor",
"competition": {
"id": "cp_58n9cck2",
"name": "SM-slutspel Herrar 2018/19 Slutspel Herrar 2018/19"
},
"team": { "id": "tm_jvsdmegn", "name": "Linköpings VC" },
"first_match": "2019-03-17",
"last_match": "2019-04-29",
"matches": 12,
"won": 9,
"points": 105,
"kills": 61,
"aces": 6,
"blocks": 38
},
{
"season": 2018,
"discipline": "indoor",
"competition": { "id": "cp_nfawjmzv", "name": "Play Off Herrar" },
"team": { "id": "tm_jvsdmegn", "name": "Linköpings VC" },
"first_match": "2019-02-16",
"last_match": "2019-03-09",
"matches": 4,
"won": 2,
"points": 28,
"kills": 15,
"aces": 1,
"blocks": 12
},
{
"season": 2018,
"discipline": "indoor",
"competition": { "id": "cp_w0q60rfc", "name": "Elitserien Herrar" },
"team": { "id": "tm_jvsdmegn", "name": "Linköpings VC" },
"first_match": "2018-09-29",
"last_match": "2019-02-03",
"matches": 17,
"won": 14,
"points": 156,
"kills": 99,
"aces": 5,
"blocks": 52
},
...
]
},
"meta": { "plan": "Complete" }
}Fields
| Field | Type | What it holds |
|---|---|---|
id | string | Stable player id, pl_ |
name, first_name, last_name | string | The player's names |
gender | enum | men or women |
federation | string | Three-letter federation code |
nationality | string | Two-letter country code |
birth_date | date | Date of birth |
birth_year | int | Year of birth, also where only the year is known |
height_cm, weight_kg | int | Height and weight |
spike_cm, block_cm | int | Spike and block reach |
position | string | setter, outside, middle, opposite, libero or universal |
hand | enum | left, right or both |
teams | array | Every team they have played for |
career | array | Newest first, one entry per competition and team: season, discipline, competition, team, first_match, last_match, matches, won, and points, kills, aces and blocks where the match sheets have them |
Errors
Errors come back as {"error": {"code", "message", "docs"}}, with plan and pricing added when a plan would answer. Every error.
| HTTP | Code | When |
|---|---|---|
| 401 | unauthorized | No key, or a key that is not known or was revoked |
| 404 | not_found | An id that does not exist |
| 422 | unknown_parameter | A parameter this endpoint does not take; the answer lists the ones it does |
| 429 | rate_limited | Too many calls this minute; Retry-After says when to try again |
| 429 | quota_exceeded | The day's or month's allowance is used; the answer says when it resets |
Try it
Fill in what you need; the request is built as you type. Paste your key to run it here, straight against the API.