{
  "brand": "Kevmi",
  "version": "2026-10-23.15",
  "updatedAt": "2026-10-23",
  "articles": [
    {
      "id": "quickstart",
      "title": "Быстрый старт",
      "summary": "Познакомьтесь с кабинетом, задайте условия магазина и посмотрите, как ваш покупатель увидит счёт. Этот маршрут поможет пройти основные действия по порядку.",
      "group": "start",
      "url": "/docs/quickstart",
      "tags": [
        "начало",
        "подключение",
        "первый платеж",
        "быстрый старт"
      ],
      "sections": [
        {
          "id": "explore",
          "title": "1. Посмотрите сервис в действии",
          "paragraphs": [
            "Откройте демо-кабинет, чтобы создать тестовый заказ, изучить платёжные ссылки и проверить расчёт комиссии. Демо работает с отдельными тестовыми данными: оно не создаёт банковский платёж и не отправляет средства на кошелёк."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": [
            {
              "label": "Открыть демо-кабинет",
              "href": "/demo/index.html"
            },
            {
              "label": "Посмотреть страницу оплаты",
              "href": "/pay/demo"
            }
          ]
        },
        {
          "id": "account",
          "title": "2. Создайте аккаунт через Telegram",
          "paragraphs": [
            "После подтверждения входа в Telegram открывается личный кабинет. Раздел «Подключение сайта» находится по /account#applications; форма и индивидуальное отслеживание /account#applications/{id} остаются внутри приложения.",
            "Новый платёж и подготовка карточного запроса требуют одобренной последней заявки магазина на проверку сайта. Одобрение само по себе не подключает платёжный шлюз. Если проверка магазина изменилась после отправки платежа, уже созданная операция остаётся доступна для статуса, сверки и запрошенного банковского кода."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": [
            {
              "label": "Открыть кабинет",
              "href": "/account"
            }
          ]
        },
        {
          "id": "settings",
          "title": "3. Настройте магазин",
          "paragraphs": [],
          "bullets": [],
          "steps": [
            "Укажите название магазина, по которому покупатель узнает продавца.",
            "Задайте правило НДС по умолчанию. При создании каждого счёта отдельно выберите долю НДС и комиссии покупателя от 0 до 100%.",
            "Выберите, какие уведомления вы хотите получать в Telegram.",
            "Проверьте расчёт на типичной сумме заказа в калькуляторе."
          ],
          "table": null,
          "code": null,
          "note": "",
          "links": [
            {
              "label": "Расчёт комиссии и НДС",
              "href": "/pricing"
            }
          ]
        },
        {
          "id": "invoice",
          "title": "4. Подготовьте платёжную ссылку",
          "paragraphs": [
            "Укажите понятное название заказа, сумму и валюту. Покупателю нужна отдельная страница с деталями покупки и итогом к оплате. Условия существующего счёта сохраняются при последующем изменении настроек магазина."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": [
            {
              "label": "Руководство по платёжным ссылкам",
              "href": "/docs/payment-links"
            }
          ]
        },
        {
          "id": "activate",
          "title": "5. Проверьте доступность оплаты",
          "paragraphs": [
            "Управляйте счетами, API-ключами, виджетами и вебхуками в личном кабинете. Перед оплатой Kevmi проверяет настройки шлюза, одобрение магазина, сумму и условия счёта. Если выбранный способ недоступен, покупатель увидит причину на странице оплаты.",
            "Новые ссылки кабинета используют единый расчёт в USD и Any для всех четырёх способов. СБП конвертируется в RUB по зафиксированному курсу ЦБ, криптооплата — в USDT по явному правилу 1:1. Прежний режим native сохраняется для старых ссылок и API-запросов без pricingMode=universal. Подробности — в разделе о магазинах и единой цене.",
            "Для нового реального платежа картой или Alipay текущий шлюз поддерживает только feeCustomerPercent=0 и vatCustomerPercent=100: комиссию полностью покрывает магазин, НДС полностью добавляется покупателю. Остальные доли можно сохранить в счёте и рассчитать, но такой платёж не запускается и получает unsupported_allocation. Сервер не меняет сохранённые условия автоматически. Для СБП и USDT-криптооплаты доступны все доли комиссии; НДС у них отсутствует."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": null,
          "note": "Создание счёта, ключа или заявки не списывает деньги. Оформление выплат через API недоступно; условия вывода описаны в отдельном руководстве.",
          "links": [
            {
              "label": "Требования к подключению шлюза",
              "href": "/docs/gateway"
            }
          ]
        },
        {
          "id": "stores-usd",
          "title": "Несколько магазинов и единая цена в USD",
          "paragraphs": [
            "В меню магазина выберите «Все магазины» для общего обзора и операций или конкретный магазин для его данных. Каждый магазин имеет собственный storeId, название, правило НДС, счета, API-ключи, вебхуки, журнал событий и заявку на проверку сайта. Уведомления и обращения принадлежат аккаунту. Можно создать до 100 магазинов. Ранее созданные данные сохранены в первом магазине.",
            "Новые ссылки из кабинета используют pricingMode=\"universal\": базовая цена хранится в USD. Any включает card, alipay, sbp и crypto; при необходимости магазин выбирает подмножество. Карты и Alipay оплачиваются в USD, СБП — в RUB по официальному курсу USD/RUB Банка России, криптовалюта — в USDT по явно установленному соотношению 1 USD = 1 USDT. Это правило расчёта счёта, а не рыночная котировка USDT. Курс другой монеты и точные реквизиты предоставляет шлюз перед переводом.",
            "Курс ЦБ и обе суммы сохраняются при создании. Ссылки с рублёвой конвертацией действуют не более 24 часов. Если курс получить не удалось, создание возвращает FX_UNAVAILABLE; выдуманный или старый запасной курс не применяется. amountMinor и quotes в ответе владельцу выражены в базовой валюте USD; quotes[method].settlement содержит сумму и валюту конкретного способа. Публичный checkout возвращает выбранную валюту оплаты в currency, исходную цену в baseAmountMinor/baseCurrency и курс в fx. Возврат к другой валюте после отправки платежа запрещён: у счёта одна операция шлюза.",
            "Для серверной интеграции создайте API-ключ внутри выбранного магазина и передавайте Authorization: Bearer <key>. Привязка ключа к магазину неизменна: заголовок X-Kevmi-Store не позволяет получить данные другого магазина. Для браузерной сессии передавайте X-Kevmi-Store: <storeId>; без заголовка используется первый магазин. Значение all разрешено только для GET /api/account/dashboard и GET /api/payment-links. Изменения требуют выбранного магазина, Origin и X-CSRF-Token. ID аккаунта и ID магазина — разные идентификаторы.",
            "Без pricingMode=\"universal\" API сохраняет прежний режим native и исходные ограничения валют для совместимости. Старые ссылки не пересчитываются. Подтверждённые поступления в обзоре — это проверенные платежи за вычетом расходов по сохранённому расчёту, а не доступный остаток для вывода. Валюты старых счетов учитываются раздельно; выплаты согласуются с поддержкой. Подтверждение исполнения заказа проверяйте через payment.fulfillmentReady=true и payment.status=\"succeeded\" в серверном API, журнале событий или подписанном вебхуке."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": []
        }
      ],
      "body": "Познакомьтесь с кабинетом, задайте условия магазина и посмотрите, как ваш покупатель увидит счёт. Этот маршрут поможет пройти основные действия по порядку.\n\n1. Посмотрите сервис в действии\n\nОткройте демо-кабинет, чтобы создать тестовый заказ, изучить платёжные ссылки и проверить расчёт комиссии. Демо работает с отдельными тестовыми данными: оно не создаёт банковский платёж и не отправляет средства на кошелёк.\n\nОткрыть демо-кабинет: https://kevmi.one/demo/index.html\n\nПосмотреть страницу оплаты: https://kevmi.one/pay/demo\n\n2. Создайте аккаунт через Telegram\n\nПосле подтверждения входа в Telegram открывается личный кабинет. Раздел «Подключение сайта» находится по /account#applications; форма и индивидуальное отслеживание /account#applications/{id} остаются внутри приложения.\n\nНовый платёж и подготовка карточного запроса требуют одобренной последней заявки магазина на проверку сайта. Одобрение само по себе не подключает платёжный шлюз. Если проверка магазина изменилась после отправки платежа, уже созданная операция остаётся доступна для статуса, сверки и запрошенного банковского кода.\n\nОткрыть кабинет: https://kevmi.one/account\n\n3. Настройте магазин\n\n1. Укажите название магазина, по которому покупатель узнает продавца.\n\n2. Задайте правило НДС по умолчанию. При создании каждого счёта отдельно выберите долю НДС и комиссии покупателя от 0 до 100%.\n\n3. Выберите, какие уведомления вы хотите получать в Telegram.\n\n4. Проверьте расчёт на типичной сумме заказа в калькуляторе.\n\nРасчёт комиссии и НДС: https://kevmi.one/pricing\n\n4. Подготовьте платёжную ссылку\n\nУкажите понятное название заказа, сумму и валюту. Покупателю нужна отдельная страница с деталями покупки и итогом к оплате. Условия существующего счёта сохраняются при последующем изменении настроек магазина.\n\nРуководство по платёжным ссылкам: https://kevmi.one/docs/payment-links\n\n5. Проверьте доступность оплаты\n\nУправляйте счетами, API-ключами, виджетами и вебхуками в личном кабинете. Перед оплатой Kevmi проверяет настройки шлюза, одобрение магазина, сумму и условия счёта. Если выбранный способ недоступен, покупатель увидит причину на странице оплаты.\n\nНовые ссылки кабинета используют единый расчёт в USD и Any для всех четырёх способов. СБП конвертируется в RUB по зафиксированному курсу ЦБ, криптооплата — в USDT по явному правилу 1:1. Прежний режим native сохраняется для старых ссылок и API-запросов без pricingMode=universal. Подробности — в разделе о магазинах и единой цене.\n\nДля нового реального платежа картой или Alipay текущий шлюз поддерживает только feeCustomerPercent=0 и vatCustomerPercent=100: комиссию полностью покрывает магазин, НДС полностью добавляется покупателю. Остальные доли можно сохранить в счёте и рассчитать, но такой платёж не запускается и получает unsupported_allocation. Сервер не меняет сохранённые условия автоматически. Для СБП и USDT-криптооплаты доступны все доли комиссии; НДС у них отсутствует.\n\nСоздание счёта, ключа или заявки не списывает деньги. Оформление выплат через API недоступно; условия вывода описаны в отдельном руководстве.\n\nТребования к подключению шлюза: https://kevmi.one/docs/gateway\n\nНесколько магазинов и единая цена в USD\n\nВ меню магазина выберите «Все магазины» для общего обзора и операций или конкретный магазин для его данных. Каждый магазин имеет собственный storeId, название, правило НДС, счета, API-ключи, вебхуки, журнал событий и заявку на проверку сайта. Уведомления и обращения принадлежат аккаунту. Можно создать до 100 магазинов. Ранее созданные данные сохранены в первом магазине.\n\nНовые ссылки из кабинета используют pricingMode=\"universal\": базовая цена хранится в USD. Any включает card, alipay, sbp и crypto; при необходимости магазин выбирает подмножество. Карты и Alipay оплачиваются в USD, СБП — в RUB по официальному курсу USD/RUB Банка России, криптовалюта — в USDT по явно установленному соотношению 1 USD = 1 USDT. Это правило расчёта счёта, а не рыночная котировка USDT. Курс другой монеты и точные реквизиты предоставляет шлюз перед переводом.\n\nКурс ЦБ и обе суммы сохраняются при создании. Ссылки с рублёвой конвертацией действуют не более 24 часов. Если курс получить не удалось, создание возвращает FX_UNAVAILABLE; выдуманный или старый запасной курс не применяется. amountMinor и quotes в ответе владельцу выражены в базовой валюте USD; quotes[method].settlement содержит сумму и валюту конкретного способа. Публичный checkout возвращает выбранную валюту оплаты в currency, исходную цену в baseAmountMinor/baseCurrency и курс в fx. Возврат к другой валюте после отправки платежа запрещён: у счёта одна операция шлюза.\n\nДля серверной интеграции создайте API-ключ внутри выбранного магазина и передавайте Authorization: Bearer <key>. Привязка ключа к магазину неизменна: заголовок X-Kevmi-Store не позволяет получить данные другого магазина. Для браузерной сессии передавайте X-Kevmi-Store: <storeId>; без заголовка используется первый магазин. Значение all разрешено только для GET /api/account/dashboard и GET /api/payment-links. Изменения требуют выбранного магазина, Origin и X-CSRF-Token. ID аккаунта и ID магазина — разные идентификаторы.\n\nБез pricingMode=\"universal\" API сохраняет прежний режим native и исходные ограничения валют для совместимости. Старые ссылки не пересчитываются. Подтверждённые поступления в обзоре — это проверенные платежи за вычетом расходов по сохранённому расчёту, а не доступный остаток для вывода. Валюты старых счетов учитываются раздельно; выплаты согласуются с поддержкой. Подтверждение исполнения заказа проверяйте через payment.fulfillmentReady=true и payment.status=\"succeeded\" в серверном API, журнале событий или подписанном вебхуке.\n\n",
      "readMinutes": 3
    },
    {
      "id": "overview",
      "title": "Как устроен Kevmi",
      "summary": "Kevmi объединяет отдельные счета, способы оплаты и правила расчёта в одном пространстве. Каждый заказ оплачивается самостоятельно: подписок и автоматических повторных списаний в сервисе нет.",
      "group": "start",
      "url": "/docs/overview",
      "tags": [
        "начало",
        "прямые платежи",
        "без подписок",
        "кабинет"
      ],
      "sections": [
        {
          "id": "roles",
          "title": "Магазин и покупатель",
          "paragraphs": [
            "Магазин задаёт название заказа, базовую цену, валюту и условия налога. Покупатель открывает отдельную страницу оплаты, выбирает доступный способ и видит итог до подтверждения.",
            "Покупателю не нужен доступ к кабинету продавца. Страница оплаты показывает сведения конкретного заказа, а не баланс, настройки или историю магазина."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": []
        },
        {
          "id": "channels",
          "title": "Четыре платёжных канала",
          "paragraphs": [],
          "bullets": [],
          "steps": [],
          "table": {
            "headers": [
              "Способ",
              "Для кого",
              "Приём"
            ],
            "rows": [
              [
                "Международные карты",
                "Покупатели за рубежом",
                "10% + $0,50; НДС 16%"
              ],
              [
                "СБП",
                "Покупатели в России",
                "8%; без НДС"
              ],
              [
                "Alipay",
                "Покупатели в Китае",
                "10% + $0,50; НДС 16%"
              ],
              [
                "Криптовалюта",
                "Криптоплатежи",
                "4%; без НДС"
              ]
            ]
          },
          "code": null,
          "note": "Visa и Mastercard принимаются от покупателей из более чем 190 стран, кроме списка ограничений. Криптовалюта доступна во всех странах.",
          "links": [
            {
              "label": "Страны и ограничения",
              "href": "/docs/geography"
            }
          ]
        },
        {
          "id": "workspace",
          "title": "Что находится в кабинете",
          "paragraphs": [
            "Серверные записи принадлежат подтверждённому аккаунту. Демо работает отдельно и не создаёт реальные платежи или доступный к выводу баланс."
          ],
          "bullets": [
            "Платёжные ссылки и условия каждого заказа: /account#links.",
            "Заявки на проверку сайта и индивидуальное отслеживание: /account#applications.",
            "API-ключи, вебхуки, виджет и события: /account#keys, #webhooks, #widget, #events.",
            "Тарифы, калькулятор, карта стран и полная документация: /account#knowledge.",
            "Настройки магазина, Telegram-уведомления и обращения остаются в этом же кабинете."
          ],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": []
        },
        {
          "id": "money",
          "title": "Как читать суммы",
          "paragraphs": [
            "Базовая цена — стоимость товара или услуги до распределения расходов. Комиссия и НДС рассчитываются от неё независимо. Доля покупателя добавляется к оплате, доля магазина удерживается из базовой цены. Для карт и Alipay НДС равен 16%; доли комиссии и налога настраиваются отдельно.",
            "Комиссия платформы уже включена в опубликованные тарифы. Дополнительные 5% сверху не начисляются. Выплата в USDT TRC20 рассчитывается отдельно с учётом источника средств и котировки."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": [
            {
              "label": "Все тарифы",
              "href": "/pricing"
            }
          ]
        },
        {
          "id": "availability",
          "title": "Доступ к функциям",
          "paragraphs": [
            "Документация, калькулятор и справочный помощник доступны без входа. Для настроек магазина, платёжных ссылок и личных обращений войдите в аккаунт. Доступность денежных операций проверяется отдельно; при недоступном способе сервис сообщает об этом до списания."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": []
        }
      ],
      "body": "Kevmi объединяет отдельные счета, способы оплаты и правила расчёта в одном пространстве. Каждый заказ оплачивается самостоятельно: подписок и автоматических повторных списаний в сервисе нет.\n\nМагазин и покупатель\n\nМагазин задаёт название заказа, базовую цену, валюту и условия налога. Покупатель открывает отдельную страницу оплаты, выбирает доступный способ и видит итог до подтверждения.\n\nПокупателю не нужен доступ к кабинету продавца. Страница оплаты показывает сведения конкретного заказа, а не баланс, настройки или историю магазина.\n\nЧетыре платёжных канала\n\nСпособ · Для кого · Приём\nМеждународные карты · Покупатели за рубежом · 10% + $0,50; НДС 16%\nСБП · Покупатели в России · 8%; без НДС\nAlipay · Покупатели в Китае · 10% + $0,50; НДС 16%\nКриптовалюта · Криптоплатежи · 4%; без НДС\n\nVisa и Mastercard принимаются от покупателей из более чем 190 стран, кроме списка ограничений. Криптовалюта доступна во всех странах.\n\nСтраны и ограничения: https://kevmi.one/docs/geography\n\nЧто находится в кабинете\n\nСерверные записи принадлежат подтверждённому аккаунту. Демо работает отдельно и не создаёт реальные платежи или доступный к выводу баланс.\n\nПлатёжные ссылки и условия каждого заказа: /account#links.\n\nЗаявки на проверку сайта и индивидуальное отслеживание: /account#applications.\n\nAPI-ключи, вебхуки, виджет и события: /account#keys, #webhooks, #widget, #events.\n\nТарифы, калькулятор, карта стран и полная документация: /account#knowledge.\n\nНастройки магазина, Telegram-уведомления и обращения остаются в этом же кабинете.\n\nКак читать суммы\n\nБазовая цена — стоимость товара или услуги до распределения расходов. Комиссия и НДС рассчитываются от неё независимо. Доля покупателя добавляется к оплате, доля магазина удерживается из базовой цены. Для карт и Alipay НДС равен 16%; доли комиссии и налога настраиваются отдельно.\n\nКомиссия платформы уже включена в опубликованные тарифы. Дополнительные 5% сверху не начисляются. Выплата в USDT TRC20 рассчитывается отдельно с учётом источника средств и котировки.\n\nВсе тарифы: https://kevmi.one/pricing\n\nДоступ к функциям\n\nДокументация, калькулятор и справочный помощник доступны без входа. Для настроек магазина, платёжных ссылок и личных обращений войдите в аккаунт. Доступность денежных операций проверяется отдельно; при недоступном способе сервис сообщает об этом до списания.",
      "readMinutes": 3
    },
    {
      "id": "fees",
      "title": "Комиссии за приём и вывод",
      "summary": "Комиссия за приём зависит от способа оплаты и рассчитывается от базовой цены заказа. В тариф уже включена комиссия Kevmi. НДС и комиссия выплаты показываются отдельно.",
      "group": "payments",
      "url": "/docs/fees",
      "tags": [
        "цена",
        "комиссия",
        "тариф",
        "вывод",
        "стоимость"
      ],
      "sections": [
        {
          "id": "incoming",
          "title": "Приём одного платежа",
          "paragraphs": [
            "Процентная и фиксированная части складываются. Для заказа на $5 по карте комиссия равна $0,50 + $0,50 = $1. Налог при этом составляет $0,80 и не является частью комиссии.",
            "Примерная доля платформы около 5% уже находится внутри этих условий. При расчёте счёта второй процент платформы не добавляется."
          ],
          "bullets": [],
          "steps": [],
          "table": {
            "headers": [
              "Способ",
              "Процент",
              "Фиксированная часть",
              "НДС"
            ],
            "rows": [
              [
                "Международные карты",
                "10%",
                "$0,50",
                "16% от базовой цены"
              ],
              [
                "Alipay",
                "10%",
                "$0,50",
                "16% от базовой цены"
              ],
              [
                "СБП",
                "8%",
                "Нет",
                "Нет"
              ],
              [
                "Криптовалюта",
                "4%",
                "Нет",
                "Нет"
              ]
            ]
          },
          "code": null,
          "note": "",
          "links": []
        },
        {
          "id": "payout",
          "title": "Вывод средств",
          "paragraphs": [
            "Источник средств и сеть выплаты — разные параметры. Одинаковая сеть TRC20 не делает комиссии вывода одинаковыми. Комиссия вывода применяется отдельно от удержания при приёме.",
            "Фиксированная часть сохраняет указанную валюту. Нельзя вычесть 400 рублей из суммы в долларах или автоматически считать $3 равными 3 USDT. Для итоговой выплаты нужна явная котировка."
          ],
          "bullets": [],
          "steps": [],
          "table": {
            "headers": [
              "Источник поступления",
              "Комиссия выплаты",
              "Назначение"
            ],
            "rows": [
              [
                "Карты",
                "4%",
                "USDT TRC20"
              ],
              [
                "Alipay",
                "4%",
                "USDT TRC20"
              ],
              [
                "СБП",
                "5% + 400 ₽",
                "USDT TRC20"
              ],
              [
                "Криптовалюта",
                "0% + $3",
                "USDT TRC20"
              ]
            ]
          },
          "code": null,
          "note": "",
          "links": []
        },
        {
          "id": "rounding",
          "title": "Точность расчёта",
          "paragraphs": [
            "Сумма счёта хранится целым amountMinor: 500 означает 5,00 USD, RUB или USDT при явно указанной валюте. Это единицы расчёта счёта; USD и USDT не конвертируются автоматически. Комиссия и налог отдельно округляются по half-up.",
            "Для криптоперевода используйте точную десятичную сумму и сеть из ответа созданной операции. Не пересчитывайте сумму монеты из округлённой цены счёта. Расчёт не может дать отрицательное зачисление магазину."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": {
            "language": "Формула",
            "code": "feeMinor = roundHalfUp(baseMinor × rate / 100) + fixedMinor\nvatMinor = roundHalfUp(baseMinor × 16 / 100)\n// Для СБП и криптовалюты vatMinor = 0"
          },
          "note": "",
          "links": []
        },
        {
          "id": "before-pay",
          "title": "Что проверять перед оплатой",
          "paragraphs": [],
          "bullets": [
            "Сумму и валюту исходного заказа.",
            "Способ оплаты: он определяет комиссию и наличие НДС.",
            "Обе доли расходов покупателя: НДС и комиссию, сохранённые в счёте.",
            "Итог для покупателя и ожидаемое зачисление магазина."
          ],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": [
            {
              "label": "Проверить свою сумму в калькуляторе",
              "href": "/pricing"
            },
            {
              "label": "Разобраться с НДС",
              "href": "/docs/vat"
            }
          ]
        }
      ],
      "body": "Комиссия за приём зависит от способа оплаты и рассчитывается от базовой цены заказа. В тариф уже включена комиссия Kevmi. НДС и комиссия выплаты показываются отдельно.\n\nПриём одного платежа\n\nПроцентная и фиксированная части складываются. Для заказа на $5 по карте комиссия равна $0,50 + $0,50 = $1. Налог при этом составляет $0,80 и не является частью комиссии.\n\nПримерная доля платформы около 5% уже находится внутри этих условий. При расчёте счёта второй процент платформы не добавляется.\n\nСпособ · Процент · Фиксированная часть · НДС\nМеждународные карты · 10% · $0,50 · 16% от базовой цены\nAlipay · 10% · $0,50 · 16% от базовой цены\nСБП · 8% · Нет · Нет\nКриптовалюта · 4% · Нет · Нет\n\nВывод средств\n\nИсточник средств и сеть выплаты — разные параметры. Одинаковая сеть TRC20 не делает комиссии вывода одинаковыми. Комиссия вывода применяется отдельно от удержания при приёме.\n\nФиксированная часть сохраняет указанную валюту. Нельзя вычесть 400 рублей из суммы в долларах или автоматически считать $3 равными 3 USDT. Для итоговой выплаты нужна явная котировка.\n\nИсточник поступления · Комиссия выплаты · Назначение\nКарты · 4% · USDT TRC20\nAlipay · 4% · USDT TRC20\nСБП · 5% + 400 ₽ · USDT TRC20\nКриптовалюта · 0% + $3 · USDT TRC20\n\nТочность расчёта\n\nСумма счёта хранится целым amountMinor: 500 означает 5,00 USD, RUB или USDT при явно указанной валюте. Это единицы расчёта счёта; USD и USDT не конвертируются автоматически. Комиссия и налог отдельно округляются по half-up.\n\nДля криптоперевода используйте точную десятичную сумму и сеть из ответа созданной операции. Не пересчитывайте сумму монеты из округлённой цены счёта. Расчёт не может дать отрицательное зачисление магазину.\n\nfeeMinor = roundHalfUp(baseMinor × rate / 100) + fixedMinor\nvatMinor = roundHalfUp(baseMinor × 16 / 100)\n// Для СБП и криптовалюты vatMinor = 0\n\nЧто проверять перед оплатой\n\nСумму и валюту исходного заказа.\n\nСпособ оплаты: он определяет комиссию и наличие НДС.\n\nОбе доли расходов покупателя: НДС и комиссию, сохранённые в счёте.\n\nИтог для покупателя и ожидаемое зачисление магазина.\n\nПроверить свою сумму в калькуляторе: https://kevmi.one/pricing\n\nРазобраться с НДС: https://kevmi.one/docs/vat",
      "readMinutes": 3
    },
    {
      "id": "vat",
      "title": "НДС и его распределение",
      "summary": "НДС составляет 16% базовой цены заказа для международных карт и Alipay. Магазин задаёт долю покупателя от 0 до 100%, а оставшуюся часть покрывает из выручки. Для СБП и криптовалюты НДС не начисляется.",
      "group": "payments",
      "url": "/docs/vat",
      "tags": [
        "ндс",
        "налог",
        "vat",
        "покупатель",
        "магазин",
        "5 долларов"
      ],
      "sections": [
        {
          "id": "base",
          "title": "Одна база для комиссии и налога",
          "paragraphs": [
            "Базовая цена — сумма заказа, которую указал магазин. Комиссия 10% + $0,50 и НДС 16% рассчитываются от этой цены независимо друг от друга. На сумму добавленного НДС комиссия не начисляется.",
            "Для базовой цены $5 комиссия равна $1, а налог — $0,80. Выбор плательщика меняет распределение налога, но не его ставку и базу."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": []
        },
        {
          "id": "customer",
          "title": "НДС оплачивает покупатель",
          "paragraphs": [
            "Это правило НДС по умолчанию: доля покупателя 100%, прежнее значение customer. В этом примере комиссию полностью покрывает магазин. Налог прибавляется к базовой цене. На странице оплаты покупатель видит цену заказа, сумму НДС и общий итог.",
            "Из базовой цены удерживается только комиссия. Для заказа на $5 покупатель платит $5,80, магазину зачисляется $4."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": {
            "language": "Формула",
            "code": "customerCharged = base + vat\nmerchantNet = base − fee\n\n$5,00 + $0,80 = $5,80 к оплате\n$5,00 − $1,00 = $4,00 магазину"
          },
          "note": "",
          "links": []
        },
        {
          "id": "merchant",
          "title": "НДС оплачивает магазин",
          "paragraphs": [
            "В этом примере доли покупателя для НДС и комиссии равны 0%. Правило НДС merchant соответствует нулевой доле покупателя; при этом магазин покрывает оба расхода из выручки.",
            "Для заказа на $5 покупатель платит $5, комиссия равна $1, налог равен $0,80. Магазину остаётся $3,20. Здесь не применяется формула 16/116: по условиям сервиса база налога остаётся $5."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": {
            "language": "Формула",
            "code": "customerCharged = base\nmerchantNet = base − fee − vat\n\n$5,00 к оплате\n$5,00 − $1,00 − $0,80 = $3,20 магазину"
          },
          "note": "",
          "links": []
        },
        {
          "id": "comparison",
          "title": "Пример рядом",
          "paragraphs": [],
          "bullets": [],
          "steps": [],
          "table": {
            "headers": [
              "Показатель",
              "Платит покупатель",
              "Платит магазин"
            ],
            "rows": [
              [
                "Цена заказа",
                "$5,00",
                "$5,00"
              ],
              [
                "Комиссия",
                "$1,00",
                "$1,00"
              ],
              [
                "НДС",
                "$0,80",
                "$0,80"
              ],
              [
                "Списывается у покупателя",
                "$5,80",
                "$5,00"
              ],
              [
                "Зачисление магазину",
                "$4,00",
                "$3,20"
              ]
            ]
          },
          "code": null,
          "note": "В обоих столбцах доля комиссии покупателя равна 0%. Промежуточные доли НДС и отдельное распределение комиссии доступны в калькуляторе.",
          "links": []
        },
        {
          "id": "snapshot",
          "title": "Когда применяется настройка",
          "paragraphs": [
            "Предпочтение магазина задаёт исходное распределение. Для отдельного счёта интерфейс и API сохраняют независимые целые доли НДС и комиссии от 0 до 100%. Изменение настроек магазина не пересчитывает уже созданные счета.",
            "Для нового реального платежа картой или Alipay текущий шлюз поддерживает только feeCustomerPercent=0 и vatCustomerPercent=100: комиссию полностью покрывает магазин, НДС полностью добавляется покупателю. Остальные доли можно сохранить в счёте и рассчитать, но такой платёж не запускается и получает unsupported_allocation. Сервер не меняет сохранённые условия автоматически. Для СБП и USDT-криптооплаты доступны все доли комиссии; НДС у них отсутствует.",
            "Для других условий создайте новую ссылку. При СБП и криптовалюте НДС равен нулю."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": [
            {
              "label": "Настройки магазина",
              "href": "/docs/settings"
            },
            {
              "label": "Интерактивный расчёт",
              "href": "/pricing"
            },
            {
              "label": "Распределение комиссии и НДС",
              "href": "/docs/cost-sharing"
            }
          ]
        }
      ],
      "body": "НДС составляет 16% базовой цены заказа для международных карт и Alipay. Магазин задаёт долю покупателя от 0 до 100%, а оставшуюся часть покрывает из выручки. Для СБП и криптовалюты НДС не начисляется.\n\nОдна база для комиссии и налога\n\nБазовая цена — сумма заказа, которую указал магазин. Комиссия 10% + $0,50 и НДС 16% рассчитываются от этой цены независимо друг от друга. На сумму добавленного НДС комиссия не начисляется.\n\nДля базовой цены $5 комиссия равна $1, а налог — $0,80. Выбор плательщика меняет распределение налога, но не его ставку и базу.\n\nНДС оплачивает покупатель\n\nЭто правило НДС по умолчанию: доля покупателя 100%, прежнее значение customer. В этом примере комиссию полностью покрывает магазин. Налог прибавляется к базовой цене. На странице оплаты покупатель видит цену заказа, сумму НДС и общий итог.\n\nИз базовой цены удерживается только комиссия. Для заказа на $5 покупатель платит $5,80, магазину зачисляется $4.\n\ncustomerCharged = base + vat\nmerchantNet = base − fee\n\n$5,00 + $0,80 = $5,80 к оплате\n$5,00 − $1,00 = $4,00 магазину\n\nНДС оплачивает магазин\n\nВ этом примере доли покупателя для НДС и комиссии равны 0%. Правило НДС merchant соответствует нулевой доле покупателя; при этом магазин покрывает оба расхода из выручки.\n\nДля заказа на $5 покупатель платит $5, комиссия равна $1, налог равен $0,80. Магазину остаётся $3,20. Здесь не применяется формула 16/116: по условиям сервиса база налога остаётся $5.\n\ncustomerCharged = base\nmerchantNet = base − fee − vat\n\n$5,00 к оплате\n$5,00 − $1,00 − $0,80 = $3,20 магазину\n\nПример рядом\n\nПоказатель · Платит покупатель · Платит магазин\nЦена заказа · $5,00 · $5,00\nКомиссия · $1,00 · $1,00\nНДС · $0,80 · $0,80\nСписывается у покупателя · $5,80 · $5,00\nЗачисление магазину · $4,00 · $3,20\n\nВ обоих столбцах доля комиссии покупателя равна 0%. Промежуточные доли НДС и отдельное распределение комиссии доступны в калькуляторе.\n\nКогда применяется настройка\n\nПредпочтение магазина задаёт исходное распределение. Для отдельного счёта интерфейс и API сохраняют независимые целые доли НДС и комиссии от 0 до 100%. Изменение настроек магазина не пересчитывает уже созданные счета.\n\nДля нового реального платежа картой или Alipay текущий шлюз поддерживает только feeCustomerPercent=0 и vatCustomerPercent=100: комиссию полностью покрывает магазин, НДС полностью добавляется покупателю. Остальные доли можно сохранить в счёте и рассчитать, но такой платёж не запускается и получает unsupported_allocation. Сервер не меняет сохранённые условия автоматически. Для СБП и USDT-криптооплаты доступны все доли комиссии; НДС у них отсутствует.\n\nДля других условий создайте новую ссылку. При СБП и криптовалюте НДС равен нулю.\n\nНастройки магазина: https://kevmi.one/docs/settings\n\nИнтерактивный расчёт: https://kevmi.one/pricing\n\nРаспределение комиссии и НДС: https://kevmi.one/docs/cost-sharing",
      "readMinutes": 3
    },
    {
      "id": "geography",
      "title": "Страны и способы оплаты",
      "summary": "Visa и Mastercard — более 190 стран, кроме списка ограничений. СБП — Россия, Alipay — Китай. Криптовалюта — все страны мира.",
      "group": "payments",
      "url": "/docs/geography",
      "tags": [
        "страны",
        "география",
        "190+",
        "россия",
        "китай",
        "Аландские о-ва",
        "Åland Islands",
        "Албания",
        "Albania",
        "Алжир",
        "Algeria",
        "Американское Самоа",
        "American Samoa",
        "Андорра",
        "Andorra",
        "Ангола",
        "Angola",
        "Ангилья",
        "Anguilla",
        "Антигуа и Барбуда",
        "Antigua & Barbuda",
        "Аргентина",
        "Argentina",
        "Армения",
        "Armenia",
        "Аруба",
        "Aruba",
        "Австралия",
        "Australia",
        "Австрия",
        "Austria",
        "Азербайджан",
        "Azerbaijan",
        "Багамы",
        "Bahamas",
        "Бахрейн",
        "Bahrain",
        "Бангладеш",
        "Bangladesh",
        "Барбадос",
        "Barbados",
        "Бельгия",
        "Belgium",
        "Белиз",
        "Belize",
        "Бенин",
        "Benin",
        "Бермудские о-ва",
        "Bermuda",
        "Бутан",
        "Bhutan",
        "Боливия",
        "Bolivia",
        "Бонэйр, Синт-Эстатиус и Саба",
        "Caribbean Netherlands",
        "Босния и Герцеговина",
        "Bosnia & Herzegovina",
        "Ботсвана",
        "Botswana",
        "о-в Буве",
        "Bouvet Island",
        "Бразилия",
        "Brazil",
        "Британская территория в Индийском океане",
        "British Indian Ocean Territory",
        "Бруней",
        "Brunei",
        "Болгария",
        "Bulgaria",
        "Буркина-Фасо",
        "Burkina Faso",
        "Кабо-Верде",
        "Cape Verde",
        "Камбоджа",
        "Cambodia",
        "Камерун",
        "Cameroon",
        "Канада",
        "Canada",
        "о-ва Кайман",
        "Cayman Islands",
        "Чили",
        "Chile",
        "Китай",
        "China",
        "о-в Рождества",
        "Christmas Island",
        "Кокосовые о-ва",
        "Cocos (Keeling) Islands",
        "Колумбия",
        "Colombia",
        "Коморы",
        "Comoros",
        "о-ва Кука",
        "Cook Islands",
        "Коста-Рика",
        "Costa Rica",
        "Хорватия",
        "Croatia",
        "Кюрасао",
        "Curaçao",
        "Кипр",
        "Cyprus",
        "Чехия",
        "Czechia",
        "Кот-д’Ивуар",
        "Côte d’Ivoire",
        "Дания",
        "Denmark",
        "Джибути",
        "Djibouti",
        "Доминика",
        "Dominica",
        "Доминиканская Республика",
        "Dominican Republic",
        "Эквадор",
        "Ecuador",
        "Египет",
        "Egypt",
        "Сальвадор",
        "El Salvador",
        "Экваториальная Гвинея",
        "Equatorial Guinea",
        "Эстония",
        "Estonia",
        "Эсватини",
        "Eswatini",
        "Эфиопия",
        "Ethiopia",
        "Фолклендские о-ва",
        "Falkland Islands",
        "Фарерские о-ва",
        "Faroe Islands",
        "Федеративные Штаты Микронезии",
        "Micronesia",
        "Фиджи",
        "Fiji",
        "Финляндия",
        "Finland",
        "Франция",
        "France",
        "Французская Гвиана",
        "French Guiana",
        "Французская Полинезия",
        "French Polynesia",
        "Французские Южные территории",
        "French Southern Territories",
        "Габон",
        "Gabon",
        "Гамбия",
        "Gambia",
        "Грузия",
        "Georgia",
        "Германия",
        "Germany",
        "Гана",
        "Ghana",
        "Гибралтар",
        "Gibraltar",
        "Греция",
        "Greece",
        "Гренландия",
        "Greenland",
        "Гренада",
        "Grenada",
        "Гваделупа",
        "Guadeloupe",
        "Гуам",
        "Guam",
        "Гватемала",
        "Guatemala",
        "Гернси",
        "Guernsey",
        "Гвинея",
        "Guinea",
        "Гвинея-Бисау",
        "Guinea-Bissau",
        "Гайана",
        "Guyana",
        "о-ва Херд и Макдональд",
        "Heard & McDonald Islands",
        "Ватикан",
        "Vatican City",
        "Гондурас",
        "Honduras",
        "Гонконг (САР)",
        "Hong Kong SAR China",
        "Венгрия",
        "Hungary",
        "Исландия",
        "Iceland",
        "Индия",
        "India",
        "Индонезия",
        "Indonesia",
        "Ирландия",
        "Ireland",
        "о-в Мэн",
        "Isle of Man",
        "Израиль",
        "Israel",
        "Италия",
        "Italy",
        "Ямайка",
        "Jamaica",
        "Япония",
        "Japan",
        "Джерси",
        "Jersey",
        "Иордания",
        "Jordan",
        "Казахстан",
        "Kazakhstan",
        "Кения",
        "Kenya",
        "Кирибати",
        "Kiribati",
        "Кувейт",
        "Kuwait",
        "Киргизия",
        "Kyrgyzstan",
        "Лаос",
        "Laos",
        "Латвия",
        "Latvia",
        "Ливан",
        "Lebanon",
        "Лесото",
        "Lesotho",
        "Либерия",
        "Liberia",
        "Лихтенштейн",
        "Liechtenstein",
        "Литва",
        "Lithuania",
        "Люксембург",
        "Luxembourg",
        "Макао (САР)",
        "Macao SAR China",
        "Мадагаскар",
        "Madagascar",
        "Малави",
        "Malawi",
        "Малайзия",
        "Malaysia",
        "Мальдивы",
        "Maldives",
        "Мальта",
        "Malta",
        "Маршалловы о-ва",
        "Marshall Islands",
        "Мартиника",
        "Martinique",
        "Мавритания",
        "Mauritania",
        "Маврикий",
        "Mauritius",
        "Майотта",
        "Mayotte",
        "Мексика",
        "Mexico",
        "Молдова",
        "Moldova",
        "Монако",
        "Monaco",
        "Монголия",
        "Mongolia",
        "Черногория",
        "Montenegro",
        "Монтсеррат",
        "Montserrat",
        "Марокко",
        "Morocco",
        "Мозамбик",
        "Mozambique",
        "Намибия",
        "Namibia",
        "Науру",
        "Nauru",
        "Непал",
        "Nepal",
        "Нидерланды",
        "Netherlands",
        "Новая Каледония",
        "New Caledonia",
        "Новая Зеландия",
        "New Zealand",
        "Нигер",
        "Niger",
        "Нигерия",
        "Nigeria",
        "Ниуэ",
        "Niue",
        "о-в Норфолк",
        "Norfolk Island",
        "Северная Македония",
        "North Macedonia",
        "Северные Марианские о-ва",
        "Northern Mariana Islands",
        "Норвегия",
        "Norway",
        "Оман",
        "Oman",
        "Пакистан",
        "Pakistan",
        "Палау",
        "Palau",
        "Панама",
        "Panama",
        "Папуа — Новая Гвинея",
        "Papua New Guinea",
        "Парагвай",
        "Paraguay",
        "Перу",
        "Peru",
        "Филиппины",
        "Philippines",
        "о-ва Питкэрн",
        "Pitcairn Islands",
        "Польша",
        "Poland",
        "Португалия",
        "Portugal",
        "Пуэрто-Рико",
        "Puerto Rico",
        "Катар",
        "Qatar",
        "Румыния",
        "Romania",
        "Руанда",
        "Rwanda",
        "Реюньон",
        "Réunion",
        "Сен-Бартелеми",
        "St. Barthélemy",
        "о-в Св. Елены",
        "St. Helena",
        "Сент-Китс и Невис",
        "St. Kitts & Nevis",
        "Сент-Люсия",
        "St. Lucia",
        "Сен-Мартен",
        "St. Martin",
        "Сен-Пьер и Микелон",
        "St. Pierre & Miquelon",
        "Сент-Винсент и Гренадины",
        "St. Vincent & Grenadines",
        "Самоа",
        "Samoa",
        "Сан-Марино",
        "San Marino",
        "Сан-Томе и Принсипи",
        "São Tomé & Príncipe",
        "Саудовская Аравия",
        "Saudi Arabia",
        "Сенегал",
        "Senegal",
        "Сербия",
        "Serbia",
        "Сейшельские о-ва",
        "Seychelles",
        "Сьерра-Леоне",
        "Sierra Leone",
        "Сингапур",
        "Singapore",
        "Синт-Мартен",
        "Sint Maarten",
        "Словакия",
        "Slovakia",
        "Словения",
        "Slovenia",
        "Соломоновы о-ва",
        "Solomon Islands",
        "Южно-Африканская Республика",
        "South Africa",
        "Южная Георгия и Южные Сандвичевы о-ва",
        "South Georgia & South Sandwich Islands",
        "Республика Корея",
        "South Korea",
        "Испания",
        "Spain",
        "Шри-Ланка",
        "Sri Lanka",
        "Палестинские территории",
        "Palestinian Territories",
        "Суринам",
        "Suriname",
        "Шпицберген и Ян-Майен",
        "Svalbard & Jan Mayen",
        "Швеция",
        "Sweden",
        "Швейцария",
        "Switzerland",
        "Тайвань",
        "Taiwan",
        "Таджикистан",
        "Tajikistan",
        "Танзания",
        "Tanzania",
        "Таиланд",
        "Thailand",
        "Восточный Тимор",
        "Timor-Leste",
        "Того",
        "Togo",
        "Токелау",
        "Tokelau",
        "Тонга",
        "Tonga",
        "Тринидад и Тобаго",
        "Trinidad & Tobago",
        "Тунис",
        "Tunisia",
        "Туркменистан",
        "Turkmenistan",
        "Тёркс и Кайкос",
        "Turks & Caicos Islands",
        "Тувалу",
        "Tuvalu",
        "Турция",
        "Türkiye",
        "Уганда",
        "Uganda",
        "Украина",
        "Ukraine",
        "ОАЭ",
        "United Arab Emirates",
        "Великобритания",
        "United Kingdom",
        "Внешние малые о-ва (США)",
        "U.S. Outlying Islands",
        "Соединенные Штаты",
        "United States",
        "Уругвай",
        "Uruguay",
        "Узбекистан",
        "Uzbekistan",
        "Вануату",
        "Vanuatu",
        "Вьетнам",
        "Vietnam",
        "Виргинские о-ва (Великобритания)",
        "British Virgin Islands",
        "Виргинские о-ва (США)",
        "U.S. Virgin Islands",
        "Уоллис и Футуна",
        "Wallis & Futuna",
        "Западная Сахара",
        "Western Sahara",
        "Замбия",
        "Zambia"
      ],
      "sections": [
        {
          "id": "coverage",
          "title": "География по каналам",
          "paragraphs": [],
          "bullets": [],
          "steps": [],
          "table": {
            "headers": [
              "Канал",
              "География",
              "Условия"
            ],
            "rows": [
              [
                "Международные карты",
                "Более 190 стран",
                "Кроме списка ограничений; в Украине исключены пять регионов"
              ],
              [
                "СБП",
                "Россия",
                "Банк и конкретная операция проверяются шлюзом"
              ],
              [
                "Alipay",
                "Китай",
                "Аккаунт и конкретная операция проверяются шлюзом"
              ],
              [
                "Криптовалюта",
                "Все страны мира",
                "Выберите поддерживаемую монету и сеть"
              ]
            ]
          },
          "code": null,
          "note": "",
          "links": []
        },
        {
          "id": "map",
          "title": "Интерактивная карта",
          "paragraphs": [
            "На странице «География» размещена двумерная карта мира. Фильтры показывают страны международных карт из опубликованного списка, Россию для СБП и Китай для Alipay. Найдите страну по названию или коду и откройте её карточку с доступными способами и примечаниями.",
            "Штриховка Украины обозначает пять исключённых регионов. Остальная территория Украины доступна для оплаты картами. Карточные ограничения не распространяются на криптовалюту: она доступна во всех странах."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": [
            {
              "label": "Открыть карту",
              "href": "/countries"
            }
          ]
        },
        {
          "id": "cards",
          "title": "Источник и границы списка",
          "paragraphs": [
            "Visa и Mastercard доступны в более чем 190 странах. Полный список исключений опубликован ниже. Справочник содержит также зависимые территории; его количество записей не равно числу стран. Страны регистрации магазинов и направления выплат имеют собственные условия.",
            "Доступность конкретной операции зависит от страны выпуска, банка, типа карты и проверки платёжного канала. Присутствие страны в перечне не гарантирует одобрение каждой карты."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": []
        },
        {
          "id": "restrictions",
          "title": "Ограничения Visa и Mastercard",
          "paragraphs": [
            "В Украине недоступны Крым, Донецкая, Луганская, Херсонская и Запорожская области. Остальная территория доступна для оплаты картами.",
            "Все остальные страны доступны. Netherlands Antilles — историческая запись из списка провайдера; она не означает запрет всех современных карибских территорий."
          ],
          "bullets": [],
          "steps": [],
          "table": {
            "headers": [
              "Код",
              "Страна или территория",
              "Название в списке провайдера"
            ],
            "rows": [
              [
                "AF",
                "Афганистан",
                "Afghanistan"
              ],
              [
                "AQ",
                "Антарктида",
                "Antarctica"
              ],
              [
                "BY",
                "Беларусь",
                "Belarus"
              ],
              [
                "MM",
                "Мьянма (Бирма)",
                "Burma (Myanmar)"
              ],
              [
                "BI",
                "Бурунди",
                "Burundi"
              ],
              [
                "CF",
                "Центрально-Африканская Республика",
                "Central African Republic"
              ],
              [
                "TD",
                "Чад",
                "Chad"
              ],
              [
                "CU",
                "Куба",
                "Cuba"
              ],
              [
                "CD",
                "Конго - Киншаса",
                "Democratic Republic of Congo"
              ],
              [
                "CG",
                "Конго - Браззавиль",
                "Republic of Congo"
              ],
              [
                "ER",
                "Эритрея",
                "Eritrea"
              ],
              [
                "HT",
                "Гаити",
                "Haiti"
              ],
              [
                "IR",
                "Иран",
                "Iran"
              ],
              [
                "IQ",
                "Ирак",
                "Iraq"
              ],
              [
                "LY",
                "Ливия",
                "Libya"
              ],
              [
                "ML",
                "Мали",
                "Mali"
              ],
              [
                "NI",
                "Никарагуа",
                "Nicaragua"
              ],
              [
                "KP",
                "КНДР",
                "North Korea"
              ],
              [
                "RU",
                "Россия",
                "Russia"
              ],
              [
                "SO",
                "Сомали",
                "Somalia"
              ],
              [
                "SS",
                "Южный Судан",
                "South Sudan"
              ],
              [
                "SD",
                "Судан",
                "Sudan"
              ],
              [
                "SY",
                "Сирия",
                "Syria"
              ],
              [
                "VE",
                "Венесуэла",
                "Venezuela"
              ],
              [
                "YE",
                "Йемен",
                "Yemen"
              ],
              [
                "ZW",
                "Зимбабве",
                "Zimbabwe"
              ],
              [
                "UA-43",
                "Крым",
                "Crimea (Region of Ukraine)"
              ],
              [
                "UA-14",
                "Донецкая область",
                "Donetsk (Region of Ukraine)"
              ],
              [
                "UA-65",
                "Херсонская область",
                "Kherson (Region of Ukraine)"
              ],
              [
                "UA-09",
                "Луганская область",
                "Luhansk (Region of Ukraine)"
              ],
              [
                "UA-23",
                "Запорожская область",
                "Zaporizhzhia (Region of Ukraine)"
              ],
              [
                "AN",
                "Нидерландские Антильские острова",
                "Netherlands Antilles"
              ]
            ]
          },
          "code": null,
          "note": "",
          "links": []
        },
        {
          "id": "card-list",
          "title": "Полный список: 223 стран и территорий",
          "paragraphs": [
            "Названия, ISO-коды и отметки ниже собраны из единого справочника географии. Примечания относятся к международным картам."
          ],
          "bullets": [],
          "steps": [],
          "table": {
            "headers": [
              "ISO",
              "Страна / территория",
              "Название на английском",
              "Примечание"
            ],
            "rows": [
              [
                "AX",
                "Аландские о-ва",
                "Åland Islands",
                "—"
              ],
              [
                "AL",
                "Албания",
                "Albania",
                "—"
              ],
              [
                "DZ",
                "Алжир",
                "Algeria",
                "—"
              ],
              [
                "AS",
                "Американское Самоа",
                "American Samoa",
                "—"
              ],
              [
                "AD",
                "Андорра",
                "Andorra",
                "—"
              ],
              [
                "AO",
                "Ангола",
                "Angola",
                "—"
              ],
              [
                "AI",
                "Ангилья",
                "Anguilla",
                "—"
              ],
              [
                "AG",
                "Антигуа и Барбуда",
                "Antigua & Barbuda",
                "—"
              ],
              [
                "AR",
                "Аргентина",
                "Argentina",
                "—"
              ],
              [
                "AM",
                "Армения",
                "Armenia",
                "—"
              ],
              [
                "AW",
                "Аруба",
                "Aruba",
                "—"
              ],
              [
                "AU",
                "Австралия",
                "Australia",
                "—"
              ],
              [
                "AT",
                "Австрия",
                "Austria",
                "—"
              ],
              [
                "AZ",
                "Азербайджан",
                "Azerbaijan",
                "—"
              ],
              [
                "BS",
                "Багамы",
                "Bahamas",
                "—"
              ],
              [
                "BH",
                "Бахрейн",
                "Bahrain",
                "—"
              ],
              [
                "BD",
                "Бангладеш",
                "Bangladesh",
                "—"
              ],
              [
                "BB",
                "Барбадос",
                "Barbados",
                "—"
              ],
              [
                "BE",
                "Бельгия",
                "Belgium",
                "—"
              ],
              [
                "BZ",
                "Белиз",
                "Belize",
                "—"
              ],
              [
                "BJ",
                "Бенин",
                "Benin",
                "—"
              ],
              [
                "BM",
                "Бермудские о-ва",
                "Bermuda",
                "—"
              ],
              [
                "BT",
                "Бутан",
                "Bhutan",
                "—"
              ],
              [
                "BO",
                "Боливия",
                "Bolivia",
                "—"
              ],
              [
                "BQ",
                "Бонэйр, Синт-Эстатиус и Саба",
                "Caribbean Netherlands",
                "—"
              ],
              [
                "BA",
                "Босния и Герцеговина",
                "Bosnia & Herzegovina",
                "—"
              ],
              [
                "BW",
                "Ботсвана",
                "Botswana",
                "—"
              ],
              [
                "BV",
                "о-в Буве",
                "Bouvet Island",
                "—"
              ],
              [
                "BR",
                "Бразилия",
                "Brazil",
                "—"
              ],
              [
                "IO",
                "Британская территория в Индийском океане",
                "British Indian Ocean Territory",
                "—"
              ],
              [
                "BN",
                "Бруней",
                "Brunei",
                "—"
              ],
              [
                "BG",
                "Болгария",
                "Bulgaria",
                "—"
              ],
              [
                "BF",
                "Буркина-Фасо",
                "Burkina Faso",
                "—"
              ],
              [
                "CV",
                "Кабо-Верде",
                "Cape Verde",
                "—"
              ],
              [
                "KH",
                "Камбоджа",
                "Cambodia",
                "—"
              ],
              [
                "CM",
                "Камерун",
                "Cameroon",
                "—"
              ],
              [
                "CA",
                "Канада",
                "Canada",
                "—"
              ],
              [
                "KY",
                "о-ва Кайман",
                "Cayman Islands",
                "—"
              ],
              [
                "CL",
                "Чили",
                "Chile",
                "—"
              ],
              [
                "CN",
                "Китай",
                "China",
                "—"
              ],
              [
                "CX",
                "о-в Рождества",
                "Christmas Island",
                "—"
              ],
              [
                "CC",
                "Кокосовые о-ва",
                "Cocos (Keeling) Islands",
                "—"
              ],
              [
                "CO",
                "Колумбия",
                "Colombia",
                "—"
              ],
              [
                "KM",
                "Коморы",
                "Comoros",
                "—"
              ],
              [
                "CK",
                "о-ва Кука",
                "Cook Islands",
                "—"
              ],
              [
                "CR",
                "Коста-Рика",
                "Costa Rica",
                "—"
              ],
              [
                "HR",
                "Хорватия",
                "Croatia",
                "—"
              ],
              [
                "CW",
                "Кюрасао",
                "Curaçao",
                "—"
              ],
              [
                "CY",
                "Кипр",
                "Cyprus",
                "—"
              ],
              [
                "CZ",
                "Чехия",
                "Czechia",
                "—"
              ],
              [
                "CI",
                "Кот-д’Ивуар",
                "Côte d’Ivoire",
                "—"
              ],
              [
                "DK",
                "Дания",
                "Denmark",
                "—"
              ],
              [
                "DJ",
                "Джибути",
                "Djibouti",
                "—"
              ],
              [
                "DM",
                "Доминика",
                "Dominica",
                "—"
              ],
              [
                "DO",
                "Доминиканская Республика",
                "Dominican Republic",
                "—"
              ],
              [
                "EC",
                "Эквадор",
                "Ecuador",
                "—"
              ],
              [
                "EG",
                "Египет",
                "Egypt",
                "—"
              ],
              [
                "SV",
                "Сальвадор",
                "El Salvador",
                "—"
              ],
              [
                "GQ",
                "Экваториальная Гвинея",
                "Equatorial Guinea",
                "—"
              ],
              [
                "EE",
                "Эстония",
                "Estonia",
                "—"
              ],
              [
                "SZ",
                "Эсватини",
                "Eswatini",
                "—"
              ],
              [
                "ET",
                "Эфиопия",
                "Ethiopia",
                "—"
              ],
              [
                "FK",
                "Фолклендские о-ва",
                "Falkland Islands",
                "—"
              ],
              [
                "FO",
                "Фарерские о-ва",
                "Faroe Islands",
                "—"
              ],
              [
                "FM",
                "Федеративные Штаты Микронезии",
                "Micronesia",
                "—"
              ],
              [
                "FJ",
                "Фиджи",
                "Fiji",
                "—"
              ],
              [
                "FI",
                "Финляндия",
                "Finland",
                "—"
              ],
              [
                "FR",
                "Франция",
                "France",
                "—"
              ],
              [
                "GF",
                "Французская Гвиана",
                "French Guiana",
                "—"
              ],
              [
                "PF",
                "Французская Полинезия",
                "French Polynesia",
                "—"
              ],
              [
                "TF",
                "Французские Южные территории",
                "French Southern Territories",
                "—"
              ],
              [
                "GA",
                "Габон",
                "Gabon",
                "—"
              ],
              [
                "GM",
                "Гамбия",
                "Gambia",
                "—"
              ],
              [
                "GE",
                "Грузия",
                "Georgia",
                "—"
              ],
              [
                "DE",
                "Германия",
                "Germany",
                "—"
              ],
              [
                "GH",
                "Гана",
                "Ghana",
                "—"
              ],
              [
                "GI",
                "Гибралтар",
                "Gibraltar",
                "—"
              ],
              [
                "GR",
                "Греция",
                "Greece",
                "—"
              ],
              [
                "GL",
                "Гренландия",
                "Greenland",
                "—"
              ],
              [
                "GD",
                "Гренада",
                "Grenada",
                "—"
              ],
              [
                "GP",
                "Гваделупа",
                "Guadeloupe",
                "—"
              ],
              [
                "GU",
                "Гуам",
                "Guam",
                "—"
              ],
              [
                "GT",
                "Гватемала",
                "Guatemala",
                "—"
              ],
              [
                "GG",
                "Гернси",
                "Guernsey",
                "—"
              ],
              [
                "GN",
                "Гвинея",
                "Guinea",
                "—"
              ],
              [
                "GW",
                "Гвинея-Бисау",
                "Guinea-Bissau",
                "—"
              ],
              [
                "GY",
                "Гайана",
                "Guyana",
                "—"
              ],
              [
                "HM",
                "о-ва Херд и Макдональд",
                "Heard & McDonald Islands",
                "—"
              ],
              [
                "VA",
                "Ватикан",
                "Vatican City",
                "—"
              ],
              [
                "HN",
                "Гондурас",
                "Honduras",
                "—"
              ],
              [
                "HK",
                "Гонконг (САР)",
                "Hong Kong SAR China",
                "—"
              ],
              [
                "HU",
                "Венгрия",
                "Hungary",
                "—"
              ],
              [
                "IS",
                "Исландия",
                "Iceland",
                "—"
              ],
              [
                "IN",
                "Индия",
                "India",
                "—"
              ],
              [
                "ID",
                "Индонезия",
                "Indonesia",
                "—"
              ],
              [
                "IE",
                "Ирландия",
                "Ireland",
                "—"
              ],
              [
                "IM",
                "о-в Мэн",
                "Isle of Man",
                "—"
              ],
              [
                "IL",
                "Израиль",
                "Israel",
                "—"
              ],
              [
                "IT",
                "Италия",
                "Italy",
                "—"
              ],
              [
                "JM",
                "Ямайка",
                "Jamaica",
                "—"
              ],
              [
                "JP",
                "Япония",
                "Japan",
                "—"
              ],
              [
                "JE",
                "Джерси",
                "Jersey",
                "—"
              ],
              [
                "JO",
                "Иордания",
                "Jordan",
                "—"
              ],
              [
                "KZ",
                "Казахстан",
                "Kazakhstan",
                "—"
              ],
              [
                "KE",
                "Кения",
                "Kenya",
                "—"
              ],
              [
                "KI",
                "Кирибати",
                "Kiribati",
                "—"
              ],
              [
                "KW",
                "Кувейт",
                "Kuwait",
                "—"
              ],
              [
                "KG",
                "Киргизия",
                "Kyrgyzstan",
                "—"
              ],
              [
                "LA",
                "Лаос",
                "Laos",
                "—"
              ],
              [
                "LV",
                "Латвия",
                "Latvia",
                "—"
              ],
              [
                "LB",
                "Ливан",
                "Lebanon",
                "—"
              ],
              [
                "LS",
                "Лесото",
                "Lesotho",
                "—"
              ],
              [
                "LR",
                "Либерия",
                "Liberia",
                "—"
              ],
              [
                "LI",
                "Лихтенштейн",
                "Liechtenstein",
                "—"
              ],
              [
                "LT",
                "Литва",
                "Lithuania",
                "—"
              ],
              [
                "LU",
                "Люксембург",
                "Luxembourg",
                "—"
              ],
              [
                "MO",
                "Макао (САР)",
                "Macao SAR China",
                "—"
              ],
              [
                "MG",
                "Мадагаскар",
                "Madagascar",
                "—"
              ],
              [
                "MW",
                "Малави",
                "Malawi",
                "—"
              ],
              [
                "MY",
                "Малайзия",
                "Malaysia",
                "—"
              ],
              [
                "MV",
                "Мальдивы",
                "Maldives",
                "—"
              ],
              [
                "MT",
                "Мальта",
                "Malta",
                "—"
              ],
              [
                "MH",
                "Маршалловы о-ва",
                "Marshall Islands",
                "—"
              ],
              [
                "MQ",
                "Мартиника",
                "Martinique",
                "—"
              ],
              [
                "MR",
                "Мавритания",
                "Mauritania",
                "—"
              ],
              [
                "MU",
                "Маврикий",
                "Mauritius",
                "—"
              ],
              [
                "YT",
                "Майотта",
                "Mayotte",
                "—"
              ],
              [
                "MX",
                "Мексика",
                "Mexico",
                "—"
              ],
              [
                "MD",
                "Молдова",
                "Moldova",
                "—"
              ],
              [
                "MC",
                "Монако",
                "Monaco",
                "—"
              ],
              [
                "MN",
                "Монголия",
                "Mongolia",
                "—"
              ],
              [
                "ME",
                "Черногория",
                "Montenegro",
                "—"
              ],
              [
                "MS",
                "Монтсеррат",
                "Montserrat",
                "—"
              ],
              [
                "MA",
                "Марокко",
                "Morocco",
                "—"
              ],
              [
                "MZ",
                "Мозамбик",
                "Mozambique",
                "—"
              ],
              [
                "NA",
                "Намибия",
                "Namibia",
                "—"
              ],
              [
                "NR",
                "Науру",
                "Nauru",
                "—"
              ],
              [
                "NP",
                "Непал",
                "Nepal",
                "—"
              ],
              [
                "NL",
                "Нидерланды",
                "Netherlands",
                "—"
              ],
              [
                "NC",
                "Новая Каледония",
                "New Caledonia",
                "—"
              ],
              [
                "NZ",
                "Новая Зеландия",
                "New Zealand",
                "—"
              ],
              [
                "NE",
                "Нигер",
                "Niger",
                "—"
              ],
              [
                "NG",
                "Нигерия",
                "Nigeria",
                "—"
              ],
              [
                "NU",
                "Ниуэ",
                "Niue",
                "—"
              ],
              [
                "NF",
                "о-в Норфолк",
                "Norfolk Island",
                "—"
              ],
              [
                "MK",
                "Северная Македония",
                "North Macedonia",
                "—"
              ],
              [
                "MP",
                "Северные Марианские о-ва",
                "Northern Mariana Islands",
                "—"
              ],
              [
                "NO",
                "Норвегия",
                "Norway",
                "—"
              ],
              [
                "OM",
                "Оман",
                "Oman",
                "—"
              ],
              [
                "PK",
                "Пакистан",
                "Pakistan",
                "—"
              ],
              [
                "PW",
                "Палау",
                "Palau",
                "—"
              ],
              [
                "PA",
                "Панама",
                "Panama",
                "—"
              ],
              [
                "PG",
                "Папуа — Новая Гвинея",
                "Papua New Guinea",
                "—"
              ],
              [
                "PY",
                "Парагвай",
                "Paraguay",
                "—"
              ],
              [
                "PE",
                "Перу",
                "Peru",
                "—"
              ],
              [
                "PH",
                "Филиппины",
                "Philippines",
                "—"
              ],
              [
                "PN",
                "о-ва Питкэрн",
                "Pitcairn Islands",
                "—"
              ],
              [
                "PL",
                "Польша",
                "Poland",
                "—"
              ],
              [
                "PT",
                "Португалия",
                "Portugal",
                "—"
              ],
              [
                "PR",
                "Пуэрто-Рико",
                "Puerto Rico",
                "—"
              ],
              [
                "QA",
                "Катар",
                "Qatar",
                "—"
              ],
              [
                "RO",
                "Румыния",
                "Romania",
                "—"
              ],
              [
                "RW",
                "Руанда",
                "Rwanda",
                "—"
              ],
              [
                "RE",
                "Реюньон",
                "Réunion",
                "—"
              ],
              [
                "BL",
                "Сен-Бартелеми",
                "St. Barthélemy",
                "—"
              ],
              [
                "SH",
                "о-в Св. Елены",
                "St. Helena",
                "—"
              ],
              [
                "KN",
                "Сент-Китс и Невис",
                "St. Kitts & Nevis",
                "—"
              ],
              [
                "LC",
                "Сент-Люсия",
                "St. Lucia",
                "—"
              ],
              [
                "MF",
                "Сен-Мартен",
                "St. Martin",
                "—"
              ],
              [
                "PM",
                "Сен-Пьер и Микелон",
                "St. Pierre & Miquelon",
                "—"
              ],
              [
                "VC",
                "Сент-Винсент и Гренадины",
                "St. Vincent & Grenadines",
                "—"
              ],
              [
                "WS",
                "Самоа",
                "Samoa",
                "—"
              ],
              [
                "SM",
                "Сан-Марино",
                "San Marino",
                "—"
              ],
              [
                "ST",
                "Сан-Томе и Принсипи",
                "São Tomé & Príncipe",
                "—"
              ],
              [
                "SA",
                "Саудовская Аравия",
                "Saudi Arabia",
                "—"
              ],
              [
                "SN",
                "Сенегал",
                "Senegal",
                "—"
              ],
              [
                "RS",
                "Сербия",
                "Serbia",
                "—"
              ],
              [
                "SC",
                "Сейшельские о-ва",
                "Seychelles",
                "—"
              ],
              [
                "SL",
                "Сьерра-Леоне",
                "Sierra Leone",
                "—"
              ],
              [
                "SG",
                "Сингапур",
                "Singapore",
                "—"
              ],
              [
                "SX",
                "Синт-Мартен",
                "Sint Maarten",
                "—"
              ],
              [
                "SK",
                "Словакия",
                "Slovakia",
                "—"
              ],
              [
                "SI",
                "Словения",
                "Slovenia",
                "—"
              ],
              [
                "SB",
                "Соломоновы о-ва",
                "Solomon Islands",
                "—"
              ],
              [
                "ZA",
                "Южно-Африканская Республика",
                "South Africa",
                "—"
              ],
              [
                "GS",
                "Южная Георгия и Южные Сандвичевы о-ва",
                "South Georgia & South Sandwich Islands",
                "—"
              ],
              [
                "KR",
                "Республика Корея",
                "South Korea",
                "—"
              ],
              [
                "ES",
                "Испания",
                "Spain",
                "—"
              ],
              [
                "LK",
                "Шри-Ланка",
                "Sri Lanka",
                "—"
              ],
              [
                "PS",
                "Палестинские территории",
                "Palestinian Territories",
                "—"
              ],
              [
                "SR",
                "Суринам",
                "Suriname",
                "—"
              ],
              [
                "SJ",
                "Шпицберген и Ян-Майен",
                "Svalbard & Jan Mayen",
                "—"
              ],
              [
                "SE",
                "Швеция",
                "Sweden",
                "—"
              ],
              [
                "CH",
                "Швейцария",
                "Switzerland",
                "—"
              ],
              [
                "TW",
                "Тайвань",
                "Taiwan",
                "—"
              ],
              [
                "TJ",
                "Таджикистан",
                "Tajikistan",
                "—"
              ],
              [
                "TZ",
                "Танзания",
                "Tanzania",
                "—"
              ],
              [
                "TH",
                "Таиланд",
                "Thailand",
                "—"
              ],
              [
                "TL",
                "Восточный Тимор",
                "Timor-Leste",
                "—"
              ],
              [
                "TG",
                "Того",
                "Togo",
                "—"
              ],
              [
                "TK",
                "Токелау",
                "Tokelau",
                "—"
              ],
              [
                "TO",
                "Тонга",
                "Tonga",
                "—"
              ],
              [
                "TT",
                "Тринидад и Тобаго",
                "Trinidad & Tobago",
                "—"
              ],
              [
                "TN",
                "Тунис",
                "Tunisia",
                "—"
              ],
              [
                "TM",
                "Туркменистан",
                "Turkmenistan",
                "—"
              ],
              [
                "TC",
                "Тёркс и Кайкос",
                "Turks & Caicos Islands",
                "—"
              ],
              [
                "TV",
                "Тувалу",
                "Tuvalu",
                "—"
              ],
              [
                "TR",
                "Турция",
                "Türkiye",
                "—"
              ],
              [
                "UG",
                "Уганда",
                "Uganda",
                "—"
              ],
              [
                "UA",
                "Украина**",
                "Ukraine",
                "В Украине недоступны Крым, Донецкая, Луганская, Херсонская и Запорожская области. Остальная территория доступна для оплаты картами."
              ],
              [
                "AE",
                "ОАЭ",
                "United Arab Emirates",
                "—"
              ],
              [
                "GB",
                "Великобритания",
                "United Kingdom",
                "—"
              ],
              [
                "UM",
                "Внешние малые о-ва (США)",
                "U.S. Outlying Islands",
                "—"
              ],
              [
                "US",
                "Соединенные Штаты",
                "United States",
                "—"
              ],
              [
                "UY",
                "Уругвай",
                "Uruguay",
                "—"
              ],
              [
                "UZ",
                "Узбекистан",
                "Uzbekistan",
                "—"
              ],
              [
                "VU",
                "Вануату",
                "Vanuatu",
                "—"
              ],
              [
                "VN",
                "Вьетнам",
                "Vietnam",
                "—"
              ],
              [
                "VG",
                "Виргинские о-ва (Великобритания)",
                "British Virgin Islands",
                "—"
              ],
              [
                "VI",
                "Виргинские о-ва (США)",
                "U.S. Virgin Islands",
                "—"
              ],
              [
                "WF",
                "Уоллис и Футуна",
                "Wallis & Futuna",
                "—"
              ],
              [
                "EH",
                "Западная Сахара",
                "Western Sahara",
                "—"
              ],
              [
                "ZM",
                "Замбия",
                "Zambia",
                "—"
              ]
            ]
          },
          "code": null,
          "note": "",
          "links": []
        },
        {
          "id": "crypto",
          "title": "Монеты и сети для оплаты",
          "paragraphs": [
            "Каталог включает 16 монет и 31 пару «монета — сеть». Одна монета может приниматься в нескольких сетях: например, USDT в Tron и USDT в Ethereum — разные варианты перевода. Полный перечень приведён ниже.",
            "Доступные для конкретного счёта варианты и их лимиты загружаются из GET /api/checkout/{token}/crypto-services. Каталог на этой странице описывает поддерживаемые сочетания; возможность создать платёж определяется актуальным ответом шлюза. Недоступная пара не становится доступной только потому, что она есть в справочнике.",
            "Магазин создаёт криптосчёт в USDT, а покупатель выбирает доступную монету и сеть. Сумму выбранной монеты, адрес, QR-код и срок действия задаёт созданная операция шлюза. Цена счёта в USDT не фиксирует курс BTC, ETH или другой монеты и не означает курс 1:1. Переводите точную десятичную сумму из реквизитов, без самостоятельного округления или пересчёта.",
            "USDT TRC20 — отдельное условие выплаты магазину. Оно не ограничивает входящие платежи сетью Tron и не означает, что создание выплаты доступно через кабинет или API. Условия и ограничения выплат описаны в руководстве по выводу средств."
          ],
          "bullets": [],
          "steps": [
            "Откройте счёт и выберите криптовалюту среди способов оплаты.",
            "Выберите монету и доступную сеть. Название сети в кошельке отправителя должно совпадать с сетью в реквизитах Kevmi.",
            "Получите реквизиты, сверьте точную сумму, полный адрес и срок действия. Можно скопировать адрес и сумму или использовать подходящий QR-код.",
            "Отправьте указанную сумму в выбранной сети. Учитывайте комиссию кошелька или сети, чтобы получателю поступила полная сумма из реквизитов.",
            "Дождитесь подтверждённого статуса на странице оплаты. Отправка перевода из кошелька сама по себе не завершает заказ: Kevmi проверяет результат через шлюз."
          ],
          "table": {
            "headers": [
              "Монета",
              "Название",
              "Сети и коды шлюза"
            ],
            "rows": [
              [
                "AVAX",
                "Avalanche",
                "Avalanche C-Chain (avalanche)"
              ],
              [
                "BCH",
                "Bitcoin Cash",
                "Bitcoin Cash (bch)"
              ],
              [
                "BNB",
                "BNB",
                "BNB Smart Chain (bsc)"
              ],
              [
                "BTC",
                "Bitcoin",
                "Bitcoin (btc)"
              ],
              [
                "DAI",
                "Dai",
                "BNB Smart Chain (bsc), Ethereum (eth), Polygon PoS (polygon)"
              ],
              [
                "DASH",
                "Dash",
                "Dash (dash)"
              ],
              [
                "DOGE",
                "Dogecoin",
                "Dogecoin (doge)"
              ],
              [
                "ETH",
                "Ethereum",
                "Ethereum (eth), Arbitrum One (arbitrum), BNB Smart Chain (bsc)"
              ],
              [
                "GRAM",
                "Gram",
                "TON (ton)"
              ],
              [
                "LTC",
                "Litecoin",
                "Litecoin (ltc)"
              ],
              [
                "POL",
                "Polygon",
                "Ethereum (eth), Polygon PoS (polygon)"
              ],
              [
                "SHIB",
                "Shiba Inu",
                "Ethereum (eth)"
              ],
              [
                "TRX",
                "TRON",
                "TRON (tron)"
              ],
              [
                "USDC",
                "USD Coin",
                "Arbitrum One (arbitrum), BNB Smart Chain (bsc), Polygon PoS (polygon), Ethereum (eth), Avalanche C-Chain (avalanche)"
              ],
              [
                "USDT",
                "Tether",
                "TRON (tron), Avalanche C-Chain (avalanche), BNB Smart Chain (bsc), TON (ton), Polygon PoS (polygon), Arbitrum One (arbitrum), Ethereum (eth)"
              ],
              [
                "XMR",
                "Monero",
                "Monero (xmr)"
              ]
            ]
          },
          "code": null,
          "note": "После истечения срока не используйте старые реквизиты. Если перевод уже отправлен, проверяйте ту же операцию и обратитесь в поддержку при необходимости; не создавайте второй платёж для проверки первого.",
          "links": [
            {
              "label": "Страница оплаты",
              "href": "/docs/checkout#method"
            },
            {
              "label": "Условия выплат",
              "href": "/docs/payouts"
            }
          ]
        },
        {
          "id": "specific",
          "title": "Если важна конкретная страна",
          "paragraphs": [
            "Помощник найдёт страну по русскому или английскому названию и ISO-коду и объяснит опубликованную отметку. Для страны с ** уточните нужную локацию, а для Китая с * — доступность вашей карты через поддержку.",
            "Если страны нет в карточном перечне, покрытие международных карт для неё не подтверждается этой базой. Укажите страну, банк и желаемый способ оплаты в обращении, чтобы уточнить возможность конкретного сценария. Полный номер карты и другие платёжные секреты не нужны."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": [
            {
              "label": "Страница географии",
              "href": "/countries"
            },
            {
              "label": "Задать вопрос",
              "href": "/?support=open"
            }
          ]
        }
      ],
      "body": "Visa и Mastercard — более 190 стран, кроме списка ограничений. СБП — Россия, Alipay — Китай. Криптовалюта — все страны мира.\n\nГеография по каналам\n\nКанал · География · Условия\nМеждународные карты · Более 190 стран · Кроме списка ограничений; в Украине исключены пять регионов\nСБП · Россия · Банк и конкретная операция проверяются шлюзом\nAlipay · Китай · Аккаунт и конкретная операция проверяются шлюзом\nКриптовалюта · Все страны мира · Выберите поддерживаемую монету и сеть\n\nИнтерактивная карта\n\nНа странице «География» размещена двумерная карта мира. Фильтры показывают страны международных карт из опубликованного списка, Россию для СБП и Китай для Alipay. Найдите страну по названию или коду и откройте её карточку с доступными способами и примечаниями.\n\nШтриховка Украины обозначает пять исключённых регионов. Остальная территория Украины доступна для оплаты картами. Карточные ограничения не распространяются на криптовалюту: она доступна во всех странах.\n\nОткрыть карту: https://kevmi.one/countries\n\nИсточник и границы списка\n\nVisa и Mastercard доступны в более чем 190 странах. Полный список исключений опубликован ниже. Справочник содержит также зависимые территории; его количество записей не равно числу стран. Страны регистрации магазинов и направления выплат имеют собственные условия.\n\nДоступность конкретной операции зависит от страны выпуска, банка, типа карты и проверки платёжного канала. Присутствие страны в перечне не гарантирует одобрение каждой карты.\n\nОграничения Visa и Mastercard\n\nВ Украине недоступны Крым, Донецкая, Луганская, Херсонская и Запорожская области. Остальная территория доступна для оплаты картами.\n\nВсе остальные страны доступны. Netherlands Antilles — историческая запись из списка провайдера; она не означает запрет всех современных карибских территорий.\n\nКод · Страна или территория · Название в списке провайдера\nAF · Афганистан · Afghanistan\nAQ · Антарктида · Antarctica\nBY · Беларусь · Belarus\nMM · Мьянма (Бирма) · Burma (Myanmar)\nBI · Бурунди · Burundi\nCF · Центрально-Африканская Республика · Central African Republic\nTD · Чад · Chad\nCU · Куба · Cuba\nCD · Конго - Киншаса · Democratic Republic of Congo\nCG · Конго - Браззавиль · Republic of Congo\nER · Эритрея · Eritrea\nHT · Гаити · Haiti\nIR · Иран · Iran\nIQ · Ирак · Iraq\nLY · Ливия · Libya\nML · Мали · Mali\nNI · Никарагуа · Nicaragua\nKP · КНДР · North Korea\nRU · Россия · Russia\nSO · Сомали · Somalia\nSS · Южный Судан · South Sudan\nSD · Судан · Sudan\nSY · Сирия · Syria\nVE · Венесуэла · Venezuela\nYE · Йемен · Yemen\nZW · Зимбабве · Zimbabwe\nUA-43 · Крым · Crimea (Region of Ukraine)\nUA-14 · Донецкая область · Donetsk (Region of Ukraine)\nUA-65 · Херсонская область · Kherson (Region of Ukraine)\nUA-09 · Луганская область · Luhansk (Region of Ukraine)\nUA-23 · Запорожская область · Zaporizhzhia (Region of Ukraine)\nAN · Нидерландские Антильские острова · Netherlands Antilles\n\nПолный список: 223 стран и территорий\n\nНазвания, ISO-коды и отметки ниже собраны из единого справочника географии. Примечания относятся к международным картам.\n\nISO · Страна / территория · Название на английском · Примечание\nAX · Аландские о-ва · Åland Islands · —\nAL · Албания · Albania · —\nDZ · Алжир · Algeria · —\nAS · Американское Самоа · American Samoa · —\nAD · Андорра · Andorra · —\nAO · Ангола · Angola · —\nAI · Ангилья · Anguilla · —\nAG · Антигуа и Барбуда · Antigua & Barbuda · —\nAR · Аргентина · Argentina · —\nAM · Армения · Armenia · —\nAW · Аруба · Aruba · —\nAU · Австралия · Australia · —\nAT · Австрия · Austria · —\nAZ · Азербайджан · Azerbaijan · —\nBS · Багамы · Bahamas · —\nBH · Бахрейн · Bahrain · —\nBD · Бангладеш · Bangladesh · —\nBB · Барбадос · Barbados · —\nBE · Бельгия · Belgium · —\nBZ · Белиз · Belize · —\nBJ · Бенин · Benin · —\nBM · Бермудские о-ва · Bermuda · —\nBT · Бутан · Bhutan · —\nBO · Боливия · Bolivia · —\nBQ · Бонэйр, Синт-Эстатиус и Саба · Caribbean Netherlands · —\nBA · Босния и Герцеговина · Bosnia & Herzegovina · —\nBW · Ботсвана · Botswana · —\nBV · о-в Буве · Bouvet Island · —\nBR · Бразилия · Brazil · —\nIO · Британская территория в Индийском океане · British Indian Ocean Territory · —\nBN · Бруней · Brunei · —\nBG · Болгария · Bulgaria · —\nBF · Буркина-Фасо · Burkina Faso · —\nCV · Кабо-Верде · Cape Verde · —\nKH · Камбоджа · Cambodia · —\nCM · Камерун · Cameroon · —\nCA · Канада · Canada · —\nKY · о-ва Кайман · Cayman Islands · —\nCL · Чили · Chile · —\nCN · Китай · China · —\nCX · о-в Рождества · Christmas Island · —\nCC · Кокосовые о-ва · Cocos (Keeling) Islands · —\nCO · Колумбия · Colombia · —\nKM · Коморы · Comoros · —\nCK · о-ва Кука · Cook Islands · —\nCR · Коста-Рика · Costa Rica · —\nHR · Хорватия · Croatia · —\nCW · Кюрасао · Curaçao · —\nCY · Кипр · Cyprus · —\nCZ · Чехия · Czechia · —\nCI · Кот-д’Ивуар · Côte d’Ivoire · —\nDK · Дания · Denmark · —\nDJ · Джибути · Djibouti · —\nDM · Доминика · Dominica · —\nDO · Доминиканская Республика · Dominican Republic · —\nEC · Эквадор · Ecuador · —\nEG · Египет · Egypt · —\nSV · Сальвадор · El Salvador · —\nGQ · Экваториальная Гвинея · Equatorial Guinea · —\nEE · Эстония · Estonia · —\nSZ · Эсватини · Eswatini · —\nET · Эфиопия · Ethiopia · —\nFK · Фолклендские о-ва · Falkland Islands · —\nFO · Фарерские о-ва · Faroe Islands · —\nFM · Федеративные Штаты Микронезии · Micronesia · —\nFJ · Фиджи · Fiji · —\nFI · Финляндия · Finland · —\nFR · Франция · France · —\nGF · Французская Гвиана · French Guiana · —\nPF · Французская Полинезия · French Polynesia · —\nTF · Французские Южные территории · French Southern Territories · —\nGA · Габон · Gabon · —\nGM · Гамбия · Gambia · —\nGE · Грузия · Georgia · —\nDE · Германия · Germany · —\nGH · Гана · Ghana · —\nGI · Гибралтар · Gibraltar · —\nGR · Греция · Greece · —\nGL · Гренландия · Greenland · —\nGD · Гренада · Grenada · —\nGP · Гваделупа · Guadeloupe · —\nGU · Гуам · Guam · —\nGT · Гватемала · Guatemala · —\nGG · Гернси · Guernsey · —\nGN · Гвинея · Guinea · —\nGW · Гвинея-Бисау · Guinea-Bissau · —\nGY · Гайана · Guyana · —\nHM · о-ва Херд и Макдональд · Heard & McDonald Islands · —\nVA · Ватикан · Vatican City · —\nHN · Гондурас · Honduras · —\nHK · Гонконг (САР) · Hong Kong SAR China · —\nHU · Венгрия · Hungary · —\nIS · Исландия · Iceland · —\nIN · Индия · India · —\nID · Индонезия · Indonesia · —\nIE · Ирландия · Ireland · —\nIM · о-в Мэн · Isle of Man · —\nIL · Израиль · Israel · —\nIT · Италия · Italy · —\nJM · Ямайка · Jamaica · —\nJP · Япония · Japan · —\nJE · Джерси · Jersey · —\nJO · Иордания · Jordan · —\nKZ · Казахстан · Kazakhstan · —\nKE · Кения · Kenya · —\nKI · Кирибати · Kiribati · —\nKW · Кувейт · Kuwait · —\nKG · Киргизия · Kyrgyzstan · —\nLA · Лаос · Laos · —\nLV · Латвия · Latvia · —\nLB · Ливан · Lebanon · —\nLS · Лесото · Lesotho · —\nLR · Либерия · Liberia · —\nLI · Лихтенштейн · Liechtenstein · —\nLT · Литва · Lithuania · —\nLU · Люксембург · Luxembourg · —\nMO · Макао (САР) · Macao SAR China · —\nMG · Мадагаскар · Madagascar · —\nMW · Малави · Malawi · —\nMY · Малайзия · Malaysia · —\nMV · Мальдивы · Maldives · —\nMT · Мальта · Malta · —\nMH · Маршалловы о-ва · Marshall Islands · —\nMQ · Мартиника · Martinique · —\nMR · Мавритания · Mauritania · —\nMU · Маврикий · Mauritius · —\nYT · Майотта · Mayotte · —\nMX · Мексика · Mexico · —\nMD · Молдова · Moldova · —\nMC · Монако · Monaco · —\nMN · Монголия · Mongolia · —\nME · Черногория · Montenegro · —\nMS · Монтсеррат · Montserrat · —\nMA · Марокко · Morocco · —\nMZ · Мозамбик · Mozambique · —\nNA · Намибия · Namibia · —\nNR · Науру · Nauru · —\nNP · Непал · Nepal · —\nNL · Нидерланды · Netherlands · —\nNC · Новая Каледония · New Caledonia · —\nNZ · Новая Зеландия · New Zealand · —\nNE · Нигер · Niger · —\nNG · Нигерия · Nigeria · —\nNU · Ниуэ · Niue · —\nNF · о-в Норфолк · Norfolk Island · —\nMK · Северная Македония · North Macedonia · —\nMP · Северные Марианские о-ва · Northern Mariana Islands · —\nNO · Норвегия · Norway · —\nOM · Оман · Oman · —\nPK · Пакистан · Pakistan · —\nPW · Палау · Palau · —\nPA · Панама · Panama · —\nPG · Папуа — Новая Гвинея · Papua New Guinea · —\nPY · Парагвай · Paraguay · —\nPE · Перу · Peru · —\nPH · Филиппины · Philippines · —\nPN · о-ва Питкэрн · Pitcairn Islands · —\nPL · Польша · Poland · —\nPT · Португалия · Portugal · —\nPR · Пуэрто-Рико · Puerto Rico · —\nQA · Катар · Qatar · —\nRO · Румыния · Romania · —\nRW · Руанда · Rwanda · —\nRE · Реюньон · Réunion · —\nBL · Сен-Бартелеми · St. Barthélemy · —\nSH · о-в Св. Елены · St. Helena · —\nKN · Сент-Китс и Невис · St. Kitts & Nevis · —\nLC · Сент-Люсия · St. Lucia · —\nMF · Сен-Мартен · St. Martin · —\nPM · Сен-Пьер и Микелон · St. Pierre & Miquelon · —\nVC · Сент-Винсент и Гренадины · St. Vincent & Grenadines · —\nWS · Самоа · Samoa · —\nSM · Сан-Марино · San Marino · —\nST · Сан-Томе и Принсипи · São Tomé & Príncipe · —\nSA · Саудовская Аравия · Saudi Arabia · —\nSN · Сенегал · Senegal · —\nRS · Сербия · Serbia · —\nSC · Сейшельские о-ва · Seychelles · —\nSL · Сьерра-Леоне · Sierra Leone · —\nSG · Сингапур · Singapore · —\nSX · Синт-Мартен · Sint Maarten · —\nSK · Словакия · Slovakia · —\nSI · Словения · Slovenia · —\nSB · Соломоновы о-ва · Solomon Islands · —\nZA · Южно-Африканская Республика · South Africa · —\nGS · Южная Георгия и Южные Сандвичевы о-ва · South Georgia & South Sandwich Islands · —\nKR · Республика Корея · South Korea · —\nES · Испания · Spain · —\nLK · Шри-Ланка · Sri Lanka · —\nPS · Палестинские территории · Palestinian Territories · —\nSR · Суринам · Suriname · —\nSJ · Шпицберген и Ян-Майен · Svalbard & Jan Mayen · —\nSE · Швеция · Sweden · —\nCH · Швейцария · Switzerland · —\nTW · Тайвань · Taiwan · —\nTJ · Таджикистан · Tajikistan · —\nTZ · Танзания · Tanzania · —\nTH · Таиланд · Thailand · —\nTL · Восточный Тимор · Timor-Leste · —\nTG · Того · Togo · —\nTK · Токелау · Tokelau · —\nTO · Тонга · Tonga · —\nTT · Тринидад и Тобаго · Trinidad & Tobago · —\nTN · Тунис · Tunisia · —\nTM · Туркменистан · Turkmenistan · —\nTC · Тёркс и Кайкос · Turks & Caicos Islands · —\nTV · Тувалу · Tuvalu · —\nTR · Турция · Türkiye · —\nUG · Уганда · Uganda · —\nUA · Украина** · Ukraine · В Украине недоступны Крым, Донецкая, Луганская, Херсонская и Запорожская области. Остальная территория доступна для оплаты картами.\nAE · ОАЭ · United Arab Emirates · —\nGB · Великобритания · United Kingdom · —\nUM · Внешние малые о-ва (США) · U.S. Outlying Islands · —\nUS · Соединенные Штаты · United States · —\nUY · Уругвай · Uruguay · —\nUZ · Узбекистан · Uzbekistan · —\nVU · Вануату · Vanuatu · —\nVN · Вьетнам · Vietnam · —\nVG · Виргинские о-ва (Великобритания) · British Virgin Islands · —\nVI · Виргинские о-ва (США) · U.S. Virgin Islands · —\nWF · Уоллис и Футуна · Wallis & Futuna · —\nEH · Западная Сахара · Western Sahara · —\nZM · Замбия · Zambia · —\n\nМонеты и сети для оплаты\n\nКаталог включает 16 монет и 31 пару «монета — сеть». Одна монета может приниматься в нескольких сетях: например, USDT в Tron и USDT в Ethereum — разные варианты перевода. Полный перечень приведён ниже.\n\nДоступные для конкретного счёта варианты и их лимиты загружаются из GET /api/checkout/{token}/crypto-services. Каталог на этой странице описывает поддерживаемые сочетания; возможность создать платёж определяется актуальным ответом шлюза. Недоступная пара не становится доступной только потому, что она есть в справочнике.\n\nМагазин создаёт криптосчёт в USDT, а покупатель выбирает доступную монету и сеть. Сумму выбранной монеты, адрес, QR-код и срок действия задаёт созданная операция шлюза. Цена счёта в USDT не фиксирует курс BTC, ETH или другой монеты и не означает курс 1:1. Переводите точную десятичную сумму из реквизитов, без самостоятельного округления или пересчёта.\n\nUSDT TRC20 — отдельное условие выплаты магазину. Оно не ограничивает входящие платежи сетью Tron и не означает, что создание выплаты доступно через кабинет или API. Условия и ограничения выплат описаны в руководстве по выводу средств.\n\n1. Откройте счёт и выберите криптовалюту среди способов оплаты.\n\n2. Выберите монету и доступную сеть. Название сети в кошельке отправителя должно совпадать с сетью в реквизитах Kevmi.\n\n3. Получите реквизиты, сверьте точную сумму, полный адрес и срок действия. Можно скопировать адрес и сумму или использовать подходящий QR-код.\n\n4. Отправьте указанную сумму в выбранной сети. Учитывайте комиссию кошелька или сети, чтобы получателю поступила полная сумма из реквизитов.\n\n5. Дождитесь подтверждённого статуса на странице оплаты. Отправка перевода из кошелька сама по себе не завершает заказ: Kevmi проверяет результат через шлюз.\n\nМонета · Название · Сети и коды шлюза\nAVAX · Avalanche · Avalanche C-Chain (avalanche)\nBCH · Bitcoin Cash · Bitcoin Cash (bch)\nBNB · BNB · BNB Smart Chain (bsc)\nBTC · Bitcoin · Bitcoin (btc)\nDAI · Dai · BNB Smart Chain (bsc), Ethereum (eth), Polygon PoS (polygon)\nDASH · Dash · Dash (dash)\nDOGE · Dogecoin · Dogecoin (doge)\nETH · Ethereum · Ethereum (eth), Arbitrum One (arbitrum), BNB Smart Chain (bsc)\nGRAM · Gram · TON (ton)\nLTC · Litecoin · Litecoin (ltc)\nPOL · Polygon · Ethereum (eth), Polygon PoS (polygon)\nSHIB · Shiba Inu · Ethereum (eth)\nTRX · TRON · TRON (tron)\nUSDC · USD Coin · Arbitrum One (arbitrum), BNB Smart Chain (bsc), Polygon PoS (polygon), Ethereum (eth), Avalanche C-Chain (avalanche)\nUSDT · Tether · TRON (tron), Avalanche C-Chain (avalanche), BNB Smart Chain (bsc), TON (ton), Polygon PoS (polygon), Arbitrum One (arbitrum), Ethereum (eth)\nXMR · Monero · Monero (xmr)\n\nПосле истечения срока не используйте старые реквизиты. Если перевод уже отправлен, проверяйте ту же операцию и обратитесь в поддержку при необходимости; не создавайте второй платёж для проверки первого.\n\nСтраница оплаты: https://kevmi.one/docs/checkout#method\n\nУсловия выплат: https://kevmi.one/docs/payouts\n\nЕсли важна конкретная страна\n\nПомощник найдёт страну по русскому или английскому названию и ISO-коду и объяснит опубликованную отметку. Для страны с ** уточните нужную локацию, а для Китая с * — доступность вашей карты через поддержку.\n\nЕсли страны нет в карточном перечне, покрытие международных карт для неё не подтверждается этой базой. Укажите страну, банк и желаемый способ оплаты в обращении, чтобы уточнить возможность конкретного сценария. Полный номер карты и другие платёжные секреты не нужны.\n\nСтраница географии: https://kevmi.one/countries\n\nЗадать вопрос: https://kevmi.one/?support=open",
      "readMinutes": 19
    },
    {
      "id": "payment-links",
      "title": "Платёжные ссылки",
      "summary": "Платёжная ссылка ведёт на отдельную страницу заказа. Покупатель видит продавца, описание покупки, доступные способы оплаты и итоговую сумму — на телефоне или компьютере.",
      "group": "payments",
      "url": "/docs/payment-links",
      "tags": [
        "ссылка",
        "checkout",
        "счет",
        "счёт",
        "оплатить",
        "пауза",
        "Any",
        "выбор способа"
      ],
      "sections": [
        {
          "id": "contents",
          "title": "Что входит в счёт",
          "paragraphs": [
            "Новые ссылки кабинета используют единый расчёт в USD и Any для всех четырёх способов. СБП конвертируется в RUB по зафиксированному курсу ЦБ, криптооплата — в USDT по явному правилу 1:1. Прежний режим native сохраняется для старых ссылок и API-запросов без pricingMode=universal. Подробности — в разделе о магазинах и единой цене.",
            "Не добавляйте в публичное описание пароли, API-ключи, реквизиты карт или банковские коды. Название и номер заказа должны быть понятны покупателю."
          ],
          "bullets": [
            "Название магазина, заголовок заказа до 120 символов и описание до 500 символов.",
            "Базовая сумма и явная валюта USD, RUB или USDT.",
            "Совместимые способы оплаты, отдельные доли комиссии и НДС, номер заказа и срок ссылки.",
            "В ответах владельцу link.payment содержит сохранённый статус уже созданной операции; это отдельное поле от состояния самой ссылки."
          ],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": []
        },
        {
          "id": "any",
          "title": "Any — способ выбирает покупатель",
          "paragraphs": [
            "Any означает все способы, совместимые с валютой счёта: карты и Alipay для USD, СБП для RUB, криптовалюта для USDT. В API передаётся конкретный массив methods, а не строка any. Каждому способу соответствует собственный расчёт.",
            "Новые ссылки кабинета используют единый расчёт в USD и Any для всех четырёх способов. СБП конвертируется в RUB по зафиксированному курсу ЦБ, криптооплата — в USDT по явному правилу 1:1. Прежний режим native сохраняется для старых ссылок и API-запросов без pricingMode=universal. Подробности — в разделе о магазинах и единой цене.",
            "Для нового реального платежа картой или Alipay текущий шлюз поддерживает только feeCustomerPercent=0 и vatCustomerPercent=100: комиссию полностью покрывает магазин, НДС полностью добавляется покупателю. Остальные доли можно сохранить в счёте и рассчитать, но такой платёж не запускается и получает unsupported_allocation. Сервер не меняет сохранённые условия автоматически. Для СБП и USDT-криптооплаты доступны все доли комиссии; НДС у них отсутствует."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": [
            {
              "label": "Передать способы через API",
              "href": "/docs/payment-links-api#methods"
            }
          ]
        },
        {
          "id": "create",
          "title": "Как подготовить ссылку",
          "paragraphs": [],
          "bullets": [],
          "steps": [
            "Откройте вкладку «Ссылки» в кабинете.",
            "Заполните название, сумму, валюту и описание. Двумя ползунками задайте доли комиссии и НДС.",
            "Оставьте Any для выбора покупателем или выберите конкретные способы. Укажите срок действия.",
            "Сравните итог по каждому способу и проверьте страницу покупателя.",
            "Сразу после создания получите готовую ссылку, скопируйте её и передайте покупателю или вставьте в виджет."
          ],
          "table": null,
          "code": null,
          "note": "Если приём платежей недоступен, страница сообщит об этом до подтверждения. Создание счёта само по себе не списывает деньги.",
          "links": []
        },
        {
          "id": "fixed",
          "title": "Условия сохраняются",
          "paragraphs": [
            "Уже созданный счёт не меняется вслед за настройками магазина. Цена, валюта, доли комиссии и НДС, номер заказа и метаданные принадлежат конкретному счёту. Это помогает избежать ситуации, когда покупатель открыл один итог, а затем получил другой.",
            "Если цена, описание или распределение расходов изменились, создайте новую ссылку и остановите прежнюю. Не редактируйте сумму в адресной строке: параметры браузера не являются доверенным источником расчёта."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": []
        },
        {
          "id": "public",
          "title": "Отдельная страница оплаты",
          "paragraphs": [
            "Серверная ссылка хранится в базе и открывается на другом устройстве по адресу /pay/… без кабинета продавца. Покупателю не нужно регистрироваться в Kevmi, чтобы прочитать счёт. На странице нет баланса магазина, его настроек или списка других клиентов.",
            "Демонстрационный счёт /pay/demo позволяет увидеть этот путь без списания. Браузерные ссылки старого демо остаются тестовыми и не должны отправляться как настоящие счета."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": [
            {
              "label": "Открыть пример страницы оплаты",
              "href": "/pay/demo"
            },
            {
              "label": "Страница оплаты: все состояния",
              "href": "/docs/checkout"
            }
          ]
        },
        {
          "id": "control",
          "title": "Управление доступностью",
          "paragraphs": [
            "Пауза, отмена и истечение срока ссылки запрещают запуск новой операции. Они не скрывают уже отправленный платёж: его статус, сверка и запрошенный банковский код продолжают работать. Состояние ссылки и финансовая операция проверяются отдельно.",
            "Возобновление снимает паузу, но не меняет условия счёта. Отмена окончательна; срок истёкшей ссылки не продлевается. Создавайте новый счёт только для нового заказа или новых условий, а не для повторного списания при неизвестном результате."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": []
        },
        {
          "id": "stores-usd",
          "title": "Несколько магазинов и единая цена в USD",
          "paragraphs": [
            "В меню магазина выберите «Все магазины» для общего обзора и операций или конкретный магазин для его данных. Каждый магазин имеет собственный storeId, название, правило НДС, счета, API-ключи, вебхуки, журнал событий и заявку на проверку сайта. Уведомления и обращения принадлежат аккаунту. Можно создать до 100 магазинов. Ранее созданные данные сохранены в первом магазине.",
            "Новые ссылки из кабинета используют pricingMode=\"universal\": базовая цена хранится в USD. Any включает card, alipay, sbp и crypto; при необходимости магазин выбирает подмножество. Карты и Alipay оплачиваются в USD, СБП — в RUB по официальному курсу USD/RUB Банка России, криптовалюта — в USDT по явно установленному соотношению 1 USD = 1 USDT. Это правило расчёта счёта, а не рыночная котировка USDT. Курс другой монеты и точные реквизиты предоставляет шлюз перед переводом.",
            "Курс ЦБ и обе суммы сохраняются при создании. Ссылки с рублёвой конвертацией действуют не более 24 часов. Если курс получить не удалось, создание возвращает FX_UNAVAILABLE; выдуманный или старый запасной курс не применяется. amountMinor и quotes в ответе владельцу выражены в базовой валюте USD; quotes[method].settlement содержит сумму и валюту конкретного способа. Публичный checkout возвращает выбранную валюту оплаты в currency, исходную цену в baseAmountMinor/baseCurrency и курс в fx. Возврат к другой валюте после отправки платежа запрещён: у счёта одна операция шлюза.",
            "Для серверной интеграции создайте API-ключ внутри выбранного магазина и передавайте Authorization: Bearer <key>. Привязка ключа к магазину неизменна: заголовок X-Kevmi-Store не позволяет получить данные другого магазина. Для браузерной сессии передавайте X-Kevmi-Store: <storeId>; без заголовка используется первый магазин. Значение all разрешено только для GET /api/account/dashboard и GET /api/payment-links. Изменения требуют выбранного магазина, Origin и X-CSRF-Token. ID аккаунта и ID магазина — разные идентификаторы.",
            "Без pricingMode=\"universal\" API сохраняет прежний режим native и исходные ограничения валют для совместимости. Старые ссылки не пересчитываются. Подтверждённые поступления в обзоре — это проверенные платежи за вычетом расходов по сохранённому расчёту, а не доступный остаток для вывода. Валюты старых счетов учитываются раздельно; выплаты согласуются с поддержкой. Подтверждение исполнения заказа проверяйте через payment.fulfillmentReady=true и payment.status=\"succeeded\" в серверном API, журнале событий или подписанном вебхуке."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": []
        }
      ],
      "body": "Платёжная ссылка ведёт на отдельную страницу заказа. Покупатель видит продавца, описание покупки, доступные способы оплаты и итоговую сумму — на телефоне или компьютере.\n\nЧто входит в счёт\n\nНовые ссылки кабинета используют единый расчёт в USD и Any для всех четырёх способов. СБП конвертируется в RUB по зафиксированному курсу ЦБ, криптооплата — в USDT по явному правилу 1:1. Прежний режим native сохраняется для старых ссылок и API-запросов без pricingMode=universal. Подробности — в разделе о магазинах и единой цене.\n\nНе добавляйте в публичное описание пароли, API-ключи, реквизиты карт или банковские коды. Название и номер заказа должны быть понятны покупателю.\n\nНазвание магазина, заголовок заказа до 120 символов и описание до 500 символов.\n\nБазовая сумма и явная валюта USD, RUB или USDT.\n\nСовместимые способы оплаты, отдельные доли комиссии и НДС, номер заказа и срок ссылки.\n\nВ ответах владельцу link.payment содержит сохранённый статус уже созданной операции; это отдельное поле от состояния самой ссылки.\n\nAny — способ выбирает покупатель\n\nAny означает все способы, совместимые с валютой счёта: карты и Alipay для USD, СБП для RUB, криптовалюта для USDT. В API передаётся конкретный массив methods, а не строка any. Каждому способу соответствует собственный расчёт.\n\nНовые ссылки кабинета используют единый расчёт в USD и Any для всех четырёх способов. СБП конвертируется в RUB по зафиксированному курсу ЦБ, криптооплата — в USDT по явному правилу 1:1. Прежний режим native сохраняется для старых ссылок и API-запросов без pricingMode=universal. Подробности — в разделе о магазинах и единой цене.\n\nДля нового реального платежа картой или Alipay текущий шлюз поддерживает только feeCustomerPercent=0 и vatCustomerPercent=100: комиссию полностью покрывает магазин, НДС полностью добавляется покупателю. Остальные доли можно сохранить в счёте и рассчитать, но такой платёж не запускается и получает unsupported_allocation. Сервер не меняет сохранённые условия автоматически. Для СБП и USDT-криптооплаты доступны все доли комиссии; НДС у них отсутствует.\n\nПередать способы через API: https://kevmi.one/docs/payment-links-api#methods\n\nКак подготовить ссылку\n\n1. Откройте вкладку «Ссылки» в кабинете.\n\n2. Заполните название, сумму, валюту и описание. Двумя ползунками задайте доли комиссии и НДС.\n\n3. Оставьте Any для выбора покупателем или выберите конкретные способы. Укажите срок действия.\n\n4. Сравните итог по каждому способу и проверьте страницу покупателя.\n\n5. Сразу после создания получите готовую ссылку, скопируйте её и передайте покупателю или вставьте в виджет.\n\nЕсли приём платежей недоступен, страница сообщит об этом до подтверждения. Создание счёта само по себе не списывает деньги.\n\nУсловия сохраняются\n\nУже созданный счёт не меняется вслед за настройками магазина. Цена, валюта, доли комиссии и НДС, номер заказа и метаданные принадлежат конкретному счёту. Это помогает избежать ситуации, когда покупатель открыл один итог, а затем получил другой.\n\nЕсли цена, описание или распределение расходов изменились, создайте новую ссылку и остановите прежнюю. Не редактируйте сумму в адресной строке: параметры браузера не являются доверенным источником расчёта.\n\nОтдельная страница оплаты\n\nСерверная ссылка хранится в базе и открывается на другом устройстве по адресу /pay/… без кабинета продавца. Покупателю не нужно регистрироваться в Kevmi, чтобы прочитать счёт. На странице нет баланса магазина, его настроек или списка других клиентов.\n\nДемонстрационный счёт /pay/demo позволяет увидеть этот путь без списания. Браузерные ссылки старого демо остаются тестовыми и не должны отправляться как настоящие счета.\n\nОткрыть пример страницы оплаты: https://kevmi.one/pay/demo\n\nСтраница оплаты: все состояния: https://kevmi.one/docs/checkout\n\nУправление доступностью\n\nПауза, отмена и истечение срока ссылки запрещают запуск новой операции. Они не скрывают уже отправленный платёж: его статус, сверка и запрошенный банковский код продолжают работать. Состояние ссылки и финансовая операция проверяются отдельно.\n\nВозобновление снимает паузу, но не меняет условия счёта. Отмена окончательна; срок истёкшей ссылки не продлевается. Создавайте новый счёт только для нового заказа или новых условий, а не для повторного списания при неизвестном результате.\n\nНесколько магазинов и единая цена в USD\n\nВ меню магазина выберите «Все магазины» для общего обзора и операций или конкретный магазин для его данных. Каждый магазин имеет собственный storeId, название, правило НДС, счета, API-ключи, вебхуки, журнал событий и заявку на проверку сайта. Уведомления и обращения принадлежат аккаунту. Можно создать до 100 магазинов. Ранее созданные данные сохранены в первом магазине.\n\nНовые ссылки из кабинета используют pricingMode=\"universal\": базовая цена хранится в USD. Any включает card, alipay, sbp и crypto; при необходимости магазин выбирает подмножество. Карты и Alipay оплачиваются в USD, СБП — в RUB по официальному курсу USD/RUB Банка России, криптовалюта — в USDT по явно установленному соотношению 1 USD = 1 USDT. Это правило расчёта счёта, а не рыночная котировка USDT. Курс другой монеты и точные реквизиты предоставляет шлюз перед переводом.\n\nКурс ЦБ и обе суммы сохраняются при создании. Ссылки с рублёвой конвертацией действуют не более 24 часов. Если курс получить не удалось, создание возвращает FX_UNAVAILABLE; выдуманный или старый запасной курс не применяется. amountMinor и quotes в ответе владельцу выражены в базовой валюте USD; quotes[method].settlement содержит сумму и валюту конкретного способа. Публичный checkout возвращает выбранную валюту оплаты в currency, исходную цену в baseAmountMinor/baseCurrency и курс в fx. Возврат к другой валюте после отправки платежа запрещён: у счёта одна операция шлюза.\n\nДля серверной интеграции создайте API-ключ внутри выбранного магазина и передавайте Authorization: Bearer <key>. Привязка ключа к магазину неизменна: заголовок X-Kevmi-Store не позволяет получить данные другого магазина. Для браузерной сессии передавайте X-Kevmi-Store: <storeId>; без заголовка используется первый магазин. Значение all разрешено только для GET /api/account/dashboard и GET /api/payment-links. Изменения требуют выбранного магазина, Origin и X-CSRF-Token. ID аккаунта и ID магазина — разные идентификаторы.\n\nБез pricingMode=\"universal\" API сохраняет прежний режим native и исходные ограничения валют для совместимости. Старые ссылки не пересчитываются. Подтверждённые поступления в обзоре — это проверенные платежи за вычетом расходов по сохранённому расчёту, а не доступный остаток для вывода. Валюты старых счетов учитываются раздельно; выплаты согласуются с поддержкой. Подтверждение исполнения заказа проверяйте через payment.fulfillmentReady=true и payment.status=\"succeeded\" в серверном API, журнале событий или подписанном вебхуке.\n\n",
      "readMinutes": 4
    },
    {
      "id": "checkout",
      "title": "Страница оплаты",
      "summary": "Страница оплаты помогает покупателю понять, за что он платит, каким способом и какую сумму увидит перед подтверждением. Она отделена от кабинета магазина.",
      "group": "payments",
      "url": "/docs/checkout",
      "tags": [
        "checkout",
        "покупатель",
        "страница оплаты",
        "ссылка",
        "ошибка оплаты"
      ],
      "sections": [
        {
          "id": "review",
          "title": "Проверьте детали заказа",
          "paragraphs": [
            "Сверьте название магазина, покупку, базовую цену и валюту. Если данные отличаются от договорённости с продавцом, не продолжайте: попросите корректный счёт.",
            "Для публичной ссылки достаточно её адреса. Авторизация в магазине продавца не требуется. Демонстрационная страница явно помечается и не собирает реквизиты для реального списания."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": []
        },
        {
          "id": "method",
          "title": "Выберите способ",
          "paragraphs": [
            "Новые ссылки кабинета используют единый расчёт в USD и Any для всех четырёх способов. СБП конвертируется в RUB по зафиксированному курсу ЦБ, криптооплата — в USDT по явному правилу 1:1. Прежний режим native сохраняется для старых ссылок и API-запросов без pricingMode=universal. Подробности — в разделе о магазинах и единой цене.",
            "Карта: реквизиты шифруются в браузере публичным ключом шлюза. Kevmi передаёт зашифрованный пакет; открытые номер карты, CVV и одноразовый банковский код не принимаются и не сохраняются сервером Kevmi. При запросе банка форма кода появляется только до указанного шлюзом срока.",
            "Alipay: покупатель указывает имя, затем получает QR-код. СБП: открывает ссылку банка; если шлюз прислал QR, его также можно использовать. Срок действия показывается, если он указан шлюзом.",
            "Криптовалюта: выберите монету, затем доступную сеть из актуального каталога. После создания операции отображаются точная десятичная сумма, адрес и два режима QR — адрес либо адрес с суммой. Сеть в кошельке должна совпадать с выбранной сетью. Цена счёта в USDT не фиксирует курс другой монеты: используйте сумму, полученную от шлюза. После истечения реквизиты скрываются, а сверка продолжается для того же платежа.",
            "Для нового реального платежа картой или Alipay текущий шлюз поддерживает только feeCustomerPercent=0 и vatCustomerPercent=100: комиссию полностью покрывает магазин, НДС полностью добавляется покупателю. Остальные доли можно сохранить в счёте и рассчитать, но такой платёж не запускается и получает unsupported_allocation. Сервер не меняет сохранённые условия автоматически. Для СБП и USDT-криптооплаты доступны все доли комиссии; НДС у них отсутствует."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": []
        },
        {
          "id": "states",
          "title": "Состояния страницы",
          "paragraphs": [],
          "bullets": [],
          "steps": [],
          "table": {
            "headers": [
              "Состояние",
              "Значение",
              "Следующий шаг"
            ],
            "rows": [
              [
                "Активна",
                "Ссылка доступна для просмотра",
                "Проверьте итог и готовность выбранного способа"
              ],
              [
                "На паузе / истекла / отменена",
                "Новый платёж по ссылке не запускается",
                "Обратитесь к магазину; исходная операция проверяется отдельно"
              ],
              [
                "Не найдена",
                "Адрес недействителен или недоступен",
                "Проверьте полный адрес"
              ],
              [
                "Платёж недоступен",
                "Нельзя начать новую операцию: конфигурация, метод, лимит, распределение или проверка магазина",
                "Следуйте сообщению; не меняйте условия существующего счёта"
              ],
              [
                "Ожидание / требуется действие",
                "Исходная операция создана или запрашивает подтверждение",
                "Завершите текущий шаг либо проверьте статус"
              ],
              [
                "Результат уточняется",
                "Подтверждённого результата пока нет",
                "Проверьте исходную операцию; не создавайте повторное списание"
              ]
            ]
          },
          "code": null,
          "note": "Ошибка сети или отсутствие ответа не доказывают, что списания не было. Статус уже отправленной операции остаётся доступен, даже если ссылка больше не принимает новые платежи.",
          "links": []
        },
        {
          "id": "confirmation",
          "title": "Что подтверждает оплату",
          "paragraphs": [
            "Оплату подтверждает серверная сверка конкретной операции со шлюзом. Для succeeded требуется fulfillment_ready=true, verification=provider_confirmed, отсутствие спора и точное совпадение оплаченной суммы с согласованным итогом. Для криптовалюты дополнительно проверяются подтверждённые данные расчёта.",
            "Редирект, сообщение виджета, принятый банковский код и браузерное наблюдение не подтверждают деньги. После тайм-аута запрашивайте статус прежней операции; новая попытка автоматически не создаётся.",
            "Новый платёж и подготовка карточного запроса требуют одобренной последней заявки магазина на проверку сайта. Одобрение само по себе не подключает платёжный шлюз. Если проверка магазина изменилась после отправки платежа, уже созданная операция остаётся доступна для статуса, сверки и запрошенного банковского кода."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": []
        },
        {
          "id": "help",
          "title": "Если нужна помощь",
          "paragraphs": [
            "Сообщите продавцу номер или адрес счёта, время попытки и текст ошибки. Не отправляйте CVV, пароль банка, код подтверждения или seed-фразу в чат поддержки. Встроенный помощник объясняет опубликованные условия, но не может самостоятельно подтвердить денежное зачисление."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": [
            {
              "label": "Помощь по оплате",
              "href": "/?support=open"
            },
            {
              "label": "Расчёт НДС",
              "href": "/docs/vat"
            }
          ]
        }
      ],
      "body": "Страница оплаты помогает покупателю понять, за что он платит, каким способом и какую сумму увидит перед подтверждением. Она отделена от кабинета магазина.\n\nПроверьте детали заказа\n\nСверьте название магазина, покупку, базовую цену и валюту. Если данные отличаются от договорённости с продавцом, не продолжайте: попросите корректный счёт.\n\nДля публичной ссылки достаточно её адреса. Авторизация в магазине продавца не требуется. Демонстрационная страница явно помечается и не собирает реквизиты для реального списания.\n\nВыберите способ\n\nНовые ссылки кабинета используют единый расчёт в USD и Any для всех четырёх способов. СБП конвертируется в RUB по зафиксированному курсу ЦБ, криптооплата — в USDT по явному правилу 1:1. Прежний режим native сохраняется для старых ссылок и API-запросов без pricingMode=universal. Подробности — в разделе о магазинах и единой цене.\n\nКарта: реквизиты шифруются в браузере публичным ключом шлюза. Kevmi передаёт зашифрованный пакет; открытые номер карты, CVV и одноразовый банковский код не принимаются и не сохраняются сервером Kevmi. При запросе банка форма кода появляется только до указанного шлюзом срока.\n\nAlipay: покупатель указывает имя, затем получает QR-код. СБП: открывает ссылку банка; если шлюз прислал QR, его также можно использовать. Срок действия показывается, если он указан шлюзом.\n\nКриптовалюта: выберите монету, затем доступную сеть из актуального каталога. После создания операции отображаются точная десятичная сумма, адрес и два режима QR — адрес либо адрес с суммой. Сеть в кошельке должна совпадать с выбранной сетью. Цена счёта в USDT не фиксирует курс другой монеты: используйте сумму, полученную от шлюза. После истечения реквизиты скрываются, а сверка продолжается для того же платежа.\n\nДля нового реального платежа картой или Alipay текущий шлюз поддерживает только feeCustomerPercent=0 и vatCustomerPercent=100: комиссию полностью покрывает магазин, НДС полностью добавляется покупателю. Остальные доли можно сохранить в счёте и рассчитать, но такой платёж не запускается и получает unsupported_allocation. Сервер не меняет сохранённые условия автоматически. Для СБП и USDT-криптооплаты доступны все доли комиссии; НДС у них отсутствует.\n\nСостояния страницы\n\nСостояние · Значение · Следующий шаг\nАктивна · Ссылка доступна для просмотра · Проверьте итог и готовность выбранного способа\nНа паузе / истекла / отменена · Новый платёж по ссылке не запускается · Обратитесь к магазину; исходная операция проверяется отдельно\nНе найдена · Адрес недействителен или недоступен · Проверьте полный адрес\nПлатёж недоступен · Нельзя начать новую операцию: конфигурация, метод, лимит, распределение или проверка магазина · Следуйте сообщению; не меняйте условия существующего счёта\nОжидание / требуется действие · Исходная операция создана или запрашивает подтверждение · Завершите текущий шаг либо проверьте статус\nРезультат уточняется · Подтверждённого результата пока нет · Проверьте исходную операцию; не создавайте повторное списание\n\nОшибка сети или отсутствие ответа не доказывают, что списания не было. Статус уже отправленной операции остаётся доступен, даже если ссылка больше не принимает новые платежи.\n\nЧто подтверждает оплату\n\nОплату подтверждает серверная сверка конкретной операции со шлюзом. Для succeeded требуется fulfillment_ready=true, verification=provider_confirmed, отсутствие спора и точное совпадение оплаченной суммы с согласованным итогом. Для криптовалюты дополнительно проверяются подтверждённые данные расчёта.\n\nРедирект, сообщение виджета, принятый банковский код и браузерное наблюдение не подтверждают деньги. После тайм-аута запрашивайте статус прежней операции; новая попытка автоматически не создаётся.\n\nНовый платёж и подготовка карточного запроса требуют одобренной последней заявки магазина на проверку сайта. Одобрение само по себе не подключает платёжный шлюз. Если проверка магазина изменилась после отправки платежа, уже созданная операция остаётся доступна для статуса, сверки и запрошенного банковского кода.\n\nЕсли нужна помощь\n\nСообщите продавцу номер или адрес счёта, время попытки и текст ошибки. Не отправляйте CVV, пароль банка, код подтверждения или seed-фразу в чат поддержки. Встроенный помощник объясняет опубликованные условия, но не может самостоятельно подтвердить денежное зачисление.\n\nПомощь по оплате: https://kevmi.one/?support=open\n\nРасчёт НДС: https://kevmi.one/docs/vat",
      "readMinutes": 4
    },
    {
      "id": "payments",
      "title": "Платежи и их статусы",
      "summary": "Счёт описывает заказ, а платёж — конкретную попытку его оплатить. Статус попытки и доступность ссылки следует рассматривать отдельно.",
      "group": "payments",
      "url": "/docs/payments",
      "tags": [
        "платеж",
        "оплата",
        "статус",
        "успешно",
        "ошибка",
        "pending",
        "succeeded",
        "failed"
      ],
      "sections": [
        {
          "id": "record",
          "title": "Какие данные нужны платежу",
          "paragraphs": [
            "Счёт хранит условия заказа, а payment — связанную с ним операцию шлюза. Первый запуск резервирует одну постоянную привязку и серверный Idempotency-Key. После начала отправки другой способ оплаты не создаёт второе списание для того же счёта.",
            "GET /api/payment-links и GET /api/v1/payments возвращают владельцу link.payment. Статус ссылки active/paused/cancelled/expired не заменяет статус платежа. Покупатель читает только свою операцию через случайный токен страницы оплаты."
          ],
          "bullets": [],
          "steps": [],
          "table": {
            "headers": [
              "Данные",
              "Назначение"
            ],
            "rows": [
              [
                "Идентификатор и заказ",
                "Связать попытку с конкретной покупкой"
              ],
              [
                "Базовая сумма и валюта",
                "Основа расчёта"
              ],
              [
                "Способ оплаты",
                "Тариф и наличие налога"
              ],
              [
                "Плательщик НДС",
                "Кто покрывает налог"
              ],
              [
                "Комиссия, налог и итоги",
                "Зафиксированный расчёт"
              ],
              [
                "Статус и время",
                "Проверка доступности операции"
              ],
              [
                "Ссылка на событие шлюза",
                "Источник подтверждения в рабочем режиме"
              ]
            ]
          },
          "code": null,
          "note": "",
          "links": []
        },
        {
          "id": "statuses",
          "title": "Состояния реальной операции",
          "paragraphs": [
            "Демо использует отдельные тестовые записи. Переключение состояния в демо не подтверждает реальный платёж и не меняет денежные записи."
          ],
          "bullets": [],
          "steps": [],
          "table": {
            "headers": [
              "Статус",
              "Значение"
            ],
            "rows": [
              [
                "pending",
                "Операция создана; ожидается действие или результат"
              ],
              [
                "requires_action",
                "Нужны банковский код или подтверждение покупателя"
              ],
              [
                "processing",
                "Провайдер ещё подтверждает результат"
              ],
              [
                "succeeded",
                "Сервер подтвердил точную оплату"
              ],
              [
                "failed",
                "Попытка завершилась без подтверждённой оплаты"
              ],
              [
                "expired",
                "Срок реквизитов истёк; сохраняется возможность сверки"
              ],
              [
                "review_required",
                "Нужна дополнительная проверка; повторно не оплачивайте"
              ],
              [
                "partially_paid",
                "Получена часть суммы; не создавайте другой платёж"
              ],
              [
                "partially_refunded",
                "Часть оплаты возвращена"
              ],
              [
                "refunded",
                "Возврат подтверждён"
              ],
              [
                "disputed",
                "Операция оспорена"
              ]
            ]
          },
          "code": null,
          "note": "",
          "links": []
        },
        {
          "id": "authority",
          "title": "Источник истины в рабочем режиме",
          "paragraphs": [
            "Подписанный вебхук запускает серверное чтение конкретной операции шлюза. Проверяются идентификаторы, заказ, валюта, способ, базовая и итоговая суммы, live-режим и монотонная версия. Название входящего события само по себе не является доказательством денег.",
            "Статус, квитанция и исходящее событие магазина сохраняются атомарно. Старый ответ не откатывает более новую версию, повтор не создаёт вторую выдачу, а pending не заменяет подтверждённую оплату. Доступный к выводу баланс и выплата из этих данных автоматически не создаются."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": []
        },
        {
          "id": "uncertain",
          "title": "Если результат неизвестен",
          "paragraphs": [],
          "bullets": [],
          "steps": [
            "Сохраните исходный счёт и идентификатор операции.",
            "Прочитайте GET /api/checkout/{token}/status; он не создаёт списание.",
            "При необходимости используйте POST /api/checkout/{token}/reconcile для сверки той же операции.",
            "Не меняйте метод, сумму или ключ идемпотентности после неизвестного результата."
          ],
          "table": null,
          "code": null,
          "note": "Тайм-аут не равен отказу. Потерянный ответ восстанавливается поиском по прежнему серверному ключу; новая попытка автоматически не создаётся.",
          "links": []
        },
        {
          "id": "stores-usd",
          "title": "Несколько магазинов и единая цена в USD",
          "paragraphs": [
            "В меню магазина выберите «Все магазины» для общего обзора и операций или конкретный магазин для его данных. Каждый магазин имеет собственный storeId, название, правило НДС, счета, API-ключи, вебхуки, журнал событий и заявку на проверку сайта. Уведомления и обращения принадлежат аккаунту. Можно создать до 100 магазинов. Ранее созданные данные сохранены в первом магазине.",
            "Новые ссылки из кабинета используют pricingMode=\"universal\": базовая цена хранится в USD. Any включает card, alipay, sbp и crypto; при необходимости магазин выбирает подмножество. Карты и Alipay оплачиваются в USD, СБП — в RUB по официальному курсу USD/RUB Банка России, криптовалюта — в USDT по явно установленному соотношению 1 USD = 1 USDT. Это правило расчёта счёта, а не рыночная котировка USDT. Курс другой монеты и точные реквизиты предоставляет шлюз перед переводом.",
            "Курс ЦБ и обе суммы сохраняются при создании. Ссылки с рублёвой конвертацией действуют не более 24 часов. Если курс получить не удалось, создание возвращает FX_UNAVAILABLE; выдуманный или старый запасной курс не применяется. amountMinor и quotes в ответе владельцу выражены в базовой валюте USD; quotes[method].settlement содержит сумму и валюту конкретного способа. Публичный checkout возвращает выбранную валюту оплаты в currency, исходную цену в baseAmountMinor/baseCurrency и курс в fx. Возврат к другой валюте после отправки платежа запрещён: у счёта одна операция шлюза.",
            "Для серверной интеграции создайте API-ключ внутри выбранного магазина и передавайте Authorization: Bearer <key>. Привязка ключа к магазину неизменна: заголовок X-Kevmi-Store не позволяет получить данные другого магазина. Для браузерной сессии передавайте X-Kevmi-Store: <storeId>; без заголовка используется первый магазин. Значение all разрешено только для GET /api/account/dashboard и GET /api/payment-links. Изменения требуют выбранного магазина, Origin и X-CSRF-Token. ID аккаунта и ID магазина — разные идентификаторы.",
            "Без pricingMode=\"universal\" API сохраняет прежний режим native и исходные ограничения валют для совместимости. Старые ссылки не пересчитываются. Подтверждённые поступления в обзоре — это проверенные платежи за вычетом расходов по сохранённому расчёту, а не доступный остаток для вывода. Валюты старых счетов учитываются раздельно; выплаты согласуются с поддержкой. Подтверждение исполнения заказа проверяйте через payment.fulfillmentReady=true и payment.status=\"succeeded\" в серверном API, журнале событий или подписанном вебхуке."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": []
        }
      ],
      "body": "Счёт описывает заказ, а платёж — конкретную попытку его оплатить. Статус попытки и доступность ссылки следует рассматривать отдельно.\n\nКакие данные нужны платежу\n\nСчёт хранит условия заказа, а payment — связанную с ним операцию шлюза. Первый запуск резервирует одну постоянную привязку и серверный Idempotency-Key. После начала отправки другой способ оплаты не создаёт второе списание для того же счёта.\n\nGET /api/payment-links и GET /api/v1/payments возвращают владельцу link.payment. Статус ссылки active/paused/cancelled/expired не заменяет статус платежа. Покупатель читает только свою операцию через случайный токен страницы оплаты.\n\nДанные · Назначение\nИдентификатор и заказ · Связать попытку с конкретной покупкой\nБазовая сумма и валюта · Основа расчёта\nСпособ оплаты · Тариф и наличие налога\nПлательщик НДС · Кто покрывает налог\nКомиссия, налог и итоги · Зафиксированный расчёт\nСтатус и время · Проверка доступности операции\nСсылка на событие шлюза · Источник подтверждения в рабочем режиме\n\nСостояния реальной операции\n\nДемо использует отдельные тестовые записи. Переключение состояния в демо не подтверждает реальный платёж и не меняет денежные записи.\n\nСтатус · Значение\npending · Операция создана; ожидается действие или результат\nrequires_action · Нужны банковский код или подтверждение покупателя\nprocessing · Провайдер ещё подтверждает результат\nsucceeded · Сервер подтвердил точную оплату\nfailed · Попытка завершилась без подтверждённой оплаты\nexpired · Срок реквизитов истёк; сохраняется возможность сверки\nreview_required · Нужна дополнительная проверка; повторно не оплачивайте\npartially_paid · Получена часть суммы; не создавайте другой платёж\npartially_refunded · Часть оплаты возвращена\nrefunded · Возврат подтверждён\ndisputed · Операция оспорена\n\nИсточник истины в рабочем режиме\n\nПодписанный вебхук запускает серверное чтение конкретной операции шлюза. Проверяются идентификаторы, заказ, валюта, способ, базовая и итоговая суммы, live-режим и монотонная версия. Название входящего события само по себе не является доказательством денег.\n\nСтатус, квитанция и исходящее событие магазина сохраняются атомарно. Старый ответ не откатывает более новую версию, повтор не создаёт вторую выдачу, а pending не заменяет подтверждённую оплату. Доступный к выводу баланс и выплата из этих данных автоматически не создаются.\n\nЕсли результат неизвестен\n\n1. Сохраните исходный счёт и идентификатор операции.\n\n2. Прочитайте GET /api/checkout/{token}/status; он не создаёт списание.\n\n3. При необходимости используйте POST /api/checkout/{token}/reconcile для сверки той же операции.\n\n4. Не меняйте метод, сумму или ключ идемпотентности после неизвестного результата.\n\nТайм-аут не равен отказу. Потерянный ответ восстанавливается поиском по прежнему серверному ключу; новая попытка автоматически не создаётся.\n\nНесколько магазинов и единая цена в USD\n\nВ меню магазина выберите «Все магазины» для общего обзора и операций или конкретный магазин для его данных. Каждый магазин имеет собственный storeId, название, правило НДС, счета, API-ключи, вебхуки, журнал событий и заявку на проверку сайта. Уведомления и обращения принадлежат аккаунту. Можно создать до 100 магазинов. Ранее созданные данные сохранены в первом магазине.\n\nНовые ссылки из кабинета используют pricingMode=\"universal\": базовая цена хранится в USD. Any включает card, alipay, sbp и crypto; при необходимости магазин выбирает подмножество. Карты и Alipay оплачиваются в USD, СБП — в RUB по официальному курсу USD/RUB Банка России, криптовалюта — в USDT по явно установленному соотношению 1 USD = 1 USDT. Это правило расчёта счёта, а не рыночная котировка USDT. Курс другой монеты и точные реквизиты предоставляет шлюз перед переводом.\n\nКурс ЦБ и обе суммы сохраняются при создании. Ссылки с рублёвой конвертацией действуют не более 24 часов. Если курс получить не удалось, создание возвращает FX_UNAVAILABLE; выдуманный или старый запасной курс не применяется. amountMinor и quotes в ответе владельцу выражены в базовой валюте USD; quotes[method].settlement содержит сумму и валюту конкретного способа. Публичный checkout возвращает выбранную валюту оплаты в currency, исходную цену в baseAmountMinor/baseCurrency и курс в fx. Возврат к другой валюте после отправки платежа запрещён: у счёта одна операция шлюза.\n\nДля серверной интеграции создайте API-ключ внутри выбранного магазина и передавайте Authorization: Bearer <key>. Привязка ключа к магазину неизменна: заголовок X-Kevmi-Store не позволяет получить данные другого магазина. Для браузерной сессии передавайте X-Kevmi-Store: <storeId>; без заголовка используется первый магазин. Значение all разрешено только для GET /api/account/dashboard и GET /api/payment-links. Изменения требуют выбранного магазина, Origin и X-CSRF-Token. ID аккаунта и ID магазина — разные идентификаторы.\n\nБез pricingMode=\"universal\" API сохраняет прежний режим native и исходные ограничения валют для совместимости. Старые ссылки не пересчитываются. Подтверждённые поступления в обзоре — это проверенные платежи за вычетом расходов по сохранённому расчёту, а не доступный остаток для вывода. Валюты старых счетов учитываются раздельно; выплаты согласуются с поддержкой. Подтверждение исполнения заказа проверяйте через payment.fulfillmentReady=true и payment.status=\"succeeded\" в серверном API, журнале событий или подписанном вебхуке.\n\n",
      "readMinutes": 3
    },
    {
      "id": "payouts",
      "title": "Выплаты в USDT TRC20",
      "summary": "В условиях выплат указан USDT в сети TRC20. Комиссия зависит от источника средств. Здесь описаны тарифы, требования к котировке и ограничения: создание выплаты через кабинет и API недоступно.",
      "group": "payments",
      "url": "/docs/payouts",
      "tags": [
        "вывод",
        "выплата",
        "usdt",
        "trc20",
        "кошелек",
        "курс"
      ],
      "sections": [
        {
          "id": "tariffs",
          "title": "Комиссии по источникам",
          "paragraphs": [
            "Комиссия за приём уже учтена при зачислении. Выплата — отдельная операция со своим тарифом. Не нужно повторно применять входящую комиссию ко всему доступному балансу."
          ],
          "bullets": [],
          "steps": [],
          "table": {
            "headers": [
              "Источник",
              "Комиссия"
            ],
            "rows": [
              [
                "Карты и Alipay",
                "4%"
              ],
              [
                "СБП",
                "5% + 400 ₽"
              ],
              [
                "Криптовалюта",
                "0% + $3"
              ]
            ]
          },
          "code": null,
          "note": "",
          "links": []
        },
        {
          "id": "quote",
          "title": "Котировка и валюта",
          "paragraphs": [
            "Суммы в USD и RUB учитываются раздельно. Их нельзя сложить без курса. USD — денежная валюта, USDT — цифровой актив; соотношение 1:1 не предполагается автоматически.",
            "Рабочая котировка должна указывать исходную валюту и сумму, комиссию, выходную сумму USDT и срок действия. Изменение суммы или адреса требует повторной проверки условий."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": []
        },
        {
          "id": "address",
          "title": "Адрес получателя",
          "paragraphs": [
            "Используйте адрес кошелька для сети TRC20, принадлежащий получателю. Проверка формата адреса помогает обнаружить часть опечаток, но не подтверждает владельца и не гарантирует доставку.",
            "Перед рабочей отправкой сверьте сеть и полный адрес. Сервер должен повторно валидировать сумму, доступный остаток и котировку: клиентская форма не является защитой от неверной выплаты."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": []
        },
        {
          "id": "flow",
          "title": "Порядок оформления",
          "paragraphs": [
            "В демо котировка задаётся вручную и используется только для расчёта. Тестовая заявка резервирует демосредства, но не выполняет перевод."
          ],
          "bullets": [],
          "steps": [
            "Выбрать источник средств и сумму списания.",
            "Указать адрес TRC20.",
            "Получить актуальную котировку и посмотреть комиссию.",
            "Подтвердить точные условия заявки.",
            "Дождаться серверного результата шлюза."
          ],
          "table": null,
          "code": null,
          "note": "",
          "links": []
        },
        {
          "id": "availability",
          "title": "Доступность выплаты",
          "paragraphs": [
            "Оформление выплат через кабинет и /api/payouts недоступно. Публикация тарифа и расчёт комиссии не создают заявку на перевод и не подтверждают его выполнение.",
            "Подтверждённые платежи, квитанции и события сохраняются в истории. Эти записи не являются доступным к выводу балансом. Исполнение выплаты требует отдельного учёта средств, актуальной котировки, проверки реквизитов и подтверждения перевода."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": [
            {
              "label": "Подключение шлюза",
              "href": "/docs/gateway"
            }
          ]
        }
      ],
      "body": "В условиях выплат указан USDT в сети TRC20. Комиссия зависит от источника средств. Здесь описаны тарифы, требования к котировке и ограничения: создание выплаты через кабинет и API недоступно.\n\nКомиссии по источникам\n\nКомиссия за приём уже учтена при зачислении. Выплата — отдельная операция со своим тарифом. Не нужно повторно применять входящую комиссию ко всему доступному балансу.\n\nИсточник · Комиссия\nКарты и Alipay · 4%\nСБП · 5% + 400 ₽\nКриптовалюта · 0% + $3\n\nКотировка и валюта\n\nСуммы в USD и RUB учитываются раздельно. Их нельзя сложить без курса. USD — денежная валюта, USDT — цифровой актив; соотношение 1:1 не предполагается автоматически.\n\nРабочая котировка должна указывать исходную валюту и сумму, комиссию, выходную сумму USDT и срок действия. Изменение суммы или адреса требует повторной проверки условий.\n\nАдрес получателя\n\nИспользуйте адрес кошелька для сети TRC20, принадлежащий получателю. Проверка формата адреса помогает обнаружить часть опечаток, но не подтверждает владельца и не гарантирует доставку.\n\nПеред рабочей отправкой сверьте сеть и полный адрес. Сервер должен повторно валидировать сумму, доступный остаток и котировку: клиентская форма не является защитой от неверной выплаты.\n\nПорядок оформления\n\nВ демо котировка задаётся вручную и используется только для расчёта. Тестовая заявка резервирует демосредства, но не выполняет перевод.\n\n1. Выбрать источник средств и сумму списания.\n\n2. Указать адрес TRC20.\n\n3. Получить актуальную котировку и посмотреть комиссию.\n\n4. Подтвердить точные условия заявки.\n\n5. Дождаться серверного результата шлюза.\n\nДоступность выплаты\n\nОформление выплат через кабинет и /api/payouts недоступно. Публикация тарифа и расчёт комиссии не создают заявку на перевод и не подтверждают его выполнение.\n\nПодтверждённые платежи, квитанции и события сохраняются в истории. Эти записи не являются доступным к выводу балансом. Исполнение выплаты требует отдельного учёта средств, актуальной котировки, проверки реквизитов и подтверждения перевода.\n\nПодключение шлюза: https://kevmi.one/docs/gateway",
      "readMinutes": 2
    },
    {
      "id": "telegram-login",
      "title": "Вход и регистрация через Telegram",
      "summary": "Telegram используется для подтверждения личности. На первом входе Kevmi создаёт аккаунт, на следующих — открывает существующий. Отдельный пароль сервиса не нужен.",
      "group": "account",
      "url": "/docs/telegram-login",
      "tags": [
        "телеграм",
        "telegram",
        "вход",
        "регистрация",
        "авторизация",
        "аккаунт",
        "бот"
      ],
      "sections": [
        {
          "id": "steps",
          "title": "Как войти",
          "paragraphs": [
            "Запрос действует 5 минут. Если время истекло, создайте новую ссылку. Старую нельзя повторно использовать для получения сессии."
          ],
          "bullets": [],
          "steps": [
            "Откройте страницу входа или регистрации и нажмите «Продолжить с Telegram».",
            "Перейдите в бота по ссылке, выданной этим браузером.",
            "Сверьте шестизначный код на сайте и в сообщении бота.",
            "Подтвердите запрос в личном чате.",
            "Вернитесь в исходный браузер: после проверки откроется кабинет."
          ],
          "table": null,
          "code": null,
          "note": "",
          "links": []
        },
        {
          "id": "browser",
          "title": "Почему нужен тот же браузер",
          "paragraphs": [
            "Ссылка Telegram связана с защищённой cookie в браузере, начавшем вход. Самого challengeId или пересланной ссылки недостаточно, чтобы получить сессию на другом устройстве.",
            "Можно подтвердить запрос в приложении Telegram на другом устройстве, но кабинет откроется там, где вы начали вход. Не подтверждайте запрос, которого не создавали сами."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": []
        },
        {
          "id": "session",
          "title": "Сессия и выход",
          "paragraphs": [
            "Сессия действует до 24 часов. Её случайный токен хранится в Secure HttpOnly cookie и недоступен JavaScript. При выходе на сайте завершается текущая сессия.",
            "Команда /logout в боте завершает все сессии аккаунта и отменяет ещё не использованные подтверждения. Для нового входа потребуется новый запрос."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": []
        },
        {
          "id": "trouble",
          "title": "Если вход не завершается",
          "paragraphs": [],
          "bullets": [],
          "steps": [],
          "table": {
            "headers": [
              "Ситуация",
              "Что сделать"
            ],
            "rows": [
              [
                "Ссылка истекла",
                "Создайте новый запрос на сайте"
              ],
              [
                "Открыли другой браузер",
                "Вернитесь к вкладке, где начали вход"
              ],
              [
                "Код не совпадает",
                "Не подтверждайте запрос; начните заново"
              ],
              [
                "Вход недоступен",
                "Повторите позже или обратитесь в поддержку"
              ],
              [
                "Временная ошибка сети",
                "Дождитесь повторной проверки или повторите вход"
              ]
            ]
          },
          "code": null,
          "note": "",
          "links": []
        },
        {
          "id": "privacy",
          "title": "Какие данные используются",
          "paragraphs": [
            "Сервер получает подтверждённый Telegram ID и доступные поля профиля для создания аккаунта. Публичный username сам по себе не считается доказательством личности.",
            "Бот не запрашивает Telegram-пароль, банковские коды, CVV, seed-фразу или приватные ключи."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": [
            {
              "label": "Техническая схема входа",
              "href": "/docs/auth-api"
            },
            {
              "label": "Открыть вход",
              "href": "/login"
            }
          ]
        }
      ],
      "body": "Telegram используется для подтверждения личности. На первом входе Kevmi создаёт аккаунт, на следующих — открывает существующий. Отдельный пароль сервиса не нужен.\n\nКак войти\n\nЗапрос действует 5 минут. Если время истекло, создайте новую ссылку. Старую нельзя повторно использовать для получения сессии.\n\n1. Откройте страницу входа или регистрации и нажмите «Продолжить с Telegram».\n\n2. Перейдите в бота по ссылке, выданной этим браузером.\n\n3. Сверьте шестизначный код на сайте и в сообщении бота.\n\n4. Подтвердите запрос в личном чате.\n\n5. Вернитесь в исходный браузер: после проверки откроется кабинет.\n\nПочему нужен тот же браузер\n\nСсылка Telegram связана с защищённой cookie в браузере, начавшем вход. Самого challengeId или пересланной ссылки недостаточно, чтобы получить сессию на другом устройстве.\n\nМожно подтвердить запрос в приложении Telegram на другом устройстве, но кабинет откроется там, где вы начали вход. Не подтверждайте запрос, которого не создавали сами.\n\nСессия и выход\n\nСессия действует до 24 часов. Её случайный токен хранится в Secure HttpOnly cookie и недоступен JavaScript. При выходе на сайте завершается текущая сессия.\n\nКоманда /logout в боте завершает все сессии аккаунта и отменяет ещё не использованные подтверждения. Для нового входа потребуется новый запрос.\n\nЕсли вход не завершается\n\nСитуация · Что сделать\nСсылка истекла · Создайте новый запрос на сайте\nОткрыли другой браузер · Вернитесь к вкладке, где начали вход\nКод не совпадает · Не подтверждайте запрос; начните заново\nВход недоступен · Повторите позже или обратитесь в поддержку\nВременная ошибка сети · Дождитесь повторной проверки или повторите вход\n\nКакие данные используются\n\nСервер получает подтверждённый Telegram ID и доступные поля профиля для создания аккаунта. Публичный username сам по себе не считается доказательством личности.\n\nБот не запрашивает Telegram-пароль, банковские коды, CVV, seed-фразу или приватные ключи.\n\nТехническая схема входа: https://kevmi.one/docs/auth-api\n\nОткрыть вход: https://kevmi.one/login",
      "readMinutes": 2
    },
    {
      "id": "settings",
      "title": "Настройки магазина",
      "summary": "Настройки связывают название магазина, правило НДС и уведомления с вашим подтверждённым аккаунтом. Изменения сохраняются на сервере для текущего пользователя.",
      "group": "account",
      "url": "/docs/settings",
      "tags": [
        "настройки",
        "магазин",
        "название",
        "тема",
        "vatpayer"
      ],
      "sections": [
        {
          "id": "name",
          "title": "Название магазина",
          "paragraphs": [
            "Укажите короткое узнаваемое имя, которое покупатель ожидает увидеть рядом с заказом. Длина — от 1 до 80 символов после удаления пробелов по краям.",
            "Название в настройках не заменяет юридические реквизиты или договор с покупателем. Не добавляйте в поле секреты, платёжные данные или чужие персональные сведения."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": []
        },
        {
          "id": "vat",
          "title": "Плательщик НДС",
          "paragraphs": [
            "По умолчанию выбран покупатель. Налог применяется только к картам и Alipay. Для СБП и криптовалюты итог не меняется при переключении этого параметра.",
            "Созданные счета сохраняют прежние условия. Для каждого нового счёта можно задать независимые доли НДС и комиссии покупателя от 0 до 100%; правило магазина служит исходным значением.",
            "Сохранённое предпочтение не расширяет возможности шлюза. В текущем карточном и Alipay-канале реальный платёж требует 100% НДС покупателя и 0% комиссии покупателя; другое распределение остаётся сохранённым расчётом."
          ],
          "bullets": [],
          "steps": [],
          "table": {
            "headers": [
              "Значение",
              "Правило для нового счёта"
            ],
            "rows": [
              [
                "customer",
                "НДС прибавляется к базовой цене покупателя"
              ],
              [
                "merchant",
                "Магазин покрывает НДС из базовой цены"
              ]
            ]
          },
          "code": null,
          "note": "",
          "links": []
        },
        {
          "id": "notifications",
          "title": "Telegram-уведомления",
          "paragraphs": [
            "Выберите категории, которые хотите получать: платежи, выплаты, поддержка и безопасность. Изменение категории не подключает шлюз и не создаёт денежные события.",
            "Тестовое сообщение проверяет доставку в привязанный личный чат. Статус виден под колокольчиком в центре уведомлений и через GET /api/notifications. Постановка в очередь ещё не означает доставку; отдельно проверьте появление сообщения в Telegram."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": [
            {
              "label": "Уведомления подробно",
              "href": "/docs/notifications"
            }
          ]
        },
        {
          "id": "saving",
          "title": "Сохранение и ошибки",
          "paragraphs": [
            "Форма должна подтвердить успешное сохранение. Если сеть прервалась, введённые данные остаются в форме для повторной попытки; нельзя считать изменение сохранённым по одному нажатию кнопки.",
            "При истёкшей сессии войдите снова. Сервер не принимает изменение чужого магазина по ID из браузера: пользователь определяется сессией."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": []
        },
        {
          "id": "local",
          "title": "Тема и демо-данные",
          "paragraphs": [
            "Тема оформления сохраняется локально на устройстве. Демо-кабинет использует отдельные браузерные данные и не изменяет серверный аккаунт.",
            "Сброс демо удаляет только тестовые записи в этом браузере. Экспорт демо не является банковской выпиской или документом об оплате."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": []
        },
        {
          "id": "stores-usd",
          "title": "Несколько магазинов и единая цена в USD",
          "paragraphs": [
            "В меню магазина выберите «Все магазины» для общего обзора и операций или конкретный магазин для его данных. Каждый магазин имеет собственный storeId, название, правило НДС, счета, API-ключи, вебхуки, журнал событий и заявку на проверку сайта. Уведомления и обращения принадлежат аккаунту. Можно создать до 100 магазинов. Ранее созданные данные сохранены в первом магазине.",
            "Новые ссылки из кабинета используют pricingMode=\"universal\": базовая цена хранится в USD. Any включает card, alipay, sbp и crypto; при необходимости магазин выбирает подмножество. Карты и Alipay оплачиваются в USD, СБП — в RUB по официальному курсу USD/RUB Банка России, криптовалюта — в USDT по явно установленному соотношению 1 USD = 1 USDT. Это правило расчёта счёта, а не рыночная котировка USDT. Курс другой монеты и точные реквизиты предоставляет шлюз перед переводом.",
            "Курс ЦБ и обе суммы сохраняются при создании. Ссылки с рублёвой конвертацией действуют не более 24 часов. Если курс получить не удалось, создание возвращает FX_UNAVAILABLE; выдуманный или старый запасной курс не применяется. amountMinor и quotes в ответе владельцу выражены в базовой валюте USD; quotes[method].settlement содержит сумму и валюту конкретного способа. Публичный checkout возвращает выбранную валюту оплаты в currency, исходную цену в baseAmountMinor/baseCurrency и курс в fx. Возврат к другой валюте после отправки платежа запрещён: у счёта одна операция шлюза.",
            "Для серверной интеграции создайте API-ключ внутри выбранного магазина и передавайте Authorization: Bearer <key>. Привязка ключа к магазину неизменна: заголовок X-Kevmi-Store не позволяет получить данные другого магазина. Для браузерной сессии передавайте X-Kevmi-Store: <storeId>; без заголовка используется первый магазин. Значение all разрешено только для GET /api/account/dashboard и GET /api/payment-links. Изменения требуют выбранного магазина, Origin и X-CSRF-Token. ID аккаунта и ID магазина — разные идентификаторы.",
            "Без pricingMode=\"universal\" API сохраняет прежний режим native и исходные ограничения валют для совместимости. Старые ссылки не пересчитываются. Подтверждённые поступления в обзоре — это проверенные платежи за вычетом расходов по сохранённому расчёту, а не доступный остаток для вывода. Валюты старых счетов учитываются раздельно; выплаты согласуются с поддержкой. Подтверждение исполнения заказа проверяйте через payment.fulfillmentReady=true и payment.status=\"succeeded\" в серверном API, журнале событий или подписанном вебхуке."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": []
        }
      ],
      "body": "Настройки связывают название магазина, правило НДС и уведомления с вашим подтверждённым аккаунтом. Изменения сохраняются на сервере для текущего пользователя.\n\nНазвание магазина\n\nУкажите короткое узнаваемое имя, которое покупатель ожидает увидеть рядом с заказом. Длина — от 1 до 80 символов после удаления пробелов по краям.\n\nНазвание в настройках не заменяет юридические реквизиты или договор с покупателем. Не добавляйте в поле секреты, платёжные данные или чужие персональные сведения.\n\nПлательщик НДС\n\nПо умолчанию выбран покупатель. Налог применяется только к картам и Alipay. Для СБП и криптовалюты итог не меняется при переключении этого параметра.\n\nСозданные счета сохраняют прежние условия. Для каждого нового счёта можно задать независимые доли НДС и комиссии покупателя от 0 до 100%; правило магазина служит исходным значением.\n\nСохранённое предпочтение не расширяет возможности шлюза. В текущем карточном и Alipay-канале реальный платёж требует 100% НДС покупателя и 0% комиссии покупателя; другое распределение остаётся сохранённым расчётом.\n\nЗначение · Правило для нового счёта\ncustomer · НДС прибавляется к базовой цене покупателя\nmerchant · Магазин покрывает НДС из базовой цены\n\nTelegram-уведомления\n\nВыберите категории, которые хотите получать: платежи, выплаты, поддержка и безопасность. Изменение категории не подключает шлюз и не создаёт денежные события.\n\nТестовое сообщение проверяет доставку в привязанный личный чат. Статус виден под колокольчиком в центре уведомлений и через GET /api/notifications. Постановка в очередь ещё не означает доставку; отдельно проверьте появление сообщения в Telegram.\n\nУведомления подробно: https://kevmi.one/docs/notifications\n\nСохранение и ошибки\n\nФорма должна подтвердить успешное сохранение. Если сеть прервалась, введённые данные остаются в форме для повторной попытки; нельзя считать изменение сохранённым по одному нажатию кнопки.\n\nПри истёкшей сессии войдите снова. Сервер не принимает изменение чужого магазина по ID из браузера: пользователь определяется сессией.\n\nТема и демо-данные\n\nТема оформления сохраняется локально на устройстве. Демо-кабинет использует отдельные браузерные данные и не изменяет серверный аккаунт.\n\nСброс демо удаляет только тестовые записи в этом браузере. Экспорт демо не является банковской выпиской или документом об оплате.\n\nНесколько магазинов и единая цена в USD\n\nВ меню магазина выберите «Все магазины» для общего обзора и операций или конкретный магазин для его данных. Каждый магазин имеет собственный storeId, название, правило НДС, счета, API-ключи, вебхуки, журнал событий и заявку на проверку сайта. Уведомления и обращения принадлежат аккаунту. Можно создать до 100 магазинов. Ранее созданные данные сохранены в первом магазине.\n\nНовые ссылки из кабинета используют pricingMode=\"universal\": базовая цена хранится в USD. Any включает card, alipay, sbp и crypto; при необходимости магазин выбирает подмножество. Карты и Alipay оплачиваются в USD, СБП — в RUB по официальному курсу USD/RUB Банка России, криптовалюта — в USDT по явно установленному соотношению 1 USD = 1 USDT. Это правило расчёта счёта, а не рыночная котировка USDT. Курс другой монеты и точные реквизиты предоставляет шлюз перед переводом.\n\nКурс ЦБ и обе суммы сохраняются при создании. Ссылки с рублёвой конвертацией действуют не более 24 часов. Если курс получить не удалось, создание возвращает FX_UNAVAILABLE; выдуманный или старый запасной курс не применяется. amountMinor и quotes в ответе владельцу выражены в базовой валюте USD; quotes[method].settlement содержит сумму и валюту конкретного способа. Публичный checkout возвращает выбранную валюту оплаты в currency, исходную цену в baseAmountMinor/baseCurrency и курс в fx. Возврат к другой валюте после отправки платежа запрещён: у счёта одна операция шлюза.\n\nДля серверной интеграции создайте API-ключ внутри выбранного магазина и передавайте Authorization: Bearer <key>. Привязка ключа к магазину неизменна: заголовок X-Kevmi-Store не позволяет получить данные другого магазина. Для браузерной сессии передавайте X-Kevmi-Store: <storeId>; без заголовка используется первый магазин. Значение all разрешено только для GET /api/account/dashboard и GET /api/payment-links. Изменения требуют выбранного магазина, Origin и X-CSRF-Token. ID аккаунта и ID магазина — разные идентификаторы.\n\nБез pricingMode=\"universal\" API сохраняет прежний режим native и исходные ограничения валют для совместимости. Старые ссылки не пересчитываются. Подтверждённые поступления в обзоре — это проверенные платежи за вычетом расходов по сохранённому расчёту, а не доступный остаток для вывода. Валюты старых счетов учитываются раздельно; выплаты согласуются с поддержкой. Подтверждение исполнения заказа проверяйте через payment.fulfillmentReady=true и payment.status=\"succeeded\" в серверном API, журнале событий или подписанном вебхуке.\n\n",
      "readMinutes": 3
    },
    {
      "id": "notifications",
      "title": "Уведомления на сайте и в Telegram",
      "summary": "События вашего аккаунта собраны под колокольчиком в верхней панели. Здесь можно прочитать уведомления, проверить доставку в Telegram и перейти к нужному разделу.",
      "group": "account",
      "url": "/docs/notifications",
      "tags": [
        "уведомления",
        "телеграм",
        "бот",
        "сообщение",
        "колокольчик",
        "прочитано"
      ],
      "sections": [
        {
          "id": "inbox",
          "title": "Центр уведомлений",
          "paragraphs": [
            "Счётчик показывает количество непрочитанных событий вашего аккаунта. События сгруппированы по датам; старые записи загружаются кнопкой «Показать ещё». Гость видит приглашение войти.",
            "Прочтение сохраняется на сервере. На видимой странице список обновляется автоматически, а открытые вкладки синхронизируют отметки прочтения. Новые события, появившиеся после последнего показанного сообщения, не отмечаются прочитанными вместе со старыми."
          ],
          "bullets": [],
          "steps": [
            "Нажмите на колокольчик в верхней панели сайта.",
            "Выберите все события или только непрочитанные.",
            "Откройте нужный раздел из уведомления либо отметьте сообщение прочитанным.",
            "Чтобы убрать отметки у уже полученных событий, нажмите «Отметить все прочитанными»."
          ],
          "table": null,
          "code": null,
          "note": "",
          "links": []
        },
        {
          "id": "types",
          "title": "Категории событий",
          "paragraphs": [
            "При создании аккаунта включены поддержка и безопасность; платёжные категории выбирает пользователь. Центр показывает сохранённые события включённых категорий. Демо-события браузера не выдаются за сообщения о реальном поступлении денег."
          ],
          "bullets": [],
          "steps": [],
          "table": {
            "headers": [
              "Категория",
              "Содержание"
            ],
            "rows": [
              [
                "Платежи",
                "Подтверждённые события оплаты"
              ],
              [
                "Выплаты",
                "Подтверждённые события вывода"
              ],
              [
                "Поддержка",
                "Обращения и этапы проверки заявки"
              ],
              [
                "Безопасность",
                "Новые подтверждённые входы"
              ],
              [
                "Тест",
                "Проверка связи с вашим Telegram"
              ]
            ]
          },
          "code": null,
          "note": "",
          "links": []
        },
        {
          "id": "setup",
          "title": "Настройка доставки",
          "paragraphs": [
            "Тест ограничен тремя запросами в час на аккаунт. Он не меняет баланс и не создаёт платёж. Постановка сообщения в очередь ещё не означает доставку."
          ],
          "bullets": [],
          "steps": [
            "Войдите через Telegram и откройте «Кабинет → Уведомления».",
            "Включите нужные категории и сохраните настройки.",
            "Нажмите «Проверить доставку».",
            "Проверьте статус в центре уведомлений и появление сообщения в личном чате бота."
          ],
          "table": null,
          "code": null,
          "note": "",
          "links": [
            {
              "label": "Настройки уведомлений",
              "href": "/account#notifications"
            }
          ]
        },
        {
          "id": "statuses",
          "title": "Доставка и прочтение — разные состояния",
          "paragraphs": [
            "Отправка зависит от доступности Telegram и разрешений пользователя. При потере ответа возможен повтор сообщения; это не означает повторную денежную операцию.",
            "Если сообщение не доставлено, проверьте, что бот доступен и не заблокирован. Повторы уведомлений о заявках также выполняются фоновыми заданиями; взаимодействия с сервисом могут запускать доставку других событий. Актуальное состояние доставки доступно в центре уведомлений."
          ],
          "bullets": [],
          "steps": [],
          "table": {
            "headers": [
              "Статус",
              "Значение"
            ],
            "rows": [
              [
                "pending",
                "Сообщение ожидает обработки"
              ],
              [
                "sending",
                "Сервер пытается отправить сообщение"
              ],
              [
                "sent",
                "Telegram подтвердил отправку"
              ],
              [
                "failed",
                "Доставка завершилась ошибкой"
              ]
            ]
          },
          "code": null,
          "note": "Статус под сообщением относится к Telegram. Отметка прочтения на сайте не означает, что сообщение прочитано в Telegram, и не меняет состояние доставки.",
          "links": []
        },
        {
          "id": "feedback",
          "title": "Подтверждения действий",
          "paragraphs": [
            "После сохранения настроек, создания ссылки и других завершённых действий сайт показывает короткое уведомление. Оно автоматически скрывается, а при наведении или фокусе остаётся на экране дольше.",
            "Такое подтверждение описывает результат действия в интерфейсе. Оно не заменяет подтверждённый статус денежной операции и не создаёт запись о платеже. Ошибки заполнения остаются рядом с формой."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": []
        },
        {
          "id": "api",
          "title": "Чтение и отметки через API",
          "paragraphs": [
            "GET /api/notifications возвращает до 30 собственных событий, общий unreadCount и nextCursor. Передайте nextCursor без изменений в cursor для следующей страницы. Параметр unread=1 оставляет только непрочитанные записи. Порядок: createdAt по убыванию, затем id по убыванию.",
            "PATCH /api/notifications/read принимает либо ids — от 1 до 100 идентификаторов, либо all:true вместе с before — временем последнего уже показанного события в миллисекундах. Требуются действующая сессия, Origin и X-CSRF-Token. Поля владельца из браузера не принимаются.",
            "Ответ содержит updated, readAt и unreadCount. Повторное прочтение не меняет дату ранее прочитанного события. Чтение списка ничего не отмечает автоматически; status и sentAt доставки Telegram не изменяются."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": {
            "language": "JSON · отметить выбранные",
            "code": "{\n  \"ids\": [\"ntf_46d94180-492e-4c28-b15f-a70049161a63\"]\n}"
          },
          "note": "",
          "links": [
            {
              "label": "Справочник API",
              "href": "/docs/api-reference"
            }
          ]
        },
        {
          "id": "commands",
          "title": "Управление из бота",
          "paragraphs": [],
          "bullets": [],
          "steps": [],
          "table": {
            "headers": [
              "Команда",
              "Действие"
            ],
            "rows": [
              [
                "/notifications",
                "Показать управление категориями"
              ],
              [
                "/stop",
                "Отключить уведомления"
              ],
              [
                "/help",
                "Показать доступные команды"
              ],
              [
                "/logout",
                "Завершить все сессии аккаунта"
              ]
            ]
          },
          "code": null,
          "note": "",
          "links": []
        },
        {
          "id": "availability",
          "title": "Доступность функции",
          "paragraphs": [
            "Центр событий доступен после входа. Сообщения Telegram отправляются в подтверждённый личный чат с ботом. Если доставка недоступна, проверьте разрешения бота и состояние сообщения в центре уведомлений.",
            "Уведомление о платеже или выплате создаётся по подтверждённому серверному событию. Выбор категории управляет доставкой и не меняет доступность денежной операции."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": []
        }
      ],
      "body": "События вашего аккаунта собраны под колокольчиком в верхней панели. Здесь можно прочитать уведомления, проверить доставку в Telegram и перейти к нужному разделу.\n\nЦентр уведомлений\n\nСчётчик показывает количество непрочитанных событий вашего аккаунта. События сгруппированы по датам; старые записи загружаются кнопкой «Показать ещё». Гость видит приглашение войти.\n\nПрочтение сохраняется на сервере. На видимой странице список обновляется автоматически, а открытые вкладки синхронизируют отметки прочтения. Новые события, появившиеся после последнего показанного сообщения, не отмечаются прочитанными вместе со старыми.\n\n1. Нажмите на колокольчик в верхней панели сайта.\n\n2. Выберите все события или только непрочитанные.\n\n3. Откройте нужный раздел из уведомления либо отметьте сообщение прочитанным.\n\n4. Чтобы убрать отметки у уже полученных событий, нажмите «Отметить все прочитанными».\n\nКатегории событий\n\nПри создании аккаунта включены поддержка и безопасность; платёжные категории выбирает пользователь. Центр показывает сохранённые события включённых категорий. Демо-события браузера не выдаются за сообщения о реальном поступлении денег.\n\nКатегория · Содержание\nПлатежи · Подтверждённые события оплаты\nВыплаты · Подтверждённые события вывода\nПоддержка · Обращения и этапы проверки заявки\nБезопасность · Новые подтверждённые входы\nТест · Проверка связи с вашим Telegram\n\nНастройка доставки\n\nТест ограничен тремя запросами в час на аккаунт. Он не меняет баланс и не создаёт платёж. Постановка сообщения в очередь ещё не означает доставку.\n\n1. Войдите через Telegram и откройте «Кабинет → Уведомления».\n\n2. Включите нужные категории и сохраните настройки.\n\n3. Нажмите «Проверить доставку».\n\n4. Проверьте статус в центре уведомлений и появление сообщения в личном чате бота.\n\nНастройки уведомлений: https://kevmi.one/account#notifications\n\nДоставка и прочтение — разные состояния\n\nОтправка зависит от доступности Telegram и разрешений пользователя. При потере ответа возможен повтор сообщения; это не означает повторную денежную операцию.\n\nЕсли сообщение не доставлено, проверьте, что бот доступен и не заблокирован. Повторы уведомлений о заявках также выполняются фоновыми заданиями; взаимодействия с сервисом могут запускать доставку других событий. Актуальное состояние доставки доступно в центре уведомлений.\n\nСтатус · Значение\npending · Сообщение ожидает обработки\nsending · Сервер пытается отправить сообщение\nsent · Telegram подтвердил отправку\nfailed · Доставка завершилась ошибкой\n\nСтатус под сообщением относится к Telegram. Отметка прочтения на сайте не означает, что сообщение прочитано в Telegram, и не меняет состояние доставки.\n\nПодтверждения действий\n\nПосле сохранения настроек, создания ссылки и других завершённых действий сайт показывает короткое уведомление. Оно автоматически скрывается, а при наведении или фокусе остаётся на экране дольше.\n\nТакое подтверждение описывает результат действия в интерфейсе. Оно не заменяет подтверждённый статус денежной операции и не создаёт запись о платеже. Ошибки заполнения остаются рядом с формой.\n\nЧтение и отметки через API\n\nGET /api/notifications возвращает до 30 собственных событий, общий unreadCount и nextCursor. Передайте nextCursor без изменений в cursor для следующей страницы. Параметр unread=1 оставляет только непрочитанные записи. Порядок: createdAt по убыванию, затем id по убыванию.\n\nPATCH /api/notifications/read принимает либо ids — от 1 до 100 идентификаторов, либо all:true вместе с before — временем последнего уже показанного события в миллисекундах. Требуются действующая сессия, Origin и X-CSRF-Token. Поля владельца из браузера не принимаются.\n\nОтвет содержит updated, readAt и unreadCount. Повторное прочтение не меняет дату ранее прочитанного события. Чтение списка ничего не отмечает автоматически; status и sentAt доставки Telegram не изменяются.\n\n{\n  \"ids\": [\"ntf_46d94180-492e-4c28-b15f-a70049161a63\"]\n}\n\nСправочник API: https://kevmi.one/docs/api-reference\n\nУправление из бота\n\nКоманда · Действие\n/notifications · Показать управление категориями\n/stop · Отключить уведомления\n/help · Показать доступные команды\n/logout · Завершить все сессии аккаунта\n\nДоступность функции\n\nЦентр событий доступен после входа. Сообщения Telegram отправляются в подтверждённый личный чат с ботом. Если доставка недоступна, проверьте разрешения бота и состояние сообщения в центре уведомлений.\n\nУведомление о платеже или выплате создаётся по подтверждённому серверному событию. Выбор категории управляет доставкой и не меняет доступность денежной операции.",
      "readMinutes": 4
    },
    {
      "id": "support",
      "title": "Чат поддержки и обращения",
      "summary": "Помощник объясняет условия Kevmi, подсказывает нужную страницу и помогает разобраться в настройках. Чат открывается круглой кнопкой в правом нижнем углу; для вопроса о вашем аккаунте есть личные обращения.",
      "group": "account",
      "url": "/docs/support",
      "tags": [
        "поддержка",
        "помощь",
        "ии",
        "ai",
        "агент",
        "документация",
        "обращение",
        "чат"
      ],
      "sections": [
        {
          "id": "chat",
          "title": "Помощь на текущей странице",
          "paragraphs": [
            "На телефоне чат открывается в удобной панели. Его можно свернуть и снова открыть; если ответ пришёл в свёрнутый чат, на кнопке появится отметка.",
            "Поддержка доступна прямо на текущей странице. Старый адрес /help перенаправляет на главную с открытым чатом."
          ],
          "bullets": [],
          "steps": [
            "Нажмите на круглый значок поддержки внизу справа или кнопку «Задать свой вопрос».",
            "Откройте существующий диалог или начните новый. Выберите готовый вопрос или напишите свой: Enter отправляет сообщение, Shift + Enter добавляет строку.",
            "Прочитайте ответ и откройте приложенные источники.",
            "Сверните чат, чтобы продолжить работу. Сообщения и черновик сохранятся в этом браузере."
          ],
          "table": null,
          "code": null,
          "note": "",
          "links": [
            {
              "label": "Открыть чат поддержки",
              "href": "/?support=open"
            }
          ]
        },
        {
          "id": "history",
          "title": "Диалоги, черновики и история",
          "paragraphs": [
            "Каждая тема может храниться в отдельном диалоге. История позволяет найти разговор по названию или тексту, переименовать его и закрепить важное. Новый диалог не очищает предыдущие; у каждого сохраняется собственный черновик.",
            "Удалённый разговор можно восстановить в разделе «Удалённые» или удалить навсегда с подтверждением. История хранится на этом устройстве в браузере, переживает обновление страницы и не синхронизируется между устройствами, аккаунтом или Telegram. Очистка данных сайта в браузере удаляет локальную историю.",
            "Если браузер не разрешает сохранение, чат продолжает работать в памяти открытой страницы. Локальные диалоги отличаются от личных обращений: обращения сохраняются на сервере после авторизации."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": []
        },
        {
          "id": "knowledge",
          "title": "На чём основаны ответы",
          "paragraphs": [
            "Сайт и бот используют одну версионированную базу. Для генеративного ответа сервер передаёт опубликованные руководства, факты о тарифах, распределении расходов и странах, каталог страниц и фактические признаки подключения функций. База включает заявки, API-ключи, виджеты и webhook.",
            "Источники под ответом ведут только к статьям этой базы. Если подтверждённого материала недостаточно, помощник сообщает об этом и предлагает уточнить вопрос или создать обращение. Он не должен обещать неизвестные страны, сроки выплат, лимиты и налоговые обязанности."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": []
        },
        {
          "id": "context",
          "title": "Уточняющие вопросы и контекст",
          "paragraphs": [
            "Для следующего вопроса чат передаёт последние три пары «вопрос — ответ» выбранного диалога. Это помогает понять уточнения вроде «а если НДС платит магазин?». Остальная локальная история не прикладывается к запросу автоматически.",
            "Также передаётся краткое название раздела, например «Тарифы» или «Оплата заказа». Адрес страницы, параметры ссылки и токен счёта в этот контекст не включаются. Предыдущие сообщения проверяются по базе знаний и не считаются подтверждёнными фактами."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": []
        },
        {
          "id": "modes",
          "title": "ИИ и поиск по документации",
          "paragraphs": [
            "ИИ-режим требует настроенного провайдера, серверного хранилища и доступной квоты. /api/config показывает готовность конфигурации; успешное подключение модели проверяется при запросе. Если генерация недоступна, квота исчерпана или ответ не прошёл проверку, сервис возвращает поиск с соответствующей отметкой.",
            "Поиск работает и без внешней модели. Вопросы о приватных операциях помощник не решает: у него нет доступа к аккаунтам, балансу, личным обращениям и платёжным данным. Он не списывает деньги, не делает выплаты и не меняет настройки магазина."
          ],
          "bullets": [],
          "steps": [],
          "table": {
            "headers": [
              "Режим",
              "Как работает"
            ],
            "rows": [
              [
                "ai",
                "Формулирует ответ по всей опубликованной базе и прикладывает относящиеся к нему статьи"
              ],
              [
                "search",
                "Показывает найденный материал опубликованной документации"
              ]
            ]
          },
          "code": null,
          "note": "",
          "links": []
        },
        {
          "id": "question",
          "title": "Как задать полезный вопрос",
          "paragraphs": [
            "Например: «Заказ $5 по карте, НДС оплачивает магазин. Какой итог получит магазин?» Для точного расчёта используйте опубликованный калькулятор.",
            "Поле чата принимает до 1800 символов. Если соединение прервалось, вопрос остаётся в поле и доступна повторная отправка."
          ],
          "bullets": [
            "Укажите способ оплаты: карта, СБП, Alipay или криптовалюта.",
            "Для расчёта укажите базовую сумму и доли комиссии и НДС покупателя.",
            "Для ошибки назовите страницу, действие и видимый текст сообщения.",
            "Не отправляйте пароли, коды входа, токены, CVV или seed-фразы."
          ],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": []
        },
        {
          "id": "request",
          "title": "Вопрос через API",
          "paragraphs": [
            "POST /api/support/ask принимает question длиной от 2 до 2000 символов после удаления пробелов по краям. Необязательная history содержит до шести сообщений с role=user или role=assistant. Текст user — от 1 до 1800 символов, assistant — от 1 до 3000.",
            "Необязательный pageContext — короткое название страницы от 1 до 80 символов. URL, токены, параметры запроса и переносы строк не допускаются. Необязательный locale принимает ru, en, es, de или fr и задаёт язык ответа. По умолчанию используется английский; полные технические источники опубликованы на русском и английском. Поля system, инструменты и произвольные инструкции провайдеру этим API не принимаются.",
            "Максимальный размер JSON-тела этого маршрута — 65 536 байт. Ответ содержит mode, answer, sources, knowledgeVersion, needsHuman и, при недоступной генерации, aiUnavailable:true. Публичный вопрос не требует сессии; переданный Origin должен совпадать с адресом приложения."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": [
            {
              "label": "Контракт API",
              "href": "/docs/api-reference"
            }
          ]
        },
        {
          "id": "ticket",
          "title": "Личное обращение",
          "paragraphs": [
            "После входа можно создать обращение с темой от 1 до 120 символов и сообщением от 5 до 4000 символов. Сайт сохраняет его в аккаунте; другой пользователь не получает к нему доступ.",
            "В списке показываются последние 30 обращений. Собственное обращение можно закрыть. Сохранённое обращение доступно в вашем аккаунте. Для уточнения статуса используйте его номер; время решения зависит от вопроса."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": [
            {
              "label": "Мои обращения",
              "href": "/account#support"
            }
          ]
        }
      ],
      "body": "Помощник объясняет условия Kevmi, подсказывает нужную страницу и помогает разобраться в настройках. Чат открывается круглой кнопкой в правом нижнем углу; для вопроса о вашем аккаунте есть личные обращения.\n\nПомощь на текущей странице\n\nНа телефоне чат открывается в удобной панели. Его можно свернуть и снова открыть; если ответ пришёл в свёрнутый чат, на кнопке появится отметка.\n\nПоддержка доступна прямо на текущей странице. Старый адрес /help перенаправляет на главную с открытым чатом.\n\n1. Нажмите на круглый значок поддержки внизу справа или кнопку «Задать свой вопрос».\n\n2. Откройте существующий диалог или начните новый. Выберите готовый вопрос или напишите свой: Enter отправляет сообщение, Shift + Enter добавляет строку.\n\n3. Прочитайте ответ и откройте приложенные источники.\n\n4. Сверните чат, чтобы продолжить работу. Сообщения и черновик сохранятся в этом браузере.\n\nОткрыть чат поддержки: https://kevmi.one/?support=open\n\nДиалоги, черновики и история\n\nКаждая тема может храниться в отдельном диалоге. История позволяет найти разговор по названию или тексту, переименовать его и закрепить важное. Новый диалог не очищает предыдущие; у каждого сохраняется собственный черновик.\n\nУдалённый разговор можно восстановить в разделе «Удалённые» или удалить навсегда с подтверждением. История хранится на этом устройстве в браузере, переживает обновление страницы и не синхронизируется между устройствами, аккаунтом или Telegram. Очистка данных сайта в браузере удаляет локальную историю.\n\nЕсли браузер не разрешает сохранение, чат продолжает работать в памяти открытой страницы. Локальные диалоги отличаются от личных обращений: обращения сохраняются на сервере после авторизации.\n\nНа чём основаны ответы\n\nСайт и бот используют одну версионированную базу. Для генеративного ответа сервер передаёт опубликованные руководства, факты о тарифах, распределении расходов и странах, каталог страниц и фактические признаки подключения функций. База включает заявки, API-ключи, виджеты и webhook.\n\nИсточники под ответом ведут только к статьям этой базы. Если подтверждённого материала недостаточно, помощник сообщает об этом и предлагает уточнить вопрос или создать обращение. Он не должен обещать неизвестные страны, сроки выплат, лимиты и налоговые обязанности.\n\nУточняющие вопросы и контекст\n\nДля следующего вопроса чат передаёт последние три пары «вопрос — ответ» выбранного диалога. Это помогает понять уточнения вроде «а если НДС платит магазин?». Остальная локальная история не прикладывается к запросу автоматически.\n\nТакже передаётся краткое название раздела, например «Тарифы» или «Оплата заказа». Адрес страницы, параметры ссылки и токен счёта в этот контекст не включаются. Предыдущие сообщения проверяются по базе знаний и не считаются подтверждёнными фактами.\n\nИИ и поиск по документации\n\nИИ-режим требует настроенного провайдера, серверного хранилища и доступной квоты. /api/config показывает готовность конфигурации; успешное подключение модели проверяется при запросе. Если генерация недоступна, квота исчерпана или ответ не прошёл проверку, сервис возвращает поиск с соответствующей отметкой.\n\nПоиск работает и без внешней модели. Вопросы о приватных операциях помощник не решает: у него нет доступа к аккаунтам, балансу, личным обращениям и платёжным данным. Он не списывает деньги, не делает выплаты и не меняет настройки магазина.\n\nРежим · Как работает\nai · Формулирует ответ по всей опубликованной базе и прикладывает относящиеся к нему статьи\nsearch · Показывает найденный материал опубликованной документации\n\nКак задать полезный вопрос\n\nНапример: «Заказ $5 по карте, НДС оплачивает магазин. Какой итог получит магазин?» Для точного расчёта используйте опубликованный калькулятор.\n\nПоле чата принимает до 1800 символов. Если соединение прервалось, вопрос остаётся в поле и доступна повторная отправка.\n\nУкажите способ оплаты: карта, СБП, Alipay или криптовалюта.\n\nДля расчёта укажите базовую сумму и доли комиссии и НДС покупателя.\n\nДля ошибки назовите страницу, действие и видимый текст сообщения.\n\nНе отправляйте пароли, коды входа, токены, CVV или seed-фразы.\n\nВопрос через API\n\nPOST /api/support/ask принимает question длиной от 2 до 2000 символов после удаления пробелов по краям. Необязательная history содержит до шести сообщений с role=user или role=assistant. Текст user — от 1 до 1800 символов, assistant — от 1 до 3000.\n\nНеобязательный pageContext — короткое название страницы от 1 до 80 символов. URL, токены, параметры запроса и переносы строк не допускаются. Необязательный locale принимает ru, en, es, de или fr и задаёт язык ответа. По умолчанию используется английский; полные технические источники опубликованы на русском и английском. Поля system, инструменты и произвольные инструкции провайдеру этим API не принимаются.\n\nМаксимальный размер JSON-тела этого маршрута — 65 536 байт. Ответ содержит mode, answer, sources, knowledgeVersion, needsHuman и, при недоступной генерации, aiUnavailable:true. Публичный вопрос не требует сессии; переданный Origin должен совпадать с адресом приложения.\n\nКонтракт API: https://kevmi.one/docs/api-reference\n\nЛичное обращение\n\nПосле входа можно создать обращение с темой от 1 до 120 символов и сообщением от 5 до 4000 символов. Сайт сохраняет его в аккаунте; другой пользователь не получает к нему доступ.\n\nВ списке показываются последние 30 обращений. Собственное обращение можно закрыть. Сохранённое обращение доступно в вашем аккаунте. Для уточнения статуса используйте его номер; время решения зависит от вопроса.\n\nМои обращения: https://kevmi.one/account#support",
      "readMinutes": 5
    },
    {
      "id": "api-reference",
      "title": "Справочник API",
      "summary": "Серверный API обслуживает аккаунт, счета, защищённую страницу оплаты, статусы и вебхуки. OpenAPI описывает маршруты, поля и ошибки. Для запуска платежа нужны настроенный шлюз, одобренный магазин и поддерживаемые условия счёта.",
      "group": "developers",
      "url": "/docs/api-reference",
      "tags": [
        "api",
        "openapi",
        "endpoint",
        "справочник",
        "json"
      ],
      "sections": [
        {
          "id": "base",
          "title": "Адрес и формат",
          "paragraphs": [
            "Базовый адрес: https://kevmi.one. Тела запросов и ответы используют JSON. В денежных полях применяется целое количество минимальных единиц, даты аккаунтов и обращений — Unix timestamp в миллисекундах.",
            "Ответы API используют Cache-Control: no-store. Публичный /openapi.json можно кэшировать 5 минут. Нельзя переносить cookie и секреты в адресную строку."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": {
            "language": "cURL",
            "code": "curl 'https://kevmi.one/api/config'\n\ncurl 'https://kevmi.one/openapi.json'"
          },
          "note": "",
          "links": []
        },
        {
          "id": "session",
          "title": "Авторизация запросов",
          "paragraphs": [
            "Веб-аккаунт использует HttpOnly cookie сессии. GET /api/auth/me возвращает текущего пользователя и csrfToken. Для изменений отправляйте X-CSRF-Token и запрос с того же origin.",
            "API аккаунта использует сессию браузера. Серверные API-ключи Kevmi действуют на /api/v1/payments, /api/v1/payment-links и /api/v1/events согласно своим правам. Они не заменяют cookie сессии для настроек аккаунта и административных действий."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": {
            "language": "JavaScript · в браузере сайта",
            "code": "const me = await fetch('/api/auth/me').then(r => r.json());\nif (!me.authenticated) throw new Error('Требуется вход');\n\nconst response = await fetch('/api/account/settings', {\n  method: 'PATCH',\n  headers: {\n    'Content-Type': 'application/json',\n    'X-CSRF-Token': me.csrfToken\n  },\n  body: JSON.stringify({ vatPayer: 'merchant' })\n});\nif (!response.ok) throw new Error('Настройки не сохранены');\nconst updated = await response.json();"
          },
          "note": "",
          "links": []
        },
        {
          "id": "groups",
          "title": "Группы методов",
          "paragraphs": [
            "GET /api/config показывает наличие серверной конфигурации. GET /api/checkout/{token} возвращает invoice.availability для выбранного способа с учётом одобрения магазина и сохранённых условий. Эти проверки не подтверждают доступность провайдера или успешный платёж: результат определяется по проверенной операции шлюза."
          ],
          "bullets": [],
          "steps": [],
          "table": {
            "headers": [
              "Группа",
              "Назначение"
            ],
            "rows": [
              [
                "Конфигурация и здоровье",
                "Публичная готовность сервиса и хранилища"
              ],
              [
                "Авторизация",
                "Telegram-подтверждения и сессии"
              ],
              [
                "Аккаунт",
                "Настройки и приватное приложение магазина"
              ],
              [
                "/api/v1/payments",
                "Серверное создание и чтение счетов с ограниченным API-ключом; не запускает списание"
              ],
              [
                "/api/v1/events",
                "Серверный журнал событий с events:read"
              ],
              [
                "Интеграции",
                "Сессионное управление ключами и адресами вебхуков"
              ],
              [
                "Заявки и модерация",
                "Собственные заявки, статусы и отдельные права модератора"
              ],
              [
                "Checkout",
                "Публичный счёт, зашифрованный карточный запрос, конкретная операция, код, статус и сверка"
              ],
              [
                "Входящий шлюз",
                "Подписанные уведомления v3 и серверная проверка операции"
              ],
              [
                "Поддержка и уведомления",
                "Вопросы, личные обращения, события и состояние прочтения"
              ],
              [
                "Telegram",
                "Проверяемый webhook бота"
              ],
              [
                "Неподдерживаемые денежные маршруты",
                "Старые прямые /api/payments и /api/payouts не создают платёж или выплату"
              ]
            ]
          },
          "code": null,
          "note": "",
          "links": []
        },
        {
          "id": "support-example",
          "title": "Публичный запрос к базе знаний",
          "paragraphs": [
            "Ответ содержит mode, answer, sources, knowledgeVersion и needsHuman. Если Origin передан, он должен совпадать с origin приложения. Для чтения из серверного агента Origin можно не передавать."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": {
            "language": "cURL",
            "code": "curl 'https://kevmi.one/api/support/ask' \\\n  -H 'Content-Type: application/json' \\\n  --data '{\"question\":\"Кто оплачивает НДС?\"}'"
          },
          "note": "",
          "links": []
        },
        {
          "id": "errors",
          "title": "Ошибки и ограничения",
          "paragraphs": [
            "Ошибка имеет единый вид с машинным code и сообщением message. Неизвестные поля запроса отклоняются. Для JSON-тел действует лимит 16 384 байта; /api/support/ask и Telegram webhook допускают до 65 536 байт.",
            "Статус 429 означает ограничение частоты. 503 может означать неподключённую интеграцию, а не неудачную оплату. Читайте error.code и не меняйте денежный статус по одному HTTP-коду."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": [
            {
              "label": "Коды ошибок",
              "href": "/docs/errors"
            },
            {
              "label": "Полная спецификация OpenAPI",
              "href": "/openapi.json"
            }
          ]
        },
        {
          "id": "stores-usd",
          "title": "Несколько магазинов и единая цена в USD",
          "paragraphs": [
            "В меню магазина выберите «Все магазины» для общего обзора и операций или конкретный магазин для его данных. Каждый магазин имеет собственный storeId, название, правило НДС, счета, API-ключи, вебхуки, журнал событий и заявку на проверку сайта. Уведомления и обращения принадлежат аккаунту. Можно создать до 100 магазинов. Ранее созданные данные сохранены в первом магазине.",
            "Новые ссылки из кабинета используют pricingMode=\"universal\": базовая цена хранится в USD. Any включает card, alipay, sbp и crypto; при необходимости магазин выбирает подмножество. Карты и Alipay оплачиваются в USD, СБП — в RUB по официальному курсу USD/RUB Банка России, криптовалюта — в USDT по явно установленному соотношению 1 USD = 1 USDT. Это правило расчёта счёта, а не рыночная котировка USDT. Курс другой монеты и точные реквизиты предоставляет шлюз перед переводом.",
            "Курс ЦБ и обе суммы сохраняются при создании. Ссылки с рублёвой конвертацией действуют не более 24 часов. Если курс получить не удалось, создание возвращает FX_UNAVAILABLE; выдуманный или старый запасной курс не применяется. amountMinor и quotes в ответе владельцу выражены в базовой валюте USD; quotes[method].settlement содержит сумму и валюту конкретного способа. Публичный checkout возвращает выбранную валюту оплаты в currency, исходную цену в baseAmountMinor/baseCurrency и курс в fx. Возврат к другой валюте после отправки платежа запрещён: у счёта одна операция шлюза.",
            "Для серверной интеграции создайте API-ключ внутри выбранного магазина и передавайте Authorization: Bearer <key>. Привязка ключа к магазину неизменна: заголовок X-Kevmi-Store не позволяет получить данные другого магазина. Для браузерной сессии передавайте X-Kevmi-Store: <storeId>; без заголовка используется первый магазин. Значение all разрешено только для GET /api/account/dashboard и GET /api/payment-links. Изменения требуют выбранного магазина, Origin и X-CSRF-Token. ID аккаунта и ID магазина — разные идентификаторы.",
            "Без pricingMode=\"universal\" API сохраняет прежний режим native и исходные ограничения валют для совместимости. Старые ссылки не пересчитываются. Подтверждённые поступления в обзоре — это проверенные платежи за вычетом расходов по сохранённому расчёту, а не доступный остаток для вывода. Валюты старых счетов учитываются раздельно; выплаты согласуются с поддержкой. Подтверждение исполнения заказа проверяйте через payment.fulfillmentReady=true и payment.status=\"succeeded\" в серверном API, журнале событий или подписанном вебхуке."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": {
            "language": "json",
            "code": "{\n  \"pricingMode\": \"universal\",\n  \"title\": \"Order 1042\",\n  \"amountMinor\": 1000,\n  \"currency\": \"USD\",\n  \"methods\": [\n    \"card\",\n    \"alipay\",\n    \"sbp\",\n    \"crypto\"\n  ],\n  \"vatCustomerPercent\": 100,\n  \"feeCustomerPercent\": 0\n}"
          },
          "note": "",
          "links": []
        }
      ],
      "body": "Серверный API обслуживает аккаунт, счета, защищённую страницу оплаты, статусы и вебхуки. OpenAPI описывает маршруты, поля и ошибки. Для запуска платежа нужны настроенный шлюз, одобренный магазин и поддерживаемые условия счёта.\n\nАдрес и формат\n\nБазовый адрес: https://kevmi.one. Тела запросов и ответы используют JSON. В денежных полях применяется целое количество минимальных единиц, даты аккаунтов и обращений — Unix timestamp в миллисекундах.\n\nОтветы API используют Cache-Control: no-store. Публичный /openapi.json можно кэшировать 5 минут. Нельзя переносить cookie и секреты в адресную строку.\n\ncurl 'https://kevmi.one/api/config'\n\ncurl 'https://kevmi.one/openapi.json'\n\nАвторизация запросов\n\nВеб-аккаунт использует HttpOnly cookie сессии. GET /api/auth/me возвращает текущего пользователя и csrfToken. Для изменений отправляйте X-CSRF-Token и запрос с того же origin.\n\nAPI аккаунта использует сессию браузера. Серверные API-ключи Kevmi действуют на /api/v1/payments, /api/v1/payment-links и /api/v1/events согласно своим правам. Они не заменяют cookie сессии для настроек аккаунта и административных действий.\n\nconst me = await fetch('/api/auth/me').then(r => r.json());\nif (!me.authenticated) throw new Error('Требуется вход');\n\nconst response = await fetch('/api/account/settings', {\n  method: 'PATCH',\n  headers: {\n    'Content-Type': 'application/json',\n    'X-CSRF-Token': me.csrfToken\n  },\n  body: JSON.stringify({ vatPayer: 'merchant' })\n});\nif (!response.ok) throw new Error('Настройки не сохранены');\nconst updated = await response.json();\n\nГруппы методов\n\nGET /api/config показывает наличие серверной конфигурации. GET /api/checkout/{token} возвращает invoice.availability для выбранного способа с учётом одобрения магазина и сохранённых условий. Эти проверки не подтверждают доступность провайдера или успешный платёж: результат определяется по проверенной операции шлюза.\n\nГруппа · Назначение\nКонфигурация и здоровье · Публичная готовность сервиса и хранилища\nАвторизация · Telegram-подтверждения и сессии\nАккаунт · Настройки и приватное приложение магазина\n/api/v1/payments · Серверное создание и чтение счетов с ограниченным API-ключом; не запускает списание\n/api/v1/events · Серверный журнал событий с events:read\nИнтеграции · Сессионное управление ключами и адресами вебхуков\nЗаявки и модерация · Собственные заявки, статусы и отдельные права модератора\nCheckout · Публичный счёт, зашифрованный карточный запрос, конкретная операция, код, статус и сверка\nВходящий шлюз · Подписанные уведомления v3 и серверная проверка операции\nПоддержка и уведомления · Вопросы, личные обращения, события и состояние прочтения\nTelegram · Проверяемый webhook бота\nНеподдерживаемые денежные маршруты · Старые прямые /api/payments и /api/payouts не создают платёж или выплату\n\nПубличный запрос к базе знаний\n\nОтвет содержит mode, answer, sources, knowledgeVersion и needsHuman. Если Origin передан, он должен совпадать с origin приложения. Для чтения из серверного агента Origin можно не передавать.\n\ncurl 'https://kevmi.one/api/support/ask' \\\n  -H 'Content-Type: application/json' \\\n  --data '{\"question\":\"Кто оплачивает НДС?\"}'\n\nОшибки и ограничения\n\nОшибка имеет единый вид с машинным code и сообщением message. Неизвестные поля запроса отклоняются. Для JSON-тел действует лимит 16 384 байта; /api/support/ask и Telegram webhook допускают до 65 536 байт.\n\nСтатус 429 означает ограничение частоты. 503 может означать неподключённую интеграцию, а не неудачную оплату. Читайте error.code и не меняйте денежный статус по одному HTTP-коду.\n\nКоды ошибок: https://kevmi.one/docs/errors\n\nПолная спецификация OpenAPI: https://kevmi.one/openapi.json\n\nНесколько магазинов и единая цена в USD\n\nВ меню магазина выберите «Все магазины» для общего обзора и операций или конкретный магазин для его данных. Каждый магазин имеет собственный storeId, название, правило НДС, счета, API-ключи, вебхуки, журнал событий и заявку на проверку сайта. Уведомления и обращения принадлежат аккаунту. Можно создать до 100 магазинов. Ранее созданные данные сохранены в первом магазине.\n\nНовые ссылки из кабинета используют pricingMode=\"universal\": базовая цена хранится в USD. Any включает card, alipay, sbp и crypto; при необходимости магазин выбирает подмножество. Карты и Alipay оплачиваются в USD, СБП — в RUB по официальному курсу USD/RUB Банка России, криптовалюта — в USDT по явно установленному соотношению 1 USD = 1 USDT. Это правило расчёта счёта, а не рыночная котировка USDT. Курс другой монеты и точные реквизиты предоставляет шлюз перед переводом.\n\nКурс ЦБ и обе суммы сохраняются при создании. Ссылки с рублёвой конвертацией действуют не более 24 часов. Если курс получить не удалось, создание возвращает FX_UNAVAILABLE; выдуманный или старый запасной курс не применяется. amountMinor и quotes в ответе владельцу выражены в базовой валюте USD; quotes[method].settlement содержит сумму и валюту конкретного способа. Публичный checkout возвращает выбранную валюту оплаты в currency, исходную цену в baseAmountMinor/baseCurrency и курс в fx. Возврат к другой валюте после отправки платежа запрещён: у счёта одна операция шлюза.\n\nДля серверной интеграции создайте API-ключ внутри выбранного магазина и передавайте Authorization: Bearer <key>. Привязка ключа к магазину неизменна: заголовок X-Kevmi-Store не позволяет получить данные другого магазина. Для браузерной сессии передавайте X-Kevmi-Store: <storeId>; без заголовка используется первый магазин. Значение all разрешено только для GET /api/account/dashboard и GET /api/payment-links. Изменения требуют выбранного магазина, Origin и X-CSRF-Token. ID аккаунта и ID магазина — разные идентификаторы.\n\nБез pricingMode=\"universal\" API сохраняет прежний режим native и исходные ограничения валют для совместимости. Старые ссылки не пересчитываются. Подтверждённые поступления в обзоре — это проверенные платежи за вычетом расходов по сохранённому расчёту, а не доступный остаток для вывода. Валюты старых счетов учитываются раздельно; выплаты согласуются с поддержкой. Подтверждение исполнения заказа проверяйте через payment.fulfillmentReady=true и payment.status=\"succeeded\" в серверном API, журнале событий или подписанном вебхуке.\n\n{\n  \"pricingMode\": \"universal\",\n  \"title\": \"Order 1042\",\n  \"amountMinor\": 1000,\n  \"currency\": \"USD\",\n  \"methods\": [\n    \"card\",\n    \"alipay\",\n    \"sbp\",\n    \"crypto\"\n  ],\n  \"vatCustomerPercent\": 100,\n  \"feeCustomerPercent\": 0\n}",
      "readMinutes": 3
    },
    {
      "id": "payment-links-api",
      "title": "API платёжных ссылок и ключи",
      "summary": "Создайте счёт из своего backend и сразу получите checkoutUrl. API поддерживает права ключей, идемпотентные повторы, отдельные доли комиссии и НДС, идентификатор заказа и приватные метаданные.",
      "tags": [
        "api",
        "ссылка",
        "идемпотентность",
        "checkout",
        "pagination",
        "api key",
        "scope",
        "metadata",
        "Any",
        "methods"
      ],
      "sections": [
        {
          "id": "create",
          "title": "Серверный запрос и готовая ссылка",
          "paragraphs": [
            "POST /api/v1/payments и /api/v1/payment-links создают один и тот же тип счёта. Название маршрута payments не означает списание: результат — сохранённые условия и checkoutUrl для покупателя.",
            "Отправьте Authorization: Bearer <ключ>, Content-Type: application/json и Idempotency-Key. Ключ идемпотентности содержит 16–100 символов A–Z, a–z, 0–9, дефис или подчёркивание. Сохраните его на сервере для одного логического заказа."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": {
            "language": "cURL · server only",
            "code": "curl 'https://kevmi.maxeevmax1.chatgpt.site/api/v1/payments' \\\n  -H \"Authorization: Bearer $KEVMI_API_KEY\" \\\n  -H 'Content-Type: application/json' \\\n  -H 'Idempotency-Key: order-1042-create-v1' \\\n  --data '{\"title\":\"Design project · order 1042\",\"description\":\"One-time payment for the agreed design work\",\"amountMinor\":500,\"currency\":\"USD\",\"methods\":[\"card\",\"alipay\"],\"vatCustomerPercent\":100,\"feeCustomerPercent\":0,\"orderId\":\"order-1042\",\"metadata\":{\"campaign\":\"autumn\"}}'"
          },
          "note": "Ответ содержит link, checkoutUrl и replayed. Передайте checkoutUrl покупателю или виджету; API-ключ остаётся на сервере.",
          "links": []
        },
        {
          "id": "keys",
          "title": "Права и срок API-ключа",
          "paragraphs": [
            "Создайте ключ в кабинете /account#keys после подтверждения аккаунта. Полное значение показывается один раз; в базе хранится только хеш. По умолчанию ключ действует 90 дней, допустимый срок — 1–365 дней. У аккаунта может быть до десяти активных ключей.",
            "Выдавайте только нужные права. Отзыв или истечение срока прекращают доступ. Ключ не заменяет браузерную сессию для настроек аккаунта, управления endpoints, заявок и модерации. Секрет не должен попадать в виджет, URL, публичный репозиторий или сообщения поддержки.",
            "Браузер сайта использует /api/payment-links с cookie сессии, точным Origin и X-CSRF-Token. Эти маршруты работают с теми же собственными счетами."
          ],
          "bullets": [],
          "steps": [],
          "table": {
            "headers": [
              "Право",
              "Назначение"
            ],
            "rows": [
              [
                "invoices:read",
                "Читать собственные счета и их список"
              ],
              [
                "invoices:write",
                "Создавать счета и менять доступность ссылок"
              ],
              [
                "events:read",
                "Читать серверный журнал событий"
              ]
            ]
          },
          "code": null,
          "note": "",
          "links": [
            {
              "label": "API-ключи в кабинете",
              "href": "/account#keys"
            }
          ]
        },
        {
          "id": "methods",
          "title": "Any и конкретные способы в API",
          "paragraphs": [
            "Any — режим выбора в интерфейсе. Для нового счёта API принимает methods: [\"card\", \"alipay\"] или непустое подмножество в USD; [\"sbp\"] в RUB; [\"crypto\"] в USDT. Значение any не является методом API.",
            "В интерфейсе для нового счёта USD доступны карты и Alipay, для RUB — СБП, для USDT — криптовалюта. API для совместимости может сохранить USD + crypto, но такая криптооплата не запускается и возвращает crypto_requires_usdt. USD и USDT различаются; автоматической конвертации или курса 1:1 нет. Для криптооплаты нужен отдельный счёт в USDT.",
            "Для нового реального платежа картой или Alipay текущий шлюз поддерживает только feeCustomerPercent=0 и vatCustomerPercent=100: комиссию полностью покрывает магазин, НДС полностью добавляется покупателю. Остальные доли можно сохранить в счёте и рассчитать, но такой платёж не запускается и получает unsupported_allocation. Сервер не меняет сохранённые условия автоматически. Для СБП и USDT-криптооплаты доступны все доли комиссии; НДС у них отсутствует."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": [
            {
              "label": "Режим Any в кабинете",
              "href": "/docs/payment-links#any"
            },
            {
              "label": "Страница оплаты",
              "href": "/docs/checkout"
            }
          ]
        },
        {
          "id": "snapshot",
          "title": "Поля и сохранённые условия",
          "paragraphs": [
            "Сохраняются имя магазина, цена, валюта, методы, обе доли расходов и расчёты. Метаданные возвращаются владельцу и в серверных событиях, но не в публичном checkout. Не храните там платёжные секреты.",
            "Если доли пропущены, комиссия полностью относится к магазину; НДС наследует vatPayer или правило аккаунта. В промежуточном распределении ответ может содержать vatPayer=shared. Название заказа, orderId и описание публичны."
          ],
          "bullets": [],
          "steps": [],
          "table": {
            "headers": [
              "Поле",
              "Правило"
            ],
            "rows": [
              [
                "title / description",
                "1–120 / 0–500 символов"
              ],
              [
                "amountMinor",
                "Целое 1–10 000 000 000; 500 означает $5,00 в USD"
              ],
              [
                "currency / methods",
                "USD: card, alipay; RUB: sbp; USDT: crypto. Непустой уникальный список."
              ],
              [
                "vatCustomerPercent / feeCustomerPercent",
                "Две независимые целые доли покупателя 0–100"
              ],
              [
                "vatPayer",
                "Совместимость: customer или merchant; не противоречит доле НДС"
              ],
              [
                "orderId",
                "Необязательно, до 100 символов; виден покупателю"
              ],
              [
                "metadata",
                "До 10 строковых полей; ключ 1–40 A–Z a–z 0–9 _ -; значение до 500; всего до 3000 UTF-8 байт"
              ],
              [
                "expiresAt",
                "Будущий Unix ms не дальше 90 дней; по умолчанию 7 дней"
              ]
            ]
          },
          "code": null,
          "note": "Для совместимости API также сохраняет USD + crypto, но реальная криптооплата такого счёта блокируется с crypto_requires_usdt. Для нового криптосчёта передавайте USDT; автоматической конвертации нет.",
          "links": [
            {
              "label": "Формулы распределения расходов",
              "href": "/docs/cost-sharing"
            }
          ]
        },
        {
          "id": "idempotency",
          "title": "Повтор после ошибки сети",
          "paragraphs": [
            "Первое создание возвращает 201 и replayed=false. Тот же ключ с тем же каноническим телом возвращает 200, исходный checkoutUrl и replayed=true. Другой запрос с прежним ключом даёт 409 IDEMPOTENCY_CONFLICT.",
            "Не генерируйте новый ключ после тайм-аута. Повторите исходный запрос с теми же полями. Пропущенные значения не наследуют заново изменившиеся настройки. orderId помогает сопоставить заказ, но не заменяет Idempotency-Key и не обязан быть уникальным в базе."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": []
        },
        {
          "id": "read",
          "title": "Чтение и пагинация",
          "paragraphs": [
            "GET /api/v1/payments возвращает links и nextCursor; GET /api/v1/payments/{id} — один принадлежащий владельцу link. Нужен invoices:read. Размер страницы по умолчанию 30, limit — от 1 до 100.",
            "Ответы GET списка и отдельного счёта включают link.payment: краткую сводку связанной операции или null, если операции ещё нет. Ответы POST/PATCH могут не включать это поле: при необходимости прочитайте счёт повторно. Состояние ссылки отдельно описывает возможность начать новый платёж. Реквизиты карты и закрытые ключи сюда не входят.",
            "Передавайте nextCursor без изменений через URLSearchParams. null означает конец списка; чужой и неизвестный ID возвращают 404."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": {
            "language": "HTTP",
            "code": "GET /api/v1/payments?limit=30\nAuthorization: Bearer <server-side key>"
          },
          "note": "",
          "links": []
        },
        {
          "id": "status",
          "title": "Пауза, возобновление и отмена",
          "paragraphs": [
            "PATCH /api/v1/payments/{id} с правом invoices:write принимает только {\"status\":\"active\"}, {\"status\":\"paused\"} или {\"status\":\"cancelled\"}. Отмена окончательна. expired определяется по сроку; истёкший счёт не продлевается.",
            "Цена, доли расходов, описание, orderId, метаданные и срок неизменны. Для других условий создайте новый счёт. Изменение доступности создаёт invoice.updated, а не событие успешного платежа."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": []
        },
        {
          "id": "buyer",
          "title": "Что получает покупатель",
          "paragraphs": [
            "GET /api/checkout/{token}?method=card возвращает публичный счёт, расчёт, доступность способа и существующую операцию. Метаданные владельца, секреты и баланс не раскрываются.",
            "POST /api/checkout/{token}/pay требует Origin сайта и выбранный конкретный метод. Карта передаётся только в sealed: {intent,jwe}; предварительно браузер получает /card-intent. Код банка отправляется зашифрованным через /code. Для криптооплаты используется сохранённый USDT-счёт и доступная пара монеты/сети.",
            "Новый платёж и подготовка карточного запроса требуют одобренной последней заявки магазина на проверку сайта. Одобрение само по себе не подключает платёжный шлюз. Если проверка магазина изменилась после отправки платежа, уже созданная операция остаётся доступна для статуса, сверки и запрошенного банковского кода.",
            "Отсутствие рабочего соединения возвращает GATEWAY_NOT_CONNECTED; несовместимое распределение не заменяется другим расчётом. Статус и reconcile читают прежнюю операцию и не создают повторное списание."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": [
            {
              "label": "Платёжный виджет",
              "href": "/docs/widgets"
            },
            {
              "label": "Подтверждение оплаты webhook",
              "href": "/docs/webhooks"
            }
          ]
        },
        {
          "id": "stores-usd",
          "title": "Несколько магазинов и единая цена в USD",
          "paragraphs": [
            "В меню магазина выберите «Все магазины» для общего обзора и операций или конкретный магазин для его данных. Каждый магазин имеет собственный storeId, название, правило НДС, счета, API-ключи, вебхуки, журнал событий и заявку на проверку сайта. Уведомления и обращения принадлежат аккаунту. Можно создать до 100 магазинов. Ранее созданные данные сохранены в первом магазине.",
            "Новые ссылки из кабинета используют pricingMode=\"universal\": базовая цена хранится в USD. Any включает card, alipay, sbp и crypto; при необходимости магазин выбирает подмножество. Карты и Alipay оплачиваются в USD, СБП — в RUB по официальному курсу USD/RUB Банка России, криптовалюта — в USDT по явно установленному соотношению 1 USD = 1 USDT. Это правило расчёта счёта, а не рыночная котировка USDT. Курс другой монеты и точные реквизиты предоставляет шлюз перед переводом.",
            "Курс ЦБ и обе суммы сохраняются при создании. Ссылки с рублёвой конвертацией действуют не более 24 часов. Если курс получить не удалось, создание возвращает FX_UNAVAILABLE; выдуманный или старый запасной курс не применяется. amountMinor и quotes в ответе владельцу выражены в базовой валюте USD; quotes[method].settlement содержит сумму и валюту конкретного способа. Публичный checkout возвращает выбранную валюту оплаты в currency, исходную цену в baseAmountMinor/baseCurrency и курс в fx. Возврат к другой валюте после отправки платежа запрещён: у счёта одна операция шлюза.",
            "Для серверной интеграции создайте API-ключ внутри выбранного магазина и передавайте Authorization: Bearer <key>. Привязка ключа к магазину неизменна: заголовок X-Kevmi-Store не позволяет получить данные другого магазина. Для браузерной сессии передавайте X-Kevmi-Store: <storeId>; без заголовка используется первый магазин. Значение all разрешено только для GET /api/account/dashboard и GET /api/payment-links. Изменения требуют выбранного магазина, Origin и X-CSRF-Token. ID аккаунта и ID магазина — разные идентификаторы.",
            "Без pricingMode=\"universal\" API сохраняет прежний режим native и исходные ограничения валют для совместимости. Старые ссылки не пересчитываются. Подтверждённые поступления в обзоре — это проверенные платежи за вычетом расходов по сохранённому расчёту, а не доступный остаток для вывода. Валюты старых счетов учитываются раздельно; выплаты согласуются с поддержкой. Подтверждение исполнения заказа проверяйте через payment.fulfillmentReady=true и payment.status=\"succeeded\" в серверном API, журнале событий или подписанном вебхуке."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": []
        }
      ],
      "group": "developers",
      "url": "/docs/payment-links-api",
      "body": "Создайте счёт из своего backend и сразу получите checkoutUrl. API поддерживает права ключей, идемпотентные повторы, отдельные доли комиссии и НДС, идентификатор заказа и приватные метаданные.\n\nСерверный запрос и готовая ссылка\n\nPOST /api/v1/payments и /api/v1/payment-links создают один и тот же тип счёта. Название маршрута payments не означает списание: результат — сохранённые условия и checkoutUrl для покупателя.\n\nОтправьте Authorization: Bearer <ключ>, Content-Type: application/json и Idempotency-Key. Ключ идемпотентности содержит 16–100 символов A–Z, a–z, 0–9, дефис или подчёркивание. Сохраните его на сервере для одного логического заказа.\n\ncurl 'https://kevmi.maxeevmax1.chatgpt.site/api/v1/payments' \\\n  -H \"Authorization: Bearer $KEVMI_API_KEY\" \\\n  -H 'Content-Type: application/json' \\\n  -H 'Idempotency-Key: order-1042-create-v1' \\\n  --data '{\"title\":\"Design project · order 1042\",\"description\":\"One-time payment for the agreed design work\",\"amountMinor\":500,\"currency\":\"USD\",\"methods\":[\"card\",\"alipay\"],\"vatCustomerPercent\":100,\"feeCustomerPercent\":0,\"orderId\":\"order-1042\",\"metadata\":{\"campaign\":\"autumn\"}}'\n\nОтвет содержит link, checkoutUrl и replayed. Передайте checkoutUrl покупателю или виджету; API-ключ остаётся на сервере.\n\nПрава и срок API-ключа\n\nСоздайте ключ в кабинете /account#keys после подтверждения аккаунта. Полное значение показывается один раз; в базе хранится только хеш. По умолчанию ключ действует 90 дней, допустимый срок — 1–365 дней. У аккаунта может быть до десяти активных ключей.\n\nВыдавайте только нужные права. Отзыв или истечение срока прекращают доступ. Ключ не заменяет браузерную сессию для настроек аккаунта, управления endpoints, заявок и модерации. Секрет не должен попадать в виджет, URL, публичный репозиторий или сообщения поддержки.\n\nБраузер сайта использует /api/payment-links с cookie сессии, точным Origin и X-CSRF-Token. Эти маршруты работают с теми же собственными счетами.\n\nПраво · Назначение\ninvoices:read · Читать собственные счета и их список\ninvoices:write · Создавать счета и менять доступность ссылок\nevents:read · Читать серверный журнал событий\n\nAPI-ключи в кабинете: https://kevmi.one/ru/account#keys\n\nAny и конкретные способы в API\n\nAny — режим выбора в интерфейсе. Для нового счёта API принимает methods: [\"card\", \"alipay\"] или непустое подмножество в USD; [\"sbp\"] в RUB; [\"crypto\"] в USDT. Значение any не является методом API.\n\nВ интерфейсе для нового счёта USD доступны карты и Alipay, для RUB — СБП, для USDT — криптовалюта. API для совместимости может сохранить USD + crypto, но такая криптооплата не запускается и возвращает crypto_requires_usdt. USD и USDT различаются; автоматической конвертации или курса 1:1 нет. Для криптооплаты нужен отдельный счёт в USDT.\n\nДля нового реального платежа картой или Alipay текущий шлюз поддерживает только feeCustomerPercent=0 и vatCustomerPercent=100: комиссию полностью покрывает магазин, НДС полностью добавляется покупателю. Остальные доли можно сохранить в счёте и рассчитать, но такой платёж не запускается и получает unsupported_allocation. Сервер не меняет сохранённые условия автоматически. Для СБП и USDT-криптооплаты доступны все доли комиссии; НДС у них отсутствует.\n\nРежим Any в кабинете: https://kevmi.one/ru/docs/payment-links#any\n\nСтраница оплаты: https://kevmi.one/ru/docs/checkout\n\nПоля и сохранённые условия\n\nСохраняются имя магазина, цена, валюта, методы, обе доли расходов и расчёты. Метаданные возвращаются владельцу и в серверных событиях, но не в публичном checkout. Не храните там платёжные секреты.\n\nЕсли доли пропущены, комиссия полностью относится к магазину; НДС наследует vatPayer или правило аккаунта. В промежуточном распределении ответ может содержать vatPayer=shared. Название заказа, orderId и описание публичны.\n\nПоле · Правило\ntitle / description · 1–120 / 0–500 символов\namountMinor · Целое 1–10 000 000 000; 500 означает $5,00 в USD\ncurrency / methods · USD: card, alipay; RUB: sbp; USDT: crypto. Непустой уникальный список.\nvatCustomerPercent / feeCustomerPercent · Две независимые целые доли покупателя 0–100\nvatPayer · Совместимость: customer или merchant; не противоречит доле НДС\norderId · Необязательно, до 100 символов; виден покупателю\nmetadata · До 10 строковых полей; ключ 1–40 A–Z a–z 0–9 _ -; значение до 500; всего до 3000 UTF-8 байт\nexpiresAt · Будущий Unix ms не дальше 90 дней; по умолчанию 7 дней\n\nДля совместимости API также сохраняет USD + crypto, но реальная криптооплата такого счёта блокируется с crypto_requires_usdt. Для нового криптосчёта передавайте USDT; автоматической конвертации нет.\n\nФормулы распределения расходов: https://kevmi.one/ru/docs/cost-sharing\n\nПовтор после ошибки сети\n\nПервое создание возвращает 201 и replayed=false. Тот же ключ с тем же каноническим телом возвращает 200, исходный checkoutUrl и replayed=true. Другой запрос с прежним ключом даёт 409 IDEMPOTENCY_CONFLICT.\n\nНе генерируйте новый ключ после тайм-аута. Повторите исходный запрос с теми же полями. Пропущенные значения не наследуют заново изменившиеся настройки. orderId помогает сопоставить заказ, но не заменяет Idempotency-Key и не обязан быть уникальным в базе.\n\nЧтение и пагинация\n\nGET /api/v1/payments возвращает links и nextCursor; GET /api/v1/payments/{id} — один принадлежащий владельцу link. Нужен invoices:read. Размер страницы по умолчанию 30, limit — от 1 до 100.\n\nОтветы GET списка и отдельного счёта включают link.payment: краткую сводку связанной операции или null, если операции ещё нет. Ответы POST/PATCH могут не включать это поле: при необходимости прочитайте счёт повторно. Состояние ссылки отдельно описывает возможность начать новый платёж. Реквизиты карты и закрытые ключи сюда не входят.\n\nПередавайте nextCursor без изменений через URLSearchParams. null означает конец списка; чужой и неизвестный ID возвращают 404.\n\nGET /api/v1/payments?limit=30\nAuthorization: Bearer <server-side key>\n\nПауза, возобновление и отмена\n\nPATCH /api/v1/payments/{id} с правом invoices:write принимает только {\"status\":\"active\"}, {\"status\":\"paused\"} или {\"status\":\"cancelled\"}. Отмена окончательна. expired определяется по сроку; истёкший счёт не продлевается.\n\nЦена, доли расходов, описание, orderId, метаданные и срок неизменны. Для других условий создайте новый счёт. Изменение доступности создаёт invoice.updated, а не событие успешного платежа.\n\nЧто получает покупатель\n\nGET /api/checkout/{token}?method=card возвращает публичный счёт, расчёт, доступность способа и существующую операцию. Метаданные владельца, секреты и баланс не раскрываются.\n\nPOST /api/checkout/{token}/pay требует Origin сайта и выбранный конкретный метод. Карта передаётся только в sealed: {intent,jwe}; предварительно браузер получает /card-intent. Код банка отправляется зашифрованным через /code. Для криптооплаты используется сохранённый USDT-счёт и доступная пара монеты/сети.\n\nНовый платёж и подготовка карточного запроса требуют одобренной последней заявки магазина на проверку сайта. Одобрение само по себе не подключает платёжный шлюз. Если проверка магазина изменилась после отправки платежа, уже созданная операция остаётся доступна для статуса, сверки и запрошенного банковского кода.\n\nОтсутствие рабочего соединения возвращает GATEWAY_NOT_CONNECTED; несовместимое распределение не заменяется другим расчётом. Статус и reconcile читают прежнюю операцию и не создают повторное списание.\n\nПлатёжный виджет: https://kevmi.one/ru/docs/widgets\n\nПодтверждение оплаты webhook: https://kevmi.one/ru/docs/webhooks\n\nНесколько магазинов и единая цена в USD\n\nВ меню магазина выберите «Все магазины» для общего обзора и операций или конкретный магазин для его данных. Каждый магазин имеет собственный storeId, название, правило НДС, счета, API-ключи, вебхуки, журнал событий и заявку на проверку сайта. Уведомления и обращения принадлежат аккаунту. Можно создать до 100 магазинов. Ранее созданные данные сохранены в первом магазине.\n\nНовые ссылки из кабинета используют pricingMode=\"universal\": базовая цена хранится в USD. Any включает card, alipay, sbp и crypto; при необходимости магазин выбирает подмножество. Карты и Alipay оплачиваются в USD, СБП — в RUB по официальному курсу USD/RUB Банка России, криптовалюта — в USDT по явно установленному соотношению 1 USD = 1 USDT. Это правило расчёта счёта, а не рыночная котировка USDT. Курс другой монеты и точные реквизиты предоставляет шлюз перед переводом.\n\nКурс ЦБ и обе суммы сохраняются при создании. Ссылки с рублёвой конвертацией действуют не более 24 часов. Если курс получить не удалось, создание возвращает FX_UNAVAILABLE; выдуманный или старый запасной курс не применяется. amountMinor и quotes в ответе владельцу выражены в базовой валюте USD; quotes[method].settlement содержит сумму и валюту конкретного способа. Публичный checkout возвращает выбранную валюту оплаты в currency, исходную цену в baseAmountMinor/baseCurrency и курс в fx. Возврат к другой валюте после отправки платежа запрещён: у счёта одна операция шлюза.\n\nДля серверной интеграции создайте API-ключ внутри выбранного магазина и передавайте Authorization: Bearer <key>. Привязка ключа к магазину неизменна: заголовок X-Kevmi-Store не позволяет получить данные другого магазина. Для браузерной сессии передавайте X-Kevmi-Store: <storeId>; без заголовка используется первый магазин. Значение all разрешено только для GET /api/account/dashboard и GET /api/payment-links. Изменения требуют выбранного магазина, Origin и X-CSRF-Token. ID аккаунта и ID магазина — разные идентификаторы.\n\nБез pricingMode=\"universal\" API сохраняет прежний режим native и исходные ограничения валют для совместимости. Старые ссылки не пересчитываются. Подтверждённые поступления в обзоре — это проверенные платежи за вычетом расходов по сохранённому расчёту, а не доступный остаток для вывода. Валюты старых счетов учитываются раздельно; выплаты согласуются с поддержкой. Подтверждение исполнения заказа проверяйте через payment.fulfillmentReady=true и payment.status=\"succeeded\" в серверном API, журнале событий или подписанном вебхуке.\n\n",
      "readMinutes": 7
    },
    {
      "id": "auth-api",
      "title": "API авторизации и сессии",
      "summary": "Вход построен на короткоживущем запросе, подтверждении в Telegram и доказательстве владения исходным браузером. Переданный клиентом Telegram ID не используется как подтверждение личности.",
      "group": "developers",
      "url": "/docs/auth-api",
      "tags": [
        "api",
        "авторизация",
        "сессия",
        "csrf",
        "challenge"
      ],
      "sections": [
        {
          "id": "start",
          "title": "Начало входа",
          "paragraphs": [
            "POST /api/auth/telegram/start принимает пустой JSON {}. Требует точного Origin приложения и настроенного бота. Сервер создаёт challenge на 300 секунд и защищённую cookie browser proof.",
            "Ответ 201 содержит challengeId, code, expiresAt и telegramUrl. Cookie доказательства не входит в deep link и недоступна JavaScript. Лимит — 6 запусков в минуту по хешу адреса."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": {
            "language": "JavaScript",
            "code": "const response = await fetch('/api/auth/telegram/start', {\n  method: 'POST',\n  headers: { 'Content-Type': 'application/json' },\n  body: '{}'\n});\nconst challenge = await response.json();\n// Покажите code и ссылку telegramUrl пользователю."
          },
          "note": "",
          "links": []
        },
        {
          "id": "complete",
          "title": "Ожидание подтверждения",
          "paragraphs": [
            "POST /api/auth/telegram/complete принимает {challengeId}. Требует Origin и proof cookie исходного браузера. Пока пользователь не подтвердил запрос, сервер возвращает 202 {status: \"pending\"}.",
            "После подтверждения возвращается 200: status=authenticated, user, csrfToken и expiresAt. Сессия выдаётся один раз. Просроченный запрос даёт 410, использованный или отменённый — 409."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": {
            "language": "JavaScript",
            "code": "const response = await fetch('/api/auth/telegram/complete', {\n  method: 'POST',\n  headers: { 'Content-Type': 'application/json' },\n  body: JSON.stringify({ challengeId: challenge.challengeId })\n});\nif (response.status === 202) {\n  // Повторите проверку с паузой; не создавайте новый challenge.\n}"
          },
          "note": "",
          "links": []
        },
        {
          "id": "me",
          "title": "Чтение сессии",
          "paragraphs": [
            "GET /api/auth/me без действующей сессии возвращает 200 {authenticated:false}. Авторизованный ответ содержит пользователя, CSRF и время окончания сессии.",
            "Cookie __Host-kevmi-session действует до 24 часов, имеет Secure, HttpOnly, SameSite=Lax и Path=/. В базе хранится SHA-256 токена. Значение cookie нельзя читать или подменять через форму профиля."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": []
        },
        {
          "id": "write",
          "title": "Изменения аккаунта",
          "paragraphs": [
            "Запросы изменения требуют сессию, точный Origin и X-CSRF-Token текущей сессии. Sec-Fetch-Site: cross-site отклоняется. Сервер не предоставляет произвольный CORS-доступ.",
            "Для чтения собственного аккаунта ID пользователя в теле не нужен: сервер получает его из сессии. Отсутствующая запись и чужая запись не раскрывают различающиеся сведения."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": []
        },
        {
          "id": "logout",
          "title": "Завершение входа",
          "paragraphs": [
            "POST /api/auth/logout завершает текущую сессию и очищает cookie. Требует Origin и CSRF; тело не читается. Команда /logout в Telegram дополнительно завершает все сессии аккаунта.",
            "При смене домена cookie не переносятся автоматически. Обновите APP_ORIGIN и webhook бота, затем выполните новый вход."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": []
        }
      ],
      "body": "Вход построен на короткоживущем запросе, подтверждении в Telegram и доказательстве владения исходным браузером. Переданный клиентом Telegram ID не используется как подтверждение личности.\n\nНачало входа\n\nPOST /api/auth/telegram/start принимает пустой JSON {}. Требует точного Origin приложения и настроенного бота. Сервер создаёт challenge на 300 секунд и защищённую cookie browser proof.\n\nОтвет 201 содержит challengeId, code, expiresAt и telegramUrl. Cookie доказательства не входит в deep link и недоступна JavaScript. Лимит — 6 запусков в минуту по хешу адреса.\n\nconst response = await fetch('/api/auth/telegram/start', {\n  method: 'POST',\n  headers: { 'Content-Type': 'application/json' },\n  body: '{}'\n});\nconst challenge = await response.json();\n// Покажите code и ссылку telegramUrl пользователю.\n\nОжидание подтверждения\n\nPOST /api/auth/telegram/complete принимает {challengeId}. Требует Origin и proof cookie исходного браузера. Пока пользователь не подтвердил запрос, сервер возвращает 202 {status: \"pending\"}.\n\nПосле подтверждения возвращается 200: status=authenticated, user, csrfToken и expiresAt. Сессия выдаётся один раз. Просроченный запрос даёт 410, использованный или отменённый — 409.\n\nconst response = await fetch('/api/auth/telegram/complete', {\n  method: 'POST',\n  headers: { 'Content-Type': 'application/json' },\n  body: JSON.stringify({ challengeId: challenge.challengeId })\n});\nif (response.status === 202) {\n  // Повторите проверку с паузой; не создавайте новый challenge.\n}\n\nЧтение сессии\n\nGET /api/auth/me без действующей сессии возвращает 200 {authenticated:false}. Авторизованный ответ содержит пользователя, CSRF и время окончания сессии.\n\nCookie __Host-kevmi-session действует до 24 часов, имеет Secure, HttpOnly, SameSite=Lax и Path=/. В базе хранится SHA-256 токена. Значение cookie нельзя читать или подменять через форму профиля.\n\nИзменения аккаунта\n\nЗапросы изменения требуют сессию, точный Origin и X-CSRF-Token текущей сессии. Sec-Fetch-Site: cross-site отклоняется. Сервер не предоставляет произвольный CORS-доступ.\n\nДля чтения собственного аккаунта ID пользователя в теле не нужен: сервер получает его из сессии. Отсутствующая запись и чужая запись не раскрывают различающиеся сведения.\n\nЗавершение входа\n\nPOST /api/auth/logout завершает текущую сессию и очищает cookie. Требует Origin и CSRF; тело не читается. Команда /logout в Telegram дополнительно завершает все сессии аккаунта.\n\nПри смене домена cookie не переносятся автоматически. Обновите APP_ORIGIN и webhook бота, затем выполните новый вход.",
      "readMinutes": 3
    },
    {
      "id": "errors",
      "title": "Ошибки и повторные запросы",
      "summary": "Ошибки API имеют одинаковый формат. Код предназначен для логики приложения, сообщение — для пользователя. Интерфейс должен сохранять введённые данные и объяснять следующий шаг.",
      "group": "developers",
      "url": "/docs/errors",
      "tags": [
        "ошибка",
        "error",
        "429",
        "503",
        "повтор",
        "status"
      ],
      "sections": [
        {
          "id": "format",
          "title": "Единый ответ",
          "paragraphs": [
            "Ответ не содержит stack trace, SQL, токены или полный ответ внешнего провайдера. Не показывайте пользователю необработанные внутренние логи."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": {
            "language": "JSON",
            "code": "{\n  \"error\": {\n    \"code\": \"GATEWAY_NOT_CONNECTED\",\n    \"message\": \"Денежные операции временно недоступны. Повторите позже или обратитесь в поддержку.\"\n  }\n}"
          },
          "note": "",
          "links": []
        },
        {
          "id": "codes",
          "title": "Основные группы",
          "paragraphs": [],
          "bullets": [],
          "steps": [],
          "table": {
            "headers": [
              "HTTP",
              "Типичные коды",
              "Что делать"
            ],
            "rows": [
              [
                "400",
                "INVALID_JSON, UNKNOWN_FIELD, INVALID_INPUT",
                "Исправить поля запроса"
              ],
              [
                "401",
                "AUTH_REQUIRED, SESSION_EXPIRED",
                "Войти повторно"
              ],
              [
                "403",
                "INVALID_ORIGIN, CSRF_REQUIRED",
                "Проверить origin и актуальную сессию"
              ],
              [
                "404",
                "NOT_FOUND, TICKET_NOT_FOUND",
                "Проверить адрес или принадлежность записи"
              ],
              [
                "409",
                "CHALLENGE_UNAVAILABLE",
                "Начать новый вход"
              ],
              [
                "410",
                "CHALLENGE_EXPIRED",
                "Создать новую ссылку входа"
              ],
              [
                "413",
                "REQUEST_TOO_LARGE",
                "Уменьшить тело"
              ],
              [
                "415",
                "JSON_REQUIRED",
                "Передать application/json"
              ],
              [
                "429",
                "RATE_LIMITED",
                "Снизить частоту и подождать"
              ],
              [
                "503",
                "GATEWAY_NOT_CONNECTED, SERVICE_UNAVAILABLE",
                "Проверить готовность интеграции или повторить позже"
              ]
            ]
          },
          "code": null,
          "note": "",
          "links": []
        },
        {
          "id": "rate",
          "title": "Ограничение частоты",
          "paragraphs": [],
          "bullets": [],
          "steps": [],
          "table": {
            "headers": [
              "Действие",
              "Лимит"
            ],
            "rows": [
              [
                "Начало входа",
                "6 в минуту по хешу адреса"
              ],
              [
                "Проверка challenge",
                "90 в минуту на challenge"
              ],
              [
                "Вопрос к базе знаний",
                "12 в минуту по хешу адреса при D1"
              ],
              [
                "Создание серверной ссылки",
                "20 в минуту на пользователя"
              ],
              [
                "Merchant API",
                "90 запросов в минуту на ключ"
              ],
              [
                "Новая заявка",
                "5 в сутки на пользователя"
              ],
              [
                "Продолжение заявки / решение модератора",
                "30 в минуту на пользователя для каждого действия"
              ],
              [
                "ИИ-обзор сайта",
                "30 в час на сервис"
              ],
              [
                "Чтение checkout и попытка оплаты",
                "90 в минуту по хешу адреса"
              ],
              [
                "Создание обращения",
                "6 в час на пользователя"
              ],
              [
                "Тест уведомления",
                "3 в час на пользователя"
              ],
              [
                "Генерация ИИ",
                "60 в час по умолчанию на весь сервис"
              ]
            ]
          },
          "code": null,
          "note": "Retry-After: 60 указывает на паузу, но не гарантирует, что часовая квота уже восстановилась.",
          "links": []
        },
        {
          "id": "retry",
          "title": "Что можно повторять",
          "paragraphs": [
            "Чтение состояния можно повторить с паузой при временной сетевой ошибке. Для изменений сначала проверьте, не выполнился ли исходный запрос: потеря ответа не доказывает отсутствие результата.",
            "Денежные операции требуют идемпотентного ключа и проверки статуса на сервере. Клиентский переход на страницу результата не заменяет подтверждение операции."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": []
        },
        {
          "id": "report",
          "title": "Что приложить к обращению",
          "paragraphs": [],
          "bullets": [
            "Адрес страницы и действие перед ошибкой.",
            "Время, часовой пояс и видимый код ошибки.",
            "Идентификатор своего счёта или обращения, если он есть.",
            "Короткое описание ожидаемого результата."
          ],
          "steps": [],
          "table": null,
          "code": null,
          "note": "Не прикладывайте cookie, токены, авторизационные заголовки, CVV и банковские коды.",
          "links": []
        }
      ],
      "body": "Ошибки API имеют одинаковый формат. Код предназначен для логики приложения, сообщение — для пользователя. Интерфейс должен сохранять введённые данные и объяснять следующий шаг.\n\nЕдиный ответ\n\nОтвет не содержит stack trace, SQL, токены или полный ответ внешнего провайдера. Не показывайте пользователю необработанные внутренние логи.\n\n{\n  \"error\": {\n    \"code\": \"GATEWAY_NOT_CONNECTED\",\n    \"message\": \"Денежные операции временно недоступны. Повторите позже или обратитесь в поддержку.\"\n  }\n}\n\nОсновные группы\n\nHTTP · Типичные коды · Что делать\n400 · INVALID_JSON, UNKNOWN_FIELD, INVALID_INPUT · Исправить поля запроса\n401 · AUTH_REQUIRED, SESSION_EXPIRED · Войти повторно\n403 · INVALID_ORIGIN, CSRF_REQUIRED · Проверить origin и актуальную сессию\n404 · NOT_FOUND, TICKET_NOT_FOUND · Проверить адрес или принадлежность записи\n409 · CHALLENGE_UNAVAILABLE · Начать новый вход\n410 · CHALLENGE_EXPIRED · Создать новую ссылку входа\n413 · REQUEST_TOO_LARGE · Уменьшить тело\n415 · JSON_REQUIRED · Передать application/json\n429 · RATE_LIMITED · Снизить частоту и подождать\n503 · GATEWAY_NOT_CONNECTED, SERVICE_UNAVAILABLE · Проверить готовность интеграции или повторить позже\n\nОграничение частоты\n\nДействие · Лимит\nНачало входа · 6 в минуту по хешу адреса\nПроверка challenge · 90 в минуту на challenge\nВопрос к базе знаний · 12 в минуту по хешу адреса при D1\nСоздание серверной ссылки · 20 в минуту на пользователя\nMerchant API · 90 запросов в минуту на ключ\nНовая заявка · 5 в сутки на пользователя\nПродолжение заявки / решение модератора · 30 в минуту на пользователя для каждого действия\nИИ-обзор сайта · 30 в час на сервис\nЧтение checkout и попытка оплаты · 90 в минуту по хешу адреса\nСоздание обращения · 6 в час на пользователя\nТест уведомления · 3 в час на пользователя\nГенерация ИИ · 60 в час по умолчанию на весь сервис\n\nRetry-After: 60 указывает на паузу, но не гарантирует, что часовая квота уже восстановилась.\n\nЧто можно повторять\n\nЧтение состояния можно повторить с паузой при временной сетевой ошибке. Для изменений сначала проверьте, не выполнился ли исходный запрос: потеря ответа не доказывает отсутствие результата.\n\nДенежные операции требуют идемпотентного ключа и проверки статуса на сервере. Клиентский переход на страницу результата не заменяет подтверждение операции.\n\nЧто приложить к обращению\n\nАдрес страницы и действие перед ошибкой.\n\nВремя, часовой пояс и видимый код ошибки.\n\nИдентификатор своего счёта или обращения, если он есть.\n\nКороткое описание ожидаемого результата.\n\nНе прикладывайте cookie, токены, авторизационные заголовки, CVV и банковские коды.",
      "readMinutes": 3
    },
    {
      "id": "security",
      "title": "Безопасность интеграции",
      "summary": "Доверенные проверки выполняются на сервере. Браузер управляет интерфейсом, но не устанавливает личность пользователя, денежный статус или окончательные суммы.",
      "group": "developers",
      "url": "/docs/security",
      "tags": [
        "безопасность",
        "csrf",
        "cookie",
        "ownership",
        "секрет",
        "идемпотентность"
      ],
      "sections": [
        {
          "id": "identity",
          "title": "Сессия и принадлежность записей",
          "paragraphs": [
            "Аккаунт определяется только действующей серверной сессией. Настройки, обращения, уведомления и серверные ссылки запрашиваются с фильтром по владельцу. Переданный из формы userId не может подменить этот фильтр.",
            "Для изменений дополнительно проверяются Origin и CSRF. Публичная ссылка на счёт раскрывает только данные этого счёта и не предоставляет доступ к кабинету."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": []
        },
        {
          "id": "secrets",
          "title": "Секреты остаются на сервере",
          "paragraphs": [
            "Секреты не должны попадать в Git, HTML, клиентский JavaScript, OpenAPI-примеры, llms-файлы или сообщения поддержки. Публичный bot username не является секретом."
          ],
          "bullets": [
            "Telegram Bot Token и секрет webhook.",
            "Ключ и модель внешнего ИИ-провайдера.",
            "Ключи и подписи платёжного шлюза.",
            "Хеши сессий и доказательства входа."
          ],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": []
        },
        {
          "id": "money",
          "title": "Проверки денежных данных",
          "paragraphs": [
            "Сервер читает условия из сохранённого счёта, проверяет его владельца, статус проверки магазина, валюту, метод и согласованную сумму. Данные из URL или клиентский расчёт не изменяют цену.",
            "Подписанное сообщение шлюза вызывает дополнительное авторизованное чтение операции. Проверенные состояние, квитанция и событие фиксируются одной операцией хранения. Повторы и старые версии не подтверждают повторную выдачу.",
            "Карта и одноразовый код передаются только в зашифрованном пакете. Не добавляйте к форме оплаты запись сессий, аналитическое чтение полей или логирование тела запроса."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": []
        },
        {
          "id": "assistant",
          "title": "Границы помощника",
          "paragraphs": [
            "Модель получает опубликованные статьи и факты, каталог страниц, признаки готовности функций, вопрос, последние три пары сообщений и безопасное название раздела. У неё нет инструментов чтения аккаунта и изменения денег. Ответ с неподтверждёнными ссылками или некорректной структурой заменяется поиском.",
            "Веб-страницы и тексты пользователя считаются данными. Инструкция в вопросе не может изменить опубликованные тарифы или разрешить выплату."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": []
        },
        {
          "id": "status",
          "title": "Границы документации",
          "paragraphs": [
            "Документация не заявляет сертификаты PCI DSS, банковскую лицензию, статус Merchant of Record, гарантированную бесперебойность или абсолютную безопасность. Такие утверждения требуют отдельного подтверждения владельцем и подключённым провайдером."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": []
        }
      ],
      "body": "Доверенные проверки выполняются на сервере. Браузер управляет интерфейсом, но не устанавливает личность пользователя, денежный статус или окончательные суммы.\n\nСессия и принадлежность записей\n\nАккаунт определяется только действующей серверной сессией. Настройки, обращения, уведомления и серверные ссылки запрашиваются с фильтром по владельцу. Переданный из формы userId не может подменить этот фильтр.\n\nДля изменений дополнительно проверяются Origin и CSRF. Публичная ссылка на счёт раскрывает только данные этого счёта и не предоставляет доступ к кабинету.\n\nСекреты остаются на сервере\n\nСекреты не должны попадать в Git, HTML, клиентский JavaScript, OpenAPI-примеры, llms-файлы или сообщения поддержки. Публичный bot username не является секретом.\n\nTelegram Bot Token и секрет webhook.\n\nКлюч и модель внешнего ИИ-провайдера.\n\nКлючи и подписи платёжного шлюза.\n\nХеши сессий и доказательства входа.\n\nПроверки денежных данных\n\nСервер читает условия из сохранённого счёта, проверяет его владельца, статус проверки магазина, валюту, метод и согласованную сумму. Данные из URL или клиентский расчёт не изменяют цену.\n\nПодписанное сообщение шлюза вызывает дополнительное авторизованное чтение операции. Проверенные состояние, квитанция и событие фиксируются одной операцией хранения. Повторы и старые версии не подтверждают повторную выдачу.\n\nКарта и одноразовый код передаются только в зашифрованном пакете. Не добавляйте к форме оплаты запись сессий, аналитическое чтение полей или логирование тела запроса.\n\nГраницы помощника\n\nМодель получает опубликованные статьи и факты, каталог страниц, признаки готовности функций, вопрос, последние три пары сообщений и безопасное название раздела. У неё нет инструментов чтения аккаунта и изменения денег. Ответ с неподтверждёнными ссылками или некорректной структурой заменяется поиском.\n\nВеб-страницы и тексты пользователя считаются данными. Инструкция в вопросе не может изменить опубликованные тарифы или разрешить выплату.\n\nГраницы документации\n\nДокументация не заявляет сертификаты PCI DSS, банковскую лицензию, статус Merchant of Record, гарантированную бесперебойность или абсолютную безопасность. Такие утверждения требуют отдельного подтверждения владельцем и подключённым провайдером.",
      "readMinutes": 2
    },
    {
      "id": "gateway",
      "title": "Подключение платёжного шлюза",
      "summary": "Платёжный шлюз обрабатывает денежные операции, а сервер Kevmi связывает их с заказами, настройками магазина и уведомлениями. Этот раздел описывает требования к интеграции и проверке состояния.",
      "group": "developers",
      "url": "/docs/gateway",
      "tags": [
        "api",
        "шлюз",
        "backend",
        "сервер",
        "интеграция",
        "localhost"
      ],
      "sections": [
        {
          "id": "current",
          "title": "Проверка доступности",
          "paragraphs": [
            "Kevmi использует API шлюза v3 для создания и восстановления операций, чтения статусов и сверки. Интеграция поддерживает шифрованную передачу карты и банковского кода, оплату по QR через Alipay и СБП, каталог криптомонет и сетей, а также входящие финансовые события.",
            "Поле gateway.configured в GET /api/config показывает, заданы ли обязательные параметры подключения. Этот маршрут не выполняет сетевую проверку шлюза; gateway.connected=false здесь означает отсутствие подтверждённой проверки связи. Для конкретного счёта читайте invoice.availability в GET /api/checkout/{token}: оно учитывает метод, сумму, условия и одобрение магазина. Совместимое поле invoice.gatewayConnected повторяет availability.available и также не является проверкой связи или гарантией одобрения платежа.",
            "Новый платёж и подготовка карточного запроса требуют одобренной последней заявки магазина на проверку сайта. Одобрение само по себе не подключает платёжный шлюз. Если проверка магазина изменилась после отправки платежа, уже созданная операция остаётся доступна для статуса, сверки и запрошенного банковского кода."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": []
        },
        {
          "id": "required",
          "title": "Контракт покупательской страницы",
          "paragraphs": [
            "Чувствительные данные шифруются в браузере с RSA-OAEP-256 и A256GCM. Закрытый ключ остаётся на шлюзе. Сервер Kevmi проверяет привязку намерения к счёту и назначению, передаёт пакет и не хранит открытые номер карты, CVV, имя покупателя, email, банковский код или сам пакет.",
            "Перед запуском карт на хост шлюза устанавливается расширение шифрованной передачи. Оно проверяет подпись намерения, срок, повтор, заказ и суммы. Открытого запасного маршрута для реквизитов нет. Это описание механизма защиты, а не заявление о сертификации PCI."
          ],
          "bullets": [],
          "steps": [],
          "table": {
            "headers": [
              "Маршрут Kevmi",
              "Назначение"
            ],
            "rows": [
              [
                "GET /api/checkout/{token}",
                "Счёт, расчёт, доступность способа и существующий payment"
              ],
              [
                "POST /api/checkout/{token}/card-intent",
                "Одноразовое намерение и публичный ключ для payment или code"
              ],
              [
                "POST /api/checkout/{token}/pay",
                "Запуск одной операции; карта передаётся как sealed: {intent,jwe}"
              ],
              [
                "POST /api/checkout/{token}/code",
                "Шифрованный одноразовый код для текущего запроса банка"
              ],
              [
                "GET /api/checkout/{token}/status",
                "Чтение прежней операции без нового списания"
              ],
              [
                "POST /api/checkout/{token}/reconcile",
                "Явная сверка прежней операции"
              ],
              [
                "GET /api/checkout/{token}/crypto-services",
                "Актуальные монеты, сети и лимиты для счёта USDT"
              ]
            ]
          },
          "code": null,
          "note": "",
          "links": []
        },
        {
          "id": "network",
          "title": "Размещение и соединение со шлюзом",
          "paragraphs": [
            "Kevmi поддерживает размещение в Sites на Cloudflare Workers с базой D1 и самостоятельное размещение на Node.js с SQLite. Для SQLite нужен постоянный том с резервным копированием. Платёжный шлюз запускается отдельным сервисом со своим постоянным хранилищем.",
            "Для внешнего шлюза задаётся доступный серверу HTTPS origin. В комплекте для самостоятельного размещения сервер обращается к фиксированному сервису шлюза внутри закрытой сети контейнеров; служебный API шлюза не публикуется в интернете. Публичный сайт и обратные вызовы используют HTTPS. Данные карты и банковский код дополнительно зашифрованы в браузере до передачи Kevmi.",
            "localhost обозначает текущий сервер или контейнер; он не предоставляет доступ к компьютеру владельца шлюза. Ключи и секреты соединения хранятся только в серверной конфигурации.",
            "Для собственного домена задайте публичный HTTPS origin в NEXT_PUBLIC_SITE_URL до сборки. Он используется в документации, канонических ссылках и материалах для индексации. Значение содержит только схему и хост с необязательным портом, без пути, параметров, фрагмента и учётных данных. Адрес должен соответствовать APP_ORIGIN серверной конфигурации."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": []
        },
        {
          "id": "adapter",
          "title": "Расчёт и поддерживаемые условия",
          "paragraphs": [
            "Новые ссылки кабинета используют единый расчёт в USD и Any для всех четырёх способов. СБП конвертируется в RUB по зафиксированному курсу ЦБ, криптооплата — в USDT по явному правилу 1:1. Прежний режим native сохраняется для старых ссылок и API-запросов без pricingMode=universal. Подробности — в разделе о магазинах и единой цене.",
            "Для нового реального платежа картой или Alipay текущий шлюз поддерживает только feeCustomerPercent=0 и vatCustomerPercent=100: комиссию полностью покрывает магазин, НДС полностью добавляется покупателю. Остальные доли можно сохранить в счёте и рассчитать, но такой платёж не запускается и получает unsupported_allocation. Сервер не меняет сохранённые условия автоматически. Для СБП и USDT-криптооплаты доступны все доли комиссии; НДС у них отсутствует.",
            "Передача произвольного total_cents не меняет налог провайдера. Несовпадение фактической суммы с сохранённым итогом переводит операцию на проверку и не подтверждает выдачу заказа. Данные business_balance шлюза сохраняются как сведения сверки; они не считаются балансом магазина Kevmi."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": []
        },
        {
          "id": "activation",
          "title": "Подключение рабочего шлюза",
          "paragraphs": [
            "Подключение включает серверную конфигурацию, проверку выбранных каналов и обработку подтверждённых финансовых событий. Наличие настроек проверяется отдельно от связи с провайдером. Успешный результат платежа принимается после сверки статуса и суммы операции. Инструкции для развёртывания находятся в ops/gateway-integration.md."
          ],
          "bullets": [],
          "steps": [
            "Разверните сервер Kevmi и шлюз отдельными сервисами. Настройте постоянное хранилище, резервное копирование и необходимые фоновые процессы.",
            "Для внешнего подключения задайте HTTPS origin в GATEWAY_BASE_URL. Комплект самостоятельного размещения использует настроенный внутренний сервис. В обоих случаях нужны серверный GATEWAY_API_KEY и отдельный GATEWAY_WEBHOOK_SECRET; секреты не передаются браузеру.",
            "На шлюзе задайте BACKEND_WEBHOOK_URL с путём /api/gateway/webhook и совпадающий BACKEND_WEBHOOK_SECRET.",
            "Включите шифрованную передачу карт и сохраните закрытый ключ исключительно на хосте шлюза. Проверьте доступность публичного ключа и совпадение параметров подписи намерений.",
            "Проверьте готовность каналов, ограничения и одобрение сайта магазина перед запуском."
          ],
          "table": null,
          "code": null,
          "note": "",
          "links": [
            {
              "label": "Webhook и повторные события",
              "href": "/docs/webhooks"
            },
            {
              "label": "Безопасность",
              "href": "/docs/security"
            }
          ]
        },
        {
          "id": "stores-usd",
          "title": "Несколько магазинов и единая цена в USD",
          "paragraphs": [
            "В меню магазина выберите «Все магазины» для общего обзора и операций или конкретный магазин для его данных. Каждый магазин имеет собственный storeId, название, правило НДС, счета, API-ключи, вебхуки, журнал событий и заявку на проверку сайта. Уведомления и обращения принадлежат аккаунту. Можно создать до 100 магазинов. Ранее созданные данные сохранены в первом магазине.",
            "Новые ссылки из кабинета используют pricingMode=\"universal\": базовая цена хранится в USD. Any включает card, alipay, sbp и crypto; при необходимости магазин выбирает подмножество. Карты и Alipay оплачиваются в USD, СБП — в RUB по официальному курсу USD/RUB Банка России, криптовалюта — в USDT по явно установленному соотношению 1 USD = 1 USDT. Это правило расчёта счёта, а не рыночная котировка USDT. Курс другой монеты и точные реквизиты предоставляет шлюз перед переводом.",
            "Курс ЦБ и обе суммы сохраняются при создании. Ссылки с рублёвой конвертацией действуют не более 24 часов. Если курс получить не удалось, создание возвращает FX_UNAVAILABLE; выдуманный или старый запасной курс не применяется. amountMinor и quotes в ответе владельцу выражены в базовой валюте USD; quotes[method].settlement содержит сумму и валюту конкретного способа. Публичный checkout возвращает выбранную валюту оплаты в currency, исходную цену в baseAmountMinor/baseCurrency и курс в fx. Возврат к другой валюте после отправки платежа запрещён: у счёта одна операция шлюза.",
            "Для серверной интеграции создайте API-ключ внутри выбранного магазина и передавайте Authorization: Bearer <key>. Привязка ключа к магазину неизменна: заголовок X-Kevmi-Store не позволяет получить данные другого магазина. Для браузерной сессии передавайте X-Kevmi-Store: <storeId>; без заголовка используется первый магазин. Значение all разрешено только для GET /api/account/dashboard и GET /api/payment-links. Изменения требуют выбранного магазина, Origin и X-CSRF-Token. ID аккаунта и ID магазина — разные идентификаторы.",
            "Без pricingMode=\"universal\" API сохраняет прежний режим native и исходные ограничения валют для совместимости. Старые ссылки не пересчитываются. Подтверждённые поступления в обзоре — это проверенные платежи за вычетом расходов по сохранённому расчёту, а не доступный остаток для вывода. Валюты старых счетов учитываются раздельно; выплаты согласуются с поддержкой. Подтверждение исполнения заказа проверяйте через payment.fulfillmentReady=true и payment.status=\"succeeded\" в серверном API, журнале событий или подписанном вебхуке."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": []
        }
      ],
      "body": "Платёжный шлюз обрабатывает денежные операции, а сервер Kevmi связывает их с заказами, настройками магазина и уведомлениями. Этот раздел описывает требования к интеграции и проверке состояния.\n\nПроверка доступности\n\nKevmi использует API шлюза v3 для создания и восстановления операций, чтения статусов и сверки. Интеграция поддерживает шифрованную передачу карты и банковского кода, оплату по QR через Alipay и СБП, каталог криптомонет и сетей, а также входящие финансовые события.\n\nПоле gateway.configured в GET /api/config показывает, заданы ли обязательные параметры подключения. Этот маршрут не выполняет сетевую проверку шлюза; gateway.connected=false здесь означает отсутствие подтверждённой проверки связи. Для конкретного счёта читайте invoice.availability в GET /api/checkout/{token}: оно учитывает метод, сумму, условия и одобрение магазина. Совместимое поле invoice.gatewayConnected повторяет availability.available и также не является проверкой связи или гарантией одобрения платежа.\n\nНовый платёж и подготовка карточного запроса требуют одобренной последней заявки магазина на проверку сайта. Одобрение само по себе не подключает платёжный шлюз. Если проверка магазина изменилась после отправки платежа, уже созданная операция остаётся доступна для статуса, сверки и запрошенного банковского кода.\n\nКонтракт покупательской страницы\n\nЧувствительные данные шифруются в браузере с RSA-OAEP-256 и A256GCM. Закрытый ключ остаётся на шлюзе. Сервер Kevmi проверяет привязку намерения к счёту и назначению, передаёт пакет и не хранит открытые номер карты, CVV, имя покупателя, email, банковский код или сам пакет.\n\nПеред запуском карт на хост шлюза устанавливается расширение шифрованной передачи. Оно проверяет подпись намерения, срок, повтор, заказ и суммы. Открытого запасного маршрута для реквизитов нет. Это описание механизма защиты, а не заявление о сертификации PCI.\n\nМаршрут Kevmi · Назначение\nGET /api/checkout/{token} · Счёт, расчёт, доступность способа и существующий payment\nPOST /api/checkout/{token}/card-intent · Одноразовое намерение и публичный ключ для payment или code\nPOST /api/checkout/{token}/pay · Запуск одной операции; карта передаётся как sealed: {intent,jwe}\nPOST /api/checkout/{token}/code · Шифрованный одноразовый код для текущего запроса банка\nGET /api/checkout/{token}/status · Чтение прежней операции без нового списания\nPOST /api/checkout/{token}/reconcile · Явная сверка прежней операции\nGET /api/checkout/{token}/crypto-services · Актуальные монеты, сети и лимиты для счёта USDT\n\nРазмещение и соединение со шлюзом\n\nKevmi поддерживает размещение в Sites на Cloudflare Workers с базой D1 и самостоятельное размещение на Node.js с SQLite. Для SQLite нужен постоянный том с резервным копированием. Платёжный шлюз запускается отдельным сервисом со своим постоянным хранилищем.\n\nДля внешнего шлюза задаётся доступный серверу HTTPS origin. В комплекте для самостоятельного размещения сервер обращается к фиксированному сервису шлюза внутри закрытой сети контейнеров; служебный API шлюза не публикуется в интернете. Публичный сайт и обратные вызовы используют HTTPS. Данные карты и банковский код дополнительно зашифрованы в браузере до передачи Kevmi.\n\nlocalhost обозначает текущий сервер или контейнер; он не предоставляет доступ к компьютеру владельца шлюза. Ключи и секреты соединения хранятся только в серверной конфигурации.\n\nДля собственного домена задайте публичный HTTPS origin в NEXT_PUBLIC_SITE_URL до сборки. Он используется в документации, канонических ссылках и материалах для индексации. Значение содержит только схему и хост с необязательным портом, без пути, параметров, фрагмента и учётных данных. Адрес должен соответствовать APP_ORIGIN серверной конфигурации.\n\nРасчёт и поддерживаемые условия\n\nНовые ссылки кабинета используют единый расчёт в USD и Any для всех четырёх способов. СБП конвертируется в RUB по зафиксированному курсу ЦБ, криптооплата — в USDT по явному правилу 1:1. Прежний режим native сохраняется для старых ссылок и API-запросов без pricingMode=universal. Подробности — в разделе о магазинах и единой цене.\n\nДля нового реального платежа картой или Alipay текущий шлюз поддерживает только feeCustomerPercent=0 и vatCustomerPercent=100: комиссию полностью покрывает магазин, НДС полностью добавляется покупателю. Остальные доли можно сохранить в счёте и рассчитать, но такой платёж не запускается и получает unsupported_allocation. Сервер не меняет сохранённые условия автоматически. Для СБП и USDT-криптооплаты доступны все доли комиссии; НДС у них отсутствует.\n\nПередача произвольного total_cents не меняет налог провайдера. Несовпадение фактической суммы с сохранённым итогом переводит операцию на проверку и не подтверждает выдачу заказа. Данные business_balance шлюза сохраняются как сведения сверки; они не считаются балансом магазина Kevmi.\n\nПодключение рабочего шлюза\n\nПодключение включает серверную конфигурацию, проверку выбранных каналов и обработку подтверждённых финансовых событий. Наличие настроек проверяется отдельно от связи с провайдером. Успешный результат платежа принимается после сверки статуса и суммы операции. Инструкции для развёртывания находятся в ops/gateway-integration.md.\n\n1. Разверните сервер Kevmi и шлюз отдельными сервисами. Настройте постоянное хранилище, резервное копирование и необходимые фоновые процессы.\n\n2. Для внешнего подключения задайте HTTPS origin в GATEWAY_BASE_URL. Комплект самостоятельного размещения использует настроенный внутренний сервис. В обоих случаях нужны серверный GATEWAY_API_KEY и отдельный GATEWAY_WEBHOOK_SECRET; секреты не передаются браузеру.\n\n3. На шлюзе задайте BACKEND_WEBHOOK_URL с путём /api/gateway/webhook и совпадающий BACKEND_WEBHOOK_SECRET.\n\n4. Включите шифрованную передачу карт и сохраните закрытый ключ исключительно на хосте шлюза. Проверьте доступность публичного ключа и совпадение параметров подписи намерений.\n\n5. Проверьте готовность каналов, ограничения и одобрение сайта магазина перед запуском.\n\nWebhook и повторные события: https://kevmi.one/docs/webhooks\n\nБезопасность: https://kevmi.one/docs/security\n\nНесколько магазинов и единая цена в USD\n\nВ меню магазина выберите «Все магазины» для общего обзора и операций или конкретный магазин для его данных. Каждый магазин имеет собственный storeId, название, правило НДС, счета, API-ключи, вебхуки, журнал событий и заявку на проверку сайта. Уведомления и обращения принадлежат аккаунту. Можно создать до 100 магазинов. Ранее созданные данные сохранены в первом магазине.\n\nНовые ссылки из кабинета используют pricingMode=\"universal\": базовая цена хранится в USD. Any включает card, alipay, sbp и crypto; при необходимости магазин выбирает подмножество. Карты и Alipay оплачиваются в USD, СБП — в RUB по официальному курсу USD/RUB Банка России, криптовалюта — в USDT по явно установленному соотношению 1 USD = 1 USDT. Это правило расчёта счёта, а не рыночная котировка USDT. Курс другой монеты и точные реквизиты предоставляет шлюз перед переводом.\n\nКурс ЦБ и обе суммы сохраняются при создании. Ссылки с рублёвой конвертацией действуют не более 24 часов. Если курс получить не удалось, создание возвращает FX_UNAVAILABLE; выдуманный или старый запасной курс не применяется. amountMinor и quotes в ответе владельцу выражены в базовой валюте USD; quotes[method].settlement содержит сумму и валюту конкретного способа. Публичный checkout возвращает выбранную валюту оплаты в currency, исходную цену в baseAmountMinor/baseCurrency и курс в fx. Возврат к другой валюте после отправки платежа запрещён: у счёта одна операция шлюза.\n\nДля серверной интеграции создайте API-ключ внутри выбранного магазина и передавайте Authorization: Bearer <key>. Привязка ключа к магазину неизменна: заголовок X-Kevmi-Store не позволяет получить данные другого магазина. Для браузерной сессии передавайте X-Kevmi-Store: <storeId>; без заголовка используется первый магазин. Значение all разрешено только для GET /api/account/dashboard и GET /api/payment-links. Изменения требуют выбранного магазина, Origin и X-CSRF-Token. ID аккаунта и ID магазина — разные идентификаторы.\n\nБез pricingMode=\"universal\" API сохраняет прежний режим native и исходные ограничения валют для совместимости. Старые ссылки не пересчитываются. Подтверждённые поступления в обзоре — это проверенные платежи за вычетом расходов по сохранённому расчёту, а не доступный остаток для вывода. Валюты старых счетов учитываются раздельно; выплаты согласуются с поддержкой. Подтверждение исполнения заказа проверяйте через payment.fulfillmentReady=true и payment.status=\"succeeded\" в серверном API, журнале событий или подписанном вебхуке.\n\n",
      "readMinutes": 5
    },
    {
      "id": "webhooks",
      "title": "Webhook: события, подпись и доставка",
      "summary": "Подключите свой HTTPS endpoint, подтвердите владение и принимайте подписанные события о счетах и платежах. Доставка хранится в очереди; повторное событие должно быть безопасным для вашего заказа.",
      "tags": [
        "webhook",
        "вебхук",
        "подпись",
        "HMAC",
        "идемпотентность",
        "event",
        "retry"
      ],
      "sections": [
        {
          "id": "sources",
          "title": "Откуда берутся события",
          "paragraphs": [
            "invoice.created не означает оплату. Платёжные события создаются из проверенной серверной операции после получения актуального ответа шлюза; одного названия входящего события недостаточно.",
            "Входящий шлюз → Kevmi и исходящий Kevmi → магазин — разные направления с отдельными секретами. Браузер, возврат и сообщения виджета не устанавливают финансовый результат."
          ],
          "bullets": [],
          "steps": [],
          "table": {
            "headers": [
              "Событие",
              "Источник"
            ],
            "rows": [
              [
                "invoice.created",
                "Счёт сохранён"
              ],
              [
                "invoice.updated",
                "Состояние ссылки изменено"
              ],
              [
                "payment.succeeded",
                "Точная оплата подтверждена сервером"
              ],
              [
                "payment.failed",
                "Проверена неуспешная операция"
              ],
              [
                "payment.refunded",
                "Подтверждён полный возврат"
              ],
              [
                "payment.partially_refunded",
                "Подтверждён частичный возврат"
              ],
              [
                "payment.disputed",
                "Подтверждён спор по операции"
              ],
              [
                "payment.review_required",
                "Операции нужна дополнительная проверка"
              ]
            ]
          },
          "code": null,
          "note": "",
          "links": []
        },
        {
          "id": "setup",
          "title": "Добавьте и подтвердите endpoint",
          "paragraphs": [
            "Адрес не может указывать на IP, localhost, внутреннюю сеть, нестандартный порт или содержать пароль. DNS проверяется перед отправкой; исходящий POST не следует перенаправлениям. В одном аккаунте может быть до пяти endpoints.",
            "Проверочное событие имеет livemode=false. Успешного HTTP-кода недостаточно: для проверки требуется точное подтверждение challenge. После смены секрета endpoint снова нуждается в проверке."
          ],
          "bullets": [],
          "steps": [
            "В кабинете /account#webhooks укажите публичный HTTPS-адрес, описание и нужные типы событий.",
            "Сохраните выданный секрет в серверном хранилище. Полное значение показывается один раз.",
            "Реализуйте проверку подписи по исходным байтам запроса.",
            "Запустите проверку endpoint. На endpoint.verification верните JSON с тем же data.challenge: {\"challenge\":\"полученное значение\"}.",
            "После успешной проверки включите endpoint и проверьте журнал доставки."
          ],
          "table": null,
          "code": null,
          "note": "",
          "links": [
            {
              "label": "Вебхуки в кабинете",
              "href": "/account#webhooks"
            }
          ]
        },
        {
          "id": "envelope",
          "title": "Формат события",
          "paragraphs": [
            "id стабилен при всех попытках доставки одного события. createdAt — Unix timestamp в миллисекундах, apiVersion фиксирует версию контракта. Поле data содержит сохранённый серверный объект; пример выше сокращён.",
            "livemode=true отличает рабочее серверное событие от проверки endpoint. Это поле не означает, что счёт оплачен: проверяйте type и данные операции. Обрабатывайте только известные типы и валидируйте схему."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": {
            "language": "JSON · shortened example",
            "code": "{\n  \"id\": \"evt_example\",\n  \"type\": \"invoice.created\",\n  \"apiVersion\": \"2026-10-21\",\n  \"createdAt\": 1792540800000,\n  \"livemode\": true,\n  \"data\": {\n    \"invoice\": {\n      \"id\": \"lnk_example\",\n      \"orderId\": \"order-1042\",\n      \"currency\": \"USD\",\n      \"amountMinor\": 500,\n      \"vatCustomerPercent\": 100,\n      \"feeCustomerPercent\": 0\n    }\n  }\n}"
          },
          "note": "",
          "links": []
        },
        {
          "id": "signature",
          "title": "Проверка HMAC-SHA256",
          "paragraphs": [
            "Kevmi-Signature имеет вид t=секунды,v1=hex. Подпись — HMAC-SHA256 от строки времени, точки и исходного тела: timestamp + \".\" + rawBody. Используйте секрет конкретного endpoint и постоянное по времени сравнение.",
            "Отклоняйте подпись, если время отличается от серверного более чем на 300 секунд в любую сторону. Синхронизируйте часы. Не разбирайте и не сериализуйте JSON заново перед проверкой: пробелы и порядок полей влияют на байты."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": {
            "language": "Node.js · verification core",
            "code": "import { createHmac, timingSafeEqual } from 'node:crypto';\n\nfunction verifyKevmi(rawBody, header, secret, nowSeconds) {\n  const match = /^t=(\\d{10}),v1=([a-f0-9]{64})$/.exec(header || '');\n  if (!match || Math.abs(nowSeconds - Number(match[1])) > 300) {\n    return false;\n  }\n  const expected = createHmac('sha256', secret)\n    .update(match[1] + '.')\n    .update(rawBody)\n    .digest();\n  const received = Buffer.from(match[2], 'hex');\n  return expected.length === received.length\n    && timingSafeEqual(expected, received);\n}\n\n// Read bytes before JSON parsing; cap the request body.\n// secret comes from your server secret store.\nconst valid = verifyKevmi(rawBody, signature, secret,\n  Math.floor(Date.now() / 1000));\nif (!valid) throw new Error('Invalid webhook signature');\nconst event = JSON.parse(rawBody.toString('utf8'));\n// Validate the event schema and persist its ID together\n// with your order update in one database transaction.\n// Return a 2xx response after durable acceptance."
          },
          "note": "Пример показывает проверку подписи. HTTP-сервер дополнительно ограничивает размер тела, проверяет схему и сохраняет событие транзакционно.",
          "links": []
        },
        {
          "id": "delivery",
          "title": "Повторы и подтверждение приёма",
          "paragraphs": [
            "Для обычного события любой ответ 2xx означает принятие. Надёжно сохраните событие до такого ответа; тяжёлую обработку можно выполнять собственной очередью. Тайм-аут ответа — 8 секунд. Ошибка сети и ответ вне диапазона 2xx вызывают повтор.",
            "Всего выполняется до шести попыток: первоначальная и повторы с задержками 1 минута, 5 минут, 30 минут, 2 часа и 12 часов после очередной неудачи. Это расписание очереди, а не гарантия точной секунды доставки. После исчерпания попыток запись получает failed.",
            "Доставка допускает повтор одного события и не обещает строгий порядок. Сохраняйте event ID с уникальным ограничением в той же транзакции, что и изменение заказа. Повтор уже применённого события возвращает 2xx без повторной выдачи товара.",
            "Ручной повтор в журнале заново запускает попытки и сохраняет исходные event ID, delivery ID и точное тело. Подпись получает свежее время для каждой доставки. Приостановленный endpoint сохраняет очередь; удалённый отменяет ожидающие и неудачные доставки."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": []
        },
        {
          "id": "reconcile",
          "title": "Журнал и восстановление",
          "paragraphs": [
            "В интерфейсе доступны состояние endpoint, последние доставки, число попыток, последний HTTP-ответ, ошибка и время следующей попытки. Причины проверки не заменяют серверный журнал вашего заказа.",
            "GET /api/v1/events с правом events:read возвращает до 50 событий и nextCursor. Передавайте непрозрачный nextCursor без изменений как cursor; null означает конец списка. Порядок фиксируется по createdAt и id. Прежний before в Unix ms поддерживается отдельно, но его нельзя сочетать с cursor. Подтверждённые endpoints получают выбранные события не раньше своей регистрации; при паузе очередь продолжает накапливаться и обрабатывается после возобновления. Это не обещает доставку истории до создания endpoint."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": [
            {
              "label": "Ключи и создание счёта",
              "href": "/docs/payment-links-api"
            }
          ]
        },
        {
          "id": "gateway",
          "title": "Проверка входящего события шлюза",
          "paragraphs": [
            "Шлюз v3 отправляет POST /api/gateway/webhook с X-Gateway-Event-Id, X-Gateway-Timestamp и X-Gateway-Signature: v1=<hex>. HMAC-SHA256 подписывает timestamp + \".\" + rawBody с GATEWAY_WEBHOOK_SECRET; допускается отклонение часов до 300 секунд. Проверяются совпадение ID заголовка и тела, версия API, live-режим и хеш тела.",
            "Повтор event ID с другим телом отклоняется. Подписанное уведомление запускает GET конкретной операции с серверным ключом. Проверяются заказ, метод, валюта, базовая и согласованная итоговая суммы и версия. Для успеха требуются fulfillment_ready=true и verification=provider_confirmed, точная сумма и отсутствие спора; криптовалюта требует подтверждённых данных расчёта.",
            "Получение входящего события, запись квитанции и исходящее событие магазина защищены от дублей. Старые форматы браузерных сообщений не устанавливают успешную оплату. В исходящий webhook магазина не включаются реквизиты, банковские коды, QR, ключи провайдера или секрет шлюза."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": []
        },
        {
          "id": "telegram",
          "title": "Telegram использует отдельный контракт",
          "paragraphs": [
            "POST /api/telegram/webhook проверяет X-Telegram-Bot-Api-Secret-Token, структуру update и отправителя. update_id защищает от повторной обработки. Этот маршрут обслуживает вход, команды, поддержку и действия модерации; он не принимает финансовые квитанции.",
            "Токен бота, секрет webhook, регистрация setWebhook и доступный HTTPS-адрес настраиваются владельцем развёртывания. Они не совпадают с секретом endpoint магазина."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": []
        },
        {
          "id": "stores-usd",
          "title": "Несколько магазинов и единая цена в USD",
          "paragraphs": [
            "В меню магазина выберите «Все магазины» для общего обзора и операций или конкретный магазин для его данных. Каждый магазин имеет собственный storeId, название, правило НДС, счета, API-ключи, вебхуки, журнал событий и заявку на проверку сайта. Уведомления и обращения принадлежат аккаунту. Можно создать до 100 магазинов. Ранее созданные данные сохранены в первом магазине.",
            "Новые ссылки из кабинета используют pricingMode=\"universal\": базовая цена хранится в USD. Any включает card, alipay, sbp и crypto; при необходимости магазин выбирает подмножество. Карты и Alipay оплачиваются в USD, СБП — в RUB по официальному курсу USD/RUB Банка России, криптовалюта — в USDT по явно установленному соотношению 1 USD = 1 USDT. Это правило расчёта счёта, а не рыночная котировка USDT. Курс другой монеты и точные реквизиты предоставляет шлюз перед переводом.",
            "Курс ЦБ и обе суммы сохраняются при создании. Ссылки с рублёвой конвертацией действуют не более 24 часов. Если курс получить не удалось, создание возвращает FX_UNAVAILABLE; выдуманный или старый запасной курс не применяется. amountMinor и quotes в ответе владельцу выражены в базовой валюте USD; quotes[method].settlement содержит сумму и валюту конкретного способа. Публичный checkout возвращает выбранную валюту оплаты в currency, исходную цену в baseAmountMinor/baseCurrency и курс в fx. Возврат к другой валюте после отправки платежа запрещён: у счёта одна операция шлюза.",
            "Для серверной интеграции создайте API-ключ внутри выбранного магазина и передавайте Authorization: Bearer <key>. Привязка ключа к магазину неизменна: заголовок X-Kevmi-Store не позволяет получить данные другого магазина. Для браузерной сессии передавайте X-Kevmi-Store: <storeId>; без заголовка используется первый магазин. Значение all разрешено только для GET /api/account/dashboard и GET /api/payment-links. Изменения требуют выбранного магазина, Origin и X-CSRF-Token. ID аккаунта и ID магазина — разные идентификаторы.",
            "Без pricingMode=\"universal\" API сохраняет прежний режим native и исходные ограничения валют для совместимости. Старые ссылки не пересчитываются. Подтверждённые поступления в обзоре — это проверенные платежи за вычетом расходов по сохранённому расчёту, а не доступный остаток для вывода. Валюты старых счетов учитываются раздельно; выплаты согласуются с поддержкой. Подтверждение исполнения заказа проверяйте через payment.fulfillmentReady=true и payment.status=\"succeeded\" в серверном API, журнале событий или подписанном вебхуке."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": []
        }
      ],
      "group": "developers",
      "url": "/docs/webhooks",
      "body": "Подключите свой HTTPS endpoint, подтвердите владение и принимайте подписанные события о счетах и платежах. Доставка хранится в очереди; повторное событие должно быть безопасным для вашего заказа.\n\nОткуда берутся события\n\ninvoice.created не означает оплату. Платёжные события создаются из проверенной серверной операции после получения актуального ответа шлюза; одного названия входящего события недостаточно.\n\nВходящий шлюз → Kevmi и исходящий Kevmi → магазин — разные направления с отдельными секретами. Браузер, возврат и сообщения виджета не устанавливают финансовый результат.\n\nСобытие · Источник\ninvoice.created · Счёт сохранён\ninvoice.updated · Состояние ссылки изменено\npayment.succeeded · Точная оплата подтверждена сервером\npayment.failed · Проверена неуспешная операция\npayment.refunded · Подтверждён полный возврат\npayment.partially_refunded · Подтверждён частичный возврат\npayment.disputed · Подтверждён спор по операции\npayment.review_required · Операции нужна дополнительная проверка\n\nДобавьте и подтвердите endpoint\n\nАдрес не может указывать на IP, localhost, внутреннюю сеть, нестандартный порт или содержать пароль. DNS проверяется перед отправкой; исходящий POST не следует перенаправлениям. В одном аккаунте может быть до пяти endpoints.\n\nПроверочное событие имеет livemode=false. Успешного HTTP-кода недостаточно: для проверки требуется точное подтверждение challenge. После смены секрета endpoint снова нуждается в проверке.\n\n1. В кабинете /account#webhooks укажите публичный HTTPS-адрес, описание и нужные типы событий.\n\n2. Сохраните выданный секрет в серверном хранилище. Полное значение показывается один раз.\n\n3. Реализуйте проверку подписи по исходным байтам запроса.\n\n4. Запустите проверку endpoint. На endpoint.verification верните JSON с тем же data.challenge: {\"challenge\":\"полученное значение\"}.\n\n5. После успешной проверки включите endpoint и проверьте журнал доставки.\n\nВебхуки в кабинете: https://kevmi.one/ru/account#webhooks\n\nФормат события\n\nid стабилен при всех попытках доставки одного события. createdAt — Unix timestamp в миллисекундах, apiVersion фиксирует версию контракта. Поле data содержит сохранённый серверный объект; пример выше сокращён.\n\nlivemode=true отличает рабочее серверное событие от проверки endpoint. Это поле не означает, что счёт оплачен: проверяйте type и данные операции. Обрабатывайте только известные типы и валидируйте схему.\n\n{\n  \"id\": \"evt_example\",\n  \"type\": \"invoice.created\",\n  \"apiVersion\": \"2026-10-21\",\n  \"createdAt\": 1792540800000,\n  \"livemode\": true,\n  \"data\": {\n    \"invoice\": {\n      \"id\": \"lnk_example\",\n      \"orderId\": \"order-1042\",\n      \"currency\": \"USD\",\n      \"amountMinor\": 500,\n      \"vatCustomerPercent\": 100,\n      \"feeCustomerPercent\": 0\n    }\n  }\n}\n\nПроверка HMAC-SHA256\n\nKevmi-Signature имеет вид t=секунды,v1=hex. Подпись — HMAC-SHA256 от строки времени, точки и исходного тела: timestamp + \".\" + rawBody. Используйте секрет конкретного endpoint и постоянное по времени сравнение.\n\nОтклоняйте подпись, если время отличается от серверного более чем на 300 секунд в любую сторону. Синхронизируйте часы. Не разбирайте и не сериализуйте JSON заново перед проверкой: пробелы и порядок полей влияют на байты.\n\nimport { createHmac, timingSafeEqual } from 'node:crypto';\n\nfunction verifyKevmi(rawBody, header, secret, nowSeconds) {\n  const match = /^t=(\\d{10}),v1=([a-f0-9]{64})$/.exec(header || '');\n  if (!match || Math.abs(nowSeconds - Number(match[1])) > 300) {\n    return false;\n  }\n  const expected = createHmac('sha256', secret)\n    .update(match[1] + '.')\n    .update(rawBody)\n    .digest();\n  const received = Buffer.from(match[2], 'hex');\n  return expected.length === received.length\n    && timingSafeEqual(expected, received);\n}\n\n// Read bytes before JSON parsing; cap the request body.\n// secret comes from your server secret store.\nconst valid = verifyKevmi(rawBody, signature, secret,\n  Math.floor(Date.now() / 1000));\nif (!valid) throw new Error('Invalid webhook signature');\nconst event = JSON.parse(rawBody.toString('utf8'));\n// Validate the event schema and persist its ID together\n// with your order update in one database transaction.\n// Return a 2xx response after durable acceptance.\n\nПример показывает проверку подписи. HTTP-сервер дополнительно ограничивает размер тела, проверяет схему и сохраняет событие транзакционно.\n\nПовторы и подтверждение приёма\n\nДля обычного события любой ответ 2xx означает принятие. Надёжно сохраните событие до такого ответа; тяжёлую обработку можно выполнять собственной очередью. Тайм-аут ответа — 8 секунд. Ошибка сети и ответ вне диапазона 2xx вызывают повтор.\n\nВсего выполняется до шести попыток: первоначальная и повторы с задержками 1 минута, 5 минут, 30 минут, 2 часа и 12 часов после очередной неудачи. Это расписание очереди, а не гарантия точной секунды доставки. После исчерпания попыток запись получает failed.\n\nДоставка допускает повтор одного события и не обещает строгий порядок. Сохраняйте event ID с уникальным ограничением в той же транзакции, что и изменение заказа. Повтор уже применённого события возвращает 2xx без повторной выдачи товара.\n\nРучной повтор в журнале заново запускает попытки и сохраняет исходные event ID, delivery ID и точное тело. Подпись получает свежее время для каждой доставки. Приостановленный endpoint сохраняет очередь; удалённый отменяет ожидающие и неудачные доставки.\n\nЖурнал и восстановление\n\nВ интерфейсе доступны состояние endpoint, последние доставки, число попыток, последний HTTP-ответ, ошибка и время следующей попытки. Причины проверки не заменяют серверный журнал вашего заказа.\n\nGET /api/v1/events с правом events:read возвращает до 50 событий и nextCursor. Передавайте непрозрачный nextCursor без изменений как cursor; null означает конец списка. Порядок фиксируется по createdAt и id. Прежний before в Unix ms поддерживается отдельно, но его нельзя сочетать с cursor. Подтверждённые endpoints получают выбранные события не раньше своей регистрации; при паузе очередь продолжает накапливаться и обрабатывается после возобновления. Это не обещает доставку истории до создания endpoint.\n\nКлючи и создание счёта: https://kevmi.one/ru/docs/payment-links-api\n\nПроверка входящего события шлюза\n\nШлюз v3 отправляет POST /api/gateway/webhook с X-Gateway-Event-Id, X-Gateway-Timestamp и X-Gateway-Signature: v1=<hex>. HMAC-SHA256 подписывает timestamp + \".\" + rawBody с GATEWAY_WEBHOOK_SECRET; допускается отклонение часов до 300 секунд. Проверяются совпадение ID заголовка и тела, версия API, live-режим и хеш тела.\n\nПовтор event ID с другим телом отклоняется. Подписанное уведомление запускает GET конкретной операции с серверным ключом. Проверяются заказ, метод, валюта, базовая и согласованная итоговая суммы и версия. Для успеха требуются fulfillment_ready=true и verification=provider_confirmed, точная сумма и отсутствие спора; криптовалюта требует подтверждённых данных расчёта.\n\nПолучение входящего события, запись квитанции и исходящее событие магазина защищены от дублей. Старые форматы браузерных сообщений не устанавливают успешную оплату. В исходящий webhook магазина не включаются реквизиты, банковские коды, QR, ключи провайдера или секрет шлюза.\n\nTelegram использует отдельный контракт\n\nPOST /api/telegram/webhook проверяет X-Telegram-Bot-Api-Secret-Token, структуру update и отправителя. update_id защищает от повторной обработки. Этот маршрут обслуживает вход, команды, поддержку и действия модерации; он не принимает финансовые квитанции.\n\nТокен бота, секрет webhook, регистрация setWebhook и доступный HTTPS-адрес настраиваются владельцем развёртывания. Они не совпадают с секретом endpoint магазина.\n\nНесколько магазинов и единая цена в USD\n\nВ меню магазина выберите «Все магазины» для общего обзора и операций или конкретный магазин для его данных. Каждый магазин имеет собственный storeId, название, правило НДС, счета, API-ключи, вебхуки, журнал событий и заявку на проверку сайта. Уведомления и обращения принадлежат аккаунту. Можно создать до 100 магазинов. Ранее созданные данные сохранены в первом магазине.\n\nНовые ссылки из кабинета используют pricingMode=\"universal\": базовая цена хранится в USD. Any включает card, alipay, sbp и crypto; при необходимости магазин выбирает подмножество. Карты и Alipay оплачиваются в USD, СБП — в RUB по официальному курсу USD/RUB Банка России, криптовалюта — в USDT по явно установленному соотношению 1 USD = 1 USDT. Это правило расчёта счёта, а не рыночная котировка USDT. Курс другой монеты и точные реквизиты предоставляет шлюз перед переводом.\n\nКурс ЦБ и обе суммы сохраняются при создании. Ссылки с рублёвой конвертацией действуют не более 24 часов. Если курс получить не удалось, создание возвращает FX_UNAVAILABLE; выдуманный или старый запасной курс не применяется. amountMinor и quotes в ответе владельцу выражены в базовой валюте USD; quotes[method].settlement содержит сумму и валюту конкретного способа. Публичный checkout возвращает выбранную валюту оплаты в currency, исходную цену в baseAmountMinor/baseCurrency и курс в fx. Возврат к другой валюте после отправки платежа запрещён: у счёта одна операция шлюза.\n\nДля серверной интеграции создайте API-ключ внутри выбранного магазина и передавайте Authorization: Bearer <key>. Привязка ключа к магазину неизменна: заголовок X-Kevmi-Store не позволяет получить данные другого магазина. Для браузерной сессии передавайте X-Kevmi-Store: <storeId>; без заголовка используется первый магазин. Значение all разрешено только для GET /api/account/dashboard и GET /api/payment-links. Изменения требуют выбранного магазина, Origin и X-CSRF-Token. ID аккаунта и ID магазина — разные идентификаторы.\n\nБез pricingMode=\"universal\" API сохраняет прежний режим native и исходные ограничения валют для совместимости. Старые ссылки не пересчитываются. Подтверждённые поступления в обзоре — это проверенные платежи за вычетом расходов по сохранённому расчёту, а не доступный остаток для вывода. Валюты старых счетов учитываются раздельно; выплаты согласуются с поддержкой. Подтверждение исполнения заказа проверяйте через payment.fulfillmentReady=true и payment.status=\"succeeded\" в серверном API, журнале событий или подписанном вебхуке.\n\n",
      "readMinutes": 7
    },
    {
      "id": "limits",
      "title": "Лимиты и условия доступности",
      "summary": "Доступность платежа зависит от способа оплаты, суммы, страны и условий конкретного счёта. Перед подтверждением проверьте итог, ограничения и применимый срок.",
      "group": "payments",
      "url": "/docs/limits",
      "tags": [
        "лимит",
        "срок",
        "холд",
        "возврат",
        "refund",
        "chargeback",
        "ограничения"
      ],
      "sections": [
        {
          "id": "pending",
          "title": "Пределы адаптера и канала",
          "paragraphs": [
            "Kevmi проверяет диапазоны ниже перед созданием операции. У платёжного канала могут действовать дополнительные ограничения; сумма внутри диапазона не гарантирует одобрение конкретной оплаты. Изменение настроек шлюза не меняет автоматически пределы Kevmi.",
            "Новый платёж и подготовка карточного запроса требуют одобренной последней заявки магазина на проверку сайта. Одобрение само по себе не подключает платёжный шлюз. Если проверка магазина изменилась после отправки платежа, уже созданная операция остаётся доступна для статуса, сверки и запрошенного банковского кода."
          ],
          "bullets": [],
          "steps": [],
          "table": {
            "headers": [
              "Способ",
              "Проверяемая сумма",
              "Диапазон Kevmi"
            ],
            "rows": [
              [
                "Карты / Alipay",
                "Базовая цена USD",
                "$1–$1 000"
              ],
              [
                "СБП",
                "Итог покупателя RUB",
                "₽1–₽100 000"
              ],
              [
                "Криптовалюта",
                "Итог покупателя USDT",
                "1–1 000 000 USDT + лимиты выбранной сети"
              ]
            ]
          },
          "code": null,
          "note": "",
          "links": []
        },
        {
          "id": "validation",
          "title": "Техническая проверка не равна тарифному лимиту",
          "paragraphs": [
            "Калькулятор и API отклоняют отрицательные суммы, неверную валюту и расчёт, при котором доля комиссии и НДС магазина превышает базовую сумму. Это защита корректности данных.",
            "Такая защита не означает, что любой прошедший арифметическую проверку платёж доступен у провайдера. Платёжный канал отдельно проверяет коммерческие и риск-лимиты."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": []
        },
        {
          "id": "refunds",
          "title": "Возврат и спорная операция",
          "paragraphs": [
            "Проверенные состояния возврата, частичного возврата, спора и дополнительной проверки отражаются в операции и исходящих событиях магазина. Это не означает, что в кабинете реализовано создание возврата или выплаты.",
            "Не выдавайте заказ повторно при payment.partially_refunded, payment.refunded, payment.disputed или payment.review_required. Сохраняйте исходную связь заказа и платежа и передавайте спорные случаи ответственному сотруднику."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": []
        },
        {
          "id": "subscriptions",
          "title": "Регулярные списания",
          "paragraphs": [
            "Подписок и рекуррентных платежей в Kevmi нет. Сохранённая ссылка на заказ не даёт права на автоматическое повторное списание. Каждый новый заказ оплачивается отдельно."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": []
        },
        {
          "id": "ready",
          "title": "Проверка готовности",
          "paragraphs": [
            "В /api/config поле gateway.configured показывает наличие обязательных настроек шлюза, а /api/health проверяет серверное хранилище. Ни один из этих признаков не подтверждает связь с платёжным провайдером. Для условий конкретного счёта используйте invoice.availability в GET /api/checkout/{token}; итог оплаты подтверждается отдельно по операции шлюза."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": [
            {
              "label": "Условия подключения",
              "href": "/docs/gateway"
            },
            {
              "label": "Уточнить свой сценарий",
              "href": "/?support=open"
            }
          ]
        }
      ],
      "body": "Доступность платежа зависит от способа оплаты, суммы, страны и условий конкретного счёта. Перед подтверждением проверьте итог, ограничения и применимый срок.\n\nПределы адаптера и канала\n\nKevmi проверяет диапазоны ниже перед созданием операции. У платёжного канала могут действовать дополнительные ограничения; сумма внутри диапазона не гарантирует одобрение конкретной оплаты. Изменение настроек шлюза не меняет автоматически пределы Kevmi.\n\nНовый платёж и подготовка карточного запроса требуют одобренной последней заявки магазина на проверку сайта. Одобрение само по себе не подключает платёжный шлюз. Если проверка магазина изменилась после отправки платежа, уже созданная операция остаётся доступна для статуса, сверки и запрошенного банковского кода.\n\nСпособ · Проверяемая сумма · Диапазон Kevmi\nКарты / Alipay · Базовая цена USD · $1–$1 000\nСБП · Итог покупателя RUB · ₽1–₽100 000\nКриптовалюта · Итог покупателя USDT · 1–1 000 000 USDT + лимиты выбранной сети\n\nТехническая проверка не равна тарифному лимиту\n\nКалькулятор и API отклоняют отрицательные суммы, неверную валюту и расчёт, при котором доля комиссии и НДС магазина превышает базовую сумму. Это защита корректности данных.\n\nТакая защита не означает, что любой прошедший арифметическую проверку платёж доступен у провайдера. Платёжный канал отдельно проверяет коммерческие и риск-лимиты.\n\nВозврат и спорная операция\n\nПроверенные состояния возврата, частичного возврата, спора и дополнительной проверки отражаются в операции и исходящих событиях магазина. Это не означает, что в кабинете реализовано создание возврата или выплаты.\n\nНе выдавайте заказ повторно при payment.partially_refunded, payment.refunded, payment.disputed или payment.review_required. Сохраняйте исходную связь заказа и платежа и передавайте спорные случаи ответственному сотруднику.\n\nРегулярные списания\n\nПодписок и рекуррентных платежей в Kevmi нет. Сохранённая ссылка на заказ не даёт права на автоматическое повторное списание. Каждый новый заказ оплачивается отдельно.\n\nПроверка готовности\n\nВ /api/config поле gateway.configured показывает наличие обязательных настроек шлюза, а /api/health проверяет серверное хранилище. Ни один из этих признаков не подтверждает связь с платёжным провайдером. Для условий конкретного счёта используйте invoice.availability в GET /api/checkout/{token}; итог оплаты подтверждается отдельно по операции шлюза.\n\nУсловия подключения: https://kevmi.one/docs/gateway\n\nУточнить свой сценарий: https://kevmi.one/?support=open",
      "readMinutes": 3
    },
    {
      "id": "agent-access",
      "title": "Материалы для поисковиков и ИИ",
      "summary": "Публичная информация Kevmi доступна в серверном HTML, обычном тексте и структурированных форматах. Все представления используют одну базу знаний и одну версию условий.",
      "group": "developers",
      "url": "/docs/agent-access",
      "tags": [
        "seo",
        "индексация",
        "llms",
        "robots",
        "sitemap",
        "агент",
        "json"
      ],
      "sections": [
        {
          "id": "files",
          "title": "Открытые адреса",
          "paragraphs": [],
          "bullets": [],
          "steps": [],
          "table": {
            "headers": [
              "Адрес",
              "Содержание"
            ],
            "rows": [
              [
                "/docs",
                "Навигация по руководствам"
              ],
              [
                "/llms.txt",
                "Оглавление и основные факты на английском языке"
              ],
              [
                "/llms-full.txt",
                "Полный текст базы знаний на английском языке"
              ],
              [
                "/knowledge.json",
                "Факты, тарифы, статьи и версия"
              ],
              [
                "/openapi.json",
                "Контракт реализованного API"
              ],
              [
                "/sitemap.xml",
                "Публичные страницы для поиска"
              ],
              [
                "/robots.txt",
                "Указания роботам"
              ]
            ]
          },
          "code": null,
          "note": "",
          "links": []
        },
        {
          "id": "facts",
          "title": "Как читать факты",
          "paragraphs": [
            "knowledge.facts.countries.card содержит правило worldwide_except_restrictions, список исключений restrictions и справочник ISO-кодов exactList. countryCount — число записей справочника, coverageLabel — опубликованное покрытие 190+. Наличие страны не гарантирует одобрение каждой операции.",
            "source=owner_provided и status=owner_list_received обозначают происхождение списка. independentlyVerified=false и verifiedCountryCount=null означают, что отдельная проверка на работающем шлюзе не выполнена; список при этом получен и опубликован.",
            "partialCoverage перечисляет страны с **, где доступны не все локации. unresolvedFootnotes сохраняет отдельную неуточнённую сноску * у Китая. coverage=listed означает присутствие в перечне, partial_locations — ограничение по локациям, footnote_pending — неуточнённую сноску; ни одно значение не гарантирует одобрение любой карты.",
            "gatewayConnected=null и gatewayIntegration.liveConfigurationProvided=null означают, что статическая база знаний не содержит состояния конкретного развёртывания. gatewayIntegration.availability указывает маршруты для актуальных проверок. Поле gateway.configured в /api/config подтверждает наличие настроек, но не связь с провайдером. invoice.availability в ответе checkout описывает доступность условий счёта, а совместимое invoice.gatewayConnected повторяет availability.available. Ни одно поле не заменяет подтверждение операции. gatewayIntegration.adapterImplemented=true описывает поддержку протокола v3; subscriptionsSupported=false исключает регулярные списания."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": {
            "language": "JSON · фрагмент фактов",
            "code": "{\n  \"subscriptionsSupported\": false,\n  \"gatewayConnected\": null,\n  \"countries\": {\n    \"card\": {\n      \"countryCount\": 223,\n      \"ownerReportedCountryCount\": null,\n      \"coverageLabel\": \"190+\",\n      \"restrictions\": [\n        {\n          \"code\": \"AF\",\n          \"name\": \"Афганистан\",\n          \"nameEn\": \"Afghanistan\"\n        },\n        {\n          \"code\": \"AQ\",\n          \"name\": \"Антарктида\",\n          \"nameEn\": \"Antarctica\"\n        },\n        {\n          \"code\": \"BY\",\n          \"name\": \"Беларусь\",\n          \"nameEn\": \"Belarus\"\n        },\n        {\n          \"code\": \"MM\",\n          \"name\": \"Мьянма (Бирма)\",\n          \"nameEn\": \"Burma (Myanmar)\"\n        },\n        {\n          \"code\": \"BI\",\n          \"name\": \"Бурунди\",\n          \"nameEn\": \"Burundi\"\n        },\n        {\n          \"code\": \"CF\",\n          \"name\": \"Центрально-Африканская Республика\",\n          \"nameEn\": \"Central African Republic\"\n        },\n        {\n          \"code\": \"TD\",\n          \"name\": \"Чад\",\n          \"nameEn\": \"Chad\"\n        },\n        {\n          \"code\": \"CU\",\n          \"name\": \"Куба\",\n          \"nameEn\": \"Cuba\"\n        },\n        {\n          \"code\": \"CD\",\n          \"name\": \"Конго - Киншаса\",\n          \"nameEn\": \"Democratic Republic of Congo\"\n        },\n        {\n          \"code\": \"CG\",\n          \"name\": \"Конго - Браззавиль\",\n          \"nameEn\": \"Republic of Congo\"\n        },\n        {\n          \"code\": \"ER\",\n          \"name\": \"Эритрея\",\n          \"nameEn\": \"Eritrea\"\n        },\n        {\n          \"code\": \"HT\",\n          \"name\": \"Гаити\",\n          \"nameEn\": \"Haiti\"\n        },\n        {\n          \"code\": \"IR\",\n          \"name\": \"Иран\",\n          \"nameEn\": \"Iran\"\n        },\n        {\n          \"code\": \"IQ\",\n          \"name\": \"Ирак\",\n          \"nameEn\": \"Iraq\"\n        },\n        {\n          \"code\": \"LY\",\n          \"name\": \"Ливия\",\n          \"nameEn\": \"Libya\"\n        },\n        {\n          \"code\": \"ML\",\n          \"name\": \"Мали\",\n          \"nameEn\": \"Mali\"\n        },\n        {\n          \"code\": \"NI\",\n          \"name\": \"Никарагуа\",\n          \"nameEn\": \"Nicaragua\"\n        },\n        {\n          \"code\": \"KP\",\n          \"name\": \"КНДР\",\n          \"nameEn\": \"North Korea\"\n        },\n        {\n          \"code\": \"RU\",\n          \"name\": \"Россия\",\n          \"nameEn\": \"Russia\"\n        },\n        {\n          \"code\": \"SO\",\n          \"name\": \"Сомали\",\n          \"nameEn\": \"Somalia\"\n        },\n        {\n          \"code\": \"SS\",\n          \"name\": \"Южный Судан\",\n          \"nameEn\": \"South Sudan\"\n        },\n        {\n          \"code\": \"SD\",\n          \"name\": \"Судан\",\n          \"nameEn\": \"Sudan\"\n        },\n        {\n          \"code\": \"SY\",\n          \"name\": \"Сирия\",\n          \"nameEn\": \"Syria\"\n        },\n        {\n          \"code\": \"VE\",\n          \"name\": \"Венесуэла\",\n          \"nameEn\": \"Venezuela\"\n        },\n        {\n          \"code\": \"YE\",\n          \"name\": \"Йемен\",\n          \"nameEn\": \"Yemen\"\n        },\n        {\n          \"code\": \"ZW\",\n          \"name\": \"Зимбабве\",\n          \"nameEn\": \"Zimbabwe\"\n        },\n        {\n          \"code\": \"UA-43\",\n          \"countryCode\": \"UA\",\n          \"name\": \"Крым\",\n          \"nameEn\": \"Crimea (Region of Ukraine)\"\n        },\n        {\n          \"code\": \"UA-14\",\n          \"countryCode\": \"UA\",\n          \"name\": \"Донецкая область\",\n          \"nameEn\": \"Donetsk (Region of Ukraine)\"\n        },\n        {\n          \"code\": \"UA-65\",\n          \"countryCode\": \"UA\",\n          \"name\": \"Херсонская область\",\n          \"nameEn\": \"Kherson (Region of Ukraine)\"\n        },\n        {\n          \"code\": \"UA-09\",\n          \"countryCode\": \"UA\",\n          \"name\": \"Луганская область\",\n          \"nameEn\": \"Luhansk (Region of Ukraine)\"\n        },\n        {\n          \"code\": \"UA-23\",\n          \"countryCode\": \"UA\",\n          \"name\": \"Запорожская область\",\n          \"nameEn\": \"Zaporizhzhia (Region of Ukraine)\"\n        },\n        {\n          \"code\": \"AN\",\n          \"name\": \"Нидерландские Антильские острова\",\n          \"nameEn\": \"Netherlands Antilles\"\n        }\n      ],\n      \"verifiedCountryCount\": null,\n      \"exactList\": [\n        \"AX\",\n        \"AL\",\n        \"DZ\",\n        \"AS\",\n        \"AD\",\n        \"AO\",\n        \"AI\",\n        \"AG\",\n        \"AR\",\n        \"AM\",\n        \"AW\",\n        \"AU\",\n        \"AT\",\n        \"AZ\",\n        \"BS\",\n        \"BH\",\n        \"BD\",\n        \"BB\",\n        \"BE\",\n        \"BZ\",\n        \"BJ\",\n        \"BM\",\n        \"BT\",\n        \"BO\",\n        \"BQ\",\n        \"BA\",\n        \"BW\",\n        \"BV\",\n        \"BR\",\n        \"IO\",\n        \"BN\",\n        \"BG\",\n        \"BF\",\n        \"CV\",\n        \"KH\",\n        \"CM\",\n        \"CA\",\n        \"KY\",\n        \"CL\",\n        \"CN\",\n        \"CX\",\n        \"CC\",\n        \"CO\",\n        \"KM\",\n        \"CK\",\n        \"CR\",\n        \"HR\",\n        \"CW\",\n        \"CY\",\n        \"CZ\",\n        \"CI\",\n        \"DK\",\n        \"DJ\",\n        \"DM\",\n        \"DO\",\n        \"EC\",\n        \"EG\",\n        \"SV\",\n        \"GQ\",\n        \"EE\",\n        \"SZ\",\n        \"ET\",\n        \"FK\",\n        \"FO\",\n        \"FM\",\n        \"FJ\",\n        \"FI\",\n        \"FR\",\n        \"GF\",\n        \"PF\",\n        \"TF\",\n        \"GA\",\n        \"GM\",\n        \"GE\",\n        \"DE\",\n        \"GH\",\n        \"GI\",\n        \"GR\",\n        \"GL\",\n        \"GD\",\n        \"GP\",\n        \"GU\",\n        \"GT\",\n        \"GG\",\n        \"GN\",\n        \"GW\",\n        \"GY\",\n        \"HM\",\n        \"VA\",\n        \"HN\",\n        \"HK\",\n        \"HU\",\n        \"IS\",\n        \"IN\",\n        \"ID\",\n        \"IE\",\n        \"IM\",\n        \"IL\",\n        \"IT\",\n        \"JM\",\n        \"JP\",\n        \"JE\",\n        \"JO\",\n        \"KZ\",\n        \"KE\",\n        \"KI\",\n        \"KW\",\n        \"KG\",\n        \"LA\",\n        \"LV\",\n        \"LB\",\n        \"LS\",\n        \"LR\",\n        \"LI\",\n        \"LT\",\n        \"LU\",\n        \"MO\",\n        \"MG\",\n        \"MW\",\n        \"MY\",\n        \"MV\",\n        \"MT\",\n        \"MH\",\n        \"MQ\",\n        \"MR\",\n        \"MU\",\n        \"YT\",\n        \"MX\",\n        \"MD\",\n        \"MC\",\n        \"MN\",\n        \"ME\",\n        \"MS\",\n        \"MA\",\n        \"MZ\",\n        \"NA\",\n        \"NR\",\n        \"NP\",\n        \"NL\",\n        \"NC\",\n        \"NZ\",\n        \"NE\",\n        \"NG\",\n        \"NU\",\n        \"NF\",\n        \"MK\",\n        \"MP\",\n        \"NO\",\n        \"OM\",\n        \"PK\",\n        \"PW\",\n        \"PA\",\n        \"PG\",\n        \"PY\",\n        \"PE\",\n        \"PH\",\n        \"PN\",\n        \"PL\",\n        \"PT\",\n        \"PR\",\n        \"QA\",\n        \"RO\",\n        \"RW\",\n        \"RE\",\n        \"BL\",\n        \"SH\",\n        \"KN\",\n        \"LC\",\n        \"MF\",\n        \"PM\",\n        \"VC\",\n        \"WS\",\n        \"SM\",\n        \"ST\",\n        \"SA\",\n        \"SN\",\n        \"RS\",\n        \"SC\",\n        \"SL\",\n        \"SG\",\n        \"SX\",\n        \"SK\",\n        \"SI\",\n        \"SB\",\n        \"ZA\",\n        \"GS\",\n        \"KR\",\n        \"ES\",\n        \"LK\",\n        \"PS\",\n        \"SR\",\n        \"SJ\",\n        \"SE\",\n        \"CH\",\n        \"TW\",\n        \"TJ\",\n        \"TZ\",\n        \"TH\",\n        \"TL\",\n        \"TG\",\n        \"TK\",\n        \"TO\",\n        \"TT\",\n        \"TN\",\n        \"TM\",\n        \"TC\",\n        \"TV\",\n        \"TR\",\n        \"UG\",\n        \"UA\",\n        \"AE\",\n        \"GB\",\n        \"UM\",\n        \"US\",\n        \"UY\",\n        \"UZ\",\n        \"VU\",\n        \"VN\",\n        \"VG\",\n        \"VI\",\n        \"WF\",\n        \"EH\",\n        \"ZM\"\n      ],\n      \"records\": [\n        {\n          \"code\": \"AX\",\n          \"name\": \"Аландские о-ва\",\n          \"nameEn\": \"Åland Islands\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"AL\",\n          \"name\": \"Албания\",\n          \"nameEn\": \"Albania\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"DZ\",\n          \"name\": \"Алжир\",\n          \"nameEn\": \"Algeria\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"AS\",\n          \"name\": \"Американское Самоа\",\n          \"nameEn\": \"American Samoa\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"AD\",\n          \"name\": \"Андорра\",\n          \"nameEn\": \"Andorra\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"AO\",\n          \"name\": \"Ангола\",\n          \"nameEn\": \"Angola\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"AI\",\n          \"name\": \"Ангилья\",\n          \"nameEn\": \"Anguilla\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"AG\",\n          \"name\": \"Антигуа и Барбуда\",\n          \"nameEn\": \"Antigua & Barbuda\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"AR\",\n          \"name\": \"Аргентина\",\n          \"nameEn\": \"Argentina\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"AM\",\n          \"name\": \"Армения\",\n          \"nameEn\": \"Armenia\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"AW\",\n          \"name\": \"Аруба\",\n          \"nameEn\": \"Aruba\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"AU\",\n          \"name\": \"Австралия\",\n          \"nameEn\": \"Australia\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"AT\",\n          \"name\": \"Австрия\",\n          \"nameEn\": \"Austria\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"AZ\",\n          \"name\": \"Азербайджан\",\n          \"nameEn\": \"Azerbaijan\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"BS\",\n          \"name\": \"Багамы\",\n          \"nameEn\": \"Bahamas\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"BH\",\n          \"name\": \"Бахрейн\",\n          \"nameEn\": \"Bahrain\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"BD\",\n          \"name\": \"Бангладеш\",\n          \"nameEn\": \"Bangladesh\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"BB\",\n          \"name\": \"Барбадос\",\n          \"nameEn\": \"Barbados\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"BE\",\n          \"name\": \"Бельгия\",\n          \"nameEn\": \"Belgium\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"BZ\",\n          \"name\": \"Белиз\",\n          \"nameEn\": \"Belize\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"BJ\",\n          \"name\": \"Бенин\",\n          \"nameEn\": \"Benin\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"BM\",\n          \"name\": \"Бермудские о-ва\",\n          \"nameEn\": \"Bermuda\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"BT\",\n          \"name\": \"Бутан\",\n          \"nameEn\": \"Bhutan\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"BO\",\n          \"name\": \"Боливия\",\n          \"nameEn\": \"Bolivia\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"BQ\",\n          \"name\": \"Бонэйр, Синт-Эстатиус и Саба\",\n          \"nameEn\": \"Caribbean Netherlands\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"BA\",\n          \"name\": \"Босния и Герцеговина\",\n          \"nameEn\": \"Bosnia & Herzegovina\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"BW\",\n          \"name\": \"Ботсвана\",\n          \"nameEn\": \"Botswana\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"BV\",\n          \"name\": \"о-в Буве\",\n          \"nameEn\": \"Bouvet Island\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"BR\",\n          \"name\": \"Бразилия\",\n          \"nameEn\": \"Brazil\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"IO\",\n          \"name\": \"Британская территория в Индийском океане\",\n          \"nameEn\": \"British Indian Ocean Territory\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"BN\",\n          \"name\": \"Бруней\",\n          \"nameEn\": \"Brunei\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"BG\",\n          \"name\": \"Болгария\",\n          \"nameEn\": \"Bulgaria\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"BF\",\n          \"name\": \"Буркина-Фасо\",\n          \"nameEn\": \"Burkina Faso\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"CV\",\n          \"name\": \"Кабо-Верде\",\n          \"nameEn\": \"Cape Verde\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"KH\",\n          \"name\": \"Камбоджа\",\n          \"nameEn\": \"Cambodia\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"CM\",\n          \"name\": \"Камерун\",\n          \"nameEn\": \"Cameroon\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"CA\",\n          \"name\": \"Канада\",\n          \"nameEn\": \"Canada\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"KY\",\n          \"name\": \"о-ва Кайман\",\n          \"nameEn\": \"Cayman Islands\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"CL\",\n          \"name\": \"Чили\",\n          \"nameEn\": \"Chile\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"CN\",\n          \"name\": \"Китай\",\n          \"nameEn\": \"China\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"CX\",\n          \"name\": \"о-в Рождества\",\n          \"nameEn\": \"Christmas Island\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"CC\",\n          \"name\": \"Кокосовые о-ва\",\n          \"nameEn\": \"Cocos (Keeling) Islands\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"CO\",\n          \"name\": \"Колумбия\",\n          \"nameEn\": \"Colombia\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"KM\",\n          \"name\": \"Коморы\",\n          \"nameEn\": \"Comoros\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"CK\",\n          \"name\": \"о-ва Кука\",\n          \"nameEn\": \"Cook Islands\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"CR\",\n          \"name\": \"Коста-Рика\",\n          \"nameEn\": \"Costa Rica\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"HR\",\n          \"name\": \"Хорватия\",\n          \"nameEn\": \"Croatia\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"CW\",\n          \"name\": \"Кюрасао\",\n          \"nameEn\": \"Curaçao\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"CY\",\n          \"name\": \"Кипр\",\n          \"nameEn\": \"Cyprus\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"CZ\",\n          \"name\": \"Чехия\",\n          \"nameEn\": \"Czechia\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"CI\",\n          \"name\": \"Кот-д’Ивуар\",\n          \"nameEn\": \"Côte d’Ivoire\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"DK\",\n          \"name\": \"Дания\",\n          \"nameEn\": \"Denmark\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"DJ\",\n          \"name\": \"Джибути\",\n          \"nameEn\": \"Djibouti\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"DM\",\n          \"name\": \"Доминика\",\n          \"nameEn\": \"Dominica\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"DO\",\n          \"name\": \"Доминиканская Республика\",\n          \"nameEn\": \"Dominican Republic\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"EC\",\n          \"name\": \"Эквадор\",\n          \"nameEn\": \"Ecuador\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"EG\",\n          \"name\": \"Египет\",\n          \"nameEn\": \"Egypt\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"SV\",\n          \"name\": \"Сальвадор\",\n          \"nameEn\": \"El Salvador\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"GQ\",\n          \"name\": \"Экваториальная Гвинея\",\n          \"nameEn\": \"Equatorial Guinea\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"EE\",\n          \"name\": \"Эстония\",\n          \"nameEn\": \"Estonia\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"SZ\",\n          \"name\": \"Эсватини\",\n          \"nameEn\": \"Eswatini\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"ET\",\n          \"name\": \"Эфиопия\",\n          \"nameEn\": \"Ethiopia\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"FK\",\n          \"name\": \"Фолклендские о-ва\",\n          \"nameEn\": \"Falkland Islands\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"FO\",\n          \"name\": \"Фарерские о-ва\",\n          \"nameEn\": \"Faroe Islands\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"FM\",\n          \"name\": \"Федеративные Штаты Микронезии\",\n          \"nameEn\": \"Micronesia\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"FJ\",\n          \"name\": \"Фиджи\",\n          \"nameEn\": \"Fiji\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"FI\",\n          \"name\": \"Финляндия\",\n          \"nameEn\": \"Finland\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"FR\",\n          \"name\": \"Франция\",\n          \"nameEn\": \"France\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"GF\",\n          \"name\": \"Французская Гвиана\",\n          \"nameEn\": \"French Guiana\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"PF\",\n          \"name\": \"Французская Полинезия\",\n          \"nameEn\": \"French Polynesia\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"TF\",\n          \"name\": \"Французские Южные территории\",\n          \"nameEn\": \"French Southern Territories\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"GA\",\n          \"name\": \"Габон\",\n          \"nameEn\": \"Gabon\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"GM\",\n          \"name\": \"Гамбия\",\n          \"nameEn\": \"Gambia\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"GE\",\n          \"name\": \"Грузия\",\n          \"nameEn\": \"Georgia\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"DE\",\n          \"name\": \"Германия\",\n          \"nameEn\": \"Germany\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"GH\",\n          \"name\": \"Гана\",\n          \"nameEn\": \"Ghana\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"GI\",\n          \"name\": \"Гибралтар\",\n          \"nameEn\": \"Gibraltar\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"GR\",\n          \"name\": \"Греция\",\n          \"nameEn\": \"Greece\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"GL\",\n          \"name\": \"Гренландия\",\n          \"nameEn\": \"Greenland\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"GD\",\n          \"name\": \"Гренада\",\n          \"nameEn\": \"Grenada\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"GP\",\n          \"name\": \"Гваделупа\",\n          \"nameEn\": \"Guadeloupe\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"GU\",\n          \"name\": \"Гуам\",\n          \"nameEn\": \"Guam\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"GT\",\n          \"name\": \"Гватемала\",\n          \"nameEn\": \"Guatemala\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"GG\",\n          \"name\": \"Гернси\",\n          \"nameEn\": \"Guernsey\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"GN\",\n          \"name\": \"Гвинея\",\n          \"nameEn\": \"Guinea\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"GW\",\n          \"name\": \"Гвинея-Бисау\",\n          \"nameEn\": \"Guinea-Bissau\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"GY\",\n          \"name\": \"Гайана\",\n          \"nameEn\": \"Guyana\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"HM\",\n          \"name\": \"о-ва Херд и Макдональд\",\n          \"nameEn\": \"Heard & McDonald Islands\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"VA\",\n          \"name\": \"Ватикан\",\n          \"nameEn\": \"Vatican City\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"HN\",\n          \"name\": \"Гондурас\",\n          \"nameEn\": \"Honduras\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"HK\",\n          \"name\": \"Гонконг (САР)\",\n          \"nameEn\": \"Hong Kong SAR China\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"HU\",\n          \"name\": \"Венгрия\",\n          \"nameEn\": \"Hungary\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"IS\",\n          \"name\": \"Исландия\",\n          \"nameEn\": \"Iceland\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"IN\",\n          \"name\": \"Индия\",\n          \"nameEn\": \"India\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"ID\",\n          \"name\": \"Индонезия\",\n          \"nameEn\": \"Indonesia\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"IE\",\n          \"name\": \"Ирландия\",\n          \"nameEn\": \"Ireland\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"IM\",\n          \"name\": \"о-в Мэн\",\n          \"nameEn\": \"Isle of Man\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"IL\",\n          \"name\": \"Израиль\",\n          \"nameEn\": \"Israel\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"IT\",\n          \"name\": \"Италия\",\n          \"nameEn\": \"Italy\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"JM\",\n          \"name\": \"Ямайка\",\n          \"nameEn\": \"Jamaica\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"JP\",\n          \"name\": \"Япония\",\n          \"nameEn\": \"Japan\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"JE\",\n          \"name\": \"Джерси\",\n          \"nameEn\": \"Jersey\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"JO\",\n          \"name\": \"Иордания\",\n          \"nameEn\": \"Jordan\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"KZ\",\n          \"name\": \"Казахстан\",\n          \"nameEn\": \"Kazakhstan\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"KE\",\n          \"name\": \"Кения\",\n          \"nameEn\": \"Kenya\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"KI\",\n          \"name\": \"Кирибати\",\n          \"nameEn\": \"Kiribati\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"KW\",\n          \"name\": \"Кувейт\",\n          \"nameEn\": \"Kuwait\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"KG\",\n          \"name\": \"Киргизия\",\n          \"nameEn\": \"Kyrgyzstan\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"LA\",\n          \"name\": \"Лаос\",\n          \"nameEn\": \"Laos\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"LV\",\n          \"name\": \"Латвия\",\n          \"nameEn\": \"Latvia\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"LB\",\n          \"name\": \"Ливан\",\n          \"nameEn\": \"Lebanon\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"LS\",\n          \"name\": \"Лесото\",\n          \"nameEn\": \"Lesotho\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"LR\",\n          \"name\": \"Либерия\",\n          \"nameEn\": \"Liberia\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"LI\",\n          \"name\": \"Лихтенштейн\",\n          \"nameEn\": \"Liechtenstein\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"LT\",\n          \"name\": \"Литва\",\n          \"nameEn\": \"Lithuania\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"LU\",\n          \"name\": \"Люксембург\",\n          \"nameEn\": \"Luxembourg\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"MO\",\n          \"name\": \"Макао (САР)\",\n          \"nameEn\": \"Macao SAR China\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"MG\",\n          \"name\": \"Мадагаскар\",\n          \"nameEn\": \"Madagascar\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"MW\",\n          \"name\": \"Малави\",\n          \"nameEn\": \"Malawi\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"MY\",\n          \"name\": \"Малайзия\",\n          \"nameEn\": \"Malaysia\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"MV\",\n          \"name\": \"Мальдивы\",\n          \"nameEn\": \"Maldives\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"MT\",\n          \"name\": \"Мальта\",\n          \"nameEn\": \"Malta\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"MH\",\n          \"name\": \"Маршалловы о-ва\",\n          \"nameEn\": \"Marshall Islands\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"MQ\",\n          \"name\": \"Мартиника\",\n          \"nameEn\": \"Martinique\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"MR\",\n          \"name\": \"Мавритания\",\n          \"nameEn\": \"Mauritania\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"MU\",\n          \"name\": \"Маврикий\",\n          \"nameEn\": \"Mauritius\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"YT\",\n          \"name\": \"Майотта\",\n          \"nameEn\": \"Mayotte\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"MX\",\n          \"name\": \"Мексика\",\n          \"nameEn\": \"Mexico\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"MD\",\n          \"name\": \"Молдова\",\n          \"nameEn\": \"Moldova\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"MC\",\n          \"name\": \"Монако\",\n          \"nameEn\": \"Monaco\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"MN\",\n          \"name\": \"Монголия\",\n          \"nameEn\": \"Mongolia\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"ME\",\n          \"name\": \"Черногория\",\n          \"nameEn\": \"Montenegro\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"MS\",\n          \"name\": \"Монтсеррат\",\n          \"nameEn\": \"Montserrat\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"MA\",\n          \"name\": \"Марокко\",\n          \"nameEn\": \"Morocco\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"MZ\",\n          \"name\": \"Мозамбик\",\n          \"nameEn\": \"Mozambique\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"NA\",\n          \"name\": \"Намибия\",\n          \"nameEn\": \"Namibia\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"NR\",\n          \"name\": \"Науру\",\n          \"nameEn\": \"Nauru\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"NP\",\n          \"name\": \"Непал\",\n          \"nameEn\": \"Nepal\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"NL\",\n          \"name\": \"Нидерланды\",\n          \"nameEn\": \"Netherlands\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"NC\",\n          \"name\": \"Новая Каледония\",\n          \"nameEn\": \"New Caledonia\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"NZ\",\n          \"name\": \"Новая Зеландия\",\n          \"nameEn\": \"New Zealand\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"NE\",\n          \"name\": \"Нигер\",\n          \"nameEn\": \"Niger\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"NG\",\n          \"name\": \"Нигерия\",\n          \"nameEn\": \"Nigeria\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"NU\",\n          \"name\": \"Ниуэ\",\n          \"nameEn\": \"Niue\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"NF\",\n          \"name\": \"о-в Норфолк\",\n          \"nameEn\": \"Norfolk Island\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"MK\",\n          \"name\": \"Северная Македония\",\n          \"nameEn\": \"North Macedonia\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"MP\",\n          \"name\": \"Северные Марианские о-ва\",\n          \"nameEn\": \"Northern Mariana Islands\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"NO\",\n          \"name\": \"Норвегия\",\n          \"nameEn\": \"Norway\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"OM\",\n          \"name\": \"Оман\",\n          \"nameEn\": \"Oman\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"PK\",\n          \"name\": \"Пакистан\",\n          \"nameEn\": \"Pakistan\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"PW\",\n          \"name\": \"Палау\",\n          \"nameEn\": \"Palau\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"PA\",\n          \"name\": \"Панама\",\n          \"nameEn\": \"Panama\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"PG\",\n          \"name\": \"Папуа — Новая Гвинея\",\n          \"nameEn\": \"Papua New Guinea\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"PY\",\n          \"name\": \"Парагвай\",\n          \"nameEn\": \"Paraguay\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"PE\",\n          \"name\": \"Перу\",\n          \"nameEn\": \"Peru\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"PH\",\n          \"name\": \"Филиппины\",\n          \"nameEn\": \"Philippines\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"PN\",\n          \"name\": \"о-ва Питкэрн\",\n          \"nameEn\": \"Pitcairn Islands\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"PL\",\n          \"name\": \"Польша\",\n          \"nameEn\": \"Poland\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"PT\",\n          \"name\": \"Португалия\",\n          \"nameEn\": \"Portugal\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"PR\",\n          \"name\": \"Пуэрто-Рико\",\n          \"nameEn\": \"Puerto Rico\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"QA\",\n          \"name\": \"Катар\",\n          \"nameEn\": \"Qatar\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"RO\",\n          \"name\": \"Румыния\",\n          \"nameEn\": \"Romania\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"RW\",\n          \"name\": \"Руанда\",\n          \"nameEn\": \"Rwanda\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"RE\",\n          \"name\": \"Реюньон\",\n          \"nameEn\": \"Réunion\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"BL\",\n          \"name\": \"Сен-Бартелеми\",\n          \"nameEn\": \"St. Barthélemy\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"SH\",\n          \"name\": \"о-в Св. Елены\",\n          \"nameEn\": \"St. Helena\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"KN\",\n          \"name\": \"Сент-Китс и Невис\",\n          \"nameEn\": \"St. Kitts & Nevis\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"LC\",\n          \"name\": \"Сент-Люсия\",\n          \"nameEn\": \"St. Lucia\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"MF\",\n          \"name\": \"Сен-Мартен\",\n          \"nameEn\": \"St. Martin\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"PM\",\n          \"name\": \"Сен-Пьер и Микелон\",\n          \"nameEn\": \"St. Pierre & Miquelon\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"VC\",\n          \"name\": \"Сент-Винсент и Гренадины\",\n          \"nameEn\": \"St. Vincent & Grenadines\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"WS\",\n          \"name\": \"Самоа\",\n          \"nameEn\": \"Samoa\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"SM\",\n          \"name\": \"Сан-Марино\",\n          \"nameEn\": \"San Marino\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"ST\",\n          \"name\": \"Сан-Томе и Принсипи\",\n          \"nameEn\": \"São Tomé & Príncipe\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"SA\",\n          \"name\": \"Саудовская Аравия\",\n          \"nameEn\": \"Saudi Arabia\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"SN\",\n          \"name\": \"Сенегал\",\n          \"nameEn\": \"Senegal\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"RS\",\n          \"name\": \"Сербия\",\n          \"nameEn\": \"Serbia\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"SC\",\n          \"name\": \"Сейшельские о-ва\",\n          \"nameEn\": \"Seychelles\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"SL\",\n          \"name\": \"Сьерра-Леоне\",\n          \"nameEn\": \"Sierra Leone\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"SG\",\n          \"name\": \"Сингапур\",\n          \"nameEn\": \"Singapore\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"SX\",\n          \"name\": \"Синт-Мартен\",\n          \"nameEn\": \"Sint Maarten\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"SK\",\n          \"name\": \"Словакия\",\n          \"nameEn\": \"Slovakia\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"SI\",\n          \"name\": \"Словения\",\n          \"nameEn\": \"Slovenia\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"SB\",\n          \"name\": \"Соломоновы о-ва\",\n          \"nameEn\": \"Solomon Islands\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"ZA\",\n          \"name\": \"Южно-Африканская Республика\",\n          \"nameEn\": \"South Africa\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"GS\",\n          \"name\": \"Южная Георгия и Южные Сандвичевы о-ва\",\n          \"nameEn\": \"South Georgia & South Sandwich Islands\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"KR\",\n          \"name\": \"Республика Корея\",\n          \"nameEn\": \"South Korea\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"ES\",\n          \"name\": \"Испания\",\n          \"nameEn\": \"Spain\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"LK\",\n          \"name\": \"Шри-Ланка\",\n          \"nameEn\": \"Sri Lanka\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"PS\",\n          \"name\": \"Палестинские территории\",\n          \"nameEn\": \"Palestinian Territories\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"SR\",\n          \"name\": \"Суринам\",\n          \"nameEn\": \"Suriname\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"SJ\",\n          \"name\": \"Шпицберген и Ян-Майен\",\n          \"nameEn\": \"Svalbard & Jan Mayen\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"SE\",\n          \"name\": \"Швеция\",\n          \"nameEn\": \"Sweden\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"CH\",\n          \"name\": \"Швейцария\",\n          \"nameEn\": \"Switzerland\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"TW\",\n          \"name\": \"Тайвань\",\n          \"nameEn\": \"Taiwan\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"TJ\",\n          \"name\": \"Таджикистан\",\n          \"nameEn\": \"Tajikistan\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"TZ\",\n          \"name\": \"Танзания\",\n          \"nameEn\": \"Tanzania\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"TH\",\n          \"name\": \"Таиланд\",\n          \"nameEn\": \"Thailand\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"TL\",\n          \"name\": \"Восточный Тимор\",\n          \"nameEn\": \"Timor-Leste\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"TG\",\n          \"name\": \"Того\",\n          \"nameEn\": \"Togo\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"TK\",\n          \"name\": \"Токелау\",\n          \"nameEn\": \"Tokelau\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"TO\",\n          \"name\": \"Тонга\",\n          \"nameEn\": \"Tonga\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"TT\",\n          \"name\": \"Тринидад и Тобаго\",\n          \"nameEn\": \"Trinidad & Tobago\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"TN\",\n          \"name\": \"Тунис\",\n          \"nameEn\": \"Tunisia\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"TM\",\n          \"name\": \"Туркменистан\",\n          \"nameEn\": \"Turkmenistan\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"TC\",\n          \"name\": \"Тёркс и Кайкос\",\n          \"nameEn\": \"Turks & Caicos Islands\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"TV\",\n          \"name\": \"Тувалу\",\n          \"nameEn\": \"Tuvalu\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"TR\",\n          \"name\": \"Турция\",\n          \"nameEn\": \"Türkiye\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"UG\",\n          \"name\": \"Уганда\",\n          \"nameEn\": \"Uganda\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"UA\",\n          \"name\": \"Украина\",\n          \"nameEn\": \"Ukraine\",\n          \"marker\": \"**\",\n          \"coverage\": \"partial_locations\",\n          \"note\": \"В Украине недоступны Крым, Донецкая, Луганская, Херсонская и Запорожская области. Остальная территория доступна для оплаты картами.\"\n        },\n        {\n          \"code\": \"AE\",\n          \"name\": \"ОАЭ\",\n          \"nameEn\": \"United Arab Emirates\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"GB\",\n          \"name\": \"Великобритания\",\n          \"nameEn\": \"United Kingdom\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"UM\",\n          \"name\": \"Внешние малые о-ва (США)\",\n          \"nameEn\": \"U.S. Outlying Islands\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"US\",\n          \"name\": \"Соединенные Штаты\",\n          \"nameEn\": \"United States\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"UY\",\n          \"name\": \"Уругвай\",\n          \"nameEn\": \"Uruguay\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"UZ\",\n          \"name\": \"Узбекистан\",\n          \"nameEn\": \"Uzbekistan\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"VU\",\n          \"name\": \"Вануату\",\n          \"nameEn\": \"Vanuatu\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"VN\",\n          \"name\": \"Вьетнам\",\n          \"nameEn\": \"Vietnam\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"VG\",\n          \"name\": \"Виргинские о-ва (Великобритания)\",\n          \"nameEn\": \"British Virgin Islands\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"VI\",\n          \"name\": \"Виргинские о-ва (США)\",\n          \"nameEn\": \"U.S. Virgin Islands\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"WF\",\n          \"name\": \"Уоллис и Футуна\",\n          \"nameEn\": \"Wallis & Futuna\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"EH\",\n          \"name\": \"Западная Сахара\",\n          \"nameEn\": \"Western Sahara\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"ZM\",\n          \"name\": \"Замбия\",\n          \"nameEn\": \"Zambia\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        }\n      ],\n      \"source\": \"owner_provided\",\n      \"status\": \"owner_list_received\",\n      \"policy\": \"worldwide_except_restrictions\",\n      \"independentlyVerified\": false,\n      \"partialCoverage\": {\n        \"marker\": \"**\",\n        \"countryCodes\": [\n          \"UA\"\n        ],\n        \"note\": \"В Украине недоступны Крым, Донецкая, Луганская, Херсонская и Запорожская области. Остальная территория доступна для оплаты картами.\"\n      },\n      \"unresolvedFootnotes\": [],\n      \"approvalGuaranteed\": false\n    }\n  },\n  \"gatewayIntegration\": {\n    \"adapterImplemented\": true,\n    \"contract\": \"v3\",\n    \"liveConfigurationProvided\": null,\n    \"availability\": {\n      \"source\": \"runtime\",\n      \"configurationEndpoint\": \"/api/config\",\n      \"configurationIncludesHealthCheck\": false,\n      \"checkoutEndpoint\": \"/api/checkout/{token}\",\n      \"checkoutIncludesProviderApproval\": false\n    }\n  }\n}"
          },
          "note": "",
          "links": []
        },
        {
          "id": "privacy",
          "title": "Границы публичной информации",
          "paragraphs": [
            "В текстах и JSON нет сессий, токенов, личных обращений, платёжных записей пользователей и секретов интеграций. Страницы входа, аккаунта, оплаты, интеграций, личных заявок и модерации не предназначены для поисковой выдачи.",
            "API чтения публичной документации не предоставляет права управлять магазином. Для собственных данных требуется действующая сессия, для изменений — дополнительные серверные проверки."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": []
        },
        {
          "id": "updates",
          "title": "Обновление и цитирование",
          "paragraphs": [
            "Статьи содержат стабильный id, URL, заголовок и дату обновления. При использовании ответа указывайте ссылку на соответствующее руководство и сохраняйте оговорки о неподтверждённых условиях.",
            "Наличие sitemap, llms-файлов и серверного HTML облегчает извлечение содержания, но не гарантирует индексацию, место в поисковой выдаче или использование сторонним ИИ."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": []
        }
      ],
      "body": "Публичная информация Kevmi доступна в серверном HTML, обычном тексте и структурированных форматах. Все представления используют одну базу знаний и одну версию условий.\n\nОткрытые адреса\n\nАдрес · Содержание\n/docs · Навигация по руководствам\n/llms.txt · Оглавление и основные факты на английском языке\n/llms-full.txt · Полный текст базы знаний на английском языке\n/knowledge.json · Факты, тарифы, статьи и версия\n/openapi.json · Контракт реализованного API\n/sitemap.xml · Публичные страницы для поиска\n/robots.txt · Указания роботам\n\nКак читать факты\n\nknowledge.facts.countries.card содержит правило worldwide_except_restrictions, список исключений restrictions и справочник ISO-кодов exactList. countryCount — число записей справочника, coverageLabel — опубликованное покрытие 190+. Наличие страны не гарантирует одобрение каждой операции.\n\nsource=owner_provided и status=owner_list_received обозначают происхождение списка. independentlyVerified=false и verifiedCountryCount=null означают, что отдельная проверка на работающем шлюзе не выполнена; список при этом получен и опубликован.\n\npartialCoverage перечисляет страны с **, где доступны не все локации. unresolvedFootnotes сохраняет отдельную неуточнённую сноску * у Китая. coverage=listed означает присутствие в перечне, partial_locations — ограничение по локациям, footnote_pending — неуточнённую сноску; ни одно значение не гарантирует одобрение любой карты.\n\ngatewayConnected=null и gatewayIntegration.liveConfigurationProvided=null означают, что статическая база знаний не содержит состояния конкретного развёртывания. gatewayIntegration.availability указывает маршруты для актуальных проверок. Поле gateway.configured в /api/config подтверждает наличие настроек, но не связь с провайдером. invoice.availability в ответе checkout описывает доступность условий счёта, а совместимое invoice.gatewayConnected повторяет availability.available. Ни одно поле не заменяет подтверждение операции. gatewayIntegration.adapterImplemented=true описывает поддержку протокола v3; subscriptionsSupported=false исключает регулярные списания.\n\n{\n  \"subscriptionsSupported\": false,\n  \"gatewayConnected\": null,\n  \"countries\": {\n    \"card\": {\n      \"countryCount\": 223,\n      \"ownerReportedCountryCount\": null,\n      \"coverageLabel\": \"190+\",\n      \"restrictions\": [\n        {\n          \"code\": \"AF\",\n          \"name\": \"Афганистан\",\n          \"nameEn\": \"Afghanistan\"\n        },\n        {\n          \"code\": \"AQ\",\n          \"name\": \"Антарктида\",\n          \"nameEn\": \"Antarctica\"\n        },\n        {\n          \"code\": \"BY\",\n          \"name\": \"Беларусь\",\n          \"nameEn\": \"Belarus\"\n        },\n        {\n          \"code\": \"MM\",\n          \"name\": \"Мьянма (Бирма)\",\n          \"nameEn\": \"Burma (Myanmar)\"\n        },\n        {\n          \"code\": \"BI\",\n          \"name\": \"Бурунди\",\n          \"nameEn\": \"Burundi\"\n        },\n        {\n          \"code\": \"CF\",\n          \"name\": \"Центрально-Африканская Республика\",\n          \"nameEn\": \"Central African Republic\"\n        },\n        {\n          \"code\": \"TD\",\n          \"name\": \"Чад\",\n          \"nameEn\": \"Chad\"\n        },\n        {\n          \"code\": \"CU\",\n          \"name\": \"Куба\",\n          \"nameEn\": \"Cuba\"\n        },\n        {\n          \"code\": \"CD\",\n          \"name\": \"Конго - Киншаса\",\n          \"nameEn\": \"Democratic Republic of Congo\"\n        },\n        {\n          \"code\": \"CG\",\n          \"name\": \"Конго - Браззавиль\",\n          \"nameEn\": \"Republic of Congo\"\n        },\n        {\n          \"code\": \"ER\",\n          \"name\": \"Эритрея\",\n          \"nameEn\": \"Eritrea\"\n        },\n        {\n          \"code\": \"HT\",\n          \"name\": \"Гаити\",\n          \"nameEn\": \"Haiti\"\n        },\n        {\n          \"code\": \"IR\",\n          \"name\": \"Иран\",\n          \"nameEn\": \"Iran\"\n        },\n        {\n          \"code\": \"IQ\",\n          \"name\": \"Ирак\",\n          \"nameEn\": \"Iraq\"\n        },\n        {\n          \"code\": \"LY\",\n          \"name\": \"Ливия\",\n          \"nameEn\": \"Libya\"\n        },\n        {\n          \"code\": \"ML\",\n          \"name\": \"Мали\",\n          \"nameEn\": \"Mali\"\n        },\n        {\n          \"code\": \"NI\",\n          \"name\": \"Никарагуа\",\n          \"nameEn\": \"Nicaragua\"\n        },\n        {\n          \"code\": \"KP\",\n          \"name\": \"КНДР\",\n          \"nameEn\": \"North Korea\"\n        },\n        {\n          \"code\": \"RU\",\n          \"name\": \"Россия\",\n          \"nameEn\": \"Russia\"\n        },\n        {\n          \"code\": \"SO\",\n          \"name\": \"Сомали\",\n          \"nameEn\": \"Somalia\"\n        },\n        {\n          \"code\": \"SS\",\n          \"name\": \"Южный Судан\",\n          \"nameEn\": \"South Sudan\"\n        },\n        {\n          \"code\": \"SD\",\n          \"name\": \"Судан\",\n          \"nameEn\": \"Sudan\"\n        },\n        {\n          \"code\": \"SY\",\n          \"name\": \"Сирия\",\n          \"nameEn\": \"Syria\"\n        },\n        {\n          \"code\": \"VE\",\n          \"name\": \"Венесуэла\",\n          \"nameEn\": \"Venezuela\"\n        },\n        {\n          \"code\": \"YE\",\n          \"name\": \"Йемен\",\n          \"nameEn\": \"Yemen\"\n        },\n        {\n          \"code\": \"ZW\",\n          \"name\": \"Зимбабве\",\n          \"nameEn\": \"Zimbabwe\"\n        },\n        {\n          \"code\": \"UA-43\",\n          \"countryCode\": \"UA\",\n          \"name\": \"Крым\",\n          \"nameEn\": \"Crimea (Region of Ukraine)\"\n        },\n        {\n          \"code\": \"UA-14\",\n          \"countryCode\": \"UA\",\n          \"name\": \"Донецкая область\",\n          \"nameEn\": \"Donetsk (Region of Ukraine)\"\n        },\n        {\n          \"code\": \"UA-65\",\n          \"countryCode\": \"UA\",\n          \"name\": \"Херсонская область\",\n          \"nameEn\": \"Kherson (Region of Ukraine)\"\n        },\n        {\n          \"code\": \"UA-09\",\n          \"countryCode\": \"UA\",\n          \"name\": \"Луганская область\",\n          \"nameEn\": \"Luhansk (Region of Ukraine)\"\n        },\n        {\n          \"code\": \"UA-23\",\n          \"countryCode\": \"UA\",\n          \"name\": \"Запорожская область\",\n          \"nameEn\": \"Zaporizhzhia (Region of Ukraine)\"\n        },\n        {\n          \"code\": \"AN\",\n          \"name\": \"Нидерландские Антильские острова\",\n          \"nameEn\": \"Netherlands Antilles\"\n        }\n      ],\n      \"verifiedCountryCount\": null,\n      \"exactList\": [\n        \"AX\",\n        \"AL\",\n        \"DZ\",\n        \"AS\",\n        \"AD\",\n        \"AO\",\n        \"AI\",\n        \"AG\",\n        \"AR\",\n        \"AM\",\n        \"AW\",\n        \"AU\",\n        \"AT\",\n        \"AZ\",\n        \"BS\",\n        \"BH\",\n        \"BD\",\n        \"BB\",\n        \"BE\",\n        \"BZ\",\n        \"BJ\",\n        \"BM\",\n        \"BT\",\n        \"BO\",\n        \"BQ\",\n        \"BA\",\n        \"BW\",\n        \"BV\",\n        \"BR\",\n        \"IO\",\n        \"BN\",\n        \"BG\",\n        \"BF\",\n        \"CV\",\n        \"KH\",\n        \"CM\",\n        \"CA\",\n        \"KY\",\n        \"CL\",\n        \"CN\",\n        \"CX\",\n        \"CC\",\n        \"CO\",\n        \"KM\",\n        \"CK\",\n        \"CR\",\n        \"HR\",\n        \"CW\",\n        \"CY\",\n        \"CZ\",\n        \"CI\",\n        \"DK\",\n        \"DJ\",\n        \"DM\",\n        \"DO\",\n        \"EC\",\n        \"EG\",\n        \"SV\",\n        \"GQ\",\n        \"EE\",\n        \"SZ\",\n        \"ET\",\n        \"FK\",\n        \"FO\",\n        \"FM\",\n        \"FJ\",\n        \"FI\",\n        \"FR\",\n        \"GF\",\n        \"PF\",\n        \"TF\",\n        \"GA\",\n        \"GM\",\n        \"GE\",\n        \"DE\",\n        \"GH\",\n        \"GI\",\n        \"GR\",\n        \"GL\",\n        \"GD\",\n        \"GP\",\n        \"GU\",\n        \"GT\",\n        \"GG\",\n        \"GN\",\n        \"GW\",\n        \"GY\",\n        \"HM\",\n        \"VA\",\n        \"HN\",\n        \"HK\",\n        \"HU\",\n        \"IS\",\n        \"IN\",\n        \"ID\",\n        \"IE\",\n        \"IM\",\n        \"IL\",\n        \"IT\",\n        \"JM\",\n        \"JP\",\n        \"JE\",\n        \"JO\",\n        \"KZ\",\n        \"KE\",\n        \"KI\",\n        \"KW\",\n        \"KG\",\n        \"LA\",\n        \"LV\",\n        \"LB\",\n        \"LS\",\n        \"LR\",\n        \"LI\",\n        \"LT\",\n        \"LU\",\n        \"MO\",\n        \"MG\",\n        \"MW\",\n        \"MY\",\n        \"MV\",\n        \"MT\",\n        \"MH\",\n        \"MQ\",\n        \"MR\",\n        \"MU\",\n        \"YT\",\n        \"MX\",\n        \"MD\",\n        \"MC\",\n        \"MN\",\n        \"ME\",\n        \"MS\",\n        \"MA\",\n        \"MZ\",\n        \"NA\",\n        \"NR\",\n        \"NP\",\n        \"NL\",\n        \"NC\",\n        \"NZ\",\n        \"NE\",\n        \"NG\",\n        \"NU\",\n        \"NF\",\n        \"MK\",\n        \"MP\",\n        \"NO\",\n        \"OM\",\n        \"PK\",\n        \"PW\",\n        \"PA\",\n        \"PG\",\n        \"PY\",\n        \"PE\",\n        \"PH\",\n        \"PN\",\n        \"PL\",\n        \"PT\",\n        \"PR\",\n        \"QA\",\n        \"RO\",\n        \"RW\",\n        \"RE\",\n        \"BL\",\n        \"SH\",\n        \"KN\",\n        \"LC\",\n        \"MF\",\n        \"PM\",\n        \"VC\",\n        \"WS\",\n        \"SM\",\n        \"ST\",\n        \"SA\",\n        \"SN\",\n        \"RS\",\n        \"SC\",\n        \"SL\",\n        \"SG\",\n        \"SX\",\n        \"SK\",\n        \"SI\",\n        \"SB\",\n        \"ZA\",\n        \"GS\",\n        \"KR\",\n        \"ES\",\n        \"LK\",\n        \"PS\",\n        \"SR\",\n        \"SJ\",\n        \"SE\",\n        \"CH\",\n        \"TW\",\n        \"TJ\",\n        \"TZ\",\n        \"TH\",\n        \"TL\",\n        \"TG\",\n        \"TK\",\n        \"TO\",\n        \"TT\",\n        \"TN\",\n        \"TM\",\n        \"TC\",\n        \"TV\",\n        \"TR\",\n        \"UG\",\n        \"UA\",\n        \"AE\",\n        \"GB\",\n        \"UM\",\n        \"US\",\n        \"UY\",\n        \"UZ\",\n        \"VU\",\n        \"VN\",\n        \"VG\",\n        \"VI\",\n        \"WF\",\n        \"EH\",\n        \"ZM\"\n      ],\n      \"records\": [\n        {\n          \"code\": \"AX\",\n          \"name\": \"Аландские о-ва\",\n          \"nameEn\": \"Åland Islands\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"AL\",\n          \"name\": \"Албания\",\n          \"nameEn\": \"Albania\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"DZ\",\n          \"name\": \"Алжир\",\n          \"nameEn\": \"Algeria\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"AS\",\n          \"name\": \"Американское Самоа\",\n          \"nameEn\": \"American Samoa\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"AD\",\n          \"name\": \"Андорра\",\n          \"nameEn\": \"Andorra\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"AO\",\n          \"name\": \"Ангола\",\n          \"nameEn\": \"Angola\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"AI\",\n          \"name\": \"Ангилья\",\n          \"nameEn\": \"Anguilla\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"AG\",\n          \"name\": \"Антигуа и Барбуда\",\n          \"nameEn\": \"Antigua & Barbuda\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"AR\",\n          \"name\": \"Аргентина\",\n          \"nameEn\": \"Argentina\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"AM\",\n          \"name\": \"Армения\",\n          \"nameEn\": \"Armenia\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"AW\",\n          \"name\": \"Аруба\",\n          \"nameEn\": \"Aruba\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"AU\",\n          \"name\": \"Австралия\",\n          \"nameEn\": \"Australia\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"AT\",\n          \"name\": \"Австрия\",\n          \"nameEn\": \"Austria\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"AZ\",\n          \"name\": \"Азербайджан\",\n          \"nameEn\": \"Azerbaijan\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"BS\",\n          \"name\": \"Багамы\",\n          \"nameEn\": \"Bahamas\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"BH\",\n          \"name\": \"Бахрейн\",\n          \"nameEn\": \"Bahrain\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"BD\",\n          \"name\": \"Бангладеш\",\n          \"nameEn\": \"Bangladesh\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"BB\",\n          \"name\": \"Барбадос\",\n          \"nameEn\": \"Barbados\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"BE\",\n          \"name\": \"Бельгия\",\n          \"nameEn\": \"Belgium\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"BZ\",\n          \"name\": \"Белиз\",\n          \"nameEn\": \"Belize\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"BJ\",\n          \"name\": \"Бенин\",\n          \"nameEn\": \"Benin\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"BM\",\n          \"name\": \"Бермудские о-ва\",\n          \"nameEn\": \"Bermuda\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"BT\",\n          \"name\": \"Бутан\",\n          \"nameEn\": \"Bhutan\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"BO\",\n          \"name\": \"Боливия\",\n          \"nameEn\": \"Bolivia\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"BQ\",\n          \"name\": \"Бонэйр, Синт-Эстатиус и Саба\",\n          \"nameEn\": \"Caribbean Netherlands\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"BA\",\n          \"name\": \"Босния и Герцеговина\",\n          \"nameEn\": \"Bosnia & Herzegovina\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"BW\",\n          \"name\": \"Ботсвана\",\n          \"nameEn\": \"Botswana\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"BV\",\n          \"name\": \"о-в Буве\",\n          \"nameEn\": \"Bouvet Island\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"BR\",\n          \"name\": \"Бразилия\",\n          \"nameEn\": \"Brazil\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"IO\",\n          \"name\": \"Британская территория в Индийском океане\",\n          \"nameEn\": \"British Indian Ocean Territory\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"BN\",\n          \"name\": \"Бруней\",\n          \"nameEn\": \"Brunei\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"BG\",\n          \"name\": \"Болгария\",\n          \"nameEn\": \"Bulgaria\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"BF\",\n          \"name\": \"Буркина-Фасо\",\n          \"nameEn\": \"Burkina Faso\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"CV\",\n          \"name\": \"Кабо-Верде\",\n          \"nameEn\": \"Cape Verde\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"KH\",\n          \"name\": \"Камбоджа\",\n          \"nameEn\": \"Cambodia\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"CM\",\n          \"name\": \"Камерун\",\n          \"nameEn\": \"Cameroon\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"CA\",\n          \"name\": \"Канада\",\n          \"nameEn\": \"Canada\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"KY\",\n          \"name\": \"о-ва Кайман\",\n          \"nameEn\": \"Cayman Islands\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"CL\",\n          \"name\": \"Чили\",\n          \"nameEn\": \"Chile\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"CN\",\n          \"name\": \"Китай\",\n          \"nameEn\": \"China\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"CX\",\n          \"name\": \"о-в Рождества\",\n          \"nameEn\": \"Christmas Island\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"CC\",\n          \"name\": \"Кокосовые о-ва\",\n          \"nameEn\": \"Cocos (Keeling) Islands\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"CO\",\n          \"name\": \"Колумбия\",\n          \"nameEn\": \"Colombia\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"KM\",\n          \"name\": \"Коморы\",\n          \"nameEn\": \"Comoros\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"CK\",\n          \"name\": \"о-ва Кука\",\n          \"nameEn\": \"Cook Islands\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"CR\",\n          \"name\": \"Коста-Рика\",\n          \"nameEn\": \"Costa Rica\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"HR\",\n          \"name\": \"Хорватия\",\n          \"nameEn\": \"Croatia\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"CW\",\n          \"name\": \"Кюрасао\",\n          \"nameEn\": \"Curaçao\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"CY\",\n          \"name\": \"Кипр\",\n          \"nameEn\": \"Cyprus\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"CZ\",\n          \"name\": \"Чехия\",\n          \"nameEn\": \"Czechia\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"CI\",\n          \"name\": \"Кот-д’Ивуар\",\n          \"nameEn\": \"Côte d’Ivoire\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"DK\",\n          \"name\": \"Дания\",\n          \"nameEn\": \"Denmark\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"DJ\",\n          \"name\": \"Джибути\",\n          \"nameEn\": \"Djibouti\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"DM\",\n          \"name\": \"Доминика\",\n          \"nameEn\": \"Dominica\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"DO\",\n          \"name\": \"Доминиканская Республика\",\n          \"nameEn\": \"Dominican Republic\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"EC\",\n          \"name\": \"Эквадор\",\n          \"nameEn\": \"Ecuador\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"EG\",\n          \"name\": \"Египет\",\n          \"nameEn\": \"Egypt\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"SV\",\n          \"name\": \"Сальвадор\",\n          \"nameEn\": \"El Salvador\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"GQ\",\n          \"name\": \"Экваториальная Гвинея\",\n          \"nameEn\": \"Equatorial Guinea\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"EE\",\n          \"name\": \"Эстония\",\n          \"nameEn\": \"Estonia\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"SZ\",\n          \"name\": \"Эсватини\",\n          \"nameEn\": \"Eswatini\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"ET\",\n          \"name\": \"Эфиопия\",\n          \"nameEn\": \"Ethiopia\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"FK\",\n          \"name\": \"Фолклендские о-ва\",\n          \"nameEn\": \"Falkland Islands\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"FO\",\n          \"name\": \"Фарерские о-ва\",\n          \"nameEn\": \"Faroe Islands\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"FM\",\n          \"name\": \"Федеративные Штаты Микронезии\",\n          \"nameEn\": \"Micronesia\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"FJ\",\n          \"name\": \"Фиджи\",\n          \"nameEn\": \"Fiji\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"FI\",\n          \"name\": \"Финляндия\",\n          \"nameEn\": \"Finland\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"FR\",\n          \"name\": \"Франция\",\n          \"nameEn\": \"France\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"GF\",\n          \"name\": \"Французская Гвиана\",\n          \"nameEn\": \"French Guiana\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"PF\",\n          \"name\": \"Французская Полинезия\",\n          \"nameEn\": \"French Polynesia\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"TF\",\n          \"name\": \"Французские Южные территории\",\n          \"nameEn\": \"French Southern Territories\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"GA\",\n          \"name\": \"Габон\",\n          \"nameEn\": \"Gabon\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"GM\",\n          \"name\": \"Гамбия\",\n          \"nameEn\": \"Gambia\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"GE\",\n          \"name\": \"Грузия\",\n          \"nameEn\": \"Georgia\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"DE\",\n          \"name\": \"Германия\",\n          \"nameEn\": \"Germany\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"GH\",\n          \"name\": \"Гана\",\n          \"nameEn\": \"Ghana\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"GI\",\n          \"name\": \"Гибралтар\",\n          \"nameEn\": \"Gibraltar\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"GR\",\n          \"name\": \"Греция\",\n          \"nameEn\": \"Greece\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"GL\",\n          \"name\": \"Гренландия\",\n          \"nameEn\": \"Greenland\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"GD\",\n          \"name\": \"Гренада\",\n          \"nameEn\": \"Grenada\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"GP\",\n          \"name\": \"Гваделупа\",\n          \"nameEn\": \"Guadeloupe\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"GU\",\n          \"name\": \"Гуам\",\n          \"nameEn\": \"Guam\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"GT\",\n          \"name\": \"Гватемала\",\n          \"nameEn\": \"Guatemala\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"GG\",\n          \"name\": \"Гернси\",\n          \"nameEn\": \"Guernsey\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"GN\",\n          \"name\": \"Гвинея\",\n          \"nameEn\": \"Guinea\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"GW\",\n          \"name\": \"Гвинея-Бисау\",\n          \"nameEn\": \"Guinea-Bissau\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"GY\",\n          \"name\": \"Гайана\",\n          \"nameEn\": \"Guyana\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"HM\",\n          \"name\": \"о-ва Херд и Макдональд\",\n          \"nameEn\": \"Heard & McDonald Islands\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"VA\",\n          \"name\": \"Ватикан\",\n          \"nameEn\": \"Vatican City\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"HN\",\n          \"name\": \"Гондурас\",\n          \"nameEn\": \"Honduras\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"HK\",\n          \"name\": \"Гонконг (САР)\",\n          \"nameEn\": \"Hong Kong SAR China\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"HU\",\n          \"name\": \"Венгрия\",\n          \"nameEn\": \"Hungary\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"IS\",\n          \"name\": \"Исландия\",\n          \"nameEn\": \"Iceland\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"IN\",\n          \"name\": \"Индия\",\n          \"nameEn\": \"India\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"ID\",\n          \"name\": \"Индонезия\",\n          \"nameEn\": \"Indonesia\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"IE\",\n          \"name\": \"Ирландия\",\n          \"nameEn\": \"Ireland\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"IM\",\n          \"name\": \"о-в Мэн\",\n          \"nameEn\": \"Isle of Man\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"IL\",\n          \"name\": \"Израиль\",\n          \"nameEn\": \"Israel\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"IT\",\n          \"name\": \"Италия\",\n          \"nameEn\": \"Italy\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"JM\",\n          \"name\": \"Ямайка\",\n          \"nameEn\": \"Jamaica\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"JP\",\n          \"name\": \"Япония\",\n          \"nameEn\": \"Japan\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"JE\",\n          \"name\": \"Джерси\",\n          \"nameEn\": \"Jersey\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"JO\",\n          \"name\": \"Иордания\",\n          \"nameEn\": \"Jordan\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"KZ\",\n          \"name\": \"Казахстан\",\n          \"nameEn\": \"Kazakhstan\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"KE\",\n          \"name\": \"Кения\",\n          \"nameEn\": \"Kenya\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"KI\",\n          \"name\": \"Кирибати\",\n          \"nameEn\": \"Kiribati\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"KW\",\n          \"name\": \"Кувейт\",\n          \"nameEn\": \"Kuwait\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"KG\",\n          \"name\": \"Киргизия\",\n          \"nameEn\": \"Kyrgyzstan\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"LA\",\n          \"name\": \"Лаос\",\n          \"nameEn\": \"Laos\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"LV\",\n          \"name\": \"Латвия\",\n          \"nameEn\": \"Latvia\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"LB\",\n          \"name\": \"Ливан\",\n          \"nameEn\": \"Lebanon\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"LS\",\n          \"name\": \"Лесото\",\n          \"nameEn\": \"Lesotho\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"LR\",\n          \"name\": \"Либерия\",\n          \"nameEn\": \"Liberia\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"LI\",\n          \"name\": \"Лихтенштейн\",\n          \"nameEn\": \"Liechtenstein\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"LT\",\n          \"name\": \"Литва\",\n          \"nameEn\": \"Lithuania\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"LU\",\n          \"name\": \"Люксембург\",\n          \"nameEn\": \"Luxembourg\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"MO\",\n          \"name\": \"Макао (САР)\",\n          \"nameEn\": \"Macao SAR China\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"MG\",\n          \"name\": \"Мадагаскар\",\n          \"nameEn\": \"Madagascar\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"MW\",\n          \"name\": \"Малави\",\n          \"nameEn\": \"Malawi\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"MY\",\n          \"name\": \"Малайзия\",\n          \"nameEn\": \"Malaysia\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"MV\",\n          \"name\": \"Мальдивы\",\n          \"nameEn\": \"Maldives\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"MT\",\n          \"name\": \"Мальта\",\n          \"nameEn\": \"Malta\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"MH\",\n          \"name\": \"Маршалловы о-ва\",\n          \"nameEn\": \"Marshall Islands\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"MQ\",\n          \"name\": \"Мартиника\",\n          \"nameEn\": \"Martinique\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"MR\",\n          \"name\": \"Мавритания\",\n          \"nameEn\": \"Mauritania\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"MU\",\n          \"name\": \"Маврикий\",\n          \"nameEn\": \"Mauritius\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"YT\",\n          \"name\": \"Майотта\",\n          \"nameEn\": \"Mayotte\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"MX\",\n          \"name\": \"Мексика\",\n          \"nameEn\": \"Mexico\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"MD\",\n          \"name\": \"Молдова\",\n          \"nameEn\": \"Moldova\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"MC\",\n          \"name\": \"Монако\",\n          \"nameEn\": \"Monaco\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"MN\",\n          \"name\": \"Монголия\",\n          \"nameEn\": \"Mongolia\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"ME\",\n          \"name\": \"Черногория\",\n          \"nameEn\": \"Montenegro\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"MS\",\n          \"name\": \"Монтсеррат\",\n          \"nameEn\": \"Montserrat\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"MA\",\n          \"name\": \"Марокко\",\n          \"nameEn\": \"Morocco\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"MZ\",\n          \"name\": \"Мозамбик\",\n          \"nameEn\": \"Mozambique\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"NA\",\n          \"name\": \"Намибия\",\n          \"nameEn\": \"Namibia\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"NR\",\n          \"name\": \"Науру\",\n          \"nameEn\": \"Nauru\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"NP\",\n          \"name\": \"Непал\",\n          \"nameEn\": \"Nepal\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"NL\",\n          \"name\": \"Нидерланды\",\n          \"nameEn\": \"Netherlands\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"NC\",\n          \"name\": \"Новая Каледония\",\n          \"nameEn\": \"New Caledonia\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"NZ\",\n          \"name\": \"Новая Зеландия\",\n          \"nameEn\": \"New Zealand\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"NE\",\n          \"name\": \"Нигер\",\n          \"nameEn\": \"Niger\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"NG\",\n          \"name\": \"Нигерия\",\n          \"nameEn\": \"Nigeria\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"NU\",\n          \"name\": \"Ниуэ\",\n          \"nameEn\": \"Niue\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"NF\",\n          \"name\": \"о-в Норфолк\",\n          \"nameEn\": \"Norfolk Island\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"MK\",\n          \"name\": \"Северная Македония\",\n          \"nameEn\": \"North Macedonia\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"MP\",\n          \"name\": \"Северные Марианские о-ва\",\n          \"nameEn\": \"Northern Mariana Islands\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"NO\",\n          \"name\": \"Норвегия\",\n          \"nameEn\": \"Norway\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"OM\",\n          \"name\": \"Оман\",\n          \"nameEn\": \"Oman\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"PK\",\n          \"name\": \"Пакистан\",\n          \"nameEn\": \"Pakistan\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"PW\",\n          \"name\": \"Палау\",\n          \"nameEn\": \"Palau\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"PA\",\n          \"name\": \"Панама\",\n          \"nameEn\": \"Panama\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"PG\",\n          \"name\": \"Папуа — Новая Гвинея\",\n          \"nameEn\": \"Papua New Guinea\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"PY\",\n          \"name\": \"Парагвай\",\n          \"nameEn\": \"Paraguay\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"PE\",\n          \"name\": \"Перу\",\n          \"nameEn\": \"Peru\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"PH\",\n          \"name\": \"Филиппины\",\n          \"nameEn\": \"Philippines\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"PN\",\n          \"name\": \"о-ва Питкэрн\",\n          \"nameEn\": \"Pitcairn Islands\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"PL\",\n          \"name\": \"Польша\",\n          \"nameEn\": \"Poland\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"PT\",\n          \"name\": \"Португалия\",\n          \"nameEn\": \"Portugal\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"PR\",\n          \"name\": \"Пуэрто-Рико\",\n          \"nameEn\": \"Puerto Rico\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"QA\",\n          \"name\": \"Катар\",\n          \"nameEn\": \"Qatar\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"RO\",\n          \"name\": \"Румыния\",\n          \"nameEn\": \"Romania\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"RW\",\n          \"name\": \"Руанда\",\n          \"nameEn\": \"Rwanda\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"RE\",\n          \"name\": \"Реюньон\",\n          \"nameEn\": \"Réunion\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"BL\",\n          \"name\": \"Сен-Бартелеми\",\n          \"nameEn\": \"St. Barthélemy\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"SH\",\n          \"name\": \"о-в Св. Елены\",\n          \"nameEn\": \"St. Helena\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"KN\",\n          \"name\": \"Сент-Китс и Невис\",\n          \"nameEn\": \"St. Kitts & Nevis\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"LC\",\n          \"name\": \"Сент-Люсия\",\n          \"nameEn\": \"St. Lucia\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"MF\",\n          \"name\": \"Сен-Мартен\",\n          \"nameEn\": \"St. Martin\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"PM\",\n          \"name\": \"Сен-Пьер и Микелон\",\n          \"nameEn\": \"St. Pierre & Miquelon\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"VC\",\n          \"name\": \"Сент-Винсент и Гренадины\",\n          \"nameEn\": \"St. Vincent & Grenadines\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"WS\",\n          \"name\": \"Самоа\",\n          \"nameEn\": \"Samoa\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"SM\",\n          \"name\": \"Сан-Марино\",\n          \"nameEn\": \"San Marino\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"ST\",\n          \"name\": \"Сан-Томе и Принсипи\",\n          \"nameEn\": \"São Tomé & Príncipe\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"SA\",\n          \"name\": \"Саудовская Аравия\",\n          \"nameEn\": \"Saudi Arabia\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"SN\",\n          \"name\": \"Сенегал\",\n          \"nameEn\": \"Senegal\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"RS\",\n          \"name\": \"Сербия\",\n          \"nameEn\": \"Serbia\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"SC\",\n          \"name\": \"Сейшельские о-ва\",\n          \"nameEn\": \"Seychelles\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"SL\",\n          \"name\": \"Сьерра-Леоне\",\n          \"nameEn\": \"Sierra Leone\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"SG\",\n          \"name\": \"Сингапур\",\n          \"nameEn\": \"Singapore\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"SX\",\n          \"name\": \"Синт-Мартен\",\n          \"nameEn\": \"Sint Maarten\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"SK\",\n          \"name\": \"Словакия\",\n          \"nameEn\": \"Slovakia\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"SI\",\n          \"name\": \"Словения\",\n          \"nameEn\": \"Slovenia\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"SB\",\n          \"name\": \"Соломоновы о-ва\",\n          \"nameEn\": \"Solomon Islands\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"ZA\",\n          \"name\": \"Южно-Африканская Республика\",\n          \"nameEn\": \"South Africa\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"GS\",\n          \"name\": \"Южная Георгия и Южные Сандвичевы о-ва\",\n          \"nameEn\": \"South Georgia & South Sandwich Islands\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"KR\",\n          \"name\": \"Республика Корея\",\n          \"nameEn\": \"South Korea\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"ES\",\n          \"name\": \"Испания\",\n          \"nameEn\": \"Spain\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"LK\",\n          \"name\": \"Шри-Ланка\",\n          \"nameEn\": \"Sri Lanka\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"PS\",\n          \"name\": \"Палестинские территории\",\n          \"nameEn\": \"Palestinian Territories\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"SR\",\n          \"name\": \"Суринам\",\n          \"nameEn\": \"Suriname\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"SJ\",\n          \"name\": \"Шпицберген и Ян-Майен\",\n          \"nameEn\": \"Svalbard & Jan Mayen\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"SE\",\n          \"name\": \"Швеция\",\n          \"nameEn\": \"Sweden\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"CH\",\n          \"name\": \"Швейцария\",\n          \"nameEn\": \"Switzerland\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"TW\",\n          \"name\": \"Тайвань\",\n          \"nameEn\": \"Taiwan\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"TJ\",\n          \"name\": \"Таджикистан\",\n          \"nameEn\": \"Tajikistan\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"TZ\",\n          \"name\": \"Танзания\",\n          \"nameEn\": \"Tanzania\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"TH\",\n          \"name\": \"Таиланд\",\n          \"nameEn\": \"Thailand\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"TL\",\n          \"name\": \"Восточный Тимор\",\n          \"nameEn\": \"Timor-Leste\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"TG\",\n          \"name\": \"Того\",\n          \"nameEn\": \"Togo\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"TK\",\n          \"name\": \"Токелау\",\n          \"nameEn\": \"Tokelau\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"TO\",\n          \"name\": \"Тонга\",\n          \"nameEn\": \"Tonga\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"TT\",\n          \"name\": \"Тринидад и Тобаго\",\n          \"nameEn\": \"Trinidad & Tobago\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"TN\",\n          \"name\": \"Тунис\",\n          \"nameEn\": \"Tunisia\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"TM\",\n          \"name\": \"Туркменистан\",\n          \"nameEn\": \"Turkmenistan\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"TC\",\n          \"name\": \"Тёркс и Кайкос\",\n          \"nameEn\": \"Turks & Caicos Islands\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"TV\",\n          \"name\": \"Тувалу\",\n          \"nameEn\": \"Tuvalu\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"TR\",\n          \"name\": \"Турция\",\n          \"nameEn\": \"Türkiye\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"UG\",\n          \"name\": \"Уганда\",\n          \"nameEn\": \"Uganda\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"UA\",\n          \"name\": \"Украина\",\n          \"nameEn\": \"Ukraine\",\n          \"marker\": \"**\",\n          \"coverage\": \"partial_locations\",\n          \"note\": \"В Украине недоступны Крым, Донецкая, Луганская, Херсонская и Запорожская области. Остальная территория доступна для оплаты картами.\"\n        },\n        {\n          \"code\": \"AE\",\n          \"name\": \"ОАЭ\",\n          \"nameEn\": \"United Arab Emirates\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"GB\",\n          \"name\": \"Великобритания\",\n          \"nameEn\": \"United Kingdom\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"UM\",\n          \"name\": \"Внешние малые о-ва (США)\",\n          \"nameEn\": \"U.S. Outlying Islands\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"US\",\n          \"name\": \"Соединенные Штаты\",\n          \"nameEn\": \"United States\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"UY\",\n          \"name\": \"Уругвай\",\n          \"nameEn\": \"Uruguay\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"UZ\",\n          \"name\": \"Узбекистан\",\n          \"nameEn\": \"Uzbekistan\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"VU\",\n          \"name\": \"Вануату\",\n          \"nameEn\": \"Vanuatu\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"VN\",\n          \"name\": \"Вьетнам\",\n          \"nameEn\": \"Vietnam\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"VG\",\n          \"name\": \"Виргинские о-ва (Великобритания)\",\n          \"nameEn\": \"British Virgin Islands\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"VI\",\n          \"name\": \"Виргинские о-ва (США)\",\n          \"nameEn\": \"U.S. Virgin Islands\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"WF\",\n          \"name\": \"Уоллис и Футуна\",\n          \"nameEn\": \"Wallis & Futuna\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"EH\",\n          \"name\": \"Западная Сахара\",\n          \"nameEn\": \"Western Sahara\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        },\n        {\n          \"code\": \"ZM\",\n          \"name\": \"Замбия\",\n          \"nameEn\": \"Zambia\",\n          \"marker\": \"\",\n          \"coverage\": \"listed\",\n          \"note\": \"\"\n        }\n      ],\n      \"source\": \"owner_provided\",\n      \"status\": \"owner_list_received\",\n      \"policy\": \"worldwide_except_restrictions\",\n      \"independentlyVerified\": false,\n      \"partialCoverage\": {\n        \"marker\": \"**\",\n        \"countryCodes\": [\n          \"UA\"\n        ],\n        \"note\": \"В Украине недоступны Крым, Донецкая, Луганская, Херсонская и Запорожская области. Остальная территория доступна для оплаты картами.\"\n      },\n      \"unresolvedFootnotes\": [],\n      \"approvalGuaranteed\": false\n    }\n  },\n  \"gatewayIntegration\": {\n    \"adapterImplemented\": true,\n    \"contract\": \"v3\",\n    \"liveConfigurationProvided\": null,\n    \"availability\": {\n      \"source\": \"runtime\",\n      \"configurationEndpoint\": \"/api/config\",\n      \"configurationIncludesHealthCheck\": false,\n      \"checkoutEndpoint\": \"/api/checkout/{token}\",\n      \"checkoutIncludesProviderApproval\": false\n    }\n  }\n}\n\nГраницы публичной информации\n\nВ текстах и JSON нет сессий, токенов, личных обращений, платёжных записей пользователей и секретов интеграций. Страницы входа, аккаунта, оплаты, интеграций, личных заявок и модерации не предназначены для поисковой выдачи.\n\nAPI чтения публичной документации не предоставляет права управлять магазином. Для собственных данных требуется действующая сессия, для изменений — дополнительные серверные проверки.\n\nОбновление и цитирование\n\nСтатьи содержат стабильный id, URL, заголовок и дату обновления. При использовании ответа указывайте ссылку на соответствующее руководство и сохраняйте оговорки о неподтверждённых условиях.\n\nНаличие sitemap, llms-файлов и серверного HTML облегчает извлечение содержания, но не гарантирует индексацию, место в поисковой выдаче или использование сторонним ИИ.",
      "readMinutes": 29
    },
    {
      "id": "cost-sharing",
      "title": "Распределение комиссии и НДС",
      "summary": "Для каждого счёта отдельно выберите, какую долю комиссии и НДС оплачивает покупатель. Два независимых ползунка задают долю от 0 до 100% с шагом 1%. Итог виден до создания ссылки.",
      "tags": [
        "распределение",
        "комиссия",
        "ндс",
        "процент",
        "ползунок",
        "feeCustomerPercent",
        "vatCustomerPercent"
      ],
      "sections": [
        {
          "id": "controls",
          "title": "Две настройки для одного заказа",
          "paragraphs": [
            "Ползунок «Комиссия платежа» распределяет всю комиссию за приём: процентную и фиксированную части вместе. Ползунок «НДС» распределяет только налог. Настройки не меняют тариф, ставку налога или базовую цену товара.",
            "Крайнее левое положение означает, что расход полностью оплачивает покупатель; крайнее правое — магазин. Подписи показывают точные проценты и суммы каждой стороны. Для быстрого выбора доступны «Покупатель», «Поровну» и «Магазин»."
          ],
          "bullets": [
            "Доля покупателя добавляется к сумме оплаты.",
            "Доля магазина удерживается из базовой цены заказа.",
            "СБП и криптовалюта: НДС равен нулю, поэтому его ползунок не влияет на итог.",
            "Кнопки и ползунки доступны с клавиатуры; движение не требуется для понимания результата."
          ],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": [
            {
              "label": "Открыть калькулятор",
              "href": "/pricing"
            }
          ]
        },
        {
          "id": "base",
          "title": "Одна база, два независимых расхода",
          "paragraphs": [
            "Для международных карт и Alipay комиссия равна 10% базовой цены плюс $0,50, НДС — 16% базовой цены. Для СБП комиссия равна 8%, для криптовалюты — 4%; НДС для этих двух способов не начисляется.",
            "НДС не включён внутрь исходной цены по формуле 16/116. Комиссия не пересчитывается от суммы вместе с добавленным налогом или долей комиссии покупателя. Вторые 5% комиссии платформы не добавляются: они уже входят в опубликованный тариф."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": {
            "language": "Formula · integer minor units",
            "code": "fee = roundHalfUp(base × rate / 100) + fixed\nvat = vatApplies ? roundHalfUp(base × 16 / 100) : 0\ncustomerFee = roundHalfUp(fee × feeCustomerPercent / 100)\ncustomerVat = roundHalfUp(vat × vatCustomerPercent / 100)\nmerchantFee = fee − customerFee\nmerchantVat = vat − customerVat\ncustomerTotal = base + customerFee + customerVat\nmerchantNet = base − merchantFee − merchantVat"
          },
          "note": "",
          "links": []
        },
        {
          "id": "example",
          "title": "Как распределяется заказ на $5",
          "paragraphs": [
            "В каждом примере ниже базовая цена равна $5,00, полная комиссия по карте — $1,00, НДС — $0,80. Проценты меняют только распределение этих расходов."
          ],
          "bullets": [],
          "steps": [],
          "table": {
            "headers": [
              "Доли покупателя: НДС / комиссия",
              "Покупатель платит",
              "Магазину после удержаний"
            ],
            "rows": [
              [
                "100% / 0% · исходное правило",
                "$5,80",
                "$4,00"
              ],
              [
                "0% / 0% · всё покрывает магазин",
                "$5,00",
                "$3,20"
              ],
              [
                "100% / 100% · всё оплачивает покупатель",
                "$6,80",
                "$5,00"
              ],
              [
                "50% / 23% · своё распределение",
                "$5,63",
                "$3,83"
              ]
            ]
          },
          "code": null,
          "note": "Таблица показывает расчёт распределения. Из этих карточных вариантов текущий шлюз исполняет только 100% НДС / 0% комиссии покупателя. Выплата и её тариф не запускаются этим расчётом; автоматической конвертации USD в USDT нет.",
          "links": []
        },
        {
          "id": "rounding",
          "title": "Округление без потерянной копейки",
          "paragraphs": [
            "Суммы хранятся целыми минимальными единицами валюты. Сначала отдельно округляются полная комиссия и полный налог. Затем доля покупателя округляется по half-up, а магазин получает точный остаток каждого расхода. Поэтому две доли всегда складываются в исходную сумму.",
            "Например, при расходе 1 цент и делении 50/50 покупателю назначается 1 цент, магазину — 0. Процент остаётся 50%, а денежные суммы отражают доступную точность валюты. Сервер отклоняет расчёт с отрицательным зачислением магазину."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": []
        },
        {
          "id": "api",
          "title": "Настройка через API",
          "paragraphs": [
            "Передавайте vatCustomerPercent и feeCustomerPercent как целые числа 0–100. Они относятся к одному создаваемому счёту. Пустая строка, дробный процент и число вне диапазона отклоняются.",
            "Если feeCustomerPercent пропущен, комиссию полностью покрывает магазин. Если vatCustomerPercent пропущен, применяется прежнее поле vatPayer или правило аккаунта. Старые значения customer и merchant соответствуют 100% и 0% НДС покупателя. Не передавайте противоречащие друг другу vatPayer и vatCustomerPercent.",
            "В ответе промежуточная доля НДС отображается как vatPayer=shared. Для нового запроса используйте числовую долю; строка shared не является допустимым значением старого входного поля vatPayer."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": {
            "language": "JSON",
            "code": "{\n  \"title\": \"Design project · order 1042\",\n  \"description\": \"One-time payment for the agreed design work\",\n  \"amountMinor\": 500,\n  \"currency\": \"USD\",\n  \"methods\": [\n    \"card\",\n    \"alipay\"\n  ],\n  \"vatCustomerPercent\": 100,\n  \"feeCustomerPercent\": 0,\n  \"orderId\": \"order-1042\",\n  \"metadata\": {\n    \"campaign\": \"autumn\"\n  }\n}"
          },
          "note": "Пример ниже использует доступное для карточного канала распределение 100% НДС покупателю и всю комиссию магазину. Сохранение других процентов не означает возможность реального списания.",
          "links": [
            {
              "label": "Создать счёт через API",
              "href": "/docs/payment-links-api"
            }
          ]
        },
        {
          "id": "snapshot",
          "title": "Зафиксированные условия",
          "paragraphs": [
            "Сумма, валюта, методы и обе доли фиксируются в счёте. Смена предпочтений магазина не изменяет старые ссылки. Расчёт ползунков показывает распределение, а доступность реального списания определяется возможностями подключённого канала.",
            "Для нового реального платежа картой или Alipay текущий шлюз поддерживает только feeCustomerPercent=0 и vatCustomerPercent=100: комиссию полностью покрывает магазин, НДС полностью добавляется покупателю. Остальные доли можно сохранить в счёте и рассчитать, но такой платёж не запускается и получает unsupported_allocation. Сервер не меняет сохранённые условия автоматически. Для СБП и USDT-криптооплаты доступны все доли комиссии; НДС у них отсутствует."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": []
        }
      ],
      "group": "payments",
      "url": "/docs/cost-sharing",
      "body": "Для каждого счёта отдельно выберите, какую долю комиссии и НДС оплачивает покупатель. Два независимых ползунка задают долю от 0 до 100% с шагом 1%. Итог виден до создания ссылки.\n\nДве настройки для одного заказа\n\nПолзунок «Комиссия платежа» распределяет всю комиссию за приём: процентную и фиксированную части вместе. Ползунок «НДС» распределяет только налог. Настройки не меняют тариф, ставку налога или базовую цену товара.\n\nКрайнее левое положение означает, что расход полностью оплачивает покупатель; крайнее правое — магазин. Подписи показывают точные проценты и суммы каждой стороны. Для быстрого выбора доступны «Покупатель», «Поровну» и «Магазин».\n\nДоля покупателя добавляется к сумме оплаты.\n\nДоля магазина удерживается из базовой цены заказа.\n\nСБП и криптовалюта: НДС равен нулю, поэтому его ползунок не влияет на итог.\n\nКнопки и ползунки доступны с клавиатуры; движение не требуется для понимания результата.\n\nОткрыть калькулятор: https://kevmi.one/ru/pricing\n\nОдна база, два независимых расхода\n\nДля международных карт и Alipay комиссия равна 10% базовой цены плюс $0,50, НДС — 16% базовой цены. Для СБП комиссия равна 8%, для криптовалюты — 4%; НДС для этих двух способов не начисляется.\n\nНДС не включён внутрь исходной цены по формуле 16/116. Комиссия не пересчитывается от суммы вместе с добавленным налогом или долей комиссии покупателя. Вторые 5% комиссии платформы не добавляются: они уже входят в опубликованный тариф.\n\nfee = roundHalfUp(base × rate / 100) + fixed\nvat = vatApplies ? roundHalfUp(base × 16 / 100) : 0\ncustomerFee = roundHalfUp(fee × feeCustomerPercent / 100)\ncustomerVat = roundHalfUp(vat × vatCustomerPercent / 100)\nmerchantFee = fee − customerFee\nmerchantVat = vat − customerVat\ncustomerTotal = base + customerFee + customerVat\nmerchantNet = base − merchantFee − merchantVat\n\nКак распределяется заказ на $5\n\nВ каждом примере ниже базовая цена равна $5,00, полная комиссия по карте — $1,00, НДС — $0,80. Проценты меняют только распределение этих расходов.\n\nДоли покупателя: НДС / комиссия · Покупатель платит · Магазину после удержаний\n100% / 0% · исходное правило · $5,80 · $4,00\n0% / 0% · всё покрывает магазин · $5,00 · $3,20\n100% / 100% · всё оплачивает покупатель · $6,80 · $5,00\n50% / 23% · своё распределение · $5,63 · $3,83\n\nТаблица показывает расчёт распределения. Из этих карточных вариантов текущий шлюз исполняет только 100% НДС / 0% комиссии покупателя. Выплата и её тариф не запускаются этим расчётом; автоматической конвертации USD в USDT нет.\n\nОкругление без потерянной копейки\n\nСуммы хранятся целыми минимальными единицами валюты. Сначала отдельно округляются полная комиссия и полный налог. Затем доля покупателя округляется по half-up, а магазин получает точный остаток каждого расхода. Поэтому две доли всегда складываются в исходную сумму.\n\nНапример, при расходе 1 цент и делении 50/50 покупателю назначается 1 цент, магазину — 0. Процент остаётся 50%, а денежные суммы отражают доступную точность валюты. Сервер отклоняет расчёт с отрицательным зачислением магазину.\n\nНастройка через API\n\nПередавайте vatCustomerPercent и feeCustomerPercent как целые числа 0–100. Они относятся к одному создаваемому счёту. Пустая строка, дробный процент и число вне диапазона отклоняются.\n\nЕсли feeCustomerPercent пропущен, комиссию полностью покрывает магазин. Если vatCustomerPercent пропущен, применяется прежнее поле vatPayer или правило аккаунта. Старые значения customer и merchant соответствуют 100% и 0% НДС покупателя. Не передавайте противоречащие друг другу vatPayer и vatCustomerPercent.\n\nВ ответе промежуточная доля НДС отображается как vatPayer=shared. Для нового запроса используйте числовую долю; строка shared не является допустимым значением старого входного поля vatPayer.\n\n{\n  \"title\": \"Design project · order 1042\",\n  \"description\": \"One-time payment for the agreed design work\",\n  \"amountMinor\": 500,\n  \"currency\": \"USD\",\n  \"methods\": [\n    \"card\",\n    \"alipay\"\n  ],\n  \"vatCustomerPercent\": 100,\n  \"feeCustomerPercent\": 0,\n  \"orderId\": \"order-1042\",\n  \"metadata\": {\n    \"campaign\": \"autumn\"\n  }\n}\n\nПример ниже использует доступное для карточного канала распределение 100% НДС покупателю и всю комиссию магазину. Сохранение других процентов не означает возможность реального списания.\n\nСоздать счёт через API: https://kevmi.one/ru/docs/payment-links-api\n\nЗафиксированные условия\n\nСумма, валюта, методы и обе доли фиксируются в счёте. Смена предпочтений магазина не изменяет старые ссылки. Расчёт ползунков показывает распределение, а доступность реального списания определяется возможностями подключённого канала.\n\nДля нового реального платежа картой или Alipay текущий шлюз поддерживает только feeCustomerPercent=0 и vatCustomerPercent=100: комиссию полностью покрывает магазин, НДС полностью добавляется покупателю. Остальные доли можно сохранить в счёте и рассчитать, но такой платёж не запускается и получает unsupported_allocation. Сервер не меняет сохранённые условия автоматически. Для СБП и USDT-криптооплаты доступны все доли комиссии; НДС у них отсутствует.",
      "readMinutes": 5
    },
    {
      "id": "widgets",
      "title": "Платёжный виджет на вашем сайте",
      "summary": "Откройте отдельную страницу оплаты поверх сайта, встроите её в блок или переведите покупателя по ссылке. Виджет использует готовый публичный checkout URL и не требует API-ключа в браузере.",
      "tags": [
        "виджет",
        "iframe",
        "embed",
        "html",
        "интеграция",
        "modal",
        "checkout"
      ],
      "sections": [
        {
          "id": "flow",
          "title": "От счёта к оплате",
          "paragraphs": [
            "Создайте счёт в /account#links и сразу получите checkoutUrl. Откройте /account#widget, вставьте ссылку и выберите модальное окно, встроенный блок или переход. Ключи и вебхуки доступны в соседних разделах кабинета.",
            "Предпросмотр конструктора всегда использует демонстрационный заказ без списания. В готовом коде виджета сохраняется ваша рабочая ссылка; её условия приходят из серверного счёта.",
            "В интерфейсе для нового счёта USD доступны карты и Alipay, для RUB — СБП, для USDT — криптовалюта. API для совместимости может сохранить USD + crypto, но такая криптооплата не запускается и возвращает crypto_requires_usdt. USD и USDT различаются; автоматической конвертации или курса 1:1 нет. Для криптооплаты нужен отдельный счёт в USDT."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": [
            {
              "label": "Конструктор интеграции",
              "href": "/account#widget"
            },
            {
              "label": "API платёжных ссылок",
              "href": "/docs/payment-links-api"
            }
          ]
        },
        {
          "id": "markup",
          "title": "Кнопка с запасной обычной ссылкой",
          "paragraphs": [
            "В примере показана демо-страница без списания. Для своего заказа замените оба значения адреса на checkoutUrl, полученный от API. Загружайте скрипт с того же домена Kevmi, которому принадлежит ссылка.",
            "Обычный href позволяет открыть checkout, если JavaScript отключён. data-kevmi-label задаёт доступное имя iframe. Подключите скрипт один раз на страницу."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": {
            "language": "HTML",
            "code": "<script src=\"https://kevmi.maxeevmax1.chatgpt.site/widgets/kevmi.js\" defer></script>\n<a href=\"https://kevmi.maxeevmax1.chatgpt.site/en/pay/demo\"\n   data-kevmi-checkout=\"https://kevmi.maxeevmax1.chatgpt.site/en/pay/demo\"\n   data-kevmi-mode=\"modal\"\n   data-kevmi-label=\"Order checkout\">Pay securely</a>"
          },
          "note": "",
          "links": []
        },
        {
          "id": "modes",
          "title": "Три способа открытия",
          "paragraphs": [
            "Для inline используйте контейнер, например div, и замените CHECKOUT_URL_FROM_API реальным URL. Ширина подстраивается под контейнер; сообщения checkout могут менять высоту в разрешённом диапазоне.",
            "Диалог закрывается кнопкой, Escape или нажатием на фон. После закрытия фокус возвращается к исходной кнопке. При включённом уменьшении движения анимация сокращается."
          ],
          "bullets": [],
          "steps": [],
          "table": {
            "headers": [
              "data-kevmi-mode",
              "Поведение",
              "Когда удобно"
            ],
            "rows": [
              [
                "modal",
                "Диалог поверх сайта; значение по умолчанию",
                "Кнопка оплаты рядом с заказом"
              ],
              [
                "inline",
                "Iframe внутри указанного блока",
                "Отдельный шаг оформления на вашем сайте"
              ],
              [
                "redirect",
                "Переход на страницу Kevmi в текущей вкладке",
                "Полная страница оплаты"
              ]
            ]
          },
          "code": {
            "language": "HTML",
            "code": "<div data-kevmi-checkout=\"CHECKOUT_URL_FROM_API\"\n     data-kevmi-mode=\"inline\"\n     data-kevmi-label=\"Order checkout\"></div>"
          },
          "note": "",
          "links": []
        },
        {
          "id": "javascript",
          "title": "Вызов из собственного интерфейса",
          "paragraphs": [
            "События kevmi:opened и kevmi:closed помогают интерфейсу отреагировать на открытие и закрытие. kevmi:error на кнопке сообщает о некорректном URL. Эти события не содержат подтверждения оплаты. Вызывайте API после загрузки скрипта."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": {
            "language": "JavaScript",
            "code": "window.Kevmi.open(checkoutUrl, {\n  mode: 'modal',\n  label: 'Order checkout',\n  closeLabel: 'Close checkout'\n});\n\n// Inline blocks added after page load are detected automatically.\n// You may also request mounting explicitly:\nwindow.Kevmi.mount(document);"
          },
          "note": "",
          "links": []
        },
        {
          "id": "security",
          "title": "Что подтверждает успешный платёж",
          "paragraphs": [
            "Не вставляйте API-ключи и секреты подписи в HTML. Виджет получает только публичную ссылку на один счёт. Реквизиты карты и банковский код шифруются внутри страницы оплаты ключом шлюза; сервер Kevmi не принимает их открытыми.",
            "Сообщение postMessage используется для состояния интерфейса, а не для выдачи товара. Перед обработкой проверяйте origin и источник окна. Окончательный результат берите из проверенного события payment.succeeded или серверного link.payment."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": null,
          "note": "Открытие формы, закрытие виджета и возврат на сайт магазина не подтверждают получение денег.",
          "links": [
            {
              "label": "Подпись и доставка webhook",
              "href": "/docs/webhooks"
            }
          ]
        },
        {
          "id": "deployment",
          "title": "Проверка перед размещением",
          "paragraphs": [],
          "bullets": [
            "Разрешите домен Kevmi в script-src и frame-src вашей Content Security Policy; не расширяйте остальные политики без необходимости.",
            "Проверьте узкий экран, клавиатуру, светлую и тёмную тему.",
            "Убедитесь, что ссылка активна, срок не истёк, а сумма и доли расходов соответствуют заказу.",
            "Сохраните обычную ссылку как запасной способ открытия.",
            "Проверьте отказ и повтор webhook без повторной выдачи товара."
          ],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": []
        }
      ],
      "group": "developers",
      "url": "/docs/widgets",
      "body": "Откройте отдельную страницу оплаты поверх сайта, встроите её в блок или переведите покупателя по ссылке. Виджет использует готовый публичный checkout URL и не требует API-ключа в браузере.\n\nОт счёта к оплате\n\nСоздайте счёт в /account#links и сразу получите checkoutUrl. Откройте /account#widget, вставьте ссылку и выберите модальное окно, встроенный блок или переход. Ключи и вебхуки доступны в соседних разделах кабинета.\n\nПредпросмотр конструктора всегда использует демонстрационный заказ без списания. В готовом коде виджета сохраняется ваша рабочая ссылка; её условия приходят из серверного счёта.\n\nВ интерфейсе для нового счёта USD доступны карты и Alipay, для RUB — СБП, для USDT — криптовалюта. API для совместимости может сохранить USD + crypto, но такая криптооплата не запускается и возвращает crypto_requires_usdt. USD и USDT различаются; автоматической конвертации или курса 1:1 нет. Для криптооплаты нужен отдельный счёт в USDT.\n\nКонструктор интеграции: https://kevmi.one/ru/account#widget\n\nAPI платёжных ссылок: https://kevmi.one/ru/docs/payment-links-api\n\nКнопка с запасной обычной ссылкой\n\nВ примере показана демо-страница без списания. Для своего заказа замените оба значения адреса на checkoutUrl, полученный от API. Загружайте скрипт с того же домена Kevmi, которому принадлежит ссылка.\n\nОбычный href позволяет открыть checkout, если JavaScript отключён. data-kevmi-label задаёт доступное имя iframe. Подключите скрипт один раз на страницу.\n\n<script src=\"https://kevmi.maxeevmax1.chatgpt.site/widgets/kevmi.js\" defer></script>\n<a href=\"https://kevmi.maxeevmax1.chatgpt.site/en/pay/demo\"\n   data-kevmi-checkout=\"https://kevmi.maxeevmax1.chatgpt.site/en/pay/demo\"\n   data-kevmi-mode=\"modal\"\n   data-kevmi-label=\"Order checkout\">Pay securely</a>\n\nТри способа открытия\n\nДля inline используйте контейнер, например div, и замените CHECKOUT_URL_FROM_API реальным URL. Ширина подстраивается под контейнер; сообщения checkout могут менять высоту в разрешённом диапазоне.\n\nДиалог закрывается кнопкой, Escape или нажатием на фон. После закрытия фокус возвращается к исходной кнопке. При включённом уменьшении движения анимация сокращается.\n\ndata-kevmi-mode · Поведение · Когда удобно\nmodal · Диалог поверх сайта; значение по умолчанию · Кнопка оплаты рядом с заказом\ninline · Iframe внутри указанного блока · Отдельный шаг оформления на вашем сайте\nredirect · Переход на страницу Kevmi в текущей вкладке · Полная страница оплаты\n\n<div data-kevmi-checkout=\"CHECKOUT_URL_FROM_API\"\n     data-kevmi-mode=\"inline\"\n     data-kevmi-label=\"Order checkout\"></div>\n\nВызов из собственного интерфейса\n\nСобытия kevmi:opened и kevmi:closed помогают интерфейсу отреагировать на открытие и закрытие. kevmi:error на кнопке сообщает о некорректном URL. Эти события не содержат подтверждения оплаты. Вызывайте API после загрузки скрипта.\n\nwindow.Kevmi.open(checkoutUrl, {\n  mode: 'modal',\n  label: 'Order checkout',\n  closeLabel: 'Close checkout'\n});\n\n// Inline blocks added after page load are detected automatically.\n// You may also request mounting explicitly:\nwindow.Kevmi.mount(document);\n\nЧто подтверждает успешный платёж\n\nНе вставляйте API-ключи и секреты подписи в HTML. Виджет получает только публичную ссылку на один счёт. Реквизиты карты и банковский код шифруются внутри страницы оплаты ключом шлюза; сервер Kevmi не принимает их открытыми.\n\nСообщение postMessage используется для состояния интерфейса, а не для выдачи товара. Перед обработкой проверяйте origin и источник окна. Окончательный результат берите из проверенного события payment.succeeded или серверного link.payment.\n\nОткрытие формы, закрытие виджета и возврат на сайт магазина не подтверждают получение денег.\n\nПодпись и доставка webhook: https://kevmi.one/ru/docs/webhooks\n\nПроверка перед размещением\n\nРазрешите домен Kevmi в script-src и frame-src вашей Content Security Policy; не расширяйте остальные политики без необходимости.\n\nПроверьте узкий экран, клавиатуру, светлую и тёмную тему.\n\nУбедитесь, что ссылка активна, срок не истёк, а сумма и доли расходов соответствуют заказу.\n\nСохраните обычную ссылку как запасной способ открытия.\n\nПроверьте отказ и повтор webhook без повторной выдачи товара.",
      "readMinutes": 4
    },
    {
      "id": "applications",
      "title": "Заявка на подключение магазина",
      "summary": "Представьте сайт на проверку после входа через Telegram и отслеживайте каждый этап по личной ссылке. Автоматические проверки помогают специалисту, а окончательное решение всегда принимает модератор.",
      "tags": [
        "заявка",
        "подключение",
        "модерация",
        "проверка сайта",
        "статус",
        "Telegram",
        "ИИ"
      ],
      "sections": [
        {
          "id": "submit",
          "title": "Заполните заявку",
          "paragraphs": [
            "Для описания требуется 40–3000 символов, для имени проекта — до 100. Сайт должен быть доступен без входа. Адреса с паролем, внутренним хостом, нестандартным портом или параметрами запроса не принимаются.",
            "Право на заявку связано с подтверждённым аккаунтом. Введённый контакт Telegram используется для связи и не меняет владельца. Пересылка адреса заявки не даёт другому пользователю доступ к ней."
          ],
          "bullets": [],
          "steps": [
            "Войдите или зарегистрируйтесь через Telegram и откройте /account#applications.",
            "Укажите публичный HTTPS-адрес сайта, название проекта, категорию и описание товаров или услуг.",
            "Добавьте Telegram-имя для связи. Объясните, что получает покупатель и как исполняется заказ.",
            "Подтвердите право представить сайт на проверку и отправьте форму.",
            "Сохраните адрес /account#applications/{id}: страница сразу открывается после отправки."
          ],
          "table": null,
          "code": null,
          "note": "",
          "links": [
            {
              "label": "Подать заявку",
              "href": "/account#applications"
            }
          ]
        },
        {
          "id": "stages",
          "title": "Четыре этапа проверки",
          "paragraphs": [
            "Соединительная линия и круги отражают сохранённые серверные состояния. Повторное открытие страницы продолжает тот же процесс. Закрытие вкладки не отменяет заявку: фоновые задания продолжают работу и восстанавливают прерванные этапы."
          ],
          "bullets": [],
          "steps": [],
          "table": {
            "headers": [
              "Этап",
              "Что происходит",
              "Что видно в статусе"
            ],
            "rows": [
              [
                "Заявка принята",
                "Данные и личный адрес сохранены на сервере",
                "Выполненный первый пункт"
              ],
              [
                "Проверка материалов",
                "ИИ сопоставляет описание с открытым содержимым сайта",
                "Проверка выполняется, завершена или требует специалиста"
              ],
              [
                "Техническая проверка",
                "Проверяются доступность и ограниченный набор ссылок",
                "Отдельный результат и время этапа"
              ],
              [
                "Проверка специалистом",
                "Модератор оценивает сведения и результаты",
                "Ожидание решения, одобрение либо причина отказа"
              ]
            ]
          },
          "code": null,
          "note": "",
          "links": []
        },
        {
          "id": "attention",
          "title": "Жёлтый этап — проверка специалистом",
          "paragraphs": [
            "Жёлтый круг означает, что этап требует внимания: например, материалов недостаточно, ссылка недоступна или автоматический результат нельзя уверенно принять. Это не окончательный отказ. На странице указан следующий шаг.",
            "Модератор может подтвердить текущий этап, после чего проверка продолжится со следующего. При отказе этап отмечается крестиком, а заявитель видит причину, которую модератор проверил и может отредактировать перед отправкой. Подтверждение одного этапа не заменяет окончательную ручную проверку."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": []
        },
        {
          "id": "scope",
          "title": "Границы автоматической проверки",
          "paragraphs": [
            "Проверяется открытая главная страница: HTTPS, HTTP-ответ, заголовок, текст и подозрительные шаблоны ссылок. Дополнительно запрашиваются заголовки не более трёх ссылок того же сайта. Число переходов, размер ответа и время запроса ограничены.",
            "Проверка не входит в закрытые разделы, не запускает скачанные файлы и не заменяет аудит безопасности либо антивирус. Успешный этап не гарантирует отсутствие вредоносного кода на всех страницах.",
            "Содержимое сайта считается недоверенными данными. Текст на сайте не может назначить администратора, изменить условия Kevmi или утвердить заявку. Недоступный ИИ и некорректный ответ модели переводят этап специалисту, а не отмечают его успешно."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": []
        },
        {
          "id": "updates",
          "title": "Уведомления в Telegram",
          "paragraphs": [
            "При получении заявки, завершении этапа, передаче специалисту и итоговом решении создаётся уведомление с личной ссылкой. Сообщения относятся к категории «Поддержка» в настройках аккаунта. При выключенной категории сообщения не отправляются.",
            "Событие заявки и запись уведомления сохраняются вместе. Доставка в Telegram идёт через очередь с повторными попытками и зависит от подключённого бота. Страница статуса остаётся источником текущего результата, даже если Telegram недоступен или бот заблокирован.",
            "Модерация получает отдельное уведомление. Подтвердить этап из Telegram может только пользователь из серверного списка модераторов; устаревшая кнопка не применяет повторное решение. Причина отказа редактируется в разделе модерации."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": [
            {
              "label": "Настройки уведомлений",
              "href": "/docs/notifications"
            }
          ]
        },
        {
          "id": "api",
          "title": "Контракт заявки и решения",
          "paragraphs": [
            "Владелец определяется из сессии. Поля userId, status, роль и результаты проверки не принимаются от заявителя. Повтор создания с тем же Idempotency-Key и телом возвращает исходную заявку; другое тело с тем же ключом даёт конфликт.",
            "Решение модератора применяется только к ожидаемой версии заявки. При одновременных решениях сохраняется одно; второму запросу возвращается 409. Причина отказа — обычный текст от 10 до 1500 символов. Внутренние результаты проверок доступны только модераторам."
          ],
          "bullets": [],
          "steps": [],
          "table": {
            "headers": [
              "Маршрут",
              "Доступ и поведение"
            ],
            "rows": [
              [
                "POST /api/applications",
                "Сессия + CSRF + Idempotency-Key; 202 и личный url"
              ],
              [
                "GET /api/applications",
                "Список заявок текущего аккаунта"
              ],
              [
                "GET /api/applications/{id}",
                "Свои данные, этапы и публичная история"
              ],
              [
                "POST /api/applications/{id}/resume",
                "Сессия + CSRF; продолжает только processing"
              ],
              [
                "GET /api/moderation/applications",
                "Только подтверждённый модератор"
              ],
              [
                "POST /api/moderation/applications/{id}/decision",
                "approve_step или reject, expectedVersion и причина отказа"
              ]
            ]
          },
          "code": null,
          "note": "",
          "links": []
        },
        {
          "id": "outcome",
          "title": "После решения",
          "paragraphs": [
            "Новый платёж и подготовка карточного запроса требуют одобренной последней заявки магазина на проверку сайта. Одобрение само по себе не подключает платёжный шлюз. Если проверка магазина изменилась после отправки платежа, уже созданная операция остаётся доступна для статуса, сверки и запрошенного банковского кода.",
            "При отклонении магазин видит причину и может исправить материалы перед новой заявкой. Жёлтый этап означает, что решение ещё у специалиста; это не автоматическое одобрение."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": [
            {
              "label": "Поддержка",
              "href": "/?support=open"
            },
            {
              "label": "Готовность платёжного шлюза",
              "href": "/docs/gateway"
            }
          ]
        },
        {
          "id": "stores-usd",
          "title": "Несколько магазинов и единая цена в USD",
          "paragraphs": [
            "В меню магазина выберите «Все магазины» для общего обзора и операций или конкретный магазин для его данных. Каждый магазин имеет собственный storeId, название, правило НДС, счета, API-ключи, вебхуки, журнал событий и заявку на проверку сайта. Уведомления и обращения принадлежат аккаунту. Можно создать до 100 магазинов. Ранее созданные данные сохранены в первом магазине.",
            "Новые ссылки из кабинета используют pricingMode=\"universal\": базовая цена хранится в USD. Any включает card, alipay, sbp и crypto; при необходимости магазин выбирает подмножество. Карты и Alipay оплачиваются в USD, СБП — в RUB по официальному курсу USD/RUB Банка России, криптовалюта — в USDT по явно установленному соотношению 1 USD = 1 USDT. Это правило расчёта счёта, а не рыночная котировка USDT. Курс другой монеты и точные реквизиты предоставляет шлюз перед переводом.",
            "Курс ЦБ и обе суммы сохраняются при создании. Ссылки с рублёвой конвертацией действуют не более 24 часов. Если курс получить не удалось, создание возвращает FX_UNAVAILABLE; выдуманный или старый запасной курс не применяется. amountMinor и quotes в ответе владельцу выражены в базовой валюте USD; quotes[method].settlement содержит сумму и валюту конкретного способа. Публичный checkout возвращает выбранную валюту оплаты в currency, исходную цену в baseAmountMinor/baseCurrency и курс в fx. Возврат к другой валюте после отправки платежа запрещён: у счёта одна операция шлюза.",
            "Для серверной интеграции создайте API-ключ внутри выбранного магазина и передавайте Authorization: Bearer <key>. Привязка ключа к магазину неизменна: заголовок X-Kevmi-Store не позволяет получить данные другого магазина. Для браузерной сессии передавайте X-Kevmi-Store: <storeId>; без заголовка используется первый магазин. Значение all разрешено только для GET /api/account/dashboard и GET /api/payment-links. Изменения требуют выбранного магазина, Origin и X-CSRF-Token. ID аккаунта и ID магазина — разные идентификаторы.",
            "Без pricingMode=\"universal\" API сохраняет прежний режим native и исходные ограничения валют для совместимости. Старые ссылки не пересчитываются. Подтверждённые поступления в обзоре — это проверенные платежи за вычетом расходов по сохранённому расчёту, а не доступный остаток для вывода. Валюты старых счетов учитываются раздельно; выплаты согласуются с поддержкой. Подтверждение исполнения заказа проверяйте через payment.fulfillmentReady=true и payment.status=\"succeeded\" в серверном API, журнале событий или подписанном вебхуке."
          ],
          "bullets": [],
          "steps": [],
          "table": null,
          "code": null,
          "note": "",
          "links": []
        }
      ],
      "group": "start",
      "url": "/docs/applications",
      "body": "Представьте сайт на проверку после входа через Telegram и отслеживайте каждый этап по личной ссылке. Автоматические проверки помогают специалисту, а окончательное решение всегда принимает модератор.\n\nЗаполните заявку\n\nДля описания требуется 40–3000 символов, для имени проекта — до 100. Сайт должен быть доступен без входа. Адреса с паролем, внутренним хостом, нестандартным портом или параметрами запроса не принимаются.\n\nПраво на заявку связано с подтверждённым аккаунтом. Введённый контакт Telegram используется для связи и не меняет владельца. Пересылка адреса заявки не даёт другому пользователю доступ к ней.\n\n1. Войдите или зарегистрируйтесь через Telegram и откройте /account#applications.\n\n2. Укажите публичный HTTPS-адрес сайта, название проекта, категорию и описание товаров или услуг.\n\n3. Добавьте Telegram-имя для связи. Объясните, что получает покупатель и как исполняется заказ.\n\n4. Подтвердите право представить сайт на проверку и отправьте форму.\n\n5. Сохраните адрес /account#applications/{id}: страница сразу открывается после отправки.\n\nПодать заявку: https://kevmi.one/ru/account#applications\n\nЧетыре этапа проверки\n\nСоединительная линия и круги отражают сохранённые серверные состояния. Повторное открытие страницы продолжает тот же процесс. Закрытие вкладки не отменяет заявку: фоновые задания продолжают работу и восстанавливают прерванные этапы.\n\nЭтап · Что происходит · Что видно в статусе\nЗаявка принята · Данные и личный адрес сохранены на сервере · Выполненный первый пункт\nПроверка материалов · ИИ сопоставляет описание с открытым содержимым сайта · Проверка выполняется, завершена или требует специалиста\nТехническая проверка · Проверяются доступность и ограниченный набор ссылок · Отдельный результат и время этапа\nПроверка специалистом · Модератор оценивает сведения и результаты · Ожидание решения, одобрение либо причина отказа\n\nЖёлтый этап — проверка специалистом\n\nЖёлтый круг означает, что этап требует внимания: например, материалов недостаточно, ссылка недоступна или автоматический результат нельзя уверенно принять. Это не окончательный отказ. На странице указан следующий шаг.\n\nМодератор может подтвердить текущий этап, после чего проверка продолжится со следующего. При отказе этап отмечается крестиком, а заявитель видит причину, которую модератор проверил и может отредактировать перед отправкой. Подтверждение одного этапа не заменяет окончательную ручную проверку.\n\nГраницы автоматической проверки\n\nПроверяется открытая главная страница: HTTPS, HTTP-ответ, заголовок, текст и подозрительные шаблоны ссылок. Дополнительно запрашиваются заголовки не более трёх ссылок того же сайта. Число переходов, размер ответа и время запроса ограничены.\n\nПроверка не входит в закрытые разделы, не запускает скачанные файлы и не заменяет аудит безопасности либо антивирус. Успешный этап не гарантирует отсутствие вредоносного кода на всех страницах.\n\nСодержимое сайта считается недоверенными данными. Текст на сайте не может назначить администратора, изменить условия Kevmi или утвердить заявку. Недоступный ИИ и некорректный ответ модели переводят этап специалисту, а не отмечают его успешно.\n\nУведомления в Telegram\n\nПри получении заявки, завершении этапа, передаче специалисту и итоговом решении создаётся уведомление с личной ссылкой. Сообщения относятся к категории «Поддержка» в настройках аккаунта. При выключенной категории сообщения не отправляются.\n\nСобытие заявки и запись уведомления сохраняются вместе. Доставка в Telegram идёт через очередь с повторными попытками и зависит от подключённого бота. Страница статуса остаётся источником текущего результата, даже если Telegram недоступен или бот заблокирован.\n\nМодерация получает отдельное уведомление. Подтвердить этап из Telegram может только пользователь из серверного списка модераторов; устаревшая кнопка не применяет повторное решение. Причина отказа редактируется в разделе модерации.\n\nНастройки уведомлений: https://kevmi.one/ru/docs/notifications\n\nКонтракт заявки и решения\n\nВладелец определяется из сессии. Поля userId, status, роль и результаты проверки не принимаются от заявителя. Повтор создания с тем же Idempotency-Key и телом возвращает исходную заявку; другое тело с тем же ключом даёт конфликт.\n\nРешение модератора применяется только к ожидаемой версии заявки. При одновременных решениях сохраняется одно; второму запросу возвращается 409. Причина отказа — обычный текст от 10 до 1500 символов. Внутренние результаты проверок доступны только модераторам.\n\nМаршрут · Доступ и поведение\nPOST /api/applications · Сессия + CSRF + Idempotency-Key; 202 и личный url\nGET /api/applications · Список заявок текущего аккаунта\nGET /api/applications/{id} · Свои данные, этапы и публичная история\nPOST /api/applications/{id}/resume · Сессия + CSRF; продолжает только processing\nGET /api/moderation/applications · Только подтверждённый модератор\nPOST /api/moderation/applications/{id}/decision · approve_step или reject, expectedVersion и причина отказа\n\nПосле решения\n\nНовый платёж и подготовка карточного запроса требуют одобренной последней заявки магазина на проверку сайта. Одобрение само по себе не подключает платёжный шлюз. Если проверка магазина изменилась после отправки платежа, уже созданная операция остаётся доступна для статуса, сверки и запрошенного банковского кода.\n\nПри отклонении магазин видит причину и может исправить материалы перед новой заявкой. Жёлтый этап означает, что решение ещё у специалиста; это не автоматическое одобрение.\n\nПоддержка: https://kevmi.one/ru?support=open\n\nГотовность платёжного шлюза: https://kevmi.one/ru/docs/gateway\n\nНесколько магазинов и единая цена в USD\n\nВ меню магазина выберите «Все магазины» для общего обзора и операций или конкретный магазин для его данных. Каждый магазин имеет собственный storeId, название, правило НДС, счета, API-ключи, вебхуки, журнал событий и заявку на проверку сайта. Уведомления и обращения принадлежат аккаунту. Можно создать до 100 магазинов. Ранее созданные данные сохранены в первом магазине.\n\nНовые ссылки из кабинета используют pricingMode=\"universal\": базовая цена хранится в USD. Any включает card, alipay, sbp и crypto; при необходимости магазин выбирает подмножество. Карты и Alipay оплачиваются в USD, СБП — в RUB по официальному курсу USD/RUB Банка России, криптовалюта — в USDT по явно установленному соотношению 1 USD = 1 USDT. Это правило расчёта счёта, а не рыночная котировка USDT. Курс другой монеты и точные реквизиты предоставляет шлюз перед переводом.\n\nКурс ЦБ и обе суммы сохраняются при создании. Ссылки с рублёвой конвертацией действуют не более 24 часов. Если курс получить не удалось, создание возвращает FX_UNAVAILABLE; выдуманный или старый запасной курс не применяется. amountMinor и quotes в ответе владельцу выражены в базовой валюте USD; quotes[method].settlement содержит сумму и валюту конкретного способа. Публичный checkout возвращает выбранную валюту оплаты в currency, исходную цену в baseAmountMinor/baseCurrency и курс в fx. Возврат к другой валюте после отправки платежа запрещён: у счёта одна операция шлюза.\n\nДля серверной интеграции создайте API-ключ внутри выбранного магазина и передавайте Authorization: Bearer <key>. Привязка ключа к магазину неизменна: заголовок X-Kevmi-Store не позволяет получить данные другого магазина. Для браузерной сессии передавайте X-Kevmi-Store: <storeId>; без заголовка используется первый магазин. Значение all разрешено только для GET /api/account/dashboard и GET /api/payment-links. Изменения требуют выбранного магазина, Origin и X-CSRF-Token. ID аккаунта и ID магазина — разные идентификаторы.\n\nБез pricingMode=\"universal\" API сохраняет прежний режим native и исходные ограничения валют для совместимости. Старые ссылки не пересчитываются. Подтверждённые поступления в обзоре — это проверенные платежи за вычетом расходов по сохранённому расчёту, а не доступный остаток для вывода. Валюты старых счетов учитываются раздельно; выплаты согласуются с поддержкой. Подтверждение исполнения заказа проверяйте через payment.fulfillmentReady=true и payment.status=\"succeeded\" в серверном API, журнале событий или подписанном вебхуке.\n\n",
      "readMinutes": 5
    }
  ],
  "facts": {
    "paymentType": "one_time",
    "subscriptionsSupported": false,
    "incomingFees": {
      "card": {
        "percent": 10,
        "fixedUsdMinor": 50,
        "vatApplies": true
      },
      "alipay": {
        "percent": 10,
        "fixedUsdMinor": 50,
        "vatApplies": true
      },
      "sbp": {
        "percent": 8,
        "fixedUsdMinor": 0,
        "vatApplies": false
      },
      "crypto": {
        "percent": 4,
        "fixedUsdMinor": 0,
        "vatApplies": false
      }
    },
    "vat": {
      "ratePercent": 16,
      "base": "order_base_amount",
      "defaultPayer": "customer",
      "payerOptions": [
        "customer",
        "merchant",
        "shared"
      ],
      "customerPercentRange": [
        0,
        100
      ],
      "customerPercentStep": 1,
      "feeBase": "order_base_amount",
      "source": "owner_confirmed",
      "example": {
        "baseUsdMinor": 500,
        "feeUsdMinor": 100,
        "vatUsdMinor": 80,
        "customerPayer": {
          "chargedUsdMinor": 580,
          "merchantNetUsdMinor": 400
        },
        "merchantPayer": {
          "chargedUsdMinor": 500,
          "merchantNetUsdMinor": 320
        }
      }
    },
    "payout": {
      "asset": "USDT",
      "network": "TRC20",
      "sourceFees": {
        "card": "4%",
        "alipay": "4%",
        "sbp": "5% + 400 ₽",
        "crypto": "0% + $3"
      },
      "creationImplemented": false,
      "gatewayBalanceIsMerchantLedger": false,
      "fixedCryptoFeeCurrency": "USD"
    },
    "costSharing": {
      "pricingVersion": 2,
      "independent": [
        "vatCustomerPercent",
        "feeCustomerPercent"
      ],
      "range": [
        0,
        100
      ],
      "step": 1,
      "defaultVatCustomerPercent": 100,
      "defaultFeeCustomerPercent": 0,
      "customerSharesAddedToCharge": true,
      "merchantSharesDeductedFromBase": true,
      "rounding": "half_up_customer_share_then_exact_merchant_remainder",
      "invoiceTermsImmutable": true,
      "liveGatewayAllocation": {
        "card": {
          "vatCustomerPercent": 100,
          "feeCustomerPercent": 0
        },
        "alipay": {
          "vatCustomerPercent": 100,
          "feeCustomerPercent": 0
        },
        "sbp": {
          "feeCustomerPercent": [
            0,
            100
          ],
          "vatApplies": false
        },
        "crypto": {
          "feeCustomerPercent": [
            0,
            100
          ],
          "vatApplies": false
        },
        "otherSavedCardSplitsExecutable": false
      },
      "example": {
        "baseUsdMinor": 500,
        "vatCustomerPercent": 50,
        "feeCustomerPercent": 23,
        "customerVatMinor": 40,
        "customerFeeMinor": 23,
        "customerTotalMinor": 563,
        "merchantNetMinor": 383
      }
    },
    "paymentLinks": {
      "methodSelection": "customer_from_invoice_methods",
      "interfaceAnyMode": "all_methods_for_invoice_currency",
      "allowedMethodsByCurrency": {
        "USD": [
          "card",
          "alipay"
        ],
        "RUB": [
          "sbp"
        ],
        "USDT": [
          "crypto"
        ]
      },
      "apiCreateField": "methods",
      "legacyUsdCryptoApiSaveAccepted": true,
      "legacyUsdCryptoExecutable": false,
      "cryptoRequiresExplicitUsdt": true,
      "ownerGetPaymentField": "payment",
      "ownerGetPaymentNullable": true,
      "createAndPatchPaymentSummaryOptional": true,
      "apiAnyValueSupported": false,
      "quotesPerMethod": true,
      "automaticCurrencyConversion": false
    },
    "merchantAPI": {
      "basePath": "/api/v1",
      "createInvoicePath": "/api/v1/payments",
      "createsCharge": false,
      "returnsCheckoutUrl": true,
      "scopes": [
        "invoices:read",
        "invoices:write",
        "events:read"
      ],
      "defaultKeyLifetimeDays": 90,
      "maximumActiveKeys": 10,
      "keysStoredAsHashes": true
    },
    "widgets": {
      "script": "/widgets/kevmi.js",
      "modes": [
        "modal",
        "inline",
        "redirect"
      ],
      "publicCheckoutUrlOnly": true,
      "browserMessagesConfirmPayment": false
    },
    "webhooks": {
      "events": [
        "invoice.created",
        "invoice.updated",
        "payment.succeeded",
        "payment.failed",
        "payment.refunded",
        "payment.partially_refunded",
        "payment.disputed",
        "payment.review_required"
      ],
      "signatureHeader": "Kevmi-Signature",
      "signatureAlgorithm": "HMAC-SHA256",
      "signatureInput": "timestamp.rawBody",
      "timestampToleranceSeconds": 300,
      "delivery": "at_least_once",
      "maximumAttempts": 6,
      "retryDelaySeconds": [
        60,
        300,
        1800,
        7200,
        43200
      ],
      "endpointVerificationRequired": true,
      "paymentSource": "validated_gateway_receipt",
      "financialStatusFromBrowser": false
    },
    "applications": {
      "path": "/account#applications",
      "trackingPath": "/account#applications/{id}",
      "authentication": "telegram_session",
      "visibility": "owner_and_moderators",
      "stages": [
        "received",
        "ai_review",
        "technical_review",
        "manual_review"
      ],
      "manualFinalDecisionRequired": true,
      "businessTypes": [
        "digital_goods",
        "software",
        "services",
        "physical_goods",
        "education",
        "other"
      ],
      "submissionLimitPerDay": 5,
      "resumeLimitPerMinute": 30,
      "moderationLimitPerMinute": 30,
      "aiReviewsPerHour": 30,
      "unknownAutomatedResults": "needs_review",
      "checks": "bounded_public_content_and_same_origin_links",
      "safetyGuarantee": false,
      "notificationCategory": "support",
      "approvalActivatesGateway": false,
      "latestApprovalRequiredForNewPayment": true,
      "invoiceCreationBeforeApproval": true,
      "existingOperationReadableAfterApprovalChange": true
    },
    "countries": {
      "card": {
        "countryCount": 223,
        "ownerReportedCountryCount": null,
        "coverageLabel": "190+",
        "restrictions": [
          {
            "code": "AF",
            "name": "Афганистан",
            "nameEn": "Afghanistan"
          },
          {
            "code": "AQ",
            "name": "Антарктида",
            "nameEn": "Antarctica"
          },
          {
            "code": "BY",
            "name": "Беларусь",
            "nameEn": "Belarus"
          },
          {
            "code": "MM",
            "name": "Мьянма (Бирма)",
            "nameEn": "Burma (Myanmar)"
          },
          {
            "code": "BI",
            "name": "Бурунди",
            "nameEn": "Burundi"
          },
          {
            "code": "CF",
            "name": "Центрально-Африканская Республика",
            "nameEn": "Central African Republic"
          },
          {
            "code": "TD",
            "name": "Чад",
            "nameEn": "Chad"
          },
          {
            "code": "CU",
            "name": "Куба",
            "nameEn": "Cuba"
          },
          {
            "code": "CD",
            "name": "Конго - Киншаса",
            "nameEn": "Democratic Republic of Congo"
          },
          {
            "code": "CG",
            "name": "Конго - Браззавиль",
            "nameEn": "Republic of Congo"
          },
          {
            "code": "ER",
            "name": "Эритрея",
            "nameEn": "Eritrea"
          },
          {
            "code": "HT",
            "name": "Гаити",
            "nameEn": "Haiti"
          },
          {
            "code": "IR",
            "name": "Иран",
            "nameEn": "Iran"
          },
          {
            "code": "IQ",
            "name": "Ирак",
            "nameEn": "Iraq"
          },
          {
            "code": "LY",
            "name": "Ливия",
            "nameEn": "Libya"
          },
          {
            "code": "ML",
            "name": "Мали",
            "nameEn": "Mali"
          },
          {
            "code": "NI",
            "name": "Никарагуа",
            "nameEn": "Nicaragua"
          },
          {
            "code": "KP",
            "name": "КНДР",
            "nameEn": "North Korea"
          },
          {
            "code": "RU",
            "name": "Россия",
            "nameEn": "Russia"
          },
          {
            "code": "SO",
            "name": "Сомали",
            "nameEn": "Somalia"
          },
          {
            "code": "SS",
            "name": "Южный Судан",
            "nameEn": "South Sudan"
          },
          {
            "code": "SD",
            "name": "Судан",
            "nameEn": "Sudan"
          },
          {
            "code": "SY",
            "name": "Сирия",
            "nameEn": "Syria"
          },
          {
            "code": "VE",
            "name": "Венесуэла",
            "nameEn": "Venezuela"
          },
          {
            "code": "YE",
            "name": "Йемен",
            "nameEn": "Yemen"
          },
          {
            "code": "ZW",
            "name": "Зимбабве",
            "nameEn": "Zimbabwe"
          },
          {
            "code": "UA-43",
            "countryCode": "UA",
            "name": "Крым",
            "nameEn": "Crimea (Region of Ukraine)"
          },
          {
            "code": "UA-14",
            "countryCode": "UA",
            "name": "Донецкая область",
            "nameEn": "Donetsk (Region of Ukraine)"
          },
          {
            "code": "UA-65",
            "countryCode": "UA",
            "name": "Херсонская область",
            "nameEn": "Kherson (Region of Ukraine)"
          },
          {
            "code": "UA-09",
            "countryCode": "UA",
            "name": "Луганская область",
            "nameEn": "Luhansk (Region of Ukraine)"
          },
          {
            "code": "UA-23",
            "countryCode": "UA",
            "name": "Запорожская область",
            "nameEn": "Zaporizhzhia (Region of Ukraine)"
          },
          {
            "code": "AN",
            "name": "Нидерландские Антильские острова",
            "nameEn": "Netherlands Antilles"
          }
        ],
        "verifiedCountryCount": null,
        "exactList": [
          "AX",
          "AL",
          "DZ",
          "AS",
          "AD",
          "AO",
          "AI",
          "AG",
          "AR",
          "AM",
          "AW",
          "AU",
          "AT",
          "AZ",
          "BS",
          "BH",
          "BD",
          "BB",
          "BE",
          "BZ",
          "BJ",
          "BM",
          "BT",
          "BO",
          "BQ",
          "BA",
          "BW",
          "BV",
          "BR",
          "IO",
          "BN",
          "BG",
          "BF",
          "CV",
          "KH",
          "CM",
          "CA",
          "KY",
          "CL",
          "CN",
          "CX",
          "CC",
          "CO",
          "KM",
          "CK",
          "CR",
          "HR",
          "CW",
          "CY",
          "CZ",
          "CI",
          "DK",
          "DJ",
          "DM",
          "DO",
          "EC",
          "EG",
          "SV",
          "GQ",
          "EE",
          "SZ",
          "ET",
          "FK",
          "FO",
          "FM",
          "FJ",
          "FI",
          "FR",
          "GF",
          "PF",
          "TF",
          "GA",
          "GM",
          "GE",
          "DE",
          "GH",
          "GI",
          "GR",
          "GL",
          "GD",
          "GP",
          "GU",
          "GT",
          "GG",
          "GN",
          "GW",
          "GY",
          "HM",
          "VA",
          "HN",
          "HK",
          "HU",
          "IS",
          "IN",
          "ID",
          "IE",
          "IM",
          "IL",
          "IT",
          "JM",
          "JP",
          "JE",
          "JO",
          "KZ",
          "KE",
          "KI",
          "KW",
          "KG",
          "LA",
          "LV",
          "LB",
          "LS",
          "LR",
          "LI",
          "LT",
          "LU",
          "MO",
          "MG",
          "MW",
          "MY",
          "MV",
          "MT",
          "MH",
          "MQ",
          "MR",
          "MU",
          "YT",
          "MX",
          "MD",
          "MC",
          "MN",
          "ME",
          "MS",
          "MA",
          "MZ",
          "NA",
          "NR",
          "NP",
          "NL",
          "NC",
          "NZ",
          "NE",
          "NG",
          "NU",
          "NF",
          "MK",
          "MP",
          "NO",
          "OM",
          "PK",
          "PW",
          "PA",
          "PG",
          "PY",
          "PE",
          "PH",
          "PN",
          "PL",
          "PT",
          "PR",
          "QA",
          "RO",
          "RW",
          "RE",
          "BL",
          "SH",
          "KN",
          "LC",
          "MF",
          "PM",
          "VC",
          "WS",
          "SM",
          "ST",
          "SA",
          "SN",
          "RS",
          "SC",
          "SL",
          "SG",
          "SX",
          "SK",
          "SI",
          "SB",
          "ZA",
          "GS",
          "KR",
          "ES",
          "LK",
          "PS",
          "SR",
          "SJ",
          "SE",
          "CH",
          "TW",
          "TJ",
          "TZ",
          "TH",
          "TL",
          "TG",
          "TK",
          "TO",
          "TT",
          "TN",
          "TM",
          "TC",
          "TV",
          "TR",
          "UG",
          "UA",
          "AE",
          "GB",
          "UM",
          "US",
          "UY",
          "UZ",
          "VU",
          "VN",
          "VG",
          "VI",
          "WF",
          "EH",
          "ZM"
        ],
        "records": [
          {
            "code": "AX",
            "name": "Аландские о-ва",
            "nameEn": "Åland Islands",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "AL",
            "name": "Албания",
            "nameEn": "Albania",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "DZ",
            "name": "Алжир",
            "nameEn": "Algeria",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "AS",
            "name": "Американское Самоа",
            "nameEn": "American Samoa",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "AD",
            "name": "Андорра",
            "nameEn": "Andorra",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "AO",
            "name": "Ангола",
            "nameEn": "Angola",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "AI",
            "name": "Ангилья",
            "nameEn": "Anguilla",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "AG",
            "name": "Антигуа и Барбуда",
            "nameEn": "Antigua & Barbuda",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "AR",
            "name": "Аргентина",
            "nameEn": "Argentina",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "AM",
            "name": "Армения",
            "nameEn": "Armenia",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "AW",
            "name": "Аруба",
            "nameEn": "Aruba",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "AU",
            "name": "Австралия",
            "nameEn": "Australia",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "AT",
            "name": "Австрия",
            "nameEn": "Austria",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "AZ",
            "name": "Азербайджан",
            "nameEn": "Azerbaijan",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "BS",
            "name": "Багамы",
            "nameEn": "Bahamas",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "BH",
            "name": "Бахрейн",
            "nameEn": "Bahrain",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "BD",
            "name": "Бангладеш",
            "nameEn": "Bangladesh",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "BB",
            "name": "Барбадос",
            "nameEn": "Barbados",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "BE",
            "name": "Бельгия",
            "nameEn": "Belgium",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "BZ",
            "name": "Белиз",
            "nameEn": "Belize",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "BJ",
            "name": "Бенин",
            "nameEn": "Benin",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "BM",
            "name": "Бермудские о-ва",
            "nameEn": "Bermuda",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "BT",
            "name": "Бутан",
            "nameEn": "Bhutan",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "BO",
            "name": "Боливия",
            "nameEn": "Bolivia",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "BQ",
            "name": "Бонэйр, Синт-Эстатиус и Саба",
            "nameEn": "Caribbean Netherlands",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "BA",
            "name": "Босния и Герцеговина",
            "nameEn": "Bosnia & Herzegovina",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "BW",
            "name": "Ботсвана",
            "nameEn": "Botswana",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "BV",
            "name": "о-в Буве",
            "nameEn": "Bouvet Island",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "BR",
            "name": "Бразилия",
            "nameEn": "Brazil",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "IO",
            "name": "Британская территория в Индийском океане",
            "nameEn": "British Indian Ocean Territory",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "BN",
            "name": "Бруней",
            "nameEn": "Brunei",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "BG",
            "name": "Болгария",
            "nameEn": "Bulgaria",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "BF",
            "name": "Буркина-Фасо",
            "nameEn": "Burkina Faso",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "CV",
            "name": "Кабо-Верде",
            "nameEn": "Cape Verde",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "KH",
            "name": "Камбоджа",
            "nameEn": "Cambodia",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "CM",
            "name": "Камерун",
            "nameEn": "Cameroon",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "CA",
            "name": "Канада",
            "nameEn": "Canada",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "KY",
            "name": "о-ва Кайман",
            "nameEn": "Cayman Islands",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "CL",
            "name": "Чили",
            "nameEn": "Chile",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "CN",
            "name": "Китай",
            "nameEn": "China",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "CX",
            "name": "о-в Рождества",
            "nameEn": "Christmas Island",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "CC",
            "name": "Кокосовые о-ва",
            "nameEn": "Cocos (Keeling) Islands",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "CO",
            "name": "Колумбия",
            "nameEn": "Colombia",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "KM",
            "name": "Коморы",
            "nameEn": "Comoros",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "CK",
            "name": "о-ва Кука",
            "nameEn": "Cook Islands",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "CR",
            "name": "Коста-Рика",
            "nameEn": "Costa Rica",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "HR",
            "name": "Хорватия",
            "nameEn": "Croatia",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "CW",
            "name": "Кюрасао",
            "nameEn": "Curaçao",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "CY",
            "name": "Кипр",
            "nameEn": "Cyprus",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "CZ",
            "name": "Чехия",
            "nameEn": "Czechia",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "CI",
            "name": "Кот-д’Ивуар",
            "nameEn": "Côte d’Ivoire",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "DK",
            "name": "Дания",
            "nameEn": "Denmark",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "DJ",
            "name": "Джибути",
            "nameEn": "Djibouti",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "DM",
            "name": "Доминика",
            "nameEn": "Dominica",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "DO",
            "name": "Доминиканская Республика",
            "nameEn": "Dominican Republic",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "EC",
            "name": "Эквадор",
            "nameEn": "Ecuador",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "EG",
            "name": "Египет",
            "nameEn": "Egypt",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "SV",
            "name": "Сальвадор",
            "nameEn": "El Salvador",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "GQ",
            "name": "Экваториальная Гвинея",
            "nameEn": "Equatorial Guinea",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "EE",
            "name": "Эстония",
            "nameEn": "Estonia",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "SZ",
            "name": "Эсватини",
            "nameEn": "Eswatini",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "ET",
            "name": "Эфиопия",
            "nameEn": "Ethiopia",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "FK",
            "name": "Фолклендские о-ва",
            "nameEn": "Falkland Islands",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "FO",
            "name": "Фарерские о-ва",
            "nameEn": "Faroe Islands",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "FM",
            "name": "Федеративные Штаты Микронезии",
            "nameEn": "Micronesia",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "FJ",
            "name": "Фиджи",
            "nameEn": "Fiji",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "FI",
            "name": "Финляндия",
            "nameEn": "Finland",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "FR",
            "name": "Франция",
            "nameEn": "France",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "GF",
            "name": "Французская Гвиана",
            "nameEn": "French Guiana",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "PF",
            "name": "Французская Полинезия",
            "nameEn": "French Polynesia",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "TF",
            "name": "Французские Южные территории",
            "nameEn": "French Southern Territories",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "GA",
            "name": "Габон",
            "nameEn": "Gabon",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "GM",
            "name": "Гамбия",
            "nameEn": "Gambia",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "GE",
            "name": "Грузия",
            "nameEn": "Georgia",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "DE",
            "name": "Германия",
            "nameEn": "Germany",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "GH",
            "name": "Гана",
            "nameEn": "Ghana",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "GI",
            "name": "Гибралтар",
            "nameEn": "Gibraltar",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "GR",
            "name": "Греция",
            "nameEn": "Greece",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "GL",
            "name": "Гренландия",
            "nameEn": "Greenland",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "GD",
            "name": "Гренада",
            "nameEn": "Grenada",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "GP",
            "name": "Гваделупа",
            "nameEn": "Guadeloupe",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "GU",
            "name": "Гуам",
            "nameEn": "Guam",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "GT",
            "name": "Гватемала",
            "nameEn": "Guatemala",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "GG",
            "name": "Гернси",
            "nameEn": "Guernsey",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "GN",
            "name": "Гвинея",
            "nameEn": "Guinea",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "GW",
            "name": "Гвинея-Бисау",
            "nameEn": "Guinea-Bissau",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "GY",
            "name": "Гайана",
            "nameEn": "Guyana",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "HM",
            "name": "о-ва Херд и Макдональд",
            "nameEn": "Heard & McDonald Islands",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "VA",
            "name": "Ватикан",
            "nameEn": "Vatican City",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "HN",
            "name": "Гондурас",
            "nameEn": "Honduras",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "HK",
            "name": "Гонконг (САР)",
            "nameEn": "Hong Kong SAR China",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "HU",
            "name": "Венгрия",
            "nameEn": "Hungary",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "IS",
            "name": "Исландия",
            "nameEn": "Iceland",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "IN",
            "name": "Индия",
            "nameEn": "India",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "ID",
            "name": "Индонезия",
            "nameEn": "Indonesia",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "IE",
            "name": "Ирландия",
            "nameEn": "Ireland",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "IM",
            "name": "о-в Мэн",
            "nameEn": "Isle of Man",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "IL",
            "name": "Израиль",
            "nameEn": "Israel",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "IT",
            "name": "Италия",
            "nameEn": "Italy",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "JM",
            "name": "Ямайка",
            "nameEn": "Jamaica",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "JP",
            "name": "Япония",
            "nameEn": "Japan",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "JE",
            "name": "Джерси",
            "nameEn": "Jersey",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "JO",
            "name": "Иордания",
            "nameEn": "Jordan",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "KZ",
            "name": "Казахстан",
            "nameEn": "Kazakhstan",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "KE",
            "name": "Кения",
            "nameEn": "Kenya",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "KI",
            "name": "Кирибати",
            "nameEn": "Kiribati",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "KW",
            "name": "Кувейт",
            "nameEn": "Kuwait",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "KG",
            "name": "Киргизия",
            "nameEn": "Kyrgyzstan",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "LA",
            "name": "Лаос",
            "nameEn": "Laos",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "LV",
            "name": "Латвия",
            "nameEn": "Latvia",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "LB",
            "name": "Ливан",
            "nameEn": "Lebanon",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "LS",
            "name": "Лесото",
            "nameEn": "Lesotho",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "LR",
            "name": "Либерия",
            "nameEn": "Liberia",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "LI",
            "name": "Лихтенштейн",
            "nameEn": "Liechtenstein",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "LT",
            "name": "Литва",
            "nameEn": "Lithuania",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "LU",
            "name": "Люксембург",
            "nameEn": "Luxembourg",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "MO",
            "name": "Макао (САР)",
            "nameEn": "Macao SAR China",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "MG",
            "name": "Мадагаскар",
            "nameEn": "Madagascar",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "MW",
            "name": "Малави",
            "nameEn": "Malawi",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "MY",
            "name": "Малайзия",
            "nameEn": "Malaysia",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "MV",
            "name": "Мальдивы",
            "nameEn": "Maldives",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "MT",
            "name": "Мальта",
            "nameEn": "Malta",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "MH",
            "name": "Маршалловы о-ва",
            "nameEn": "Marshall Islands",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "MQ",
            "name": "Мартиника",
            "nameEn": "Martinique",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "MR",
            "name": "Мавритания",
            "nameEn": "Mauritania",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "MU",
            "name": "Маврикий",
            "nameEn": "Mauritius",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "YT",
            "name": "Майотта",
            "nameEn": "Mayotte",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "MX",
            "name": "Мексика",
            "nameEn": "Mexico",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "MD",
            "name": "Молдова",
            "nameEn": "Moldova",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "MC",
            "name": "Монако",
            "nameEn": "Monaco",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "MN",
            "name": "Монголия",
            "nameEn": "Mongolia",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "ME",
            "name": "Черногория",
            "nameEn": "Montenegro",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "MS",
            "name": "Монтсеррат",
            "nameEn": "Montserrat",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "MA",
            "name": "Марокко",
            "nameEn": "Morocco",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "MZ",
            "name": "Мозамбик",
            "nameEn": "Mozambique",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "NA",
            "name": "Намибия",
            "nameEn": "Namibia",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "NR",
            "name": "Науру",
            "nameEn": "Nauru",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "NP",
            "name": "Непал",
            "nameEn": "Nepal",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "NL",
            "name": "Нидерланды",
            "nameEn": "Netherlands",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "NC",
            "name": "Новая Каледония",
            "nameEn": "New Caledonia",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "NZ",
            "name": "Новая Зеландия",
            "nameEn": "New Zealand",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "NE",
            "name": "Нигер",
            "nameEn": "Niger",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "NG",
            "name": "Нигерия",
            "nameEn": "Nigeria",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "NU",
            "name": "Ниуэ",
            "nameEn": "Niue",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "NF",
            "name": "о-в Норфолк",
            "nameEn": "Norfolk Island",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "MK",
            "name": "Северная Македония",
            "nameEn": "North Macedonia",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "MP",
            "name": "Северные Марианские о-ва",
            "nameEn": "Northern Mariana Islands",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "NO",
            "name": "Норвегия",
            "nameEn": "Norway",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "OM",
            "name": "Оман",
            "nameEn": "Oman",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "PK",
            "name": "Пакистан",
            "nameEn": "Pakistan",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "PW",
            "name": "Палау",
            "nameEn": "Palau",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "PA",
            "name": "Панама",
            "nameEn": "Panama",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "PG",
            "name": "Папуа — Новая Гвинея",
            "nameEn": "Papua New Guinea",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "PY",
            "name": "Парагвай",
            "nameEn": "Paraguay",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "PE",
            "name": "Перу",
            "nameEn": "Peru",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "PH",
            "name": "Филиппины",
            "nameEn": "Philippines",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "PN",
            "name": "о-ва Питкэрн",
            "nameEn": "Pitcairn Islands",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "PL",
            "name": "Польша",
            "nameEn": "Poland",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "PT",
            "name": "Португалия",
            "nameEn": "Portugal",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "PR",
            "name": "Пуэрто-Рико",
            "nameEn": "Puerto Rico",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "QA",
            "name": "Катар",
            "nameEn": "Qatar",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "RO",
            "name": "Румыния",
            "nameEn": "Romania",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "RW",
            "name": "Руанда",
            "nameEn": "Rwanda",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "RE",
            "name": "Реюньон",
            "nameEn": "Réunion",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "BL",
            "name": "Сен-Бартелеми",
            "nameEn": "St. Barthélemy",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "SH",
            "name": "о-в Св. Елены",
            "nameEn": "St. Helena",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "KN",
            "name": "Сент-Китс и Невис",
            "nameEn": "St. Kitts & Nevis",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "LC",
            "name": "Сент-Люсия",
            "nameEn": "St. Lucia",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "MF",
            "name": "Сен-Мартен",
            "nameEn": "St. Martin",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "PM",
            "name": "Сен-Пьер и Микелон",
            "nameEn": "St. Pierre & Miquelon",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "VC",
            "name": "Сент-Винсент и Гренадины",
            "nameEn": "St. Vincent & Grenadines",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "WS",
            "name": "Самоа",
            "nameEn": "Samoa",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "SM",
            "name": "Сан-Марино",
            "nameEn": "San Marino",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "ST",
            "name": "Сан-Томе и Принсипи",
            "nameEn": "São Tomé & Príncipe",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "SA",
            "name": "Саудовская Аравия",
            "nameEn": "Saudi Arabia",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "SN",
            "name": "Сенегал",
            "nameEn": "Senegal",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "RS",
            "name": "Сербия",
            "nameEn": "Serbia",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "SC",
            "name": "Сейшельские о-ва",
            "nameEn": "Seychelles",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "SL",
            "name": "Сьерра-Леоне",
            "nameEn": "Sierra Leone",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "SG",
            "name": "Сингапур",
            "nameEn": "Singapore",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "SX",
            "name": "Синт-Мартен",
            "nameEn": "Sint Maarten",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "SK",
            "name": "Словакия",
            "nameEn": "Slovakia",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "SI",
            "name": "Словения",
            "nameEn": "Slovenia",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "SB",
            "name": "Соломоновы о-ва",
            "nameEn": "Solomon Islands",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "ZA",
            "name": "Южно-Африканская Республика",
            "nameEn": "South Africa",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "GS",
            "name": "Южная Георгия и Южные Сандвичевы о-ва",
            "nameEn": "South Georgia & South Sandwich Islands",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "KR",
            "name": "Республика Корея",
            "nameEn": "South Korea",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "ES",
            "name": "Испания",
            "nameEn": "Spain",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "LK",
            "name": "Шри-Ланка",
            "nameEn": "Sri Lanka",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "PS",
            "name": "Палестинские территории",
            "nameEn": "Palestinian Territories",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "SR",
            "name": "Суринам",
            "nameEn": "Suriname",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "SJ",
            "name": "Шпицберген и Ян-Майен",
            "nameEn": "Svalbard & Jan Mayen",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "SE",
            "name": "Швеция",
            "nameEn": "Sweden",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "CH",
            "name": "Швейцария",
            "nameEn": "Switzerland",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "TW",
            "name": "Тайвань",
            "nameEn": "Taiwan",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "TJ",
            "name": "Таджикистан",
            "nameEn": "Tajikistan",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "TZ",
            "name": "Танзания",
            "nameEn": "Tanzania",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "TH",
            "name": "Таиланд",
            "nameEn": "Thailand",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "TL",
            "name": "Восточный Тимор",
            "nameEn": "Timor-Leste",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "TG",
            "name": "Того",
            "nameEn": "Togo",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "TK",
            "name": "Токелау",
            "nameEn": "Tokelau",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "TO",
            "name": "Тонга",
            "nameEn": "Tonga",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "TT",
            "name": "Тринидад и Тобаго",
            "nameEn": "Trinidad & Tobago",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "TN",
            "name": "Тунис",
            "nameEn": "Tunisia",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "TM",
            "name": "Туркменистан",
            "nameEn": "Turkmenistan",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "TC",
            "name": "Тёркс и Кайкос",
            "nameEn": "Turks & Caicos Islands",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "TV",
            "name": "Тувалу",
            "nameEn": "Tuvalu",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "TR",
            "name": "Турция",
            "nameEn": "Türkiye",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "UG",
            "name": "Уганда",
            "nameEn": "Uganda",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "UA",
            "name": "Украина",
            "nameEn": "Ukraine",
            "marker": "**",
            "coverage": "partial_locations",
            "note": "В Украине недоступны Крым, Донецкая, Луганская, Херсонская и Запорожская области. Остальная территория доступна для оплаты картами."
          },
          {
            "code": "AE",
            "name": "ОАЭ",
            "nameEn": "United Arab Emirates",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "GB",
            "name": "Великобритания",
            "nameEn": "United Kingdom",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "UM",
            "name": "Внешние малые о-ва (США)",
            "nameEn": "U.S. Outlying Islands",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "US",
            "name": "Соединенные Штаты",
            "nameEn": "United States",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "UY",
            "name": "Уругвай",
            "nameEn": "Uruguay",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "UZ",
            "name": "Узбекистан",
            "nameEn": "Uzbekistan",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "VU",
            "name": "Вануату",
            "nameEn": "Vanuatu",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "VN",
            "name": "Вьетнам",
            "nameEn": "Vietnam",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "VG",
            "name": "Виргинские о-ва (Великобритания)",
            "nameEn": "British Virgin Islands",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "VI",
            "name": "Виргинские о-ва (США)",
            "nameEn": "U.S. Virgin Islands",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "WF",
            "name": "Уоллис и Футуна",
            "nameEn": "Wallis & Futuna",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "EH",
            "name": "Западная Сахара",
            "nameEn": "Western Sahara",
            "marker": "",
            "coverage": "listed",
            "note": ""
          },
          {
            "code": "ZM",
            "name": "Замбия",
            "nameEn": "Zambia",
            "marker": "",
            "coverage": "listed",
            "note": ""
          }
        ],
        "source": "owner_provided",
        "status": "owner_list_received",
        "policy": "worldwide_except_restrictions",
        "independentlyVerified": false,
        "partialCoverage": {
          "marker": "**",
          "countryCodes": [
            "UA"
          ],
          "note": "В Украине недоступны Крым, Донецкая, Луганская, Херсонская и Запорожская области. Остальная территория доступна для оплаты картами."
        },
        "unresolvedFootnotes": [],
        "approvalGuaranteed": false
      },
      "sbp": [
        "RU"
      ],
      "alipay": [
        "CN"
      ],
      "crypto": {
        "exactList": null,
        "status": "live_catalog_required",
        "invoiceCurrency": "USDT",
        "cataloguePath": "/api/checkout/{token}/crypto-services"
      }
    },
    "cryptoAcceptance": {
      "invoiceCurrency": "USDT",
      "coinCount": 16,
      "pairCount": 31,
      "pairs": [
        {
          "currency": "AVAX",
          "network": "avalanche",
          "networkLabel": "Avalanche C-Chain"
        },
        {
          "currency": "BCH",
          "network": "bch",
          "networkLabel": "Bitcoin Cash"
        },
        {
          "currency": "BNB",
          "network": "bsc",
          "networkLabel": "BNB Smart Chain"
        },
        {
          "currency": "BTC",
          "network": "btc",
          "networkLabel": "Bitcoin"
        },
        {
          "currency": "DAI",
          "network": "bsc",
          "networkLabel": "BNB Smart Chain"
        },
        {
          "currency": "DAI",
          "network": "eth",
          "networkLabel": "Ethereum"
        },
        {
          "currency": "DAI",
          "network": "polygon",
          "networkLabel": "Polygon PoS"
        },
        {
          "currency": "DASH",
          "network": "dash",
          "networkLabel": "Dash"
        },
        {
          "currency": "DOGE",
          "network": "doge",
          "networkLabel": "Dogecoin"
        },
        {
          "currency": "ETH",
          "network": "eth",
          "networkLabel": "Ethereum"
        },
        {
          "currency": "ETH",
          "network": "arbitrum",
          "networkLabel": "Arbitrum One"
        },
        {
          "currency": "ETH",
          "network": "bsc",
          "networkLabel": "BNB Smart Chain"
        },
        {
          "currency": "GRAM",
          "network": "ton",
          "networkLabel": "TON"
        },
        {
          "currency": "LTC",
          "network": "ltc",
          "networkLabel": "Litecoin"
        },
        {
          "currency": "POL",
          "network": "eth",
          "networkLabel": "Ethereum"
        },
        {
          "currency": "POL",
          "network": "polygon",
          "networkLabel": "Polygon PoS"
        },
        {
          "currency": "SHIB",
          "network": "eth",
          "networkLabel": "Ethereum"
        },
        {
          "currency": "TRX",
          "network": "tron",
          "networkLabel": "TRON"
        },
        {
          "currency": "USDC",
          "network": "arbitrum",
          "networkLabel": "Arbitrum One"
        },
        {
          "currency": "USDC",
          "network": "bsc",
          "networkLabel": "BNB Smart Chain"
        },
        {
          "currency": "USDC",
          "network": "polygon",
          "networkLabel": "Polygon PoS"
        },
        {
          "currency": "USDC",
          "network": "eth",
          "networkLabel": "Ethereum"
        },
        {
          "currency": "USDC",
          "network": "avalanche",
          "networkLabel": "Avalanche C-Chain"
        },
        {
          "currency": "USDT",
          "network": "tron",
          "networkLabel": "TRON"
        },
        {
          "currency": "USDT",
          "network": "avalanche",
          "networkLabel": "Avalanche C-Chain"
        },
        {
          "currency": "USDT",
          "network": "bsc",
          "networkLabel": "BNB Smart Chain"
        },
        {
          "currency": "USDT",
          "network": "ton",
          "networkLabel": "TON"
        },
        {
          "currency": "USDT",
          "network": "polygon",
          "networkLabel": "Polygon PoS"
        },
        {
          "currency": "USDT",
          "network": "arbitrum",
          "networkLabel": "Arbitrum One"
        },
        {
          "currency": "USDT",
          "network": "eth",
          "networkLabel": "Ethereum"
        },
        {
          "currency": "XMR",
          "network": "xmr",
          "networkLabel": "Monero"
        }
      ],
      "catalogueSource": "owner_provided",
      "liveAvailabilitySource": "/api/checkout/{token}/crypto-services",
      "referenceCatalogueConfirmsAvailability": false,
      "transferInstructionsSource": "created_gateway_operation",
      "invoiceFixesOtherCoinExchangeRate": false,
      "exactTransferAmountRequired": true,
      "merchantPayout": {
        "asset": "USDT",
        "network": "TRC20",
        "distinctFromAcceptanceNetworks": true,
        "creationImplemented": false
      }
    },
    "support": {
      "knowledgeScope": "all_published_articles_and_facts",
      "articleCount": 25,
      "historyMessagesPerRequest": 6,
      "historyStorage": "browser_local_storage",
      "historySync": "device_only",
      "separateConversations": true,
      "perConversationDrafts": true,
      "pageContext": "safe_section_label_only",
      "privateAccountAccess": false,
      "financialActions": false,
      "fallback": "documentation_search",
      "readinessEndpoint": "/api/config"
    },
    "notifications": {
      "pageSize": 30,
      "readStateStorage": "server",
      "readStateAffectsTelegramDelivery": false,
      "readEndpoint": "/api/notifications/read"
    },
    "gatewayIntegration": {
      "adapterImplemented": true,
      "contract": "v3",
      "liveConfigurationProvided": null,
      "requiredEnvironment": [
        "GATEWAY_API_KEY",
        "GATEWAY_WEBHOOK_SECRET"
      ],
      "connectionModes": {
        "externalHttps": {
          "originEnvironment": "GATEWAY_BASE_URL"
        },
        "selfHostedService": {
          "capability": "GATEWAY_SERVICE",
          "fixedDestination": true,
          "publicGatewayApi": false
        }
      },
      "availability": {
        "source": "runtime",
        "configurationEndpoint": "/api/config",
        "configurationField": "gateway.configured",
        "configurationIncludesHealthCheck": false,
        "checkoutEndpoint": "/api/checkout/{token}",
        "checkoutField": "invoice.availability",
        "checkoutCompatibilityAlias": "invoice.gatewayConnected",
        "checkoutIncludesProviderApproval": false
      },
      "cardTransport": "browser_JWE_to_gateway",
      "cardPlaintextAcceptedByKevmi": false,
      "hostedCardApi": false,
      "sealedAlgorithms": [
        "RSA-OAEP-256",
        "A256GCM"
      ],
      "ingress": {
        "path": "/api/gateway/webhook",
        "signatureHeader": "X-Gateway-Signature",
        "timestampHeader": "X-Gateway-Timestamp",
        "eventIdHeader": "X-Gateway-Event-Id",
        "signatureAlgorithm": "HMAC-SHA256",
        "signatureInput": "timestamp.rawBody",
        "timestampToleranceSeconds": 300,
        "authenticatedOperationReadRequired": true
      },
      "successRequires": [
        "fulfillment_ready",
        "provider_confirmed",
        "exact_paid_amount",
        "no_dispute",
        "crypto_settlement_evidence_if_crypto"
      ],
      "statusDoesNotCharge": true,
      "reconciliationDoesNotCharge": true,
      "oneDispatchedOperationPerInvoice": true,
      "ledgerNotImplemented": true
    },
    "merchantWorkspace": {
      "multipleStores": true,
      "storeLimit": 100,
      "storeEndpoint": "/api/stores",
      "storeHeader": "X-Kevmi-Store",
      "aggregateReadOnly": true,
      "pricingMode": "universal",
      "baseCurrency": "USD",
      "sbpChargeCurrency": "RUB",
      "cryptoChargeCurrency": "USDT",
      "usdUsdtInvoiceRatio": "1:1",
      "referenceRateSource": "https://www.cbr.ru/scripts/XML_daily.asp",
      "fxInvoiceMaxHours": 24,
      "path": "/account",
      "sections": [
        "overview",
        "payments",
        "payouts",
        "pricing",
        "stores",
        "links",
        "applications",
        "keys",
        "webhooks",
        "widget",
        "events",
        "knowledge",
        "store",
        "notifications",
        "support"
      ]
    },
    "gatewayConnected": null,
    "limitsConfirmed": false,
    "scope": "Public product documentation only. No user records or secrets."
  },
  "locale": "ru",
  "docGroups": [
    {
      "id": "start",
      "title": "Начало работы",
      "description": "От знакомства с сервисом до настроенного магазина.",
      "icon": "bolt"
    },
    {
      "id": "payments",
      "title": "Платежи и условия",
      "description": "Ссылки, суммы, НДС, способы оплаты и выплаты.",
      "icon": "card"
    },
    {
      "id": "account",
      "title": "Аккаунт и поддержка",
      "description": "Telegram, уведомления и помощь по вашему вопросу.",
      "icon": "settings"
    },
    {
      "id": "developers",
      "title": "Разработчикам",
      "description": "API, безопасность, webhook и подключение шлюза.",
      "icon": "book"
    }
  ],
  "navPages": [
    {
      "href": "/",
      "title": "Обзор",
      "icon": "grid"
    },
    {
      "href": "/payment-methods",
      "title": "Способы оплаты",
      "icon": "card"
    },
    {
      "href": "/pricing",
      "title": "Тарифы",
      "icon": "percent"
    },
    {
      "href": "/payment-links",
      "title": "Платёжные ссылки",
      "icon": "link"
    },
    {
      "href": "/countries",
      "title": "География",
      "icon": "globe"
    },
    {
      "href": "/docs",
      "title": "Документация",
      "icon": "book"
    },
    {
      "href": "/?support=open",
      "title": "Поддержка",
      "icon": "chat"
    },
    {
      "href": "/integrations",
      "title": "Интеграции",
      "icon": "code"
    }
  ],
  "paymentMethods": [
    {
      "id": "card",
      "name": "Международные карты",
      "shortName": "Карты",
      "description": "Оплата банковской картой для покупателей за рубежом.",
      "incomingPercent": 10,
      "incomingFixedMinor": 50,
      "incomingFixedCurrency": "USD",
      "payoutPercent": 4,
      "payoutFixedMinor": 0,
      "payoutFixedCurrency": "USD",
      "vatApplies": true,
      "region": "Международные платежи",
      "symbol": "card",
      "geography": "Visa и Mastercard из более чем 190 стран, кроме списка ограничений. В Украине исключены пять регионов.",
      "countryCount": 223,
      "ownerReportedCountryCount": null,
      "coverageLabel": "190+"
    },
    {
      "id": "sbp",
      "name": "СБП",
      "shortName": "СБП",
      "description": "Привычный способ оплаты через банк для покупателей в России.",
      "incomingPercent": 8,
      "incomingFixedMinor": 0,
      "incomingFixedCurrency": "RUB",
      "payoutPercent": 5,
      "payoutFixedMinor": 40000,
      "payoutFixedCurrency": "RUB",
      "vatApplies": false,
      "region": "Россия",
      "symbol": "sbp",
      "geography": "Россия. Доступность банка и конкретной операции подтверждается шлюзом.",
      "countryCount": 1
    },
    {
      "id": "alipay",
      "name": "Alipay",
      "shortName": "Alipay",
      "description": "Оплата через Alipay для покупателей в Китае.",
      "incomingPercent": 10,
      "incomingFixedMinor": 50,
      "incomingFixedCurrency": "USD",
      "payoutPercent": 4,
      "payoutFixedMinor": 0,
      "payoutFixedCurrency": "USD",
      "vatApplies": true,
      "region": "Китай",
      "symbol": "alipay",
      "geography": "Китай. Доступность конкретного аккаунта и операции подтверждается шлюзом.",
      "countryCount": 1
    },
    {
      "id": "crypto",
      "name": "Криптовалюта",
      "shortName": "Крипта",
      "description": "Разовые криптоплатежи с комиссией 4% и без НДС.",
      "incomingPercent": 4,
      "incomingFixedMinor": 0,
      "incomingFixedCurrency": "USD",
      "payoutPercent": 0,
      "payoutFixedMinor": 300,
      "payoutFixedCurrency": "USD",
      "vatApplies": false,
      "region": "Цифровые активы",
      "symbol": "crypto",
      "geography": "Все страны мира. Выберите поддерживаемую монету и сеть. Выплаты — в USDT TRC20.",
      "countryCount": null
    }
  ],
  "payoutFees": {
    "card": "4%",
    "alipay": "4%",
    "sbp": "5% + 400 ₽",
    "crypto": "0% + $3"
  }
}
