QRay API

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

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

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

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

curl -X POST https://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://qray.io/api/v1/usage \
  -H "X-Api-Key: qray_live_YOUR_KEY"

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

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

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

curl -X POST https://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://qray.io/qr/1c9a7f2b40d861e3.png",
  "share_url": "https://qray.io/qr/1c9a7f2b40d861e3",
  "url": "/qr/1c9a7f2b40d861e3"
}

Эндпоинты

ЭндпоинтОписание
POST /api/v1/demo Generate a QR code without a key (keyless demo)
POST /api/v1/generate Generate a QR code
GET /api/v1/qr_codes List your QR codes
GET /api/v1/qr_codes/:hash Get one QR code
DELETE /api/v1/qr_codes/:hash Delete a QR code
GET /api/v1/qr_codes/:hash/image Get the QR image binary
GET /api/v1/health Service health and deployed version
GET /api/v1/usage Current plan and usage
GET /api/v1/api_keys List your API keys
POST /api/v1/api_keys Create an additional API key
DELETE /api/v1/api_keys/:id Revoke an API key

Нужна машиночитаемая спека? Открой интерактивно или импортируй наш 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://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_colorForeground hex color, e.g. #111113.
style.bg_colorBackground hex color, e.g. #FFFFFF.
style.dot_stylesquare | circle | rounded
style.eye_stylesquare | rounded
style.logo_dataRaw base64 PNG/JPG, no data: prefix (max ~500 KB).
style.gradientTwo or more colors; overrides fg_color.
style.framePNG only; ignored for SVG.

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

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

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

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

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

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

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

Ошибки

HTTPerrorОписание
400missing_parameterA required parameter is missing or the body is malformed.
401unauthorizedMissing, invalid, or revoked API key.
404not_foundResource not found, or owned by another account.
422cannot_delete_active_keyAn API key cannot revoke the key used to authenticate the request.
422invalid_dataThe data to encode is empty or exceeds the length limit.
422unknown_typeqr.type is not one of the supported types.
422validation_failedThe resource could not be saved (see details).
429rate_limitedThe plan's daily request limit is exhausted.
503service_unavailableThe QR generation service is temporarily unavailable.