DAZN API Reference¶
Technical reference for the DAZN APIs used by this panel, derived from the
Kodi plugin (plugin.video.dazn v1.4.27) and live-traffic analysis.
Endpoint Discovery¶
All API URLs are resolved dynamically from the DAZN startup endpoint. Never hardcode API paths — they change across regions and versions.
Startup¶
Response (truncated):
{
"Region": {
"Country": "it",
"Language": "it",
"isAllowed": true,
"CountryPortabilityStatus": "NotApplicable"
},
"ServiceDictionary": {
"Playback": {
"Versions": {
"5": { "ServicePath": "https://api.playback.indazn.com/v5/Playback" },
"6": { "ServicePath": "https://api.playback.indazn.com/v6/Playback" }
}
},
"EpgWithDateRange": {
"Versions": {
"6": { "ServicePath": "https://epg.discovery.indazn.com/eu/v6/epgWithDatesRange" }
}
},
"SignIn": { ... },
"RefreshAccessToken": { ... },
"Rail": { ... },
"Rails": { ... }
}
}
The panel picks the newest version whose ServicePath is reachable (HTTP
status != 404) and caches the result in api_endpoints.json.
Authentication¶
Sign In¶
POST {api_endpoint_signin}
Content-Type: application/json
{
"Email": "user@example.com",
"Password": "password",
"Platform": "web",
"DeviceId": "uuid-v4"
}
Response:
Refresh Token¶
POST {api_endpoint_refresh_access_token}
Authorization: Bearer {token}
Content-Type: application/json
{
"DeviceId": "uuid-v4"
}
EPG (Schedule)¶
EPG with Date Range¶
Response:
{
"StartDate": "2026-03-18",
"Tiles": [
{
"Title": "Inter vs Milan",
"Description": "Serie A - Matchday 28",
"Start": "2026-03-18T20:45:00Z",
"End": "2026-03-18T22:45:00Z",
"AssetId": "abc123def456",
"EventId": "evt789",
"Type": "Live",
"IsLinear": false,
"VerifyAge": false,
"PinProtect": false,
"Sport": {
"Id": "289u5typ3vp4ifwh5thalohmq",
"Title": "Football"
},
"Competition": {
"Id": "1r097lpxe0xn03ihb7wi98kao",
"Title": "Serie A TIM"
},
"Image": {
"Id": "img123",
"ImageType": "image-landscape",
"ImageMimeType": "webp"
}
}
]
}
Key Fields in Tiles¶
| Field | Type | Description |
|---|---|---|
AssetId |
string | Unique stream identifier — passed to Playback API |
EventId |
string | Event identifier |
Type |
string | Live, ComingUp, CatchUp, Highlights, Condensed |
IsLinear |
bool | true = linear channel, false = event-specific stream |
VerifyAge |
bool | Requires age-verification PIN |
Sport.Id |
string | DAZN sport category ID |
Competition.Id |
string | DAZN competition/league ID |
Playback¶
Get Stream Details¶
GET {api_endpoint_playback}
?AssetId=abc123def456
&PlayerId=@dazn/peng-html5-core/web/web
&DrmType=WIDEVINE
&Platform=web
&Format=MPEG-DASH
&LanguageCode=it
&Model=unknown
&Secure=true
&Manufacturer=unknown
&PlayReadyInitiator=false
&Capabilities=mta
&MtaLanguageCode=it
&AppVersion=0.104.0
Authorization: Bearer {token}
Response:
{
"PlaybackDetails": [
{
"ManifestUrl": "https://dca-fs-live-dazn-cdn.dazn.com/.../stream.mpd?channel=...",
"LaUrl": "https://drm.playback.indazn.com/widevine/v1/license?...",
"CdnName": "dca-fs-live",
"CdnToken": {
"Name": "hdnts",
"Value": "exp=...~acl=...~hmac=..."
}
},
{
"ManifestUrl": "https://dcb-ak-livedazn.akamaized.net/.../stream.mpd?...",
"LaUrl": "https://drm.playback.indazn.com/widevine/v1/license?...",
"CdnName": "dcb-ak-live",
"CdnToken": null
}
]
}
CdnToken Handling¶
Some CDNs require an authentication token appended to the manifest URL.
When CdnToken is present:
If the ManifestUrl already contains query parameters, use & instead of ?.
Playback Parameters Reference¶
| Parameter | Value | Notes |
|---|---|---|
PlayerId |
@dazn/peng-html5-core/web/web |
Required, identifies web player |
DrmType |
WIDEVINE |
Also supports PLAYREADY |
Platform |
web |
|
Format |
MPEG-DASH |
|
Secure |
true |
|
Model |
unknown |
|
Manufacturer |
unknown |
|
PlayReadyInitiator |
false |
|
Capabilities |
mta |
Multi-track audio |
AppVersion |
0.104.0 |
Must match current DAZN web app version |
Age Verification¶
For events with VerifyAge=true, submit the PIN before requesting playback:
POST https://youth-protect.discovery.indazn.com/v2/pin
Authorization: Bearer {token}
Content-Type: application/json
{"pin": "1234"}
Then add the header x-age-verification-pin: 1234 to the Playback request.
Widevine DRM Flow¶
- Fetch the MPD manifest from
ManifestUrl - Extract the PSSH box (base64) from
<ContentProtection>element withschemeIdUri="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed" - Send PSSH to
LaUrlusing pywidevine CDM to obtain decryption keys - Keys are in
KID:KEYhex format (e.g.,55d06fce...:d26e9211...)
Image URLs¶
Event images use the DAZN image CDN:
https://image.discovery.indazn.com/eu/v3/eu/none/{ImageId}/fill/none/top/none/85/{width}/{height}/{mime}/image
Common sizes: 720x404 (thumbnail), 1280x720 (fanart), 334x501 (portrait).
Known DAZN Sport IDs¶
| Sport | DAZN ID |
|---|---|
| Football | 289u5typ3vp4ifwh5thalohmq |
| American Football | 9ita1e50vxttzd1xll3iyaulu |
| MMA | 53wethrd3bk01jif9w7xvong6 |
| Rugby | 59zkrmozaazlyumpmqw5hpdp7 |
| Kickboxing | 5rocwbb1fbfub9yh4yrff8khj |
| Wrestling | 50dsk39gxuwwbkss8k2e24mca |
| Basketball | ayp4nebmprfbvzdsisazcw74y |
| Boxing | 2x2oqzx60orpoeugkd754ga17 |
| Curling | 1mqpvah87jre0wzq2p6u3m5xj |
| Volleyball | 8e3wn0w02lghre5k1hdokb6q9 |
| Darts | 3e7e88y5uktwvipmq7gh0407s |
| Padel | 5huzw2y5bnpo9yjk8xxwi0gy7 |
| Tennis | 99wuzmh5nfnvd9jml6h4yhlpm |
Use the Discover IDs page (discover.php) to scan for current sport and
competition IDs from the live EPG.