Volleyball API
DocumentationLiveCoveragePricingMCPStatusSign inGet a free key

DocumentationMatches

Live volleyball scores API

GET/v1/matches/live

Every match being played this minute, indoor and beach, with the running score of each set and the set in play. Scores refresh every 15 seconds; meta says when the data last changed and how many seconds behind it is.

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

Parameters

All optional.

NameTypeWhat it doesExample
disciplineenumOne of indoor, beach.indoor
genderenumOne of men, women, mixed.men

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 being played now, with the running set scores
curl "https://api.volleyballapi.com/v1/matches/live" \
  -H "Authorization: Bearer $VBA_KEY"

Response

Every answer is data plus meta. meta carries last_change, seconds_behind and poll_seconds, so your app can say how fresh the scores are. This is a real answer to the request above, counted 2026-10-12, with long lists cut short.

200 application/json
{
  "data": [
    {
      "id": "mt_veezrkx2",
      "discipline": "indoor",
      "gender": "women",
      "status": "live",
      "current_set": 3,
      "date": "2026-10-12",
      "time_local": "10:00",
      "start_utc": "2026-10-12T10:00:00Z",
      "competition": { "id": "cp_yc5gn71m", "name": "KOVO Cup Women", "season": 2026 },
      "round": null,
      "pool": null,
      "team_a": { "id": "tm_7c17ptyv", "name": "GS Caltex W" },
      "team_b": { "id": "tm_h20hqfkq", "name": "Expressway Co W" },
      "score": { "a": 0, "b": 2 },
      "winner": null,
      "sets": [
        { "set": 1, "a": 18, "b": 25, "duration_s": null },
        { "set": 2, "a": 18, "b": 25, "duration_s": null },
        { "set": 3, "a": 14, "b": 11, "duration_s": null }
      ],
      "sets_complete": true,
      "duration_s": null,
      "updated_utc": "2026-10-12T11:20:33Z"
    }
  ],
  "meta": {
    "plan": "Complete",
    "count": 1,
    "last_change": "2026-10-12T11:20:02Z",
    "seconds_behind": 90,
    "poll_seconds": 15
  }
}

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
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 Live and Complete plans.