Sari la conținut

Files API

Prezentare generală

API-ul Files găzduiește fișiere pe qr3 și oferă un URL stabil pentru acestea. Codul QR indică spre acest URL — poți înlocui oricând fișierul din spate, fără a reimprima codul.

URL de bază: https://qr3.app/v1/files

Opțional, poți asocia un fișier cu un cod prin intermediul code_id. Aceasta este baza pentru landing page-ul per cod, care listează toate fișierele publice ale unui cod.

Tipurile acceptate sunt verificate prin magic bytes, nu după extensia fișierului: PDF, PNG, JPEG, WebP, MP4, glTF/GLB, JSON. Un fișier .pdf care nu este de fapt un PDF va fi respins.

Roluri

OperațiuneNecesarPrimește 403
Toate GETorice rol
POST /upload, PUT /:idrol de scriereviewer
DELETE /:idrol de ștergereviewer, contributor

Regula specială este pentru contributor: acest rol poate crea și modifica, dar nu poate șterge nimic.

Încărcare fișier

POST /v1/files/upload

Se așteaptă multipart/form-data.

CâmpObligatoriuDescriere
fileDaFișierul
code_idNuAsociere cu un cod (trebuie să aparțină de Workspace)
visibilityNuprivate (implicit) sau public
Terminal window
curl -X POST https://qr3.app/v1/files/upload \
-H "Authorization: Bearer qr3_sk_..." \
-F "code_id=qr_a1b2c3d4" \
-F "visibility=public"

Răspuns (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 este setat doar pentru visibility: "public" și status: "active". Adresa nu necesită autentificare și este potrivită direct ca URL de destinație al unui cod QR.

Listare fișiere

GET /v1/files

Query: code_id și visibility, ambele opționale. Returnează fișierele active din Workspace, cele mai recente primele.

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

Răspuns (HTTP 200):

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

Obținere informații fișier

GET /v1/files/:id

Returnează metadatele, inclusiv download_url (și public_url pentru fișierele publice). Poate fi citit de toate rolurile.

Descărcare fișier

GET /v1/files/:id/download

Transmite conținutul ca flux (stream) cu Content-Disposition: attachment și Cache-Control: private, no-store — prin urmare, răspunsul reprezintă întotdeauna starea actuală, spre deosebire de URL-ul public /f/:id care este stocat în cache.

Eroarea 404 poate apărea în două moduri: fișierul nu există în Workspace (sau este șters) sau acesta există, dar obiectul stocat lipsește.

Înlocuire fișier

PUT /v1/files/:id

Înlocuiește conținutul și păstrează id-ul — și, prin urmare, adresa publică /f/:id și adresa download_url. Un cod QR deja imprimat rămâne valabil.

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

visibility, code_id și created_at sunt păstrate; filename, mime_type, size_bytes și hash_sha256 sunt actualizate. Limita abonamentului per fișier se aplică la fel ca la încărcare, iar limita de stocare a Workspace-ului este verificată în raport cu diferența. Limita „fișiere per cod” nu se aplică, deoarece nu se adaugă niciun fișier nou.

Ștergere fișier

DELETE /v1/files/:id

Ștergere logică (soft delete): fișierul dispare imediat din listă, nu mai poate fi accesat și — dacă este public — nu mai este livrat la adresa /f/:id.

Răspuns (HTTP 200):

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

Limite

AbonamentMax. per fișier
Free5 MB
Pro25 MB
Business100 MB
Agency100 MB
Enterprise250 MB

În plus, se aplică un număr maxim de fișiere per cod și un spațiu total de stocare per Workspace, în funcție de abonament. Limita de rată pentru încărcare este de 100 de încărcări pe oră per Workspace.

Erori

StatusCând
400Semnătură de fișier necunoscută sau necorespunzătoare, corp multipart nevalid
401Lipsă cheie API sau cheie API nevalidă
403Rolul nu are permisiunea de a scrie sau de a șterge
404code_id sau fișierul nu se află în Workspace; la descărcare și: obiectul lipsește din spațiul de stocare
413Fișierul este mai mare decât limita abonamentului
422Fișierul lipsește, visibility nevalidă, limita „fișiere per cod” a fost atinsă, limita de stocare a Workspace-ului a fost depășită
429Limită de rată pentru încărcare (100/oră/Workspace) sau limită de rată generală

Subiecte conexe