Podręcznik dewelopera CreateQR

Automatyzuj tworzenie dynamicznych kodów QR z API CreateQR

Użyj endpointów JSON, aby tworzyć, listować i usuwać kody QR z własnych systemów. Generuj dynamiczne kody QR do kampanii i zarządzanych miejsc docelowych oraz statyczne kody QR do WiFi i portfeli kryptowalutowych, jeśli są obsługiwane.

Ścieżka bazowa: /api/v1 Uwierzytelnianie: Authorization: Bearer <key> (zalecane)

Tworzenie kodów QR

Utwórz dynamiczny kod QR dla URL-i i zarządzanych miejsc docelowych albo statyczny kod QR dla WiFi i portfeli crypto.

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

Wysyłaj tylko JSON. W przypadku uwierzytelniania kluczem najlepszą praktyką jest użycie nagłówka. Pola klucza w treści są dostępne dla zgodności z istniejącymi integracjami.

Szybki start (cURL)

Ten przykład dynamicznego URL-a to najszybszy sposób na rozpoczęcie.

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

Uwierzytelnianie i zgodność

  • Zalecane: Authorization: Bearer <key>
  • Akceptowane również: X-API-Key
  • Alternatywa JSON: apikey lub api_key
  • Content-Type musi mieć wartość application/json
  • Metody inne niż POST zwracają 405 method_not_allowed

Parametry główne

Parametr Typ Domyślnie Opis
apikey String Wymagane Tajny klucz API. Zalecane jest użycie w nagłówku Authorization (Bearer). Akceptowane są także apikey/api_key w treści JSON.
data String Wymagane Treść do zakodowania. Dynamiczny QR wymaga prawidłowego URL-a. Statyczny QR akceptuje tylko ciągi WiFi lub adresy portfeli crypto.
qrtype String dynamic Tryb QR: dynamic dla URL-i i zarządzanych miejsc docelowych albo static tylko dla WiFi i portfeli crypto.
title String Opcjonalne Tytuł QR wyświetlany w panelu (przycinany do 120 znaków).
folderid Number Opcjonalne Dodatnia liczba całkowita będąca ID folderu należącego do Twojego konta.

Parametry koloru i kształtu

Parametr Typ Domyślnie Opis
transparent String/Bool off Akceptowane wartości: on/off, true/false, 1/0, yes/no.
backcolor String #FFFFFF Kolor tła w formacie hex #RRGGBB.
frontcolor String #000000 Główny kolor kropek w formacie hex #RRGGBB.
gradient String/Bool off Włącza dwukolorowy gradient kropek.
radial String/Bool off Włącza gradient radialny (działa, gdy gradient jest włączony).
gradient_color String #15A97C Drugi kolor gradientu w formacie #RRGGBB.
marker_out_color String #000000 Kolor ramki wokół kropek narożnych in #RRGGBB format.
marker_in_color String #000000 Kolor kropek narożnych in #RRGGBB format.
pattern String default Preset stylu kropek.
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 Styl ramki wokół kropek narożnych.
corner_1 corner_2 corner_3 corner_4 corner_5 corner_6 corner_7 corner_8
marker_in String default Typ kropek narożnych.
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, zalecana lokalna ścieżka do znaku wodnego SVG, starsza lokalna ścieżka do PNG lub dane obrazu 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 Usuwa tło pod logo.

Parametry ramki

Parametr Typ Domyślnie Opis
outer_frame String none Preset stylu ramki.
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 Etykieta tekstowa ramki (przycinana do 80 znaków).
label_font String Arial, Helvetica, sans-serif Stos czcionek dla etykiety ramki.
custom_frame_color String/Bool off Włącza niestandardowy kolor ramki.
framecolor String #000000 Kolor ramki w formacie hex #RRGGBB.

Przykłady żądań tworzenia

Przykład: Prosty QR

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
Podgląd przykładowego wyniku

Przykład: statyczny QR WiFi

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
Podgląd przykładowego wyniku

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
Podgląd przykładowego wyniku

Przykład: Kolor + 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

Przykład: QR kampanii w ramce

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
Podgląd przykładowego wyniku

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
Podgląd przykładowego wyniku

Przykład: statyczny QR portfela kryptowalutowego

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
Podgląd przykładowego wyniku

Obiekt odpowiedzi powodzenia

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

Usuwanie kodów QR

Usuń kod QR według ID (tylko właściciel).

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

Treść żądania

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

