API генерации QR-кодов

Генерируйте статические QR-коды через API для интеграции в ваши приложения.

API генерации

Генерируйте статические QR-коды через API: отправьте строку и объект дизайна — получите SVG за доли секунды.

Дизайн и брендирование

Применяйте цвета бренда, формы модулей, рамки и логотипы — всё через объект design.

Эндпоинты

/v1/generate

В теле: обязательное поле data, design по желанию. Ответ 200 — SVG в data.qr_code.

POST https://api.webqr.io/v1/generate

POST с JSON: обязательная строка data и необязательный объект design (как в конструкторе). Ответ HTTP 200, SVG в data.qr_code. WebQR не хранит ваши данные — файлы, БД и id на вашей стороне.

/v1/usage

Только чтение: счётчики за период, data.items пустой. Лимит генераций не тратит.

GET https://api.webqr.io/v1/usage

GET /v1/usage — счётчики за расчётный период; data.items всегда пустой. used_count не увеличивает.

API без состояния на стороне WebQR: нет серверной библиотеки ваших QR. Храните SVG и метаданные в своём приложении.

Безопасность в продакшене

Относитесь к API‑ключу как к паролю к квоте WebQR.

  • Секрет — только на сервере; клиентам отдавайте свой HTTPS, а не ключ.
  • Ограничьте ключ списком IP ваших серверов (или фиксированного egress CDN).
  • По желанию включите обязательную HMAC‑подпись в настройках ключа.

Передавайте ключ в заголовке X-API-Key. Ключи создаются в кабинете.

Примеры тел запроса (JSON)

Классические модули на сплошном фоне

Тело JSON

{
    "data": "https://webqr.io/",
    "design": {
        "size": 1024,
        "backgroundColor": "#FFFFFF",
        "color": "#000000",
        "transparent": false,
        "styleType": "a7k2m9",
        "eyeType": "r2s4t6",
        "eyeInnerType": "h7i9j1",
        "roundedCorners": true,
        "cornerRadius": 20,
        "showColorGradient": false
    }
}

Ответ

HTTP 200: JSON с success, строкой SVG в data.qr_code, эхом content, нормализованным design и блоком usage с подсказками по лимиту.

Цветной фон и другая форма модулей

Тело JSON

{
    "data": "https://webqr.io/",
    "design": {
        "size": 1024,
        "backgroundColor": "#0E2A47",
        "color": "#F8FAFC",
        "borderColor": "#58B4FF",
        "centerColor": "#58B4FF",
        "transparent": false,
        "styleType": "m4k6l8",
        "eyeType": "x4y6z8",
        "eyeInnerType": "n9o1p3",
        "roundedCorners": true,
        "cornerRadius": 20,
        "showColorGradient": false
    }
}

Диагональный градиент модулей

Тело JSON

{
    "data": "https://webqr.io/",
    "design": {
        "size": 1024,
        "backgroundColor": "#FFFFFF",
        "color": "#1e3a5f",
        "borderColor": "#2563EB",
        "centerColor": "#7C3AED",
        "transparent": false,
        "styleType": "a7k2m9",
        "eyeType": "r2s4t6",
        "eyeInnerType": "h7i9j1",
        "roundedCorners": true,
        "cornerRadius": 20,
        "showColorGradient": true,
        "fromColor": "#2563EB",
        "toColor": "#7C3AED",
        "styleColorGradient": "diagonal"
    }
}

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

curl -X POST https://api.webqr.io/v1/generate \
  -H "Content-Type: application/json" \\n  -H "X-API-Key: wq_xxxxxxxxxx_your_secret" \\n  -d @payload.json

Сохраните JSON примера в payload.json или передайте в -d тем же текстом — но ключ вызывает только ваш сервер, не браузеры и приложения клиента.

Дизайн

В кабинете есть удобный конструктор QR: оформление собираете визуально, а тот же набор полей переносите в объект design в запросе к API — так проще собрать итоговое тело запроса без ручного подбора.

Указывайте Content-Type: application/json. В корне — data (обязательно) и design (опционально). Псевдонимы вроде markerOutColor приводятся к borderColor; при ошибках валидации вернётся HTTP 422.

Тот же предпросмотр, что в конструкторе: подпись под плиткой подставьте в design.styleType, design.eyeType или design.eyeInnerType.

Иконки те же, что на шаге дизайна. Под каждой — канонический код для design.styleType, design.eyeType или design.eyeInnerType.

Коды модулей (design.styleType)

a7k2m9
b3n5p1
c8q4r6
d1s7t9
e6u2v4
f9w5x7
g2y8z0
h4a6b8
i0c2d4
j6e8f0
k2g4h6
l8i0j2
m4k6l8
n0o2p4
p6q8r0
q1r3s5
s1r3s5

Внешние искатели (design.eyeType)

r2s4t6
u8v0w2
x4y6z8
a1b3c5
d7e9f1
g3h5i7
j9k1l3
m5n7o9
p1q3r5
s7t9u1
v3w5x7
y9z1a3
b5c7d9
e1f3g5

Внутренние искатели (design.eyeInnerType)

h7i9j1
k3l5m7
n9o1p3
q5r7s9
t1u3v5
w7x9y1
z3a5b7
c9d1e3
f5g7h9
i1j3k5
l7m9n1
o3p5q7
r9s1t3
u5v7w9
x1y3z5

Рамки (design.frameType)

no_frames — только QR без рамки. thick_rounded — толстая скруглённая обводка без подписи. У остальных рамок подпись может быть в полосе; textUnderQr необязателен — иначе сервер подставляет подпись по умолчанию.

no_frames label_bottom badge_bottom pill_bottom banner_top shopping_bag bar_bottom bar_top badge_top pill_top wide_bottom wide_top thick_rounded

Устаревшие коды рамки всё ещё принимаются (приводятся к канону так):

ribbon_bottom → no_frames flag_top → no_frames text_bottom → thick_rounded text_top → thick_rounded

Направления градиентов

Используйте эти имена в styleColorGradient и eyeGradientStyle.

horizontal vertical diagonal inverse_diagonal radial

Частые вопросы

Сколько запросов к API в месяц?

Включённых успешных генераций за календарный месяц по тарифам: 200 — Starter (бесплатный), 5000 — Premium, 25000 — Business, 100000 — Business Plus. Если нужно больше — напишите нам.

Можно использовать и API, и конструктор на сайте?

Да. Вы можете создавать QR через API или вручную в основном конструкторе на главной странице.

Можно ли пользоваться API на бесплатном тарифе?

Да. Starter уже включает Static QR API: 200 успешных генераций за календарный месяц (включённая квота); Premium — 5000, Business — 25000, Business Plus — 100000; квота обновляется в начале каждого месяца. Отдельной подписки «только за API» нет; при необходимости возможен платный оверэйдж по настройкам биллинга.

Что приходит в ответ после успешного запроса? WebQR сам хранит каждый сгенерированный код?

В JSON приходит готовый SVG (поле data.qr_code), те же content и design, что вы отправили, плюс блок usage для учёта квоты. Это stateless-сценарий: один вызов API сам по себе не попадает в вашу «библиотеку» WebQR как отдельная запись и не даёт постоянный id в ответе — файл и любые связки храните у себя на бэкенде или в вашем хранилище. То, что вы сами сохраните в конструкторе или кабинете WebQR, живёт отдельно по обычным правилам проектов.

Нужно больше запросов?

Напишите нам, если нужен больший дневной лимит для личного или коммерческого использования.