swagger: '2.0' info: description: "

Video Streaming API

\n

The video streaming API is used by customers to:

\n\n

This API does not deliver the video stream itself, it only tells what are the specific parameters for streaming a given
\nfixture. It is up to the users of this API to configure a video player with the streaming parameters.
\nThis API must never be called from end-user browser/client code. Instead, the API should be integrated into server-side
\nsystems.

\n

Domain model

\n

The diagram below illustrates the main objects exposed in the API and their relationships:

\n

\"uml

\n

Fixtures

\n

Fixtures are the main objects in the API. They encapsulate video streaming information for a given GeniusSports fixture.
\nOne fixture contains basic information such as the Genius fixture ID, name, start time and phase (see below), as well as
\na list of available LiveStreams to get video from.

\n

The phase of a fixture is defined by the state-machine:

\n

\"uml

\n

where:

\n\n

Live streams and deliveries

\n

A LiveStream represents one video feed for a given fixture. Tipically, a fixture will only have one stream
\navailable, however the API is designed to support several streams for the same fixture. Within each live stream, video
\ncan be delivered on several transport protocols (HLS, DASH, etc), described by the StreamDeliveries object.

\n

The StreamDeliveries object defines the sources for delivering the stream on a given transport protocol. Currently,
\nHLS and DASH are supported. For each protocol, there can be several sources serving the video content (e.g., primary and
\nbackup CDN).

\n

Each transport protocol defines its own {Protocol}Delivery object containing protocol-specific information.

\n

Currently, the liveStreams capability is offered while a given fixture is in the IN_PLAY phase. After that,
\nthe liveStreams becomes empty.

\n

VOD streams and delivery

\n

A VodStream represents the recording of a successfully completed fixture. The recording occurs after the fixture is
\ncompleted and transitions to the RESULTED phase. Internally, the recording is processed and becomes available to the
\nAPI after some period of time. During this processing, the API will return an empty vodStreams array. Currently,
\nonly HLS recordings are supported, and shares the HLSDelivery type definition.

\n

Permissions

\n

Each live and VOD stream includes a list of permissions. These permissions encapsulates the licensing conditions to
\nstream content. In order to play a stream, viewers must fully comply with at least one permission.

\n

Each permission object is defined by three attributes:

\n\n

The JSON example below illustrates a list of permissions:

\n\n
{\n  "permissions": [\n    {\n      "device": "DESKTOP",\n      "maxPlayerSizePercentage": 40,\n      "region":\
    \ "GB"\n    },\n    {\n      "device": "MOBILE",\n      "maxPlayerSizePercentage": 100,\n      "region": "IT"\n    },\n    {\n      "device": "TABLET",\n      "maxPlayerSizePercentage": 50,\n      "region": "IT"\n    }\n  ]\n}\n
\n\n

DMAs

\n

Each live and VOD stream includes a list of dmas. This list encapsulates the licensing conditions to stream content
\nin some DMAs (Designated Market Area) inside the United States. In order to play a stream, the viewer must be in one of
\nthe alllowed areas.

\n

Each DmaPermission object is defined by just one attribute:

\n\n

The JSON example below illustrates a list of dmas:

\n\n
{\n  "dmas": [\n    {\n      "dma": "501"\n    },\n    {\n      "dma": "811"\n    }\n  ]\n}\n
\n\n

Backend integration

\n

Base url

\n

The base URL for the API is https://api.geniussports.com/Video-v3/{STAGE}. where {STAGE} can be one of:

\n\n

Authentication

\n

Authentication must be performed using
\nGenisSports Authentication API.
\nFor UAT and PRODPRM stages, one should authenticate using the PROD stage, as:

\n
curl -H ‘Content-Type: application/json’ -X POST -d ‘{"user":"USERNAME","password":"YOUR_NEW_PASS"}’ https://api.geniussports.com/Auth-v1/PROD/login\n
\n\n

On the first usage of the login API, either for the video API or any other GeniusSports API, it is required to change
\nthe password, as:

\n
curl -H ‘Content-Type: application/json’ -X POST -d ‘{"user":"USERNAME","password":"PASSWORD", "newpass":"SET_YOUR_PASS"}’ https://api.geniussports.com/Auth-v1/PROD/login\n
\n\n

Upon sucessful authentication, the JSON response will contain an IdToken attribute. The value of this attribute must
\nbe passed on every call to the video API as an Authorization header.

\n

Authorization

\n

Each API call requires two headers to for authentication and authorization:

\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
HeaderValue
AuthorizationIdToken obtained in the authentication call
x-api-keyA unique API key. A GeniusSports account manager should provide this during the onbarding process. Use the apropriate key according to the target environment (UAT, PRODPRM)
\n

Fixture schedule

\n

The endpoints:

\n\n

can be used to get the full schedule of available fixtures or just one of them, provided its Genius fixture ID.

\n

The full schedule endpoint offers\ \ several query parameters to filter the returned fixtures, examples include:

\n\n

bash\n curl -X GET https://api.geniussports.com/Video-v3/UAT/fixtures?bookingStatus=BOOKED \\\n -H \"accept: application/json\" \\\n -H \"x-api-key: environment_token\" \\\n -H \"Authorization: `IdToken`”

\n\n

