---
title: "Sport SDK Integration Overview"
canonical_url: "https://apidocs.sportradar.com/resources/sport-sdk"
markdown_url: "https://apidocs.sportradar.com/resources/sport-sdk.md"
last_updated: "2026-06-10T08:48:04Z"
---

# Sport SDK Integration Overview

The **Sport SDK** is a Kotlin Multiplatform SDK that wraps Sportradar Fishnet feeds behind a strongly typed API for Android, iOS, and Web.

It is built for the most common sports-data workflows:

- load the sports hierarchy
- browse categories and tournaments
- fetch seasons, standings, and fixtures
- inspect match details such as statistics, lineups, and timeline events
- retrieve team squads for a team + season

> **Quick start**
>
> Install the SDK, initialize it once with your credentials, then use the sports feed as your first health check. If `getAllSports()` / `getSports()` works, your credentials, networking, and SDK setup are usually correct.

**Android**

```kotlin
val initialized = SportSdk.init(
    applicationContext,
    enableAnalytics = true,
    clientConfig = ClientConfig(
        clientId = YOUR_CLIENT_ID,
        appKey = "YOUR_APP_KEY",
    ),
)

if (initialized) {
    val sports = SportControllers.sportsController.getAllSports().data.orEmpty()
    println("Loaded ${sports.size} sports")
}
```

**iOS**

```swift
_ = try await SportSDKSportSdk.shared.doInit(
    enableAnalytics: true,
    clientConfig: SportSDKClientConfig(
        clientId: YOUR_CLIENT_ID,
        appKey: "YOUR_APP_KEY",
        appIdentifier: nil,
        logger: nil,
        throwErrorOnInit: false
    )
)

let result = try await SportSDKSportControllers.shared.sportsController.getAllSports()
print("Loaded \(result.sports.count) sports")
```

**Web**

```ts
import { ClientConfig, SportSdkJs } from 'sport-sdk';

await SportSdkJs.init(
  new ClientConfig(YOUR_CLIENT_ID, 'YOUR_APP_KEY', 'com.example.app', undefined, false)
);

const result = await SportSdkJs.getSports();
const sports = result.data?.asJsReadonlyArrayView() ?? [];
console.log(`Loaded ${sports.length} sports`);
```

## Start here

### Android

Gradle dependency, `SportSdk.init(...)`, and Compose-friendly usage patterns.

[Open Android guide](https://apidocs.sportradar.com/resources/sport-sdk/docs/integration/android.md)

### iOS

`SportSDK.xcframework`, Swift concurrency, and SwiftUI-first integration examples.

[Open iOS guide](https://apidocs.sportradar.com/resources/sport-sdk/docs/integration/ios.md)

### Web

`sport-sdk` package usage, `KtList` conversion, and `bigint` handling in TypeScript.

[Open Web guide](https://apidocs.sportradar.com/resources/sport-sdk/docs/integration/web.md)

## Before you start

### Credentials

You need credentials from Sportradar:

- `clientId`
- `appKey`
- `appIdentifier` on Web / JVM only

### Platform requirements

| Platform | Minimum                                              |
| -------- | ---------------------------------------------------- |
| Android  | API 26 / Android 8.0                                 |
| iOS      | iOS 13.0                                             |
| Web      | Modern ES2020-capable browsers with `BigInt` support |

### Type reminders

- Android/KMP: `clientId` = `Int`
- iOS: `clientId` = `Int32`
- Web: `clientId` = `number`

Do not pass `clientId` as a string.

## Common initialization shape

> **Shared config model**
>
> All platforms need the same core values:
>
> ```text
> clientId      -> provided by Sportradar
> appKey        -> provided by Sportradar
> appIdentifier -> required on JVM/Web; auto-resolved on Android/iOS
> ```
>
> On Android and iOS, the SDK resolves `appIdentifier` automatically from the running app and ignores any caller-provided value. On Web and JVM, provide it explicitly in `ClientConfig`.
>
> `throwErrorOnInit` exists for testing error handling and should normally remain `false`.

## Public controllers

### `SportsController`

- sports list
- categories for a sport
- matches for a date
- category tracking via flow / streaming updates

### `SeasonController`

- tournament seasons
- standings / tables
- season fixtures

### `MatchController`

- match statistics
- lineups
- soccer timeline events

### `PlayerController`

- team squad for a team + season

## Common pitfalls

> **Check these first when something feels off**
>
> - calling controllers before initialization completes
> - passing timestamps in seconds instead of milliseconds
> - treating Web IDs as `number` instead of `bigint`
> - ignoring `errorMessage` when a result is empty
> - hardcoding credentials into source control
