Витрина QR · обновлено 6 августа 2026
Программный доступ: API Витрины QR
Полевое руководствоПрограммный доступ — это те же короткие ссылки, постоянные страницы и витрины товаров, но без интерфейса: запросом из вашей программы. Работает по токену, который выпускается в кабинете; токен передаётся заголовком Authorization и в любой момент отзывается.
Пример по теме
Содержание+
Как устроен этот сценарий+
Логика материала
От вопроса к проверяемому выводу
Токен выпускается в кабинете и показывается один раз: сервер хранит только его отпечаток. Запросы идут на адреса, начинающиеся с /api/v1/, тело и ответ — JSON; единственное исключение — ручка QR, отдающая картинку. Всё, что создано по токену, сразу принадлежит вашему аккаунту и видно в кабинете.
Товароучётная программа при поступлении партии создаёт короткую ссылку на карточку товара и печатает её на этикетке. Через месяц карточка переезжает — программа меняет цель запросом, напечатанные этикетки продолжают работать.
Разобраться по теме
Токен: выпуск, хранение, отзыв
+
Токен доступа — не то же самое, что вход в кабинет. Сессия браузера живёт в устройстве и гаснет при смене пароля; токен нужен программе на сервере и обязан это переживать. Поэтому он выпускается отдельно и отзывается отдельно.
При выпуске токен показывается ровно один раз. В базе остаётся только его отпечаток, поэтому «напомнить» токен сервис не может физически — утраченный отзывают и выпускают новый. Это то же правило, что и у кодов управления страницами.
Отзыв мгновенный: следующий запрос с отозванным токеном получает тот же отказ, что и запрос с выдуманным. Чужой токен отозвать нельзя, и попытка это сделать неотличима от обращения к несуществующему.
- Войдите в кабинет и выпустите токен в разделе программного доступа — сохраните его сразу.
- Проверьте связь: GET /api/v1/account с заголовком Authorization: Bearer <токен> вернёт ваш тариф и пределы.
- Создайте первую ссылку: 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 то, чего не собираешь, невозможно.
Порядок подключения+
Пошаговая инструкция
Порядок подключения
- Выпустите токен в кабинете и сохраните его
- Проверьте связь запросом GET /api/v1/account
- Создавайте ссылки и страницы запросами POST
- Читайте статистику запросом GET по адресу объекта
- Отзовите токен, если он больше не нужен или мог утечь
До боевого запуска+
Перед печатью или публикацией
До боевого запуска
- Токен хранится в переменной окружения, а не в коде
- Программа готова к ответу 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. Дата редакции не означает новую проверку нормативных источников. Перед применением проверьте действующую редакцию по ссылке. Методика проверки.