Volleyball API
DocumentationLiveCoveragePricingMCPStatusSign inGet a free key

DocumentationTeams and players

Volleyball team results API

GET/v1/teams/{id}/matches

A team's matches newest first, under every name it has played as, filtered by status.

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

Parameters

All 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
idpathThe team id, in the address. Required.tm_rk2hqqay
statusenumOne of scheduled, live, finished, awarded, cancelled.finished
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.

# A team's matches, newest first
curl "https://api.volleyballapi.com/v1/teams/tm_rk2hqqay/matches?status=finished&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": "mt_d5rwebd8",
      "discipline": "indoor",
      "gender": "women",
      "status": "finished",
      "current_set": null,
      "date": "2026-09-22",
      "time_local": "16:00",
      "start_utc": "2026-09-22T07:00:00Z",
      "competition": {
        "id": "cp_ge73273e",
        "name": "20th Asian Games Aichi–Nagoya 2026 - Women",
        "season": 2026
      },
      "round": null,
      "pool": "Final 3-4",
      "team_a": { "id": "tm_rk2hqqay", "name": "Korea" },
      "team_b": { "id": "tm_mpgq9dch", "name": "Thailand" },
      "score": { "a": 0, "b": 3 },
      "winner": "b",
      "sets": [
        { "set": 1, "a": 20, "b": 25, "duration_s": 1500 },
        { "set": 2, "a": 19, "b": 25, "duration_s": 1500 },
        { "set": 3, "a": 23, "b": 25, "duration_s": 1920 }
      ],
      "sets_complete": true,
      "duration_s": 4920,
      "updated_utc": "2026-09-29T12:34:46Z"
    },
    {
      "id": "mt_79bmcnjc",
      "discipline": "indoor",
      "gender": "women",
      "status": "finished",
      "current_set": null,
      "date": "2026-09-21",
      "time_local": "19:20",
      "start_utc": "2026-09-21T10:20:00Z",
      "competition": {
        "id": "cp_ge73273e",
        "name": "20th Asian Games Aichi–Nagoya 2026 - Women",
        "season": 2026
      },
      "round": null,
      "pool": "Semifinals",
      "team_a": { "id": "tm_pse11h74", "name": "Japan" },
      "team_b": { "id": "tm_rk2hqqay", "name": "Korea" },
      "score": { "a": 3, "b": 0 },
      "winner": "a",
      "sets": [
        { "set": 1, "a": 25, "b": 20, "duration_s": 1620 },
        { "set": 2, "a": 25, "b": 22, "duration_s": 1920 },
        { "set": 3, "a": 25, "b": 16, "duration_s": 1500 }
      ],
      "sets_complete": true,
      "duration_s": 5040,
      "updated_utc": "2026-09-29T12:34:46Z"
    }
  ],
  "meta": {
    "plan": "Complete",
    "count": 2,
    "next_cursor": "eyJvIjoyLCJwIjoyfQ",
    "page": 1,
    "per_page": 2,
    "total": 522,
    "total_pages": 261,
    "next_page": 2,
    "prev_page": null
  }
}

Fields

FieldTypeWhat it holds
idstringStable match id, mt_
disciplineenumindoor or beach
genderenummen, women or mixed
statusenumscheduled, live, finished, awarded or cancelled
current_setintThe set being played, while live; otherwise null
date, time_localdate, timeThe venue's calendar day and clock
start_utcdatetimeScheduled start in UTC, ISO 8601
competitionobjectid, name and season
round, poolstring"Semifinals", "Pool B", or null
team_a, team_bobjectid and name: a club, a national team or a beach pair
scoreobjectSets won by each side
winnerenuma or b, null until finished
setsarrayEach set: number, points each side, duration in seconds
sets_completeboolfalse when the source's set scores do not add up to its result, so some sets are missing
duration_sintMatch length in seconds
updated_utcdatetimeWhen anything in the match last changed

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
404not_foundAn id that does not exist
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.