Dart SDK

SDK for Dart and Flutter.

Installation

Add the dependency from the GitHub repository and pin it to the latest release tag:

dependencies:
  WinWinKit:
    git:
      url: https://github.com/WinWinKit/winwinkit-dart.git
      ref: 0.3.0

Then run flutter pub get (or dart pub get for pure Dart projects).

Initialize the client

import 'package:WinWinKit/api.dart';

final sdk = WinWinKit();
final usersApi = sdk.getUsersApi();

WinWinKit builds on dio and exposes the underlying client as sdk.dio. You can provide your own Dio instance, override the API base URL (for staging environments), or add interceptors such as request logging.

Using the APIs

All methods return a Future<Response<T>>. The deserialized model lives under response.data. Each snippet instantiates a new client for clarity—reuse a single WinWinKit instance in your app to share Dio configuration.

Create or update a user

import 'package:WinWinKit/api.dart';
import 'package:built_value/json_object.dart';
import 'package:dio/dio.dart';

Future<void> syncUser() async {
  final sdk = WinWinKit();
  final usersApi = sdk.getUsersApi();

  final request = UserCreateRequest((b) => b
    ..appUserId = 'your-app-user-id'
    ..isPremium = false
    ..metadata = JsonObject({'plan': 'starter'}));

  try {
    final response = await usersApi.createOrUpdateUser(
      xApiKey: 'your-api-key',
      userCreateRequest: request,
    );

    final createdUser = response.data?.data?.user;
    print('Synced user: ${createdUser?.appUserId}');
  } on DioException catch (error) {
    print('Failed to sync user: ${error.response?.data}');
  }
}

Retrieve a user

final sdk = WinWinKit();
final usersApi = sdk.getUsersApi();

final userResponse = await usersApi.getUser(
  appUserId: 'your-app-user-id',
  xApiKey: 'your-api-key',
);

final user = userResponse.data?.data?.user;
print('Fetched user: ${user?.appUserId}');

Claim a referral, promo, or affiliate code

final sdk = WinWinKit();
final claimActionsApi = sdk.getClaimActionsApi();

final claimResponse = await claimActionsApi.claimCode(
  appUserId: 'your-app-user-id',
  xApiKey: 'your-api-key',
  userClaimCodeRequest: UserClaimCodeRequest((b) => b..code = 'XYZ123'),
);

final updatedUser = claimResponse.data?.data?.user;
print('Updated user after claim: ${updatedUser?.appUserId}');

claimResponse.data?.data?.rewardsGranted contains the rewards granted to the user, grouped by reward type.

Withdraw credits for a user

final sdk = WinWinKit();
final rewardsApi = sdk.getRewardsActionsApi();

await rewardsApi.withdrawCredits(
  appUserId: 'your-app-user-id',
  xApiKey: 'your-api-key',
  userWithdrawCreditsRequest: UserWithdrawCreditsRequest((b) => b
    ..key = 'credit_reward_key'
    ..amount = 100),
);

Fetch an App Store Offer Code

final sdk = WinWinKit();
final appStoreApi = sdk.getAppStoreApi();

final offerCode = await appStoreApi.getOfferCode(
  offerCodeId: 'your-offer-code-id',
  xApiKey: 'your-api-key',
);

final offer = offerCode.data?.data?.offerCode;
print('Offer code name: ${offer?.name}');

Error handling

dio throws a DioException when the request fails or the response cannot be deserialized. Inspect error.response?.statusCode and error.response?.data for details returned by WinWinKit.

User Interface

The SDKs provide interface for interacting with WinWinKit APIs, but not the UI.

Thus you need to build the user interface for the referral feature in your app.

We plan to provide UI with the SDK in the future. Please let us know if that is your requirement to get started.

Requirements

  • Dart 2.18.0+
  • Flutter 3.3 or newer
  • dio 5.7.x (pulled in automatically)

Check out the SDK on GitHub