Download OpenAPI specification:
API REST pour la gestion des comptes SFTP et des fichiers MediaGrade.
Tous les endpoints (sauf /health) nécessitent une authentification via clé API. Deux méthodes sont supportées :
X-API-Key : X-API-Key: your-api-secret-keyAuthorization : Authorization: Bearer your-api-secret-keyLes limites de taux suivantes s'appliquent par clé API :
En cas de dépassement, une réponse 429 Too Many Requests est retournée avec les headers suivants :
X-RateLimit-Limit : Limite totaleX-RateLimit-Remaining : Requêtes restantesX-RateLimit-Reset : Timestamp de réinitialisationLes endpoints retournant des listes supportent la pagination via les paramètres de requête :
limit : Nombre d'éléments par page (défaut: 50, max: 1000)offset : Nombre d'éléments à ignorer (défaut: 0)La réponse inclut un objet pagination avec :
total : Nombre total d'élémentslimit : Limite utiliséeoffset : Offset utiliséreturned : Nombre d'éléments retournés dans cette pageLes paramètres de requête contenant des caractères spéciaux (accents, apostrophes, espaces) doivent être encodés en URL :
path=files/Capture d'écran.png → path=files%2FCapture%20d%27%C3%A9cran.pngImportant : macOS utilise NFD (Normalization Form Decomposed) par défaut, mais l'API normalise systématiquement en NFC pour garantir la cohérence avec Linux et Windows.
En cas d'erreur temporaire (codes 5xx, 429), il est recommandé d'implémenter une stratégie de retry avec backoff exponentiel :
Ne pas retry sur les codes 4xx (sauf 429) car ce sont des erreurs client.
async function retryRequest(fn, maxRetries = 3) {
for (let i = 0; i < maxRetries; i++) {
try {
return await fn();
} catch (error) {
if (i === maxRetries - 1) throw error;
if ([429, 500, 502, 503, 504].includes(error.status)) {
await new Promise(resolve => setTimeout(resolve, Math.pow(2, i) * 1000));
continue;
}
throw error;
}
}
}
Retourne la liste de tous les comptes SFTP.
Peut être filtrée par une liste d'account IDs via le paramètre account_ids.
| account_ids | string Example: account_ids=123e4567-e89b-12d3-a456-426614174000,987fcdeb-51a2-4d6c-b543-678901234567 Liste d'account IDs séparés par des virgules pour filtrer les résultats |
{- "success": true,
- "data": [
- {
- "id": "550e8400-e29b-41d4-a716-446655440000",
- "accountId": "123e4567-e89b-12d3-a456-426614174000",
- "username": "mediagrade-testcompany-a1b2c3d4",
- "companyName": "Test Company",
- "isEnabled": true,
- "quotaBytes": 10737418240,
- "usedBytes": 1048576,
- "accountStatus": "active",
- "createdAt": "2025-09-24T10:00:00Z",
- "updatedAt": "2025-09-24T15:30:00Z"
}
]
}Crée un nouveau compte SFTP pour un compte MediaGrade. Génère automatiquement un username et un mot de passe sécurisé.
| accountId required | string^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89... UUID du compte MediaGrade |
| companyName required | string [ 1 .. 100 ] characters Nom de l'entreprise |
| machineName required | string [ 1 .. 10 ] characters Nom de la machine SFTP (ex: "fr", "us") |
{- "accountId": "123e4567-e89b-12d3-a456-426614174000",
- "companyName": "Ma Société",
- "machineName": "fr"
}{- "success": true,
- "data": {
- "id": "550e8400-e29b-41d4-a716-446655440000",
- "accountId": "123e4567-e89b-12d3-a456-426614174000",
- "username": "mediagrade-masociete-a1b2c3d4",
- "password": "Xk9m$pR7#vB2nQ8z",
- "isEnabled": true,
- "host": "ftp-fr.grand-shooting.com",
- "port": 2222
}
}Retourne les informations détaillées d'un compte SFTP spécifique
| accountId required | string^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89... Example: 123e4567-e89b-12d3-a456-426614174000 UUID du compte MediaGrade |
{- "success": true,
- "data": {
- "id": "550e8400-e29b-41d4-a716-446655440000",
- "accountId": "123e4567-e89b-12d3-a456-426614174000",
- "username": "mediagrade-masociete-a1b2c3d4",
- "isEnabled": true,
- "host": "ftp-fr.grand-shooting.com",
- "port": 2222,
- "storage": {
- "quotaBytes": 10737418240,
- "usedBytes": 1048576,
- "availableBytes": 10736369664,
- "usagePercentage": 0.01
}, - "createdAt": "2025-09-24T10:00:00Z",
- "updatedAt": "2025-09-24T15:30:00Z"
}
}Supprime définitivement un compte SFTP et tous ses fichiers. ⚠️ Attention : Cette opération est irréversible.
| accountId required | string^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89... Example: 123e4567-e89b-12d3-a456-426614174000 UUID du compte MediaGrade |
{- "success": true,
- "message": "SFTP account deleted successfully"
}Change le mot de passe SFTP d'un compte. Si aucun mot de passe n'est fourni, un mot de passe sécurisé est généré automatiquement.
| accountId required | string^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89... Example: 123e4567-e89b-12d3-a456-426614174000 UUID du compte MediaGrade |
| password | string >= 8 characters Nouveau mot de passe (optionnel, généré automatiquement si absent) |
{- "password": "NouveauMotDePasse123!"
}{- "success": true,
- "data": {
- "password": "Nouveau-Mot-De-Passe-Généré"
}
}Modifie la limite de stockage d'un compte.
Le nouveau quota doit être supérieur ou égal à l'usage actuel (sauf si force: true).
| accountId required | string^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89... Example: 123e4567-e89b-12d3-a456-426614174000 UUID du compte MediaGrade |
| quotaBytes required | integer [ 1073741824 .. 1099511627776 ] Nouvelle limite en bytes |
| force | boolean Default: false Ignorer la validation d'usage (defaut: false) |
{- "quotaBytes": 21474836480,
- "force": false
}{- "success": true,
- "data": {
- "accountId": "123e4567-e89b-12d3-a456-426614174000",
- "quotaBytes": 21474836480,
- "updatedAt": "2025-09-24T16:45:00Z"
}
}Active ou désactive l'accès SFTP d'un compte
| accountId required | string^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89... Example: 123e4567-e89b-12d3-a456-426614174000 UUID du compte MediaGrade |
| enabled required | boolean État souhaité (true = activé, false = désactivé) |
{- "enabled": false
}{- "success": true,
- "data": {
- "accountId": "123e4567-e89b-12d3-a456-426614174000",
- "isEnabled": false,
- "updatedAt": "2025-09-24T16:50:00Z"
}
}Retourne la liste des fichiers et répertoires d'un compte avec pagination. Supporte le tri par nom, taille, date de création/modification.
| accountId required | string^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89... Example: 123e4567-e89b-12d3-a456-426614174000 UUID du compte MediaGrade |
| path | string Example: path=/documents Chemin du répertoire à lister.
Doit être encodé en URL si contenant des caractères spéciaux.
Exemple encodé : |
| limit | integer [ 1 .. 1000 ] Example: limit=50 Nombre maximum de fichiers à retourner |
| offset | integer >= 0 Décalage pour la pagination |
| sortBy | string Example: sortBy=-createdAt Champ de tri (préfixer par |
{- "success": true,
- "data": {
- "path": "/",
- "files": [
- {
- "id": "uuid-123",
- "name": "document.pdf",
- "path": "/document.pdf",
- "size": 1048576,
- "isDirectory": false,
- "mimeType": "application/pdf",
- "antivirusStatus": "clean",
- "createdAt": "2025-09-25T10:00:00Z",
- "updatedAt": "2025-09-25T10:00:00Z"
}
], - "storage": {
- "quotaBytes": 10737418240,
- "usedBytes": 1048576,
- "availableBytes": 10736369664,
- "usagePercentage": 0.01
}, - "pagination": {
- "total": 150,
- "offset": 0,
- "limit": 50,
- "returned": 50,
- "sortBy": "name",
- "sortOrder": "asc"
}
}
}Téléverse un ou plusieurs fichiers vers le compte SFTP.
Supporte le renommage via le paramètre filenames.
| accountId required | string^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89... Example: 123e4567-e89b-12d3-a456-426614174000 UUID du compte MediaGrade |
| files required | Array of strings <binary> [ items <binary > ] Fichiers à uploader (max 20 fichiers) |
| destination | string Default: "/" Chemin de destination (defaut: "/") |
| filenames | string Noms personnalisés des fichiers (JSON array). Exemple: ["fichier1.pdf", "fichier2.jpg"] |
{- "success": true,
- "data": {
- "uploadedFiles": [
- {
- "fileName": "image.jpg",
- "path": "/documents/image.jpg",
- "size": 2097152,
- "uploaded": true
}
], - "destination": "/documents"
}
}Télécharge un fichier individuel. Supporte les requêtes HTTP Range pour le téléchargement partiel.
| accountId required | string^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89... Example: 123e4567-e89b-12d3-a456-426614174000 UUID du compte MediaGrade |
| path required | string Example: path=/documents/file.pdf Chemin du fichier à télécharger.
Doit être encodé en URL si contenant des caractères spéciaux.
Exemple encodé : |
{- "error": "Bad Request",
- "message": "Invalid request parameters"
}Télécharge plusieurs fichiers/dossiers dans une archive ZIP
| accountId required | string^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89... Example: 123e4567-e89b-12d3-a456-426614174000 UUID du compte MediaGrade |
| paths required | Array of strings Liste des chemins de fichiers/dossiers à télécharger |
| archiveName | string Default: "download.zip" Nom de l'archive ZIP (defaut: "download.zip") |
{- "paths": [
- "/documents",
- "/images/photo.jpg"
], - "archiveName": "export.zip"
}{- "error": "Bad Request",
- "message": "Invalid request parameters"
}Crée un nouveau répertoire
| accountId required | string^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89... Example: 123e4567-e89b-12d3-a456-426614174000 UUID du compte MediaGrade |
| path required | string Chemin du répertoire à créer |
{- "path": "/nouveau-dossier"
}{- "success": true,
- "data": {
- "path": "/nouveau-dossier",
- "created": true
}
}Supprime plusieurs fichiers et/ou dossiers
| accountId required | string^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89... Example: 123e4567-e89b-12d3-a456-426614174000 UUID du compte MediaGrade |
| paths required | Array of strings Liste des chemins à supprimer |
{- "paths": [
- "/dossier-temp",
- "/fichier-test.txt"
]
}{- "success": true,
- "data": {
- "results": [
- {
- "path": "/dossier-temp",
- "deleted": true,
- "isDirectory": true
}, - {
- "path": "/fichier-test.txt",
- "deleted": true,
- "isDirectory": false
}
], - "totalItems": 2,
- "deletedItems": 2
}
}Renomme ou déplace un fichier/dossier
| accountId required | string^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89... Example: 123e4567-e89b-12d3-a456-426614174000 UUID du compte MediaGrade |
| oldPath required | string Chemin actuel |
| newPath required | string Nouveau chemin |
{- "oldPath": "/ancien-nom.txt",
- "newPath": "/nouveau-nom.txt"
}{- "success": true,
- "data": {
- "oldPath": "/ancien-nom.txt",
- "newPath": "/nouveau-nom.txt",
- "isDirectory": false,
- "renamed": true
}
}Déplace plusieurs fichiers/dossiers vers un répertoire
| accountId required | string^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89... Example: 123e4567-e89b-12d3-a456-426614174000 UUID du compte MediaGrade |
| paths required | Array of strings Liste des chemins à déplacer |
| destination required | string Répertoire de destination |
{- "paths": [
- "/fichier1.txt",
- "/dossier1"
], - "destination": "/destination"
}{- "success": true,
- "data": {
- "results": [
- {
- "oldPath": "/fichier1.txt",
- "newPath": "/destination/fichier1.txt",
- "isDirectory": false,
- "moved": true
}
], - "destination": "/destination",
- "totalItems": 1,
- "movedItems": 1
}
}Copie plusieurs fichiers/dossiers vers un répertoire
| accountId required | string^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89... Example: 123e4567-e89b-12d3-a456-426614174000 UUID du compte MediaGrade |
| paths required | Array of strings Liste des chemins à copier |
| destination required | string Répertoire de destination |
{- "paths": [
- "/fichier1.txt",
- "/dossier1"
], - "destination": "/destination"
}{- "success": true,
- "data": {
- "results": [
- {
- "oldPath": "/fichier1.txt",
- "newPath": "/destination/fichier1.txt",
- "isDirectory": false,
- "copied": true
}
], - "destination": "/destination",
- "totalItems": 1,
- "copiedItems": 1
}
}Recherche des fichiers par nom dans un compte
| accountId required | string^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89... Example: 123e4567-e89b-12d3-a456-426614174000 UUID du compte MediaGrade |
| q required | string Example: q=document Terme de recherche |
| path | string Example: path=/documents Répertoire de recherche |
| type | string Example: type=file Type de fichier (file, directory, ou type MIME) |
| limit | integer [ 1 .. 1000 ] Example: limit=50 Nombre maximum de résultats |
{- "success": true,
- "data": {
- "query": "document",
- "searchPath": "/",
- "fileType": null,
- "results": [
- {
- "id": "uuid-123",
- "name": "document-recherché.pdf",
- "path": "/folder/document-recherché.pdf",
- "size": 1048576,
- "isDirectory": false,
- "mimeType": "application/pdf",
- "createdAt": "2025-09-25T10:00:00Z",
- "updatedAt": "2025-09-25T10:00:00Z"
}
], - "totalResults": 1
}
}Retourne les informations détaillées de quota pour un compte
| accountId required | string^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89... Example: 123e4567-e89b-12d3-a456-426614174000 UUID du compte MediaGrade |
{- "success": true,
- "data": {
- "accountId": "123e4567-e89b-12d3-a456-426614174000",
- "quotaBytes": 10737418240,
- "usedBytes": 5368709120,
- "availableBytes": 5368709120,
- "usagePercentage": 50
}
}Retourne l'historique des violations de quota détectées
{- "success": true,
- "data": {
- "violations": [
- {
- "timestamp": "2024-01-20T10:30:00",
- "type": "QUOTA_EXCEEDED",
- "username": "mediagrade-company-abc123",
- "filepath": "/app/data/storage/mediagrade-company-abc123/largefile.zip",
- "fileSize": 1073741824,
- "currentUsage": 11811160064,
- "quotaLimit": 10737418240
}
], - "totalCount": 1
}
}Vérifie le statut du service de monitoring des quotas
{- "success": true,
- "data": {
- "status": "running",
- "pid": 1234,
- "logFile": "/app/logs/quota-monitor.log",
- "recentLogs": [
- "2024-01-20 10:30:00 [QUOTA-MONITOR] 🚀 Starting quota monitor"
]
}
}Consulte l'état du service de synchronisation automatique des fichiers
{- "success": true,
- "data": {
- "fileWatcher": {
- "initialized": true,
- "activeWatchers": 3,
- "storageRootPath": "/app/data/storage",
- "accounts": [
- "account-123",
- "account-456"
]
}, - "timestamp": "2025-09-25T21:45:00Z"
}
}Redémarre le service de surveillance des fichiers SFTP
{- "success": true,
- "message": "File watcher service restarted successfully",
- "data": {
- "status": {
- "initialized": true,
- "activeWatchers": 3
}, - "timestamp": "2025-09-25T21:50:00Z"
}
}Retourne les statistiques globales du serveur SFTP
{- "success": true,
- "data": {
- "summary": {
- "totalAccounts": 42,
- "totalStorageGB": 5,
- "totalActiveShares": 120,
- "enabledSftpAccounts": 38
}, - "accounts": [ ]
}
}