qrleo

API qrleo.ru

Обзор

API позволяет создавать короткие ссылки и QR-коды программно — без захода в интерфейс. Пригодится для интеграций с CRM, автоматической генерации ссылок для рассылок, массовой маркировки товаров QR-кодами и т. п.

API привязан к команде (общему аккаунту), а не к отдельному пользователю. Все созданные через API ссылки и QR-коды становятся командными — их видят и могут редактировать все участники команды, как и созданные вручную.

Если у вас ещё нет команды и ключа — создайте команду и получите ключ на странице «Команда» (нужна регистрация и подтверждённый email).

Аутентификация

Ключ передаётся в заголовке Authorization:

Authorization: Bearer qrleo_ваш_ключ

Также поддерживаются альтернативные способы передачи — на случай, если ваш HTTP-клиент не умеет удобно задавать заголовок Authorization:

X-Api-Key: qrleo_ваш_ключ

# или полем в теле запроса
api_key=qrleo_ваш_ключ

Запросы принимаются как в формате application/x-www-form-urlencoded (обычные POST-параметры), так и application/json — определяется по заголовку Content-Type.

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

Ограничения

  • До 60 запросов в час на каждый эндпоинт (создание ссылок и создание QR-кодов считаются отдельно), в расчёте на команду — не на отдельный ключ или IP.
  • Содержимое каждого запроса проверяется по тому же чёрному списку доменов и ключевых слов, что и при создании через интерфейс.

POST/api-links.php

ПараметрОбязательныйОписание
target_urlДаАдрес, на который ведёт ссылка. Должен начинаться с http:// или https://.
titleНетНазвание для себя (видно только в списке ссылок).
expires_atНетДата окончания срока действия, формат YYYY-MM-DD. После этой даты ссылка отдаёт 410.

Пример запроса:

curl -X POST https://qrleo.ru/api-links.php \
  -H "Authorization: Bearer qrleo_ваш_ключ" \
  -d "target_url=https://example.com/promo" \
  -d "title=Ссылка для рассылки" \
  -d "expires_at=2026-12-31"

Успешный ответ (201):

{
  "success": true,
  "id": 42,
  "code": "aB3dE9f",
  "short_url": "https://qrleo.ru/s/aB3dE9f",
  "target_url": "https://example.com/promo",
  "title": "Ссылка для рассылки",
  "expires_at": "2026-12-31 23:59:59"
}

Создание QR-кода

POST/api-qr.php

ПараметрОбязательныйОписание
typeНетurl (по умолчанию), text, vcard или wifi.
link_modeНетdynamic (по умолчанию, статистика + редактируемая ссылка) или static.
titleНетНазвание для себя.
Поля содержимогоДа, зависит от typeСм. таблицу ниже.
fg_color, bg_colorНетЦвета в формате #rrggbb. По умолчанию чёрный на белом.
gradient_enabled, gradient_type, fg_color2, gradient_angleНетГрадиент вместо сплошного цвета — те же параметры, что и в форме на сайте.

Поля содержимого в зависимости от type:

ТипПоля
urlurl
texttext
vcardfirst_name, last_name, phone, email, org
wifissid, wifi_password, encryption (WPA/WEP/nopass), hidden

Пример запроса:

curl -X POST https://qrleo.ru/api-qr.php \
  -H "Authorization: Bearer qrleo_ваш_ключ" \
  -d "type=url" \
  -d "url=https://example.com/product/42" \
  -d "title=QR на упаковке" \
  -d "fg_color=%23111827"

Успешный ответ (201):

{
  "success": true,
  "id": 108,
  "code": "Xz1pQ7k",
  "type": "url",
  "link_mode": "dynamic",
  "title": "QR на упаковке",
  "png_url": "https://qrleo.ru/qr-image.php?code=Xz1pQ7k",
  "svg_url": "https://qrleo.ru/qr-image.php?code=Xz1pQ7k&format=svg",
  "redirect_url": "https://qrleo.ru/r/Xz1pQ7k"
}

png_url / svg_url — прямые ссылки на скачивание готового изображения (добавьте &download=1, чтобы отдавался как файл, а не отображался в браузере).

Коды ошибок

Оба эндпоинта отвечают в формате {"success": false, "error": "код", "message": "текст"} с соответствующим HTTP-статусом:

СтатусerrorКогда
401invalid_api_keyКлюч не передан, неверный или отозван
405method_not_allowedЗапрос не методом POST
422invalid_url / url_too_long / invalid_payload / invalid_expires_atНекорректные данные запроса
422blocked_contentСодержимое запрещено чёрным списком
429rate_limitedПревышен лимит 60 запросов в час на команду
500no_owner / create_failedВнутренняя ошибка сервиса

Вопросы по API — через форму обратной связи.