description:"Référence complète de l'API REST. Points de terminaison des outils, traitement par lots, pipelines, bibliothèque de fichiers, authentification, équipes et opérations d'administration."
La documentation interactive de l'API, avec des exemples de requête et de réponse, est disponible sur [http://localhost:1349/api/docs](http://localhost:1349/api/docs).
Les clés sont préfixées par `si_` et stockées sous forme de hachages scrypt : la clé brute est affichée une seule fois et ne peut plus jamais être récupérée.
### Points de terminaison d'authentification {#auth-endpoints}
| Méthode | Chemin | Accès | Description |
|--------|------|--------|-------------|
| `POST` | `/api/auth/login` | Public | Connexion, obtention d'un jeton de session |
| `GET` | `/api/auth/saml/metadata` | Public | XML de métadonnées SP SAML lorsque SAML est activé |
| `GET` | `/api/auth/saml/login` | Public | Démarrer la connexion SAML |
| `POST` | `/api/auth/saml/callback` | Public | Service consommateur d'assertions SAML |
Lorsque l'authentification multifacteur est activée pour un utilisateur, `POST /api/auth/login` renvoie `{"requiresMfa":true,"mfaToken":"...","mfaRequired":true|false}` au lieu d'un jeton de session. Envoyez ce `mfaToken` accompagné d'un code TOTP ou d'un code de récupération à `/api/auth/mfa/complete`.
### Autorisations {#permissions}
| Autorisation | Admin | Utilisateur |
|-----------|:-----:|:----:|
| Utiliser les outils | ✓ | ✓ |
| Ses propres fichiers/pipelines/clés d'API | ✓ | ✓ |
| Voir les fichiers/pipelines/clés de tous les utilisateurs | ✓ | - |
| Écrire les paramètres | ✓ | - |
| Gérer les utilisateurs et les équipes | ✓ | - |
| Gérer l'image de marque | ✓ | - |
## Vérification de l'état {#health-check}
| Méthode | Chemin | Accès | Description |
|--------|------|--------|-------------|
| `GET` | `/api/v1/health` | Public | Vérification de base de l'état. Renvoie `{"status":"healthy","version":"..."}` avec 200, ou `{"status":"unhealthy"}` avec 503 si la base de données est inaccessible. |
| `GET` | `/api/v1/readyz` | Public | Sonde de disponibilité. Vérifie PostgreSQL, Redis, l'espace disque et S3 lorsqu'il est configuré. Renvoie 503 lorsque l'instance ne doit pas recevoir de trafic. |
| `GET` | `/api/v1/admin/health` | Admin (`system:health`) | Diagnostics détaillés incluant la durée de fonctionnement, le mode de stockage, l'état de la base de données, l'état de la file d'attente et la disponibilité du GPU. |
## Utilisation des outils {#using-tools}
Chaque outil suit le même schéma :
```bash
# Single file
curl -X POST http://localhost:1349/api/v1/tools/<section>/<toolId> \
-H "Authorization: Bearer <token>"\
-F "file=@input.jpg"\
-F 'settings={"width":800,"height":600}'
# Batch (returns ZIP)
curl -X POST http://localhost:1349/api/v1/tools/<section>/<toolId>/batch \
-H "Authorization: Bearer <token>"\
-F "files=@a.jpg"\
-F "files=@b.jpg"\
-F 'settings={...}'
```
`<section>` est l'un de `image`, `video`, `audio`, `pdf`, ou `files`.
- Le téléversement est `multipart/form-data`.
-`settings` est une chaîne JSON contenant des options spécifiques à l'outil.
-`clientJobId` est un champ de formulaire optionnel pour la corrélation de progression fournie par l'appelant.
-`fileId` est un champ de formulaire optionnel référençant un élément existant de la bibliothèque de fichiers. Lorsqu'il est présent, la sortie traitée est enregistrée comme nouvelle version et la réponse inclut `savedFileId`.
- **Les outils rapides** renvoient généralement du JSON en 200 : `{"jobId":"...","downloadUrl":"/api/v1/download/<jobId>/<filename>","originalSize":1234,"processedSize":567}`. Récupérez le fichier traité depuis `downloadUrl`.
- **Tout outil mis en file d'attente** peut renvoyer du JSON en 202 s'il est de longue durée ou dépasse la fenêtre d'attente synchrone : `{"jobId":"...","async":true}`. Connectez-vous au SSE pour suivre la progression, puis téléchargez une fois terminé (voir [Suivi de la progression](#progress-tracking)).
- **Les routes par lots** renvoient une archive ZIP diffusée directement (avec l'en-tête `X-Job-Id`) pour les outils enregistrés dans le registre générique de traitement par lots.
## Référence des outils {#tools-reference}
### Préréglages de conversion {#conversion-presets}
Le catalogue partagé inclut 83 points de terminaison de préréglages de conversion dédiés, tels que `jpg-to-png`, `mov-to-mp4`, `m4a-to-mp3`, `pdf-to-jpg`, et `excel-to-csv`. Les préréglages sont des routes d'outils de première classe :
`POST /api/v1/tools/<section>/<presetId>`
Chaque préréglage verrouille le format de sortie et délègue à un outil de base tel que `convert`, `convert-video`, `extract-audio`, `convert-audio`, `image-to-pdf`, `pdf-to-image`, `svg-to-raster`, ou `convert-spreadsheet`. Consultez [Préréglages de conversion](/fr/tools/conversion-presets) pour le tableau complet des routes et les paramètres optionnels.
### Essentiels {#essentials}
| ID de l'outil | Nom | Paramètres principaux |
|---------|------|-------------|
| `resize` | Redimensionner | `width`, `height`, `fit` (cover/contain/fill/inside/outside), `percentage`, `withoutEnlargement`, plus 23 préréglages pour les réseaux sociaux |
Tous les outils d'IA s'exécutent sur votre matériel : CPU par défaut, ou NVIDIA CUDA lorsqu'un GPU NVIDIA compatible est disponible. L'accélération via iGPU Intel/AMD par VA-API, Quick Sync ou OpenCL n'est pas prise en charge aujourd'hui pour l'inférence d'IA. Aucune connexion Internet requise.
| ID de l'outil | Nom | Modèle d'IA | Paramètres principaux |
| `passport-photo` | Photo d'identité | Points de repère MediaPipe | Flux en deux phases. L'analyse utilise le multipart `file` ; la génération utilise du JSON avec `countryCode`, `bgColor`, `printLayout` (none/4x6/a4), points de repère, dimensions de l'image |
| `content-aware-resize` | Redimensionnement adaptatif au contenu | Découpe par coutures (caire) | `width`, `height`, `protectFaces`, `blurRadius`, `sobelThreshold`, `square` |
| `compose` | Composition d'images | `x`, `y`, `opacity`, `blend` - le deuxième fichier est superposé par-dessus |
| `meme-generator` | Générateur de mèmes | `templateId`, `textLayout` (top-bottom/top-only/bottom-only/center/side-by-side), `textBoxes` ([{id, text}]), `fontFamily` (anton/arial-black/comic-sans/montserrat/bebas-neue/permanent-marker/roboto), `fontSize`, `textColor`, `strokeColor`, `textAlign`, `allCaps`. Prend en charge le mode modèle (corps JSON avec `templateId`) ou le mode image personnalisée (multipart avec fichier). |
### Utilitaires {#utilities}
| ID de l'outil | Nom | Paramètres principaux |
|---------|------|-------------|
| `info` | Infos sur l'image | - (renvoie width, height, format, size, channels, hasAlpha, DPI, EXIF) |
| `compare` | Comparer des images | `mode` (side-by-side/overlay/diff), `diffThreshold` - le deuxième fichier est la cible de comparaison |
| `find-duplicates` | Trouver les doublons | `threshold` (distance de hachage perceptuel, par défaut 8) - multi-fichiers |
| `color-palette` | Palette de couleurs | `count` (nombre de couleurs dominantes), `format` (hex/rgb) |
| `qr-generate` | Générateur de code QR | `data`, `size`, `margin`, `colorDark`, `colorLight`, `errorCorrectionLevel`, `dotStyle`, `cornerStyle`, `logo` (fichier optionnel) |
| `crop-pdf` | Rogner un PDF | `margin` (0-2000 points) |
| `nup-pdf` | PDF N pages par feuille | `perSheet` (2/3/4/8/9/12/16) |
| `booklet-pdf` | PDF en livret | `perSheet` (2/4/6/8) |
| `watermark-pdf` | Filigrane sur PDF | `text`, `position`, `fontSize`, `opacity`, `rotation` |
| `pdf-page-numbers` | Numéros de page du PDF | `position` (bl/bc/br/tl/tc/tr), `fontSize` |
| `flatten-pdf` | Aplatir un PDF | - (intègre les formulaires et les annotations) |
| `redact-pdf` | Caviarder un PDF | `terms` (string[]), `caseSensitive` (bool) |
| `sign-pdf` | Signer un PDF | Route multipart personnalisée avec le PDF `file`, les fichiers de signature `sig0`, `sig1`, et le tableau JSON `placements` |
| `pdf-to-text` | PDF vers texte | - |
| `pdf-to-word` | PDF vers Word | - |
| `pdf-metadata` | Métadonnées du PDF | `title`, `author`, `subject`, `keywords` |
| `convert-document` | Convertir un document | `format` (docx/odt/rtf/txt) |
| `convert-presentation` | Convertir une présentation | `format` (pptx/odp) |
| `convert-spreadsheet` | Convertir une feuille de calcul | `format` (xlsx/ods/csv) |
| `excel-to-pdf` | Excel vers PDF | - |
| `word-to-pdf` | Word vers PDF | - |
| `powerpoint-to-pdf` | PowerPoint vers PDF | - |
| `html-to-pdf` | HTML vers PDF | - (ressources distantes désactivées) |
| `markdown-to-docx` | Markdown vers Word | - |
| `markdown-to-html` | Markdown vers HTML | - |
| `markdown-to-pdf` | Markdown vers PDF | - (ressources distantes désactivées) |
| `epub-convert` | Convertir un EPUB | `format` (pdf/docx/html/md) |
| `xml-to-csv` | XML vers CSV | - (trouve automatiquement les éléments répétés) |
| `excel-to-csv` | Excel vers CSV | préréglage de conversion dédié adossé à `convert-spreadsheet` |
| `create-zip` | Créer un ZIP | - (multi-fichiers, 2-50 fichiers) |
| `extract-zip` | Extraire un ZIP | - (protégé contre les bombes) |
### HTML vers image {#html-to-image}
Capturez une page web sous forme d'image. Contrairement aux autres outils, ce point de terminaison accepte `application/json` au lieu de données de formulaire multipart (aucun téléversement de fichier nécessaire).
**Point de terminaison :**`POST /api/v1/tools/image/html-to-image`
Certains outils exposent des points de terminaison supplémentaires au-delà du `POST /api/v1/tools/<section>/<toolId>` standard :
| Méthode | Chemin | Description |
|--------|------|-------------|
| `GET` | `/api/v1/tools/popular` | Renvoie les ID d'outils populaires, en se rabattant sur une liste par défaut sélectionnée lorsque les données d'utilisation sont rares |
| `POST` | `/api/v1/tools/image/remove-background/effects` | Applique des effets d'arrière-plan (couleur/dégradé/flou/ombre) sans réexécuter l'IA. Utilise le masque mis en cache lors de la suppression initiale. |
| `POST` | `/api/v1/tools/image/edit-metadata/inspect` | Lit les métadonnées EXIF/IPTC/XMP existantes d'une image |
| `POST` | `/api/v1/tools/image/strip-metadata/inspect` | Inspecte les champs de métadonnées avant leur suppression |
| `POST` | `/api/v1/tools/image/passport-photo/analyze` | Phase 1 : détection de visage par IA + suppression de l'arrière-plan. Renvoie les points de repère du visage et les données mises en cache. |
| `POST` | `/api/v1/tools/image/passport-photo/generate` | Phase 2 : rognage, redimensionnement et disposition en mosaïque à partir de l'analyse mise en cache. Aucune réexécution de l'IA. |
| `POST` | `/api/v1/tools/image/gif-tools/info` | Récupère les métadonnées du GIF (nombre d'images, dimensions, durée) |
| `POST` | `/api/v1/tools/pdf/pdf-to-image/info` | Récupère les métadonnées du PDF (nombre de pages, dimensions) |
| `POST` | `/api/v1/tools/pdf/pdf-to-image/preview` | Génère un aperçu d'une page PDF spécifique |
| `POST` | `/api/v1/tools/pdf/pdf-to-jpg/info` | Récupère les métadonnées du PDF pour le préréglage JPG dédié |
| `POST` | `/api/v1/tools/pdf/pdf-to-jpg/preview` | Génère un aperçu de page PDF au format préréglé JPG |
| `POST` | `/api/v1/tools/pdf/pdf-to-png/info` | Récupère les métadonnées du PDF pour le préréglage PNG dédié |
| `POST` | `/api/v1/tools/pdf/pdf-to-png/preview` | Génère un aperçu de page PDF au format préréglé PNG |
| `POST` | `/api/v1/tools/pdf/pdf-to-tiff/info` | Récupère les métadonnées du PDF pour le préréglage TIFF dédié |
| `POST` | `/api/v1/tools/pdf/pdf-to-tiff/preview` | Génère un aperçu de page PDF au format préréglé TIFF |
| `POST` | `/api/v1/tools/image/svg-to-raster/batch` | Convertit en lot plusieurs SVG vers du matriciel |
| `POST` | `/api/v1/tools/image/image-enhancement/analyze` | Analyse la qualité de l'image et renvoie des recommandations d'amélioration |
| `POST` | `/api/v1/tools/image/optimize-for-web/preview` | Aperçu léger pour l'ajustement en direct des paramètres. Renvoie une image optimisée avec des en-têtes de taille. |
Appliquez un outil générique compatible avec le traitement par lots à plusieurs fichiers à la fois. Renvoie une archive ZIP. Les routes personnalisées multi-fichiers ou multi-étapes, telles que la signature de PDF et les routes de préréglage PDF vers image, utilisent leur propre contrat de point de terminaison au lieu de la route générique `/batch`.
L'outil `ocr-pdf` prend en charge cette route générique `/batch`.
curl -X POST http://localhost:1349/api/v1/tools/image/compress/batch \
-H "Authorization: Bearer <token>"\
-F "files=@a.jpg"\
-F "files=@b.jpg"\
-F "files=@c.jpg"\
-F 'settings={"quality":80}'
```
La concurrence est contrôlée par `CONCURRENT_JOBS` (par défaut : détecté automatiquement à partir des cœurs CPU). `MAX_BATCH_SIZE` limite le nombre de fichiers par lot (par défaut : 100 ; définissez 0 pour illimité).
## Pipelines {#pipelines}
### Exécuter un pipeline {#execute-a-pipeline}
```bash
# Single file
curl -X POST http://localhost:1349/api/v1/pipeline/execute \
La sortie de chaque étape constitue l'entrée de l'étape suivante. Les pipelines autorisent 20 étapes par défaut, configurable via `MAX_PIPELINE_STEPS`. Définissez `MAX_PIPELINE_STEPS=0` pour supprimer la limite.
### Enregistrer et gérer les pipelines {#save-and-manage-pipelines}
| Méthode | Chemin | Description |
|--------|------|-------------|
| `POST` | `/api/v1/pipeline/save` | Enregistre un pipeline nommé (`name`, `description`, `steps[]`) |
| `GET` | `/api/v1/pipeline/list` | Liste les pipelines enregistrés (les administrateurs voient tout ; les utilisateurs voient les leurs) |
| `DELETE` | `/api/v1/pipeline/:id` | Supprime (propriétaire ou administrateur) |
| `GET` | `/api/v1/pipeline/tools` | Liste les ID d'outils valides pour les étapes de pipeline |
## Suivi de la progression {#progress-tracking}
Les tâches de longue durée, les outils mis en file d'attente, les tâches par lots et les pipelines émettent une progression en temps réel via Server-Sent Events. Le flux de progression est public et indexé par ID de tâche, de sorte que les clients n'ont pas besoin d'envoyer d'en-tête d'autorisation pour le lire.
```bash
# Connect to the SSE stream (jobId is in the JSON response body from the tool endpoint)
Vous pouvez demander l'annulation d'une tâche en file d'attente ou en cours d'exécution avec `POST /api/v1/jobs/:jobId/cancel`. La réponse est `{"canceled":true|false}`.
## Bibliothèque de fichiers {#file-library}
Stockage de fichiers persistant avec historique des versions.
| Méthode | Chemin | Description |
|--------|------|-------------|
| `POST` | `/api/v1/upload` | Téléverse des fichiers dans l'espace de travail (traitement temporaire) |
| `POST` | `/api/v1/files/upload` | Téléverse des fichiers dans la bibliothèque de fichiers persistante |
| `POST` | `/api/v1/files/save-result` | Enregistre le résultat du traitement d'un outil comme nouvelle version de fichier |
| `GET` | `/api/v1/files` | Liste les fichiers enregistrés (paginé, avec recherche) |
| `GET` | `/api/v1/files/:id` | Récupère les métadonnées du fichier + la chaîne de versions |
| `GET` | `/api/v1/files/:id/download` | Télécharge un fichier |
| `GET` | `/api/v1/files/:id/thumbnail` | Récupère une miniature JPEG de 300 px |
| `DELETE` | `/api/v1/files` | Supprime en masse des fichiers et leurs chaînes de versions (corps : `{ ids: [...] }`) |
| `POST` | `/api/v1/fetch-urls` | Récupère des URL distantes dans l'espace de travail pour les imports basés sur URL |
| `POST` | `/api/v1/preview` | Génère un aperçu WebP compatible avec le navigateur (pour les formats HEIC/HEIF/RAW) |
| `GET` | `/api/v1/files/:id/preview` | Diffuse un aperçu mis en cache ou généré, compatible avec le navigateur, pour un PDF, un document bureautique, une vidéo ou un fichier audio enregistré |
| `POST` | `/api/v1/preview/generate` | Génère à la demande un aperçu MP4 ou MP3 pour un fichier multimédia téléversé sans l'enregistrer au préalable |
| `GET` | `/api/v1/download/:jobId/:filename` | Télécharge un fichier traité depuis un espace de travail |
Pour enregistrer automatiquement le résultat d'un outil dans la bibliothèque, incluez `fileId` comme champ de formulaire multipart référençant un fichier existant de la bibliothèque. Le résultat traité sera enregistré comme nouvelle version.
## Gestion des clés d'API {#api-key-management}
| Méthode | Chemin | Accès | Description |
|--------|------|--------|-------------|
| `POST` | `/api/v1/api-keys` | Auth | Génère une nouvelle clé - affichée une seule fois |
| `GET` | `/api/v1/api-keys` | Auth | Liste les clés (name, id, lastUsedAt - pas la clé brute) |
| `DELETE` | `/api/v1/teams/:id` | Admin (`teams:manage`) | Supprime une équipe (impossible de supprimer l'équipe par défaut ou les équipes ayant des membres) |
## Paramètres {#settings}
Configuration clé-valeur d'exécution (lecture par tout utilisateur authentifié, écriture par l'administrateur uniquement).
| Méthode | Chemin | Description |
|--------|------|-------------|
| `GET` | `/api/v1/settings` | Récupère tous les paramètres |
| `PUT` | `/api/v1/settings` | Met à jour en masse les paramètres (corps JSON avec des paires clé-valeur) |
| `GET` | `/api/v1/settings/:key` | Récupère un paramètre spécifique par clé |
Les préférences par utilisateur sont distinctes des paramètres de l'instance. Tout utilisateur authentifié peut lire et mettre à jour sa propre carte de préférences.
| Méthode | Chemin | Description |
|--------|------|-------------|
| `GET` | `/api/v1/preferences` | Récupère les préférences de l'utilisateur actuel sous forme de `{ "preferences": { ... } }` |
| `PUT` | `/api/v1/preferences` | Insère ou met à jour une ou plusieurs clés de préférence pour l'utilisateur actuel |
## Rôles {#roles}
Gestion de rôles personnalisés avec des autorisations granulaires.
| Méthode | Chemin | Accès | Description |
|--------|------|--------|-------------|
| `GET` | `/api/v1/roles` | Admin (`audit:read`) | Liste tous les rôles avec le nombre d'utilisateurs |
| `POST` | `/api/v1/roles` | Admin (`security:manage`) | Crée un rôle personnalisé (`name`, `description`, `permissions`) |
| `PUT` | `/api/v1/roles/:id` | Admin (`security:manage`) | Met à jour un rôle personnalisé (impossible de modifier les rôles intégrés) |
| `DELETE` | `/api/v1/roles/:id` | Admin (`security:manage`) | Supprime un rôle personnalisé (impossible de supprimer les rôles intégrés ; les utilisateurs concernés reviennent au rôle `user`) |
| `limit` | Entrées par page (par défaut : 50, max : 100) |
| `action` | Filtre par type d'action (par exemple `ROLE_CREATED`, `ROLE_DELETED`) |
| `ip` | Filtre par adresse IP source |
| `from` | Filtre les entrées postérieures à cette date ISO 8601 |
| `to` | Filtre les entrées antérieures à cette date ISO 8601 |
## Analytique {#analytics}
| Méthode | Chemin | Accès | Description |
|--------|------|--------|-------------|
| `GET` | `/api/v1/config/analytics` | Public | Récupère la configuration d'analytique effective (clé PostHog, DSN Sentry, taux d'échantillonnage). Les clés, le DSN et l'ID d'instance sont vides lorsque l'analytique est désactivée, que ce soit par la compilation ou par le paramètre d'instance `analyticsEnabled`. |
| `POST` | `/api/v1/feedback` | Auth | Soumet un retour utilisateur explicite au projet PostHog configuré sous forme de `feedback_submitted`. La route respecte le verrou d'analytique, limite le débit des soumissions, retire les champs de contact sauf si `contactOk` est vrai, et n'accepte jamais le contenu des fichiers, les noms de fichiers, les chemins de téléversement ni le texte d'erreur privé brut. Lorsque l'analytique est désactivée, elle renvoie `{ "ok": true, "accepted": false }`. |
| `PUT` | `/api/v1/settings` | Admin (`settings:write`) | Définit le refus à l'échelle de l'instance. Envoyez un corps JSON `{ "analyticsEnabled": "false" }` pour désactiver l'analytique pour tout le monde, ou `"true"` pour la réactiver. |
Gérez les bundles de fonctionnalités d'IA (installez/désinstallez des packages de modèles d'IA dans l'environnement Docker). Préférez le point de terminaison d'installation au niveau de l'outil lorsque vous activez un outil depuis une automatisation personnalisée : certains outils d'IA nécessitent plus d'un bundle partagé, et ce point de terminaison ignore les bundles déjà installés en ne mettant en file d'attente que ceux qui manquent.
OCR est une amélioration facultative plutôt qu’une dépendance matérielle. Son niveau `fast` Tesseract fonctionne sans pack ; `POST /api/v1/admin/features/ocr/install` installe le pack RapidOCR signé pour `balanced` et `best` sur Linux amd64 ou arm64. Le runtime OCR précis utilise CPU sur les hôtes CPU uniquement et NVIDIA et nécessite au moins 4 GiB de mémoire effective (la limite cgroup du conteneur configuré, sinon la mémoire hôte). SnapOtter signale `requiredMemoryBytes`, `effectiveMemoryBytes` et une raison de compatibilité `insufficient-memory`, et rejette une installation incompatible avant le téléchargement. Cette exigence de mémoire ne s'applique pas à `fast`. Le pack contient environ 208-234 MiB à télécharger et 409-488 MiB installés, selon la cible ; l'index signé lie les tailles exactes appliquées lors de l'installation.
| `GET` | `/api/v1/features` | Auth | Liste tous les bundles de fonctionnalités et leur état d'installation |
| `POST` | `/api/v1/admin/features/:bundleId/install` | Admin (`features:manage`) | Installe un bundle de fonctionnalités (asynchrone, renvoie `jobId` pour le suivi de la progression) |
| `POST` | `/api/v1/admin/tools/:toolId/features/install` | Admin (`features:manage`) | Installe chaque bundle requis par un outil ; renvoie l'état par bundle (mis en file d'attente/ignoré) |
| `POST` | `/api/v1/admin/features/:bundleId/uninstall` | Admin (`features:manage`) | Désinstalle un bundle de fonctionnalités et nettoie les fichiers de modèle |
| `GET` | `/api/v1/admin/features/disk-usage` | Admin (`features:manage`) | Récupère l'utilisation totale du disque par les modèles d'IA |
| `POST` | `/api/v1/admin/features/import` | Administrateur (`features:manage`) | Importez un ensemble d'IA hérité (`file`) ou une version OCR hors ligne signée (`index` plus `archive`) |
Une importation OCR isolée doit inclure le `ocr-runtime-index.json` signé de la version et l'archive de plate-forme correspondante. SnapOtter applique les mêmes vérifications de signature Ed25519, de hachage d'artefact, de compatibilité, d'extraction et de test de fumée que celles utilisées par l'installation en ligne:
```bash
curl -X POST http://localhost:1349/api/v1/admin/features/import \
-H "Authorization: Bearer <admin-token>"\
-F "index=@ocr-runtime-index.json"\
-F "archive=@ocr-linux-amd64-cpu-py312.tar.gz"
```
Utilisez l'archive `linux-arm64-cpu-py311` sur arm64. Un artefact signé pour une autre cible est rejeté plutôt qu'installé.
Ces routes sont verrouillées par licence selon leur fonctionnalité d'entreprise associée. Elles exigent toujours l'autorisation SnapOtter indiquée.
| Méthode | Chemin | Accès | Description |
|--------|------|--------|-------------|
| `GET` | `/api/v1/enterprise/audit/export` | Admin (`audit:read`) | Exporte les entrées d'audit au format JSON ou CSV avec des filtres |
| `GET` | `/api/v1/enterprise/config/export` | Admin (`system:health`) | Exporte la configuration d'instance caviardée, les rôles personnalisés et les équipes |
| `POST` | `/api/v1/enterprise/config/import` | Admin (`system:health`) | Importe une configuration, avec exécution à blanc optionnelle |
| `GET` | `/api/v1/enterprise/ip-allowlist` | Admin (`security:manage`) | Lit la liste d'autorisation CIDR configurée |
| `PUT` | `/api/v1/enterprise/ip-allowlist` | Admin (`security:manage`) | Met à jour la liste d'autorisation CIDR avec prévention de l'auto-verrouillage |
| `GET` | `/api/v1/enterprise/legal-hold` | Admin (`compliance:manage`) | Liste les blocages juridiques des utilisateurs et des équipes |
| `PUT` | `/api/v1/enterprise/legal-hold` | Admin (`compliance:manage`) | Applique ou lève un blocage juridique sur un utilisateur ou une équipe |
| `POST` | `/api/v1/enterprise/scim/token` | Admin (`users:manage`) | Génère un jeton bearer SCIM, renvoyé une seule fois |
| `GET` | `/api/v1/enterprise/users/:id/export/:jobId` | Admin (`compliance:manage`) | Lit l'état de l'export RGPD et l'URL de téléchargement |
| `DELETE` | `/api/v1/enterprise/users/:id/purge` | Admin (`compliance:manage`) | Purge définitivement les données d'un utilisateur après confirmation |
| `DELETE` | `/api/v1/enterprise/teams/:id/purge` | Admin (`compliance:manage`) | Purge définitivement les données d'une équipe après confirmation |
| `GET` | `/api/v1/admin/version` | Admin (`system:health`) | Lit les métadonnées de version de l'application, de la build, de Node et du schéma |
| `GET` | `/api/v1/admin/migrations/pending` | Admin (`system:health`) | Compare les migrations packagées avec les migrations appliquées |
| `GET` | `/api/v1/admin/upgrade-check` | Admin (`system:health`) | Exécute les vérifications de préparation à la mise à niveau |
### SCIM 2.0 {#scim-2-0}
Les points de terminaison de découverte SCIM sont publics. Les points de terminaison d'utilisateurs et de groupes exigent le jeton bearer SCIM généré ci-dessus.
| Méthode | Chemin | Accès | Description |
|--------|------|--------|-------------|
| `GET` | `/api/v1/scim/v2/ServiceProviderConfig` | Public | Capacités du serveur SCIM |
| `GET` | `/api/v1/scim/v2/Schemas` | Public | Découverte du schéma SCIM |
| `GET` | `/api/v1/scim/v2/ResourceTypes` | Public | Découverte des types de ressources SCIM |
| `GET` | `/api/v1/scim/v2/Users` | Jeton SCIM | Liste les utilisateurs, avec un filtre SCIM optionnel |