Przejdź do głównej zawartości

Files API

Przegląd

Files API hostuje pliki w qr3 i udostępnia dla nich stały adres URL. Kod QR wskazuje na ten URL — powiązany plik możesz w każdej chwili wymienić bez konieczności ponownego drukowania kodu.

Bazowy URL: https://qr3.app/v1/files

Opcjonalnie możesz powiązać plik z kodem za pomocą code_id. Jest to podstawa dla strony docelowej dla kodu, która wyświetla listę wszystkich publicznych plików danego kodu.

Obsługiwane typy są weryfikowane na podstawie sygnatury pliku (magic bytes), a nie rozszerzenia: PDF, PNG, JPEG, WebP, MP4, glTF/GLB, JSON. Plik .pdf, który nie jest plikiem PDF, zostanie odrzucony.

Role

OperacjaWymagana rolaOtrzymuje 403
Wszystkie GETdowolna rola
POST /upload, PUT /:idrola zapisuviewer
DELETE /:idrola usuwaniaviewer, contributor

Wyjątkiem jest rola contributor: może ona tworzyć i modyfikować, ale nie może niczego usuwać.

Przesyłanie pliku

POST /v1/files/upload

Oczekuje multipart/form-data.

PoleWymaganeOpis
fileTakPlik
code_idNiePowiązanie z kodem (musi należeć do Workspace)
visibilityNieprivate (domyślnie) lub public
Okno terminala
curl -X POST https://qr3.app/v1/files/upload \
-H "Authorization: Bearer qr3_sk_..." \
-F "code_id=qr_a1b2c3d4" \
-F "visibility=public"

Odpowiedź (HTTP 201):

{
"data": {
"id": "file_a1b2c3d4",
"code_id": "qr_a1b2c3d4",
"filename": "datenblatt.pdf",
"mime_type": "application/pdf",
"size_bytes": 284913,
"hash_sha256": "9f86d081884c7d65…",
"visibility": "public",
"status": "active",
"created_at": "2026-03-14T12:00:00.000Z",
"download_url": "https://qr3.app/v1/files/file_a1b2c3d4/download",
"public_url": "https://qr3.app/f/file_a1b2c3d4"
},
"meta": { "request_id": "req_abc123" }
}

Pole public_url jest ustawiane tylko przy visibility: "public" oraz status: "active". Adres ten nie wymaga uwierzytelniania i nadaje się bezpośrednio jako docelowy URL kodu QR.

Lista plików

GET /v1/files

Parametry zapytania (Query): code_id i visibility, oba opcjonalne. Zwraca aktywne pliki z Workspace, zaczynając od najnowszych.

Okno terminala
curl "https://qr3.app/v1/files?code_id=qr_a1b2c3d4" \
-H "Authorization: Bearer qr3_sk_..."

Odpowiedź (HTTP 200):

{
"data": [ { "id": "file_a1b2c3d4", "…": "" } ],
"meta": {
"request_id": "req_abc123",
"file_count": 3,
"total_size_bytes": 812004
}
}

Pobieranie informacji o pliku

GET /v1/files/:id

Zwraca metadane, w tym download_url (oraz public_url dla plików publicznych). Dostępne do odczytu dla wszystkich ról.

Pobieranie pliku

GET /v1/files/:id/download

Przesyła zawartość strumieniowo jako Content-Disposition: attachment z nagłówkiem Cache-Control: private, no-store — odpowiedź zawsze reprezentuje aktualny stan, w przeciwieństwie do buforowanego publicznego adresu URL /f/:id.

Błąd 404 może wystąpić w dwóch przypadkach: plik nie istnieje w Workspace (lub został usunięty) albo plik istnieje, ale brakuje zapisanego obiektu.

Zastępowanie pliku

PUT /v1/files/:id

Zastępuje zawartość pliku i zachowuje jego id — a tym samym publiczny adres /f/:id oraz download_url. Wydrukowany już kod QR pozostaje ważny.

Okno terminala
curl -X PUT https://qr3.app/v1/files/file_a1b2c3d4 \
-H "Authorization: Bearer qr3_sk_..." \

Pola visibility, code_id i created_at pozostają bez zmian; filename, mime_type, size_bytes oraz hash_sha256 są aktualizowane. Limit rozmiaru pojedynczego pliku w planie obowiązuje tak samo jak przy przesyłaniu, a limit pamięci Workspace jest weryfikowany pod kątem różnicy w rozmiarze. Limit „liczby plików na kod” nie ma zastosowania, ponieważ nie jest dodawany nowy plik.

Usuwanie pliku

DELETE /v1/files/:id

Miękkie usuwanie (soft-delete): plik natychmiast znika z listy, przestaje być dostępny i — jeśli był publiczny — nie jest już serwowany pod adresem /f/:id.

Odpowiedź (HTTP 200):

{
"data": { "id": "file_a1b2c3d4", "deleted": true },
"meta": { "request_id": "req_abc123" }
}

Limity

PlanMaks. na plik
Free5 MB
Pro25 MB
Business100 MB
Agency100 MB
Enterprise250 MB

Dodatkowo dla każdego planu obowiązuje maksymalna liczba plików na kod oraz całkowity limit pamięci na Workspace. Limit częstotliwości przesyłania (rate limit) wynosi 100 przesłanych plików na godzinę na Workspace.

Błędy

StatusKiedy
400Nieznana lub niepasująca sygnatura pliku, nieprawidłowa zawartość multipart
401Brak lub nieprawidłowy klucz API
403Rola nie ma uprawnień do zapisu lub usuwania
404code_id lub plik nie znajduje się w Workspace; przy pobieraniu również: brak obiektu w pamięci
413Plik jest większy niż limit planu
422Brak pliku, nieprawidłowa wartość visibility, osiągnięto limit „liczby plików na kod”, przekroczono limit pamięci Workspace
429Limit częstotliwości przesyłania (100/godzinę/Workspace) lub ogólny limit częstotliwości (rate limit)

Powiązane tematy