bash\n curl -X GET https://api.geniussports.com/Video-v3/UAT/fixtures?bookingStatus=UNBOOKED \\\n -H \"accept: application/json\" \\\n -H \"x-api-key: environment_token\" \\\n -H \"Authorization: `IdToken`”

\n\n

bash\n curl -X GET https://api.geniussports.com/Video-v3/UAT/fixtures?bookingStatus=BOOKED&fromDate=2021-07-02T07:00:00Z&toDate=2021-07-10T09:00:00Z \\\n -H \"accept: application/json\" \\\n -H \"x-api-key: environment_token\" \\\n -H \"Authorization: `IdToken`”

\n

The JSON below is an example of the response for the /fixtures/ endpoint. It contains the details of the
\nfixture 1300290721, which has one liveStream avaliable in HLS delivered through Akamai:

\n
{\n  "data": [\n    {\n      "id": 1300290721,\n      "name": "Team A v Team B",\n      "phase": "PRE_MATCH",\n      "bookingStatus": "BOOKED",\n      "startAt": "2021-07-29T13:00:00Z",\n      "competitionId": "9530",\n      "competitionName": "Test Comp",\n      "sportId": 10,\n      "sportName": "Football",\n      "liveStreams": [\n        {\n          "id": "c8ed9f88",\n          "permissions": [],\n          "dmas": [],\n          "deliveries": {\n            "hls": [\n              {\n                "id": "AKAMAI"\n              }\n            ],\n            "dash": []\n          }\n        }\n      ]\n    }\n  ]\n}\n
\n\n

Deprecation Notice for /fixtures

\n

The permissions field in the liveStreams object is now deprecated for the /fixtures endpoint.
\nPlease update your process to no longer rely on this field.

\n

To retrieve permissions, use the GET /fixtures/{id} endpoint, which will continue to provide permissions on a per-fixture basis.

\n\n

Update your integration to avoid issues moving forward.

\n

In case you still want to get the permissions in the /fixtures endpoint you should use the queryParam
\nshowPermissions=true, because by default the value is false and the permissions will not be shown.

\n

This is a temporary solution to deprecate the permissions and dmas field of the /fixtures endpoint, the idea is
\nthat this information is obtained from the /fixtures/{id} endpoint and that the /fixtures endpoint works more like
\na schedule to know which fixtures are coming and the /fixtures/{id} endpoint presents specific information of the
\nfixture including the necessary information to consume the streaming parameters.

\n
  curl -X GET https://api.geniussports.com/Video-v3/UAT/fixtures?showPermissions=true\\\n    -H\
    \  "accept: application/json" \\\n    -H "x-api-key: environment_token" \\\n    -H "Authorization: `IdToken`” \n
\n\n

It is important to mention that using the queryParam=true will automatically change the pagination limit to 50
\nfixtures per page, in case the limit used is less than 50, the limit of fixtures per page will be maintained.

\n\n
{\n    "paging": {\n        "cursors": {\n            "after": "12345",\n            "before": "12395"\n        },\n        "previous": "https://api.geniussports.com/Video-v3/UAT/fixtures?before=12395&limit=50&showPermissions=true",\n        "next": "https://api.geniussports.com/Video-v3/UAT/fixtures?after=12345&limit=50&showPermissions=true"\n    }\n}\n
\n\n\n
{\n    "paging": {\n        "cursors": {\n            "after": "12345",\n            "before": "12395"\n        },\n        "previous": "https://api.geniussports.com/Video-v3/UAT/fixtures?before=12395&limit=50&showPermissions=true",\n        "next": "https://api.geniussports.com/Video-v3/UAT/fixtures?after=12345&limit=50&showPermissions=true"\n    }\n}\n
\n\n\n
{\n    "paging": {\n        "cursors": {\n            "after": "12345",\n            "before": "12342"\n        },\n        "previous": "https://api.geniussports.com/Video-v3/UAT/fixtures?before=12342&limit=3&showPermissions=true",\n        "next": "https://api.geniussports.com/Video-v3/UAT/fixtures?after=12345&limit=3&showPermissions=true"\n    }\n}\n
\n\n\n
{\n    "paging": {\n        "cursors": {\n            "after": "12345",\n            "before": "12145"\n        },\n        "previous": "https://api.geniussports.com/Video-v3/UAT/fixtures?before=12145&limit=200&showPermissions=false",\n        "next": "https://api.geniussports.com/Video-v3/UAT/fixtures?after=12345&limit=3&showPermissions=false"\n    }\n}\n
\n\n

Request the region list

\n

Call this resource:

\n

GET /regions

\n

This endpoint can be used to get all the territories used by the video API. The response contains a list of continents,
\na list of regions and a list of the DMAs (Designated Market Areas) inside the United States.

\n

Example of a valid request:

\n
curl -X GET https://api.geniussports.com/Video-v3/UAT/regions \\\n  -H  "accept: application/json" \\\n  -H "x-api-key: environment_token" \\\n  -H "Authorization: `IdToken`”\n
\n\n

The following example response contains a subset of each of the components of the real response:

