Перейти к содержимому

Витрина QR · обновлено 6 августа 2026

Программный доступ: API Витрины QR

Полевое руководство

Программный доступ — это те же короткие ссылки, постоянные страницы и витрины товаров, но без интерфейса: запросом из вашей программы. Работает по токену, который выпускается в кабинете; токен передаётся заголовком Authorization и в любой момент отзывается.

От задачи — к результату
Пример по теме
Содержание
Как устроен этот сценарий

Логика материала

От вопроса к проверяемому выводу

Токен выпускается в кабинете и показывается один раз: сервер хранит только его отпечаток. Запросы идут на адреса, начинающиеся с /api/v1/, тело и ответ — JSON; единственное исключение — ручка QR, отдающая картинку. Всё, что создано по токену, сразу принадлежит вашему аккаунту и видно в кабинете.

Товароучётная программа при поступлении партии создаёт короткую ссылку на карточку товара и печатает её на этикетке. Через месяц карточка переезжает — программа меняет цель запросом, напечатанные этикетки продолжают работать.

Разобраться по теме

Токен: выпуск, хранение, отзыв

Токен доступа — не то же самое, что вход в кабинет. Сессия браузера живёт в устройстве и гаснет при смене пароля; токен нужен программе на сервере и обязан это переживать. Поэтому он выпускается отдельно и отзывается отдельно.

При выпуске токен показывается ровно один раз. В базе остаётся только его отпечаток, поэтому «напомнить» токен сервис не может физически — утраченный отзывают и выпускают новый. Это то же правило, что и у кодов управления страницами.

Отзыв мгновенный: следующий запрос с отозванным токеном получает тот же отказ, что и запрос с выдуманным. Чужой токен отозвать нельзя, и попытка это сделать неотличима от обращения к несуществующему.

Первые три шага
  1. Войдите в кабинет и выпустите токен в разделе программного доступа — сохраните его сразу.
  2. Проверьте связь: GET /api/v1/account с заголовком Authorization: Bearer <токен> вернёт ваш тариф и пределы.
  3. Создайте первую ссылку: POST /api/v1/short-links с телом {"targetUrl": "example.ru/akciya"}.

В ответе придут короткий адрес и код управления. Код нужен, чтобы править ссылку и без API — например с телефона на посадочной странице.

Какие запросы бывают

Адреса построены единообразно: список и создание живут на общем адресе, отдельный объект — на адресе с коротким кодом. Правка принимается методом PATCH, и отсутствующее поле означает «оставить как было»: скрипт, меняющий заголовок, не сотрёт текст страницы.

Из общего правила выбивается одна ручка: GET /api/v1/qr отвечает не JSON, а картинкой — вектором SVG с заголовком image/svg+xml. Она рисует код по любому содержимому, а не только по вашим ссылкам: параметр data принимает адрес, текст, строку Wi-Fi — что угодно. Уровень коррекции задаётся параметром ec (L, M, Q, H; по умолчанию M), размер картинки — параметром size от 128 до 2048 пикселей.

Вектор выбран намеренно: он масштабируется под печать любого размера без потери чёткости, и его принимают типографии. Версия кода и выбранный уровень коррекции возвращаются заголовками x-qr-version и x-qr-ec-level — по ним видно, насколько плотным получился рисунок.

Адреса программного доступа
ЗапросЧто делаетЧто в теле
GET /api/v1/accountтариф, пределы и счётчики
GET /api/v1/qrнарисовать QR вектором SVGпараметры data, ec, size
GET /api/v1/short-linksсписок ваших коротких ссылок
POST /api/v1/short-linksсоздать короткую ссылкуtargetUrl, title
GET /api/v1/short-links/<код>ссылка и статистика переходов
PATCH /api/v1/short-links/<код>сменить цель или подписьtargetUrl, title
GET /api/v1/pagesсписок ваших постоянных страниц
POST /api/v1/pagesсоздать постоянную страницуpageType, title, textContent, links
GET /api/v1/pages/<код>страница, настройки и открытия
PATCH /api/v1/pages/<код>правка содержимого и настроеклюбые поля страницы
GET /api/v1/catalogsсписок ваших витрин без состава
POST /api/v1/catalogsопубликовать витринуshop, description, контакты, products
GET /api/v1/catalogs/<код>витрина целиком, открытия и источники
PATCH /api/v1/catalogs/<код>правка цен, состава и контактовлюбые поля витрины
GET /api/v1/catalogs/<код>/ordersзаказы покупателей этой витрины

Витрины: почему состав и заказы разведены

Витрина — самый тяжёлый объект сервиса: логотип и обложка хранятся строками data:, а товаров бывает сотня. Поэтому список витрин отдаёт только карточки — название, число товаров, открытия и заказы. Полный состав приходит по адресу конкретной витрины, и запрос за списком не превращается в мегабайты трафика.

Заказы вынесены на собственный адрес по другой причине. В них лежат имя и контакт покупателя, а такие сведения не должны приезжать заодно с ценами, когда программа синхронизирует остатки. Запрос за составом витрины персональных данных не содержит вовсе.

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

