Genius Sports API

The Sports API from Genius Sports — 2 operation(s) for sports.

Operations 4

OPTIONS /sports Describe sports #
GET /sports Retrieve sports by ID/s. MAX 200 per page #
OPTIONS /sports/{id}/{entityType}/metadata Describe sports by id by entity type metadata #
GET /sports/{id}/{entityType}/metadata Retrieve allowed properties per entity type name and per sport #

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/genius-sports-sports-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

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

genius-sports-sports-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  description: This is Genius Sports Services Fixture API.
  version: 2.0.280
  title: Fixtures-v2 Sports API
  contact:
    email: sbonboarding@geniussports.com
  license:
    name: Apache 2.0
    url: http://www.apache.org/licenses/LICENSE-2.0.html
servers:
- url: https://fixtures.api.geniussports.com/v2
tags:
- name: Sports
paths:
  /sports:
    options:
      responses:
        '200':
          description: 200 response
          headers:
            Access-Control-Allow-Origin:
              schema:
                type: string
            Access-Control-Allow-Methods:
              schema:
                type: string
            Access-Control-Allow-Headers:
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Empty'
      tags:
      - Sports
      summary: Describe sports
      x-summary-source: derived
      operationId: optionsSports
      x-operation-id-source: derived
    get:
      tags:
      - Sports
      summary: Retrieve sports by ID/s. MAX 200 per page
      description: Returns sports wrapped inside a HATEOAS model
      parameters:
      - name: page
        in: query
        description: The number of page to be returned. The default value is 1.
        required: false
        schema:
          type: string
      - name: pageSize
        in: query
        description: The size of the page to be returned. The default value is 10.
        required: false
        schema:
          type: string
      - name: sortBy
        in: query
        description: 'The field to ''order by'' by. Descending ordering also allowed. Fields to order by for this endpoint: (id, name)'
        required: false
        schema:
          type: string
      - name: x-api-key
        in: header
        required: true
        schema:
          type: string
      - name: filter
        in: query
        description: 'The field to ''filter'' by. Check main description for filter comparators. Fields to filter by for this endpoint: (id, name)'
        required: false
        schema:
          type: string
      responses:
        '200':
          description: successful operation
          headers:
            Access-Control-Allow-Origin:
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SportResponseModelHATEOASReponseModel'
        '520':
          description: Unknown error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorModel'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestModel'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorModel'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorModel'
        '413':
          description: Payload Too Large
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorModel'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorModel'
        '415':
          description: Unsupported Media Type
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorModel'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorModel'
        '504':
          description: Gateway Timeout
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorModel'
        '429':
          description: Too Many Requests  OR  Limit Exceeded  - On reason = Too Many requests one should re-try, for Limit Exceeded that does not help you
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorModel'
      security:
      - Auth0: []
      - api_key: []
      operationId: getSports
      x-operation-id-source: derived
  /sports/{id}/{entityType}/metadata:
    options:
      parameters:
      - name: entityType
        in: path
        required: true
        schema:
          type: string
      - name: id
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: 200 response
          headers:
            Access-Control-Allow-Origin:
              schema:
                type: string
            Access-Control-Allow-Methods:
              schema:
                type: string
            Access-Control-Allow-Headers:
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Empty'
      tags:
      - Sports
      summary: Describe sports by id by entity type metadata
      x-summary-source: derived
      operationId: optionsSportsByIdByEntityTypeMetadata
      x-operation-id-source: derived
    get:
      tags:
      - Sports
      summary: Retrieve allowed properties per entity type name and per sport
      description: Retrieve allowed properties per entity type name and per sport.
      parameters:
      - name: entityType
        in: path
        description: 'Entity type is the name of the entity for which the allowed properties will be retrieved. Entity types: competition, competitor, contract, fixture, round, season, venue, fixtureperson, player, team'
        required: true
        schema:
          type: string
      - name: x-api-key
        in: header
        required: true
        schema:
          type: string
      - name: id
        in: path
        description: The sport for which the allowed properties will be retrieved.
        required: true
        schema:
          type: string
      responses:
        '200':
          description: successful operation
          headers:
            Access-Control-Allow-Origin:
              schema:
                type: string
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ArrayOfMetadataPropertyTypesResponseModel'
        '520':
          description: Unknown error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorModel'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestModel'
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorModel'
        '401':
          description: Unauthorized
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorModel'
        '413':
          description: Payload Too Large
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorModel'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorModel'
        '415':
          description: Unsupported Media Type
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorModel'
        '404':
          description: Not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorModel'
        '504':
          description: Gateway Timeout
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorModel'
        '429':
          description: Too Many Requests  OR  Limit Exceeded  - On reason = Too Many requests one should re-try, for Limit Exceeded that does not help you
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorModel'
      security:
      - Auth0: []
      - api_key: []
      operationId: getSportsByIdByEntityTypeMetadata
      x-operation-id-source: derived
