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

# Obtenir le workspace

> Relire le texte brut du brouillon, fichiers, révision et résultat de validation pour continuer l’édition.

**`GET`** `https://api-datahub.octoparse.com/v1/data-apps/{app_id}/workspace`

Authentification : clé API requise (`Authorization: Bearer <API Key>`). Auteur de l’app uniquement ; les autres reçoivent `404`.

Manifest brut, fichiers joints, révision et résultat de validation actuel — source de rechargement pour « continuer l’édition ».

Sans brouillon renvoie `404 workspace-not-found`. État normal du chemin principal (nouvelle app, ou brouillon jeté après publication), pas une faute.

## Requête

### Paramètres de chemin

<ParamField path="app_id" type="string" required>
  Référence d’app.
</ParamField>

### Exemple de requête

```bash theme={null}
curl \
  -H "Authorization: Bearer $OCTOPARSE_API_KEY" \
  "https://api-datahub.octoparse.com/v1/data-apps/carol/reviews-query/workspace"
```

## Réponse

### 200 succès

```json theme={null}
{
  "data": {
    "app_name": "probe-b",
    "app_id": "app_6dfe4e839ccf",
    "namespace": "carol",
    "manifest": "\nspec_version: \"0.2\"\nidentity:\n  app_name: probe-b\n  name: Runs list probe source\n  summary: Test app for runs list pagination and filters\n  type: data\n  version:…",
    "files": {},
    "revision": 1,
    "valid": true,
    "issues": [],
    "content_hash": "267d174fa14b05d66608cbd8315242f4b0f5b0b62a5fd94ffa852ee6cf62f978",
    "created_at": "2026-09-15T07:45:38.574191+00:00",
    "updated_at": "2026-09-15T07:45:38.574191+00:00"
  }
}
```

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

<ResponseField name="app_name" type="string" required>
  Nom de l’app.
</ResponseField>

<ResponseField name="app_id" type="string" required>
  Id d’app stable.
</ResponseField>

<ResponseField name="namespace" type="string">
  Nom d’utilisateur de l’éditeur.
</ResponseField>

<ResponseField name="manifest" type="string" required>
  Texte brut du manifest.
</ResponseField>

<ResponseField name="files" type="object">
  Fichiers joints.
</ResponseField>

<ResponseField name="revision" type="integer" required>
  Révision du brouillon pour `expected_revision` à l’enregistrement.
</ResponseField>

<ResponseField name="valid" type="boolean" required>
  Si la validation a réussi.
</ResponseField>

<ResponseField name="issues" type="object[]">
  Liste des problèmes.

  <Expandable title="champs">
    <ResponseField name="path" type="string" required>
      —
    </ResponseField>

    <ResponseField name="message" type="string" required>
      —
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="content_hash" type="string">
  Hash de contenu ; correspond au `content_hash` d’un Build.
</ResponseField>

<ResponseField name="created_at" type="string">
  Heure de création.
</ResponseField>

<ResponseField name="updated_at" type="string">
  Heure du dernier enregistrement.
</ResponseField>

### Erreurs

| HTTP | `code`                | `category`  | Description                                                                              |
| ---- | --------------------- | ----------- | ---------------------------------------------------------------------------------------- |
| 401  | `unauthorized`        | `forbidden` | Clé API manquante ou invalide.                                                           |
| 404  | `workspace-not-found` | `not_found` | Cette app n’a pas de brouillon en cours. État normal du chemin principal, pas une faute. |

Les réponses d’erreur utilisent `{"error": {code, category, message, retryable}}`. Voir <a href="/docs/fr/datahub/api/reference/introduction#errors">Erreurs</a>.

## Bibliothèques clientes

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