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

# Listar llamadas upstream (debug)

> Inspecciona la línea de tiempo de cada interacción HTTP upstream en una ejecución de debug del autor para diagnosticar.

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

Autenticación: se requiere API key, y solo el autor de la app (publicador) puede llamarlo. Cualquier otro recibe `404`.

Línea de tiempo de llamadas upstream para ejecuciones de debug (`run_kind=test`). En ejecuciones de tipo api, cada interacción HTTP upstream (`submit` / `status` / `fetch`) es una entrada. `summary` agrega el trail completo por (attempt, stage), independiente de la paginación, para ver de un vistazo qué etapa está atascada. `items` solo lleva metadatos; los cuerpos de solicitud y respuesta se cargan bajo demanda desde el endpoint de detalle de una sola llamada.

Solo puedes leer tus propias ejecuciones de debug. Las de otra cuenta, las inexistentes y las **ejecuciones de producción** devuelven `404`. Los valores de credencial y entorno se redactan al escribir; los valores marcados `sensitive` en el contrato de entrada se redactan de nuevo al leer. Las ejecuciones de tipo code no tienen trail HTTP y devuelven una lista vacía.

## Solicitud

### Parámetros de ruta

<ParamField path="run_id" type="string" required>
  Id de la ejecución de debug.
</ParamField>

### Parámetros de consulta

<ParamField query="offset" type="integer" default="0">
  Offset de paginación.

  Rango ≥ 0.
</ParamField>

<ParamField query="limit" type="integer" default="50">
  Tamaño de página.

  Rango 1 a 500.
</ParamField>

<ParamField query="stage" type="string">
  Filtrar a una etapa. `submit` envía el trabajo, `status` consulta el estado, `fetch` recupera datos.

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

### Ejemplo de solicitud

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

## Respuesta

### 200 correcto

```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 carga útil va envuelta en `data`. Campos:

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

<ResponseField name="summary" type="object[]" required>
  Estadísticas agregadas por (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>
  Entradas de metadatos de llamada.

  <Expandable title="fields">
    <ResponseField name="call_id" type="integer" required>
      Id de la entrada. Úsalo para cargar el detalle.
    </ResponseField>

    <ResponseField name="attempt" type="integer" required>
      Número de intento.
    </ResponseField>

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

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

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

    <ResponseField name="url" type="string" required>
      URL de la solicitud (credenciales redactadas).
    </ResponseField>

    <ResponseField name="status_code" type="integer">
      Código de estado de la respuesta upstream.
    </ResponseField>

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

    <ResponseField name="duration_ms" type="integer">
      Duración en milisegundos.
    </ResponseField>

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

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

<ResponseField name="pagination" type="object" required>
  Objeto de paginación.

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

### Errores

| HTTP | `code`                     | `category`  | Descripción                                                                                                                                                                            |
| ---- | -------------------------- | ----------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 401  | `unauthorized`             | `forbidden` | API key ausente o no válida.                                                                                                                                                           |
| 404  | `upstream-calls-not-found` | `not_found` | Solo las ejecuciones de debug (`run_kind=test`) conservan un trail de llamadas upstream. Las ejecuciones de producción, las de otras personas y las inexistentes devuelven este error. |

Las respuestas de error usan `{"error": {code, category, message, retryable}}`. Véase <a href="/docs/es/datahub/api/reference/introduction#errors">Errores</a>.

## Bibliotecas cliente

Los SDK de Python y JavaScript aún no encapsulan este endpoint. Llama a REST directamente.
