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

# Upstream-Calls listen (Debug-Runs)

> Zeitlinie jeder Upstream-HTTP-Interaktion in einem Autor-Debug-Run zur Fehlersuche prüfen.

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

Authentifizierung: API-Schlüssel erforderlich; nur der App-Autor (Publisher) darf aufrufen. Alle anderen erhalten `404`.

Upstream-Call-Zeitlinie für Debug-Runs (`run_kind=test`). Bei api-type-Runs ist jede Upstream-HTTP-Interaktion (`submit` / `status` / `fetch`) ein Eintrag. `summary` aggregiert den vollen Trail nach (attempt, stage), unabhängig von der Paginierung, damit Sie auf einen Blick sehen welche Stage hängt. `items` trägt nur Metadaten; Request- und Response-Bodies werden on demand vom Single-Call-Detail-Endpoint geladen.

Sie können nur Ihre eigenen Debug-Runs lesen. Runs eines anderen Kontos, fehlende Runs und **Produktions-Runs** liefern alle `404`. Credential- und Umgebungswerte werden beim Schreiben geschwärzt; im Eingabevertrag als `sensitive` markierte Werte werden beim Lesen erneut geschwärzt. Runs vom Typ Code haben keinen HTTP-Trail und liefern eine leere Liste.

## Anfrage

### Pfadparameter

<ParamField path="run_id" type="string" required>
  Debug-Run-ID.
</ParamField>

### Abfrageparameter

<ParamField query="offset" type="integer" default="0">
  Paginierungs-Offset.

  Bereich ≥ 0.
</ParamField>

<ParamField query="limit" type="integer" default="50">
  Seitengröße.

  Bereich 1 bis 500.
</ParamField>

<ParamField query="stage" type="string">
  Auf eine Stufe filtern. `submit` reicht Arbeit ein, `status` fragt den Status ab, `fetch` ruft Daten ab.

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

### Beispielanfrage

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

## Antwort

### 200 Erfolg

```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
    }
  }
}
```

Payload ist in `data` gewrappt. Felder:

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

<ResponseField name="summary" type="object[]" required>
  Statistiken, aggregiert nach (Versuch, Stufe).

  <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>
  Einträge mit Aufruf-Metadaten.

  <Expandable title="fields">
    <ResponseField name="call_id" type="integer" required>
      Eintrags-ID. Verwenden Sie sie, um die Details zu laden.
    </ResponseField>

    <ResponseField name="attempt" type="integer" required>
      Versuchnummer.
    </ResponseField>

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

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

    <ResponseField name="method" type="string" required>
      HTTP-Methode.
    </ResponseField>

    <ResponseField name="url" type="string" required>
      Request-URL (Credentials redacted).
    </ResponseField>

    <ResponseField name="status_code" type="integer">
      Statuscode der Upstream-Antwort.
    </ResponseField>

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

    <ResponseField name="duration_ms" type="integer">
      Dauer in Millisekunden.
    </ResponseField>

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

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

<ResponseField name="pagination" type="object" required>
  Paginierungsobjekt.

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

### Fehler

| HTTP | `code`                     | `category`  | Beschreibung                                                                                                                                                 |
| ---- | -------------------------- | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| 401  | `unauthorized`             | `forbidden` | Fehlender oder ungültiger API-Schlüssel.                                                                                                                     |
| 404  | `upstream-calls-not-found` | `not_found` | Nur Debug-Runs (`run_kind=test`) behalten einen Upstream-Aufruf-Trail. Produktions-Runs, Runs anderer Personen und fehlende Runs liefern alle diesen Fehler. |

Fehlerantworten nutzen `{"error": {code, category, message, retryable}}`. Siehe <a href="/docs/de/datahub/api/reference/introduction#errors">Fehler</a>.

## Client-Bibliotheken

Die Python- und JavaScript-SDKs wrappen diesen Endpoint noch nicht. REST direkt aufrufen.
