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

# Тарифы и деньги

> Из чего складывается цена, как проходит оплата и куда ложится наценка

## Цена для клиента

Тарифы у платформы одни на все каналы продаж. Цена для клиента — цена платформы плюс ваша наценка (`markup_percent` в [`GET /account`](/api/account)). В [`GET /plans`](/api/plans) все три числа уже посчитаны:

```json theme={"dark"}
{
  "currency": "RUB",
  "plans": [
    {"plan_id": 3, "months": 1, "lifetime": false,
     "price": "150.00", "platform_price": "100.00", "partner_share": "50.00"}
  ],
  "devices": {"included": 3, "max": 10,
              "price": "75.00", "platform_price": "50.00", "partner_share": "25.00"}
}
```

| Поле | Что это |
| - | - |
| `price` | Цена для клиента — ровно на эту сумму выставится счёт |
| `platform_price` | Часть платформы |
| `partner_share` | Ваша наценка |

Суммы — строки с двумя знаками после точки. Показывайте их клиенту как есть: пересчёт на своей стороне с плавающей точкой даёт копеечные расхождения со счётом.

## Как проходит оплата

<Steps>
  <Step title="Счёт">
    Ваш сервер вызывает [`POST /payments`](/api/create-payment) и получает `payment_url`.
  </Step>

  <Step title="Оплата">
    Клиент оплачивает на странице сервиса оплаты. Если передан `return_url`, после оплаты клиент вернётся на ваш адрес — если это поддерживает выбранный способ оплаты.
  </Step>

  <Step title="Выдача">
    Платформа выдаёт доступ сама — ничего вызывать не нужно. Счёт становится `succeeded`, в поле `client` появляется ссылка подписки.
  </Step>

  <Step title="Наценка">
    `partner_share` ложится на ваш баланс партнёра. Баланс и вывод — в кабинете партнёра.
  </Step>
</Steps>

## Статусы счёта

| Статус | Что значит | Что делать |
| - | - | - |
| `pending` | Ждёт оплаты, `payment_url` действует | Опрашивать, пока клиент на странице оплаты |
| `succeeded` | Оплачен, доступ выдан | Показать клиенту подключение |
| `expired` | Срок оплаты вышел — но это не окончательно | Поздняя оплата всё равно пройдёт и переведёт счёт в `succeeded` |
| `failed` | Оплата не прошла | Выставить новый счёт. Бывает и после `succeeded`, если банк отозвал платёж |

`expires_at` — ориентир: статус меняется с задержкой до часа, поэтому `pending` может держаться дольше срока.

## Продление

Продление — тот же [`POST /payments`](/api/create-payment) с `purpose: subscription` на тот же `client_id`. Срок прибавляется к текущему, ссылка подписки не меняется: клиенту ничего не нужно переподключать. Если подписка уже истекла, новый срок идёт с момента оплаты.

## Дополнительные устройства

В подписку входит `devices.included` устройств. Докупить ещё — [`POST /payments`](/api/create-payment) с `purpose: devices` и числом `devices`:

```json theme={"dark"}
{"client_id": "user-42", "purpose": "devices", "devices": 2, "method": "sbp"}
```

* Нужна действующая подписка — иначе `400 NO_ACTIVE_SUBSCRIPTION`.
* Больше `devices.max` на клиента не бывает — иначе `400 DEVICE_SLOT_LIMIT_EXCEEDED`.
* На тарифе без ограничения устройств счёт не выставится — `400 DEVICE_SLOTS_NOT_APPLICABLE`.
* `devices: null` в `GET /plans` — доп. устройства сейчас не продаются (`409 DEVICES_NOT_FOR_SALE`).

## Способы оплаты

Список — [`GET /payment-methods`](/api/payment-methods): код `method` для счёта и название для клиента. Список меняется, поэтому перечитывайте его перед показом, а не храните у себя. Способ, который стал недоступен, отвечает `400 UNSUPPORTED_PAYMENT_METHOD`.
