Qivoatelier de codes QR
Créer un code QR

Pour les intégrations

Un code QR en une requête

Intégrez la génération à votre service. Envoyez le contenu et le design par GET pour recevoir un PNG ou SVG sans test de lecture supplémentaire.

Gratuit. Pour toujours.PNG, SVG et API — sans frais ni abonnement.

Des codes QR directs. Sans redirection ni expiration.

GEThttps://qivo.umind.group/

Requête et authentification

Passez la clé dans l’en-tête X-API-Key. Aucune session ni cookie de l’éditeur n’est nécessaire. QIVO_API_KEY est une variable d’environnement du client contenant votre clé.

Exemple 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

Si l’intégration accepte seulement une URL, passez la clé dans le paramètre key :

Exemple d’URL GET
https://qivo.umind.group/?key=YOUR_SECRET_KEY&data=https%3A%2F%2Fumind.group&format=png&size=1024

Remplacez YOUR_SECRET_KEY par votre clé. L’en-tête est prioritaire. Encodez les valeurs : # → %23, + → %2B et & dans une valeur → %26.

Utilisez HTTPS et gardez la clé sur votre serveur, jamais dans du JavaScript public. Les URL peuvent figurer dans l’historique ou les journaux ; préférez l’en-tête pour la clé.

Exemples de code

Gardez la clé dans la variable environnementale QIVO_API_KEY ; ne pas la publier dans le code de page.

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())

Paramètres de design

ParamètreTypeexigencesValeurs
X-API-Key / keystringNécessité
Clé secrète : header ou paramètre GET
datastringPour le texte et l'URL
Contenu requis pour text/url
contentTypestringOptionnel
texturlwifivcardwhatsapptelegramphoneviberemailsms
Par défaut: text
formatstringOptionnel
pngsvg
Par défaut: png
sizeintegerOptionnel
25651210242048
Par défaut: 1024
shapestringOptionnel
squaresoftroundeddotsleaf-softleafhorizontalverticalpointednotchedstardiamondxx-roundedplusplus-roundedheartsparkleconfetti
Par défaut: square
borderstringOptionnel
squarecircleroundedskewdrop-tldrop-brleafleaf-inner-brleaf-circleleaf-inner-tlsquare-circlesoft-tlsoft-brsoft-leafrough
Par défaut: square
centerstringOptionnel
squarecircleroundedskewroughdrop-tldrop-brleafgearstardiamondxx-roundedplusplus-roundedheart
Par défaut: square
foreground / eyeColorstringOptionnel
#RRGGBB
Par défaut: #192b39
backgroundstringOptionnel
#RRGGBB
Par défaut: #ffffff
levelstringOptionnel
LMQH
Par défaut: M
quietZoneintegerOptionnel
0–12 modules
Par défaut: 4
logostringOptionnel
nonewhatsapplinklocationwificredentialemailscanbellmenuscan-mescan-me-v2paypalbitcoinsparkplusdiamond
Par défaut: none
logoScaleintegerOptionnel
12–30
Par défaut: 24

Un logo active automatiquement H. GET prend en charge les icônes intégrées, pas les fichiers importés ni les URL de logos externes.

Types de contenu

Les champs dépendent de contentType. Fournissez une URL complète https:// ou http:// et un numéro avec indicatif.

contentTypeLes champs nécessairesLes champs facultatifs
text / urldata
phone / viberphone
whatsapp / smsphonemessage
telegramtelegram
emailemailsubject, message
wifissid; wifiSecurity≠nopass → wifiPasswordwifiSecurity (WPA), wifiHidden (0)
vcardfirstName / lastNameorganization, jobTitle, phone, email, website, address
Exemple de téléphone
https://qivo.umind.group/?key=YOUR_SECRET_KEY&contentType=phone&phone=%2B380671234567&format=svg

Réponses de l’API

La réponse réussie est le fichier image, sans enveloppe JSON. Content-Type : image/png ou image/svg+xml. Les erreurs sont en JSON :

JSON
{"error":"Invalid API key."}
  • 200 — Image générée.
  • 401 — Clé absente ou invalide.
  • 405 — GET est requis.
  • 422 — Paramètres invalides ou contenu absent.
  • 429 — Limite dépassée ; Retry-After: 60.
  • 503 — API non configurée ou protection temporairement indisponible.
  • 500 — Erreur interne de génération.

Limites et validation

Limite par défaut : 60 requêtes par minute et par IP, 800 octets encodés maximum et PNG jusqu’à 2048 × 2048 px. SVG conserve les formes vectorielles.

L’API valide les paramètres, la taille et le contraste, sans lancer de décodeur. Testez les designs décoratifs et les impressions avec un appareil photo.

Obtenir un accès

L’API est libre et restera toujours libre. Complétez le courte formulaire pour demander une clé secrète.

Les détails du formulaire seront envoyés à l'équipe Qivo pour examiner votre demande et votre réponse.