Documentation API REST
Intégrez la génération de QR codes et codes-barres directement dans vos applications. L'API est disponible exclusivement avec le plan Business.
Authentification
Comment s'identifier auprès de l'API
Toutes les requêtes doivent inclure votre clé API dans le header HTTP Authorization.
Authorization: Bearer YOUR_API_KEY400">curl -X 400 font-semibold">GET https:500 italic">//api.qrcode-app.com/v1/qrcodes \
-H 400">"Authorization: Bearer sk_live_abc123xyz789" \
-H 400">"Content-Type: application/json".env).URL de Base & Versioning
https:500 italic">//api.qrcode-app.com/v1/| Paramètre | Valeur |
|---|---|
| Protocole | HTTPS uniquement — les connexions HTTP sont refusées |
| Version actuelle | v1 |
| Format | JSON exclusivement (Content-Type: application/json) |
| Encodage | UTF-8 |
| Timeout | 30 secondes par requête |
Codes de Statut HTTP
| Code | Statut | Description |
|---|---|---|
| 200 | OK | Requête réussie |
| 201 | Created | Ressource créée avec succès |
| 400 | Bad Request | Paramètres manquants ou invalides |
| 401 | Unauthorized | Clé API manquante ou invalide |
| 403 | Forbidden | Quota dépassé ou plan insuffisant |
| 404 | Not Found | Ressource introuvable |
| 429 | Too Many Requests | Limite de taux atteinte |
| 500 | Server Error | Erreur interne — contacter le support |
Structure JSON des erreurs :
{
400">"error": {
400">"code": 400">"QUOTA_EXCEEDED",
400">"message": 400">"Vous avez atteint la limite de votre plan.",
400">"details": 400">"Passez au plan Business pour un accès illimité."
}
}Rate Limiting
Limites de requêtes par minute
| Plan | Limite | Note |
|---|---|---|
| Business | 1 000 req/min | Fenêtre de 60 secondes glissante |
| Pro | Non disponible | L'API n'est pas disponible sur ce plan |
| Gratuit | Non disponible | L'API n'est pas disponible sur ce plan |
X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 873
X-RateLimit-Reset: 1710254400X-RateLimit-Reset (timestamp Unix).Générer un QR Code Statique
Créer un QR code avec options de design
/v1/qrcodes/generateParamètres du body (JSON)
| Champ | Type | Requis | Description |
|---|---|---|---|
type | string | Oui | url, wifi, vcard, sms, whatsapp, maps, email, phone, event, payment, text |
content | string / object | Oui | Contenu encodé. Chaîne pour url/text/phone, objet JSON pour wifi/vcard/event/maps. |
format | string | Non | png (défaut), svg, pdf |
size | integer | Non | Taille px: 100 à 4096. Défaut: 512 |
error_correction | string | Non | L, M (défaut), Q, H — H recommandé si logo |
design | object | Non | Options visuelles (couleurs, logo, style des points) |
Objet design
| Champ | Type | Description |
|---|---|---|
fg_color | string (hex) | Couleur des modules. Ex: #1a1a2e. Défaut: #000000 |
bg_color | string (hex) | Couleur de fond. Défaut: #ffffff |
logo_url | string (URL) | URL HTTPS de votre logo (PNG/SVG, carré recommandé) |
logo_size | number | Taille du logo: 0.1 à 0.4. Défaut: 0.2 |
dot_style | string | square (défaut), round, dots, classy, classy-rounded |
corner_style | string | square (défaut), round, extra-rounded |
Types de QR codes disponibles
| type | Structure de content |
|---|---|
url | "content": "https://example.com" |
email | "content": {"to":"a@b.com","subject":"Objet","body":"Msg"} |
wifi | "content": {"ssid":"MonWifi","password":"pass","encryption":"WPA"} |
vcard | "content": {"first_name":"Jean","last_name":"Dupont","phone":"+336...","email":"..."} |
maps | "content": {"latitude":48.8566,"longitude":2.3522,"label":"Paris"} |
event | "content": {"title":"Conférence","start":"2026-06-01T09:00","end":"2026-06-01T18:00"} |
sms | "content": {"phone":"+33612345678","message":"Bonjour"} |
whatsapp | "content": {"phone":"+33612345678","message":"Salut!"} |
phone | "content": "+33612345678" |
payment | "content": {"iban":"FR76...","amount":50,"currency":"EUR","label":"Facture"} |
Exemple complet — QR URL avec logo
400">curl -X 400 font-semibold">POST https:500 italic">//api.qrcode-app.com/v1/qrcodes/generate \
-H 400">"Authorization: Bearer sk_live_abc123" \
-H 400">"Content-Type: application/json" \
-d '{
400">"type": 400">"url",
400">"content": 400">"https:500 italic">//monsite.com",
400">"format": 400">"png",
400">"size": 1024,
400">"error_correction": 400">"H",
400">"design": {
400">"fg_color": 400">"500 italic">#1a1a2e",
400">"bg_color": 400">"500 italic">#ffffff",
400">"logo_url": 400">"https:500 italic">//monsite.com/logo.png",
400">"logo_size": 0.25,
400">"dot_style": 400">"round",
400">"corner_style": 400">"extra-rounded"
}
}'500 italic"># Réponse — 200 OK
{
400">"success": 400">true,
400">"data": {
400">"qr_id": 400">"qr_K9mX2pL7nR",
400">"type": 400">"url",
400">"content": 400">"https:500 italic">//monsite.com",
400">"format": 400">"png",
400">"image_url": 400">"https:500 italic">//cdn.qrcode-app.com/qr_K9mX2pL7nR.png",
400">"download_url": 400">"https:500 italic">//api.qrcode-app.com/v1/qrcodes/qr_K9mX2pL7nR/download",
400">"created_at": 400">"2026-03-12T10:30:00Z"
}
}QR Codes Dynamiques
Modifiez la destination sans réimprimer
Un QR code dynamique pointe vers une URL intermédiaire contrôlée par l'API. Vous pouvez modifier la destination à tout moment. Les statistiques de scan sont disponibles en temps réel.
/v1/qrcodes/dynamicCréer un QR code dynamique/v1/qrcodes/{qr_id}/destinationMettre à jour la destination{
400">"name": 400">"Campagne Été 2026",
400">"destination_url": 400">"https:500 italic">//monsite.com/promo-ete",
400">"format": 400">"png",
400">"size": 512,
400">"protection": {
400">"password": 400">"secret123",
400">"expiry_date": 400">"2026-09-01",
400">"max_scans": 500
},
400">"design": { 400">"fg_color": 400">"500 italic">#e11d48", 400">"dot_style": 400">"round" }
}Paramètres de protection
| Champ | Type | Description |
|---|---|---|
password | string | Mot de passe requis avant chaque scan |
expiry_date | string ISO 8601 | Date d'expiration. Le QR sera inactif après cette date. |
max_scans | integer | Nombre maximum de scans autorisés. 0 = illimité. |
Gérer vos QR Codes
Lister, consulter, supprimer
/v1/qrcodesLister tous vos QR codes (pagination)/v1/qrcodes/{qr_id}Consulter un QR code spécifique/v1/qrcodes/{qr_id}Supprimer un QR code/v1/qrcodes/{qr_id}/downloadTélécharger le fichier imageQuery params — liste
| Paramètre | Type | Description |
|---|---|---|
page | integer | Numéro de page (défaut: 1) |
limit | integer | Résultats par page: 1–100 (défaut: 20) |
type | string | Filtrer par type: url, wifi, vcard... (optionnel) |
kind | string | Filtrer: static ou dynamic (optionnel) |
400 font-semibold">GET /v1/qrcodes?page=1&limit=10&type=url&kind=dynamic
500 italic"># Réponse
{
400">"data": [
{ 400">"qr_id": 400">"qr_K9mX2pL7nR", 400">"type": 400">"url", 400">"kind": 400">"dynamic", ... },
{ 400">"qr_id": 400">"qr_P3rT8qW1xN", 400">"type": 400">"wifi", 400">"kind": 400">"static", ... }
],
400">"pagination": { 400">"total": 42, 400">"page": 1, 400">"limit": 10, 400">"pages": 5 }
}Statistiques & Analytiques
Analysez vos scans en temps réel
/v1/qrcodes/{qr_id}/statsStats globales d'un QR code/v1/qrcodes/{qr_id}/stats/dailyScans par jour (série temporelle)/v1/qrcodes/{qr_id}/stats/countriesScans par pays/v1/qrcodes/{qr_id}/stats/devicesScans par type d'appareil/v1/stats/overviewVue globale de tous vos QR codes{
400">"data": {
400">"qr_id": 400">"qr_dyn_5Rp9wZ",
400">"total_scans": 1284,
400">"unique_scans": 1102,
400">"last_scan_at": 400">"2026-03-12T09:45:00Z",
400">"top_country": 400">"France",
400">"top_city": 400">"Paris",
400">"devices": { 400">"mobile": 78.4, 400">"desktop": 18.2, 400">"tablet": 3.4 },
400">"os": { 400">"ios": 45.1, 400">"android": 42.3, 400">"windows": 9.8, 400">"other": 2.8 }
}
}Filtres temporels (query params)
| Paramètre | Type | Description |
|---|---|---|
from | string ISO 8601 | Date de début. Ex: 2026-01-01 |
to | string ISO 8601 | Date de fin. Ex: 2026-03-12 |
granularity | string | Pour /daily: hour, day (défaut), week, month |
Codes-barres Produits
EAN-13, EAN-8, UPC-A, Code128 et plus
/v1/barcodes/generate| Champ | Type | Requis | Description |
|---|---|---|---|
format | string | Oui | EAN13, EAN8, UPCA, CODE128, CODE39, ITF, QR |
value | string | Oui | Valeur à encoder. Pour EAN-13: 12 chiffres (checksum calculé auto) |
output | string | Non | png (défaut), svg |
width | integer | Non | Largeur en pixels (défaut: 400) |
height | integer | Non | Hauteur en pixels (défaut: 200) |
show_text | boolean | Non | Afficher les chiffres sous le code-barres (défaut: true) |
metadata | object | Non | {"sku":"...","name":"...","price":9.99,"category":"..."} |
{
400">"format": 400">"EAN13",
400">"value": 400">"590123412345",
400">"output": 400">"png",
400">"width": 600,
400">"height": 250,
400">"show_text": 400">true,
400">"metadata": {
400">"sku": 400">"PROD-001",
400">"name": 400">"Café Premium 250g",
400">"price": 7.99,
400">"category": 400">"Épicerie"
}
}Gestion des Clés API
/v1/api-keysLister vos clés API/v1/api-keysCréer une nouvelle clé API/v1/api-keys/{key_id}Révoquer une clé API500 italic"># Créer une clé API
400 font-semibold">POST /v1/api-keys
{ 400">"name": 400">"App Mobile Production", 400">"permissions": [400">"read", 400">"write"] }
500 italic"># Réponse (la clé n'est affichée QU'UNE SEULE FOIS)
{
400">"key_id": 400">"key_8Wn4pQz",
400">"name": 400">"App Mobile Production",
400">"api_key": 400">"sk_live_x9Km2pL7nR8qW3vT...",
400">"created_at": 400">"2026-03-12T10:00:00Z"
}api_key n'est visible qu'une seule fois lors de la création. Copiez-la immédiatement et stockez-la dans vos variables d'environnement.Exemples Complets par Langage
500 italic"># Générer un QR code
400">curl -X 400 font-semibold">POST https:500 italic">//api.qrcode-app.com/v1/qrcodes/generate \
-H 400">"Authorization: Bearer sk_live_abc123" \
-H 400">"Content-Type: application/json" \
-d '{400">"type":400">"url",400">"content":400">"https:500 italic">//monsite.com",400">"format":400">"png",400">"size":512}'
500 italic"># Lister vos QR codes
400">curl https:500 italic">//api.qrcode-app.com/v1/qrcodes?limit=10 \
-H 400">"Authorization: Bearer sk_live_abc123"
500 italic"># Consulter les stats
400">curl https:500 italic">//api.qrcode-app.com/v1/qrcodes/qr_K9mX/stats \
-H 400">"Authorization: Bearer sk_live_abc123"Erreurs & Dépannage
| Code erreur | HTTP | Cause & Solution |
|---|---|---|
INVALID_API_KEY | 401 | Clé API incorrecte. Vérifiez le header Authorization et la validité de votre clé. |
QUOTA_EXCEEDED | 403 | Limite de QR codes atteinte. Passez au plan supérieur ou supprimez d'anciens QR. |
API_NOT_AVAILABLE | 403 | L'API n'est pas disponible sur votre plan. Plan Business requis. |
INVALID_TYPE | 400 | Le type spécifié n'existe pas. Consultez la liste en section 5. |
INVALID_CONTENT | 400 | Le champ content ne correspond pas au type. Ex: url requiert une URL valide. |
QR_NOT_FOUND | 404 | Le qr_id n'existe pas ou n'appartient pas à votre compte. |
RATE_LIMIT_EXCEEDED | 429 | Trop de requêtes. Attendez X-RateLimit-Reset avant de réessayer. |
LOGO_TOO_LARGE | 400 | Logo trop grand. Utilisez logo_size entre 0.1 et 0.4. |
INVALID_COLOR | 400 | Format de couleur invalide. Utilisez le format hex: #rrggbb. |
INVALID_EAN | 400 | Pour EAN-13: fournir 12 chiffres (le checksum est calculé automatiquement). |
- Vérifiez que le header
Authorizationest au formatBearer YOUR_KEY - Vérifiez que
Content-Type: application/jsonest présent - Lisez le champ
error.codepour identifier précisément le problème - Vérifiez votre quota via
GET /v1/qrcodes - Consultez
X-RateLimit-Remainingsi HTTP 429 - Contactez support@qrcode-app.com pour les erreurs HTTP 500
Prêt à intégrer l'API ?
Activez le plan Business pour obtenir votre clé API et commencer à générer des QR codes.