\n
{\n  "continents": [\n    {\n      "code": "AF",\n      "name": "Africa"\n    },\n    {\n      "code": "AS",\n      "name": "Asia"\n\
    \    }\n    ...\n  ],\n  "regions": [\n    {\n      "code": "AD",\n      "name": "Andorra",\n      "continent": "EU"\n    },\n    {\n      "code": "AE",\n      "name": "United Arab Emirates",\n      "continent": "AS"\n    },\n    ...,\n    {\n      "code": "US_AL",\n      "name": "United States - Alabama",\n      "continent": "NA"\n    },\n    {\n      "code": "US_AK",\n      "name": "United States - Alaska",\n      "continent": "NA"\n    },\n    ...\n  ],\n  "dmas": [\n    {\n      "code": "500",\n      "cities": [\n        "Portland",\n        "Auburn"\n      ],\n      "regions": [\n        "US_ME",\n        "US_NH"\n      ]\n    },\n    {\n      "code": "501",\n      "cities": [\n        "New York"\n      ],\n      "regions": [\n        "US_CT",\n        "US_NJ",\n        "US_NY",\n        "US_PA"\n      ]\n    },\n    ...\n  ]\n}\n
\n\n

Request streaming parameters

\n

Live stream

\n

The figure below illustrates the process to obtain streaming parameters to play a given fixture:

\n

\"uml

\n

The request is checked against the permissions for the particular fixture to see if streaming is allowed. If the check
\nis successful, the response will contain a plaback URL, a CDN access token, and, optionally, some DRM configuration.
\nThis data must the used to configure the video player of the end-user willing to watch the stream.

\n

The endpoints:

\n\n

can be used to get live streaming parameters for HLS or DASH for a given GeniusSports fixture. The {id}, {streamId},
\nand {deliveryId} correspond to the fixture, live-stream and delivery ID provided by the Fixture object in any of
\nthe /fixtures endpoints.

\n

The request body has the form:

\n
{\n  "endUserSessionId": "<some unique end-user identifier>",\n  "region": "CO",\n  "device": "DESKTOP"\n}\n
\n\n

where region must be one of the region codes returned by the /regions/ endpoint; device must be one of the allowed
\ndevice types, and endUserSessionId is a unique, non personally identifiable ID, representing the end-user.

\n

Example of a valid request:

\n
curl --location --request POST 'https://api.geniussports.com/Video-v3/UAT/fixtures/1630290721/live-streams/c8ed9f88/deliveries/hls/AKAMAI' \\ \n  --header 'accept: application/json' \\ \n  --header 'Content-Type: application/json' \\ \n  --header 'x-api-key: environment_token ' \\ \n  --header 'Authorization:  `IdToken` ' \\ \n  --data-raw '{ \n    "endUserSessionId": "1d34aacd-f0ab-4d72-b9ce-14a80233de23", \n    "region": "CO", \n    "device": "DESKTOP" \n  }' \n
\n\n

And the response could be like this:

\n
{\n  "url": "https://stream-url/path/playlist.m3u8",\n  "expiresAt": "2021-12-12T09:12:00",\n  "token": "st=1627648558~exp=1627649158~acl=*~id=1d34aacd-f0ab-4d72-b9ce-14a80233de23~data=reg:CO~hmac=498c6a4842a4176dfe65b067b636a857eb9aab25700f78a13b44e5d510517ebd",\n  "drm": {\n    "fairplay": "http://...",\n    "fairplayCertificate": "https://...",\n    "playready": "https://...",\n    "widevine": "https://..."\n  }\n}\n
\n\n

This sample response includes a URL, an expiration date and a token. The received token should be appended to the URL as
\na query string parameter when the player makes the request for content to the CDN. In this example the DRM object is not
\nnull, so DRM is required for streaming.

\n

Viewer Information Endpoint

\n

Viewer location and device are important pieces of data for selecting the right Livestream for a given end-user.
\nThe Video-API validates that the permissions for each Livestream are met and hence, correct data passing to the API is
\ncrucial. To this end, there is an HTTP endpoint that returns the location and device type when called from end-users’
\ndevices.

\n\n

Example of the response from a Desktop computer located in New York(USA)

\n
{\n  "region": "US_NY",\n  "dma": "501",\n  "device": "DESKTOP"\n}\n
\n\n

This endpoint return information such as the region, the\ \ dma and the user device from which the
\nrequest is made. The region and device are used in the livestream permissions and the dma
\nfield is mentioned in the list of valid dmas for each livestream. This information will be useful to choose the correct
\nlivestream and, to send the necessary fields in the request of the streaming parameters.

\n
Use case example
\n

Consider two users of your website, using the endpoint https://viewer-data.production.geniuslive.geniussports.com
\nwe obtain that:

\n\n
{\n  "region": "US_CA",\n  "dma": "803",\n  "device": "DESKTOP"\n}\n
\n\n\n
{\n  "region": "JP",\n  "dma": "",\n  "device": "MOBILE"\n}\n
\n\n

Consider the response for fixture 1234 that looks like:

