Qivoмайстерня QR-кодів
Створити QR-код

Для інтеграцій

QR-код у відповідь на один запит

Підключіть генерацію QR-кодів до свого сервісу. Передайте вміст і налаштування через GET та отримайте готовий PNG або SVG без додаткової перевірки зчитування.

Безкоштовно. Назавжди.PNG, SVG та API — без оплати й підписок.

Прямі QR-коди. Без перенаправлень і терміну дії.

GEThttps://qivo.umind.group/

Запит і авторизація

Передавайте ключ у заголовку X-API-Key. Сесія редактора та cookie не потрібні. QIVO_API_KEY у прикладі — змінна середовища вашого клієнта з отриманим ключем.

Приклад curl
curl --fail --show-error --get 'https://qivo.umind.group/' \
  --header "X-API-Key: $QIVO_API_KEY" \
  --data-urlencode 'data=https://umind.group' \
  --data-urlencode 'contentType=url' \
  --data-urlencode 'format=svg' \
  --data-urlencode 'shape=rounded' \
  --data-urlencode 'size=1024' \
  --output qr-code.svg

Якщо інтеграція приймає лише URL, ключ можна передати параметром key:

Приклад GET-посилання
https://qivo.umind.group/?key=YOUR_SECRET_KEY&data=https%3A%2F%2Fumind.group&format=png&size=1024

Замініть YOUR_SECRET_KEY на отриманий ключ. Заголовок має пріоритет над параметром key. Значення параметрів кодуйте для URL: # → %23, + → %2B, & усередині значення → %26.

Використовуйте HTTPS і зберігайте ключ на своєму сервері. Не додавайте його в публічний JavaScript. Ключ і дані в GET-адресі можуть потрапити в історію браузера або журнали сервера; для ключа краще використовувати заголовок.

Приклади коду

Приклади виконуються на вашому сервері. Збережіть ключ у змінній середовища QIVO_API_KEY; не публікуйте його в коді сторінки.

qr-code.php
<?php
$key = getenv('QIVO_API_KEY');
if (!$key) throw new RuntimeException('Set QIVO_API_KEY');
$query = http_build_query([
    'data' => 'https://umind.group', 'format' => 'svg',
    'shape' => 'rounded', 'size' => 1024,
], '', '&', PHP_QUERY_RFC3986);
$curl = curl_init('https://qivo.umind.group/?' . $query);
curl_setopt_array($curl, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => ['X-API-Key: ' . $key],
    CURLOPT_TIMEOUT => 30,
]);
$image = curl_exec($curl);
$status = curl_getinfo($curl, CURLINFO_RESPONSE_CODE);
curl_close($curl);
if ($image === false || $status !== 200) {
    throw new RuntimeException('Qivo request failed: ' . $status);
}
file_put_contents('qr-code.svg', $image);
qr-code.mjs
import { writeFile } from 'node:fs/promises';
const key = process.env.QIVO_API_KEY;
if (!key) throw new Error('Set QIVO_API_KEY');
const url = new URL('https://qivo.umind.group/');
url.search = new URLSearchParams({
  data: 'https://umind.group', format: 'svg',
  shape: 'rounded', size: '1024'
});
const response = await fetch(url, {
  headers: { 'X-API-Key': key },
  signal: AbortSignal.timeout(30000)
});
if (!response.ok) throw new Error(`Qivo request failed: ${response.status}`);
await writeFile('qr-code.svg', Buffer.from(await response.arrayBuffer()));
qr-code.py
import os
from pathlib import Path
from urllib.parse import urlencode
from urllib.request import Request, urlopen

key = os.environ['QIVO_API_KEY']
query = urlencode({
    'data': 'https://umind.group', 'format': 'svg',
    'shape': 'rounded', 'size': 1024,
})
request = Request('https://qivo.umind.group/?' + query,
                  headers={'X-API-Key': key})
