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

# Lister les exécutions éditeur

> Chaque appel contre les apps que vous avez publiées. Champs autorisés seulement — pas d’entrée, résultats ni identité appelant.

**`GET`** `https://api-datahub.octoparse.com/v1/publisher/runs`

Authentification : clé API requise (`Authorization: Bearer <API Key>`).

Chaque appel contre les apps que vous avez publiées, le plus récent d’abord. C’est la surface de détail derrière les agrégats d’usage éditeur : champs whitelist seulement — pas d’entrée, résultats ni identité appelant.

C’est une **vue whitelist**, pas l’objet d’exécution de l’appelant : elle dit ce qui s’est passé (état, usage, facturation, avertissements) sans exposer l’entrée de l’appelant, les enregistrements de résultat ni l’identité de l’appelant.

## Requête

### Paramètres de requête

<ParamField query="data_app" type="string[]">
  Limiter à ces apps. Répétable.
</ParamField>

<ParamField query="status" type="string">
  État d’exécution. Multi-valeurs séparées par des virgules.
</ParamField>

<ParamField query="triggered_by" type="string">
  Limiter à un canal d’appel.
</ParamField>

<ParamField query="version" type="string">
  Limiter aux exécutions épinglées à cette version de release.
</ParamField>

<ParamField query="error_code" type="string">
  Limiter aux exécutions dont le code d’erreur égale cette valeur (`error_code` de l’usage éditeur `group_by=error`).
</ParamField>

<ParamField query="run_kind" type="string" default="production">
  `production` (défaut) trafic de production seulement ; `test` vos débogages seulement ; `all` les deux.
</ParamField>

<ParamField query="created_from" type="string">
  Début inclusif.
</ParamField>

<ParamField query="created_to" type="string">
  Fin exclusive.
</ParamField>

<ParamField query="offset" type="integer" default="0">
  Offset de pagination.

  Plage ≥ 0.
</ParamField>

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

  Plage de 1 à 200.
</ParamField>

### Exemple de requête

```bash theme={null}
curl \
  -H "Authorization: Bearer $OCTOPARSE_API_KEY" \
  "https://api-datahub.octoparse.com/v1/publisher/runs?data_app=carol/reviews-query&status=FAILED&limit=50"
```

## Réponse

### 200 succès

```json theme={null}
{
  "data": {
    "items": [
      {
        "run_id": "run_3b750088f51c",
        "namespace": "carol",
        "app_name": "probe-b",
        "app_version": "0.1.0",
        "build_id": null,
        "run_kind": "production",
        "state": "SUCCEEDED",
        "partial": false,
        "triggered_by": "api",
        "created_at": "2026-09-15T07:45:41.876601+00:00",
        "started_at": "2026-09-15T07:45:41.883082+00:00",
        "finished_at": "2026-09-15T07:45:42.326823+00:00",
        "duration_ms": 443,
        "records": 20,
        "amount": 0.02,
        "error": null
      },
      "…"
    ],
    "pagination": {
      "offset": 0,
      "limit": 2,
      "count": 2,
      "total": 2,
      "has_more": false
    },
    "currency": "CNY"
  }
}
```

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

<ResponseField name="items" type="object[]" required>
  Liste des exécutions.

  <Expandable title="champs">
    <ResponseField name="run_id" type="string" required>
      Id de l’exécution.
    </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="app_version" type="string">
      Version de release épinglée.
    </ResponseField>

    <ResponseField name="build_id" type="string">
      Snapshot de build auquel une exécution de débogage était épinglée ; `null` en production.
    </ResponseField>

    <ResponseField name="run_kind" type="string">
      Type d’exécution (`production` / `test`, etc.).
    </ResponseField>

    <ResponseField name="state" type="enum" required>
      État d’exécution. Valeurs : `PENDING` / `QUEUED` / `RUNNING` / `SUCCEEDED` / `PARTIALLY_SUCCEEDED` / `FAILED` / `CANCELLED` / `EXPIRED`.
    </ResponseField>

    <ResponseField name="partial" type="boolean">
      Si l’exécution a partiellement réussi ou a été annulée avec sortie partielle.
    </ResponseField>

    <ResponseField name="triggered_by" type="string">
      Canal d’appel.
    </ResponseField>

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

    <ResponseField name="started_at" type="string">
      Heure de début de l’exécution.
    </ResponseField>

    <ResponseField name="finished_at" type="string">
      Heure de fin de l’exécution.
    </ResponseField>

    <ResponseField name="duration_ms" type="integer">
      Durée d’exécution en millisecondes.
    </ResponseField>

    <ResponseField name="records" type="integer">
      Enregistrements réécrits.
    </ResponseField>

    <ResponseField name="amount" type="number">
      Frais de données payés par l’appelant.
    </ResponseField>

    <ResponseField name="error" type="object">
      Objet d’erreur en cas d’échec.

      <Expandable title="champs">
        <ResponseField name="code" type="string" required>
          Code d’erreur stable.
        </ResponseField>

        <ResponseField name="category" type="string">
          Catégorie d’erreur.
        </ResponseField>

        <ResponseField name="message" type="string">
          Message destiné au développeur.
        </ResponseField>

        <ResponseField name="retryable" type="boolean">
          Si un nouvel essai de la même requête peut réussir.
        </ResponseField>
      </Expandable>
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="pagination" type="object">
  Infos de pagination.

  <Expandable title="champs">
    <ResponseField name="offset" type="integer">
      Offset demandé.
    </ResponseField>

    <ResponseField name="limit" type="integer">
      Taille de page demandée.
    </ResponseField>

    <ResponseField name="count" type="integer">
      Nombre d’éléments dans cette page.
    </ResponseField>

    <ResponseField name="total" type="integer">
      Total filtré.
    </ResponseField>

    <ResponseField name="has_more" type="boolean">
      S’il reste des pages.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="currency" type="string">
  Devise de `amount`.
</ResponseField>

### Erreurs

| HTTP | `code`             | `category`      | Description                                                                                                     |
| ---- | ------------------ | --------------- | --------------------------------------------------------------------------------------------------------------- |
| 401  | `unauthorized`     | `forbidden`     | Clé API manquante ou invalide.                                                                                  |
| 400  | `invalid-status`   | `invalid_input` | `status` contient une valeur hors vocabulaire.                                                                  |
| 400  | `invalid-run-kind` | `invalid_input` | `run_kind` n’est pas une valeur autorisée.                                                                      |
| 404  | `app-not-found`    | `not_found`     | L’app n’existe pas, a été renommée, ou est invisible pour la credential actuelle (hors portée privée/partagée). |

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.
