Manualul dezvoltatorului CreateQR

Automatizează crearea codurilor QR dinamice cu API-ul CreateQR

Folosește endpoint-uri JSON ca să creezi, listezi și ștergi coduri QR din propriile sisteme. Generează coduri QR dinamice pentru campanii și destinații gestionate, plus coduri QR statice pentru WiFi și portofele crypto acolo unde sunt acceptate.

Calea de bază: /api/v1 Autentificare: Authorization: Bearer <key> (recomandat)

Creează coduri QR

Creezi un cod QR dinamic pentru URL-uri și destinații gestionate sau un cod QR static pentru WiFi și portofele crypto.

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

Trimite doar JSON. Pentru autentificare, headerul este varianta recomandată. Câmpurile din body sunt păstrate pentru compatibilitate cu integrările existente.

Quickstart (cURL)

Acest exemplu de URL dinamic este cel mai rapid traseu pentru primul request funcțional.

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"}'

Autentificare și compatibilitate

  • Recomandat: Authorization: Bearer <key>
  • Acceptat și: X-API-Key
  • Fallback JSON: apikey sau api_key
  • Content-Type trebuie să fie application/json
  • Metodele non-POST returnează 405 method_not_allowed

Parametri principali

Parametru Tip Implicit Descriere
apikey String Obligatoriu Cheie API secretă. Recomandat în headerul Authorization (Bearer). Sunt acceptate și câmpurile JSON apikey/api_key.
data String Obligatoriu Conținutul care va fi codificat. QR-ul dinamic necesită un URL valid. QR-ul static acceptă doar payload-uri WiFi sau adrese de portofel crypto.
qrtype String dynamic Modul QR: dynamic pentru URL-uri și destinații gestionate sau static doar pentru WiFi și portofele crypto.
title String Opțional Titlul QR-ului afișat în dashboard, limitat la 120 de caractere.
folderid Number Opțional ID numeric pozitiv al unui folder din contul tău.

Parametri de culoare și formă

Parametru Tip Implicit Descriere
transparent String/Bool off Sunt acceptate on/off, true/false, 1/0, yes/no.
backcolor String #FFFFFF Culoarea de fundal în format hex #RRGGBB.
frontcolor String #000000 Culoarea principală a modulelor QR în format #RRGGBB.
gradient String/Bool off Activează gradientul în două culori pentru puncte.
radial String/Bool off Activează gradientul radial, când gradient este pornit.
gradient_color String #15A97C A doua culoare a gradientului, în format #RRGGBB.
marker_out_color String #000000 Culoare ramă în jurul punctelor din colțuri in #RRGGBB format.
marker_in_color String #000000 Culoare puncte colțuri in #RRGGBB format.
pattern String default Preset pentru stilul punctelor QR.
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 Stil ramă în jurul punctelor din colțuri.
corner_1 corner_2 corner_3 corner_4 corner_5 corner_6 corner_7 corner_8
marker_in String default Tip puncte colțuri.
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, cale locală recomandată către watermark SVG, cale locală legacy către PNG sau date de imagine în 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 Elimină placa de fundal din spatele logo-ului.

Parametri de ramă

Parametru Tip Implicit Descriere
outer_frame String none Preset pentru stilul ramei.
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 Textul din ramă, limitat la 80 de caractere.
label_font String Arial, Helvetica, sans-serif Stiva de fonturi folosită pentru textul ramei.
custom_frame_color String/Bool off Activează culoare personalizată pentru ramă.
framecolor String #000000 Culoarea ramei în format hex #RRGGBB.

Exemple de request pentru creare

Exemplu: QR simplu

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
Previzualizare rezultat exemplu

Exemplu: QR WiFi static

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
Previzualizare rezultat exemplu

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
Previzualizare rezultat exemplu

Exemplu: culoare + 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

Exemplu: QR de campanie cu ramă

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
Previzualizare rezultat exemplu

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
Previzualizare rezultat exemplu

Exemplu: QR static pentru portofel 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
Previzualizare rezultat exemplu

