Every API here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for apis
7 MCP tools reach this
find_apisBrowse and filter every API in the catalog.
get_api_artifactsOne API's artifacts, grouped by type.
get_openapiThe primary OpenAPI for this API.
find_similar_apisAPIs that look like this one.
apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
resolveTurn a domain, URL or GitHub org into the provider it belongs to.
find_cohortsEvery scored population of providers in the catalog.
All 92 tools →
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/sportstatsapi:sportstatsapi-biathlon-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we
store it to create your key and to recognise you if you sign in with another
provider. See our Privacy Policy and
Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
contact:
name: SportStatsAPI
url: https://sportstatsapi.com
description: 'Every public endpoint of SportStatsAPI. Endpoints marked with x-x402 can also be paid per call by an AI agent; the curated list of those is https://api.sportstatsapi.com/api/openapi.agents.json.
Authentication: an API key (header X-API-Key, or Authorization: Bearer ), or without a key an x402 payment (header PAYMENT-SIGNATURE, USDC on Base). Prices and payment offers: https://api.sportstatsapi.com/.well-known/x402. Docs for AI models: https://api.sportstatsapi.com/llms.txt. MCP server: https://mcp.sportstatsapi.com/mcp.'
summary: Sports data API and x402 pay-per-call endpoints
title: SportStats Biathlon API
version: '1.0'
servers:
- url: https://api.sportstatsapi.com/api/v1
tags:
- name: biathlon
paths:
/biathlon/athletes:
get:
description: Athletes of the World Cup and IBU Cup races, by family name, with nation, gender and birth date (from the IBU biography, once read)
operationId: getBiathlonAthletes
parameters:
- description: Part of the name
in: query
name: q
schema:
type: string
- description: IOC nation code (NOR)
in: query
name: nation
schema:
type: string
- description: Maximum results (1-100)
in: query
name: limit
schema:
default: 50
type: integer
- description: Results to skip
in: query
name: offset
schema:
default: 0
type: integer
responses:
'200':
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/middleware.Response'
- properties:
data:
items:
$ref: '#/components/schemas/dto.BiathlonAthleteResponse'
type: array
meta:
$ref: '#/components/schemas/middleware.MetaInfo'
type: object
description: OK
'401':
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/middleware.Response'
- properties:
error:
$ref: '#/components/schemas/middleware.ErrorInfo'
type: object
description: Unauthorized
'500':
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/middleware.Response'
- properties:
error:
$ref: '#/components/schemas/middleware.ErrorInfo'
type: object
description: Internal Server Error
security:
- ApiKeyAuth: []
- BearerAuth: []
summary: List biathlon athletes
tags:
- biathlon
/biathlon/athletes/{id}:
get:
description: An athlete with their latest results (race and event of each), newest first
operationId: getBiathlonAthletesById
parameters:
- description: Athlete code (or id)
in: path
name: id
required: true
schema:
type: string
- description: Results (1-50)
in: query
name: limit
schema:
default: 20
type: integer
responses:
'200':
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/middleware.Response'
- properties:
data:
$ref: '#/components/schemas/dto.BiathlonAthleteResponse'
type: object
description: OK
'400':
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/middleware.Response'
- properties:
error:
$ref: '#/components/schemas/middleware.ErrorInfo'
type: object
description: Bad Request
'401':
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/middleware.Response'
- properties:
error:
$ref: '#/components/schemas/middleware.ErrorInfo'
type: object
description: Unauthorized
'404':
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/middleware.Response'
- properties:
error:
$ref: '#/components/schemas/middleware.ErrorInfo'
type: object
description: Not Found
security:
- ApiKeyAuth: []
- BearerAuth: []
summary: Get a biathlon athlete
tags:
- biathlon
/biathlon/events:
get:
description: 'Events by start date: World Cup weeks, World Championships, Olympics (level world-cup), IBU Cup weeks and European Championships (level ibu-cup). Seniors only; youth and junior competitions are not covered. Races per event at /biathlon/events/{id}.'
operationId: getBiathlonEvents
parameters:
- description: 'Season: first year (2025) or 2025-26'
in: query
name: season
schema:
type: string
- description: world-cup or ibu-cup
in: query
name: level
schema:
type: string
- description: world-cup, world-championships, olympics, ibu-cup, european-championships
in: query
name: kind
schema:
type: string
- description: Events ending on or after this date (YYYY-MM-DD)
in: query
name: date_from
schema:
type: string
- description: Events starting on or before this date (YYYY-MM-DD)
in: query
name: date_to
schema:
type: string
- description: Maximum results (1-100)
in: query
name: limit
schema:
default: 50
type: integer
- description: Results to skip
in: query
name: offset
schema:
default: 0
type: integer
responses:
'200':
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/middleware.Response'
- properties:
data:
items:
$ref: '#/components/schemas/dto.BiathlonEventResponse'
type: array
meta:
$ref: '#/components/schemas/middleware.MetaInfo'
type: object
description: OK
'400':
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/middleware.Response'
- properties:
error:
$ref: '#/components/schemas/middleware.ErrorInfo'
type: object
description: Bad Request
'401':
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/middleware.Response'
- properties:
error:
$ref: '#/components/schemas/middleware.ErrorInfo'
type: object
description: Unauthorized
'500':
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/middleware.Response'
- properties:
error:
$ref: '#/components/schemas/middleware.ErrorInfo'
type: object
description: Internal Server Error
security:
- ApiKeyAuth: []
- BearerAuth: []
summary: Biathlon calendar
tags:
- biathlon
/biathlon/events/{id}:
get:
description: An event with its races in start order (status_code, start_at, winner once final); results at /biathlon/races/{id}
operationId: getBiathlonEventsById
parameters:
- description: Event code (or id)
in: path
name: id
required: true
schema:
type: string
responses:
'200':
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/middleware.Response'
- properties:
data:
$ref: '#/components/schemas/dto.BiathlonEventResponse'
type: object
description: OK
'400':
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/middleware.Response'
- properties:
error:
$ref: '#/components/schemas/middleware.ErrorInfo'
type: object
description: Bad Request
'401':
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/middleware.Response'
- properties:
error:
$ref: '#/components/schemas/middleware.ErrorInfo'
type: object
description: Unauthorized
'404':
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/middleware.Response'
- properties:
error:
$ref: '#/components/schemas/middleware.ErrorInfo'
type: object
description: Not Found
security:
- ApiKeyAuth: []
- BearerAuth: []
summary: Get a biathlon event
tags:
- biathlon
/biathlon/live:
get:
description: Races started in the last 3 hours and not final, with their event and running results (read every 2 minutes)
operationId: getBiathlonLive
responses:
'200':
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/middleware.Response'
- properties:
data:
items:
$ref: '#/components/schemas/handlers.biathlonRaceResults'
type: array
type: object
description: OK
'401':
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/middleware.Response'
- properties:
error:
$ref: '#/components/schemas/middleware.ErrorInfo'
type: object
description: Unauthorized
'500':
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/middleware.Response'
- properties:
error:
$ref: '#/components/schemas/middleware.ErrorInfo'
type: object
description: Internal Server Error
security:
- ApiKeyAuth: []
- BearerAuth: []
summary: Biathlon races on now
tags:
- biathlon
/biathlon/races/{id}:
get:
description: 'Results in the IBU''s order: rank, athlete, nation, bib, shooting (misses per stage), penalties, total time, time behind, World Cup points, irm (DNS, DNF, DSQ, LAP). Relays: one row per team with its legs. Running results while the race is live.'
operationId: getBiathlonRacesById
parameters:
- description: Race code (or id)
in: path
name: id
required: true
schema:
type: string
responses:
'200':
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/middleware.Response'
- properties:
data:
$ref: '#/components/schemas/handlers.biathlonRaceResults'
type: object
description: OK
'400':
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/middleware.Response'
- properties:
error:
$ref: '#/components/schemas/middleware.ErrorInfo'
type: object
description: Bad Request
'401':
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/middleware.Response'
- properties:
error:
$ref: '#/components/schemas/middleware.ErrorInfo'
type: object
description: Unauthorized
'404':
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/middleware.Response'
- properties:
error:
$ref: '#/components/schemas/middleware.ErrorInfo'
type: object
description: Not Found
security:
- ApiKeyAuth: []
- BearerAuth: []
summary: Get a biathlon race with its results
tags:
- biathlon
/biathlon/standings:
get:
description: 'World Cup or IBU Cup tables of a season: total (overall), sprint, pursuit, individual, mass-start, relay and nations (rows are nations there). Default: the latest season, level world-cup, every gender and discipline.'
operationId: getBiathlonStandings
parameters:
- description: 'Season: first year (2025) or 2025-26 (default: the latest stored)'
in: query
name: season
schema:
type: string
- description: world-cup (default) or ibu-cup
in: query
name: level
schema:
type: string
- description: men, women or mixed
in: query
name: gender
schema:
type: string
- description: total, sprint, pursuit, individual, mass-start, relay, nations
in: query
name: discipline
schema:
type: string
responses:
'200':
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/middleware.Response'
- properties:
data:
items:
$ref: '#/components/schemas/dto.BiathlonStandingsResponse'
type: array
meta:
$ref: '#/components/schemas/middleware.MetaInfo'
type: object
description: OK
'400':
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/middleware.Response'
- properties:
error:
$ref: '#/components/schemas/middleware.ErrorInfo'
type: object
description: Bad Request
'401':
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/middleware.Response'
- properties:
error:
$ref: '#/components/schemas/middleware.ErrorInfo'
type: object
description: Unauthorized
'500':
content:
application/json:
schema:
allOf:
- $ref: '#/components/schemas/middleware.Response'
- properties:
error:
$ref: '#/components/schemas/middleware.ErrorInfo'
type: object
description: Internal Server Error
security:
- ApiKeyAuth: []
- BearerAuth: []
summary: Biathlon cup standings
tags:
- biathlon
components:
schemas:
dto.BiathlonAthleteResultResponse:
properties:
athlete_id:
type: integer
behind:
example: '+11.1'
type: string
bib:
type: string
event:
$ref: '#/components/schemas/dto.BiathlonEventResponse'
irm:
type: string
leg:
type: integer
legs:
items:
$ref: '#/components/schemas/dto.BiathlonResultResponse'
type: array
name:
type: string
nation:
type: string
penalties:
description: 'misses (relays: penalty loops)'
type: integer
race:
$ref: '#/components/schemas/dto.BiathlonRaceResponse'
rank:
type: integer
shooting:
example: 0+1
type: string
shooting_total:
type: string
spare_rounds:
type: integer
total_time:
example: '24:26.3'
type: string
wc_points:
type: integer
type: object
database.BiathlonStandingRow:
properties:
athlete_id:
type: integer
name:
type: string
nation:
type: string
rank:
type: integer
score:
type: integer
type: object
dto.BiathlonEventResponse:
properties:
country:
description: IOC code
type: string
end_date:
type: string
id:
type: integer
kind:
enum:
- world-cup
- world-championships
- olympics
- ibu-cup
- european-championships
- other
type: string
level:
enum:
- world-cup
- ibu-cup
type: string
location:
type: string
name:
type: string
race_count:
type: integer
races:
items:
$ref: '#/components/schemas/dto.BiathlonRaceResponse'
type: array
season:
example: 2025-26
type: string
start_date:
type: string
status_code:
enum:
- scheduled
- live
- final
type: string
type: object
handlers.biathlonRaceResults:
properties:
discipline:
description: sprint, pursuit, individual, short-individual, mass-start, relay, single-mixed-relay...
example: sprint
type: string
distance_km:
example: '10'
type: string
event:
$ref: '#/components/schemas/dto.BiathlonEventResponse'
event_id:
type: integer
gender:
enum:
- men
- women
- mixed
type: string
has_results:
type: boolean
id:
type: integer
legs:
type: integer
name:
type: string
results:
items:
$ref: '#/components/schemas/dto.BiathlonResultResponse'
type: array
shootings:
description: shooting stages (per leg in relays)
type: integer
start_at:
description: UTC
type: string
status:
type: string
status_code:
enum:
- scheduled
- live
- final
- cancelled
- postponed
type: string
updated_at:
type: string
winner:
description: athlete or (relays) nation, once final
type: string
type: object
middleware.Response:
properties:
data: {}
error:
$ref: '#/components/schemas/middleware.ErrorInfo'
meta:
$ref: '#/components/schemas/middleware.MetaInfo'
success:
type: boolean
type: object
dto.BiathlonRaceResponse:
properties:
discipline:
description: sprint, pursuit, individual, short-individual, mass-start, relay, single-mixed-relay...
example: sprint
type: string
distance_km:
example: '10'
type: string
event_id:
type: integer
gender:
enum:
- men
- women
- mixed
type: string
has_results:
type: boolean
id:
type: integer
legs:
type: integer
name:
type: string
results:
items:
$ref: '#/components/schemas/dto.BiathlonResultResponse'
type: array
shootings:
description: shooting stages (per leg in relays)
type: integer
start_at:
description: UTC
type: string
status:
type: string
status_code:
enum:
- scheduled
- live
- final
- cancelled
- postponed
type: string
updated_at:
type: string
winner:
description: athlete or (relays) nation, once final
type: string
type: object
dto.BiathlonResultResponse:
properties:
athlete_id:
type: integer
behind:
example: '+11.1'
type: string
bib:
type: string
irm:
type: string
leg:
type: integer
legs:
items:
$ref: '#/components/schemas/dto.BiathlonResultResponse'
type: array
name:
type: string
nation:
type: string
penalties:
description: 'misses (relays: penalty loops)'
type: integer
rank:
type: integer
shooting:
example: 0+1
type: string
shooting_total:
type: string
spare_rounds:
type: integer
total_time:
example: '24:26.3'
type: string
wc_points:
type: integer
type: object
dto.BiathlonAthleteResponse:
properties:
birth_date:
type: string
family_name:
type: string
gender:
enum:
- male
- female
type: string
given_name:
type: string
id:
type: integer
name:
type: string
nation:
type: string
results:
items:
$ref: '#/components/schemas/dto.BiathlonAthleteResultResponse'
type: array
type: object
middleware.MetaInfo:
properties:
attribution:
description: Attribution a data source's licence asks for (Cricsheet's history).
type: string
has_more:
description: 'HasMore: the cursor-paged list has more rows now (ask again at once).'
type: boolean
limit:
type: integer
live:
description: 'Live: the answer is the live feed''s, kept while the match is played
(cricket ball by ball before Cricsheet''s file replaces it).'
type: boolean
next_cursor:
description: NextCursor continues a cursor-paged list (GET /changes).
type: string
offset:
type: integer
sources:
description: 'Sources: where the answer''s data came from, with each source''s licence
and the attribution it asks for (docs/source-licences.md).'
items:
$ref: '#/components/schemas/middleware.SourceInfo'
type: array
total:
type: integer
warnings:
description: 'Warnings: query parameters ignored or changed (a limit above the
maximum is clamped to it; a from/to that is not a date is ignored).'
items:
type: string
type: array
type: object
middleware.SourceInfo:
properties:
attribution:
description: show it with the data
example: 'Data: nflverse (CC-BY 4.0)'
type: string
licence:
description: the licence or terms the data is served under
example: CC-BY-4.0
type: string
name:
description: provider = our main licensed feed
example: nflverse
type: string
type: object
middleware.ErrorInfo:
properties:
code:
type: string
message:
type: string
type: object
dto.BiathlonStandingsResponse:
properties:
as_of:
type: string
discipline:
type: string
gender:
type: string
info:
type: string
level:
type: string
name:
type: string
races_done:
type: integer
races_total:
type: integer
rows:
items:
$ref: '#/components/schemas/database.BiathlonStandingRow'
type: array
season:
type: string
updated_at:
type: string
type: object
securitySchemes:
ApiKeyAuth:
description: API key
in: header
name: X-API-Key
type: apiKey
BearerAuth:
description: The same API key as a bearer token
scheme: bearer
type: http
x402:
description: x402 v2 payment (USDC on Base, eip155:8453) built from the offers of a 402 answer; see https://api.sportstatsapi.com/.well-known/x402
in: header
name: PAYMENT-SIGNATURE
type: apiKey
externalDocs:
description: x402 payment offers and prices
url: https://api.sportstatsapi.com/.well-known/x402