Prosty
Bez zbędnych dodatków, szybkie skanowanie
Podręcznik dewelopera CreateQR
Użyj trzech endpointów, aby tworzyć, wyświetlać i usuwać kody QR z pełną kontrolą nad stylizacją. Integracja tego samego dnia, przejrzysty JSON, a Twoje kody QR pozostają w panelu.
/api/v1
Uwierzytelnianie: Authorization: Bearer <key> (zalecane)
Ten sam endpoint, różne style. Zachowaj prostotę, postaw na pełny branding lub opraw go na potrzeby kampanii offline.
Bez zbędnych dodatków, szybkie skanowanie
Stworzony do skanowania z daleka
Kampania spójna z identyfikacją
Gotowa ikona znaku wodnego
Gotowe na plakat „SCAN ME”
Więcej stylu do social mediów
Utwórz statyczny lub dynamiczny kod QR i zapisz go na swoim koncie.
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.
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":"static"}'
| 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. W przypadku dynamicznego QR musi to być prawidłowy URL. |
qrtype |
String | static |
Tryb QR: static lub dynamic. |
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. |
| 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 zewnętrznego markera pozycjonującego. |
marker_in_color |
String | #000000 |
Kolor wewnętrznego markera pozycjonującego. |
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 |
Preset stylu zewnętrznego markera.
default
flurry
sdoz
drop_in
drop
dropeye
dropeyeleft
dropeyeleaf
dropeyeright
squarecircle
circle
rounded
flower
flower_in
leaf
|
marker_in |
String | default |
Preset stylu wewnętrznego markera.
default
flurry
sdoz
drop_in
drop
dropeye
circle
rounded
sun
star
diamond
danger
cross
plus
x
heart
|
optionlogo |
String | none |
none, zalecana lokalna ścieżka do znaku wodnego SVG, starsza lokalna ścieżka do PNG lub dane obrazu base64.
none
data:image/*;base64,...
/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
|
no_logo_bg |
String/Bool | off |
Wyłącza tło pod logo. |
| Parametr | Typ | Domyślnie | Opis |
|---|---|---|---|
outer_frame |
String | none |
Preset stylu ramki.
none
bottom
top
balloon-bottom
balloon-top
ribbon-bottom
ribbon-top
phone
cine
|
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. |
{
"apikey": "ck_live_XXXXXXXXXXXXXXXXXXXXXXXX",
"data": "https://createqr.app",
"qrtype": "static",
"title": "Launch Landing QR",
"transparent": "off",
"backcolor": "#FFFFFF",
"frontcolor": "#000000",
"marker_out_color": "#000000",
"marker_in_color": "#000000",
"pattern": "default",
"marker": "default",
"marker_in": "default",
"optionlogo": "none"
}
{
"apikey": "ck_live_XXXXXXXXXXXXXXXXXXXXXXXX",
"data": "https://createqr.app/features",
"qrtype": "static",
"title": "Feature Tour QR",
"transparent": "off",
"backcolor": "#033895",
"frontcolor": "#FFFFFF",
"marker_out_color": "#669DF4",
"marker_in_color": "#669DF4",
"pattern": "oriental",
"marker": "flower",
"marker_in": "circle",
"optionlogo": "/images/watermarks/v2/01-link.svg"
}
{
"apikey": "ck_live_XXXXXXXXXXXXXXXXXXXXXXXX",
"data": "https://createqr.app/pricing",
"qrtype": "static",
"title": "Pricing Poster QR",
"transparent": "off",
"frontcolor": "#2B0011",
"marker_out_color": "#3B0001",
"marker_in_color": "#3B0001",
"pattern": "ellipse",
"marker": "sdoz",
"marker_in": "sdoz",
"optionlogo": "none",
"outer_frame": "balloon-top",
"framelabel": "SCAN ME",
"label_font": "Arial, Helvetica, sans-serif",
"custom_frame_color": "on",
"framecolor": "#3B0001"
}
{
"success": true,
"data": {
"qrid": "1284",
"svg": "<svg ...>...</svg>",
"type": "static",
"title": "Pricing Poster 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"
}
Usuń kod QR według ID (tylko właściciel).
{
"apikey": "ck_live_XXXXXXXXXXXXXXXXXXXXXXXX",
"qrid": "1284"
}
{
"success": true,
"data": {
"deleted": true,
"qrid": "1284"
},
"request_id": "0f8fad5b-d9cb-469f-a165-70867728950e"
}
Wyświetl swoje kody QR na stronach po 100, od najnowszych.
Użyj paginacji zaczynającej się od 1. Wyniki zwracają do 100 elementów na stronę.
{
"apikey": "ck_live_XXXXXXXXXXXXXXXXXXXXXXXX",
"pagination": "1"
}
{
"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": "Storefront 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"
}
Każda odpowiedź zawiera request_id. Zachowaj go podczas kontaktu z pomocą techniczną, abyśmy mogli szybko zdiagnozować problem.
{
"success": false,
"error": {
"code": "validation_error",
"message": "Dynamic QR requires a valid URL in data."
},
"request_id": "5f5fbd38-f82f-49ad-bf11-f7f04ca9747a"
}
| 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, kolor lub folderid | Popraw format ładunku i wyślij ponownie. |
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. |
Krótkie odpowiedzi na pytania, które najczęściej pojawiają się przy integracjach.
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.
Tak. Zalecane jest uwierzytelnianie oparte na nagłówkach, ale akceptowane są też pola zgodności w treści: apikey lub api_key.
Tak. Każde pomyślnie utworzone QR jest zapisywane na Twoim koncie i można nim zarządzać tak jak każdym innym QR.
Otrzymasz błędy JSON. W przypadku odpowiedzi 429 uwzględnij Retry-After i zastosuj exponential backoff z jitter.
Nie. Usuwanie i listowanie są ograniczone do właściciela uwierzytelnionego klucza API.