Officials
A
GET
/v1/referees
Officials with match counts
Match officials with the matches they took.
The named official is not carried on every match. The coverage figures on each competition and season give the exact share for the rows you are asking for.
Plan
This endpoint needs Archive.
Calling it on a lower plan returns a 403 naming the plan it needs and
a link to pricing, never a bare refusal.
Parameters
limit
integer
query
Rows per page, 1–1000. Defaults to 100. e.g.
100
page
integer
query
Page number, 1-based. The response carries
total, total_pages, next_page and prev_page, so a UI pager has everything it needs from one call. If you send both page and cursor, page wins. e.g. 2
cursor
string
query
Opaque cursor from
meta.next_cursor. Pages by sort position rather than offset, so page 10,000 is as fast as page 1 and a new match arriving cannot shift the boundary. Pass it back unchanged; do not build or parse one yourself.Returns
data.match_status
list
Where the match stands: scheduled, in play by half, half time, finished, postponed, cancelled, abandoned, awarded or walkover.
data.result
list
Result.
data.plans
list
Plans.
meta.data_as_of
string
When the data behind this answer was last brought up to date.
meta.request_id
string
This request's id, to quote to support.
Request
curl "https://api.footballsoccerapi.com/v1/referees?limit=100&page=2" \ -H "X-API-Key: $FSAPI_KEY"
const res = await fetch("https://api.footballsoccerapi.com/v1/referees?limit=100&page=2", { headers: { "X-API-Key": process.env.FSAPI_KEY } }); const { data, meta } = await res.json();
import os, requests r = requests.get( "https://api.footballsoccerapi.com/v1/referees?limit=100&page=2", headers={"X-API-Key": os.environ["FSAPI_KEY"]}, ) data = r.json()["data"]
$ch = curl_init("https://api.footballsoccerapi.com/v1/referees?limit=100&page=2"); curl_setopt_array($ch, [ CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => ["X-API-Key: {$key}"], ]); $data = json_decode(curl_exec($ch), true)["data"];
Example response
A real row from the archive, fetched when this page rendered. Run it against your own key below.
200 OK
application/json
{
"data": {
"match_status": [
"scheduled",
"in_play_first_half",
"half_time",
"in_play_second_half",
"finished",
"finished_after_extra_time",
"postponed",
"cancelled",
"abandoned",
"awarded"
],
"result": [
"home",
"draw",
"away"
],
"plans": [
"free",
"archive",
"live"
]
},
"meta": {
"data_as_of": "2026-10-29T04:32:57Z",
"request_id": "01J9QW3C7M4KX2VB"
}
}
Run it live
Paste your key and fire the real request. The key is kept in this browser only and never sent anywhere but the API.