DocumentationStart here
Volleyball API pagination
Pagination
Every list answers 50 rows a page, up to 200 with per_page. Use page numbers when you want totals, or the cursor when you are pulling everything.
Pages
Send page (from 1) and per_page. The first call of a list counts its total, so meta carries the page you are on, the total and the pages either side.
200 application/json
{
"meta": {
"plan": "Archive",
"count": 200,
"next_cursor": "eyJvIjoyMDAsInAiOjIwMH0",
"page": 1,
"per_page": 200,
"total": 1312,
"total_pages": 7,
"next_page": 2,
"prev_page": null
}
}Cursor
Every list answer carries next_cursor, or null on the last page. Send it alone as cursor for the next page; it keeps your page size and skips the count, so it is the quicker way through a long range.
# A whole month, 200 matches a page curl "https://api.volleyballapi.com/v1/matches?from=2026-09-01&to=2026-09-30&per_page=200" \ -H "Authorization: Bearer $VBA_KEY"
$q = http_build_query(['from' => '2026-09-01', 'to' => '2026-09-30', 'per_page' => '200']); $ch = curl_init('https://api.volleyballapi.com/v1/matches?' . $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/matches", params={"from": "2026-09-01", "to": "2026-09-30", "per_page": "200"}, headers={"Authorization": f"Bearer {os.environ['VBA_KEY']}"}, ) print(r.json()["data"])
const res = await fetch("https://api.volleyballapi.com/v1/matches?from=2026-09-01&to=2026-09-30&per_page=200", { headers: { "X-API-Key": process.env.VBA_KEY }, }); const { data, meta } = await res.json();
Calls
Each page is one call, whatever its size, so per_page=200 is the cheapest way to pull a lot.