> ## Documentation Index
> Fetch the complete documentation index at: https://docs.gameball.co/llms.txt
> Use this file to discover all available pages before exploring further.

# Initialize SDK

> Initialize Gameball Flutter SDK with your configuration

# Initialize the SDK

Initialize Gameball once, usually at app startup in your `main()` function:

<div className="security-banner">
  <div className="security-banner-icon">🔒</div>

  <div className="security-banner-content">
    <strong>Secure API Access:</strong> To benefit from v4.1 secure API endpoints, pass the <code>sessionToken</code> parameter during SDK initialization (required in upcoming SDK v4). This enables automatic routing to v4.1 secure endpoints. <a href="/api-reference/introduction-v4.1">Learn more about v4.1 →</a>
  </div>
</div>

```dart theme={null}
import 'package:gameball_sdk/gameball_sdk.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  final config = GameballConfigBuilder()
      .apiKey("your-api-key")          // Required
      .lang("en")                      // Required
      .platform("flutter")             // Optional
      .shop("your-shop-id")            // Optional
      .sessionToken("your-session-token") // Optional - for v4.1 endpoints
      .build();

  final gameballApp = GameballApp.getInstance();
  gameballApp.init(config);

  runApp(MyApp());
}
```

## Configuration Parameters

<ParamField body="apiKey" type="string" required>
  The client API key available in your Gameball dashboard (required).
</ParamField>

<ParamField body="lang" type="string" required>
  The language code for SDK localization (e.g., "en", "ar", "fr"). Required.
</ParamField>

<ParamField body="platform" type="string">
  Platform identifier, defaults to "flutter".
</ParamField>

<ParamField body="shop" type="string">
  Your Gameball shop identifier for multi-shop configurations.
</ParamField>

<ParamField body="sessionToken" type="string">
  Session Token for secure authentication (enables automatic v4.1 endpoint routing). Required in upcoming SDK v4.
</ParamField>

### Validation Rules

**GameballConfig requires:**

* API key is required (cannot be null)
* Language is required (cannot be null)

## Example

```dart theme={null}
import 'package:flutter/material.dart';
import 'package:gameball_sdk/gameball_sdk.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  // Initialize Gameball SDK
  final config = GameballConfigBuilder()
      .apiKey("gb_live_xxxxxxxxxxxxxxxx")
      .lang("en")
      .platform("flutter")
      .shop("myshop")
      .sessionToken("your-session-token")  // Optional
      .build();

  final gameballApp = GameballApp.getInstance();
  gameballApp.init(config);

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Gameball Demo',
      home: HomeScreen(),
    );
  }
}
```

<Tip>
  Call `init()` before running your app to ensure the SDK is ready when your app starts.
</Tip>

<Warning>
  Make sure to use your actual API key from the Gameball dashboard. Test keys are for development, production keys are for live deployment.
</Warning>

## Next Steps

* [Initialize Customer Profile](/installation-guides/v3/flutter/initialize-profile)
* [Track Customer Events](/installation-guides/v3/flutter/track-events)
