Платежи подписки
История платежей показывает каждую попытку списания: сумму, оплачиваемый период, результат и возможность ручного повтора.
Gigma сама повторяет неуспешные списания по расписанию. Ручной повтор нужен, когда клиент уже пополнил счёт или решил проблему с банком и не хочет ждать следующей автоматической попытки.
Шаг 1. Получите историю
Получение истории платежей
- Метод
- GET
- URL
https://api.gigma.ru/api/counterparty/subscriptions/{id}/payments- Авторизация
- App Token + Bearer клиента
- Headers
Token: {application_token}; Authorization: Bearer {counterparty_token}- Успешный ответ
200
Платежи возвращаются постранично, новые сверху. Запрашивайте следующие страницы по meta или links, иначе у долгоживущей подписки будет видна только часть истории.
Параметры запроса
page(integer, опционально) — номер страницы, начиная с1;per_page(integer, опционально) — от1до100, по умолчанию20.
Ответ
{
"data": [
{
"id": 315,
"subscription_id": 42,
"order_id": 901,
"nomenclature_id": 34780,
"amount": "490.00",
"currency": "RUB",
"status": "failed",
"period_start": "2026-09-15T10:00:00+00:00",
"period_end": "2026-10-15T10:00:00+00:00",
"billing_period_months": 1,
"error_reason": "insufficient_funds",
"can_retry": true,
"created_at": "2026-09-13T10:05:00+00:00",
"updated_at": "2026-09-13T10:05:10+00:00"
}
],
"links": {
"first": "https://api.gigma.ru/api/counterparty/subscriptions/42/payments?page=1",
"last": "https://api.gigma.ru/api/counterparty/subscriptions/42/payments?page=3",
"prev": null,
"next": "https://api.gigma.ru/api/counterparty/subscriptions/42/payments?page=2"
},
"meta": {
"current_page": 1,
"from": 1,
"last_page": 3,
"per_page": 20,
"to": 20,
"total": 53
}
} error_reason содержит безопасный код для интерфейса: card_declined, insufficient_funds, bank_declined или unknown. Внутренние сообщения платёжного провайдера клиенту не передаются.
Ошибки
401— App Token или Bearer клиента отсутствует либо не распознан;404— подписка не принадлежит клиенту или текущему приложению;429— превышен лимит 60 запросов в минуту.
Шаг 2. Решите, показывать ли кнопку повтора
У платежа и подписки разные флаги:
payment.can_retryотносится к конкретной строке истории. По нему показывайте кнопку «Повторить оплату» рядом с этим платежом;subscription.can_retry_paymentиsubscription.retry_payment_reasonописывают только последнюю попытку подписки и подходят для общей кнопки в карточке подписки.
Не разрешайте повтор произвольного старого платежа только потому, что его статус выглядит неуспешным. Условия тарифа или способ оплаты могли измениться после этой попытки.
Шаг 3. Повторите доступный платёж
Повтор неуспешной оплаты
- Метод
- POST
- URL
https://api.gigma.ru/api/counterparty/subscriptions/{id}/payments/{payment_id}/retry- Авторизация
- App Token + Bearer клиента
- Headers
Token: {application_token}; Authorization: Bearer {counterparty_token}- Успешный ответ
200 / 202
Перед вызовом убедитесь, что у выбранной записи can_retry: true. Тело запроса не нужно.
Ответ
{
"subscription": {
"id": 42,
"status": "charging",
"current_period_end": "2026-09-15T10:00:00+00:00",
"can_retry_payment": false,
"retry_payment_reason": "payment_pending"
},
"payment": {
"id": 316,
"subscription_id": 42,
"amount": "490.00",
"currency": "RUB",
"status": "pending",
"can_retry": false
}
} Ответ не обёрнут в data: subscription и payment находятся в корне.
- HTTP
202— подписка перешла вcharging, списание продолжается. Обновите подписку позже; - HTTP
200— повтор завершился без перехода в длительную обработку. Используйте статусы объектов из ответа.
Ошибки
404— подписка или платёж не принадлежит клиенту либо текущему приложению;409— другой платёж ещё обрабатывается или его результат требует сверки. Не запускайте новую попытку;422— платёж не подходит для повтора, уже оплачен, условия подписки изменились или подписка отменена;429— превышен лимит 6 запросов в минуту.
Если проблема в способе оплаты
Не запускайте повтор много раз подряд. Предложите клиенту привязать новый способ оплаты, дождитесь успешного sync и только после этого повторяйте платёж или возобновляйте подписку.