\n
{\n  "id": 1234,\n  "name": "A v B ON DEMAND TEST On Demand",\n  "phase": "IN_PLAY",\n  "bookingStatus": "BOOKED",\n  "startAt": "2023-08-30T17:50:00Z",\n  "competitionId": "9530",\n  "competitionName": "TEST COMPETITION",\n  "sportId": 10,\n  "sportName": "Football",\n  "liveStreams": [\n    {\n      "id": "Livestream1",\n      "permissions": [\n        {\n          "device": "DESKTOP",\n          "maxPlayerSizePercentage": 100,\n          "region": "US_CA"\n        },\n        {\n          "device": "DESKTOP",\n          "maxPlayerSizePercentage": 100,\n          "region": "US_NY"\n        }\n      ],\n      "dmas": [\n        {\n          "dma": "500"\n        },\n        {\n          "dma": "803"\n        }\n      ],\n      "deliveries": {\n        "hls": [\n          {\n            "id": "Akamai"\n          }\n        ],\n        "dash": [\n          {\n            "id": "Akamai"\n          }\n        ]\n      }\n    },\n    {\n      "id": "Livestream2",\n      "permissions": [\n        {\n          "device": "MOBILE",\n          "maxPlayerSizePercentage": 100,\n          "region": "JP"\n        },\n        {\n          "device": "DESKTOP",\n          "maxPlayerSizePercentage": 100,\n          "region": "GB"\n        }\n      ],\n      "dmas": [ ],\n      "deliveries": {\n        "hls": [\n          {\n            "id": "Akamai"\n          }\n        ],\n        "dash": [\n          {\n            "id": "Akamai"\n          }\n        ]\n      }\n    }\n  ],\n  "vodStreams": []\n}\n
\n\n

For this fixture we have 2 livestreams, Livestream1 is for users within US_CA and US_NY that are
\nusing a DESKTOP computer, the livestream is available only if the users are also located in the DMAs 500 and 803.
\nThen, Livestream2 is for users located in Japan(JP) using MOBILE devices, and for the nited Kingdom(GB) for
\nDESKTOP computers.

\n\

For user_1 the livestream that should be used is the livestream1 since it complies with the permission to be in US_CA
\nusing a DESKTOP computer and it is also in one of the DMAs allowed for this livestream, dma 803.

\n

It is important to send the correct region and device values for user_1 when obtaining the streaming parameters for the
\nlivestream1.

\n\n

The request body should contain the exact information already extracted from the viewer-data endpoint:

\n
{\n  "endUserSessionId": "<some unique end-user identifier>",\n  "region": "US_CA",\n  "device": "DESKTOP"\n}\n
\n\n

For the user_2 the livestream that should be used is the livestream2 since it complies with the permission to be in
\nJapan JP using a MOBILE device, in this case there are no DMAs because we only support and validate DMAs inside
\nthe US

\n

It is important to send the correct region and device values for user_1 when obtaining the streaming parameters for the
\nlivestream2.

\n\n

The request body should contain the exact information already extracted from the viewer-data endpoint:

\n
{\n  "endUserSessionId": "<some unique end-user identifier>",\n  "region": "JP",\n  "device": "MOBILE"\n}\n
\n\n

NOTE: if any of the 2 users send an erroneous field in the body of the request such as the region or the device, it is
\npossible that the video-api responds with a (403 access denied) mentioning that they do not have permissions to view
\nthat livestream.

\n

VOD stream

\n

Accessing VOD stream parameters follows the same process as live stream:

\n

\"uml

\n

Currently, only HLS is supported through the endpoint:

\n\n

where {id}, {streamId}, and {deliveryId} correspond to the fixture, live-stream and delivery ID provided by the
\nFixture object in any of the /fixtures endpoints.

\n

The request body has the same structure as the one used for live streaming:

\n
{\n  "endUserSessionId": "<some unique end-user identifier>",\n  "region": "CO",\n  "device": "DESKTOP"\n}\n
\n\n

where region must be one of the region codes returned by the /regions/ endpoint, device must be one of the allowed
\ndevice types, and endUserSessionId is a unique, non personally identifiable ID, representing the end-user.

\n

This data is checked against the permissions for the particular fixture to see if streaming is allowed. If the check is
\ncompleted successfully, the response will contain the data needed for configuring a video-player to stream the content.

\n

Example of a valid request:

\n
curl --location --request POST 'https://api.geniussports.com/Video-v3/UAT/fixtures/1630290721/vod-streams/c8ed9f88/deliveries/hls/AKAMAI' \\ \n--header 'accept: application/json' \\ \n--header 'Content-Type: application/json' \\ \n--header 'x-api-key: environment_token ' \\ \n--header 'Authorization:  `IdToken` ' \\ \n--data-raw '{ \n  "endUserSessionId": "1d34aacd-f0ab-4d72-b9ce-14a80233de23", \n  "region": "CO", \n  "device": "DESKTOP" \n}' \n
\n\n

And the response could be like this:

\n
{\n  "url": "https://stream-url/path/playlist.m3u8",\n  "expiresAt": "2021-12-12T09:12:00",\n  "token": "st=1627648558~exp=1627649158~acl=*~id=1d34aacd-f0ab-4d72-b9ce-14a80233de23~data=reg:CO~hmac=498c6a4842a4176dfe65b067b636a857eb9aab25700f78a13b44e5d510517ebd",\n  "drm": null\n} \n
\n\n

In this case, the response includes the playback URL, an expiration date and a token. The received token should be
\nappended to the URL as a query string parameter when the player makes the request for content to the CDN. The DRM object
\nis null, indicating no DRM is required for this stream.

\n

Video Player integration

\n

Using the CDN access token

