Aller à la documentation
Desktop 1.1.21

API MetaGhost Desktop

API HTTP pour traiter des images et des vidéos avec vos presets enregistrés. Envoyez des fichiers, suivez les tâches et récupérez les résultats depuis tout client HTTP, script ou outil d’automatisation.

Télécharger Markdown

Vous utilisez Desktop 1.0.81 ? Consultez sa documentation archivée.

De la connexion au premier résultat

Ouvrez MetaGhost Desktop, connectez-vous et allez dans Settings > API. Activez le serveur, gardez l’accès distant désactivé, générez une clé si nécessaire et cliquez sur Apply changes. Gardez Desktop ouvert. Cette documentation vise Desktop 1.1.21, contrat API 1.

PowerShell / Windows
curl.exe "http://127.0.0.1:3847/api/v1/health"
JSON
{
  "status": "ok",
  "version": "1.1.21",
  "apiVersion": "1",
  "activeJobs": 0
}

Créez une tâche Spoof locale avec les chemins de l’ordinateur Desktop. Donnez à chaque exécution une Idempotency-Key unique et conservez-la avec le corps JSON exact. Gardez les clés dans une variable d’environnement ou un coffre de secrets, jamais dans les URL ou les exemples partagés.

HTTP
POST http://127.0.0.1:3847/api/v1/jobs
Authorization: Bearer YOUR_LOCAL_API_KEY
Content-Type: application/json
Idempotency-Key: YOUR_UNIQUE_WORKFLOW_RUN_ID

{
  "operation": "spoof",
  "filePath": "C:\\Media\\photo.jpg",
  "outputFolder": "C:\\Media\\output",
  "batchCount": 1
}

Une réponse 202 renvoie jobId. Conservez-le, suivez la tâche et vérifiez outcome, errors et artifacts avant de télécharger. Les exemples Python 3.10+ et Node.js 22+ utilisent la bibliothèque standard, une adresse locale et un suivi limité à dix minutes. Ils envoient une seule création et n’écrasent jamais un téléchargement existant.

PowerShell
$env:METAGHOST_API_KEY = Read-Host "MetaGhost API key"
python .\quickstart.py "C:\Media\photo.jpg" "C:\Media\output" ".\result.jpg"
# Or:
node .\quickstart.mjs "C:\Media\photo.jpg" "C:\Media\output" ".\result-2.jpg"

Connexion et accès

L’API fonctionne dans Desktop à l’adresse http://127.0.0.1:3847/api/v1 par défaut. Les anciennes routes /api restent compatibles. Utilisez le port affiché dans Settings > API. Apply changes redémarre l’API et annule les tâches actives et en attente ; les sorties terminées sont conservées.

Seules GET /api/v1/health et /api/health sont publiques. Les autres opérations nécessitent Authorization: Bearer YOUR_LOCAL_API_KEY et un compte MetaGhost autorisé. Une clé absente ou invalide renvoie 401, des droits refusés 403 et une vérification du compte temporairement indisponible 503 avec possibilité de réessayer. Les clés existantes ne changent pas automatiquement ; une clé générée s’active après Apply changes.

HTTP
GET http://127.0.0.1:3847/api/v1/capabilities
Authorization: Bearer YOUR_LOCAL_API_KEY

Fichiers, presets et Drive

Choisissez filePath pour un fichier local, files pour plusieurs, driveInputFileIds pour des fichiers Drive explicitement autorisés ou driveInputFolder pour les enfants accessibles d’un dossier. Utilisez une seule source. Les chemins locaux doivent être absolus et exister sur l’ordinateur Desktop. Les tâches produisant des fichiers nécessitent outputFolder ou une destination Drive prise en charge. Consultez /tools pour chaque opération.

Images prises en charge : JPG, JPEG, PNG, WebP, HEIC, BMP, TIFF. Vidéos : MP4, MOV, AVI, MKV, WebM, M4V. Les restrictions propres à chaque opération s’appliquent.

POST /api/v1/upload accepte les octets bruts avec Content-Type: application/octet-stream et X-Filename. Pas de multipart. La réponse contient filePath, originalName et size ; utilisez filePath dans la tâche. Maximum : 500 Mio par fichier, 20 Gio stockés, conservation de sept jours. Un dépassement renvoie une erreur structurée 413 ; un stockage saturé renvoie 507.

GET /api/v1/presets renvoie les noms des presets d’images et de vidéos enregistrés. Un lot mixte nécessite le même nom dans les deux listes. Omettez preset pour les réglages de base ; les options non enregistrées de l’interface ne sont pas utilisées. Les presets payants de diffusion ou d’adversarial nécessitent confirmCredits: true. Seules les recettes historiques inchangées sur POST /api/jobs peuvent conserver leur autorisation après restauration de la clé d’origine.

Connectez Drive dans les réglages Desktop et consultez GET /api/v1/drive/status. Desktop 1.1.21 accepte au plus 250 identifiants de fichiers explicitement autorisés via le Picker ; autoriser un dossier n’autorise pas tous ses fichiers. Utilisez les identifiants de dossiers, pas les liens de partage. Une connexion absente renvoie 412 ; une sélection inaccessible peut échouer séparément. Downloader utilise Drive uniquement en sortie ; Probe et Risk Analyzer n’ont pas de sortie Drive.

JSON
{
  "operation": "spoof",
  "driveInputFileIds": [
    "YOUR_GRANTED_FILE_ID"
  ],
  "driveOutputFolder": "YOUR_OUTPUT_FOLDER_ID"
}

Vérifiez drive.uploadResult, les reçus confirmés, errors, cancelled, uploadError et drive.recovery avant de déclarer la livraison réussie. Récupérez les résultats Drive depuis Drive ; le téléchargement local API renvoie 409. Les fichiers de récupération peuvent expirer. Les exemples locaux refusent volontairement les requêtes Drive.

Tâches, reprises et résultats

Après acceptation, conservez jobId et vérifiez skipped. Les nombres Drive peuvent rester inconnus jusqu’au contrôle préalable. Interrogez le statut toutes les quelques secondes avec une durée maximale : queued et processing sont en cours ; completed, failed et cancelled sont terminaux. completed peut être partiel. Vérifiez outcome, les erreurs par fichier et la livraison. progress.phase décrit le travail, pas un statut distinct.

HTTP
GET http://127.0.0.1:3847/api/v1/jobs/YOUR_JOB_ID
Authorization: Bearer YOUR_LOCAL_API_KEY

Utilisez artifacts[].downloadUrl pour sélectionner la bonne sortie, y compris pour les résultats multifichiers. Cette URL relative se résout depuis l’origine du serveur Desktop. Pour un lot, index sélectionne un résultat et artifact un fichier dans ce résultat. Probe, Risk Analyzer et Captions avec reason: no_speech et charged: false peuvent ne produire aucun fichier.

Réessayez la même exécution avec la même Idempotency-Key et un corps JSON inchangé. Les reçus survivent au redémarrage et à l’effacement de l’historique pendant 24 heures. Un corps modifié renvoie 409 IDEMPOTENCY_CONFLICT. jobAvailable: false indique que le reçu empêche une réexécution mais que l’historique est indisponible. Une clé nouvelle, expirée ou absente peut créer une nouvelle tâche. Conservez la clé si la réponse à la création est perdue.

