> ## 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.

# Dividir un manifest en carpeta de contrato

> Inverso de assemble: divide un manifest en el juego canónico de archivos de contrato.

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

Autenticación: ninguna. Acceso anónimo permitido.

Inverso de assemble: un manifest autocontenido → mapa canónico de archivos de carpeta de contrato (cada archivo es texto JSON; el zip lo hace el cliente).

Semántica de split (única fuente de verdad): se eliminan claves de read-back inyectadas por la plataforma (`scope` / `status` / `namespace`); `input` / `output` quitan cada uno un wrapper `schema` y `output.id_field` vuelve al nivel superior de `output_schema.json`; `runtime` / `pricing` / `examples` pasan a archivos independientes cuando existen; un README vacío se omite; el resto de claves va a `dataapp.json` en el orden original. Reensamblar la carpeta split puede reproducir el manifest sin avisos. `translations` opcional (`{source, locales}`) además produce `i18n.json`.

## Solicitud

### Cuerpo de la solicitud

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

<ParamField body="translations" type="object">
  Conjunto de traducción opcional `{source, locales}`.
</ParamField>

### Ejemplo de solicitud

```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"
```

## Respuesta

### 200 correcto

```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 carga útil va envuelta en `data`. Campos:

<ResponseField name="files" type="object">
  Mapa de archivos. Claves = nombres de archivo; valores = texto JSON.
</ResponseField>

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

## Bibliotecas cliente

Los SDK de Python y JavaScript aún no encapsulan este endpoint. Llame a REST directamente.
