---
title: Быстрый старт
description: От установки SDK до пейвола, прав и оплаты.
---

# Быстрый старт

Плейсхолдеры в документации:

| Плейсхолдер | Смысл |
| --- | --- |
| `YOUR_API_URL` | Базовый URL Platform API |
| `YOUR_APP_CODE` | Код приложения из админки |
| `YOUR_PUBLIC_KEY` | Public key `rb_pub_…` |
| `YOUR_ACCESS_TOKEN` | JWT пользователя из вашего Auth |

## 1. Админка (один раз)

1. Создайте приложение → `YOUR_APP_CODE`.
2. Добавьте **права** (справочник фич, например `premium_feature`, `cloud_sync`).
3. Создайте **тарифы** (главный объект: free / pro / cloud…) и привяжите к ним права; задайте цены.
4. Создайте пейвол `main` — витрина цен этих тарифов для SDK.
5. Скопируйте `YOUR_PUBLIC_KEY`.

## 2. TypeScript

```ts
import { RaidBossPlatformClient } from "@raidboss/platform-sdk";

const platform = new RaidBossPlatformClient({
  apiUrl: "YOUR_API_URL",
  applicationCode: "YOUR_APP_CODE",
  publicKey: "YOUR_PUBLIC_KEY",
  getAccessToken: async () => YOUR_ACCESS_TOKEN,
});

await platform.registerUser({ platform: "web" });
await platform.registerDevice({
  installation_id: "stable-uuid-on-device",
  platform: "web",
  app_version: "1.0.0",
});

const { data: paywall } = await platform.getPaywall("main");
const canPremium = await platform.hasEntitlement("premium_feature");
```

## 3. Flutter

```dart
final platform = RaidBossPlatformClient(
  apiUrl: 'YOUR_API_URL',
  applicationCode: 'YOUR_APP_CODE',
  publicKey: 'YOUR_PUBLIC_KEY',
  getAccessToken: () async => YOUR_ACCESS_TOKEN,
);

await platform.registerUser(platform: 'android');
await platform.registerDevice(
  installationId: installationId,
  platform: 'android',
  appVersion: '1.0.0',
);

final paywall = await platform.getPaywall(paywallCode: 'main');
final canPremium = await platform.hasEntitlement('premium_feature');
```

## 4. Покупка (только платные)

```ts
const price = paywall.paywall_items?.[0]?.plan_prices;
if (price && !RaidBossPlatformClient.isFreePrice(price)) {
  const { data } = await platform.createPayment({
    plan_price_id: String(price.id),
    return_url: "https://your.app/pay/return",
  });
  // открыть data.confirmation_url
}
```

Не вызывайте `createPayment` для free (`is_free` / `works_offline` / `requires_purchase: false`).

## 5. Правило гейтинга

```text
если фича free-local → разрешить (даже offline)
иначе если есть сеть → sync entitlements, обновить кэш, проверить код
иначе → проверить кэш + expires_at
```

Далее: [Права](/concepts/entitlements) · [Платежи](/guides/payments) · [Офлайн](/concepts/free-offline)