DELETE /api/v1/jobs/{jobId} demande l’annulation. Un calcul GPU engagé peut terminer ; les sorties terminées restent disponibles. Arrêter votre script n’annule pas une tâche. GET /api/v1/jobs renvoie les 50 tâches les plus récentes du compte. L’historique conserve au plus 100 tâches terminées pendant 24 heures. Un redémarrage marque les tâches interrompues API_RESTARTED sans les reprendre. DELETE /api/v1/jobs efface l’historique terminé en conservant les fichiers et les reçus.

Outils, crédits et limites

Consultez GET /api/v1/tools et /api/v1/capabilities avant l’automatisation. Vérifiez available, les sources et destinations, les modes Drive et les tarifs. Les opérations comprennent spoof, probe, risk-analyzer, convert, reduce, short-maker, captions, download et synthid selon sa disponibilité. Utilisez operation et ses options ; Short Maker nécessite un modèle existant de /short-maker/templates.

Captions et SynthID nécessitent confirmCredits: true ; Downloader nécessite confirmExternalNetwork: true. Pour Captions facturé à la seconde source, appelez POST /api/v1/captions/quote avec filePath local et éventuellement language, puis approuvez requiredLimit dans options.maxCreditsPerVideo. Le devis ne lance aucun traitement payant. Les fichiers Drive sont évalués après téléchargement. Les anciens runtimes peuvent ne pas proposer de devis. Aucune route API ne fournit le solde de crédits.

Desktop 1.1.21 accepte 250 entrées Spoof, 100 répétitions par fichier et 1 000 sorties au total. Collage nécessite quatre entrées compatibles distinctes par type de média et crée des sorties groupées. Les autres opérations n’acceptent pas les répétitions batchCount et peuvent avoir des limites d’entrée différentes. Consultez limits.operations dans /capabilities.

Une tâche API est traitée à la fois, avec au plus 10 en attente ; le travail dans l’interface peut retarder la file. En 1.1.21, tous les corps JSON sont limités à 64 Kio. Les uploads sont limités à 500 Mio. Consultez capabilities pour les limites par outil et de stockage.

Prochaine mise à jour : changements préparés

Le prochain build prévoit 1 000 entrées explicites locales ou Drive et 2 Mio de JSON pour créer une tâche authentifiée ; les autres requêtes JSON restent à 64 Kio. La suppression des anciens plafonds de répétitions et de sorties Spoof est également préparée. Ces changements ne font pas partie de Desktop 1.1.21. Vérifiez le build installé via /capabilities avant d’envoyer de plus gros lots.

Réseau et automatisation

Tout client HTTP ou outil d’automatisation peut appeler cette API. 127.0.0.1 désigne la machine ou le conteneur client. Un client distant ou cloud nécessite un hôte Desktop joignable via un réseau privé ou VPN ; son localhost ne désigne pas votre ordinateur. Pour un proxy HTTPS, terminez TLS et limitez les accès. N’exposez jamais directement le port HTTP Desktop sur Internet.

La planification appartient à l’application appelante. Gardez Desktop ouvert, conservez la clé d’exécution et jobId, respectez la file et limitez le suivi. Relancer tout un workflow avec une nouvelle clé peut dupliquer le travail. Récupérez la tentative avec la clé d’origine et le corps inchangé. Ne suivez pas les redirections avec des identifiants.

Référence API

URL de base : http://127.0.0.1:3847/api/v1. Dépliez une route pour ses en-têtes, paramètres, corps de requête et réponses. La spécification OpenAPI 3.1 peut être importée dans un client HTTP ou un générateur de code.

GET/health

Vérifier l’état du serveur

Sans authentification

JSON
{
  "responses": {
    "200": {
      "description": "Le serveur est prêt",
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/Health"
          }
        }
      }
    }
  }
}
Consulter les schémas référencés
GET/capabilities

Découvrir la version API, la compatibilité, les limites et les fonctions

Authorization: Bearer YOUR_LOCAL_API_KEY

JSON
{
  "responses": {
    "200": {
      "description": "Capacités",
      "content": {
        "application/json": {
          "schema": {
            "type": "object",
            "required": [
              "apiVersion",
              "routes",
              "compatibility",
              "limits",
              "features"
            ],
            "additionalProperties": true
          }
        }
      }
    },
    "401": {
      "$ref": "#/components/responses/Unauthorized"
    },
    "403": {
      "$ref": "#/components/responses/Forbidden"
    },
    "429": {
      "$ref": "#/components/responses/RateLimited"
    }
  }
}
Consulter les schémas référencés
GET/tools

Découvrir les opérations prises en charge et leurs besoins locaux, réseau et en crédits

Authorization: Bearer YOUR_LOCAL_API_KEY

JSON
{
  "responses": {
    "200": {
      "description": "Catalogue des opérations",
      "content": {
        "application/json": {
          "schema": {
            "type": "object",
            "required": [
              "operations",
              "submission"
            ],
            "properties": {
              "operations": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/ToolDefinition"
                }
              },
              "submission": {
                "type": "object",
                "additionalProperties": true
              }
            }
          }
        }
      }
    },
    "401": {
      "$ref": "#/components/responses/Unauthorized"
    },
    "403": {
      "$ref": "#/components/responses/Forbidden"
    },
    "429": {
      "$ref": "#/components/responses/RateLimited"
    }
  }
}
Consulter les schémas référencés
GET/presets

Lister les noms des presets d’images et de vidéos

Authorization: Bearer YOUR_LOCAL_API_KEY

JSON
{
  "responses": {
    "200": {
      "description": "Noms des presets",
      "content": {
        "application/json": {
          "schema": {
            "type": "object",
            "required": [
              "image",
              "video"
            ],
            "properties": {
              "image": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "video": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "401": {
      "$ref": "#/components/responses/Unauthorized"
    },
    "403": {
      "$ref": "#/components/responses/Forbidden"
    },
    "429": {
      "$ref": "#/components/responses/RateLimited"
    }
  }
}
Consulter les schémas référencés
GET/short-maker/templates

Lister les résumés des modèles intégrés et personnalisés Short Maker autorisés

Authorization: Bearer YOUR_LOCAL_API_KEY

JSON
{
  "responses": {
    "200": {
      "description": "Modèles Short Maker disponibles",
      "content": {
        "application/json": {
          "schema": {
            "type": "object",
            "required": [
              "templates"
            ],
            "properties": {
              "templates": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/ShortMakerTemplate"
                }
              }
            }
          }
        }
      }
    },
    "401": {
      "$ref": "#/components/responses/Unauthorized"
    },
    "403": {
      "$ref": "#/components/responses/Forbidden"
    },
    "429": {
      "$ref": "#/components/responses/RateLimited"
    },
    "503": {
      "description": "Le catalogue des modèles est indisponible dans cette session Desktop",
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/Error"
          }
        }
      }
    }
  }
}
Consulter les schémas référencés
POST/captions/quote

Évaluer les crédits de transcription à la seconde source sans lancer de traitement ni dépenser de crédits

Authorization: Bearer YOUR_LOCAL_API_KEY

Disponible sur les runtimes à la seconde source. Les anciens runtimes renvoient LEGACY_PROTOCOL ou QUOTE_UNAVAILABLE. Consultez d’abord le catalogue tarifaire de Captions.

