Aller au contenu

API Files

Aperçu

L’API Files héberge des fichiers sur qr3 et fournit une URL stable. Le code QR pointe vers cette URL — vous pouvez remplacer le fichier sous-jacent à tout moment, sans avoir à réimprimer le code.

URL de base : https://qr3.app/v1/files

Optionnellement, vous pouvez associer un fichier à un code via code_id. C’est la base de la page de destination par code qui liste tous les fichiers publics d’un code.

Les types pris en charge sont vérifiés par magic byte, et non par l’extension du fichier : PDF, PNG, JPEG, WebP, MP4, glTF/GLB, JSON. Un fichier .pdf qui n’est pas un PDF sera rejeté.

Rôles

OpérationRequisReçoit 403
Tous les GETn’importe quel rôle
POST /upload, PUT /:idrôle d’écritureviewer
DELETE /:idrôle de suppressionviewer, contributor

La règle spéciale concerne contributor : ce rôle peut créer et modifier, mais ne peut rien supprimer.

Téléverser un fichier

POST /v1/files/upload

Attend du multipart/form-data.

ChampRequisDescription
fileOuiLe fichier
code_idNonAssocier à un code (doit appartenir au Workspace)
visibilityNonprivate (par défaut) ou public
Fenêtre de terminal
curl -X POST https://qr3.app/v1/files/upload \
-H "Authorization: Bearer qr3_sk_..." \
-F "code_id=qr_a1b2c3d4" \
-F "visibility=public"

Réponse (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 est définie uniquement si visibility: "public" et status: "active". L’adresse ne nécessite aucune authentification et convient directement comme URL de destination d’un code QR.

Lister les fichiers

GET /v1/files

Requête : code_id et visibility, tous deux optionnels. Renvoie les fichiers actifs du Workspace, les plus récents en premier.

Fenêtre de terminal
curl "https://qr3.app/v1/files?code_id=qr_a1b2c3d4" \
-H "Authorization: Bearer qr3_sk_..."

Réponse (HTTP 200) :

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

Récupérer les informations d’un fichier

GET /v1/files/:id

Renvoie les métadonnées, y compris download_url (et public_url pour les fichiers publics). Lisible par tous les rôles.

Télécharger un fichier

GET /v1/files/:id/download

Diffuse le contenu en tant que Content-Disposition: attachment avec Cache-Control: private, no-store — la réponse correspond donc toujours à l’état le plus récent, contrairement à l’URL publique /f/:id mise en cache.

Une erreur 404 peut survenir de deux manières : le fichier n’existe pas dans le Workspace (ou a été supprimé), ou il existe mais l’objet stocké est manquant.

Remplacer un fichier

PUT /v1/files/:id

Remplace le contenu et conserve l’ id — et donc l’adresse publique /f/:id ainsi que la download_url. Un code QR déjà imprimé reste valide.

Fenêtre de terminal
curl -X PUT https://qr3.app/v1/files/file_a1b2c3d4 \
-H "Authorization: Bearer qr3_sk_..." \

visibility, code_id et created_at sont conservés ; filename, mime_type, size_bytes et hash_sha256 sont mis à jour. La limite du forfait par fichier s’applique comme pour le téléversement, et la limite de stockage du Workspace est vérifiée par rapport à la différence. La limite du « nombre de fichiers par code » ne s’applique pas, car aucun nouveau fichier n’est ajouté.

Supprimer un fichier

DELETE /v1/files/:id

Suppression logique (soft-delete) : le fichier disparaît immédiatement de la liste, n’est plus accessible et — s’il est public — n’est plus servi à l’adresse /f/:id.

Réponse (HTTP 200) :

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

Limites

ForfaitMax. par fichier
Free5 MB
Pro25 MB
Business100 MB
Agency100 MB
Enterprise250 MB

De plus, un nombre maximal de fichiers par code et un espace de stockage total par Workspace s’appliquent selon le forfait. La limite de taux de téléversement est de 100 téléversements par heure et par Workspace.

Erreurs

StatutQuand
400Signature de fichier inconnue ou non correspondante, corps multipart invalide
401Clé API manquante ou invalide
403Le rôle n’est pas autorisé à écrire ou à supprimer
404code_id ou fichier absent du Workspace ; lors du téléchargement également : objet manquant dans le stockage
413Fichier plus grand que la limite du forfait
422Fichier manquant, visibility invalide, limite du « nombre de fichiers par code » atteinte, limite de stockage du Workspace dépassée
429Limite de taux de téléversement (100/heure/Workspace) ou limite de taux générale

Voir aussi