Skip to content

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

GET https://startup.core.indazn.com/v1/main/web
    ?Platform=web
    &LandingPageKey=generic
    &Brand=dazn

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:

{
  "AuthToken": {
    "Token": "eyJ...",
    "ExpirationDate": "2026-03-19T..."
  }
}

Refresh Token

POST {api_endpoint_refresh_access_token}
Authorization: Bearer {token}
Content-Type: application/json

{
  "DeviceId": "uuid-v4"
}

EPG (Schedule)

EPG with Date Range

GET {api_endpoint_epg}
    ?languageCode=it
    &country=it
    &startDate=2026-03-18
    &endDate=2026-03-18

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:

ManifestUrl + "?" + CdnToken.Name + "=" + urlencode(CdnToken.Value)

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

  1. Fetch the MPD manifest from ManifestUrl
  2. Extract the PSSH box (base64) from <ContentProtection> element with schemeIdUri="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed"
  3. Send PSSH to LaUrl using pywidevine CDM to obtain decryption keys
  4. Keys are in KID:KEY hex 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.