components:
  schemas:
    Empty:
      type: object
    SportResponseModelHATEOASReponseModel:
      type: object
      properties:
        page:
          type: integer
          format: int32
        pageSize:
          type: integer
          format: int32
        totalItems:
          type: integer
          format: int64
        items:
          type: array
          items:
            $ref: '#/components/schemas/SportResponseModel'
        self:
          type: string
        previous:
          type: string
        next:
          type: string
        first:
          type: string
        last:
          type: string
    ArrayOfMetadataPropertyTypesResponseModel:
      type: array
      items:
        $ref: '#/components/schemas/MetadataPropertyTypesResponseModel'
    SportResponseModel:
      type: object
      required:
      - allowsDoubles
      - allowsPlayers
      - createdOn
      - id
      - name
      - updatesCount
      properties:
        id:
          type: integer
          format: int64
          title: Id of the sport
        name:
          type: string
          title: Name of the sport
        allowsPlayers:
          type: boolean
          description: Whether players can be proposed for the specific sport. True when Players can be proposed
          title: Can Players be proposed for the specific sport
        allowsDoubles:
          type: boolean
          description: Whether players can be proposed for the specific sport. True when Doubles can be proposed
          title: Can Doubles be proposed for the specific sport
        maxNumberOfCompetitorsInFixture:
          type: integer
          format: int32
          description: The maximum number of competitors which can take part in a fixture for the specific sport. The minimum is 2. The maximum depends on this number. The maximum is inclusive e.g. number of competitors <= maxNumberOfCompetitorsInFixture. When maxNumberOfCompetitorsInFixture is set to null this means that there is no upper limit of the number of competitors which can take part in the fixtures for the specific sport.
          title: The maximum number of competitors which can take part in a fixture for the specific sport
        createdOn:
          type: string
          format: date-time
          title: The date on which the sport was created
        modifiedOn:
          type: string
          format: date-time
          title: The date on which the sport was modified
        updatesCount:
          type: integer
          format: int32
          title: The number of updates made to the sport
    ErrorModel:
      type: object
      properties:
        code:
          type: integer
          format: int32
        message:
          type: string
        error:
          $ref: '#/components/schemas/Error'
    BadRequestModel:
      type: object
      properties:
        messages:
          type: array
          items:
            type: string
    MetadataPropertyTypesResponseModel:
      type: object
      required:
      - allowNonPredefinedValues
      - id
      - isRequired
      - name
      properties:
        id:
          type: integer
          format: int64
          title: Id of the property type
        name:
          type: string
          title: Name of the property type
        allowNonPredefinedValues:
          type: boolean
          title: True or false value. Defines whether you can use any value or you should use value from the list below.
        isRequired:
          type: boolean
          description: Is property required for the specific entity for the specific sport
          title: Is property required for the specific entity for the specific sport
        values:
          type: array
          items:
            type: string
    Error:
      type: object
      required:
      - domain
      - message
      - reason
      properties:
        reason:
          type: string
        domain:
          type: string
        locationType:
          type: string
        location:
          type: string
        message:
          type: string
  securitySchemes:
    Auth0:
      type: apiKey
      name: Authorization
      in: header
      x-amazon-apigateway-authtype: oauth2
    api_key:
      type: apiKey
      name: x-api-key
      in: header
x-amazon-apigateway-security-policy: TLS_1_0