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 pageEn 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 |
| 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 |
{- "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": [ ]
}
}