Volleyball API
DocumentationLiveCoveragePricingMCPStatusSign inGet a free key

DocumentationCompetitions

Volleyball competitions API

GET/v1/competitions

Competitions newest first, from world championships and tours to national leagues and cups, filtered by discipline, gender, season or a word in the name.

PlansFree keyLiveArchiveComplete
Base URLhttps://api.volleyballapi.com
Rows a page50, up to 200

Parameters

All optional.

NameTypeWhat it doesExample
disciplineenumOne of indoor, beach.beach
genderenumOne of men, women, mixed.men
seasonintThe year a season starts in, like 2025.2025
qtextA word in the competition's name, 2 to 80 characters.
pageintPage number, from 1. Adds totals to meta.2
per_pageintRows a page, 1 to 200. 50 when not sent.200
cursorstringThe next_cursor from the last answer. Send it alone.

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.

# Competitions, newest first, filtered by discipline, gender, season or name
curl "https://api.volleyballapi.com/v1/competitions?discipline=beach&per_page=2" \
  -H "Authorization: Bearer $VBA_KEY"

Response

Every answer is data plus meta. A first call with page adds totals to meta; a call with cursor carries only the next cursor, which is quicker over long ranges. This is a real answer to the request above, counted 2026-10-12, with long lists cut short.

200 application/json
{
  "data": [
    {
      "id": "cp_mmra2w7x",
      "name": "FIVB Beach Volleyball World Championships",
      "discipline": "beach",
      "gender": "men",
      "season": 2027,
      "start_date": "2027-08-13",
      "end_date": "2027-08-22",
      "country_code": "NL"
    },
    {
      "id": "cp_v15a0yfs",
      "name": "FIVB Beach Volleyball World Championships",
      "discipline": "beach",
      "gender": "women",
      "season": 2027,
      "start_date": "2027-08-13",
      "end_date": "2027-08-22",
      "country_code": "NL"
    }
  ],
  "meta": {
    "plan": "Complete",
    "count": 2,
    "next_cursor": "eyJvIjoyLCJwIjoyfQ",
    "page": 1,
    "per_page": 2,
    "total": 9291,
    "total_pages": 4646,
    "next_page": 2,
    "prev_page": null
  }
}

Fields

FieldTypeWhat it holds
idstringStable competition id, cp_
namestringThe competition's name
disciplineenumindoor or beach
genderenummen, women or mixed
seasonintThe year the season starts in
start_date, end_datedateFirst and last day, where known
country_codestringTwo-letter country of a national competition

Errors

Errors come back as {"error": {"code", "message", "docs"}}, with plan and pricing added when a plan would answer. Every error.

HTTPCodeWhen
400bad_requestA value of the wrong shape, or per_page outside 1 to 200
401unauthorizedNo key, or a key that is not known or was revoked
422unknown_parameterA parameter this endpoint does not take; the answer lists the ones it does
429rate_limitedToo many calls this minute; Retry-After says when to try again
429quota_exceededThe 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.