API publique

Une clé API te permet d'uploader, lister, télécharger et supprimer des fichiers d'un drive directement depuis le serveur d'un autre site — sans passer par cette interface.

Créer une clé

Dans Réglages → API pour développeurs, choisis le drive concerné et génère une clé. Elle n'est affichée qu'une seule fois: copie-la immédiatement dans la configuration de ton site (variable d'environnement, jamais dans du code commité).

Pas de chiffrement de bout en bout
Les fichiers envoyés via l'API sont stockés en clair(contrairement à l'app web, chiffrée côté client) : un appel serveur-à-serveur n'a pas accès à ta clé de chiffrement personnelle. N'utilise pas l'API pour des fichiers sensibles.

Authentification

Toutes les routes sont sous /api/v1 et attendent un en-tête Authorization :

Authorization: Bearer dvc_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Chaque clé est liée à un seul drive et porte une ou deux permissions : read (lecture) et write (upload + suppression). Les routes gèrent le CORS — tu peux les appeler directement depuis le navigateur d'un site tiers si tu préfères, mais garder la clé côté serveur reste plus sûr.

Vérifier la clé

curl https://ton-domaine.tld/api/v1/me \
  -H "Authorization: Bearer dvc_xxx"

# → { "drive": "Mon site", "driveId": "...", "scopes": ["read", "write"] }

Uploader un fichier

POST /api/v1/filesmultipart/form-data avec un champ file, et optionnellement parentId (dossier cible) et filename.

curl -X POST https://ton-domaine.tld/api/v1/files \
  -H "Authorization: Bearer dvc_xxx" \
  -F "file=@/chemin/vers/fichier.pdf"

Réponse 201 avec les métadonnées du fichier créé (id, filename, size,mimeType…).

Limite de taille (upload simple)

Ce chemin transite par notre serveur en une seule requête : la taille est donc bornée par la limite de requête de l'hébergeur (45 Mio ici). Pour des fichiers plus gros, utilise l'upload par morceaux ci-dessous.

Upload par morceaux (taille illimitée)

Pour dépasser la limite de requête, découpe ton fichier en morceaux d'environ 9 Mio et envoie-les un par un à POST /api/v1/files/chunks (champ chunk, plus indexpour l'ordre), puis finalise avec un appel JSON à POST /api/v1/files contenant la liste des morceaux renvoyés. Aucune limite de taille sur ce dernier appel : il ne transporte que des références, jamais les octets du fichier.

# 1. un POST par morceau (~9 Mio chacun)
curl -X POST https://ton-domaine.tld/api/v1/files/chunks \
  -H "Authorization: Bearer dvc_xxx" \
  -F "index=0" -F "chunk=@part-000"
# → { "index": 0, "size": ..., "messageId": "...", "attachmentId": "...", "url": "...", "expiresAt": ... }

# … répète pour chaque morceau (index=1, 2, 3…) …

# 2. finalise avec la liste des morceaux (JSON, pas de fichier)
curl -X POST https://ton-domaine.tld/api/v1/files \
  -H "Authorization: Bearer dvc_xxx" \
  -H "Content-Type: application/json" \
  -d '{
        "filename": "video.mp4",
        "mimeType": "video/mp4",
        "chunks": [ { "index": 0, "size": 9500000, "messageId": "...", "attachmentId": "...", "url": "..." }, ... ]
      }'
Chaque morceau reste sous la limite de requête
Chaque appel à /api/v1/files/chunksne transporte qu'un seul morceau (max ~10 Mio), donc il ne rencontre jamais la limite de requête de l'hébergeur — seul le nombre d'appels change avec la taille du fichier.

Lister les fichiers

curl "https://ton-domaine.tld/api/v1/files?parentId=&limit=50" \
  -H "Authorization: Bearer dvc_xxx"

Récupérer un fichier

GET /api/v1/files/:id renvoie les métadonnées. GET /api/v1/files/:id/download renvoie directement les octets du fichier (déchiffrés si besoin), prêts à être servis ou relayés par ton site.

curl https://ton-domaine.tld/api/v1/files/abc123/download \
  -H "Authorization: Bearer dvc_xxx" \
  -o fichier.pdf

POST /api/v1/files/:id/public crée un lien public, sans mot de passe, qui n'expire pas — utilisable directement dans un <img src>, une balise <a> ou un fetch(), sans en-tête Authorization. Un seul lien public actif par fichier : recréer un lien remplace le précédent (et remplace aussi un lien créé depuis l'interface Drivecord pour ce même fichier, le cas échéant). DELETE /api/v1/files/:id/public le révoque.

curl -X POST https://ton-domaine.tld/api/v1/files/abc123/public \
  -H "Authorization: Bearer dvc_xxx"

# → { "token": "...", "url": "https://ton-domaine.tld/api/v1/public/..." }

Colle directement l'url renvoyée dans ton site :

<img src="https://ton-domaine.tld/api/v1/public/xxxxxxxxxx" alt="…" />
Public veut dire public
N'importe qui possédant l'URL peut voir ce fichier, sans limite de temps tant que le lien n'est pas révoqué. Ne l'utilise pas pour du contenu sensible.

Supprimer un fichier

curl -X DELETE https://ton-domaine.tld/api/v1/files/abc123 \
  -H "Authorization: Bearer dvc_xxx"

Limites de débit

Chaque clé est limitée à 60 requêtes/minute sur les routes générales, et 300/minute sur /api/v1/files/chunks (une grosse vidéo peut demander beaucoup de petits appels). Les liens publics (/api/v1/public/:token, pas d'authentification) sont limités à 300 requêtes/minute par IP. Au-delà, l'API répond 429 avec un en-tête Retry-After.

Et ensuite