CreateQR Developer Manual

Automatisez la création de QR codes dynamiques avec l'API CreateQR

Utilisez des endpoints JSON pour créer, lister et supprimer des QR codes depuis vos propres systèmes. Générez des QR codes dynamiques pour les campagnes et les destinations gérées, ainsi que des QR codes statiques pour le Wi-Fi et les portefeuilles crypto lorsque c'est pris en charge.

Chemin de base : /api/v1 Auth : Autorisation : porteur <key> (recommandé)

Créer des codes QR

Créez un QR code dynamique pour les URL et destinations gérées, ou un QR code statique pour les payloads WiFi et portefeuilles crypto.

POST https://createqr.app/api/v1/create

Envoyez du JSON uniquement. Pour l’authentification par clé, l’en-tête est la meilleure pratique. Les champs clés du corps sont là pour la compatibilité avec les intégrations existantes.

Démarrage rapide (cURL)

Cet exemple d’URL dynamique est le chemin hello-world le plus rapide.

curl -sS -X POST 'https://createqr.app/api/v1/create' \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer ck_live_XXXXXXXXXXXXXXXXXXXXXXXX' \
  -d '{"data":"https://createqr.app","qrtype":"dynamic"}'

Authentification et compatibilité

  • Recommandé : Autorisation : Porteur <key>
  • Également accepté : X-API-Key
  • Repli JSON : apikey ou api_key
  • Content-Type doit être application/json
  • Les méthodes non POST renvoient 405 method_not_allowed

Main Parameters

Parameter Type Default Description
apikey String Required Secret API key. Recommandé dans l'en-tête d'autorisation (au porteur). Le corps JSON apikey/api_key est également accepté.
data String Required Contenu à encoder. Un QR dynamique nécessite une URL valide. Un QR statique accepte uniquement des chaînes WiFi ou des adresses de portefeuille crypto.
qrtype String dynamic Mode QR : dynamic pour les URL et destinations gérées, ou static uniquement pour le WiFi et les portefeuilles crypto.
title String Facultatif Titre QR affiché dans le tableau de bord (réduit à 120 chars).
folderid Number Facultatif ID de dossier entier positif appartenant à votre compte.

Paramètres de couleur et de forme

