> ## 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 détail d’appel upstream

> Lit la charge utile complète de requête et de réponse d’un appel upstream.

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

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

Capture complète d’une entrée du trail : requête (query / body) et corps de réponse. Les corps de réponse trop volumineux sont tronqués à l’écriture ; voir `response_truncated`. Les règles d’auth correspondent à l’endpoint de liste.

## Requête

### Paramètres de chemin

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

<ParamField path="call_id" type="integer" required>
  Id d’entrée du trail depuis `items[].call_id` sur l’endpoint de liste.
</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/1"
```

## Réponse

### 200 succès

```json theme={null}
{
  "data": {
    "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",
    "request": {},
    "response_body": "string"
  }
}
```

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

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

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

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

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

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

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

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

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

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

<ResponseField name="response_truncated" type="boolean">
  Si le corps de la réponse a été tronqué à l’écriture.
</ResponseField>

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

<ResponseField name="request" type="object">
  Contenu de la requête (query / headers / body ; valeurs sensibles expurgées).
</ResponseField>

<ResponseField name="response_body" type="string">
  Corps de la réponse upstream.
</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.
