SportStatsAPI Nordic Combined API

The nordic-combined API from SportStatsAPI — 6 operation(s) for nordic-combined.

GitHub OpenAPI

Operations 6

GET /nordic-combined/athletes List skiing athletes #
GET /nordic-combined/athletes/{id} Get a skiing athlete #
GET /nordic-combined/events Skiing calendar #
GET /nordic-combined/events/{id} Get a skiing event #
GET /nordic-combined/races/{id} Get a skiing race with its results #
GET /nordic-combined/standings Skiing World 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-nordic-combined-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-nordic-combined-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 Nordic Combined API
  version: '1.0'
servers:
- url: https://api.sportstatsapi.com/api/v1
tags:
- name: nordic-combined
paths:
  /nordic-combined/athletes:
    get:
      description: Athletes of the sport's podiums (and linked result rows), by name, with nation, gender, birth date (18+) and photo (18+, Wikimedia Commons, with credit)
      operationId: getNordicCombinedAthletes
      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.SkiAthleteResponse'
                      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 skiing athletes
      tags:
      - nordic-combined
  /nordic-combined/athletes/{id}:
    get:
      description: An athlete with their latest results in the sport (race and event of each), newest first
      operationId: getNordicCombinedAthletesById
      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.SkiAthleteResponse'
                  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 skiing athlete
      tags:
      - nordic-combined
  /nordic-combined/events:
    get:
      description: 'Events by start date: World Cup stops (a venue''s races of a few days) and the Olympic Games. Senior World Cup and Olympics only. Races per event at /{sport}/events/{id}. Source: Wikipedia season articles.'
      operationId: getNordicCombinedEvents
      parameters:
      - description: 'Season: first year (2026) or 2026-27'
        in: query
        name: season
        schema:
          type: string
      - description: world-cup or olympics
        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.SkiEventResponse'
                      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: Skiing calendar
      tags:
      - nordic-combined
  /nordic-combined/events/{id}:
    get:
      description: An event with its races by date (status_code, winner once final); results at /{sport}/races/{id}
      operationId: getNordicCombinedEventsById
      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.SkiEventResponse'
                  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 skiing event
      tags:
      - nordic-combined
  /nordic-combined/races/{id}:
    get:
      description: 'World Cup races: the podium (rank, athlete, nation; teams with their members), full_results false. Olympic events: the full list with bib, result (time, points or score; DNF, DNS, DSQ) and behind, full_results true. Under-16s are never listed.'
      operationId: getNordicCombinedRacesById
      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.skiRaceResults'
                  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 skiing race with its results
      tags:
      - nordic-combined
  /nordic-combined/standings:
    get:
      description: 'The season''s standings tables as the Wikipedia season article lists them (overall, per discipline, Nations Cup; often the top 5-10). Default: the latest season, every table.'
      operationId: getNordicCombinedStandings
      parameters:
      - description: 'Season: first year (2026) or 2026-27 (default: the latest stored)'
        in: query
        name: season
        schema:
          type: string
      - description: men, women or all
        in: query
        name: gender
        schema:
          type: string
      - description: Discipline as listed (Overall, Downhill, Sprint...)
        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.SkiStandingsResponse'
                      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: Skiing World Cup standings
      tags:
      - nordic-combined
components:
  schemas:
    dto.SkiAthleteResultResponse:
      properties:
        athlete_id:
          type: integer
        behind:
          example: '+0.20'
          type: string
        bib:
          type: string
        event:
          $ref: '#/components/schemas/dto.SkiEventResponse'
        is_team:
          type: boolean
        members:
          items:
            $ref: '#/components/schemas/dto.SkiResultResponse'
          type: array
        name:
          type: string
        nation:
          type: string
        race:
          $ref: '#/components/schemas/dto.SkiRaceResponse'
        rank:
          type: integer
        result:
          description: time, points or score; DNF, DNS, DSQ
          example: '1:51.61'
          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
    handlers.skiRaceResults:
      properties:
        date:
          type: string
        discipline:
          example: giant slalom
          type: string
        event:
          $ref: '#/components/schemas/dto.SkiEventResponse'
        event_id:
          type: integer
        full_results:
          type: boolean
        gender:
          enum:
          - men
          - women
          - mixed
          type: string
        id:
          type: integer
        results:
          items:
            $ref: '#/components/schemas/dto.SkiResultResponse'
          type: array
        status_code:
          enum:
          - scheduled
          - final
          - cancelled
          - awaiting-results
          type: string
        updated_at:
          type: string
        winner:
          type: string
      type: object
    dto.SkiStandingsResponse:
      properties:
        discipline:
          example: Overall
          type: string
        gender:
          enum:
          - men
          - women
          - all
          type: string
        info:
          type: string
        nations:
          type: boolean
        races_done:
          type: integer
        races_total:
          type: integer
        rows:
          items:
            $ref: '#/components/schemas/database.SkiStandingRow'
          type: array
        season:
          type: string
        updated_at:
          type: string
      type: object
    dto.SkiRaceResponse:
      properties:
        date:
          type: string
        discipline:
          example: giant slalom
          type: string
        event_id:
          type: integer
        full_results:
          type: boolean
        gender:
          enum:
          - men
          - women
          - mixed
          type: string
        id:
          type: integer
        results:
          items:
            $ref: '#/components/schemas/dto.SkiResultResponse'
          type: array
        status_code:
          enum:
          - scheduled
          - final
          - cancelled
          - awaiting-results
          type: string
        updated_at:
          type: string
        winner:
          type: string
      type: object
    dto.SkiResultResponse:
      properties:
        athlete_id:
          type: integer
        behind:
          example: '+0.20'
          type: string
        bib:
          type: string
        is_team:
          type: boolean
        members:
          items:
            $ref: '#/components/schemas/dto.SkiResultResponse'
          type: array
        name:
          type: string
        nation:
          type: string
        rank:
          type: integer
        result:
          description: time, points or score; DNF, DNS, DSQ
          example: '1:51.61'
          type: string
      type: object
    dto.SkiEventResponse:
      properties:
        country:
          description: IOC code
          type: string
        end_date:
          type: string
        id:
          type: integer
        kind:
          enum:
          - world-cup
          - olympics
          type: string
        name:
          type: string
        race_count:
          type: integer
        races:
          items:
            $ref: '#/components/schemas/dto.SkiRaceResponse'
          type: array
        season:
          example: 2026-27
          type: string
        start_date:
          type: string
        status_code:
          enum:
          - scheduled
          - live
          - final
          type: string
        venue:
          type: string
      type: object
    dto.SkiAthleteResponse:
      properties:
        birth_date:
          type: string
        gender:
          enum:
          - male
          - female
          type: string
        id:
          type: integer
        name:
          type: string
        nation:
          type: string
        photo:
          $ref: '#/components/schemas/dto.SkiPhotoResponse'
        results:
          items:
            $ref: '#/components/schemas/dto.SkiAthleteResultResponse'
          type: array
      type: object
    dto.SkiPhotoResponse:
      properties:
        author:
          type: string
        credit:
          type: string
        licence:
          type: string
        licence_url:
          type: string
        source_url:
          description: the Commons file page
          type: string
        url:
          type: string
      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.ErrorInfo:
      properties:
        code:
          type: string
        message:
          type: string
      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
    database.SkiStandingRow:
      properties:
        athlete_id:
          type: integer
        name:
          type: string
        nation:
          type: string
        points:
          type: string
        rank:
          type: integer
      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