STAGING

QRay API

Генерируйте QR-коды из своих приложений через простой REST API: все 8 типов данных, PNG и SVG, цвета, градиенты, логотипы и рамки — всё, что умеет веб-генератор.

Получить API-ключ https://stg.qray.io/api/v1

Попробуй прямо сейчас — без регистрации

Вставь это в терминал. Один запрос — и у тебя готовый QR-код:

curl -X POST https://stg.qray.io/api/v1/demo \
  -H "Content-Type: application/json" \
  -d '{"qr":{"type":"url","fields":{"url":"https://qray.io"},"style":{"dot_style":"rounded","gradient":{"colors":["#2563EB","#A3E635"],"angle":45}}}}' \
  -o qr.png && open qr.png

Откроет qr.png (macOS; на Linux — xdg-open qr.png). Ключ не нужен: демо разрешает 10 запросов в час с одного IP.

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

Каждый запрос должен содержать API-ключ в заголовке X-Api-Key. Ключи создаются и управляются в личном кабинете.

curl https://stg.qray.io/api/v1/usage \
  -H "X-Api-Key: qray_live_YOUR_KEY"

Полный ключ показывается один раз — при создании. Храните его в секрет-менеджере: у нас остаётся только SHA-256 дайджест.

Быстрый старт

Сгенерировать стилизованный QR-код для ссылки:

curl -X POST https://stg.qray.io/api/v1/generate \
  -H "X-Api-Key: qray_live_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "qr": {
      "type": "url",
      "fields": { "url": "https://example.com" },
      "format": "png",
      "size": 512,
      "style": {
        "fg_color": "#111113",
        "dot_style": "rounded",
        "gradient": { "colors": ["#2563EB", "#A3E635"], "angle": 45 }
      }
    }
  }'

Ответ содержит картинку в base64 и постоянные ссылки:

{
  "hash": "1c9a7f2b40d861e3",
  "format": "png",
  "size": 512,
  "image": "iVBORw0KGgoAAA…",          // base64
  "image_url": "https://stg.qray.io/qr/1c9a7f2b40d861e3.png",
  "share_url": "https://stg.qray.io/qr/1c9a7f2b40d861e3",
  "url": "/qr/1c9a7f2b40d861e3"
}

Эндпоинты

ЭндпоинтОписание
POST /api/v1/demoСгенерировать картинку QR без ключа (демо, 10/час с IP)
POST /api/v1/generateСгенерировать QR-код; вернёт base64-картинку и постоянные ссылки
GET /api/v1/qr_codesСписок ваших QR-кодов (по 50 на страницу, ?page=N)
GET /api/v1/qr_codes/:hashМетаданные одного QR-кода
GET /api/v1/qr_codes/:hash/imageБинарная картинка (PNG/SVG); ссылка не протухает
DELETE /api/v1/qr_codes/:hashУдалить QR-код
GET /api/v1/usageТекущий план, дневной лимит и расход
GET /api/v1/api_keysСписок ваших API-ключей
POST /api/v1/api_keysСоздать дополнительный ключ ({"name": "…"})
DELETE /api/v1/api_keys/:idОтозвать ключ (ключ текущего запроса отозвать нельзя)

Нужна машиночитаемая спека? Открой интерактивно или импортируй наш OpenAPI-файл в Postman, Insomnia или генератор клиента: Интерактивный API-эксплорер · openapi.yaml

Типы QR и их поля

Тип данных передаётся в qr.type, его поля — в qr.fields:

typefields
urlurl
texttext
wifissid, password, encryption (WPA | WEP | nopass), hidden (true | false)
vcardfirst_name, last_name, phone, email, org, title, url
emailaddress, subject, body
phonenumber
smsnumber, message
geolatitude, longitude

Например, WiFi-QR, который гости сканируют для подключения:

curl -X POST https://stg.qray.io/api/v1/demo \
  -H "Content-Type: application/json" \
  -d '{"qr":{"type":"wifi","fields":{"ssid":"MyCafe","password":"latte123","encryption":"WPA"}}}' \
  -o wifi.png && open wifi.png

Опции и стилизация

ПараметрОписание
formatpng (default) | svg
size256 | 512 (default) | 1024 | 2048
style.fg_color, style.bg_colorhex, e.g. #111113
style.dot_stylesquare (default) | circle | rounded
style.eye_stylesquare (default) | rounded
style.gradient{ "colors": ["#hex", "#hex", …], "angle": 0–360 } — два и более цветов; перекрывает fg_color
style.frame{ "type": "scan-me" | "custom-text", "text": "…", "color": "#hex" } — только PNG; для SVG игнорируется
style.logo_dataPNG/JPG в сыром base64 (без префикса data:), до ~500 КБ. Коррекция ошибок повышается автоматически.

Картинки кэшируются на 24 часа, затем прозрачно регенерируются — image_url постоянен, его можно хотлинкать.

Планы и лимиты

У каждого ключа дневная квота, сбрасывается в полночь UTC:

ПланЗапросы
free100 запросов / день
pro10 000 запросов / день
enterprise100 000 запросов / день

Каждый ответ содержит состояние текущего окна:

X-RateLimit-Limit: 100
X-RateLimit-Remaining: 87

Нужен pro или enterprise? Напишите на support@qray.io — переключим ключ.

Ошибки

HTTPerrorОписание
400missing_parameterНекорректный запрос (например, нет параметра qr)
401unauthorizedКлюч отсутствует, неверен или отозван
404not_foundQR-код не найден (или принадлежит другому аккаунту)
422unknown_typeНеизвестный qr.type
429rate_limitedДневной лимит исчерпан — повторите после полуночи UTC или обновите план
503service_unavailableСервис генерации временно недоступен — повторите с бэкоффом