Как выглядят отказы

Ответ всегда JSON и всегда содержит поле ok. При отказе рядом лежат короткий код ошибки для программы и объяснение по-русски для человека, который будет читать журнал.

Отдельно стоит запомнить одно решение: чужой объект отвечает «не найдено», а не «нет доступа». Разница принципиальная — иначе перебором адресов можно было бы выяснить, какие ссылки существуют у других владельцев.

Коды отказов
КодКогда приходит
api_token_requiredтокена нет, он выдуман, отозван или аккаунт заблокирован
rate_limitedбольше 300 запросов в час на этот токен
invalid_target_urlцель ссылки не http(s) или это уже наш короткий адрес
page_limit_reachedисчерпан предел бесплатного доступа по страницам
catalog_limit_reachedисчерпан предел бесплатного доступа по витринам
short_link_not_foundссылки нет или она принадлежит другому аккаунту
qr_page_not_foundстраницы нет или она принадлежит другому аккаунту
catalog_not_foundвитрины нет или она принадлежит другому аккаунту
data_requiredв запросе QR не передано содержимое кода
bad_ec_levelуровень коррекции не L, M, Q или H
payload_too_largeсодержимое не помещается в QR даже сороковой версии

Чего API не отдаёт — и почему

Статистика через API ровно та же, что в кабинете: число открытий и переходов, разбивка по дням и по источникам. Сведений о посетителях в ней нет, потому что их нет и в базе: переходы считаются без кук, без отпечатков браузера и без записи адреса перешедшего.

Это не пробел, который когда-нибудь заполнится «расширенной аналитикой». Обещание «считаем переходы, не людей» закреплено тестами сервиса, и программный доступ его не обходит: отдать через API то, чего не собираешь, невозможно.

Порядок подключения

Пошаговая инструкция

Порядок подключения

  1. Выпустите токен в кабинете и сохраните его
  2. Проверьте связь запросом GET /api/v1/account
  3. Создавайте ссылки и страницы запросами POST
  4. Читайте статистику запросом GET по адресу объекта
  5. Отзовите токен, если он больше не нужен или мог утечь
До боевого запуска

Перед печатью или публикацией

До боевого запуска

  • Токен хранится в переменной окружения, а не в коде
  • Программа готова к ответу rate_limited и повторяет запрос позже
  • Коды управления, пришедшие при создании, сохранены
  • Ненужные токены отозваны
Возможности и ограничения

Честные границы

Что сервис делает и чего не делает

  • Создавать и править короткие ссылки без интерфейса
  • Создавать и править постоянные QR-страницы
  • Публиковать витрины товаров и обновлять цены по своей выгрузке
  • Забирать заказы покупателей в свою учётную программу
  • Получать готовый QR вектором SVG — под печать любого размера
  • Читать статистику переходов и открытий по дням и источникам
  • Показать, кто открывал страницу или переходил по ссылке — таких сведений сервис не собирает
  • Выдать чужие объекты: не ваш адрес отвечает «не найдено», а не «нет доступа»
  • Обойти пределы бесплатного доступа по страницам и витринам
  • Вернуть утраченный токен — только отозвать и выпустить новый
Вопросы и ответы

Полевое руководство

Программный доступ: API Витрины QR: вопросы

7 вопросов
Нужен ли отдельный тариф для программного доступа?

Нет. Токен доступен любому аккаунту, пределы те же, что и в интерфейсе: страницы ограничены бесплатным доступом, короткие ссылки безлимитны.

Что будет с объектами, если отозвать токен?

Ничего: ссылки и страницы продолжат работать и останутся в кабинете. Токен — это ключ к управлению, а не владелец объектов.

Можно ли создавать через API витрины товаров?

Да, с 6 августа 2026: витрина публикуется запросом POST /api/v1/catalogs, цены и состав правятся через PATCH, заказы забираются с адреса /orders. Пределы те же, что в интерфейсе, — две витрины на бесплатном доступе.

Придёт ли уведомление, когда покупатель оформил заказ?

Нет, о заказах сервис не пишет. Их забирает ваша программа запросом GET /api/v1/catalogs/<код>/orders — когда сама решит спросить, хоть раз в минуту. Письмом приходит только недельная сводка открытий, если вы её включили.

Есть ли готовый коннектор для ИИ-ассистентов?

Пока нет. Коннектор MCP запланирован отдельным шагом после того, как API поработает у первых пользователей и перестанет меняться. Сейчас доступен обычный REST.

Сколько живёт токен?

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

Как получить картинку кода запросом?

GET /api/v1/qr?data=<содержимое> отдаёт вектор SVG. Дополнительно принимаются ec — уровень коррекции, и size — размер картинки в пикселях. Растр не отдаётся: SVG печатается в любом размере без потери чёткости, а перевести его в PNG умеет почти всё.

Следующий осмысленный шаг

Продолжить работу

Источники и проверка
Источники и проверка

Материал обновлён: 6 августа 2026. Дата редакции не означает новую проверку нормативных источников. Перед применением проверьте действующую редакцию по ссылке. Методика проверки.