DocumentationStart here
Volleyball API quick start
Quick start
From nothing to real volleyball data in three steps. The free key needs no card.
1. Get a key
Sign in with Google at volleyballapi.com/signup. Your free key is made on the spot and shown once; it starts with vba_. It is kept in this browser too, so Try it on every page here already has it.
2. Make the first call
Yesterday's finished matches answer on every plan. Send the key in a header.
# Yesterday's results curl "https://api.volleyballapi.com/v1/results/yesterday?per_page=2" \ -H "Authorization: Bearer $VBA_KEY"
$q = http_build_query(['per_page' => '2']); $ch = curl_init('https://api.volleyballapi.com/v1/results/yesterday?' . $q); 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/results/yesterday", params={"per_page": "2"}, headers={"Authorization": f"Bearer {os.environ['VBA_KEY']}"}, ) print(r.json()["data"])
const res = await fetch("https://api.volleyballapi.com/v1/results/yesterday?per_page=2", { headers: { "X-API-Key": process.env.VBA_KEY }, }); const { data, meta } = await res.json();
3. Read the answer
data holds the matches, meta your plan, the count and the next cursor. Every match has an id that never changes, the score in sets and every set's points.
200 application/json
{
"data": [
{
"id": "mt_mg30j2hm",
"discipline": "indoor",
"gender": "women",
"status": "finished",
"current_set": null,
"date": "2026-11-11",
"time_local": "19:30",
"start_utc": "2026-11-11T00:00:00Z",
"utc_offset": null,
"timezone": null,
"competition": {
"id": "cp_ggbn0z8s",
"name": "NPVA Division #1 2026/27 League Series - Women",
"season": 2026
},
"round": null,
"pool": "Round Robin",
"team_a": { "id": "tm_nh6j7egw", "name": "Elite BALLERS" },
"team_b": { "id": "tm_1he8k05t", "name": "University of the Bahamas MINGOES" },
"score": { "a": 0, "b": 3 },
"winner": "b",
"sets": [
{ "set": 1, "a": 18, "b": 25, "duration_s": 1920 },
{ "set": 2, "a": 25, "b": 27, "duration_s": 1800 },
{ "set": 3, "a": 21, "b": 25, "duration_s": 1500 }
],
"sets_complete": true,
"duration_s": 5220,
"updated_utc": "2026-11-12T03:07:07Z"
},
{
"id": "mt_dq82ah5s",
"discipline": "indoor",
"gender": "women",
"status": "finished",
"current_set": null,
"date": "2026-11-11",
"time_local": "11:30",
"start_utc": "2026-11-11T06:30:00Z",
"utc_offset": "+05:00",
"timezone": "Asia/Almaty",
"competition": {
"id": "cp_krstt0k2",
"name": "Women's High League, I Round",
"season": 2026
},
"round": null,
"pool": null,
"team_a": { "id": "tm_hn4tpx3j", "name": "Zhayik" },
"team_b": { "id": "tm_pe7gwc22", "name": "Qostanay" },
"score": { "a": 3, "b": 0 },
"winner": "a",
"sets": [
{ "set": 1, "a": 25, "b": 16, "duration_s": null },
{ "set": 2, "a": 25, "b": 13, "duration_s": null },
{ "set": 3, "a": 25, "b": 17, "duration_s": null }
],
"sets_complete": true,
"duration_s": null,
"updated_utc": "2026-11-11T08:00:15Z"
}
],
"meta": {
"plan": "Complete",
"date": "2026-11-11",
"count": 2,
"next_cursor": "eyJvIjoyLCJwIjoyfQ",
"page": 1,
"per_page": 2,
"total": 99,
"total_pages": 50,
"next_page": 2,
"prev_page": null
}
}Then
Stuck on something?
Ask support