JSON
{
  "requestBody": {
    "required": true,
    "content": {
      "application/json": {
        "schema": {
          "type": "object",
          "required": [
            "filePath"
          ],
          "properties": {
            "filePath": {
              "type": "string"
            },
            "options": {
              "type": "object",
              "properties": {
                "language": {
                  "enum": [
                    "",
                    "fr",
                    "en",
                    "es",
                    "de",
                    "it",
                    "pt",
                    "nl"
                  ]
                }
              }
            }
          }
        }
      }
    }
  }
}
JSON
{
  "responses": {
    "200": {
      "description": "Devis source actuel ; approuvez requiredLimit dans options.maxCreditsPerVideo à la création d’une tâche",
      "content": {
        "application/json": {
          "schema": {
            "type": "object",
            "properties": {
              "durationMs": {
                "type": "number"
              },
              "units": {
                "type": "integer"
              },
              "totalCredits": {
                "type": "integer"
              },
              "newCredits": {
                "type": "integer"
              },
              "requiredLimit": {
                "type": "integer"
              },
              "priceModel": {
                "type": "string"
              },
              "origin": {
                "type": "string"
              }
            }
          }
        }
      }
    },
    "403": {
      "$ref": "#/components/responses/Forbidden"
    },
    "429": {
      "$ref": "#/components/responses/RateLimited"
    },
    "default": {
      "description": "Invalid input, denied authorization or unavailable quote",
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/Error"
          }
        }
      }
    }
  }
}
Consulter les schémas référencés
POST/jobs

Créer une tâche Spoof ou un autre outil Desktop

Authorization: Bearer YOUR_LOCAL_API_KEY

JSON
{
  "parameters": [
    {
      "$ref": "#/components/parameters/IdempotencyKey"
    },
    {
      "$ref": "#/components/parameters/RequestId"
    }
  ]
}
JSON
{
  "requestBody": {
    "required": true,
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/CreateJobRequest"
        }
      }
    }
  }
}
JSON
{
  "responses": {
    "202": {
      "description": "Tâche acceptée ou répétition dédupliquée",
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/CreateJobResponse"
          }
        }
      }
    },
    "400": {
      "$ref": "#/components/responses/BadRequest"
    },
    "401": {
      "$ref": "#/components/responses/Unauthorized"
    },
    "403": {
      "$ref": "#/components/responses/Forbidden"
    },
    "409": {
      "$ref": "#/components/responses/Conflict"
    },
    "412": {
      "$ref": "#/components/responses/PreconditionFailed"
    },
    "413": {
      "$ref": "#/components/responses/PayloadTooLarge"
    },
    "429": {
      "$ref": "#/components/responses/RateLimited"
    },
    "507": {
      "$ref": "#/components/responses/StorageUnavailable"
    }
  }
}
Consulter les schémas référencés
GET/jobs

Lister les 50 tâches les plus récentes

Authorization: Bearer YOUR_LOCAL_API_KEY

JSON
{
  "responses": {
    "200": {
      "description": "Historique des tâches et état de la file",
      "content": {
        "application/json": {
          "schema": {
            "type": "object",
            "required": [
              "jobs",
              "queueLength",
              "processing"
            ],
            "properties": {
              "jobs": {
                "type": "array",
                "items": {
                  "$ref": "#/components/schemas/Job"
                }
              },
              "queueLength": {
                "type": "integer",
                "minimum": 0
              },
              "processing": {
                "type": "boolean"
              }
            }
          }
        }
      }
    },
    "401": {
      "$ref": "#/components/responses/Unauthorized"
    },
    "403": {
      "$ref": "#/components/responses/Forbidden"
    },
    "429": {
      "$ref": "#/components/responses/RateLimited"
    }
  }
}
Consulter les schémas référencés
DELETE/jobs

Effacer les tâches terminées de l’historique local

Authorization: Bearer YOUR_LOCAL_API_KEY

Efface l’historique terminé. Cette opération modifie les données.

JSON
{
  "responses": {
    "200": {
      "description": "Nombre de tâches effacées",
      "content": {
        "application/json": {
          "schema": {
            "type": "object",
            "required": [
              "cleared"
            ],
            "properties": {
              "cleared": {
                "type": "integer",
                "minimum": 0
              }
            }
          }
        }
      }
    },
    "401": {
      "$ref": "#/components/responses/Unauthorized"
    },
    "403": {
      "$ref": "#/components/responses/Forbidden"
    },
    "429": {
      "$ref": "#/components/responses/RateLimited"
    }
  }
}
Consulter les schémas référencés
GET/jobs/{jobId}

Lire le statut, la progression, le bilan et les résultats d’une tâche

Authorization: Bearer YOUR_LOCAL_API_KEY

JSON
{
  "parameters": [
    {
      "$ref": "#/components/parameters/JobId"
    }
  ]
}
JSON
{
  "responses": {
    "200": {
      "description": "État actuel de la tâche",
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/Job"
          }
        }
      }
    },
    "401": {
      "$ref": "#/components/responses/Unauthorized"
    },
    "403": {
      "$ref": "#/components/responses/Forbidden"
    },
    "404": {
      "$ref": "#/components/responses/NotFound"
    },
    "429": {
      "$ref": "#/components/responses/RateLimited"
    }
  }
}
Consulter les schémas référencés
DELETE/jobs/{jobId}

Annuler une tâche en attente ou en cours

Authorization: Bearer YOUR_LOCAL_API_KEY

Annule la tâche sélectionnée.

JSON
{
  "parameters": [
    {
      "$ref": "#/components/parameters/JobId"
    }
  ]
}
JSON
{
  "responses": {
    "200": {
      "description": "La tâche est annulée",
      "content": {
        "application/json": {
          "schema": {
            "type": "object",
            "required": [
              "jobId",
              "status"
            ],
            "properties": {
              "jobId": {
                "type": "string"
              },
              "status": {
                "const": "cancelled"
              }
            }
          }
        }
      }
    },
    "400": {
      "$ref": "#/components/responses/BadRequest"
    },
    "401": {
      "$ref": "#/components/responses/Unauthorized"
    },
    "403": {
      "$ref": "#/components/responses/Forbidden"
    },
    "404": {
      "$ref": "#/components/responses/NotFound"
    },
    "429": {
      "$ref": "#/components/responses/RateLimited"
    }
  }
}
Consulter les schémas référencés
POST/upload

Téléverser les octets bruts d’une image ou d’une vidéo

Authorization: Bearer YOUR_LOCAL_API_KEY

JSON
{
  "parameters": [
    {
      "name": "X-Filename",
      "in": "header",
      "required": true,
      "schema": {
        "type": "string",
        "maxLength": 255
      }
    }
  ]
}
JSON
{
  "requestBody": {
    "required": true,
    "content": {
      "application/octet-stream": {
        "schema": {
          "type": "string",
          "format": "binary",
          "maxLength": 524288000
        }
      }
    }
  }
}
JSON
{
  "responses": {
    "200": {
      "description": "Upload conservé pendant sept jours",
      "content": {
        "application/json": {
          "schema": {
            "type": "object",
            "required": [
              "filePath",
              "originalName",
              "size"
            ],
            "properties": {
              "filePath": {
                "type": "string"
              },
              "originalName": {
                "type": "string"
              },
              "size": {
                "type": "integer",
                "minimum": 1,
                "maximum": 524288000
              }
            }
          }
        }
      }
    },
    "400": {
      "$ref": "#/components/responses/BadRequest"
    },
    "401": {
      "$ref": "#/components/responses/Unauthorized"
    },
    "403": {
      "$ref": "#/components/responses/Forbidden"
    },
    "413": {
      "$ref": "#/components/responses/PayloadTooLarge"
    },
    "415": {
      "$ref": "#/components/responses/UnsupportedMediaType"
    },
    "429": {
      "$ref": "#/components/responses/RateLimited"
    },
    "507": {
      "description": "Plafond de stockage des uploads atteint",
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/Error"
          }
        }
      }
    }
  }
}
Consulter les schémas référencés
GET/download/{jobId}

