Volleyball API
DocumentationLiveCoveragePricingMCPStatusSign inGet a free key

DocumentationBulk export

Volleyball match data export

GET/v1/export/matches

Every match between two days in one call, up to 184 days at a time: the full match record with sets, venue, referees, attendance and coaches. Built for loading a season into your own database without paging.

PlansFree keyLiveArchiveComplete
Base URLhttps://api.volleyballapi.com
Answerone object

Parameters

Parameters marked required must be sent; the rest are optional. Days you can read depend on your plan: the free key reads today and yesterday, Live the last 30 days, Archive and Complete every season since 2001.

NameTypeWhat it doesExample
fromdateFirst day of a range. Send with to; a range covers 31 days at most.2023-08-30
todateLast day of the range, included.2023-08-30
disciplineenumOne of indoor, beach.indoor
genderenumOne of men, women, mixed.women

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.

# Every match between two days in one call, with sets, venue, officials and coaches (up to 184 days)
curl "https://api.volleyballapi.com/v1/export/matches?from=2023-08-30&to=2023-08-30&gender=women" \
  -H "Authorization: Bearer $VBA_KEY"

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.

200 application/json
{
  "data": [
    {
      "id": "mt_tsgn6rdt",
      "discipline": "beach",
      "gender": "women",
      "status": "finished",
      "current_set": null,
      "date": "2023-08-30",
      "time_local": "21:00",
      "start_utc": null,
      "competition": {
        "id": "cp_ad93tcps",
        "name": "yuh Beachmasters Bern",
        "season": 2023
      },
      "round": null,
      "pool": null,
      "team_a": { "id": "tm_hshj0353", "name": "Hüberli/Brunner" },
      "team_b": { "id": "tm_5zxmphfc", "name": "Betschart, M./Marolf" },
      "score": { "a": 2, "b": 0 },
      "winner": "a",
      "sets": [
        { "set": 1, "a": 21, "b": 16, "duration_s": 1140 },
        { "set": 2, "a": 21, "b": 18, "duration_s": 1140 }
      ],
      "sets_complete": true,
      "duration_s": 2280,
      "updated_utc": "2026-09-29T12:37:06Z",
      "venue": "Court CC",
      "city": null,
      "country_code": null,
      "spectators": null,
      "referees": [],
      "weather": null
    },
    {
      "id": "mt_40454qnx",
      "discipline": "beach",
      "gender": "women",
      "status": "finished",
      "current_set": null,
      "date": "2023-08-30",
      "time_local": "16:00",
      "start_utc": null,
      "competition": {
        "id": "cp_ad93tcps",
        "name": "yuh Beachmasters Bern",
        "season": 2023
      },
      "round": null,
      "pool": null,
      "team_a": { "id": "tm_f0dnkt3x", "name": "Menia/Lutz A." },
      "team_b": { "id": "tm_16wy4gb5", "name": "Kernen/Annique" },
      "score": { "a": 2, "b": 0 },
      "winner": "a",
      "sets": [
        { "set": 1, "a": 21, "b": 9, "duration_s": 840 },
        { "set": 2, "a": 21, "b": 15, "duration_s": 1140 }
      ],
      "sets_complete": true,
      "duration_s": 1980,
      "updated_utc": "2026-09-29T12:37:06Z",
      "venue": "Court CC",
      "city": null,
      "country_code": null,
      "spectators": null,
      "referees": [],
      "weather": null
    }
  ],
  "meta": {
    "plan": "Complete",
    "from": "2023-08-30",
    "to": "2023-08-30",
    "count": 25
  }
}

Fields

FieldTypeWhat it holds
data[]arrayOne full match record per match, as /v1/matches/{id} gives it, in date order
idstringStable match id, mt_
disciplineenumindoor or beach
genderenummen, women or mixed
meta.from, meta.to, meta.countmixedThe range and how many matches it holds

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 a required parameter left out
401unauthorizedNo key, or a key that is not known or was revoked
403upgrade_requiredYour plan does not include this endpoint; the answer names the plans that do
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. This endpoint answers on the Complete plans.