> ## Documentation Index
> Fetch the complete documentation index at: https://www.octoparse.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Découper un manifest en dossier de contrat

> Inverse d’assemble : découpe un manifest en jeu de fichiers de dossier de contrat canonique.

**`POST`** `https://api-datahub.octoparse.com/v1/data-apps/contract/split`

Authentification : aucune. Accès anonyme autorisé.

Inverse d’assemble : un manifest autonome → map canonic de fichiers de dossier de contrat (chaque fichier est du texte JSON ; le zip est le travail du client).

Sémantique de split (seule source de vérité) : les clés de read-back injectées par la plateforme (`scope` / `status` / `namespace`) sont retirées ; `input` / `output` enlèvent chacun un wrapper `schema` et `output.id_field` repasse au top level de `output_schema.json` ; `runtime` / `pricing` / `examples` deviennent des fichiers autonomes s’ils sont présents ; un README vide est omis ; le reste va dans `dataapp.json` dans l’ordre d’origine. Réassembler le dossier split peut reproduire le manifest sans warnings. `translations` optionnel (`{source, locales}`) produit aussi `i18n.json`.

## Requête

### Corps de la requête

<ParamField body="manifest" type="object" required>
  Objet manifest.
</ParamField>

<ParamField body="translations" type="object">
  Jeu de traduction optionnel `{source, locales}`.
</ParamField>

### Exemple de requête

```bash theme={null}
curl -X POST \
  -H "Content-Type: application/json" \
  -d '{"manifest": {"spec_version": "0.2", "identity": {"app_name": "reviews-query"}, "…": "…"}}' \
  "https://api-datahub.octoparse.com/v1/data-apps/contract/split"
```

## Réponse

### 200 succès

```json theme={null}
{
  "data": {
    "files": {
      "dataapp.json": "{\n  \"spec_version\": \"0.2\",\n  …",
      "input_schema.json": "{…}",
      "output_schema.json": "{…}",
      "runtime.json": "{…}",
      "pricing.json": "{…}",
      "examples.json": "[…]"
    },
    "warnings": []
  }
}
```

La charge utile est encapsulée dans `data`. Champs :

<ResponseField name="files" type="object">
  Map de fichiers. Clés = noms de fichiers ; valeurs = texte JSON.
</ResponseField>

<ResponseField name="folder_name" type="string">
  —
</ResponseField>

## Bibliothèques clientes

Les SDK Python et JavaScript n’encapsulent pas encore cet endpoint. Appelez REST directement.