Télécharger un fichier produit

Authorization: Bearer YOUR_LOCAL_API_KEY

JSON
{
  "parameters": [
    {
      "$ref": "#/components/parameters/JobId"
    },
    {
      "name": "index",
      "in": "query",
      "description": "Index de fichier pour une tâche unique ; index de résultat pour un lot historique.",
      "schema": {
        "type": "integer",
        "minimum": 0,
        "default": 0
      }
    },
    {
      "name": "artifact",
      "in": "query",
      "description": "Pour les lots uniquement ; sélectionne un fichier dans le résultat choisi.",
      "schema": {
        "type": "integer",
        "minimum": 0,
        "default": 0
      }
    }
  ]
}
JSON
{
  "responses": {
    "200": {
      "description": "Octets du fichier produit",
      "content": {
        "application/octet-stream": {
          "schema": {
            "type": "string",
            "format": "binary"
          }
        }
      }
    },
    "400": {
      "$ref": "#/components/responses/BadRequest"
    },
    "401": {
      "$ref": "#/components/responses/Unauthorized"
    },
    "403": {
      "$ref": "#/components/responses/Forbidden"
    },
    "404": {
      "$ref": "#/components/responses/NotFound"
    },
    "409": {
      "$ref": "#/components/responses/Conflict"
    },
    "429": {
      "$ref": "#/components/responses/RateLimited"
    }
  }
}
Consulter les schémas référencés
GET/drive/status

Vérifier la disponibilité de Google Drive sans exposer de tokens

Authorization: Bearer YOUR_LOCAL_API_KEY

