Zużycie w tym miesiącu
GET /api/v1/usage
Plan zespołu, liczba wywołań w bieżącym miesiącu i limit. Najprostszy sposób, żeby sprawdzić, że klucz działa; samo wywołanie też się liczy.
Odpowiedź: 200 JSON
Kody kreskowe i QR z Twojego programu. Te same symboliki, te same reguły i ten sam renderer co darmowe generatory na qreska.com, oraz kody dynamiczne z panelu.
API jest w planach Biznes (10 000 wywołań miesięcznie) i Pro (100 000 wywołań miesięcznie). Klucz tworzysz w panelu, na stronie API.
Przejdź do paneluWszystkie trasy są pod adresem https://app.qreska.com/api/v1. Każde wywołanie niesie klucz w nagłówku, nigdy w adresie, bo adresy trafiają do logów i historii przeglądarki. Klucza nie umieszczaj w kodzie strony, który trafia do przeglądarki: API jest dla Twojego serwera.
Klucz API z panelu, w nagłówku Authorization: Bearer qrk_…Opis wszystkich tras w formacie OpenAPI 3.1, do wczytania w Postmanie, Insomnii albo generatorze klienta: https://app.qreska.com/api/v1/openapi.json?lang=pl
Treść kodów statycznych rysujemy w pamięci i zapominamy po wysłaniu odpowiedzi. W dzienniku wywołań, który widzisz w panelu, jest czas, klucz, metoda, trasa bez danych, wynik i czas odpowiedzi — bez treści i bez adresu IP. Szczegóły w polityce prywatności.
Kod EAN-13 jako PNG w 600 dpi:
curl -X POST https://app.qreska.com/api/v1/barcodes \
-H "Authorization: Bearer $QRESKA_KEY" \
-H "Content-Type: application/json" \
-d '{"symbology":"ean-13","data":"590123412345","format":"png","dpi":600}' \
-o ean-13.pngKod dynamiczny, a potem zmiana jego celu:
curl -X POST https://app.qreska.com/api/v1/codes \
-H "Authorization: Bearer $QRESKA_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"Flyer","target":{"type":"url","url":"https://example.com/offer"}}'
curl -X PATCH https://app.qreska.com/api/v1/codes/$CODE_ID \
-H "Authorization: Bearer $QRESKA_KEY" \
-H "Content-Type: application/json" \
-d '{"target":{"type":"url","url":"https://example.com/winter"}}'Dwie małe biblioteki bez zależności: dla Node.js 18+ (TypeScript, fetch) i dla PHP 8.1+ (curl). Obsługują klucz, błędy jako wyjątki z kodem z tabeli wyżej, ponowienie po 429 rate_limited i stronicowanie listy kodów. Do czasu publikacji w npm i Packagist instalujesz je z katalogów sdk/js i sdk/php w repozytorium.
JavaScript i TypeScript:
import { Qreska } from "@qreska/sdk";
const qreska = new Qreska({ apiKey: process.env.QRESKA_KEY });
const file = await qreska.barcode({ symbology: "ean-13", data: "590123412345", format: "png" });
const code = await qreska.codes.create({
name: "Flyer",
target: { type: "url", url: "https://example.com/offer" },
});PHP:
$qreska = new \Qreska\Client(getenv('QRESKA_KEY'));
$file = $qreska->barcode(['symbology' => 'ean-13', 'data' => '590123412345', 'format' => 'png']);
file_put_contents('ean-13.png', $file->data);
$code = $qreska->createCode([
'name' => 'Flyer',
'target' => ['type' => 'url', 'url' => 'https://example.com/offer'],
]);Numery GTIN/EAN nadaje organizacja GS1, w Polsce GS1 Polska. Qreska tylko rysuje kod z numeru, który już masz.
W Polsce numery ISBN nadaje Krajowe Biuro ISBN w Bibliotece Narodowej. Qreska tylko rysuje kod z numeru, który już masz.
W Polsce numery ISSN nadaje Krajowy Ośrodek ISSN w Bibliotece Narodowej. Qreska tylko rysuje kod z numeru, który już masz.
Błędy mają format application/problem+json (RFC 9457). Pole code jest stałe i do porównań w programie; title jest dla człowieka, po polsku albo po angielsku według nagłówka Accept-Language. Przy błędach walidacji errors wskazuje pola: path to miejsce w ciele żądania, code to powód.
| Kod | Status | Znaczenie |
|---|---|---|
| unauthorized | 401 | Brak klucza API albo klucz jest nieznany lub unieważniony. |
| forbidden | 403 | Plan tej organizacji nie obejmuje API. |
| suspended | 403 | Organizacja jest zawieszona do wyjaśnienia: nie może tworzyć kodów ani zmieniać celów. |
| not_found | 404 | Nie ma takiego zasobu w tej organizacji. |
| invalid_request | 400 | Żądanie nie jest poprawnym JSON-em albo nie pasuje do schematu. |
| invalid_data | 422 | Tej treści nie da się zapisać w wybranej symbolice. |
| blocked_target | 422 | Ten adres jest na liście zablokowanych albo prowadzi do oszustwa lub złośliwego oprogramowania. |
| plan_limit | 409 | Plan nie pozwala na więcej kodów dynamicznych. |
| quota_exceeded | 429 | Miesięczny limit wywołań API planu jest wykorzystany. |
| rate_limited | 429 | Za dużo wywołań na sekundę. Spróbuj ponownie za chwilę. |
| internal | 500 | Błąd po naszej stronie. Spróbuj ponownie; jeśli się powtarza, napisz do nas. |
GET /api/v1/usage
Plan zespołu, liczba wywołań w bieżącym miesiącu i limit. Najprostszy sposób, żeby sprawdzić, że klucz działa; samo wywołanie też się liczy.
Odpowiedź: 200 JSON
GET /api/v1/symbologies
Symboliki, które przyjmuje POST /api/v1/barcodes: identyfikator, rodzaj, przykład, domyślne wymiary w mm, przełączniki z wartościami i informacja, kto nadaje numery.
Odpowiedź: 200 JSON
GET /api/v1/qr-contents
Rodzaje treści dla pola qrContent (Wi-Fi, wizytówka, e-mail, przelew…) z ich polami. Te same co na stronach /qr.
Odpowiedź: 200 JSON
POST /api/v1/barcodes
Rysuje kod z podanej treści i zwraca plik w wybranym formacie. Wartość po normalizacji, na przykład z cyfrą kontrolną, jest w nagłówku Qreska-Value; ostrzeżenia, które nie zatrzymały rysowania (kontrast, wymiar modułu), w nagłówku Qreska-Warning.
| Pole | Typ | Wartości | Opis |
|---|---|---|---|
| symbologywymagane | string | jedna z: ean-13, ean-8, upc-a, upc-e, isbn, issn, itf-14, gs1-128, code-128, code-39, interleaved-2-of-5, codabar, pharmacode, data-matrix, gs1-data-matrix, pdf417, aztec, micro-qr, qr | Symbolika, jak w adresie generatora: ean-13, code-128, qr… |
| data | string | do 8000 znaków | Treść kodu. Dla QR zamiast niej możesz podać qrContent. |
| qrContent | object | Tylko dla qr: rodzaj treści i wartości jej pól; serwis złoży z nich treść tak jak strona /qr. | |
| addon | string | do 5 znaków | Dodatek 2- lub 5-cyfrowy, dla symbolik, które go mają (EAN-13, UPC-A, ISBN…). |
| options | object | Przełączniki symboliki, na przykład errorCorrection dla QR. Lista w GET /api/v1/symbologies. | |
| format | string | jedna z: svg, png, pdf, json; domyślnie "svg" | Format pliku. |
| moduleWidthMm | number | od 0.1 do 5 | Szerokość modułu (X) w mm. |
| barHeightMm | number | od 3 do 300 | Wysokość kresek w mm, dla kodów 1D. |
| hri | object | Tekst pod kodem 1D: czy go pokazać i jaka ma być wysokość cyfr w mm. | |
| colors | object | Kolory #RRGGBB kresek i tła. Czerwone i pomarańczowe kreski kodów 1D są odrzucane, bo skaner laserowy ich nie widzi. | |
| rotation | number | jedna z: 0, 90, 180, 270 | Obrót w stopniach. |
| moduleShape | string | jedna z: square, rounded, dot | Tylko dla qr: kształt modułów. |
| dpi | integer | od 72 do 1200; domyślnie 300 | Rozdzielczość PNG. Każdy moduł ma całą liczbę pikseli, a DPI zapisane w pliku zgadza się z wymiarem w mm. |
| object | Strona PDF: dopasowana do kodu z marginesem albo A4. |
Odpowiedź: 200 Plik: SVG, PNG, PDF, JSON
GET /api/v1/codes
Kody zespołu, od najnowszego, stronami. Następną stronę pobierasz z kursorem z pola nextCursor; null oznacza koniec listy.
| Pole | Typ | Wartości | Opis |
|---|---|---|---|
| q | string | do 200 znaków | Szukaj w nazwie, adresie kodu i adresie celu. |
| projectId | string | do 100 znaków | Tylko kody z tego projektu. |
| limit | integer | od 1 do 100; domyślnie 50 | Liczba kodów na stronie. |
| cursor | string | do 200 znaków | Kursor z nextCursor poprzedniej strony. |
Odpowiedź: 200 JSON
POST /api/v1/codes
Tworzy kod dynamiczny z celem. Cel przechodzi te same sprawdzenia co w panelu: listę zablokowanych domen i Google Web Risk. Obowiązują limity planu.
| Pole | Typ | Wartości | Opis |
|---|---|---|---|
| namewymagane | string | do 120 znaków | Nazwa kodu, widoczna w panelu. |
| targetwymagane | object | Cel: url, vcard, wifi, links albo menu (pdf tylko z plikiem wgranym w panelu). | |
| projectId | object | Projekt, do którego trafi kod. |
Odpowiedź: 201 JSON
GET /api/v1/codes/{id}
Jeden kod zespołu z celem i ustawieniami. Hasło nigdy nie jest zwracane, tylko informacja, czy jest.
Odpowiedź: 200 JSON
PATCH /api/v1/codes/{id}
Zmienia cel, nazwę, projekt, wygląd, stan albo opcje. Nowy cel działa od razu, a w historii kodu w panelu widać, że zmienił go ten klucz.
| Pole | Typ | Wartości | Opis |
|---|---|---|---|
| name | string | do 120 znaków | Nowa nazwa. |
| target | object | Nowy cel. | |
| projectId | object | Projekt albo null, żeby wyjąć kod z projektu. | |
| appearance | object | Wygląd: wymiar modułu, poziom korekcji, kolory, kształt, obrót, logo. | |
| status | string | jedna z: active, paused | active albo paused. Zablokowanego kodu nie da się wznowić. |
| password | object | Hasło, o które kod zapyta, albo null, żeby je usunąć. | |
| expiresAt | object | Od tej chwili kod pokazuje, że wygasł; null usuwa datę. | |
| scanLimit | object | Po tylu skanach kod pokazuje, że wygasł; null usuwa limit. |
Odpowiedź: 200 JSON
DELETE /api/v1/codes/{id}
Usuwa kod z listy. Jego adres od tej chwili pokazuje, że kod jest nieaktywny, i nigdy nie trafi do nikogo innego.
Odpowiedź: 204 Bez treści
GET /api/v1/codes/{id}/scans
Skany ludzi (bez botów) dzień po dniu, sumy okresu, poprzedniego okresu i od początku oraz najczęstsze kraje, miasta, systemy, urządzenia i przeglądarki.
| Pole | Typ | Wartości | Opis |
|---|---|---|---|
| days | string | jedna z: 7, 30, 90, 365; domyślnie "30" | Okres w dniach. |
Odpowiedź: 200 JSON
GET /api/v1/codes/{id}/image
Kod narysowany z wyglądem zapisanym w panelu. Kod z logo WebP jest dostępny tylko jako SVG; w PNG i PDF wgraj logo PNG, JPEG albo SVG.
| Pole | Typ | Wartości | Opis |
|---|---|---|---|
| format | string | jedna z: svg, png, pdf; domyślnie "svg" | Format pliku. |
| dpi | integer | od 72 do 1200; domyślnie 300 | Rozdzielczość PNG. |
Odpowiedź: 200 Plik: SVG, PNG, PDF
GET /api/v1/projects
Projekty, w które zespół grupuje kody.
Odpowiedź: 200 JSON
POST /api/v1/projects
Tworzy projekt; jego id podajesz w polu projectId kodu.
| Pole | Typ | Wartości | Opis |
|---|---|---|---|
| namewymagane | string | do 80 znaków | Nazwa projektu. |
Odpowiedź: 201 JSON