> ## 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 ejecuciones del publicador

> Cada llamada contra apps que publicó. Solo campos en lista blanca—sin entrada, resultados ni identidad del llamador.

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

Autenticación: se requiere API key (`Authorization: Bearer <API Key>`).

Cada llamada contra apps que publicó, la más reciente primero. Esta es la superficie de detalle detrás de los agregados de uso del publicador: campos de lista blanca solamente—sin entrada, resultados ni identidad del llamador.

Esta es una **vista de lista blanca**, no el objeto de ejecución del llamador: le dice qué ocurrió (estado, uso, facturación, avisos) sin exponer la entrada del llamador, los registros de resultado ni la identidad del llamador.

## Solicitud

### Parámetros de consulta

<ParamField query="data_app" type="string[]">
  Limitar a estas apps. Repetible.
</ParamField>

<ParamField query="status" type="string">
  Estado de ejecución. Multivalor separado por comas.
</ParamField>

<ParamField query="triggered_by" type="string">
  Limitar a un canal de llamada.
</ParamField>

<ParamField query="version" type="string">
  Limitar a ejecuciones fijadas a esta versión de release.
</ParamField>

<ParamField query="error_code" type="string">
  Limitar a ejecuciones cuyo código de error sea este valor (el `error_code` de uso del publicador `group_by=error`).
</ParamField>

<ParamField query="run_kind" type="string" default="production">
  `production` (predeterminado) solo tráfico de producción; `test` solo sus depuraciones; `all` ambos.
</ParamField>

<ParamField query="created_from" type="string">
  Inicio inclusivo.
</ParamField>

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

<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 de 1 a 200.
</ParamField>

### Ejemplo de solicitud

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

## Respuesta

### 200 correcto

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

<ResponseField name="items" type="object[]" required>
  Lista de ejecuciones.

  <Expandable title="campos">
    <ResponseField name="run_id" type="string" required>
      Id de la ejecución.
    </ResponseField>

    <ResponseField name="namespace" type="string">
      Nombre de usuario del publicador.
    </ResponseField>

    <ResponseField name="app_name" type="string">
      Nombre de la app.
    </ResponseField>

    <ResponseField name="app_version" type="string">
      Versión de release fijada.
    </ResponseField>

    <ResponseField name="build_id" type="string">
      Snapshot de build al que se fijó una ejecución de depuración; `null` en producción.
    </ResponseField>

    <ResponseField name="run_kind" type="string">
      Tipo de ejecución (`production` / `test`, etc.).
    </ResponseField>

    <ResponseField name="state" type="enum" required>
      Estado de ejecución. Valores: `PENDING` / `QUEUED` / `RUNNING` / `SUCCEEDED` / `PARTIALLY_SUCCEEDED` / `FAILED` / `CANCELLED` / `EXPIRED`.
    </ResponseField>

    <ResponseField name="partial" type="boolean">
      Si la ejecución tuvo éxito parcial o se canceló con salida parcial.
    </ResponseField>

    <ResponseField name="triggered_by" type="string">
      Canal de llamada.
    </ResponseField>

    <ResponseField name="created_at" type="string">
      Hora de creación de la ejecución.
    </ResponseField>

    <ResponseField name="started_at" type="string">
      Hora de inicio de la ejecución.
    </ResponseField>

    <ResponseField name="finished_at" type="string">
      Hora de fin de la ejecución.
    </ResponseField>

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

    <ResponseField name="records" type="integer">
      Registros escritos de vuelta.
    </ResponseField>

    <ResponseField name="amount" type="number">
      Tarifa de datos pagada por el llamador.
    </ResponseField>

    <ResponseField name="error" type="object">
      Objeto de error en caso de fallo.

      <Expandable title="campos">
        <ResponseField name="code" type="string" required>
          Código de error estable.
        </ResponseField>

        <ResponseField name="category" type="string">
          Categoría de error.
        </ResponseField>

        <ResponseField name="message" type="string">
          Mensaje orientado al desarrollador.
        </ResponseField>

        <ResponseField name="retryable" type="boolean">
          Si un reintento de la misma solicitud puede funcionar.
        </ResponseField>
      </Expandable>
    </ResponseField>
  </Expandable>
</ResponseField>

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

  <Expandable title="campos">
    <ResponseField name="offset" type="integer">
      Offset solicitado.
    </ResponseField>

    <ResponseField name="limit" type="integer">
      Tamaño de página solicitado.
    </ResponseField>

    <ResponseField name="count" type="integer">
      Número de ítems en esta página.
    </ResponseField>

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

    <ResponseField name="has_more" type="boolean">
      Si quedan más páginas.
    </ResponseField>
  </Expandable>
</ResponseField>

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

### Errores

| HTTP | `code`             | `category`      | Descripción                                                                                                    |
| ---- | ------------------ | --------------- | -------------------------------------------------------------------------------------------------------------- |
| 401  | `unauthorized`     | `forbidden`     | API key ausente o no válida.                                                                                   |
| 400  | `invalid-status`   | `invalid_input` | `status` contiene un valor fuera del vocabulario.                                                              |
| 400  | `invalid-run-kind` | `invalid_input` | `run_kind` no es un valor permitido.                                                                           |
| 404  | `app-not-found`    | `not_found`     | La app no existe, se renombró o es invisible para la credencial actual (fuera del alcance privado/compartido). |

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. Llame a REST directamente.
