Gå til indhold

Files API

Oversigt

Files-API’en hoster filer hos qr3 og leverer en stabil URL til formålet. QR-koden peger på denne URL — du kan til enhver tid udskifte filen bagved uden at genprinte koden.

Basis-URL: https://qr3.app/v1/files

Du kan valgfrit knytte en fil til en kode via code_id. Dette er grundlaget for en landingsside pr. kode, som viser alle offentlige filer for en kode.

Understøttede typer kontrolleres via magic bytes, ikke på filnavnet: PDF, PNG, JPEG, WebP, MP4, glTF/GLB, JSON. En .pdf, der ikke er en PDF, afvises.

Roller

OperationPåkrævetModtager 403
Alle GETenhver rolle
POST /upload, PUT /:idskriverolleviewer
DELETE /:idsletterolleviewer, contributor

Særreglen er contributor: Rollen må oprette og redigere, men ikke fjerne noget.

Upload fil

POST /v1/files/upload

Forventer multipart/form-data.

FeltPåkrævetBeskrivelse
fileJaFilen
code_idNejKnyt til en kode (skal tilhøre dit workspace)
visibilityNejprivate (standard) eller 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"

Response (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 er kun sat ved visibility: "public" og status: "active". Adressen kræver ingen login og er direkte velegnet som destinations-URL for en QR-kode.

Vis filer

GET /v1/files

Query: code_id og visibility, begge valgfrie. Returnerer de aktive filer i dit workspace, med de nyeste først.

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

Response (HTTP 200):

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

Hent filoplysninger

GET /v1/files/:id

Returnerer metadata inklusive download_url (og public_url for offentlige filer). Kan læses af alle roller.

Download fil

GET /v1/files/:id/download

Streamer indholdet som Content-Disposition: attachment med Cache-Control: private, no-store — svaret er altså altid den nyeste version, i modsætning til den cachede offentlige /f/:id-URL.

404 kan opstå på to måder: Filen eksisterer ikke i dit workspace (oder er slettet), eller den eksisterer, men det gemte objekt mangler.

Erstat fil

PUT /v1/files/:id

Udskifter indholdet og beholder id’et — og dermed den offentlige /f/:id- og download_url-adresse. En allerede printet QR-kode forbliver gyldig.

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

visibility, code_id og created_at bevares; filename, mime_type, size_bytes og hash_sha256 opdateres. Abonnementsgrænsen pr. fil gælder ligesom ved upload, og workspacets lagergrænse kontrolleres mod forskellen. Grænsen “filer pr. kode” gælder ikke, da der ikke tilføjes en ny fil.

Slet fil

DELETE /v1/files/:id

Soft-delete: Filen forsvinder med det samme fra listen, kan ikke længere hentes og leveres — hvis den er offentlig — ikke længere under /f/:id.

Response (HTTP 200):

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

Grænser

AbonnementMaks. pr. fil
Free5 MB
Pro25 MB
Business100 MB
Agency100 MB
Enterprise250 MB

Derudover gælder der for hvert abonnement et maksimalt antal filer pr. kode og en samlet lagerplads pr. workspace. Upload-hastighedsgrænsen (rate limit) er 100 uploads pr. time pr. workspace.

Fejl

StatusHvornår
400Ukendt eller ikke-matchende filsignatur, ugyldig multipart-body
401Manglende eller ugyldig API-nøgle
403Rollen må ikke skrive eller slette
404code_id eller filen findes ikke i workspacet; ved download også: objektet mangler på lageret
413Filen er større end abonnementsgrænsen
422Filen mangler, ugyldig visibility, grænsen “filer pr. kode” er nået, workspacets lagergrænse er overskredet
429Upload-hastighedsgrænse (100/time/workspace) eller generel hastighedsgrænse

Relateret