SportStatsAPI Biathlon API

The biathlon API from SportStatsAPI — 7 operation(s) for biathlon.

GitHub OpenAPI

Operations 7

GET /biathlon/athletes List biathlon athletes #
GET /biathlon/athletes/{id} Get a biathlon athlete #
GET /biathlon/events Biathlon calendar #
GET /biathlon/events/{id} Get a biathlon event #
GET /biathlon/live Biathlon races on now #
GET /biathlon/races/{id} Get a biathlon race with its results #
GET /biathlon/standings Biathlon cup standings #

Work with this as data

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 Specification

sportstatsapi-biathlon-api-openapi.yml Raw ↑
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