Envelope de răspuns cu succes

{
    "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"
}

Șterge coduri QR

Ștergi un QR după ID, doar dacă îți aparține.

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

Body request

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

Răspuns

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

Listează coduri QR

Listezi QR-urile tale în pagini de 100, ordonate de la cele mai noi.

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

Folosește pagination începând de la 1. Rezultatele returnează maximum 100 de elemente pe pagină.

Body request

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

Răspuns

{
    "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ăspunsuri de eroare, limite și retry

Fiecare răspuns include request_id. Păstrează-l când contactezi suportul, ca să putem investiga rapid.

Envelope tipic de eroare

{
    "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"
}

Strategie de retry

  • 429 rate_limited: reîncearcă folosind exponential backoff plus jitter.
  • Respectă Retry-After atunci când este prezent.
  • 429 monthly_quota_exceeded: așteaptă resetarea cotei sau folosește o cheie care mai are disponibilitate.
  • 5xx: reîncearcă de câteva ori, apoi alertează echipa ta.
Cod eroare HTTP Când apare Ce ai de făcut
invalid_api_key 401 Cheia API lipsește sau este invalidă Trimite o cheie validă prin Bearer, X-API-Key sau câmp JSON.
invalid_content_type 415 Body-ul nu este application/json Trimite Content-Type: application/json.
request_too_large 413 Payload-ul depășește limita configurată Redu dimensiunea body-ului, mai ales pentru logo-uri base64.
plan_upgrade_required 403 Planul nu permite acces API Fă upgrade la Business din Facturare.
validation_error 422 Câmpuri invalide precum URL, payload static, culoare sau folderid Folosește dynamic pentru URL-uri și destinații gestionate; folosește static doar pentru WiFi sau portofele crypto.
rate_limited 429 Ai atins limita pe minut Reîncearcă cu exponential backoff și respectă Retry-After.
monthly_quota_exceeded 429 Cota lunară este epuizată Așteaptă resetarea sau ajustează cota și setările cheii.
qr_not_found 404 QR-ul de șters nu există sau nu îți aparține Verifică ownership-ul pentru qrid și încearcă din nou.
internal_error 500 A apărut o problemă internă neașteptată Reîncearcă cu backoff și păstrează request_id pentru suport.

FAQ

Răspunsuri scurte la întrebările pe care le vedem cel mai des în integrări.

Câte request-uri API pot rula?

API-ul este disponibil pe Business. Cota lunară depinde de planul activ și de eventualele override-uri pe cheie. Seed-ul implicit pentru Business este generos, iar adminii pot ajusta fin fiecare cheie.

Pot trimite cheia API în body-ul JSON?

Da. Autentificarea prin header rămâne recomandată, dar câmpurile apikey și api_key sunt acceptate pentru compatibilitate.

Pot crea coduri QR statice prin API?

Da, dar modul static este limitat la payload-uri WiFi și adrese de portofel crypto. Folosește modul dinamic pentru URL-uri, PDF-uri, meniuri, aplicații, pagini sociale și alte destinații gestionate.

QR-urile create prin API apar în dashboard?

Da. Fiecare request de creare reușit este salvat în contul tău și poate fi administrat ca orice alt QR.

Ce se întâmplă când ating limitele?

Primești erori JSON. Pentru răspunsurile 429, respectă Retry-After și folosește exponential backoff cu jitter.

Pot șterge un QR din alt cont?

Nu. Operațiunile de delete și list sunt limitate la proprietarul cheii API autentificate.

Bune practici de securitate

  • Nu expune niciodată cheile API brute în JavaScript din browser, bundle-uri mobile sau repo-uri publice.
  • Folosește allowlist-uri IP pentru cheile API, ca să limitezi utilizarea la servere de încredere.
  • Înregistrează request_id împreună cu propriile trace ID-uri pentru triere mai rapidă a incidentelor.
  • Rotește cheile periodic și imediat după orice scurgere de credențiale.
Deschide managerul de chei API