> ## 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étail de l’app

> Lit la description complète lisible par machine d’une Data App : contrats d’entrée/sortie, profil d’exécution, tarifs, exemples et échantillons d’appel.

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

Authentification : facultative. L’accès anonyme fonctionne ; avec une clé API vous débloquez les filtres connectés et davantage de contenu.

Détail autonome lisible par machine : contrat d’entrée et structure de sortie (JSON Schema), mode d’exécution, tarifs, connaissances d’usage, exemples d’entrée et échantillons d’appel MCP / REST / CLI / SDK. Par défaut, la dernière version ; passez `version` pour lire un contrat historique.

La visibilité suit la porte d’exécution : les apps publiques sont lisibles anonymement ; les privées uniquement par l’auteur ; les partagées uniquement par la liste de grants. Invisible et manquant renvoient tous deux `404` sans révéler l’existence.

## Requête

### Paramètres de chemin

<ParamField path="app_id" type="string" required>
  Référence d’app : `app_<hex>` ou `<namespace>/<app_name>`.
</ParamField>

### Paramètres de requête

<ParamField query="version" type="string">
  Lit un contrat historique par version. Par défaut, la dernière version.
</ParamField>

### Exemple de requête

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

## Réponse

### 200 succès

```json theme={null}
{
  "data": {
    "app_id": "app_6dfe4e839ccf",
    "namespace": "carol",
    "app_name": "probe-b",
    "name": "Product review lookup",
    "type": "data",
    "summary": "Fetch a review list by product id",
    "capability": "data-acquisition",
    "keywords": [
      "reviews",
      "ecommerce"
    ],
    "boundary": "Public reviews only; buyer-show images are not included",
    "version": "0.1.0",
    "published_at": "2026-09-15T07:45:38.633930+00:00",
    "status": "published",
    "scope": "public",
    "accepting_runs": true,
    "source_locale": "en-US",
    "input_schema": {
      "type": "object",
      "properties": {
        "product": {
          "type": "string",
          "description": "Product id"
        }
      },
      "required": [
        "product"
      ],
      "additionalProperties": false
    },
    "output_schema": {
      "id_field": "review_id",
      "record": {
        "type": "object",
        "properties": {
          "review_id": {
            "type": "string"
          },
          "content": {
            "type": "string"
          },
          "rating": {
            "type": "integer"
          }
        }
      }
    },
    "execution": {
      "mode": "sync",
      "timeout_seconds": 60,
      "cancel_notify": false,
      "recovers_partial_on_cancel": false
    },
    "knowledge": {
      "when_to_use": [
        "When you need every public review for a product"
      ],
      "when_not_to_use": [
        "When you need buyer images or video"
      ],
      "failure_handling": [
        "Delisted products return an empty result instead of an error"
      ]
    },
    "pricing": {
      "events": [
        {
          "event": "record",
          "label": "One record",
          "unit_price": 0.001,
          "qty_from": "",
          "unit_size": null
        }
      ]
    },
    "examples": [
      {
        "name": "Basic query",
        "input": {
          "product": "p-9001"
        }
      }
    ],
    "call_examples": {
      "mcp": "…",
      "api": "curl -X POST 'https://api-datahub.octoparse.com/v1/data-apps/carol/probe-b/runs' …",
      "cli": "op run carol/probe-b --input '{\"product\": \"p-9001\"}'",
      "sdk": "from octoparse_client import Client …"
    }
  }
}
```

La réponse est un objet libre (uniquement additif à mesure que le spec du manifest évolue). Les champs ci-dessous sont les stables.

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

<ResponseField name="app_id" type="string">
  Identifiant stable de l’app.
</ResponseField>

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

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

<ResponseField name="version" type="string">
  Version dont le contrat est représenté par cette réponse.
</ResponseField>

<ResponseField name="status" type="string">
  Statut du cycle de vie.
</ResponseField>

<ResponseField name="scope" type="string">
  Portée de visibilité.
</ResponseField>

<ResponseField name="accepting_runs" type="boolean">
  Indique si l’app accepte de nouvelles exécutions.
</ResponseField>

<ResponseField name="input_schema" type="object">
  Contrat d’entrée en JSON Schema standard. Le corps de start-run doit le satisfaire.
</ResponseField>

<ResponseField name="output_schema" type="object">
  Structure de sortie. `id_field` est la clé primaire d’enregistrement ; `record` est le JSON Schema par enregistrement.
</ResponseField>

<ResponseField name="execution" type="object">
  Profil d’exécution. `mode` vaut `sync` / `async` ; `timeout_seconds` est la borne supérieure par run.
</ResponseField>

<ResponseField name="knowledge" type="object">
  Connaissances d’usage : quand l’utiliser, quand ne pas l’utiliser et gestion des échecs.
</ResponseField>

<ResponseField name="pricing" type="object">
  Grille tarifaire.
</ResponseField>

<ResponseField name="examples" type="object[]">
  Exemples d’entrée. Préférez-les comme point de départ des corps de requête.
</ResponseField>

<ResponseField name="call_examples" type="object">
  Échantillons d’appel rendus pour quatre surfaces (`mcp` / `api` / `cli` / `sdk`).
</ResponseField>

### Erreurs

| HTTP | `code`          | `category`  | Description                                                                                                         |
| ---- | --------------- | ----------- | ------------------------------------------------------------------------------------------------------------------- |
| 401  | `unauthorized`  | `forbidden` | Clé API manquante ou invalide.                                                                                      |
| 404  | `app-not-found` | `not_found` | L’app n’existe pas, a été renommée ou est invisible pour l’identifiant actuel (privée / hors périmètre de partage). |

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

<CodeGroup>
  ```python Python theme={null}
  detail = client.get_app("carol/probe-b")      # or app_id
  print(detail["input_schema"], detail["pricing"])
  ```

  ```js JavaScript theme={null}
  const detail = await client.getApp("carol/probe-b");   // or app_id
  console.log(detail.input_schema, detail.pricing);
  ```
</CodeGroup>
