Оформление подписки
Первую подписку обычно оформляют через checkout. Gigma создаёт заказ и возвращает payment_link, а клиент подтверждает платёж на защищённой странице платёжного провайдера.
После успешной оплаты Gigma создаёт подписку и сохраняет способ оплаты для следующих списаний. Если у клиента уже есть сохранённый способ оплаты текущего приложения, можно создать подписку с немедленным списанием без перехода по ссылке.
Подготовка
Перед оформлением:
- получите тариф из каталога подписок;
- авторизуйте клиента и получите его Bearer-токен;
- покажите сумму, период и условия регулярных списаний;
- получите явное согласие клиента и только после этого передайте
autopay_consent: true.
Сценарий 1. Первый платёж по ссылке
Шаг 1. Создайте checkout
Создание checkout подписки
- Метод
- POST
- URL
https://api.gigma.ru/api/counterparty/subscriptions/checkout- Авторизация
- App Token + Bearer клиента
- Headers
Token: {application_token}; Authorization: Bearer {counterparty_token}- Успешный ответ
200 / 201 / 202
Передайте один тариф в nomenclature_id или набор тарифов в nomenclature_ids. Одновременно передавать оба поля нельзя.
Параметры запроса
nomenclature_id(integer, условно обязательно) — ID одного тарифа;nomenclature_ids(integer[], условно обязательно) — от 1 до 20 уникальных ID тарифов;autopay_consent(boolean, обязательно) — должно бытьtrue;payment_method_type(string, опционально) — тип оплаты, напримерbank_card.
Пример запроса
{
"nomenclature_id": 34780,
"autopay_consent": true,
"payment_method_type": "bank_card"
} Ответ
{
"order_id": 501,
"nomenclature_id": 34780,
"amount": "490.00",
"currency": "RUB",
"billing_period_months": 1,
"payment_method_type": "bank_card",
"payment_link": "https://yoomoney.ru/checkout/..."
} - HTTP
201— создан новый checkout; - HTTP
200— Gigma нашла такой же незавершённый checkout и вернула его повторно; - HTTP
202— создание платежа ещё подтверждается. В ответе нетpayment_link, толькоmessageиorder_id. Повторите тот же запрос через несколько секунд и не создавайте параллельный checkout.
Ошибки
401— App Token или Bearer клиента отсутствует либо не распознан;409с сообщением о том, что платёж уже создаётся, — повторите тот же запрос через несколько секунд;- другой
409— у клиента есть несовместимый незавершённый платёж. Не повторяйте запрос автоматически: предложите завершить или отменить предыдущую оплату; 422— тариф недоступен, не настроен платёжный склад, не приняты условия автосписания или платёж нельзя подготовить;429— превышен лимит 6 запросов в минуту.
Шаг 2. Перенаправьте клиента на оплату
Откройте payment_link в браузере. Не собирайте номер карты и CVC в своей форме: платёжные данные вводятся на странице провайдера.
Шаг 3. Проверьте подписку
Возврат клиента на ваш сайт не подтверждает оплату. После возврата получите список подписок и найдите подписку по nomenclature_id или plan_slug.
Получение подписок клиента
- Метод
- GET
- URL
https://api.gigma.ru/api/counterparty/subscriptions- Авторизация
- App Token + Bearer клиента
- Headers
Token: {application_token}; Authorization: Bearer {counterparty_token}- Успешный ответ
200
Метод возвращает только подписки текущего клиента и приложения, новые сверху. Пагинации нет.
Ответ
{
"data": [
{
"id": 42,
"application_id": 17,
"plan_slug": "nomenclature-34780",
"nomenclature_id": 34780,
"billing_period_months": 1,
"amount": "490.00",
"currency": "RUB",
"status": "active",
"current_period_start": "2026-08-15T10:00:00+00:00",
"current_period_end": "2026-09-15T10:00:00+00:00",
"next_charge_at": "2026-09-13T10:00:00+00:00",
"saved_payment_method": {
"id": 9,
"payment_method_type": "bank_card",
"card_type": "Visa",
"card_last_4": "4242"
},
"latest_payment": {
"status": "succeeded"
},
"latest_payment_method_change": null,
"can_retry_payment": false,
"retry_payment_reason": "already_paid"
}
]
} next_charge_at означает «не раньше этого времени». Фактическое списание выполняется ближайшим запуском планировщика.
Ответ содержит Cache-Control: no-store. Не сохраняйте его в браузерном или промежуточном кэше как источник актуального статуса.
Проверка оплаченного доступа
На своём backend считайте подписку действующей, только если status = "active" и current_period_end позже текущего времени. При charging, past_due или canceled доступ не выдавайте.
const accessAllowed =
subscription.status === 'active' &&
new Date(subscription.current_period_end).getTime() > Date.now(); latest_payment.status = "succeeded" подтверждает последнюю успешную попытку, но не заменяет проверку статуса и конца оплаченного периода.
Ошибки
401— App Token или Bearer клиента отсутствует либо не распознан;403— Bearer-токен не имеет нужного права;404— клиент или токен не относится к проекту приложения.
Сценарий 2. Списание с сохранённого способа оплаты
Используйте этот вариант, когда клиент уже сохранил способ оплаты в текущем Application.
Создание подписки с немедленным списанием
- Метод
- POST
- URL
https://api.gigma.ru/api/counterparty/subscriptions- Авторизация
- App Token + Bearer клиента
- Headers
Token: {application_token}; Authorization: Bearer {counterparty_token}- Успешный ответ
201 / 202
Параметры запроса
nomenclature_id(integer, условно обязательно) — ID тарифа;plan_slug(string, условно обязательно) —nomenclature-{id}вместоnomenclature_id;saved_payment_method_id(integer, обязательно) — активный способ оплаты этого клиента и приложения;autopay_consent(boolean, обязательно) — должно бытьtrue.
Передайте хотя бы одно поле: nomenclature_id или plan_slug. Для приложения с управляемым каталогом используйте ID из каталога либо plan_slug вида nomenclature-{id}. Конфигурационные значения вроде monthly и yearly для такого приложения недоступны.
Пример запроса
{
"nomenclature_id": 34780,
"saved_payment_method_id": 9,
"autopay_consent": true
} Ответ
{
"data": {
"id": 42,
"nomenclature_id": 34780,
"amount": "490.00",
"currency": "RUB",
"billing_period_months": 1,
"status": "active",
"current_period_end": "2026-09-15T10:00:00+00:00"
}
} - HTTP
201— первое списание завершилось, подписка активирована; - HTTP
202иstatus: charging— списание продолжается. Покажите обработку платежа, не выдавайте доступ и обновите список подписок позже; - HTTP
202иstatus: canceled— платёж отправлен на ручную сверку. Не запускайте бесконечный опрос и не выдавайте доступ; - HTTP
422— списание не прошло или данные тарифа, способа оплаты либо согласия не прошли проверку; - HTTP
409— предыдущий платёж ещё не завершён или требует сверки; - HTTP
429— превышен лимит частоты запросов.
Попытка купить тариф, по которому уже есть подписка в active, charging или past_due, возвращает 422. Это ожидаемый бизнес-сценарий: покажите существующую подписку вместо создания второй.
Что дальше
После активации добавьте в личный кабинет изменение и отмену подписки, историю платежей и смену способа оплаты.