\n

The access token returned by the streaming parameters endpoint of the Video API should be attached as a query string
\nparameter to the URL for the manifest/index file. Consider a response from
\nthe /fixtures/{id}/live-streams/{streamId}/deliveries/hls/{deliveryId} endpoint:

\n
{\n  "url": "https://stream-url/path/playlist.m3u8",\n  "expiresAt": "2021-12-12T09:12:00",\n  "token": "st=1627648558~exp=1627649158~acl=*~id=1d34aacd-f0ab-4d72-b9ce-14a80233de23~data=reg:CO~hmac=498c6a4842a4176dfe65b067b636a857eb9aab25700f78a13b44e5d510517ebd",\n  "drm": {\n    "fairplay": "http://...",\n    "fairplayCertificate": "https://...",\n    "playready": "https://...",\n    "widevine": "https://..."\n  }\n} \n
\n\n

The final URL to request the manifest to the CDN will be:

\n
https://stream-url/path/playlist.m3u8?st=1627648558~exp=1627649158~acl=*~id=1d34aacd-f0ab-4d72-b9ce-14a80233de23~data=reg:CO~hmac=498c6a4842a4176dfe65b067b636a857eb9aab25700f78a13b44e5d510517ebd\n\
    
\n\n

Using the CDN session token

\n

Session tokens are created by the CDN and are exchanged with the player during the streaming. For HLS, this session
\ntoken comes embedded in the master manifest. For DASH, the session token comes in a cookie, therefore the player must be
\nconfigured to send cookies in the request. However, some devices and browsers might not be configured to support
\ncookies, so it is important to validate this before selecting the stream delivery to play.

\n

Using DRM

\n

DRM (Digital Rights Management) is a method for adding security to digital content and prevent unauthorized use and
\npiracy. Some competitions require DRM for playback. For those cases, the video will be encrypted and the video player
\nmust retrieve extra data to decrypt it.

\n

Upon a call to the streaming parameters endpoint, the response might include a drm object. If this object is null or
\nnot present, then DRM is not required for that delivery. Otherwise the DRM object contains a list of URLs for the
\ndecryption keys, one url for each supported technology. The player needs to select the technology that better suits the
\nclient platform, then get the key using the URL, and finally use that key to decrypt the content during the session.

\n

Consider the following response:

\n
{\n  "url": "https://stream-url/path/playlist.m3u8",\n  "expiresAt": "2021-12-12T09:12:00",\n  "token": "st=1627648558~exp=1627649158~acl=*~id=1d34aacd-f0ab-4d72-b9ce-14a80233de23~data=reg:CO~hmac=498c6a4842a4176dfe65b067b636a857eb9aab25700f78a13b44e5d510517ebd",\n  "drm": {\n    "fairplay": "http://...",\n    "fairplayCertificate": "https://...",\n    "playready": "https://...",\n    "widevine": "https://..."\n  }\n}\n
\n\n

There are three technologies supported for DRM:

\n\n

If the selected video player library supports DRM, then it is quite probable that users of the library only have to pass
\nit the urls of decryption keys, and the player library will take the decision of which to use according to the platform.
\nOtherwise, it is possible to create such logic based on this table.

\n
\n

Note: Testing DRM on iOS requires the use of real devices, as DRM functionality does not work in simulators.
\nEnsure you have access to an iPhone, iPad, or Apple TV to properly validate DRM playback.

\n
\n

The following are the DRM systems enabled by each streaming protocol:

\n\n

That means the streaming response from Video API will only show you the relevant DRM information by protocol.

\n

However, if you receive an HLS stream with all three DRM systems (Fairplay, Playready and Widevine), then HLS can be
\nplayed on any platform.