Parameter Type Default Description
transparent String/Bool off on/off, vrai/faux, 1/0, oui/non accepté.
backcolor String #FFFFFF Couleur hexadécimale d'arrière-plan au format #RRGGBB.
frontcolor String #000000 Couleur hexadécimale des points principaux en #RRGGBB format.
gradient String/Bool off Activer le dégradé de points bicolores.
radial String/Bool off Activer le dégradé radial (fonctionne lorsque le dégradé est activé).
gradient_color String #15A97C Deuxième couleur de dégradé dans #RRGGBB.
marker_out_color String #000000 Couleur du cadre autour des points d'angle in #RRGGBB format.
marker_in_color String #000000 Couleur des points d'angle in #RRGGBB format.
pattern String default Style de point du corps preset.
default circle star diamond sparkle danger cross plus x heart shake blob special-circle-orizz special-circle-vert special-circle special-diamond ribbon oriental ellipse
marker String default Style du cadre autour des points d'angle.
corner_1 corner_2 corner_3 corner_4 corner_5 corner_6 corner_7 corner_8
marker_in String default Type des points d'angle.
corner_in_1 corner_in_2 corner_in_3 corner_in_4 corner_in_5 corner_in_6 corner_in_7 corner_in_8
optionlogo String none none, chemin de filigrane SVG local recommandé, chemin PNG local existant ou données d'image base64.
none /images/watermarks/v2/01-link.svg /images/watermarks/v2/02-location.svg /images/watermarks/v2/03-email.svg /images/watermarks/v2/04-whatsapp.svg /images/watermarks/v2/05-wifi.svg /images/watermarks/v2/06-vcard.svg /images/watermarks/v2/07-menu.svg /images/watermarks/v2/08-app.svg /images/watermarks/v2/09-video.svg /images/watermarks/v2/10-feedback.svg /images/watermarks/v2/11-event.svg /images/watermarks/v2/12-coupon.svg /images/watermarks/v2/13-music.svg /images/watermarks/v2/14-social.svg /images/watermarks/v2/15-paypal.svg /images/watermarks/v2/16-bitcoin.svg /images/watermarks/v2/17-scan.svg data:image/*;base64,...
no_logo_bg String/Bool on Supprime la plaque d’arrière-plan du logo.

Paramètres du cadre

Parameter Type Default Description
outer_frame String none Préglage de style de cadre.
none svg_frame_01 svg_frame_02 svg_frame_03 svg_frame_04 svg_frame_05 svg_frame_06 svg_frame_07 svg_frame_08 svg_frame_09 svg_frame_10 svg_frame_11 svg_frame_12 svg_frame_13 svg_frame_14 svg_frame_15 svg_frame_16 svg_frame_19 svg_frame_22 svg_frame_23 svg_frame_26 svg_frame_27 svg_frame_28 svg_frame_29 svg_frame_30 svg_frame_31 svg_frame_33 svg_frame_34 svg_frame_35 svg_frame_36 svg_frame_38 svg_frame_42
framelabel String SCAN ME Étiquette de texte du cadre (ajustée à 80 caractères).
label_font String Arial, Helvetica, sans-serif Pile de polices pour l'étiquette du cadre.
custom_frame_color String/Bool off Activer la couleur du cadre personnalisée.
framecolor String #000000 Frame hex couleur au format #RRGGBB.

Créer des exemples de demande

Exemple : QR simple

No-frills, fast scan

Request Method:
POST
Request URL:
https://createqr.app/api/v1/create
Request Parameters:

All parameters need to be sent as a JSON object in the request body.

{
    "apikey": "ck_live_XXXXXXXXXXXXXXXXXXXXXXXX",
    "data": "https://createqr.app",
    "qrtype": "dynamic",
    "title": "Launch Landing QR",
    "transparent": "off",
    "backcolor": "#FFFFFF",
    "frontcolor": "#000000",
    "marker_out_color": "#000000",
    "marker_in_color": "#000000",
    "pattern": "default",
    "marker": "corner_1",
    "marker_in": "corner_in_1",
    "optionlogo": "none"
}
Request Outcome
Exemple d'aperçu de sortie

Exemple : QR WiFi statique

Built for distance

Request Method:
POST
Request URL:
https://createqr.app/api/v1/create
Request Parameters:

All parameters need to be sent as a JSON object in the request body.

{
    "apikey": "ck_live_XXXXXXXXXXXXXXXXXXXXXXXX",
    "data": "WIFI:T:WPA;S:CreateQR Guest;P:guest-2026;H:false;;",
    "qrtype": "static",
    "title": "Guest Wi-Fi QR",
    "transparent": "off",
    "backcolor": "#0B1220",
    "frontcolor": "#FFFFFF",
    "marker_out_color": "#F4C84A",
    "marker_in_color": "#F4C84A",
    "pattern": "circle",
    "marker": "corner_3",
    "marker_in": "corner_in_3",
    "optionlogo": "none"
}
Request Outcome
Exemple d'aperçu de sortie

Brand Color

Theme-aligned campaign

Request Method:
POST
Request URL:
https://createqr.app/api/v1/create
Request Parameters:

All parameters need to be sent as a JSON object in the request body.

{
    "apikey": "ck_live_XXXXXXXXXXXXXXXXXXXXXXXX",
    "data": "https://createqr.app/pricing",
    "qrtype": "dynamic",
    "title": "Pricing QR",
    "transparent": "off",
    "backcolor": "#EAF4FF",
    "frontcolor": "#033895",
    "marker_out_color": "#15A97C",
    "marker_in_color": "#15A97C",
    "pattern": "special-circle-orizz",
    "marker": "corner_4",
    "marker_in": "corner_in_4",
    "optionlogo": "none"
}
Request Outcome
Exemple d'aperçu de sortie

Exemple : Couleur + Logo

Preset watermark icon

Request Method:
POST
Request URL:
https://createqr.app/api/v1/create
Request Parameters:

All parameters need to be sent as a JSON object in the request body.

{
    "apikey": "ck_live_XXXXXXXXXXXXXXXXXXXXXXXX",
    "data": "https://createqr.app/features",
    "qrtype": "dynamic",
    "title": "Feature Tour QR",
    "transparent": "off",
    "backcolor": "#033895",
    "frontcolor": "#FFFFFF",
    "marker_out_color": "#669DF4",
    "marker_in_color": "#669DF4",
    "pattern": "ribbon",
    "marker": "corner_5",
    "marker_in": "corner_in_5",
    "optionlogo": "/images/watermarks/v2/01-link.svg"
}
Request Outcome

Exemple : Campagne encadrée QR

Poster-ready "SCAN ME"

Request Method:
POST
Request URL:
https://createqr.app/api/v1/create
Request Parameters:

All parameters need to be sent as a JSON object in the request body.

{
    "apikey": "ck_live_XXXXXXXXXXXXXXXXXXXXXXXX",
    "data": "https://createqr.app/pricing",
    "qrtype": "dynamic",
    "title": "Pricing Poster QR",
    "transparent": "off",
    "frontcolor": "#2B0011",
    "marker_out_color": "#3B0001",
    "marker_in_color": "#3B0001",
    "pattern": "ellipse",
    "marker": "corner_8",
    "marker_in": "corner_in_7",
    "optionlogo": "none",
    "outer_frame": "balloon-top",
    "framelabel": "SCAN ME",
    "label_font": "Arial, Helvetica, sans-serif",
    "custom_frame_color": "on",
    "framecolor": "#3B0001"
}
Request Outcome
Exemple d'aperçu de sortie

Gradient Mood

Extra style for socials

Request Method:
POST
Request URL:
https://createqr.app/api/v1/create
Request Parameters:

All parameters need to be sent as a JSON object in the request body.

{
    "apikey": "ck_live_XXXXXXXXXXXXXXXXXXXXXXXX",
    "data": "https://createqr.app/why-us",
    "qrtype": "dynamic",
    "title": "Brand Story QR",
    "transparent": "off",
    "backcolor": "#FFFFFF",
    "frontcolor": "#4B1EFF",
    "gradient": "on",
    "radial": "off",
    "gradient_color": "#FF7A00",
    "marker_out_color": "#101828",
    "marker_in_color": "#101828",
    "pattern": "special-diamond",
    "marker": "corner_6",
    "marker_in": "corner_in_8",
    "optionlogo": "none"
}
Request Outcome
Exemple d'aperçu de sortie

Exemple : QR statique pour portefeuille crypto

Static crypto address

Request Method:
POST
Request URL:
https://createqr.app/api/v1/create
Request Parameters:

All parameters need to be sent as a JSON object in the request body.

{
    "apikey": "ck_live_XXXXXXXXXXXXXXXXXXXXXXXX",
    "data": "bitcoin:bc1qexampleaddress",
    "qrtype": "static",
    "title": "Bitcoin Wallet QR",
    "transparent": "off",
    "backcolor": "#FFF7ED",
    "frontcolor": "#1F2937",
    "marker_out_color": "#F7931A",
    "marker_in_color": "#F7931A",
    "pattern": "circle",
    "marker": "corner_2",
    "marker_in": "corner_in_2",
    "optionlogo": "/images/watermarks/v2/16-bitcoin.svg"
}
Request Outcome
Exemple d'aperçu de sortie

Enveloppe de réponse de réussite

{
    "success": true,
    "data": {
        "qrid": "1284",
        "svg": "<svg ...>...</svg>",
        "type": "dynamic",
        "title": "Launch Landing QR",
        "dashboard_url": "https://createqr.app/app/qrs/1284",
        "download_url": "https://createqr.app/app/qrs/1284/download/svg"
    },
    "request_id": "0f8fad5b-d9cb-469f-a165-70867728950e"
}

Supprimer les codes QR

Supprimer un QR par ID (propriétaire uniquement).

POST https://createqr.app/api/v1/delete

Request body

{
    "apikey": "ck_live_XXXXXXXXXXXXXXXXXXXXXXXX",
    "qrid": "1284"
}

Response

{
    "success": true,
    "data": {
        "deleted": true,
        "qrid": "1284"
    },
    "request_id": "0f8fad5b-d9cb-469f-a165-70867728950e"
}

Liste des codes QR

Listez vos QR par pages de 100, le plus récent en premier.

POST https://createqr.app/api/v1/list

Utilisez la pagination à partir de 1. Les résultats renvoient jusqu'à 100 éléments par page.

Request body

{
    "apikey": "ck_live_XXXXXXXXXXXXXXXXXXXXXXXX",
    "pagination": "1"
}

Response

{
    "success": true,
    "data": {
        "pagination": "1",
        "page_size": 100,
        "total": 2,
        "items": [
            {
                "qrid": "1284",
                "title": "Campaign QR",
                "type": "dynamic",
                "created_at": "2026-02-17 09:12:30",
                "short_url": "https://createqr.app/r/a1b2c3",
                "dashboard_url": "https://createqr.app/app/qrs/1284"
            },
            {
                "qrid": "1269",
                "title": "Guest Wi-Fi QR",
                "type": "static",
                "created_at": "2026-02-17 08:02:08",
                "dashboard_url": "https://createqr.app/app/qrs/1269"
            }
        ]
    },
    "request_id": "0f8fad5b-d9cb-469f-a165-70867728950e"
}

Réponses d'erreur, limites et retries

Chaque réponse inclut request_id. Conservez-le lorsque vous contactez l'assistance afin que nous puissions déboguer rapidement.

Enveloppe d'erreur typique

{
    "success": false,
    "error": {
        "code": "validation_error",
        "message": "Static QR is only available for WiFi payloads or crypto wallet addresses."
    },
    "request_id": "5f5fbd38-f82f-49ad-bf11-f7f04ca9747a"
}

Stratégie de nouvelle tentative

  • 429 rate_limited : réessayez avec un intervalle exponentiel plus gigue.
  • Honor Retry-After lorsqu'il est présent.
  • 429monthly_quota_exceeded : attendez la réinitialisation du quota ou utilisez une clé avec quota gauche.
  • 5xx : réessayez avec des tentatives limitées, puis alertez votre équipe.
Code d'erreur HTTP Quand cela se produit Que faire
invalid_api_key 401 Clé API manquante ou invalide Fournissez une clé valide via Champ de corps Bearer, X-API-Key ou JSON.
invalid_content_type 415 Le corps n'est pas une application/json Envoyer le type de contenu : application/json.
request_too_large 413 La charge utile dépasse la limite configurée Réduire la taille du corps, en particulier les logos base64.
plan_upgrade_required 403 Le plan n'est pas autorisé pour l'API Mise à niveau vers Business à partir de la facturation.
validation_error 422 Champs non valides tels que l'URL, le payload statique, la couleur ou l'ID de dossier Utilisez dynamic pour les URL et destinations gérées; utilisez static uniquement pour le WiFi ou les portefeuilles crypto.
rate_limited 429 Limite par minute atteinte Réessayez avec un intervalle exponentiel et un honneur Réessayez après.
monthly_quota_exceeded 429 Quota mensuel épuisé Attendez la réinitialisation ou l'ajustement du quota et des paramètres clés.
qr_not_found 404 La cible de suppression est manquante ou n'est pas la vôtre Vérifiez la propriété du qrid et essayez encore une fois.
internal_error 500 Problème inattendu côté serveur Réessayez avec interruption et conservez request_id pour l'assistance.

FAQ

Réponses courtes aux questions que nous voyons le plus dans les intégrations.

Combien de requêtes d'API puis-je exécuter ?

L'API est réservée aux entreprises. Le quota mensuel provient de votre forfait actif et des remplacements de clés. La graine Business par défaut est élevée et les administrateurs peuvent affiner chaque clé.

Puis-je envoyer des clés API dans le corps JSON ?

Oui. L'authentification basée sur l'en-tête est recommandée, mais les champs de corps de compatibilité apikey ou api_key sont également acceptés.

Puis-je créer des QR codes statiques avec l'API ?

Oui, mais le mode statique est limité aux chaînes WiFi et aux adresses de portefeuille crypto. Utilisez le mode dynamique pour les URL, PDF, menus, apps, pages sociales et autres destinations gérées.

Les QR créés par l'API apparaissent-ils dans mon tableau de bord ?

Oui. Chaque création réussie est enregistrée dans votre compte et peut être gérée comme n'importe quel autre QR.

Que se passe-t-il lorsque j'atteins les limites ?

Vous recevez des erreurs JSON. Pour 429 réponses, respectez Retry-After et utilisez l'intervalle exponentiel avec gigue.

Puis-je supprimer un QR d'un autre compte ?

Non. La suppression et la liste sont limitées au propriétaire de la clé API authentifié.

Meilleures pratiques de sécurité

  • Ne jamais exposer les clés API brutes dans le JavaScript du navigateur, forfaits mobiles ou référentiels publics.
  • Utilisez les listes d'autorisation IP des clés API pour verrouiller l'utilisation sur des serveurs de confiance.
  • Consignez request_id avec vos propres ID de trace pour un tri plus rapide des incidents.
  • Faites pivoter les clés selon un calendrier et immédiatement après les fuites d'informations d'identification.
Ouvrir le gestionnaire de clés API