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

# Ottieni run publisher

> Una chiamata contro un’app che hai pubblicato. Campi whitelist più warning strutturati.

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

Autenticazione: API key obbligatoria (`Authorization: Bearer <API Key>`).

Una chiamata contro un’app che hai pubblicato: gli stessi campi whitelist della lista, più warning strutturati per quella run (ad es. `billing-qty-missing`). La ownership è per **app**: le run su app di altri sono invisibili e restituiscono `404`. I run di debug dell’autore sono esclusi di default.

## Richiesta

### Parametri di percorso

<ParamField path="run_id" type="string" required>
  ID del run.
</ParamField>

### Esempio di richiesta

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

## Risposta

### 200 successo

```json theme={null}
{
  "data": {
    "run_id": "run_c62bc0fb8df2",
    "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:40.411993+00:00",
    "started_at": "2026-09-15T07:45:40.419610+00:00",
    "finished_at": "2026-09-15T07:45:40.822250+00:00",
    "duration_ms": 402,
    "records": 20,
    "amount": 0.02,
    "error": null,
    "warnings": []
  }
}
```

Fields match items from <a href="/docs/it/datahub/api/reference/publishing/list-publisher-runs">Elenca run publisher</a>, plus `warnings[]`.

Il payload è wrappato in `data`. Campi:

<ResponseField name="run_id" type="string" required>
  ID del run.
</ResponseField>

<ResponseField name="namespace" type="string">
  Username del publisher.
</ResponseField>

<ResponseField name="app_name" type="string">
  Nome dell'app.
</ResponseField>

<ResponseField name="app_version" type="string">
  Versione release pinnata.
</ResponseField>

<ResponseField name="build_id" type="string">
  Snapshot della build a cui era vincolato un run di debug (`run_kind=test`); `null` per i run di produzione.
</ResponseField>

<ResponseField name="run_kind" type="string">
  Tipo di run.
</ResponseField>

<ResponseField name="state" type="enum" required>
  Valori: `PENDING` / `QUEUED` / `RUNNING` / `SUCCEEDED` / `PARTIALLY_SUCCEEDED` / `FAILED` / `CANCELLED` / `EXPIRED`.
</ResponseField>

<ResponseField name="partial" type="boolean">
  Se il run è riuscito parzialmente o è stato annullato con un output parziale.
</ResponseField>

<ResponseField name="triggered_by" type="string">
  Canale di chiamata.
</ResponseField>

<ResponseField name="created_at" type="string">
  Ora di creazione della run.
</ResponseField>

<ResponseField name="started_at" type="string">
  Ora di inizio esecuzione.
</ResponseField>

<ResponseField name="finished_at" type="string">
  Ora di fine esecuzione.
</ResponseField>

<ResponseField name="duration_ms" type="integer">
  Durata esecuzione in millisecondi.
</ResponseField>

<ResponseField name="records" type="integer">
  Record scritti indietro.
</ResponseField>

<ResponseField name="amount" type="number">
  Data fee pagata dal caller.
</ResponseField>

<ResponseField name="error" type="object">
  Oggetto errore in caso di fallimento.

  <Expandable title="fields">
    <ResponseField name="code" type="string" required>
      Codice di errore stabile.
    </ResponseField>

    <ResponseField name="category" type="string">
      Categoria errore.
    </ResponseField>

    <ResponseField name="message" type="string">
      Messaggio per sviluppatori.
    </ResponseField>

    <ResponseField name="retryable" type="boolean">
      Se un retry della stessa request può riuscire.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="warnings" type="object[]">
  Avvisi strutturati per questo run.

  <Expandable title="fields">
    <ResponseField name="code" type="string" required>
      Codice dell'avviso, per esempio `billing-qty-missing`.
    </ResponseField>

    <ResponseField name="event" type="string">
      Nome evento correlato se applicabile.
    </ResponseField>

    <ResponseField name="detail" type="object">
      Payload di dettaglio strutturato.
    </ResponseField>

    <ResponseField name="count" type="integer">
      Quante volte è stato osservato questo warning.
    </ResponseField>

    <ResponseField name="updated_at" type="string">
      Ultimo aggiornamento di questo warning.
    </ResponseField>
  </Expandable>
</ResponseField>

### Errori

| HTTP | `code`          | `category`  | Descrizione                                           |
| ---- | --------------- | ----------- | ----------------------------------------------------- |
| 401  | `unauthorized`  | `forbidden` | API key mancante o non valida.                        |
| 404  | `run-not-found` | `not_found` | La run non esiste o non è su un’app di tua proprietà. |

Le risposte di errore usano `{"error": {code, category, message, retryable}}`. Vedi <a href="/docs/it/datahub/api/reference/introduction#errors">Errori</a>.

## Librerie client

Gli SDK Python e JavaScript non wrappano ancora questo endpoint. Chiama REST direttamente.
