File Manager API

Version 1.1

API de gestion de fichiers par projet. Authentification par clé API (header X-API-Key). Les projets marqués "privés" stockent les fichiers hors du web, chiffrés au repos, et ne sont jamais exposés via une URL publique.

Important

Authentification
Toutes les routes /api/* (hors URL signée) exigent le header X-API-Key correspondant au projet.
Taille maximale
Jusqu'à 50 Mo par fichier.
Projets privés (RGPD)
Pour un projet privé, le fichier est chiffré au repos et n'a pas de full_url publique : la réponse renvoie full_url = null et un download_url authentifié. La lecture se fait via GET /api/files/download (clé API) ou une URL signée temporaire via GET /api/files/temporary-url.
Projets publics
Pour un projet public, le comportement historique est conservé : full_url pointe vers un fichier accessible publiquement.
POST

/api/upload

Upload d'un seul fichier.

Parameters

{input_name}
Requis. Fichier à uploader (max 50 Mo). Le nom du champ sert de sous-dossier.
path
Optionnel. Sous-répertoire de destination.

Headers

X-API-Key
Requis. Clé API du projet.

Example

Request:

curl -X POST https://uploads.holi-stat.com/api/upload \
    -H "X-API-Key: your-project-api-key" \
    -F "avatar=@image.jpg" \
    -F "path=users"

Response:

{
    "message": "File uploaded successfully",
    "file": {
        "original_name": "image.jpg",
        "name": "d4b16ea9-41ae-4c49-80a9-b5b63d11b60f.jpg",
        "path": "project-name/users/avatar/d4b16ea9-41ae-4c49-80a9-b5b63d11b60f.jpg",
        "full_url": "https://uploads.holi-stat.com/storage/project-name/users/avatar/d4b16ea9-41ae-4c49-80a9-b5b63d11b60f.jpg"
    }
}
POST

/api/upload (projet privé)

Même endpoint pour un projet privé : le fichier est chiffré au repos, full_url est null et un download_url authentifié est renvoyé.

Headers

X-API-Key
Requis. Clé API du projet privé.

Example

Request:

curl -X POST https://uploads.holi-stat.com/api/upload \
    -H "X-API-Key: your-private-project-api-key" \
    -F "data=@paiements.csv" \
    -F "path=runs/1"

Response:

{
    "message": "File uploaded successfully",
    "file": {
        "original_name": "paiements.csv",
        "name": "d4b16ea9-41ae-4c49-80a9-b5b63d11b60f.csv",
        "path": "project-name/runs/1/d4b16ea9-41ae-4c49-80a9-b5b63d11b60f.csv",
        "full_url": null,
        "download_url": "https://uploads.holi-stat.com/api/files/download?path=project-name%2Fruns%2F1%2Fd4b16ea9-41ae-4c49-80a9-b5b63d11b60f.csv"
    }
}
POST

/api/upload-multiple

Upload de plusieurs fichiers (max 20).

Parameters

{input_name}[]
Requis. Tableau de fichiers (max 50 Mo chacun). Le nom du champ sert de sous-dossier.
path
Optionnel. Sous-répertoire de destination.

Headers

X-API-Key
Requis. Clé API du projet.

Example

Request:

curl -X POST https://uploads.holi-stat.com/api/upload-multiple \
    -H "X-API-Key: your-project-api-key" \
    -F "documents[]=@doc1.pdf" \
    -F "documents[]=@doc2.pdf" \
    -F "path=contracts"

Response:

{
    "message": "Files uploaded successfully",
    "files": [
        {
            "original_name": "doc1.pdf",
            "name": "d4b16ea9-41ae-4c49-80a9-b5b63d11b60f.pdf",
            "path": "project-name/contracts/documents/d4b16ea9-41ae-4c49-80a9-b5b63d11b60f.pdf",
            "full_url": "https://uploads.holi-stat.com/storage/project-name/contracts/documents/d4b16ea9-41ae-4c49-80a9-b5b63d11b60f.pdf"
        }
    ]
}
POST

/api/upload-multiple-compressed

Upload de plusieurs fichiers avec compression des images (projets publics uniquement ; les projets privés stockent les fichiers tels quels, chiffrés).

Parameters

{input_name}[]
Requis. Tableau de fichiers (max 50 Mo chacun).
path
Optionnel. Sous-répertoire de destination.
quality
Optionnel. Qualité de compression image (1-100, défaut 80).
max_width
Optionnel. Largeur max en pixels (min 100, défaut 2000).
max_height
Optionnel. Hauteur max en pixels (min 100, défaut 2000).

Headers

X-API-Key
Requis. Clé API du projet.

Example

Request:

curl -X POST https://uploads.holi-stat.com/api/upload-multiple-compressed \
    -H "X-API-Key: your-project-api-key" \
    -F "photos[]=@photo1.jpg" \
    -F "path=gallery" \
    -F "quality=75"

Response:

{
    "message": "Files processed successfully",
    "compressed_files": [
        {
            "original_name": "photo1.jpg",
            "name": "d4b16ea9-41ae-4c49-80a9-b5b63d11b60f.jpg",
            "path": "project-name/gallery/photos/d4b16ea9-41ae-4c49-80a9-b5b63d11b60f.jpg",
            "full_url": "https://uploads.holi-stat.com/storage/project-name/gallery/photos/d4b16ea9-41ae-4c49-80a9-b5b63d11b60f.jpg",
            "compressed": true,
            "dimensions": {
                "width": 1600,
                "height": 1200
            }
        }
    ],
    "skipped_files": []
}
GET

/api/files

Liste les fichiers du projet. Pour un projet privé, full_url est null et download_url est fourni.

Headers

X-API-Key
Requis. Clé API du projet.

Example

Request:

curl -X GET https://uploads.holi-stat.com/api/files \
    -H "X-API-Key: your-project-api-key"

Response:

{
    "files": [
        {
            "id": 1,
            "original_name": "paiements.csv",
            "name": "d4b16ea9-41ae-4c49-80a9-b5b63d11b60f.csv",
            "path": "project-name/runs/1/d4b16ea9-41ae-4c49-80a9-b5b63d11b60f.csv",
            "mime_type": "text/csv",
            "size": 312,
            "uploaded_at": "2026-07-15T14:43:00.000000Z",
            "full_url": null,
            "download_url": "https://uploads.holi-stat.com/api/files/download?path=project-name%2Fruns%2F1%2Fd4b16ea9-41ae-4c49-80a9-b5b63d11b60f.csv"
        }
    ]
}
GET

/api/files/download

Téléchargement authentifié, owner-scoped. Requis pour les projets privés (déchiffrement à la volée). Renvoie le fichier binaire.

Parameters

path
Requis. Chemin relatif du fichier (tel que renvoyé à l'upload).

Headers

X-API-Key
Requis. Clé API du projet.

Examples

Télécharger un fichier et conserver son nom d'origine

curl -X GET "https://uploads.holi-stat.com/api/files/download?path=project-name/runs/1/file.csv" \
    -H "X-API-Key: your-project-api-key" -OJ
GET

/api/files/temporary-url

Génère une URL signée (HMAC) à durée de vie limitée pour consultation navigateur, sans exposer la clé API.

Parameters

path
Requis. Chemin relatif du fichier.
expires
Optionnel. Durée de validité en minutes (défaut 5, max 1440).

Headers

X-API-Key
Requis. Clé API du projet.

Example

Request:

curl -X GET "https://uploads.holi-stat.com/api/files/temporary-url?path=project-name/runs/1/file.csv&expires=5" \
    -H "X-API-Key: your-project-api-key"

Response:

{
    "url": "https://uploads.holi-stat.com/api/files/signed/1?expires=1784126931&signature=e44691c266931a78380443fd4e092606df228731d7d0c06d0a7099c00a7f0d7a",
    "expires_in": 300
}
DELETE

/api/files

Supprime un fichier via son chemin relatif ou son URL complète.

Parameters

path
Requis. Chemin relatif ou URL complète du fichier.

Headers

X-API-Key
Requis. Clé API du projet.

Examples

Suppression via chemin relatif

curl -X DELETE https://uploads.holi-stat.com/api/files \
    -H "X-API-Key: your-project-api-key" \
    -H "Content-Type: application/json" \
    -d '{"path": "project-name/runs/1/file.csv"}'