Genius Sports Groups API

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

Operations 6

OPTIONS /groups Describe groups #
GET /groups Retrieve groups by ID/s. MAX 200 per page #
POST /groups Create new group #
PUT /groups Update existing group #
OPTIONS /groups/{id} Describe groups by id #
GET /groups/{id} Retrieve groups details by ID #

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-groups-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-groups-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  description: This is Genius Sports Services Fixture API.
  version: 2.0.280
  title: Fixtures-v2 Groups 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: Groups
paths:
  /groups:
    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:
      - Groups
      summary: Describe groups
      x-summary-source: derived
      operationId: optionsGroups
      x-operation-id-source: derived
    get:
      tags:
      - Groups
      summary: Retrieve groups by ID/s. MAX 200 per page
      description: Returns groups 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, seasonId, competitionId, sportId, type)'
        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, seasonId, competitionId, sportId, type)'
        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/GroupResponseModelHATEOASReponseModel'
        '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: getGroups
      x-operation-id-source: derived
    post:
      tags:
      - Groups
      summary: Create new group
      parameters:
      - name: x-api-key
        in: header
        required: true
        schema:
          type: string
      - name: gs-fixtures-api-sub-source
        in: header
        description: Sub Source Name
        required: false
        schema:
          type: string
      responses:
        '520':
          description: Unknown error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorModel'
        '201':
          description: Created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GroupResponseModel'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestModel'
        '202':
          description: Accepted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AcceptedModel'
        '500':
          description: Internal Server Error
          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'
        '409':
          description: Conflict, see the response message or the 'geniussports-conflict-id' header to see the ID of the conflict!
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDuplicateModel'
      security:
      - Auth0: []
      - api_key: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateGroup'
        required: true
      operationId: postGroups
      x-operation-id-source: derived
    put:
      tags:
      - Groups
      summary: Update existing group
      parameters:
      - name: x-api-key
        in: header
        required: true
        schema:
          type: string
      - name: gs-fixtures-api-sub-source
        in: header
        description: Sub Source Name
        required: false
        schema:
          type: string
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GroupResponseModel'
        '520':
          description: Unknown error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorModel'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestModel'
        '202':
          description: Accepted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AcceptedModel'
        '500':
          description: Internal Server Error
          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'
        '409':
          description: Conflict, see the response message or the 'geniussports-conflict-id' header to see the ID of the conflict!
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorDuplicateModel'
      security:
      - Auth0: []
      - api_key: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateGroup'
        required: true
      operationId: putGroups
      x-operation-id-source: derived
  /groups/{id}:
    options:
      parameters:
      - 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:
      - Groups
      summary: Describe groups by id
      x-summary-source: derived
      operationId: optionsGroupsById
      x-operation-id-source: derived
    get:
      tags:
      - Groups
      summary: Retrieve groups details by ID
      description: Returns groups details including sport specific details (metadata properties)
      parameters:
      - name: x-api-key
        in: header
        required: true
        schema:
          type: string
      - name: id
        in: path
        description: Single groups ID to return details for
        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/GroupResponseModel'
        '520':
          description: Unknown error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorModel'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BadRequestModel'
        '202':
          description: Accepted
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AcceptedModel'
        '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: getGroupsById
      x-operation-id-source: derived