" version: 3.4.1 title: Video-v3 contact: name: GeniusLive integration manager email: videointegrationgroup@geniussports.com host: api.geniussports.com basePath: /Video-v3/PRODPRM tags: - name: fixtures description: The fixtures API - name: regions description: The regions API schemes: - https paths: /fixtures: get: tags: - fixtures description: Returns the list of available fixtures for streaming. operationId: getFixtures produces: - application/json - application/problem+json parameters: - name: toDate in: query description: End date of the window where the fixtures retreived will be filtered, this is inclusive. required: false type: string - name: competitionIds in: query description: A comma-separated list of competition IDs to filter by. If a competition ID is not present, it will display all fixtures regardless of competition ID value. required: false type: string - name: limit in: query description: This is the maximum number of objects that may be returned. A query may return fewer than the value of limit due to filtering. Do not depend on the number of results being fewer than the limit value to indicate that your query reached the end of the list of data, use the absence of next instead. For example, if you set limit to 10 and 9 results are returned, there may be more data available, but one item was removed due to filtering. In all cases, the API returns the correct pagination links. required: false type: string - name: showPermissions in: query description: Flag used to request permissions for each of the fixtures required: false type: string - name: before in: query description: This is the cursor that points to the start of the page. required: false type: string - name: after in: query description: This is the cursor after which to start returning data. required: false type: string - name: sportIds in: query description: A comma-separated list of sport IDs to filter by. If a sport ID is not present, it will display all fixtures regardless of sport ID value. required: false type: string - name: phases in: query description: 'A comma-separated list of fixture phases to filter by. If a phase is not present, it will display all fixtures regardless of phase value. The values must be one of: {PRE_MATCH, IN_PLAY, RESULTED}.' required: false type: string - name: bookingStatus in: query description: 'The booking status to filter by. If not present, it will display all available fixtures. The value must be one of: {BOOKED, UNBOOKED}.' required: false type: string - name: fromDate in: query description: Start date of the window where the fixtures retrieved will be filtered, this is inclusive and the difference between the start date and the end date should not be more than 10 days. required: false type: string responses: '200': description: A page of fixtures. schema: $ref: '#/definitions/FixturesPage' '400': description: A base [RFC-7807](https://tools.ietf.org/html/rfc7807) error response. schema: $ref: '#/definitions/Problem' '401': description: A base [RFC-7807](https://tools.ietf.org/html/rfc7807) error response. schema: $ref: '#/definitions/Problem' '403': description: A base [RFC-7807](https://tools.ietf.org/html/rfc7807) error response. schema: $ref: '#/definitions/Problem' security: - CognitoPool: [] - api_key: [] /fixtures/{id}: get: tags: - fixtures description: Returns the information of a given fixture. operationId: getFixture produces: - application/problem+json - application/json parameters: - name: id in: path description: The Genius Sports fixture ID required: true type: string responses: '200': description: A fixture. schema: $ref: '#/definitions/Fixture' '400': description: A base [RFC-7807](https://tools.ietf.org/html/rfc7807) error response. schema: $ref: '#/definitions/Problem' '401': description: A base [RFC-7807](https://tools.ietf.org/html/rfc7807) error response. schema: $ref: '#/definitions/Problem' '403': description: A base [RFC-7807](https://tools.ietf.org/html/rfc7807) error response. schema: $ref: '#/definitions/Problem' '404': description: A base [RFC-7807](https://tools.ietf.org/html/rfc7807) error response. schema: $ref: '#/definitions/Problem' security: - CognitoPool: [] - api_key: [] /fixtures/{id}/live-streams/{streamId}/deliveries/dash/{deliveryId}: post: tags: - fixtures description: Creates the DASH streaming data for a given fixture, stream and delivery. For this, data about the end-user is required to compute whether or not it is authorized for streaming based on the licensing rules for this stream. operationId: createDASHStream consumes: - application/json produces: - application/problem+json - application/json parameters: - name: deliveryId in: path description: The source ID required: true type: string - name: id in: path description: The Genius Sports fixture ID required: true type: string - name: streamId in: path description: The stream ID required: true type: string - in: body name: DASHStreamRequest required: true schema: $ref: '#/definitions/DASHStreamRequest' responses: '200': description: DASH streaming parameters. schema: $ref: '#/definitions/DASHStreamResponse' '400': description: A base [RFC-7807](https://tools.ietf.org/html/rfc7807) error response. schema: $ref: '#/definitions/Problem' '401': description: A base [RFC-7807](https://tools.ietf.org/html/rfc7807) error response. schema: $ref: '#/definitions/Problem' '403': description: A base [RFC-7807](https://tools.ietf.org/html/rfc7807) error response. schema: $ref: '#/definitions/Problem' '404': description: A base [RFC-7807](https://tools.ietf.org/html/rfc7807) error response. schema: $ref: '#/definitions/Problem' security: - CognitoPool: [] - api_key: [] /fixtures/{id}/live-streams/{streamId}/deliveries/hls/{deliveryId}: post: tags: - fixtures description: Creates the HLS streaming data for a given fixture, stream and delivery. For this, data about the end-user is required to compute whether or not it is authorized for streaming based on the licensing rules for this stream. operationId: createHLSStream consumes: - application/json produces: - application/problem+json - application/json parameters: - name: deliveryId in: path description: The source ID required: true type: string - name: id in: path description: The Genius Sports fixture ID required: true type: string - name: streamId in: path description: The stream ID required: true type: string - in: body name: HLSStreamRequest required: true schema: $ref: '#/definitions/HLSStreamRequest' responses: '200': description: HLS streaming parameters. schema: $ref: '#/definitions/HLSStreamResponse' '400': description: A base [RFC-7807](https://tools.ietf.org/html/rfc7807) error response. schema: $ref: '#/definitions/Problem' '401': description: A base [RFC-7807](https://tools.ietf.org/html/rfc7807) error response. schema: $ref: '#/definitions/Problem' '403': description: A base [RFC-7807](https://tools.ietf.org/html/rfc7807) error response. schema: $ref: '#/definitions/Problem' '404': description: A base [RFC-7807](https://tools.ietf.org/html/rfc7807) error response. schema: $ref: '#/definitions/Problem' security: - CognitoPool: [] - api_key: [] /fixtures/{id}/live-streams/{streamId}/deliveries/srt/{deliveryId}: post: tags: - fixtures description: Returns the SRT url endpoint for the stream and delivery. operationId: createSRTStream consumes: - application/json produces: - application/problem+json - application/json parameters: - name: deliveryId in: path description: The source ID required: true type: string - name: id in: path description: The Genius Sports fixture ID required: true type: string - name: streamId in: path description: The stream ID required: true type: string - in: body name: SRTStreamRequest required: true schema: $ref: '#/definitions/SRTStreamRequest' responses: '200': description: SRT streaming parameters. schema: $ref: '#/definitions/SRTStreamResponse' '400': description: A base [RFC-7807](https://tools.ietf.org/html/rfc7807) error response. schema: $ref: '#/definitions/Problem' '401': description: A base [RFC-7807](https://tools.ietf.org/html/rfc7807) error response. schema: $ref: '#/definitions/Problem' '403': description: A base [RFC-7807](https://tools.ietf.org/html/rfc7807) error response. schema: $ref: '#/definitions/Problem' '404': description: A base [RFC-7807](https://tools.ietf.org/html/rfc7807) error response. schema: $ref: '#/definitions/Problem' security: - CognitoPool: [] - api_key: [] /fixtures/{id}/vod-streams/{streamId}/deliveries/hls/{deliveryId}: post: tags: - fixtures description: Returns the VOD URLs for a stream operationId: createHlsVod consumes: - application/json produces: - application/problem+json - application/json parameters: - name: deliveryId in: path description: The source ID required: true type: string - name: id in: path description: The Genius Sports fixture ID required: true type: string - name: streamId in: path description: The stream ID required: true type: string - in: body name: HLSStreamRequest required: true schema: $ref: '#/definitions/HLSStreamRequest' responses: '200': description: HLS streaming parameters. schema: $ref: '#/definitions/HLSStreamResponse' '400': description: A base [RFC-7807](https://tools.ietf.org/html/rfc7807) error response. schema: $ref: '#/definitions/Problem' '401': description: A base [RFC-7807](https://tools.ietf.org/html/rfc7807) error response. schema: $ref: '#/definitions/Problem' '403': description: A base [RFC-7807](https://tools.ietf.org/html/rfc7807) error response. schema: $ref: '#/definitions/Problem' '404': description: A base [RFC-7807](https://tools.ietf.org/html/rfc7807) error response. schema: $ref: '#/definitions/Problem' security: - CognitoPool: [] - api_key: [] /regions: get: tags: - regions description: Returns the list of all available geographic regions considered in this API. operationId: getRegions produces: - application/json - application/problem+json responses: '200': description: The regions response. schema: $ref: '#/definitions/RegionsResponse' '400': description: A base [RFC-7807](https://tools.ietf.org/html/rfc7807) error response. schema: $ref: '#/definitions/Problem' '401': description: A base [RFC-7807](https://tools.ietf.org/html/rfc7807) error response. schema: $ref: '#/definitions/Problem' '403': description: A base [RFC-7807](https://tools.ietf.org/html/rfc7807) error response. schema: $ref: '#/definitions/Problem' security: - CognitoPool: [] - api_key: [] securityDefinitions: CognitoPool: type: apiKey name: Authorization in: header x-amazon-apigateway-authtype: cognito_user_pools api_key: type: apiKey name: x-api-key in: header definitions: VodStream: type: object required: - deliveries - dmas - id - permissions properties: id: type: string description: The ID of this stream. permissions: type: array description: Permissions granted over this VOD-stream. items: $ref: '#/definitions/Permission' dmas: type: array description: Allowed DMAs over this VOD-stream. items: $ref: '#/definitions/DmaPermission' deliveries: type: object description: Contains the deliveries for each transport protocol supported by this stream. properties: dash: type: array items: $ref: '#/definitions/DASHDelivery' hls: type: array items: $ref: '#/definitions/HLSDelivery' required: - dash - hls description: List of deliveries that contains the VOD URLs of the requested stream FixturesPage: type: object required: - data - paging properties: data: type: array items: $ref: '#/definitions/Fixture' paging: $ref: '#/definitions/Paging' HLSStreamResponse: type: object required: - url properties: expiresAt: type: string format: date-time description: The expiration date of this token, expressed in UTC. url: type: string description: The live stream playback URL. token: type: string description: Token data to add to the user's session. drm: $ref: '#/definitions/DRM' HLSStreamRequest: type: object required: - device - endUserSessionId properties: endUserSessionId: type: string description: Not personally identifiable ID, depicting a single end user session on the customer side. Must be consistent for the length of a single end user (the viewer of the content), meaning each user viewing the content should have a single ID for the duration of their being logged in on the customer side. maxLength: 1024 device: $ref: '#/definitions/Device' region: type: string description: The geographic region from where the end-user is attemping to receive the video stream. This value must correspond to one of the regions returned by the `/regions` endpoint. LiveStream: type: object required: - deliveries - dmas - id - permissions properties: id: type: string description: The ID of this stream. permissions: type: array description: Permissions granted over this live-stream. items: $ref: '#/definitions/Permission' dmas: type: array description: Allowed DMAs over this live-stream. items: $ref: '#/definitions/DmaPermission' deliveries: type: object description: Contains the deliveries for each transport protocol supported by this stream. properties: hls: type: array items: $ref: '#/definitions/HLSDelivery' dash: type: array items: $ref: '#/definitions/DASHDelivery' srt: type: array description: 'SRT deliveries for this live-stream. This field is optional: when the stream has no SRT deliveries it is omitted from the response. When present, it is always an array (possibly empty). The field is never returned as `null`. ' items: $ref: '#/definitions/SRTDelivery' required: - dash - hls description: TODO DmaPermission: type: object required: - dma properties: dma: type: string description: The id of a Designated Market Area (DMA) description: Defines a Designated Market Area (DMA) Permission only in USA Permission: type: object required: - device - maxPlayerSizePercentage - region properties: device: $ref: '#/definitions/Device' maxPlayerSizePercentage: type: integer format: int32 description: The maximum player size, in percentage units, along the screen's horizontal axis. minimum: 0.0 maximum: 100.0 region: type: string description: The geographic region where this permission applies. Each coutry is identified by its alpha-2 code. description: Defines a permission for streaming content. DASHDelivery: type: object required: - id properties: id: type: string Dma: type: object required: - cities - code - regions properties: code: type: string description: The code of the Designated Market Area (DMA) cities: type: array description: The cities located in the DMA items: type: string regions: type: array description: The regions located in the DMA items: type: string BookingStatus: type: string description: 'The booking status of a given fixture. It must be one of: {BOOKED, UNBOOKED}' DASHStreamResponse: type: object required: - url properties: expiresAt: type: string format: date-time description: The expiration date of this token, expressed in UTC. url: type: string description: The live stream playback URL. token: type: string description: Token data to add to the user's session. drm: $ref: '#/definitions/DRM' Fixture: type: object required: - bookingStatus - competitionId - competitionName - id - liveStreams - name - phase - sportId - sportName - startAt - vodStreams properties: id: type: integer format: int64 description: The Genius Sports ID of this fixture name: type: string description: The name of the fixture phase: $ref: '#/definitions/FixturePhase' bookingStatus: $ref: '#/definitions/BookingStatus' startAt: type: string format: date-time competitionId: type: string description: The competition ID. It is a string to keep consistency with the type returned by Fixtures API. competitionName: type: string description: The competition name sportId: type: integer format: int32 description: The sport ID sportName: type: string description: The sport name liveStreams: type: array items: $ref: '#/definitions/LiveStream' vodStreams: type: array items: $ref: '#/definitions/VodStream' description: A live stream encapsulates video streaming information for a given GeniusSports fixture. It contains basic information such as Genius fixture ID, team names and sate, as well as a list of available *Stream* objects to get video from. HLSDelivery: type: object required: - id properties: id: type: string SRTStreamRequest: type: object FixturePhase: type: string description: 'The state of the fixture, it must be one of: {PRE_MATCH, IN_PLAY, RESULTED}.' RegionsResponse: type: object required: - continents - dmas - regions properties: continents: type: array description: The list of continents items: $ref: '#/definitions/Continent' regions: type: array description: The list of regions. items: $ref: '#/definitions/Region' dmas: type: array description: The list of DMAs. items: $ref: '#/definitions/Dma' Device: type: string description: 'The type of device making a request to play the content. It must be one of: {MOBILE, TABLET, DESKTOP, OTT}.' SRTStreamResponse: type: object required: - url properties: url: type: string description: The live stream SRT ingest URL. Paging: type: object required: - cursors properties: cursors: type: object description: Contains the pointers for the first and last items of this page. properties: after: type: string description: This is the cursor that points to the end of the page of data that has been returned. before: type: string description: This is the cursor that points to the start of the page of data that has been returned. previous: type: string description: The API endpoint that will return the previous page of data. If not included, this is the first page of data. next: type: string description: The API endpoint that will return the next page of data. If not included, this is the last page of data. description: Paging structure. DASHStreamRequest: type: object required: - device - endUserSessionId properties: endUserSessionId: type: string description: Not personally identifiable ID, depicting a single end user session on the customer side. Must be consistent for the length of a single end user (the viewer of the content), meaning each user viewing the content should have a single uuid for the duration of their being logged in on the customer side maxLength: 1024 device: $ref: '#/definitions/Device' region: type: string description: The geographic region from where the end-user is attemping to receive the video stream. This value must correspond to one of the regions returned by the `/regions` endpoint. Continent: type: object required: - code - name properties: code: type: string description: The continent code name: type: string description: The continent name Region: type: object required: - code - continent - name properties: code: type: string description: The region code name: type: string description: The region name continent: type: string description: The region continent SRTDelivery: type: object required: - id properties: id: type: string Problem: type: object properties: type: type: string format: uri description: 'An absolute URI that identifies the problem type. When dereferenced, it SHOULD provide human-readable documentation for the problem type (e.g., using HTML). ' title: type: string description: 'A short, summary of the problem type. Written in english and readable for engineers (usually not suited for non technical stakeholders and not localized); example: Service Unavailable ' status: type: integer format: int32 description: 'The HTTP status code generated by the origin server for this occurrence of the problem. ' minimum: 100.0 maximum: 600.0 exclusiveMaximum: true detail: type: string description: 'A human readable explanation specific to this occurrence of the problem. ' instance: type: string format: uri description: 'An absolute URI that identifies the specific occurrence of the problem. It may or may not yield further information if dereferenced. ' description: A Problem object according to https://datatracker.ietf.org/doc/html/rfc7807 DRM: type: object properties: widevine: type: string description: The Widevine URL. playready: type: string description: The Playready URL. fairplay: type: string description: The Fairplay URL. fairplayCertificate: type: string description: The Fairplay certificate URL. description: DRM configuration. x-amazon-apigateway-security-policy: TLS_1_0