> ## 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 appels upstream (debug)

> Inspecte la chronologie de chaque interaction HTTP upstream d’une exécution de debug de l’auteur pour le diagnostic.

**`GET`** `https://api-datahub.octoparse.com/v1/runs/{run_id}/upstream-calls`

Authentification : clé API requise, et seul l’auteur de l’app (éditeur) peut l’appeler. Toute autre personne reçoit `404`.

Chronologie des appels upstream pour les exécutions de debug (`run_kind=test`). Pour les runs de type api, chaque interaction HTTP upstream (`submit` / `status` / `fetch`) est une entrée. `summary` agrège le trail complet par (attempt, stage), indépendamment de la pagination, pour voir d’un coup d’œil quelle étape est bloquée. `items` ne porte que des métadonnées ; les corps de requête et de réponse se chargent à la demande depuis l’endpoint de détail d’un appel.

Vous ne pouvez lire que vos propres exécutions de debug. Celles d’un autre compte, les exécutions manquantes et les **exécutions de production** renvoient toutes `404`. Les valeurs de credential et d’environnement sont expurgées à l’écriture ; les valeurs marquées `sensitive` dans le contrat d’entrée sont expurgées à nouveau à la lecture. Les runs de type code n’ont pas de trail HTTP et renvoient une liste vide.

## Requête

### Paramètres de chemin

<ParamField path="run_id" type="string" required>
  Id de l’exécution de debug.
</ParamField>

### Paramètres de requête

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

  Plage ≥ 0.
</ParamField>

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

  Plage 1 à 500.
</ParamField>

<ParamField query="stage" type="string">
  Filtrer sur une étape. `submit` soumet le travail, `status` interroge le statut, `fetch` récupère les données.

  Valeurs : `submit` / `status` / `fetch`.
</ParamField>

### Exemple de requête

```bash theme={null}
curl \
  -H "Authorization: Bearer $OCTOPARSE_API_KEY" \
  "https://api-datahub.octoparse.com/v1/runs/run_c62bc0fb8df2/upstream-calls"
```

## Réponse

### 200 succès

```json theme={null}
{
  "data": {
    "run_id": "string",
    "summary": [
      {
        "attempt": 0,
        "stage": "string",
        "calls": 0,
        "last_status_code": 0,
        "last_error": "string",
        "duration_ms_sum": 0,
        "first_at": "string",
        "last_at": "string"
      }
    ],
    "items": [
      {
        "call_id": 0,
        "attempt": 0,
        "seq": 0,
        "stage": "string",
        "method": "string",
        "url": "string",
        "status_code": 0,
        "error": "string",
        "duration_ms": 0,
        "response_truncated": false,
        "created_at": "string"
      }
    ],
    "pagination": {
      "offset": 0,
      "limit": 0,
      "count": 0,
      "total": 0,
      "has_more": false
    }
  }
}
```

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

<ResponseField name="run_id" type="string" required>
  —
</ResponseField>

<ResponseField name="summary" type="object[]" required>
  Stats agrégées par (attempt, stage).

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

    <ResponseField name="stage" type="string" required>
      —
    </ResponseField>

    <ResponseField name="calls" type="integer" required>
      —
    </ResponseField>

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

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

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

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

    <ResponseField name="last_at" type="string">
      —
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="items" type="object[]" required>
  Entrées de métadonnées d’appel.

  <Expandable title="fields">
    <ResponseField name="call_id" type="integer" required>
      Id de l’entrée. Utilisez-le pour charger le détail.
    </ResponseField>

    <ResponseField name="attempt" type="integer" required>
      Numéro de tentative.
    </ResponseField>

    <ResponseField name="seq" type="integer" required>
      —
    </ResponseField>

    <ResponseField name="stage" type="string" required>
      Étape.
    </ResponseField>

    <ResponseField name="method" type="string" required>
      Méthode HTTP.
    </ResponseField>

    <ResponseField name="url" type="string" required>
      URL de la requête (credentials expurgées).
    </ResponseField>

    <ResponseField name="status_code" type="integer">
      Code de statut de la réponse upstream.
    </ResponseField>

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

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

    <ResponseField name="response_truncated" type="boolean">
      —
    </ResponseField>

    <ResponseField name="created_at" type="string" required>
      —
    </ResponseField>
  </Expandable>
</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>

### Erreurs

| HTTP | `code`                     | `category`  | Description                                                                                                                                                                                       |
| ---- | -------------------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 401  | `unauthorized`             | `forbidden` | Clé API manquante ou invalide.                                                                                                                                                                    |
| 404  | `upstream-calls-not-found` | `not_found` | Seules les exécutions de debug (`run_kind=test`) conservent un trail d’appels upstream. Les exécutions de production, celles d’autrui et les exécutions manquantes renvoient toutes cette erreur. |

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.