components:
  schemas:
    Empty:
      type: object
    ExternalIdsViewModel:
      type: object
      properties:
        optaId:
          type: string
        optaLegacyId:
          type: string
        fibaId:
          type: string
        vesselId:
          type: string
        statsEngineId:
          type: string
      description: External system identifiers. Key represents the external system name (e.g., 'optaId', 'optaLegacyId', 'fibaId', 'vesselId','statsEngineId'), value represents the identifier. The property also allows filtering by specific external system identifiers. For example '?filter=externalIds.optaId[equals]:12345' to filter entities with a specific Opta ID.
    CreateGroup:
      type: object
      required:
      - name
      - seasonId
      - type
      properties:
        name:
          type: string
          description: Name of the group.
          title: Group name
        competitors:
          type: array
          description: Array of competitors to be added to the group.
          title: Competitors
          items:
            type: integer
            description: Competitors which are associated with the group.
            title: Competitors
        type:
          type: string
          description: "The type of group. 0 = Conference \n1 = Division"
          title: Type
        seasonId:
          type: integer
          format: int64
          description: The ID of the season the group belongs to.
          title: Season Id
        parentGroupId:
          type: integer
          format: int64
          description: The ID of the parent group to which posted group belongs.
          title: Parent Group Id
        metadataProperties:
          type: array
          description: In order to retrieve allowed metadata properties with their values execute get request on this path - /sports/{id}/group/metadata
          title: metadataProperties
          items:
            $ref: '#/components/schemas/JsonbModelViewModel'
      title: Create Group Model
      description: This model should be used to create a group object.
    UpdateGroup:
      type: object
      required:
      - competitors
      - id
      - name
      - seasonId
      - type
      properties:
        id:
          type: integer
          format: int64
          description: The ID of the group.
          title: Group Id
        name:
          type: string
          description: Name of the group.
          title: Group name
        competitors:
          type: array
          description: Array of competitors to be added to the group.
          title: Competitors
          items:
            type: integer
            description: Competitors which are associated with the round.
            title: Competitors
        type:
          type: string
          description: "The type of group. 0 = Conference \n1 = Division"
          title: Type
        seasonId:
          type: integer
          format: int64
          description: The ID of the season the group belongs to.
          title: Season Id
        metadataProperties:
          type: array
          description: In order to retrieve allowed metadata properties with their values execute get request on this path - /sports/{id}/group/metadata
          title: metadataProperties
          items:
            $ref: '#/components/schemas/JsonbModelViewModel'
      title: Update Group Model
      description: This model should be used to update a group object.
    ErrorModel:
      type: object
      properties:
        code:
          type: integer
          format: int32
        message:
          type: string
        error:
          $ref: '#/components/schemas/Error'
    JsonbModel:
      type: object
      properties:
        name:
          type: string
        value:
          type: string
        isDeleted:
          type: boolean
    BadRequestModel:
      type: object
      properties:
        messages:
          type: array
          items:
            type: string
    ErrorDuplicateModel:
      type: object
      properties:
        messages:
          type: array
          items:
            type: string
        geniusSportsConflictId:
          type: string
          description: This is the official genius sports ID, which you have conflict with.
    AcceptedModel:
      type: object
      properties:
        messages:
          type: array
          items:
            type: string
    GroupResponseModelHATEOASReponseModel:
      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/GroupResponseModel'
        self:
          type: string
        previous:
          type: string
        next:
          type: string
        first:
          type: string
        last:
          type: string
    HALEmbededResponse:
      type: object
      required:
      - id
      - name
      - ref
      properties:
        id:
          type: integer
          format: int64
        name:
          type: string
        externalIds:
          $ref: '#/components/schemas/ExternalIdsViewModel'
        ref:
          type: string
    JsonbModelViewModel:
      type: object
      required:
      - name
      properties:
        name:
          type: string
          description: Name of the property.
          title: Property name
        value:
          type: string
          description: Value of the property.
          title: Property value
      title: Create/Update Property Model
      description: This model should be used to create or update single property value for specific property name for specific model.
    GroupResponseModel:
      type: object
      required:
      - createdOn
      - id
      - name
      - season
      - type
      - updatesCount
      properties:
        id:
          type: integer
          format: int64
        createdOn:
          type: string
          format: date-time
        modifiedOn:
          type: string
          format: date-time
        updatesCount:
          type: integer
          format: int32
        metadataProperties:
          type: array
          description: In order to retrieve allowed metadata properties with their values execute get request on this path - /sports/{id}/group/metadata
          items:
            $ref: '#/components/schemas/JsonbModel'
        name:
          type: string
        type:
          type: string
          description: Conference = 0, Division = 1
        season:
          $ref: '#/components/schemas/HALEmbededResponse'
        round:
          $ref: '#/components/schemas/HALEmbededResponse'
        parentGroup:
          $ref: '#/components/schemas/HALEmbededResponse'
    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