JSON
{
  "responses": {
    "200": {
      "description": "État de Google Drive",
      "content": {
        "application/json": {
          "schema": {
            "type": "object",
            "required": [
              "clientConfigured",
              "connected"
            ],
            "properties": {
              "clientConfigured": {
                "type": "boolean"
              },
              "connected": {
                "type": "boolean"
              },
              "email": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "scope": {
                "type": [
                  "string",
                  "null"
                ]
              }
            }
          }
        }
      }
    },
    "401": {
      "$ref": "#/components/responses/Unauthorized"
    },
    "403": {
      "$ref": "#/components/responses/Forbidden"
    },
    "429": {
      "$ref": "#/components/responses/RateLimited"
    }
  }
}
Consulter les schémas référencés
Tous les schémas et paramètres réutilisables
#/components/securitySchemes
bearerAuth
JSON
{
  "type": "http",
  "scheme": "bearer",
  "bearerFormat": "MetaGhost API key"
}
#/components/parameters
IdempotencyKey
JSON
{
  "name": "Idempotency-Key",
  "in": "header",
  "required": false,
  "description": "Valeur ASCII visible unique conservée pendant 24 heures.",
  "schema": {
    "type": "string",
    "minLength": 1,
    "maxLength": 128
  }
}
RequestId
JSON
{
  "name": "X-Request-ID",
  "in": "header",
  "required": false,
  "schema": {
    "type": "string",
    "minLength": 1,
    "maxLength": 96
  }
}
JobId
JSON
{
  "name": "jobId",
  "in": "path",
  "required": true,
  "schema": {
    "type": "string",
    "pattern": "^job-[A-Za-z0-9_-]+$"
  }
}
#/components/schemas
Health
JSON
{
  "type": "object",
  "required": [
    "status",
    "version",
    "apiVersion",
    "activeJobs"
  ],
  "properties": {
    "status": {
      "const": "ok"
    },
    "version": {
      "type": "string",
      "description": "Version du logiciel Desktop"
    },
    "apiVersion": {
      "const": "1"
    },
    "activeJobs": {
      "type": "integer",
      "minimum": 0
    }
  }
}
CreateJobRequest
JSON
{
  "oneOf": [
    {
      "$ref": "#/components/schemas/SpoofJobRequest"
    },
    {
      "$ref": "#/components/schemas/ProbeJobRequest"
    },
    {
      "$ref": "#/components/schemas/RiskAnalyzerJobRequest"
    },
    {
      "$ref": "#/components/schemas/ConvertJobRequest"
    },
    {
      "$ref": "#/components/schemas/ReduceJobRequest"
    },
    {
      "$ref": "#/components/schemas/ShortMakerJobRequest"
    },
    {
      "$ref": "#/components/schemas/CaptionsJobRequest"
    },
    {
      "$ref": "#/components/schemas/DownloadJobRequest"
    },
    {
      "$ref": "#/components/schemas/SynthIdJobRequest"
    }
  ]
}
DriveInputFileIds
JSON
{
  "type": "array",
  "minItems": 1,
  "maxItems": 250,
  "description": "Identifiants de fichiers explicitement autorisés via le Picker Google. Les doublons sont traités une fois. Incompatible avec une entrée locale ou driveInputFolder ; l’accès à un dossier n’autorise pas tous ses fichiers.",
  "items": {
    "type": "string",
    "pattern": "^[A-Za-z0-9_-]{10,256}$"
  }
}
LocalOrDriveInput
JSON
{
  "oneOf": [
    {
      "type": "object",
      "required": [
        "filePath"
      ],
      "properties": {
        "filePath": {
          "type": "string",
          "description": "Chemin local absolu d’entrée"
        }
      }
    },
    {
      "type": "object",
      "required": [
        "files"
      ],
      "properties": {
        "files": {
          "type": "array",
          "minItems": 1,
          "maxItems": 1000,
          "items": {
            "type": "string"
          }
        }
      }
    },
    {
      "type": "object",
      "required": [
        "driveInputFolder"
      ],
      "properties": {
        "driveInputFolder": {
          "type": "string",
          "maxLength": 512
        }
      }
    },
    {
      "type": "object",
      "required": [
        "driveInputFileIds"
      ],
      "properties": {
        "driveInputFileIds": {
          "$ref": "#/components/schemas/DriveInputFileIds"
        }
      }
    }
  ]
}
LocalOrDriveOutput
JSON
{
  "oneOf": [
    {
      "type": "object",
      "required": [
        "outputFolder"
      ],
      "properties": {
        "outputFolder": {
          "type": "string",
          "description": "Dossier local absolu de sortie"
        }
      }
    },
    {
      "type": "object",
      "required": [
        "driveOutputFolder"
      ],
      "properties": {
        "driveOutputFolder": {
          "type": "string",
          "maxLength": 512
        }
      }
    }
  ]
}
SpoofJobRequest
JSON
{
  "type": "object",
  "description": "Au plus 250 fichiers d’entrée, 100 répétitions par fichier et 1 000 opérations de sortie. Les autres outils ont leurs propres limites ; les répétitions batchCount sont réservées à Spoof.",
  "additionalProperties": true,
  "properties": {
    "operation": {
      "enum": [
        "spoof"
      ],
      "default": "spoof"
    },
    "confirmCredits": {
      "type": "boolean",
      "description": "Valeur true requise pour les presets de diffusion ou d’adversarial, sauf pour une recette payante inchangée approuvée lors de la migration de clé sur la route historique /api/jobs."
    },
    "filePath": {
      "type": "string"
    },
    "files": {
      "type": "array",
      "minItems": 1,
      "maxItems": 250,
      "items": {
        "type": "string"
      }
    },
    "driveInputFolder": {
      "type": "string",
      "maxLength": 512
    },
    "driveInputFileIds": {
      "$ref": "#/components/schemas/DriveInputFileIds"
    },
    "outputFolder": {
      "type": "string"
    },
    "driveOutputFolder": {
      "type": "string",
      "maxLength": 512
    },
    "preset": {
      "type": "string",
      "maxLength": 128
    },
    "batchCount": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "default": 1
    }
  },
  "oneOf": [
    {
      "required": [
        "filePath"
      ]
    },
    {
      "required": [
        "files"
      ]
    },
    {
      "required": [
        "driveInputFolder"
      ]
    },
    {
      "required": [
        "driveInputFileIds"
      ]
    }
  ],
  "anyOf": [
    {
      "required": [
        "outputFolder"
      ]
    },
    {
      "required": [
        "driveOutputFolder"
      ]
    }
  ]
}
ProbeJobRequest
JSON
{
  "type": "object",
  "required": [
    "operation"
  ],
  "properties": {
    "operation": {
      "enum": [
        "probe",
        "media-probe"
      ]
    },
    "filePath": {
      "type": "string"
    },
    "files": {
      "type": "array",
      "minItems": 1,
      "maxItems": 1000,
      "items": {
        "type": "string"
      }
    },
    "driveInputFolder": {
      "type": "string",
      "maxLength": 512
    },
    "driveInputFileIds": {
      "$ref": "#/components/schemas/DriveInputFileIds"
    },
    "options": {
      "type": "object",
      "properties": {
        "includeStreams": {
          "type": "boolean",
          "default": true
        },
        "includeMetadata": {
          "type": "boolean",
          "default": true
        }
      }
    }
  },
  "oneOf": [
    {
      "required": [
        "filePath"
      ]
    },
    {
      "required": [
        "files"
      ]
    },
    {
      "required": [
        "driveInputFolder"
      ]
    },
    {
      "required": [
        "driveInputFileIds"
      ]
    }
  ]
}
RiskAnalyzerJobRequest
JSON
{
  "type": "object",
  "required": [
    "operation"
  ],
  "properties": {
    "operation": {
      "enum": [
        "risk-analyzer",
        "risk"
      ]
    },
    "originalPath": {
      "type": "string"
    },
    "comparisonPaths": {
      "type": "array",
      "minItems": 1,
      "maxItems": 50,
      "items": {
        "type": "string"
      }
    },
    "files": {
      "type": "array",
      "minItems": 1,
      "maxItems": 50,
      "items": {
        "type": "string"
      }
    },
    "driveInputFolder": {
      "type": "string",
      "maxLength": 512
    },
    "driveInputFileIds": {
      "$ref": "#/components/schemas/DriveInputFileIds"
    },
    "options": {
      "type": "object",
      "properties": {
        "originalFileName": {
          "type": "string",
          "maxLength": 260
        }
      }
    }
  },
  "oneOf": [
    {
      "required": [
        "originalPath",
        "comparisonPaths"
      ]
    },
    {
      "required": [
        "originalPath",
        "files"
      ]
    },
    {
      "required": [
        "driveInputFolder",
        "options"
      ]
    },
    {
      "required": [
        "driveInputFileIds",
        "options"
      ]
    }
  ]
}
ConvertJobRequest
JSON
{
  "type": "object",
  "required": [
    "operation"
  ],
  "properties": {
    "operation": {
      "enum": [
        "convert",
        "converter"
      ]
    },
    "filePath": {
      "type": "string"
    },
    "files": {
      "type": "array",
      "minItems": 1,
      "maxItems": 1000,
      "items": {
        "type": "string"
      }
    },
    "driveInputFolder": {
      "type": "string",
      "maxLength": 512
    },
    "driveInputFileIds": {
      "$ref": "#/components/schemas/DriveInputFileIds"
    },
    "outputFolder": {
      "type": "string"
    },
    "driveOutputFolder": {
      "type": "string",
      "maxLength": 512
    },
    "format": {
      "enum": [
        "jpeg",
        "jpg",
        "png",
        "webp",
        "bmp",
        "tiff",
        "mp4",
        "mov",
        "webm",
        "mkv",
        "gif"
      ],
      "description": "Alias de compatibilité pour options.format"
    },
    "options": {
      "type": "object",
      "properties": {
        "forceSoftware": {
          "type": "boolean",
          "default": false
        },
        "format": {
          "enum": [
            "jpeg",
            "jpg",
            "png",
            "webp",
            "bmp",
            "tiff",
            "mp4",
            "mov",
            "webm",
            "mkv",
            "gif"
          ]
        },
        "framerate": {
          "type": "integer",
          "minimum": 1,
          "maximum": 30,
          "default": 15
        },
        "scale": {
          "type": "integer",
          "minimum": 64,
          "maximum": 1920,
          "default": 720
        }
      }
    }
  },
  "anyOf": [
    {
      "required": [
        "options"
      ],
      "properties": {
        "options": {
          "required": [
            "format"
          ]
        }
      }
    },
    {
      "required": [
        "format"
      ]
    }
  ],
  "oneOf": [
    {
      "required": [
        "filePath",
        "outputFolder"
      ]
    },
    {
      "required": [
        "filePath",
        "driveOutputFolder"
      ]
    },
    {
      "required": [
        "files",
        "outputFolder"
      ]
    },
    {
      "required": [
        "files",
        "driveOutputFolder"
      ]
    },
    {
      "required": [
        "driveInputFolder",
        "outputFolder"
      ]
    },
    {
      "required": [
        "driveInputFileIds",
        "outputFolder"
      ]
    },
    {
      "required": [
        "driveInputFolder",
        "driveOutputFolder"
      ]
    },
    {
      "required": [
        "driveInputFileIds",
        "driveOutputFolder"
      ]
    }
  ]
}
ReduceJobRequest
JSON
{
  "type": "object",
  "required": [
    "operation"
  ],
  "properties": {
    "operation": {
      "enum": [
        "reduce",
        "file-reducer",
        "reducer"
      ]
    },
    "filePath": {
      "type": "string"
    },
    "files": {
      "type": "array",
      "minItems": 1,
      "maxItems": 1000,
      "items": {
        "type": "string"
      }
    },
    "driveInputFolder": {
      "type": "string",
      "maxLength": 512
    },
    "driveInputFileIds": {
      "$ref": "#/components/schemas/DriveInputFileIds"
    },
    "outputFolder": {
      "type": "string"
    },
    "driveOutputFolder": {
      "type": "string",
      "maxLength": 512
    },
    "options": {
      "type": "object",
      "properties": {
        "forceSoftware": {
          "type": "boolean",
          "default": false
        }
      }
    }
  },
  "oneOf": [
    {
      "required": [
        "filePath",
        "outputFolder"
      ]
    },
    {
      "required": [
        "filePath",
        "driveOutputFolder"
      ]
    },
    {
      "required": [
        "files",
        "outputFolder"
      ]
    },
    {
      "required": [
        "files",
        "driveOutputFolder"
      ]
    },
    {
      "required": [
        "driveInputFolder",
        "outputFolder"
      ]
    },
    {
      "required": [
        "driveInputFileIds",
        "outputFolder"
      ]
    },
    {
      "required": [
        "driveInputFolder",
        "driveOutputFolder"
      ]
    },
    {
      "required": [
        "driveInputFileIds",
        "driveOutputFolder"
      ]
    }
  ]
}
ShortMakerJobRequest
JSON
{
  "type": "object",
  "required": [
    "operation",
    "options"
  ],
  "properties": {
    "operation": {
      "enum": [
        "short-maker",
        "shortmaker"
      ]
    },
    "filePath": {
      "type": "string"
    },
    "files": {
      "type": "array",
      "minItems": 1,
      "maxItems": 1000,
      "items": {
        "type": "string"
      }
    },
    "driveInputFolder": {
      "type": "string",
      "maxLength": 512
    },
    "driveInputFileIds": {
      "$ref": "#/components/schemas/DriveInputFileIds"
    },
    "outputFolder": {
      "type": "string"
    },
    "driveOutputFolder": {
      "type": "string",
      "maxLength": 512
    },
    "options": {
      "type": "object",
      "required": [
        "templateId"
      ],
      "properties": {
        "forceSoftware": {
          "type": "boolean",
          "default": false
        },
        "templateId": {
          "type": "string",
          "maxLength": 160
        },
        "durationMode": {
          "enum": [
            "smart",
            "template"
          ],
          "default": "smart"
        },
        "maxContentDuration": {
          "type": [
            "number",
            "null"
          ],
          "minimum": 1,
          "maximum": 3600
        },
        "keepSourceAudio": {
          "type": "boolean",
          "default": false
        },
        "randomizeTextPos": {
          "type": "boolean",
          "default": false
        },
        "randomSeed": {
          "type": "string",
          "maxLength": 200
        },
        "spoofEnabled": {
          "type": "boolean",
          "default": false
        },
        "spoofTier": {
          "enum": [
            "fast",
            "aggressive"
          ],
          "default": "fast"
        },
        "usMetadataEnabled": {
          "type": "boolean",
          "default": false
        },
        "metadataCountry": {
          "type": "string",
          "pattern": "^[A-Za-z]{2}$",
          "default": "US"
        },
        "metadataDeviceProfile": {
          "enum": [
            "iphone",
            "rayban"
          ],
          "default": "iphone"
        }
      }
    }
  },
  "oneOf": [
    {
      "required": [
        "filePath",
        "outputFolder"
      ]
    },
    {
      "required": [
        "filePath",
        "driveOutputFolder"
      ]
    },
    {
      "required": [
        "files",
        "outputFolder"
      ]
    },
    {
      "required": [
        "files",
        "driveOutputFolder"
      ]
    },
    {
      "required": [
        "driveInputFolder",
        "outputFolder"
      ]
    },
    {
      "required": [
        "driveInputFileIds",
        "outputFolder"
      ]
    },
    {
      "required": [
        "driveInputFolder",
        "driveOutputFolder"
      ]
    },
    {
      "required": [
        "driveInputFileIds",
        "driveOutputFolder"
      ]
    }
  ]
}
CaptionsJobRequest
JSON
{
  "type": "object",
  "required": [
    "operation"
  ],
  "allOf": [
    {
      "$ref": "#/components/schemas/CreditConfirmation"
    }
  ],
  "properties": {
    "operation": {
      "enum": [
        "captions",
        "auto-captions"
      ]
    },
    "confirmCredits": {
      "type": "boolean"
    },
    "filePath": {
      "type": "string"
    },
    "files": {
      "type": "array",
      "minItems": 1,
      "maxItems": 1000,
      "items": {
        "type": "string"
      }
    },
    "driveInputFolder": {
      "type": "string",
      "maxLength": 512
    },
    "driveInputFileIds": {
      "$ref": "#/components/schemas/DriveInputFileIds"
    },
    "outputFolder": {
      "type": "string"
    },
    "driveOutputFolder": {
      "type": "string",
      "maxLength": 512
    },
    "options": {
      "type": "object",
      "properties": {
        "language": {
          "enum": [
            "",
            "fr",
            "en",
            "es",
            "de",
            "it",
            "pt",
            "nl"
          ],
          "default": ""
        },
        "tier": {
          "enum": [
            "premium",
            "fast"
          ],
          "default": "premium"
        },
        "maxCreditsPerVideo": {
          "type": "integer",
          "minimum": 0,
          "maximum": 90000,
          "description": "Plafond explicite des nouveaux frais à la seconde source pour chaque vidéo. Requis avant toute facturation non nulle sur ces runtimes ; demandez un devis à /captions/quote."
        },
        "style": {
          "enum": [
            "punch",
            "karaoke",
            "clean",
            "beast",
            "boxed",
            "tiktok-clean",
            "instagram-clean",
            "creator-pop",
            "word-focus"
          ],
          "default": "punch"
        },
        "overrides": {
          "type": "object",
          "additionalProperties": true
        },
        "confirmCredits": {
          "type": "boolean"
        }
      }
    }
  },
  "oneOf": [
    {
      "required": [
        "filePath",
        "outputFolder"
      ]
    },
    {
      "required": [
        "filePath",
        "driveOutputFolder"
      ]
    },
    {
      "required": [
        "files",
        "outputFolder"
      ]
    },
    {
      "required": [
        "files",
        "driveOutputFolder"
      ]
    },
    {
      "required": [
        "driveInputFolder",
        "outputFolder"
      ]
    },
    {
      "required": [
        "driveInputFileIds",
        "outputFolder"
      ]
    },
    {
      "required": [
        "driveInputFolder",
        "driveOutputFolder"
      ]
    },
    {
      "required": [
        "driveInputFileIds",
        "driveOutputFolder"
      ]
    }
  ]
}
DownloadJobRequest
JSON
{
  "type": "object",
  "required": [
    "operation"
  ],
  "allOf": [
    {
      "$ref": "#/components/schemas/NetworkConfirmation"
    }
  ],
  "properties": {
    "operation": {
      "enum": [
        "download",
        "downloader"
      ]
    },
    "confirmExternalNetwork": {
      "type": "boolean"
    },
    "url": {
      "type": "string",
      "format": "uri",
      "maxLength": 4096
    },
    "urls": {
      "type": "array",
      "minItems": 1,
      "maxItems": 100,
      "items": {
        "type": "string",
        "format": "uri",
        "maxLength": 4096
      }
    },
    "outputFolder": {
      "type": "string"
    },
    "driveOutputFolder": {
      "type": "string",
      "maxLength": 512
    },
    "options": {
      "type": "object",
      "properties": {
        "usMetadataEnabled": {
          "type": "boolean",
          "default": false
        },
        "metadataCountry": {
          "type": "string",
          "pattern": "^[A-Za-z]{2}$",
          "default": "US"
        },
        "metadataDeviceProfile": {
          "enum": [
            "iphone",
            "rayban"
          ],
          "default": "iphone"
        },
        "confirmExternalNetwork": {
          "type": "boolean"
        }
      }
    }
  },
  "oneOf": [
    {
      "required": [
        "url",
        "outputFolder"
      ]
    },
    {
      "required": [
        "url",
        "driveOutputFolder"
      ]
    },
    {
      "required": [
        "urls",
        "outputFolder"
      ]
    },
    {
      "required": [
        "urls",
        "driveOutputFolder"
      ]
    }
  ]
}
SynthIdJobRequest
JSON
{
  "type": "object",
  "required": [
    "operation",
    "preset"
  ],
  "allOf": [
    {
      "$ref": "#/components/schemas/CreditConfirmation"
    }
  ],
  "properties": {
    "operation": {
      "const": "synthid"
    },
    "confirmCredits": {
      "type": "boolean"
    },
    "preset": {
      "type": "string",
      "minLength": 1,
      "maxLength": 128
    },
    "filePath": {
      "type": "string"
    },
    "files": {
      "type": "array",
      "minItems": 1,
      "maxItems": 1000,
      "items": {
        "type": "string"
      }
    },
    "driveInputFolder": {
      "type": "string",
      "maxLength": 512
    },
    "driveInputFileIds": {
      "$ref": "#/components/schemas/DriveInputFileIds"
    },
    "outputFolder": {
      "type": "string"
    },
    "driveOutputFolder": {
      "type": "string",
      "maxLength": 512
    },
    "options": {
      "type": "object",
      "properties": {
        "confirmCredits": {
          "type": "boolean"
        }
      }
    }
  },
  "oneOf": [
    {
      "required": [
        "filePath",
        "outputFolder"
      ]
    },
    {
      "required": [
        "filePath",
        "driveOutputFolder"
      ]
    },
    {
      "required": [
        "files",
        "outputFolder"
      ]
    },
    {
      "required": [
        "files",
        "driveOutputFolder"
      ]
    },
    {
      "required": [
        "driveInputFolder",
        "outputFolder"
      ]
    },
    {
      "required": [
        "driveInputFileIds",
        "outputFolder"
      ]
    },
    {
      "required": [
        "driveInputFolder",
        "driveOutputFolder"
      ]
    },
    {
      "required": [
        "driveInputFileIds",
        "driveOutputFolder"
      ]
    }
  ]
}
CreditConfirmation
JSON
{
  "type": "object",
  "description": "Approbation explicite à la racine de la requête ou dans options, selon le runtime. Une approbation absente ou false n’autorise jamais de débit.",
  "anyOf": [
    {
      "required": [
        "confirmCredits"
      ],
      "properties": {
        "confirmCredits": {
          "const": true
        }
      }
    },
    {
      "required": [
        "options"
      ],
      "properties": {
        "options": {
          "type": "object",
          "required": [
            "confirmCredits"
          ],
          "properties": {
            "confirmCredits": {
              "const": true
            }
          }
        }
      }
    }
  ]
}
NetworkConfirmation
JSON
{
  "type": "object",
  "description": "Approbation explicite à la racine de la requête ou dans options, selon le runtime.",
  "anyOf": [
    {
      "required": [
        "confirmExternalNetwork"
      ],
      "properties": {
        "confirmExternalNetwork": {
          "const": true
        }
      }
    },
    {
      "required": [
        "options"
      ],
      "properties": {
        "options": {
          "type": "object",
          "required": [
            "confirmExternalNetwork"
          ],
          "properties": {
            "confirmExternalNetwork": {
              "const": true
            }
          }
        }
      }
    }
  ]
}
CreateJobResponse
JSON
{
  "type": "object",
  "required": [
    "jobId",
    "operation",
    "status",
    "inputFiles",
    "totalOperations",
    "skipped",
    "position"
  ],
  "properties": {
    "jobId": {
      "type": "string"
    },
    "operation": {
      "enum": [
        "spoof",
        "probe",
        "risk-analyzer",
        "convert",
        "reduce",
        "short-maker",
        "captions",
        "download",
        "synthid"
      ]
    },
    "status": {
      "enum": [
        "queued",
        "processing",
        "completed",
        "failed",
        "cancelled"
      ]
    },
    "inputFiles": {
      "type": [
        "integer",
        "null"
      ]
    },
    "batchCount": {
      "type": "integer",
      "default": 1
    },
    "totalOperations": {
      "type": [
        "integer",
        "null"
      ]
    },
    "skipped": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/FileError"
      }
    },
    "position": {
      "type": "integer",
      "minimum": 1
    },
    "drive": {
      "type": [
        "object",
        "null"
      ],
      "additionalProperties": true
    },
    "replayed": {
      "type": "boolean"
    },
    "jobAvailable": {
      "type": "boolean",
      "description": "False lorsqu’un reçu conservé survit à l’historique de sa tâche ; ne jamais relancer implicitement."
    },
    "outcome": {
      "type": [
        "string",
        "null"
      ],
      "enum": [
        "success",
        "partial",
        "failed",
        "cancelled",
        null
      ]
    },
    "error_code": {
      "type": "string"
    },
    "error": {
      "type": "string"
    },
    "execution": {
      "enum": [
        "local",
        "hybrid",
        "network",
        "remote-gpu"
      ]
    },
    "credits": {
      "enum": [
        "none",
        "one-per-transcription",
        "variable"
      ]
    },
    "estimatedCredits": {
      "type": [
        "integer",
        "null"
      ],
      "minimum": 0
    }
  }
}
Job
JSON
{
  "type": "object",
  "required": [
    "jobId",
    "operation",
    "status",
    "preset",
    "progress",
    "createdAt"
  ],
  "additionalProperties": true,
  "properties": {
    "jobId": {
      "type": "string"
    },
    "operation": {
      "enum": [
        "spoof",
        "probe",
        "risk-analyzer",
        "convert",
        "reduce",
        "short-maker",
        "captions",
        "download",
        "synthid"
      ]
    },
    "status": {
      "enum": [
        "queued",
        "processing",
        "completed",
        "failed",
        "cancelled"
      ]
    },
    "outcome": {
      "type": [
        "string",
        "null"
      ],
      "enum": [
        "success",
        "partial",
        "failed",
        "cancelled",
        null
      ]
    },
    "type": {
      "enum": [
        "single",
        "batch"
      ]
    },
    "preset": {
      "type": [
        "string",
        "null"
      ]
    },
    "progress": {
      "type": "object",
      "additionalProperties": true
    },
    "result": {
      "$ref": "#/components/schemas/ProcessingResult"
    },
    "results": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/ProcessingResult"
      }
    },
    "artifacts": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/LocalArtifact"
      }
    },
    "drive": {
      "$ref": "#/components/schemas/DriveJobState"
    },
    "errors": {
      "type": "array",
      "items": {
        "$ref": "#/components/schemas/FileError"
      }
    },
    "error": {
      "type": "string"
    },
    "error_code": {
      "type": "string"
    },
    "createdAt": {
      "type": "string",
      "format": "date-time"
    },
    "startedAt": {
      "type": [
        "string",
        "null"
      ],
      "format": "date-time"
    },
    "completedAt": {
      "type": [
        "string",
        "null"
      ],
      "format": "date-time"
    }
  }
}
LocalArtifact
JSON
{
  "type": "object",
  "required": [
    "resultIndex",
    "artifactIndex",
    "name",
    "localAvailable",
    "downloadUrl"
  ],
  "properties": {
    "resultIndex": {
      "type": "integer",
      "minimum": 0
    },
    "artifactIndex": {
      "type": "integer",
      "minimum": 0
    },
    "name": {
      "type": "string"
    },
    "localAvailable": {
      "type": "boolean"
    },
    "downloadUrl": {
      "type": "string",
      "description": "URL relative ; index sélectionne un résultat du lot et artifact un fichier dans ce résultat."
    }
  }
}
ProcessingResult
JSON
{
  "type": "object",
  "additionalProperties": true,
  "description": "JSON propre à l’opération ; une réussite produisant un fichier nécessite des fichiers existants et non vides. Captions no_speech avec charged false est un résultat vide valide.",
  "properties": {
    "outputPath": {
      "type": [
        "string",
        "null"
      ]
    },
    "files": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "localAvailable": {
      "type": "boolean"
    },
    "outcome": {
      "enum": [
        "success",
        "partial",
        "failed",
        "cancelled"
      ]
    },
    "reason": {
      "type": "string"
    },
    "charged": {
      "type": "boolean"
    },
    "delivery": {
      "$ref": "#/components/schemas/DriveDelivery"
    },
    "processing": {
      "type": "object",
      "additionalProperties": true
    }
  }
}
DriveDelivery
JSON
{
  "type": "object",
  "required": [
    "provider",
    "status",
    "localAvailable"
  ],
  "properties": {
    "provider": {
      "const": "google-drive"
    },
    "status": {
      "enum": [
        "queued",
        "uploading",
        "uploaded",
        "failed",
        "cancelled"
      ]
    },
    "name": {
      "type": "string"
    },
    "fileId": {
      "type": [
        "string",
        "null"
      ]
    },
    "confirmed": {
      "type": "boolean"
    },
    "localAvailable": {
      "const": false
    },
    "recoveryAvailable": {
      "type": "boolean"
    }
  }
}
DriveJobState
JSON
{
  "type": "object",
  "required": [
    "inputFolderId",
    "outputFolderId",
    "uploadResult",
    "uploadError",
    "recovery"
  ],
  "properties": {
    "inputFolderId": {
      "type": [
        "string",
        "null"
      ]
    },
    "outputFolderId": {
      "type": [
        "string",
        "null"
      ]
    },
    "uploadError": {
      "type": [
        "string",
        "null"
      ]
    },
    "uploadResult": {
      "type": [
        "object",
        "null"
      ],
      "properties": {
        "uploaded": {
          "type": "integer",
          "minimum": 0
        },
        "failed": {
          "type": "integer",
          "minimum": 0
        },
        "cancelled": {
          "type": "boolean"
        },
        "receipts": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/DriveDelivery"
          }
        },
        "errors": {
          "type": "array",
          "items": {
            "$ref": "#/components/schemas/FileError"
          }
        }
      }
    },
    "recovery": {
      "type": "object",
      "required": [
        "available"
      ],
      "properties": {
        "available": {
          "type": "boolean"
        },
        "expiresAt": {
          "type": [
            "string",
            "null"
          ],
          "format": "date-time"
        }
      }
    }
  }
}
FileError
JSON
{
  "type": "object",
  "required": [
    "file",
    "error"
  ],
  "properties": {
    "file": {
      "type": "string"
    },
    "error": {
      "type": "string"
    },
    "error_code": {
      "type": "string"
    }
  }
}
ToolDefinition
JSON
{
  "type": "object",
  "required": [
    "operation",
    "label",
    "execution",
    "credits",
    "network",
    "input",
    "output",
    "supportsBatch",
    "supportsDriveInput",
    "supportsDriveOutput",
    "available"
  ],
  "properties": {
    "operation": {
      "type": "string"
    },
    "label": {
      "type": "string"
    },
    "execution": {
      "enum": [
        "local",
        "hybrid",
        "network",
        "remote-gpu"
      ]
    },
    "credits": {
      "enum": [
        "none",
        "one-per-transcription",
        "variable"
      ]
    },
    "network": {
      "type": "boolean"
    },
    "input": {
      "type": "string"
    },
    "output": {
      "enum": [
        "required",
        "none"
      ]
    },
    "supportsBatch": {
      "type": "boolean"
    },
    "supportsDriveInput": {
      "type": "boolean"
    },
    "supportsDriveOutput": {
      "type": "boolean"
    },
    "available": {
      "type": "boolean"
    },
    "unavailableReason": {
      "type": [
        "string",
        "null"
      ]
    },
    "unavailableCode": {
      "type": [
        "string",
        "null"
      ]
    },
    "requiresCreditConfirmation": {
      "type": "boolean"
    },
    "requiresNetworkConfirmation": {
      "type": "boolean"
    },
    "dependsOnPreset": {
      "type": "boolean"
    },
    "creditConfirmationScope": {
      "enum": [
        "paid-presets"
      ]
    },
    "limits": {
      "type": "object",
      "additionalProperties": {
        "type": "integer"
      }
    },
    "pricing": {
      "type": "object",
      "properties": {
        "model": {
          "type": "string"
        },
        "creditsPerSecond": {
          "type": "number"
        },
        "requiresCreditLimit": {
          "type": "boolean"
        },
        "limitField": {
          "type": "string"
        },
        "quotePath": {
          "type": "string"
        }
      }
    }
  }
}
ShortMakerTemplate
JSON
{
  "type": "object",
  "required": [
    "id",
    "name",
    "source"
  ],
  "properties": {
    "id": {
      "type": "string",
      "maxLength": 160
    },
    "name": {
      "type": "string",
      "maxLength": 240
    },
    "source": {
      "enum": [
        "builtin",
        "custom"
      ]
    },
    "duration": {
      "type": [
        "number",
        "null"
      ]
    },
    "description": {
      "type": [
        "string",
        "null"
      ],
      "maxLength": 1000
    }
  }
}
Error
JSON
{
  "type": "object",
  "required": [
    "error",
    "error_code",
    "request_id"
  ],
  "properties": {
    "error": {
      "type": "string"
    },
    "error_code": {
      "type": "string"
    },
    "request_id": {
      "type": [
        "string",
        "null"
      ]
    }
  },
  "additionalProperties": true
}
#/components/responses
BadRequest
JSON
{
  "description": "Requête invalide",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
Unauthorized
JSON
{
  "description": "Clé Bearer absente ou invalide",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
Forbidden
JSON
{
  "description": "Abonnement ou autorisation Team refusé",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
NotFound
JSON
{
  "description": "Route, tâche ou fichier introuvable",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
Conflict
JSON
{
  "description": "Conflit de déduplication",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
PreconditionFailed
JSON
{
  "description": "Google Drive n’est pas configuré ou connecté",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
PayloadTooLarge
JSON
{
  "description": "Limite JSON ou upload dépassée",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
RateLimited
JSON
{
  "description": "Limite de file ou de fréquence d’authentification atteinte",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
UnsupportedMediaType
JSON
{
  "description": "Le multipart n’est pas pris en charge ; envoyez les octets bruts avec X-Filename.",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}
StorageUnavailable
JSON
{
  "description": "Journal des tâches indisponible ou stockage des uploads saturé.",
  "content": {
    "application/json": {
      "schema": {
        "$ref": "#/components/schemas/Error"
      }
    }
  }
}

Si quelque chose ne fonctionne pas

Connection refused

Ouvrez Desktop, activez l’API, appliquez les réglages et vérifiez le port. Gardez Desktop ouvert.

401

Vérifiez la clé API Bearer et mettez vos scripts à jour après application d’une nouvelle clé.

400 / 404

Lisez error_code et vérifiez les chemins, presets, champs, jobId et URL de fichiers. L’historique peut expirer.

403 / 503

Droits refusés ou vérification du compte temporairement indisponible. Lisez retryable et cause_code ; une panne ne signifie pas que l’abonnement est invalide.

409

Une clé de déduplication a été réutilisée avec un corps modifié, la session a changé ou un résultat Drive a été demandé en téléchargement local. Consultez error_code.

412

Connectez Drive et vérifiez /api/v1/drive/status. Chaque fichier ou dossier nécessite un accès.

413 / 415 / 507

JSON ou upload trop volumineux, multipart non pris en charge, journal indisponible ou stockage saturé. Envoyez des octets bruts et respectez les limites installées.

429 / 500

Consultez error_code, Retry-After et la file. Conservez request_id et X-Request-ID pour le support. Gardez la clé d’exécution d’origine si une réponse a été perdue. Ne transmettez jamais vos identifiants.

Besoin d’aide pour votre workflow ?

Le support MetaGhost peut vous aider.

Support