Pentru integrare
Un cod QR într-o singură cerere
Trimiteți setările de conținut și design prin GET și primiți un PNG sau SVG fără verificarea suplimentară a scanării.
liberă pentru totdeauna.PNG, SVG și API – fără taxe sau abonamente.
Coduri QR directe. Nu se reîntoarce, nu expiră.
GEThttps://qivo.umind.group/
Cerere și autentificare
Pasă cheia în titlul X-API-Key. sesiunile de editare și cookie-urile nu sunt necesare. QIVO_API_KEY în acest exemplu este o variabilă a mediului client care conține cheia ta.
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.svgDacă integrarea acceptă doar un URL, treceți cheia în parametru cheie:
https://qivo.umind.group/?key=YOUR_SECRET_KEY&data=https%3A%2F%2Fumind.group&format=png&size=1024Înlocuiește-ți_SECRET_KEY cu cheia ta. titlul are predecesorul asupra parametrului cheie. URL-encodează valorile parametrului: # → %23, + → %2B, și & în cadrul unei valori → %26.
Utilizați HTTPS și păstrați cheia pe serverul dvs. Nu puneți-o în JavaScript public. Cheile și datele din URL-urile GET pot apărea în istoria browserului sau în jurnalele serverului; Preferă titlul pentru cheia dvs.
Exemple de cod
Salvați cheia în variabilul mediului QIVO_API_KEY; nu o publicați în codul de pagină.
<?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);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()));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())Parametrii de proiectare
| Parametru | Tip | Cerințe | Valoare |
|---|---|---|---|
X-API-Key / key | string | necesar | Cheia secretă: titlu sau parametru GET |
data | string | Pentru text și url | Conținutul necesar pentru text/url |
contentType | string | Opțional | texturlwifivcardwhatsapptelegramphoneviberemailsmsDefiniţie: text |
format | string | Opțional | pngsvgDefiniţie: png |
size | integer | Opțional | 25651210242048Definiţie: 1024 |
shape | string | Opțional | squaresoftroundeddotsleaf-softleafhorizontalverticalpointednotchedstardiamondxx-roundedplusplus-roundedheartsparkleconfettiDefiniţie: square |
border | string | Opțional | squarecircleroundedskewdrop-tldrop-brleafleaf-inner-brleaf-circleleaf-inner-tlsquare-circlesoft-tlsoft-brsoft-leafroughDefiniţie: square |
center | string | Opțional | squarecircleroundedskewroughdrop-tldrop-brleafgearstardiamondxx-roundedplusplus-roundedheartDefiniţie: square |
foreground / eyeColor | string | Opțional | #RRGGBB Definiţie: #192b39 |
background | string | Opțional | #RRGGBB Definiţie: #ffffff |
level | string | Opțional | LMQHDefiniţie: M |
quietZone | integer | Opțional | 0 - 12 module Definiţie: 4 |
logo | string | Opțional | nonewhatsapplinklocationwificredentialemailscanbellmenuscan-mescan-me-v2paypalbitcoinsparkplusdiamondDefiniţie: none |
logoScale | integer | Opțional | 12–30 Definiţie: 24 |
Codurile cu un logo folosesc automat nivelul H. GET susține pictograme încorporate; nu sunt susținute upload-uri de fișiere și URL-uri externe ale logo-ului.
Tipuri de conținut
Pentru URL-uri, furnizați o adresă completă https:// sau http:// pentru numere de telefon, includeți codul țării.
| contentType | câmpuri necesare | câmpuri opționale |
|---|---|---|
| text / url | data | — |
| phone / viber | phone | — |
| whatsapp / sms | phone | message |
| telegram | telegram | — |
| subject, message | ||
| wifi | ssid; wifiSecurity≠nopass → wifiPassword | wifiSecurity (WPA), wifiHidden (0) |
| vcard | firstName / lastName | organization, jobTitle, phone, email, website, address |
https://qivo.umind.group/?key=YOUR_SECRET_KEY&contentType=phone&phone=%2B380671234567&format=svgRăspunsuri la API
Un răspuns de succes este fișierul imaginii în sine, fără un JSON Wrapper. tipul de conținut este imaginea/png sau imaginea/svg+xml. Erorile sunt returnate ca JSON:
{"error":"Invalid API key."}- 200 — Imaginea este generată.
- 401 — Un cheie lipsită sau invalidă.
- 405 — GET este necesar.
- 422 — Parametri invalide sau conținutul lipsit.
- 429 — Limita de rată depășită; Return-After: 60.
- 503 — Accesul la API nu este configurat sau protecția nu este disponibilă temporar.
- 500 — Erori de generaţie interioară.
Limitele și validarea
Limitul de standard este de 60 de solicitări pe minut pe IP. Conținutul codat este limitat la 800 de byte. PNG suportă până la 2048 × 2048 px. SVG păstrează formele vectorului.
API validă formatele de parametri, dimensiunea și contrastul, dar nu rulează un decoder sau verifică dacă QR scanează.