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

# Rechercher des Data Apps

> Recherche des Data Apps par mot-clé et renvoie des cartes.

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

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

Recherche marché. L’accès anonyme est autorisé. Avec un `q` vide, les résultats sont triés par date de publication la plus récente. Avec un `q` non vide, ils sont triés par pertinence.

Avec une clé API vous obtenez deux extensions :

* **Changement de vue** : `owner=me` liste les apps que vous avez publiées (y compris les brouillons non publiés ; les cartes incluent `status` et `scope`). `shared_with=me` liste les apps partagées avec vous en point à point.
* **Portée de visibilité** : sans changement de vue, `scope` contrôle l’ensemble candidat. La valeur par défaut ou `public` est le marché ; `private` sont vos apps privées ; `shared` est toute app visible par partage (partagées par vous et avec vous) ; `all` est tout ce qui est visible pour l’identifiant actuel, et anonymement cela se dégrade naturellement au marché. En mode attribut, `status` par défaut ne retient que les apps publiées.

Les cartes n’emportent que le nécessaire pour choisir : nom, résumé, limite de capacité, indices d’entrée/sortie, mode d’exécution, prix de départ et grille tarifaire. Les contrats complets d’entrée/sortie, le profil d’exécution et les échantillons d’appel viennent de <a href="/docs/fr/datahub/api/reference/discovery/get-data-app">Détail de l’app</a>.

## Requête

### Paramètres de requête

<ParamField query="q" type="string">
  Mots-clés métier dans n’importe quelle langue. Ajoutez un nom de plateforme pour restreindre la plage (par exemple `temu reviews`). Vide liste le catalogue.
</ParamField>

<ParamField query="type" type="string">
  Filtre par type d’app. `data` récupère des données externes ; `transform` traite des données existantes.

  Valeurs : `data` / `transform`.
</ParamField>

<ParamField query="capability" type="string">
  Filtre par capacité. `data-acquisition` acquiert des données ; `data-processing` traite des données.

  Valeurs : `data-acquisition` / `data-processing`.
</ParamField>

<ParamField query="owner" type="string">
  Passez `me` pour basculer vers la vue « apps que j’ai publiées ». Nécessite une clé API.
</ParamField>

<ParamField query="shared_with" type="string">
  Passez `me` pour basculer vers la vue « apps partagées avec moi ». Nécessite une clé API.
</ParamField>

<ParamField query="scope" type="string">
  Portée de visibilité. `public` est le marché (par défaut), `private` sont vos apps privées, `shared` sont les apps dans une relation de partage, `all` est l’ensemble visible complet. Les trois derniers nécessitent une clé API.

  Valeurs : `public` / `private` / `shared` / `all`.
</ParamField>

<ParamField query="status" type="string">
  Filtre par statut du cycle de vie. `draft`, `published` ou `deprecated`. Le mode attribut utilise `published` par défaut.

  Valeurs : `draft` / `published` / `deprecated`.
</ParamField>

<ParamField query="offset" type="integer" default="0">
  Décalage de pagination.

  Plage ≥ 0.
</ParamField>

<ParamField query="limit" type="integer" default="5">
  Taille de page.

  Plage 1 à 100.
</ParamField>

### Exemple de requête

```bash theme={null}
curl \
  -H "Authorization: Bearer $OCTOPARSE_API_KEY" \
  "https://api-datahub.octoparse.com/v1/data-apps?q=reviews&limit=5"
```

## Réponse

### 200 succès

```json theme={null}
{
  "data": {
    "items": [
      {
        "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",
        "required_input_hint": [
          "product"
        ],
        "main_output_hint": [
          "review_id",
          "content",
          "rating"
        ],
        "execution_mode": "sync",
        "price_from": 0.001,
        "pricing": {
          "events": [
            {
              "event": "record",
              "label": "One record",
              "unit_price": 0.001,
              "qty_from": "",
              "unit_size": null
            }
          ]
        },
        "match_score": 1.0,
        "published_at": "2026-09-15T07:45:38.633930+00:00",
        "updated_at": "2026-09-15T07:45:38.633930+00:00",
        "source_locale": "en-US"
      }
    ],
    "pagination": {
      "offset": 0,
      "limit": 5,
      "count": 1,
      "total": 1,
      "has_more": false
    },
    "low_confidence": false
  }
}
```

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

<ResponseField name="items" type="object[]" required>
  Liste de cartes.
</ResponseField>

<ResponseField name="pagination" type="object" required>
  Objet de pagination.

  <Expandable title="fields">
    <ResponseField name="offset" type="integer">
      —
    </ResponseField>

    <ResponseField name="limit" type="integer">
      —
    </ResponseField>

    <ResponseField name="count" type="integer">
      —
    </ResponseField>

    <ResponseField name="total" type="integer">
      —
    </ResponseField>

    <ResponseField name="has_more" type="boolean">
      —
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="low_confidence" type="boolean">
  `true` lorsqu’il n’y a pas assez de correspondances fortes et que l’ensemble renvoyé est faible.
</ResponseField>

### Erreurs

| HTTP | `code`         | `category`  | Description                    |
| ---- | -------------- | ----------- | ------------------------------ |
| 401  | `unauthorized` | `forbidden` | Clé API manquante ou invalide. |

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}
  result = client.search("reviews", limit=5)
  for card in result["items"]:
      print(card["app_id"], card["namespace"], card["app_name"], card["price_from"])

  # Apps shared with me
  shared = client.search("", shared_with="me")
  ```

  ```js JavaScript theme={null}
  const result = await client.search("reviews", { limit: 5 });
  for (const card of result.items) {
    console.log(card.app_id, card.namespace, card.app_name, card.price_from);
  }

  // Apps shared with me
  const shared = await client.search("", { sharedWith: "me" });
  ```
</CodeGroup>