Odpowiedź

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

Lista kodów QR

Wyświetl swoje kody QR na stronach po 100, od najnowszych.

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

Użyj paginacji zaczynającej się od 1. Wyniki zwracają do 100 elementów na stronę.

Treść żądania

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

Odpowiedź

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

Odpowiedzi błędów, limity i ponowienia

Każda odpowiedź zawiera request_id. Zachowaj go podczas kontaktu z pomocą techniczną, abyśmy mogli szybko zdiagnozować problem.

Typowa struktura błędu

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

Strategia ponawiania

  • 429 rate_limited: ponów próbę z wykładniczym opóźnieniem i jitterem.
  • Przestrzegaj Retry-After, jeśli jest obecny.
  • 429 monthly_quota_exceeded: poczekaj na reset limitu lub użyj klucza z dostępnym limitem.
  • 5xx: ponawiaj z ograniczoną liczbą prób, a następnie powiadom swój zespół.
Kod błędu HTTP Kiedy występuje Co zrobić
invalid_api_key 401 Brak klucza API lub jest on nieprawidłowy Podaj prawidłowy klucz przez Bearer, X-API-Key lub pole w treści JSON.
invalid_content_type 415 Treść nie jest w formacie application/json Wyślij Content-Type: application/json.
request_too_large 413 Ładunek przekracza skonfigurowany limit Zmniejsz rozmiar treści, zwłaszcza logo base64.
plan_upgrade_required 403 Plan nie obsługuje API Przejdź na plan Business w sekcji Rozliczenia.
validation_error 422 Nieprawidłowe pola, takie jak URL, statyczny payload, kolor lub folderid Użyj dynamic dla URL-i i zarządzanych miejsc docelowych; użyj static tylko dla WiFi lub portfeli crypto.
rate_limited 429 Osiągnięto limit na minutę Ponów próbę z wykładniczym opóźnieniem i uwzględnij Retry-After.
monthly_quota_exceeded 429 Miesięczny limit został wyczerpany Poczekaj na reset lub dostosuj ustawienia limitu i klucza.
qr_not_found 404 Cel usunięcia nie istnieje lub nie należy do Ciebie Sprawdź własność qrid i spróbuj ponownie.
internal_error 500 Nieoczekiwany problem po stronie serwera Ponów próbę z opóźnieniem i zachowaj request_id dla pomocy technicznej.

FAQ

Krótkie odpowiedzi na pytania, które najczęściej pojawiają się przy integracjach.

Ile żądań API mogę wykonać?

API jest dostępne tylko w planie Business. Miesięczny limit wynika z aktywnego planu i nadpisań kluczy. Domyślny limit początkowy dla Business jest wysoki, a administratorzy mogą precyzyjnie dostosować go dla każdego klucza.

Czy mogę wysyłać klucze API w treści JSON?

Tak. Zalecane jest uwierzytelnianie oparte na nagłówkach, ale akceptowane są też pola zgodności w treści: apikey lub api_key.

Czy mogę tworzyć statyczne kody QR przez API?

Tak, ale tryb statyczny jest ograniczony do ciągów WiFi i adresów portfeli crypto. Użyj trybu dynamicznego dla URL-i, PDF-ów, menu, aplikacji, stron społecznościowych i innych zarządzanych miejsc docelowych.

Czy kody QR utworzone przez API pojawiają się w moim panelu?

Tak. Każde pomyślnie utworzone QR jest zapisywane na Twoim koncie i można nim zarządzać tak jak każdym innym QR.

Co się stanie, gdy osiągnę limity?

Otrzymasz błędy JSON. W przypadku odpowiedzi 429 uwzględnij Retry-After i zastosuj exponential backoff z jitter.

Czy mogę usunąć QR z innego konta?

Nie. Usuwanie i listowanie są ograniczone do właściciela uwierzytelnionego klucza API.

Najlepsze praktyki bezpieczeństwa

  • Nigdy nie ujawniaj surowych kluczy API w JavaScript przeglądarki, pakietach mobilnych ani publicznych repozytoriach.
  • Używaj list dozwolonych adresów IP dla kluczy API, aby ograniczyć użycie do zaufanych serwerów.
  • Rejestruj request_id razem z własnymi identyfikatorami śledzenia, aby szybciej analizować incydenty.
  • Rotuj klucze zgodnie z harmonogramem oraz natychmiast po wycieku poświadczeń.
Otwórz menedżer kluczy API