{"openapi":"3.1.0","info":{"title":"cisPay Merchant API","description":"H2H (host-to-host) платёжный API для мерчантов cisPay.\n\n## Аутентификация\nКаждый запрос к эндпоинтам `/payments*`, `/transactions`, `/balance`, `/store/capabilities` должен нести два заголовка (найдёте их в личном кабинете, раздел «Настройки магазина»):\n- `X-Shop-ID`: UUID вашего магазина.\n- `X-Api-Key`: секретный ключ магазина (`cis_sec_...`).\n\n## Базовый поток\n1. `POST /payments`: создаёте счёт, получаете `payment_url`.\n2. Перенаправляете покупателя на `payment_url`. Дальше оплату (ввод карты, 3-D Secure, QR СБП) полностью ведёт наша хостинговая страница.\n3. Получаете уведомление о результате на ваш `webhook_url` (см. ниже), и/или опрашиваете `GET /payments/status`.\n\n## Вебхуки\nНа адрес `webhook_url`, указанный при настройке магазина, мы отправляем `POST` при каждой смене статуса транзакции: `PAID`, `FAILED`, `EXPIRED`, `REFUNDED`, а также по каждому циклу подписки. Тело запроса в формате JSON:\n```json\n{\n  \"id\": \"...\", \"store_id\": \"...\", \"order_id\": \"...\",\n  \"payment_method\": \"CARD\", \"status\": \"PAID\",\n  \"amount\": 100000, \"currency\": \"RUB\", \"charged_amount\": 100000,\n  \"merchant_revenue\": 96500, \"is_sandbox\": false, \"description\": null,\n  \"subscription_id\": null, \"paid_at\": \"2026-07-13T10:00:00+00:00\",\n  \"timestamp\": \"2026-07-13T10:00:01+00:00\"\n}\n```\nВ поле `status` просто актуальный статус транзакции на момент отправки, отдельного поля с типом события нет, ориентируйтесь по нему. `paid_at` заполняется, только если `status` равен `PAID`, а `subscription_id` заполнен, если платёж относится к подписке. Тестовые платежи из Песочницы тоже присылают настоящие вебхуки (`is_sandbox: true`), так что можно проверить свой обработчик заранее, ещё до реальных платежей.\n\nПодпись передаётся в заголовке `X-Signature`, это HMAC-SHA256 от тела запроса (байты как есть, компактный JSON), ключ берём `X-Api-Key`. Сверяйте её перед обработкой, например так:\n```python\nimport hmac, hashlib\n\ndef verify_webhook(api_key: str, raw_body: bytes, signature: str) -> bool:\n    expected = hmac.new(api_key.encode(), raw_body, hashlib.sha256).hexdigest()\n    return hmac.compare_digest(expected, signature)\n```\nЕсли ваш сервер не ответил 2xx, мы повторяем попытку по расписанию: через 1 мин, 5 мин, 15 мин, 1 час (всего 5 попыток). Обрабатывайте вебхук идемпотентно, по `id` и `status`: из-за повторов один и тот же статус иногда может прийти больше одного раза.\n\n## Ограничение по валюте\nСейчас поддерживается только `RUB`.","version":"1.0.0"},"servers":[{"url":"https://api.cispay.app"}],"paths":{"/payments":{"post":{"tags":["Платежи"],"summary":"Создать платёж","description":"Создаёт счёт на оплату.\n\nНужны заголовки X-Shop-ID и X-Api-Key (смотрите в личном кабинете, раздел «Настройки\nмагазина»). В ответе будет payment_url, отправьте туда покупателя. Ввод карты, 3-D Secure\nи QR СБП мы берём на себя, всё происходит на нашей странице. Результат прилетит вебхуком на\nваш webhook_url (формат и подпись смотрите в руководстве по интеграции), либо опрашивайте\nGET /payments/status.\n\npayment_method: CARD, SBP или CRYPTO. Для SBP обязателен customer_id. Минимальная сумма для\nCARD: 50 ₽, для SBP минимальная сумма не ограничена.\n\nЕсли payment_method не передан (или null), а счёт в RUB, покупатель сам выберет способ на\nнашей странице оплаты из подключённых у магазина (СБП, карта, криптовалюта). В этом режиме\ncustomer_id обязателен. После выбора сменить способ нельзя. Счёт в USD без метода\nавтоматически становится CRYPTO. Если у магазина подключён единственный метод, он выбирается\nсразу.\n\nCRYPTO (оплата USDT): укажите currency явно. USD, тогда amount в центах (1000 = 10.00 USD),\nили RUB, тогда amount в копейках, и мы пересчитаем его в USD по курсу ЦБ РФ на момент\nсоздания платежа (курс и исходная сумма вернутся в `source_amount` и `fx_rate`). Минимум задаётся администратором (по умолчанию 5 USD).\nСеть (TRON, BNB Smart Chain, TON) покупатель выбирает на нашей странице оплаты. Платёж\nзасчитывается, когда на выданный адрес придёт точная сумма с этой страницы, поэтому сумма\nдля покупателя немного больше указанной. Вам зачисляется сумма платежа за вычетом комиссии\nмагазина, сразу в USD. Возврат средств для CRYPTO недоступен. Подписки для CRYPTO недоступны.\n\npayload: необязательное поле для ваших произвольных данных — вернётся эхом в GET\n/payments/status и в вебхуке, если было передано здесь.","operationId":"create_payment_payments_post","parameters":[{"name":"x-shop-id","in":"header","required":true,"schema":{"type":"string","format":"uuid","description":"ID магазина (UUIDv7)","title":"X-Shop-Id"},"description":"ID магазина (UUIDv7)"},{"name":"x-api-key","in":"header","required":true,"schema":{"type":"string","description":"Секретный API ключ магазина (cis_sec_...)","title":"X-Api-Key"},"description":"Секретный API ключ магазина (cis_sec_...)"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentCreateRequest"}}}},"responses":{"201":{"description":"Успешно","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentResponse"}}}},"422":{"description":"Ошибка валидации","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/payments/status":{"get":{"tags":["Платежи"],"summary":"Статус платежа","description":"Статус и детали транзакции. Передайте id или order_id.","operationId":"check_payment_status_payments_status_get","parameters":[{"name":"id","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"description":"ID транзакции, полученный от POST /payments","title":"Id"},"description":"ID транзакции, полученный от POST /payments"},{"name":"order_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Ваш order_id, переданный при создании платежа","title":"Order Id"},"description":"Ваш order_id, переданный при создании платежа"},{"name":"x-shop-id","in":"header","required":true,"schema":{"type":"string","format":"uuid","description":"ID магазина (UUIDv7)","title":"X-Shop-Id"},"description":"ID магазина (UUIDv7)"},{"name":"x-api-key","in":"header","required":true,"schema":{"type":"string","description":"Секретный API ключ магазина (cis_sec_...)","title":"X-Api-Key"},"description":"Секретный API ключ магазина (cis_sec_...)"}],"responses":{"200":{"description":"Успешно","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentStatusResponse"}}}},"422":{"description":"Ошибка валидации","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/payments/refund":{"post":{"tags":["Платежи"],"summary":"Возврат средств","description":"Полный возврат оплаченной транзакции, необратимо (частичные возвраты не поддерживаются).\nАдресуется только по нашему внутреннему id, так же как GET /payments/status, но без\nальтернативы через order_id.\n\nconfirm_amount должен точно совпасть с charged_amount транзакции. Это подтверждение суммы\nи защита от случайного возврата не туда.","operationId":"refund_payment_payments_refund_post","parameters":[{"name":"id","in":"query","required":true,"schema":{"type":"string","format":"uuid","description":"ID транзакции (UUID), полученный от POST /payments или /payments/sbp-direct. order_id здесь не принимается.","title":"Id"},"description":"ID транзакции (UUID), полученный от POST /payments или /payments/sbp-direct. order_id здесь не принимается."},{"name":"x-shop-id","in":"header","required":true,"schema":{"type":"string","format":"uuid","description":"ID магазина (UUIDv7)","title":"X-Shop-Id"},"description":"ID магазина (UUIDv7)"},{"name":"x-api-key","in":"header","required":true,"schema":{"type":"string","description":"Секретный API ключ магазина (cis_sec_...)","title":"X-Api-Key"},"description":"Секретный API ключ магазина (cis_sec_...)"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransactionRefundRequest"}}}},"responses":{"200":{"description":"Успешно","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MerchantRefundResponse"}}}},"422":{"description":"Ошибка валидации","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/transactions":{"get":{"tags":["Платежи"],"summary":"Список транзакций","description":"Список транзакций магазина, сначала новые. Постраничная выдача через limit и offset,\nlimit ограничен сверху, чтобы один запрос не превращался в выгрузку всей базы. Листайте\nчерез offset и смотрите на has_more.","operationId":"list_transactions_transactions_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"exclusiveMinimum":0,"description":"Сколько записей вернуть (максимум 100).","default":20,"title":"Limit"},"description":"Сколько записей вернуть (максимум 100)."},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Сколько записей пропустить (для пагинации).","default":0,"title":"Offset"},"description":"Сколько записей пропустить (для пагинации)."},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/PublicTransactionStatus"},{"type":"null"}],"description":"Отфильтровать по статусу.","title":"Status"},"description":"Отфильтровать по статусу."},{"name":"x-shop-id","in":"header","required":true,"schema":{"type":"string","format":"uuid","description":"ID магазина (UUIDv7)","title":"X-Shop-Id"},"description":"ID магазина (UUIDv7)"},{"name":"x-api-key","in":"header","required":true,"schema":{"type":"string","description":"Секретный API ключ магазина (cis_sec_...)","title":"X-Api-Key"},"description":"Секретный API ключ магазина (cis_sec_...)"}],"responses":{"200":{"description":"Успешно","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MerchantTransactionListResponse"}}}},"422":{"description":"Ошибка валидации","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/balance":{"get":{"tags":["Платежи"],"summary":"Баланс мерчанта","description":"Баланс по всем магазинам вашего аккаунта, как в личном кабинете. RUB выручка, ещё не\nсконвертированная в USD, доступный к выводу USD баланс и сумма выплат в обработке.","operationId":"get_merchant_balance_balance_get","parameters":[{"name":"x-shop-id","in":"header","required":true,"schema":{"type":"string","format":"uuid","description":"ID магазина (UUIDv7)","title":"X-Shop-Id"},"description":"ID магазина (UUIDv7)"},{"name":"x-api-key","in":"header","required":true,"schema":{"type":"string","description":"Секретный API ключ магазина (cis_sec_...)","title":"X-Api-Key"},"description":"Секретный API ключ магазина (cis_sec_...)"}],"responses":{"200":{"description":"Успешно","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MerchantBalanceResponse"}}}},"422":{"description":"Ошибка валидации","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/conversions":{"get":{"tags":["Платежи"],"summary":"История конвертаций RUB в USD","description":"История конвертаций RUB в USD по вашему аккаунту (как баланс, она общая для всех ваших\nмагазинов), сначала новые.\n\n**Курс** в поле `rub_per_usd` указан в рублях за 1 USD. Суммы даны в минимальных единицах:\n`amount_rub_kopecks` в копейках, `amount_usd_cents` в центах. Строка с отрицательными суммами\nэто корректировка за возврат уже сконвертированного платежа (в ней заполнен\n`related_transaction_id`). Фильтры `date_from` и `date_to` применяются к `converted_at`.","operationId":"list_merchant_conversions_conversions_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"exclusiveMinimum":0,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","maximum":100000,"minimum":0,"default":0,"title":"Offset"}},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Конвертации с этого момента включительно (ISO 8601, UTC если без пояса).","title":"Date From"},"description":"Конвертации с этого момента включительно (ISO 8601, UTC если без пояса)."},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Конвертации до этого момента включительно (ISO 8601, UTC если без пояса).","title":"Date To"},"description":"Конвертации до этого момента включительно (ISO 8601, UTC если без пояса)."},{"name":"x-shop-id","in":"header","required":true,"schema":{"type":"string","format":"uuid","description":"ID магазина (UUIDv7)","title":"X-Shop-Id"},"description":"ID магазина (UUIDv7)"},{"name":"x-api-key","in":"header","required":true,"schema":{"type":"string","description":"Секретный API ключ магазина (cis_sec_...)","title":"X-Api-Key"},"description":"Секретный API ключ магазина (cis_sec_...)"}],"responses":{"200":{"description":"Успешно","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MerchantConversionListResponse"}}}},"422":{"description":"Ошибка валидации","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/payouts":{"post":{"tags":["Платежи"],"summary":"Вывод средств","description":"Запрос на вывод USD-баланса. Адрес и сеть указывать не нужно и нельзя: вывод всегда идёт\nна реквизиты по умолчанию, заданные в личном кабинете (Профиль → «Реквизиты для вывода по\nумолчанию»). Через этот метод нельзя вывести средства на произвольный кошелёк.\n\nМинимальная сумма вывода задаётся администратором (по умолчанию $5). Передайте либо\namount_usd_cents, либо withdraw_all=true, чтобы вывести весь доступный баланс целиком.","operationId":"request_merchant_payout_payouts_post","parameters":[{"name":"x-shop-id","in":"header","required":true,"schema":{"type":"string","format":"uuid","description":"ID магазина (UUIDv7)","title":"X-Shop-Id"},"description":"ID магазина (UUIDv7)"},{"name":"x-api-key","in":"header","required":true,"schema":{"type":"string","description":"Секретный API ключ магазина (cis_sec_...)","title":"X-Api-Key"},"description":"Секретный API ключ магазина (cis_sec_...)"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MerchantPayoutCreateRequest"}}}},"responses":{"201":{"description":"Успешно","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MerchantPayoutResponse"}}}},"422":{"description":"Ошибка валидации","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/store/capabilities":{"get":{"tags":["Платежи"],"summary":"Возможности магазина","description":"Какие способы оплаты подключены и активны у вашего магазина прямо сейчас, и с какой\nкомиссией. Проверяйте перед тем, как предлагать способ оплаты покупателю или показывать\nсвой эффективный тариф.","operationId":"get_store_capabilities_store_capabilities_get","parameters":[{"name":"x-shop-id","in":"header","required":true,"schema":{"type":"string","format":"uuid","description":"ID магазина (UUIDv7)","title":"X-Shop-Id"},"description":"ID магазина (UUIDv7)"},{"name":"x-api-key","in":"header","required":true,"schema":{"type":"string","description":"Секретный API ключ магазина (cis_sec_...)","title":"X-Api-Key"},"description":"Секретный API ключ магазина (cis_sec_...)"}],"responses":{"200":{"description":"Успешно","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StoreCapabilitiesResponse"}}}},"422":{"description":"Ошибка валидации","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/payments/sbp-direct":{"post":{"tags":["White label"],"summary":"Прямой запрос SBP QR","description":"Создаёт платёж через СБП и сразу возвращает готовый sbp_qr_payload, без перенаправления\nпокупателя на нашу страницу оплаты. Доступно только магазинам с явно включённым администратором\nрежимом прямого SBP QR (см. GET /store/capabilities), иначе вернётся 403.\n\nМинимальная сумма для SBP не ограничена.\n\npayload: необязательное поле для ваших произвольных данных — вернётся эхом в GET\n/payments/status и в вебхуке, если было передано здесь.","operationId":"create_direct_sbp_payment_payments_sbp_direct_post","parameters":[{"name":"x-shop-id","in":"header","required":true,"schema":{"type":"string","format":"uuid","description":"ID магазина (UUIDv7)","title":"X-Shop-Id"},"description":"ID магазина (UUIDv7)"},{"name":"x-api-key","in":"header","required":true,"schema":{"type":"string","description":"Секретный API ключ магазина (cis_sec_...)","title":"X-Api-Key"},"description":"Секретный API ключ магазина (cis_sec_...)"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DirectSbpPaymentCreateRequest"}}}},"responses":{"201":{"description":"Успешно","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DirectSbpPaymentResponse"}}}},"422":{"description":"Ошибка валидации","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/subscriptions":{"post":{"tags":["Подписки"],"summary":"Создать подписку","description":"Создаёт рекуррентный платёж (подписку). В ответе payment_url для первого цикла, отправьте\nтуда покупателя. Оплата первого цикла одновременно списывает деньги и сохраняет способ\nоплаты для дальнейших автоматических списаний. Нужно разрешение на автоплатежи для этого\nмагазина (выдаёт администратор по каждому магазину отдельно), без него ответ 403, пишите\nв поддержку.","operationId":"create_subscription_subscriptions_post","parameters":[{"name":"x-shop-id","in":"header","required":true,"schema":{"type":"string","format":"uuid","description":"ID магазина (UUIDv7)","title":"X-Shop-Id"},"description":"ID магазина (UUIDv7)"},{"name":"x-api-key","in":"header","required":true,"schema":{"type":"string","description":"Секретный API ключ магазина (cis_sec_...)","title":"X-Api-Key"},"description":"Секретный API ключ магазина (cis_sec_...)"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionCreateRequest"}}}},"responses":{"201":{"description":"Успешно","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionResponse"}}}},"422":{"description":"Ошибка валидации","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["Подписки"],"summary":"Список подписок","description":"Список подписок магазина, сначала новые.","operationId":"list_subscriptions_subscriptions_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"exclusiveMinimum":0,"default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"$ref":"#/components/schemas/SubscriptionStatus"},{"type":"null"}],"description":"Отфильтровать по статусу.","title":"Status"},"description":"Отфильтровать по статусу."},{"name":"x-shop-id","in":"header","required":true,"schema":{"type":"string","format":"uuid","description":"ID магазина (UUIDv7)","title":"X-Shop-Id"},"description":"ID магазина (UUIDv7)"},{"name":"x-api-key","in":"header","required":true,"schema":{"type":"string","description":"Секретный API ключ магазина (cis_sec_...)","title":"X-Api-Key"},"description":"Секретный API ключ магазина (cis_sec_...)"}],"responses":{"200":{"description":"Успешно","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionListResponse"}}}},"422":{"description":"Ошибка валидации","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/subscriptions/{subscription_id}":{"get":{"tags":["Подписки"],"summary":"Подписка по ID","description":"Детали подписки вместе с историей списаний, сначала новые.","operationId":"get_subscription_subscriptions__subscription_id__get","parameters":[{"name":"subscription_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Subscription Id"}},{"name":"x-shop-id","in":"header","required":true,"schema":{"type":"string","format":"uuid","description":"ID магазина (UUIDv7)","title":"X-Shop-Id"},"description":"ID магазина (UUIDv7)"},{"name":"x-api-key","in":"header","required":true,"schema":{"type":"string","description":"Секретный API ключ магазина (cis_sec_...)","title":"X-Api-Key"},"description":"Секретный API ключ магазина (cis_sec_...)"}],"responses":{"200":{"description":"Успешно","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionDetailResponse"}}}},"422":{"description":"Ошибка валидации","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Подписки"],"summary":"Изменить подписку","description":"Меняет сумму, периодичность или описание для будущих циклов. Уже проведённые платежи не\nтрогает. Дата следующего списания не сдвигается, меняется только интервал после неё.","operationId":"update_subscription_subscriptions__subscription_id__patch","parameters":[{"name":"subscription_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Subscription Id"}},{"name":"x-shop-id","in":"header","required":true,"schema":{"type":"string","format":"uuid","description":"ID магазина (UUIDv7)","title":"X-Shop-Id"},"description":"ID магазина (UUIDv7)"},{"name":"x-api-key","in":"header","required":true,"schema":{"type":"string","description":"Секретный API ключ магазина (cis_sec_...)","title":"X-Api-Key"},"description":"Секретный API ключ магазина (cis_sec_...)"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionUpdateRequest"}}}},"responses":{"200":{"description":"Успешно","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionResponse"}}}},"422":{"description":"Ошибка валидации","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/subscriptions/{subscription_id}/cancel":{"post":{"tags":["Подписки"],"summary":"Отменить подписку","description":"Отменяет подписку, дальше списаний не будет. По возможности отзывает сохранённый способ\nоплаты у платёжного провайдера.","operationId":"cancel_subscription_subscriptions__subscription_id__cancel_post","parameters":[{"name":"subscription_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Subscription Id"}},{"name":"x-shop-id","in":"header","required":true,"schema":{"type":"string","format":"uuid","description":"ID магазина (UUIDv7)","title":"X-Shop-Id"},"description":"ID магазина (UUIDv7)"},{"name":"x-api-key","in":"header","required":true,"schema":{"type":"string","description":"Секретный API ключ магазина (cis_sec_...)","title":"X-Api-Key"},"description":"Секретный API ключ магазина (cis_sec_...)"}],"responses":{"200":{"description":"Успешно","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionResponse"}}}},"422":{"description":"Ошибка валидации","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/payments/card-direct/bundle":{"get":{"tags":["White label"],"summary":"Скачать JS-бандл","description":"Отдаёт актуальный JS-бандл для вашей страницы. Скачивайте его не реже, чем раз в 6 часов\n(рекомендуем по расписанию) и отдавайте покупателям со своего домена. Токен внутри бандла\nдействует 8 часов, потом карты от этой копии перестают приниматься.\n\nБандл подписан для вашего магазина, его нельзя править: изменённая копия будет\nотклонена. Размер около 7 КБ.\n\nВ заголовках ответа: `X-Bundle-Expires` (когда истекает токен), `X-Bundle-Version` и\n`X-Bundle-Released-At` (версия бандла и время её выпуска, Unix-секунды). Узнать о новой версии\nбез скачивания можно через `GET /payments/card-direct/bundle/version`.","operationId":"white_label_bundle_payments_card_direct_bundle_get","parameters":[{"name":"x-shop-id","in":"header","required":true,"schema":{"type":"string","format":"uuid","description":"ID магазина (UUIDv7)","title":"X-Shop-Id"},"description":"ID магазина (UUIDv7)"},{"name":"x-api-key","in":"header","required":true,"schema":{"type":"string","description":"Секретный API ключ магазина (cis_sec_...)","title":"X-Api-Key"},"description":"Секретный API ключ магазина (cis_sec_...)"}],"responses":{"200":{"description":"Код бандла","content":{"application/javascript":{}}},"422":{"description":"Ошибка валидации","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/payments/card-direct/bundle/version":{"get":{"tags":["White label"],"summary":"Версия бандла","description":"Лёгкий запрос без выдачи токена: какая версия бандла актуальна и когда она выпущена. Опрашивайте\nраз в 5-10 минут и скачивайте бандл заново, когда `released_at` стал больше, чем у вашей\nкопии. Предыдущая версия принимается ещё ограниченное время (`previous_valid_until`), после\nнего карты, зашифрованные старым бандлом, отклоняются.","operationId":"white_label_bundle_version_payments_card_direct_bundle_version_get","parameters":[{"name":"x-shop-id","in":"header","required":true,"schema":{"type":"string","format":"uuid","description":"ID магазина (UUIDv7)","title":"X-Shop-Id"},"description":"ID магазина (UUIDv7)"},{"name":"x-api-key","in":"header","required":true,"schema":{"type":"string","description":"Секретный API ключ магазина (cis_sec_...)","title":"X-Api-Key"},"description":"Секретный API ключ магазина (cis_sec_...)"}],"responses":{"200":{"description":"Успешно","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BundleVersionResponse"}}}},"422":{"description":"Ошибка валидации","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/payments/card-direct":{"post":{"tags":["White label"],"summary":"Прямая оплата картой","description":"Создаёт платёж и проводит его зашифрованной картой за один вызов. Работает как\n`/payments/sbp-direct`: наша страница оплаты не участвует.\n\nШаг `step.status`: `SUCCESS`, `PENDING`, `ERROR` или шаг 3-D Secure. Окончательный\nрезультат приходит вебхуком и через `GET /payments/status`, ответу `SUCCESS` из этого метода\nкак единственному источнику доверять не нужно.","operationId":"create_card_direct_payment_payments_card_direct_post","parameters":[{"name":"x-shop-id","in":"header","required":true,"schema":{"type":"string","format":"uuid","description":"ID магазина (UUIDv7)","title":"X-Shop-Id"},"description":"ID магазина (UUIDv7)"},{"name":"x-api-key","in":"header","required":true,"schema":{"type":"string","description":"Секретный API ключ магазина (cis_sec_...)","title":"X-Api-Key"},"description":"Секретный API ключ магазина (cis_sec_...)"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CardDirectPaymentRequest"}}}},"responses":{"201":{"description":"Успешно","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CardDirectPaymentResponse"}}}},"422":{"description":"Ошибка валидации","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/payments/card-direct/{transaction_id}/complete-3ds":{"post":{"tags":["White label"],"summary":"Продолжить 3-D Secure (шаг метода)","description":"Вызывается после невидимого шага метода 3-D Secure v2 (`step.status` равен `3DS_V2_METHOD`),\nчерез ~10 секунд после того, как вы загрузили скрытые фреймы. Возвращает следующий шаг в том\nже формате, что `step` выше: чаще всего `3DS_V2_CHALLENGE`, `PENDING` или `SUCCESS`.","operationId":"card_direct_complete_3ds_payments_card_direct__transaction_id__complete_3ds_post","parameters":[{"name":"transaction_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Transaction Id"}},{"name":"x-shop-id","in":"header","required":true,"schema":{"type":"string","format":"uuid","description":"ID магазина (UUIDv7)","title":"X-Shop-Id"},"description":"ID магазина (UUIDv7)"},{"name":"x-api-key","in":"header","required":true,"schema":{"type":"string","description":"Секретный API ключ магазина (cis_sec_...)","title":"X-Api-Key"},"description":"Секретный API ключ магазина (cis_sec_...)"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Complete3DSRequest"}}}},"responses":{"200":{"description":"Успешно","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentPayResponse"}}}},"422":{"description":"Ошибка валидации","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"BundleVersionResponse":{"properties":{"version":{"type":"string","title":"Version","description":"Версия актуального бандла."},"released_at":{"type":"integer","title":"Released At","description":"Когда эта версия выпущена, Unix-секунды."},"previous_valid_until":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Previous Valid Until","description":"До какого момента (Unix-секунды) ещё принимается предыдущая версия. Пусто, если предыдущая уже не принимается или её не было."},"next_release_at":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Next Release At","description":"Когда запланирован следующий выпуск, если мы его анонсировали."}},"type":"object","required":["version","released_at"],"title":"BundleVersionResponse"},"CardDirectPaymentRequest":{"properties":{"amount":{"type":"integer","exclusiveMinimum":0.0,"title":"Amount","description":"Сумма платежа в копейках. Например, 150 рублей 49 копеек это 15049. Минимальная сумма для карты 50 ₽.","examples":[100000]},"currency":{"type":"string","maxLength":3,"minLength":3,"title":"Currency","description":"Пока поддерживаем только `RUB`.","default":"RUB"},"order_id":{"type":"string","maxLength":255,"minLength":1,"title":"Order Id","description":"Уникальный ID заказа в вашей системе в рамках магазина. Тот же `order_id` вы передаёте в `CardSeal.seal({ orderId })` на странице: зашифрованная карта привязана к нему. Повторный вызов с тем же order_id вернёт ошибку 400.","examples":["order-10293"]},"card":{"type":"string","maxLength":8192,"title":"Card","description":"Поле `card` из результата `CardSeal.seal(...)`, ровно как пришло из браузера, без изменений. Расшифровать его можем только мы, а любое изменение строки делает платёж недействительным. Данные для 3-D Secure (browserInfo) внутри него."},"customer_ip":{"type":"string","title":"Customer Ip","description":"Реальный IP покупателя (IPv4 или IPv6), как его видит ваш сервер, а не IP вашего сервера. Банк оценивает по нему риск платежа.","examples":["203.0.113.42"]},"customer_id":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Customer Id","description":"ID покупателя в вашей системе (необязательно)."},"description":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}],"title":"Description","description":"Описание платежа."},"payload":{"anyOf":[{"type":"string","maxLength":1024},{"type":"null"}],"title":"Payload","description":"Ваши произвольные данные, вернутся эхом в GET /payments/status и в вебхуке."},"merchant_url":{"anyOf":[{"type":"string","maxLength":1024},{"type":"null"}],"title":"Merchant Url","description":"Только для магазинов с включённым переопределением merchant_url (как у `/payments/sbp-direct`)."},"redirect_success_url":{"anyOf":[{"type":"string","maxLength":1024},{"type":"null"}],"title":"Redirect Success Url","description":"Адрес вашей страницы, куда банк вернёт покупателя после 3-D Secure при успешной оплате. Только http(s). Если не указан, берётся адрес по умолчанию из настроек магазина, а если и его нет, покупателя вернут на нашу страницу оплаты."},"redirect_fail_url":{"anyOf":[{"type":"string","maxLength":1024},{"type":"null"}],"title":"Redirect Fail Url","description":"Адрес вашей страницы, куда банк вернёт покупателя при неуспешной оплате. Правила те же, что у redirect_success_url."}},"type":"object","required":["amount","order_id","card","customer_ip"],"title":"CardDirectPaymentRequest","description":"Создаёт платёж картой и сразу проводит его по зашифрованным данным карты, без нашей\nстраницы оплаты и без отдельного `POST /payments`. В ответе сразу следующий шаг:\nрезультат или 3-D Secure, который вы рисуете у себя. Доступно только магазинам с включённым\nадминистратором white label (иначе 403). Результат придёт вебхуком на webhook_url или его\nможно узнать через GET /payments/status."},"CardDirectPaymentResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"order_id":{"type":"string","title":"Order Id"},"status":{"$ref":"#/components/schemas/PublicTransactionStatus","description":"Статус платежа: `PENDING`, пока не пришёл итог."},"amount":{"type":"integer","title":"Amount"},"charged_amount":{"type":"integer","title":"Charged Amount"},"payload":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Payload"},"expires_in_seconds":{"type":"integer","title":"Expires In Seconds"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"step":{"$ref":"#/components/schemas/PaymentPayResponse","description":"Что делать дальше: `SUCCESS`, `PENDING`, `ERROR` или один из шагов 3-D Secure (`3DS_V1`, `3DS_V2_METHOD`, `3DS_V2_CHALLENGE`), которые вы рисуете на своей странице сами (описание в разделе)."}},"type":"object","required":["id","order_id","status","amount","charged_amount","expires_in_seconds","created_at","step"],"title":"CardDirectPaymentResponse"},"Complete3DSRequest":{"properties":{"gateway_session_id":{"type":"string","title":"Gateway Session Id","description":"gateway-session-id из ответа /pay"},"three_ds_method_data":{"type":"string","title":"Three Ds Method Data","description":"threeDSMethodData из ответа /pay"},"bank_operation_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bank Operation Id","description":"bank-operation-id из ответа /pay, если был"}},"type":"object","required":["gateway_session_id","three_ds_method_data"],"title":"Complete3DSRequest"},"CryptoInvoiceInfo":{"properties":{"chain":{"type":"string","title":"Chain"},"title":{"type":"string","title":"Title"},"address":{"type":"string","title":"Address"},"asset":{"type":"string","title":"Asset","description":"Монета платежа: `USDT`, `TRX`, `GRAM` или `BNB`.","default":"USDT"},"amount":{"type":"string","title":"Amount","description":"Точная сумма к отправке в монете `asset`, строкой (6 знаков), например `50.032000`. Для TRX/GRAM/BNB рассчитана по курсу на момент выбора монеты и зафиксирована."},"usd_amount":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Usd Amount","description":"Сумма счёта в USD (то, что покупатель оплачивает), строкой, например `111.00`."},"rate_usd":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rate Usd","description":"Курс 1 монеты к USD, зафиксированный в счёте. Только для TRX/GRAM/BNB."},"expires_at":{"type":"string","format":"date-time","title":"Expires At"}},"type":"object","required":["chain","title","address","amount","expires_at"],"title":"CryptoInvoiceInfo"},"CryptoNetworkInfo":{"properties":{"chain":{"type":"string","title":"Chain"},"title":{"type":"string","title":"Title"},"assets":{"items":{"type":"string"},"type":"array","title":"Assets","description":"Монеты, которые можно отправить в этой сети: `USDT` и родная монета сети (`TRX` в TRON, `GRAM` в TON, `BNB` в BSC)."}},"type":"object","required":["chain","title"],"title":"CryptoNetworkInfo"},"DirectSbpPaymentCreateRequest":{"properties":{"amount":{"type":"integer","exclusiveMinimum":0.0,"title":"Amount","description":"Сумма платежа в копейках (мы всегда работаем в минорных единицах). Например, 150 рублей 49 копеек нужно передать как 15049. Для SBP минимальная сумма не ограничена.","examples":[100000]},"currency":{"type":"string","maxLength":3,"minLength":3,"title":"Currency","description":"Валюта в формате ISO 4217. Пока поддерживаем только `RUB`.","default":"RUB","examples":["RUB"]},"order_id":{"type":"string","maxLength":255,"minLength":1,"title":"Order Id","description":"Уникальный ID заказа в вашей системе, в рамках одного магазина (Shop ID). Если вызвать метод повторно с тем же order_id, получите ошибку 400.","examples":["order-10293"]},"customer_id":{"type":"string","maxLength":255,"minLength":1,"title":"Customer Id","description":"ID покупателя в вашей системе. Обязателен для СБП: провайдер отклоняет платежи без идентификатора плательщика.","examples":["customer-4471"]},"customer_ip":{"type":"string","title":"Customer Ip","description":"Реальный IP-адрес покупателя, того, кто будет сканировать QR, а не вашего сервера. В обычном флоу мы берём его сами из запроса браузера покупателя к нашей странице оплаты, но здесь это H2H-вызов с вашего сервера, поэтому IP покупателя нужно передать явно: платёжный провайдер использует его для антифрод-скоринга.","examples":["203.0.113.42"]},"description":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}],"title":"Description","description":"Описание платежа (необязательно)."},"payload":{"anyOf":[{"type":"string","maxLength":1024},{"type":"null"}],"title":"Payload","description":"Ваши произвольные данные (до 1024 символов), никак не интерпретируются нами. Вернутся эхом при проверке статуса (GET /payments/status) и в теле вебхука, если были переданы здесь. Необязательное поле — если не передать, в ответах и вебхуке поле отсутствует вовсе (не приходит как null)."},"merchant_url":{"anyOf":[{"type":"string","maxLength":1024},{"type":"null"}],"title":"Merchant Url"},"redirect_success_url":{"anyOf":[{"type":"string","maxLength":1024},{"type":"null"}],"title":"Redirect Success Url","description":"Ссылка на страницу транзакции/заказа на вашей стороне: банк вернёт покупателя на неё по кнопке «Вернуться к заказу» после оплаты. Необязательное поле — если не передать, банку никакая ссылка не отправляется.","examples":["https://shop.example.com/order/10293"]},"redirect_fail_url":{"anyOf":[{"type":"string","maxLength":1024},{"type":"null"}],"title":"Redirect Fail Url","description":"Ссылка на вашей стороне, куда банк вернёт покупателя при неуспешной оплате. Необязательное поле — если не передать, банку эта ссылка не отправляется.","examples":["https://shop.example.com/order/10293/failed"]}},"type":"object","required":["amount","order_id","customer_id","customer_ip"],"title":"DirectSbpPaymentCreateRequest","description":"Создаёт платёж через СБП и сразу регистрирует его у провайдера, минуя нашу страницу\nоплаты: в ответе сразу приходит готовый sbp_qr_payload. Доступно только магазинам, которым\nадминистратор явно включил этот режим (см. GET /store/capabilities), иначе вернётся 403.\nQR-код и весь экран оплаты вы показываете полностью на своей стороне, а результат придёт\nвебхуком на webhook_url или его можно узнать через GET /payments/status."},"DirectSbpPaymentResponse":{"properties":{"payload":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Payload","description":"Эхо вашего payload, если он был передан при создании платежа. Поле отсутствует в ответе, если payload не передавался."},"id":{"type":"string","format":"uuid","title":"Id","description":"ID транзакции на стороне cisPay (UUIDv7), используйте его для проверки статуса."},"order_id":{"type":"string","title":"Order Id","description":"Эхо вашего order_id из запроса."},"status":{"$ref":"#/components/schemas/PublicTransactionStatus","description":"Статус транзакции. Сразу после создания всегда `PENDING`."},"amount":{"type":"integer","title":"Amount","description":"Сумма в копейках (нетто, как в запросе)."},"charged_amount":{"type":"integer","title":"Charged Amount","description":"Сумма к оплате покупателем в копейках (может включать комиссию, если её платит покупатель)."},"sbp_qr_payload":{"type":"string","title":"Sbp Qr Payload","description":"Готовая redirect-ссылка/QR-payload СБП, покажите её покупателю сами."},"expires_in_seconds":{"type":"integer","title":"Expires In Seconds","description":"Сколько целых секунд осталось до истечения счёта.","default":0},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","order_id","status","amount","charged_amount","sbp_qr_payload","created_at"],"title":"DirectSbpPaymentResponse","description":"Ответ на прямой запрос SBP QR."},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"MerchantBalanceResponse":{"properties":{"pending_conversion_rub_kopecks":{"type":"integer","title":"Pending Conversion Rub Kopecks","description":"RUB-выручка, ещё не сконвертированная в USD, в копейках. Вывод недоступен, пока не сконвертировано."},"available_usd_cents":{"type":"integer","title":"Available Usd Cents","description":"Доступно к выводу, в центах USD (после конвертации, за вычетом уже выплаченного и выплат в обработке)."},"pending_payouts_usd_cents":{"type":"integer","title":"Pending Payouts Usd Cents","description":"Сумма заявок на вывод, которые ещё в обработке, в центах USD."}},"type":"object","required":["pending_conversion_rub_kopecks","available_usd_cents","pending_payouts_usd_cents"],"title":"MerchantBalanceResponse","description":"Баланс мерчанта (суммарно по всем магазинам под одним аккаунтом), в двух стадиях:\nRUB-выручка ждёт ручной конвертации администратором в USD, после чего доступна к выводу."},"MerchantConversionItem":{"properties":{"id":{"type":"string","format":"uuid","title":"Id","description":"ID конвертации"},"converted_at":{"type":"string","format":"date-time","title":"Converted At","description":"Когда конвертация проведена (UTC)"},"period_end":{"type":"string","format":"date-time","title":"Period End","description":"Верхняя граница периода: в конвертацию вошла выручка, оплаченная не позже этого момента (UTC). Может быть раньше converted_at, если конвертацию провели задним числом по курсу прошлого дня."},"payment_method":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Payment Method","description":"CARD или SBP. null у старых общих конвертаций."},"amount_rub_kopecks":{"type":"integer","title":"Amount Rub Kopecks","description":"Сумма в копейках RUB. Отрицательная у корректировки за возврат уже сконвертированного платежа."},"amount_usd_cents":{"type":"integer","title":"Amount Usd Cents","description":"Сумма в центах USD (знак совпадает с amount_rub_kopecks)"},"rub_per_usd":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Rub Per Usd","description":"Применённый курс: сколько РУБЛЕЙ за 1 USD (например 92.5). Не USD за рубль."},"related_transaction_id":{"anyOf":[{"type":"string","format":"uuid"},{"type":"null"}],"title":"Related Transaction Id","description":"Заполнено только у корректировки за возврат: ID платежа"}},"type":"object","required":["id","converted_at","period_end","amount_rub_kopecks","amount_usd_cents","rub_per_usd"],"title":"MerchantConversionItem","description":"Один прогон конвертации RUB в USD по вашему аккаунту."},"MerchantConversionListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/MerchantConversionItem"},"type":"array","title":"Items"},"limit":{"type":"integer","title":"Limit"},"offset":{"type":"integer","title":"Offset"},"has_more":{"type":"boolean","title":"Has More"}},"type":"object","required":["items","limit","offset","has_more"],"title":"MerchantConversionListResponse"},"MerchantPayoutCreateRequest":{"properties":{"amount_usd_cents":{"anyOf":[{"type":"integer","exclusiveMinimum":0.0},{"type":"null"}],"title":"Amount Usd Cents","description":"Сумма вывода в центах USD, минимум 500 ($5). Не указывайте вместе с withdraw_all=true.","examples":[10000]},"withdraw_all":{"type":"boolean","title":"Withdraw All","description":"Вывести весь доступный баланс целиком. Если true, amount_usd_cents указывать не нужно (и нельзя).","default":false}},"type":"object","title":"MerchantPayoutCreateRequest","description":"Запрос на вывод средств с $-баланса. Адрес и сеть здесь не указываются: вывод всегда идёт\nна реквизиты по умолчанию, заданные в личном кабинете (Профиль → «Реквизиты для вывода по\nумолчанию»). Так исключается вывод через API на произвольный кошелёк. Если ещё не задавали\nреквизиты, сделайте это один раз в личном кабинете."},"MerchantPayoutResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id","description":"ID заявки на вывод."},"amount_usd_cents":{"type":"integer","title":"Amount Usd Cents","description":"Выведенная сумма, в центах USD."},"wallet_address":{"type":"string","title":"Wallet Address","description":"Адрес кошелька, на который отправлен вывод (реквизиты по умолчанию)."},"network":{"$ref":"#/components/schemas/PayoutNetwork","description":"Сеть перевода USDT."},"status":{"$ref":"#/components/schemas/PayoutStatus","description":"`PENDING`/`PROCESSING`: в обработке. `SUCCESS`: выполнен. `FAILED`: отклонён."},"remaining_balance_usd_cents":{"type":"integer","title":"Remaining Balance Usd Cents","description":"Сколько осталось доступно к выводу на балансе после этой заявки, в центах USD."},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","amount_usd_cents","wallet_address","network","status","remaining_balance_usd_cents","created_at"],"title":"MerchantPayoutResponse","description":"Ответ на запрос вывода средств."},"MerchantRefundResponse":{"properties":{"transaction_id":{"type":"string","format":"uuid","title":"Transaction Id"},"status":{"$ref":"#/components/schemas/PublicTransactionStatus"},"refund_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Refund Status"}},"type":"object","required":["transaction_id","status"],"title":"MerchantRefundResponse","description":"Refund result as the merchant API shows it: same shape as the internal one, but the status\ngoes through PublicStatus so internal-only values never appear in the public spec."},"MerchantTransactionItem":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"order_id":{"type":"string","title":"Order Id"},"payment_method":{"$ref":"#/components/schemas/PaymentMethod"},"status":{"$ref":"#/components/schemas/PublicTransactionStatus"},"amount":{"type":"integer","title":"Amount","description":"Сумма в копейках (нетто)."},"charged_amount":{"type":"integer","title":"Charged Amount","description":"Сумма к оплате покупателем в копейках."},"merchant_revenue":{"type":"integer","title":"Merchant Revenue","description":"Сумма, зачисленная на ваш баланс, в копейках."},"customer_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Customer Id"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"is_sandbox":{"type":"boolean","title":"Is Sandbox","description":"True для тестовых транзакций из Песочницы (не влияют на баланс).","default":false},"paid_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Paid At"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","order_id","payment_method","status","amount","charged_amount","merchant_revenue","created_at"],"title":"MerchantTransactionItem","description":"Один элемент списка транзакций (`GET /transactions`). Внутренние технические детали\nобработки платежа (данные процессинг-партнёра, служебные ID) намеренно не включены."},"MerchantTransactionListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/MerchantTransactionItem"},"type":"array","title":"Items"},"limit":{"type":"integer","title":"Limit","description":"Применённый лимит (см. запрос)."},"offset":{"type":"integer","title":"Offset","description":"Применённое смещение (см. запрос)."},"has_more":{"type":"boolean","title":"Has More","description":"Есть ли ещё записи после текущей страницы."}},"type":"object","required":["items","limit","offset","has_more"],"title":"MerchantTransactionListResponse"},"PaymentCreateRequest":{"properties":{"amount":{"type":"integer","exclusiveMinimum":0.0,"title":"Amount","description":"Сумма платежа в копейках (мы всегда работаем в минорных единицах). Например, 150 рублей 49 копеек нужно передать как 15049. Минимальная сумма для CARD — 50 ₽ (5000 копеек), для SBP минимальная сумма не ограничена. Для CRYPTO сумма в центах USD (1000 = 10.00 USD) или в копейках, если currency RUB. Минимум задаётся администратором (по умолчанию 5 USD).","examples":[100000]},"currency":{"type":"string","maxLength":3,"minLength":3,"title":"Currency","description":"Валюта в формате ISO 4217. Для CARD и SBP только `RUB`. Для CRYPTO `USD` или `RUB` (рубли пересчитываются в USD по курсу ЦБ РФ).","default":"RUB","examples":["RUB"]},"order_id":{"type":"string","maxLength":255,"minLength":1,"title":"Order Id","description":"Уникальный ID заказа в вашей системе, в рамках одного магазина (Shop ID). Если вызвать метод повторно с тем же order_id, получите ошибку 400.","examples":["order-10293"]},"payment_method":{"anyOf":[{"type":"string","enum":["CARD","SBP","CRYPTO"]},{"type":"null"}],"title":"Payment Method","description":"Способ оплаты: `CARD` (банковская карта, 3-D Secure проходит на нашей стороне), `SBP` (Система быстрых платежей, оплата по QR-коду через банковское приложение) или `CRYPTO` (USDT, сеть покупатель выбирает на странице оплаты; валюта счёта USD). Если не передать (или передать `null`) для счёта в RUB, покупатель сам выберет способ на странице оплаты из подключённых у магазина (СБП, карта, криптовалюта), при этом обязателен `customer_id`. Для счёта в USD без метода автоматически выбирается `CRYPTO`. После создания платежа и после выбора метода покупателем изменить его нельзя.","examples":["CARD"]},"customer_id":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Customer Id","description":"ID покупателя в вашей системе. Обязателен для SBP: провайдер СБП отклоняет платежи без идентификатора плательщика.","examples":["customer-4471"]},"redirect_success_url":{"anyOf":[{"type":"string","maxLength":1024},{"type":"null"}],"title":"Redirect Success Url","description":"Куда вернуть покупателя после успешной оплаты. Необязательное поле, но если заполняете, укажите абсолютный http(s)-адрес: покупатель попадёт туда автоматически со страницы оплаты через несколько секунд после оплаты. Если ничего не передать, используется адрес по умолчанию из настроек магазина, а если и он не задан, покупатель просто остаётся на нашей странице результата.","examples":["https://myshop.ru/success"]},"redirect_fail_url":{"anyOf":[{"type":"string","maxLength":1024},{"type":"null"}],"title":"Redirect Fail Url","description":"Куда вернуть покупателя, если оплата не прошла. Необязательное поле, работает так же, как redirect_success_url, но переход здесь не автоматический: покупателю показывается кнопка, чтобы он мог сначала попробовать оплатить ещё раз.","examples":["https://myshop.ru/fail"]},"description":{"anyOf":[{"type":"string","maxLength":512},{"type":"null"}],"title":"Description","description":"Описание платежа. Необязательное поле, но если заполнить, покупатель увидит его на странице оплаты."},"payload":{"anyOf":[{"type":"string","maxLength":1024},{"type":"null"}],"title":"Payload","description":"Ваши произвольные данные (до 1024 символов), никак не интерпретируются нами. Вернутся эхом при проверке статуса (GET /payments/status) и в теле вебхука, если были переданы здесь. Необязательное поле — если не передать, в ответах и вебхуке поле отсутствует вовсе (не приходит как null)."}},"type":"object","required":["amount","order_id"],"title":"PaymentCreateRequest","description":"Создаёт счёт на оплату по переданным параметрам и возвращает ссылку на страницу оплаты, куда нужно отправить покупателя."},"PaymentMethod":{"type":"string","enum":["CARD","SBP","CRYPTO"],"title":"PaymentMethod"},"PaymentMethodCapability":{"properties":{"payment_method":{"$ref":"#/components/schemas/PaymentMethod"},"is_active":{"type":"boolean","title":"Is Active","description":"Подключён ли этот способ оплаты и активен ли он для вашего магазина прямо сейчас."},"system_fee_percent":{"type":"integer","title":"System Fee Percent","description":"Комиссия в базисных пунктах (1/100 процента). Например, 350 = 3.5%."},"customer_fee_share_percent":{"type":"integer","title":"Customer Fee Share Percent","description":"Доля комиссии, добавляемая к сумме покупателя, в базисных пунктах (0 = комиссия целиком вычитается из вашей выручки, 10000 = целиком добавляется к сумме покупателя, любое значение между этими границами делится пропорционально)."}},"type":"object","required":["payment_method","is_active","system_fee_percent","customer_fee_share_percent"],"title":"PaymentMethodCapability"},"PaymentPayResponse":{"properties":{"status":{"type":"string","enum":["SUCCESS","3DS_V1","3DS_V2_METHOD","3DS_V2_CHALLENGE","PENDING","ERROR"],"title":"Status"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"},"action":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Action"},"pa_req":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pa Req"},"term_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Term Url"},"md":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Md"},"hidden_request_1_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hidden Request 1 Url"},"hidden_request_2_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hidden Request 2 Url"},"three_ds_method_data":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Three Ds Method Data"},"gateway_session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gateway Session Id"},"bank_operation_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bank Operation Id"},"creq":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Creq"},"three_ds_session_data":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Three Ds Session Data"}},"type":"object","required":["status"],"title":"PaymentPayResponse","description":"Discriminated result of submitting card data. The frontend branches on `status` only —\nit must never learn which processing partner produced these fields."},"PaymentResponse":{"properties":{"payload":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Payload","description":"Эхо вашего payload, если он был передан при создании платежа. Поле отсутствует в ответе, если payload не передавался."},"id":{"type":"string","format":"uuid","title":"Id","description":"ID транзакции на стороне cisPay (UUIDv7), используйте его для проверки статуса."},"order_id":{"type":"string","title":"Order Id","description":"Эхо вашего order_id из запроса."},"status":{"$ref":"#/components/schemas/PublicTransactionStatus","description":"Статус транзакции. Сразу после создания всегда `PENDING`."},"amount":{"type":"integer","title":"Amount","description":"Сумма в копейках (нетто, как в запросе)."},"charged_amount":{"type":"integer","title":"Charged Amount","description":"Сумма к оплате покупателем в копейках (может включать комиссию, если её платит покупатель)."},"payment_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Payment Url","description":"Ссылка на нашу хостинговую страницу оплаты, перенаправьте туда покупателя."},"source_currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Currency","description":"Только для CRYPTO, оформленного в рублях: исходная валюта заказа (`RUB`). Поле отсутствует в ответе, если не применимо."},"source_amount":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Source Amount","description":"Только для CRYPTO в рублях: исходная сумма в копейках. `amount` в таком случае уже пересчитан в центы USD."},"fx_rate":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Fx Rate","description":"Только для CRYPTO в рублях: курс ЦБ РФ (рублей за 1 USD), по которому сумма была пересчитана при создании платежа."},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","order_id","status","amount","charged_amount","created_at"],"title":"PaymentResponse","description":"Ответ на создание платежа."},"PaymentStatusResponse":{"properties":{"payload":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Payload","description":"Эхо вашего payload, если он был передан при создании платежа. Поле отсутствует в ответе, если payload не передавался."},"id":{"type":"string","format":"uuid","title":"Id"},"order_id":{"type":"string","title":"Order Id","description":"Ваш order_id."},"status":{"$ref":"#/components/schemas/PublicTransactionStatus","description":"`PENDING`: ожидает оплаты. `PAID`: оплачен. `FAILED`: отклонён банком или провайдером. `EXPIRED`: счёт не был оплачен в течение 30 минут. `REFUNDED`: возвращён."},"amount":{"type":"integer","title":"Amount","description":"Сумма в копейках (нетто)."},"charged_amount":{"type":"integer","title":"Charged Amount","description":"Сумма к оплате покупателем в копейках."},"payment_method":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Payment Method","description":"`CARD`, `SBP` или `CRYPTO`. `null`, пока покупатель не выбрал способ на странице оплаты (см. `method_selection_required`)."},"method_selection_required":{"type":"boolean","title":"Method Selection Required","description":"True, если платёж создан без payment_method и покупатель ещё не выбрал способ оплаты на нашей странице.","default":false},"selectable_methods":{"items":{"$ref":"#/components/schemas/SelectableMethod"},"type":"array","title":"Selectable Methods","description":"Только при `method_selection_required`: методы, между которыми выбирает покупатель, и можно ли выбрать каждый для этого счёта."},"currency":{"type":"string","title":"Currency","description":"Валюта.","default":"RUB"},"store_name":{"type":"string","title":"Store Name","description":"Название магазина.","default":"Магазин"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Описание платежа, переданное при создании (если было указано)."},"available_methods":{"items":{"type":"string"},"type":"array","title":"Available Methods","description":"Активные методы оплаты магазина на момент запроса."},"is_sandbox":{"type":"boolean","title":"Is Sandbox","description":"True для тестовых транзакций, созданных через Песочницу в личном кабинете, или для платежей от заблокированного покупателя (см. `block_reason`).","default":false},"block_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Block Reason","description":"Если указано, оплата заблокирована администратором cisPay для этого покупателя, реальный платёж никогда не будет создан. Покажите это значение покупателю вместо формы оплаты."},"is_subscription":{"type":"boolean","title":"Is Subscription","description":"True, если это первый (инициирующий) платёж подписки. Тогда покажите покупателю на странице оплаты, что оформляется регулярное списание.","default":false},"subscription_interval_days":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Subscription Interval Days","description":"Периодичность списаний подписки в днях, если is_subscription=True."},"brand_primary_color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand Primary Color","description":"Брендинг чекаута магазина (цвет фона)."},"brand_gradient_end":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand Gradient End","description":"Брендинг чекаута магазина (второй цвет градиента)."},"brand_logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Brand Logo Url","description":"Брендинг чекаута магазина (логотип)."},"checkout_template":{"type":"string","title":"Checkout Template","description":"Дизайн формы оплаты: 'classic' или 'simple'.","default":"simple"},"checkout_theme":{"type":"string","title":"Checkout Theme","description":"Цветовая тема формы 'simple': 'dark' или 'light'.","default":"dark"},"sbp_qr_payload":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sbp Qr Payload","description":"Ссылка/payload QR-кода СБП, если уже сформирован."},"crypto_networks":{"items":{"$ref":"#/components/schemas/CryptoNetworkInfo"},"type":"array","title":"Crypto Networks","description":"CRYPTO: сети, доступные покупателю для оплаты прямо сейчас."},"crypto":{"anyOf":[{"$ref":"#/components/schemas/CryptoInvoiceInfo"},{"type":"null"}],"description":"CRYPTO: реквизиты оплаты (адрес и точная сумма), если покупатель уже выбрал сеть."},"payment_in_progress":{"type":"boolean","title":"Payment In Progress","description":"Карта уже отправлена в обработку по этой транзакции, результат ещё не получен. Покупателю нельзя показывать форму оплаты повторно, платёж уже идёт.","default":false},"redirect_success_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Redirect Success Url","description":"Куда вернуть покупателя после успешной оплаты: значение платежа, либо адрес по умолчанию из настроек магазина."},"redirect_fail_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Redirect Fail Url","description":"Куда вернуть покупателя при неуспешной оплате: значение платежа, либо адрес по умолчанию из настроек магазина."},"paid_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Paid At","description":"Время успешной оплаты (UTC), если оплачен."},"source_currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Currency","description":"Только для CRYPTO, оформленного в рублях: исходная валюта заказа (`RUB`). Поле отсутствует в ответе, если не применимо."},"source_amount":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Source Amount","description":"Только для CRYPTO в рублях: исходная сумма в копейках. `amount` в таком случае уже пересчитан в центы USD."},"fx_rate":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Fx Rate","description":"Только для CRYPTO в рублях: курс ЦБ РФ (рублей за 1 USD), по которому сумма была пересчитана при создании платежа."},"created_at":{"type":"string","format":"date-time","title":"Created At"},"link_opened_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Link Opened At","description":"Момент, когда покупатель впервые открыл страницу оплаты (UTC). Пока не задано, действует `link_pre_visit_expiry_minutes`, после открытия `link_post_visit_expiry_minutes`."},"link_pre_visit_expiry_minutes":{"type":"integer","title":"Link Pre Visit Expiry Minutes","description":"Сколько минут ссылка действительна до первого открытия (настройка магазина).","default":30},"link_post_visit_expiry_minutes":{"type":"integer","title":"Link Post Visit Expiry Minutes","description":"Сколько минут даётся на оплату после открытия ссылки (настройка магазина).","default":30},"expires_in_seconds":{"type":"integer","title":"Expires In Seconds","description":"Сколько целых секунд осталось до истечения текущего окна оплаты. Мы уже всё посчитали на сервере, а наш чек-аут просто отсчитывает это число вниз локально, не сверяясь с часами устройства покупателя. Иначе неверно выставленное время на телефоне или компьютере могло бы показать «просрочено» сразу после открытия свежей ссылки.","default":0}},"type":"object","required":["id","order_id","status","amount","charged_amount","created_at"],"title":"PaymentStatusResponse","description":"Статус и детали транзакции. Отдаётся эндпоинтом `GET /payments/status`."},"PayoutNetwork":{"type":"string","enum":["TON","TRC20","BEP20"],"title":"PayoutNetwork"},"PayoutStatus":{"type":"string","enum":["PENDING","PROCESSING","SUCCESS","FAILED"],"title":"PayoutStatus"},"PublicTransactionStatus":{"type":"string","enum":["PENDING","PAID","FAILED","EXPIRED","REFUNDED"],"title":"PublicTransactionStatus"},"SelectableMethod":{"properties":{"method":{"type":"string","title":"Method"},"available":{"type":"boolean","title":"Available","default":true},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason","description":"Почему метод недоступен для этого счёта."}},"type":"object","required":["method"],"title":"SelectableMethod"},"StoreCapabilitiesResponse":{"properties":{"store_id":{"type":"string","format":"uuid","title":"Store Id"},"store_name":{"type":"string","title":"Store Name"},"is_active":{"type":"boolean","title":"Is Active","description":"Активен ли магазин целиком (при False все платежи отклоняются)."},"payment_methods":{"items":{"$ref":"#/components/schemas/PaymentMethodCapability"},"type":"array","title":"Payment Methods"},"direct_sbp_enabled":{"type":"boolean","title":"Direct Sbp Enabled","description":"Доступен ли POST /payments/sbp-direct: это прямой запрос SBP QR в обход нашей страницы оплаты. Включается администратором по запросу.","default":false}},"type":"object","required":["store_id","store_name","is_active","payment_methods"],"title":"StoreCapabilitiesResponse","description":"Что доступно вашему магазину прямо сейчас: какие способы оплаты подключены и с какой\nкомиссией. Проверяйте это перед тем, как предлагать покупателю способ оплаты в своём\nинтерфейсе."},"SubscriptionChargeItem":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"status":{"$ref":"#/components/schemas/PublicTransactionStatus"},"amount":{"type":"integer","title":"Amount","description":"Сумма в копейках (нетто)."},"charged_amount":{"type":"integer","title":"Charged Amount","description":"Сумма к оплате покупателем в копейках."},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"paid_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Paid At"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","status","amount","charged_amount","created_at"],"title":"SubscriptionChargeItem","description":"Один платёж (цикл) из истории подписки."},"SubscriptionCreateRequest":{"properties":{"amount":{"type":"integer","exclusiveMinimum":0.0,"title":"Amount","description":"Сумма списания за один цикл, в копейках. Без верхнего ограничения.","examples":[100000]},"currency":{"type":"string","maxLength":3,"minLength":3,"title":"Currency","description":"Валюта, ISO 4217. В данный момент поддерживается только `RUB`.","default":"RUB"},"interval_days":{"type":"integer","maximum":360.0,"minimum":7.0,"title":"Interval Days","description":"Периодичность списаний в днях. Минимум 7, максимум 360.","examples":[30]},"payment_method":{"type":"string","enum":["CARD","SBP"],"title":"Payment Method","description":"Способ оплаты для всех циклов подписки. `CARD` или `SBP`."},"customer_id":{"type":"string","maxLength":255,"minLength":1,"title":"Customer Id","description":"ID покупателя в вашей системе. Обязателен для подписок, используется как идентификатор клиента у платёжного провайдера при сохранении способа оплаты.","examples":["customer-4471"]},"subscription_purpose":{"type":"string","maxLength":255,"minLength":1,"title":"Subscription Purpose","description":"Описание того, за что списываются деньги (например, «Подписка Pro, ежемесячно»). Показывается покупателю на странице оплаты и провайдеру платежа.","examples":["Подписка Pro, ежемесячно"]},"redirect_success_url":{"anyOf":[{"type":"string","maxLength":1024},{"type":"null"}],"title":"Redirect Success Url","description":"Куда вернуть покупателя после первой оплаты."},"redirect_fail_url":{"anyOf":[{"type":"string","maxLength":1024},{"type":"null"}],"title":"Redirect Fail Url","description":"Куда вернуть покупателя при ошибке первой оплаты."}},"type":"object","required":["amount","interval_days","payment_method","customer_id","subscription_purpose"],"title":"SubscriptionCreateRequest","description":"Создаёт подписку (рекуррентный платёж) и возвращает ссылку на страницу оплаты для первого\nцикла. Покупатель сохраняет способ оплаты там же, никаких дополнительных действий с вашей\nстороны не требуется. Нужно включённое администратором разрешение на автоплатежи для\nвашего аккаунта, без него запрос вернёт 403."},"SubscriptionDetailResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"status":{"$ref":"#/components/schemas/SubscriptionStatus","description":"`PENDING`: ждёт первой оплаты. `ACTIVE`: списывается по расписанию. `PAUSED`: приостановлена. `CANCELLED`: отменена (вами или покупателем). `FAILED`: отключена после 3 неудачных попыток списания подряд."},"payment_method":{"$ref":"#/components/schemas/PaymentMethod"},"amount":{"type":"integer","title":"Amount","description":"Сумма списания за цикл, в копейках."},"currency":{"type":"string","title":"Currency"},"interval_days":{"type":"integer","title":"Interval Days"},"subscription_purpose":{"type":"string","title":"Subscription Purpose"},"customer_id":{"type":"string","title":"Customer Id"},"retry_count":{"type":"integer","title":"Retry Count","description":"Число неудачных попыток списания подряд в текущем цикле (0–3)."},"next_charge_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Next Charge At","description":"Когда произойдёт следующее списание (UTC)."},"last_charge_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Charge At","description":"Когда прошло последнее успешное списание (UTC)."},"created_at":{"type":"string","format":"date-time","title":"Created At"},"payment_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Payment Url","description":"Ссылка для первого платежа, присутствует только пока подписка ещё не активирована (`status=PENDING`)."},"charges":{"items":{"$ref":"#/components/schemas/SubscriptionChargeItem"},"type":"array","title":"Charges","description":"История списаний по подписке, новые сверху."}},"type":"object","required":["id","status","payment_method","amount","currency","interval_days","subscription_purpose","customer_id","retry_count","created_at"],"title":"SubscriptionDetailResponse"},"SubscriptionListResponse":{"properties":{"items":{"items":{"$ref":"#/components/schemas/SubscriptionResponse"},"type":"array","title":"Items"},"limit":{"type":"integer","title":"Limit"},"offset":{"type":"integer","title":"Offset"},"has_more":{"type":"boolean","title":"Has More"}},"type":"object","required":["items","limit","offset","has_more"],"title":"SubscriptionListResponse"},"SubscriptionResponse":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"status":{"$ref":"#/components/schemas/SubscriptionStatus","description":"`PENDING`: ждёт первой оплаты. `ACTIVE`: списывается по расписанию. `PAUSED`: приостановлена. `CANCELLED`: отменена (вами или покупателем). `FAILED`: отключена после 3 неудачных попыток списания подряд."},"payment_method":{"$ref":"#/components/schemas/PaymentMethod"},"amount":{"type":"integer","title":"Amount","description":"Сумма списания за цикл, в копейках."},"currency":{"type":"string","title":"Currency"},"interval_days":{"type":"integer","title":"Interval Days"},"subscription_purpose":{"type":"string","title":"Subscription Purpose"},"customer_id":{"type":"string","title":"Customer Id"},"retry_count":{"type":"integer","title":"Retry Count","description":"Число неудачных попыток списания подряд в текущем цикле (0–3)."},"next_charge_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Next Charge At","description":"Когда произойдёт следующее списание (UTC)."},"last_charge_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Charge At","description":"Когда прошло последнее успешное списание (UTC)."},"created_at":{"type":"string","format":"date-time","title":"Created At"},"payment_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Payment Url","description":"Ссылка для первого платежа, присутствует только пока подписка ещё не активирована (`status=PENDING`)."}},"type":"object","required":["id","status","payment_method","amount","currency","interval_days","subscription_purpose","customer_id","retry_count","created_at"],"title":"SubscriptionResponse"},"SubscriptionStatus":{"type":"string","enum":["PENDING","ACTIVE","PAUSED","CANCELLED","FAILED"],"title":"SubscriptionStatus"},"SubscriptionUpdateRequest":{"properties":{"amount":{"anyOf":[{"type":"integer","exclusiveMinimum":0.0},{"type":"null"}],"title":"Amount","description":"Новая сумма списания за один цикл."},"interval_days":{"anyOf":[{"type":"integer","maximum":360.0,"minimum":7.0},{"type":"null"}],"title":"Interval Days","description":"Новая периодичность в днях (7–360)."},"subscription_purpose":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Subscription Purpose"}},"type":"object","title":"SubscriptionUpdateRequest","description":"Изменяет параметры будущих циклов списания. Уже проведённые платежи не пересчитываются\nзадним числом."},"TransactionRefundRequest":{"properties":{"confirm_amount":{"type":"integer","exclusiveMinimum":0.0,"title":"Confirm Amount","description":"Подтверждение: полная сумма списания транзакции (charged_amount, в копейках). Должна совпадать точно — защита от случайного возврата."}},"type":"object","required":["confirm_amount"],"title":"TransactionRefundRequest"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}},"tags":[{"name":"Платежи","description":"Разовые платежи: создание счёта, статус, список транзакций, баланс, тарифы магазина."},{"name":"White label","description":"Приём карт на странице партнёра: JS-бандл, прямой платёж и продолжение 3-D Secure. Инструкция по интеграции выдаётся отдельным документом."},{"name":"Подписки","description":"Рекуррентные списания: создание подписки, список и история циклов, изменение параметров, отмена."}]}