# urlopen raises HTTPError for unsuccessful HTTP responses.
with urlopen(request, timeout=30) as response:
    Path('qr-code.svg').write_bytes(response.read())

Параметри дизайну

ПараметрТипОбов’язковістьЗначення
X-API-Key / keystringОбов’язковий
Секретний ключ: заголовок або параметр GET
datastringДля text і url
Вміст для text/url, обов’язковий
contentTypestringНеобов’язковий
texturlwifivcardwhatsapptelegramphoneviberemailsms
Типово: text
formatstringНеобов’язковий
pngsvg
Типово: png
sizeintegerНеобов’язковий
25651210242048
Типово: 1024
shapestringНеобов’язковий
squaresoftroundeddotsleaf-softleafhorizontalverticalpointednotchedstardiamondxx-roundedplusplus-roundedheartsparkleconfetti
Типово: square
borderstringНеобов’язковий
squarecircleroundedskewdrop-tldrop-brleafleaf-inner-brleaf-circleleaf-inner-tlsquare-circlesoft-tlsoft-brsoft-leafrough
Типово: square
centerstringНеобов’язковий
squarecircleroundedskewroughdrop-tldrop-brleafgearstardiamondxx-roundedplusplus-roundedheart
Типово: square
foreground / eyeColorstringНеобов’язковий
#RRGGBB
Типово: #192b39
backgroundstringНеобов’язковий
#RRGGBB
Типово: #ffffff
levelstringНеобов’язковий
LMQH
Типово: M
quietZoneintegerНеобов’язковий
0–12 клітинок
Типово: 4
logostringНеобов’язковий
nonewhatsapplinklocationwificredentialemailscanbellmenuscan-mescan-me-v2paypalbitcoinsparkplusdiamond
Типово: none
logoScaleintegerНеобов’язковий
12–30
Типово: 24

Для коду з логотипом автоматично застосовується рівень H. GET підтримує готові піктограми; завантаження файлів і логотипи за зовнішнім URL не підтримуються.

Типи вмісту

Поля залежать від contentType. Для URL передавайте повну адресу з https:// або http://. Для телефона використовуйте код країни.

contentTypeОбов’язкові поляНеобов’язкові поля
text / urldata
phone / viberphone
whatsapp / smsphonemessage
telegramtelegram
emailemailsubject, message
wifissid; wifiSecurity≠nopass → wifiPasswordwifiSecurity (WPA), wifiHidden (0)
vcardfirstName / lastNameorganization, jobTitle, phone, email, website, address
Приклад телефона
https://qivo.umind.group/?key=YOUR_SECRET_KEY&contentType=phone&phone=%2B380671234567&format=svg

Відповіді API

Успішна відповідь — саме файл зображення, без JSON-обгортки. Content-Type: image/png або image/svg+xml. Помилки повертаються як JSON:

JSON
{"error":"Invalid API key."}
  • 200 — Зображення готове.
  • 401 — Ключ відсутній або неправильний.
  • 405 — Потрібен метод GET.
  • 422 — Неправильні параметри або відсутній вміст.
  • 429 — Перевищено ліміт; Retry-After: 60.
  • 503 — Доступ до API ще не налаштовано або захист тимчасово недоступний.
  • 500 — Внутрішня помилка генерації.

Ліміти та перевірка

Стандартний ліміт — 60 запитів на хвилину на IP. Максимум — 800 байтів готового закодованого вмісту. Для PNG можна обрати до 2048 × 2048 px. SVG зберігає векторні форми.

API перевіряє формат параметрів, розмір і контраст, але не запускає декодер і не перевіряє, чи QR зчитується. Для декоративних поєднань і друку перевіряйте результат камерою.

Отримати доступ

API безкоштовний і завжди залишатиметься безкоштовним. Заповніть коротку форму, щоб отримати секретний ключ.

Усі три поля обов’язкові. Дані форми надійдуть команді Qivo для розгляду заявки та відповіді.