Přeskočit na obsah

Files API

Přehled

Files API hostuje soubory na qr3 a poskytuje pro ně stabilní URL. QR kód ukazuje na tuto URL — soubor za ní můžete kdykoli vyměnit, aniž byste museli kód znovu tisknout.

Základní URL: https://qr3.app/v1/files

Volitelně můžete soubor propojit s kódem pomocí code_id. To je základ pro landing page pro každý kód, která zobrazuje všechny veřejné soubory daného kódu.

Podporované typy jsou kontrolovány pomocí magic bytes, nikoli podle přípony souboru: PDF, PNG, JPEG, WebP, MP4, glTF/GLB, JSON. Soubor .pdf, který není skutečným PDF, bude odmítnut.

Role

OperaceVyžadovánoObdrží 403
Všechny GETjakákoli role
POST /upload, PUT /:idrole pro zápisviewer
DELETE /:idrole pro mazáníviewer, contributor

Zvláštním pravidlem je contributor: Tato role může vytvářet a měnit, ale nemůže nic mazat.

Nahrání souboru

POST /v1/files/upload

Očekává multipart/form-data.

PolePovinnéPopis
fileAnoSoubor
code_idNePropojení s kódem (musí patřit do stejného Workspace)
visibilityNeprivate (výchozí) nebo public
Terminál
curl -X POST https://qr3.app/v1/files/upload \
-H "Authorization: Bearer qr3_sk_..." \
-F "code_id=qr_a1b2c3d4" \
-F "visibility=public"

Odpověď (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" }
}

public_url je nastavena pouze při visibility: "public" a status: "active". Tato adresa nevyžaduje přihlášení a je přímo vhodná jako cílová URL QR kódu.

Seznam souborů

GET /v1/files

Query parametry: code_id a visibility, oba volitelné. Vrací aktivní soubory ve Workspace, nejnovější jako první.

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

Odpověď (HTTP 200):

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

Získání informací o souboru

GET /v1/files/:id

Vrací metadata včetně download_url (a public_url u veřejných souborů). Čitelné pro všechny role.

Stažení souboru

GET /v1/files/:id/download

Streamuje obsah jako Content-Disposition: attachment s hlavičkou Cache-Control: private, no-store — odpověď je tedy vždy v aktuálním stavu, na rozdíl od cachované veřejné URL /f/:id.

Chyba 404 může nastat ve dvou případech: Soubor ve Workspace neexistuje (nebo je smazán), nebo existuje, ale chybí uložený objekt.

Nahrazení souboru

PUT /v1/files/:id

Nahradí obsah a zachová id — a tím i veřejnou adresu /f/:id a download_url. Již vytištěný QR kód zůstává platný.

Terminál
curl -X PUT https://qr3.app/v1/files/file_a1b2c3d4 \
-H "Authorization: Bearer qr3_sk_..." \

visibility, code_id a created_at zůstávají zachovány; filename, mime_type, size_bytes a hash_sha256 se aktualizují. Limit tarifu (Plan) na soubor platí stejně jako při nahrávání, limit úložiště Workspace se ověřuje vůči rozdílu velikostí. Limit „počet souborů na kód“ neplatí, protože žádný nový soubor nepřibývá.

Smazání souboru

DELETE /v1/files/:id

Soft-delete: Soubor okamžitě zmizí ze seznamu, již není dostupný a — pokud je veřejný — přestane se pod /f/:id poskytovat.

Odpověď (HTTP 200):

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

Limity

Tarif (Plan)Max. na soubor
Free5 MB
Pro25 MB
Business100 MB
Agency100 MB
Enterprise250 MB

Kromě toho platí pro každý tarif maximální počet souborů na kód a celková kapacita úložiště pro Workspace. Rychlostní limit (rate limit) pro nahrávání je 100 nahrání za hodinu na jeden Workspace.

Chyby

StavKdy
400Neznámý nebo neodpovídající podpis souboru (file signature), neplatné tělo multipart
401Chybějící nebo neplatný API klíč
403Role nemá oprávnění k zápisu, resp. k mazání
404code_id nebo soubor neexistuje ve Workspace; při stahování také: objekt chybí v úložišti
413Soubor je větší než limit tarifu
422Soubor chybí, neplatná visibility, byl dosažen limit „počet souborů na kód“ nebo byl překročen limit úložiště Workspace
429Rychlostní limit nahrávání (100/hodinu/Workspace) nebo obecný rate limit

Související