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

# 게시자 실행 목록

> 게시 App 전체 호출. 화이트리스트 필드만 — 입력·결과·호출자 식별자 없음.

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

인증: API 키 필요(`Authorization: Bearer <API Key>`).

내가 게시한 App에 대한 모든 호출(최신순). 게시자 사용량 뒤에 있는 상세 내역으로, 소유권(내가 소유한 App, Release가 0개인 App 포함), 기간 조건, 필터 값이 모두 같으므로 어떤 집계 수치에서도 그 수치에 포함된 실행까지 드릴다운할 수 있습니다.

이것은 **화이트리스트 뷰**이며 호출자의 실행 객체가 아닙니다: 무슨 일이 있었는지(상태, 타임스탬프, 다시 기록된 레코드, 오류 코드와 메시지, 호출자가 지불한 데이터 요금)는 알 수 있지만, 누가 호출했는지, 무엇을 보냈는지(`input` 없음), 무엇을 받았는지(`dataset_id`, 레코드, 자격 증명 ID 없음)는 절대 포함되지 않습니다. 호출자는 여전히 자신의 실행 목록에서 조회합니다. 게시자는 여기서 얻은 `run_id`로 상대방의 실행을 열 수 없습니다. 작성자의 디버그 실행은 기본적으로 제외되며, `status`는 쉼표로 구분한 여러 값을 받습니다.

## 요청

### 쿼리 파라미터

<ParamField query="data_app" type="string[]">
  이 App들로 제한합니다. 반복 지정 가능.
</ParamField>

<ParamField query="status" type="string">
  실행 상태. 쉼표로 구분해 여러 값 지정 가능.
</ParamField>

<ParamField query="triggered_by" type="string">
  하나의 호출 채널로 제한합니다.
</ParamField>

<ParamField query="version" type="string">
  이 Release 버전에 고정된 실행으로 제한합니다.
</ParamField>

<ParamField query="error_code" type="string">
  오류 코드가 이 값과 같은 실행으로 제한합니다(게시자 사용량 `group_by=error`의 `error_code`).
</ParamField>

<ParamField query="run_kind" type="string" default="production">
  `production`(기본값)은 프로덕션 트래픽만, `test`는 내 디버그 실행만, `all`은 둘 다.
</ParamField>

<ParamField query="created_from" type="string">
  시작(포함).
</ParamField>

<ParamField query="created_to" type="string">
  끝(제외).
</ParamField>

<ParamField query="offset" type="integer" default="0">
  페이지 오프셋.

  범위 ≥ 0.
</ParamField>

<ParamField query="limit" type="integer" default="50">
  페이지 크기.

  범위는 1\~200입니다.
</ParamField>

### 요청 예시

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

## 응답

### 200 성공

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

페이로드는 `data`로 감쌉니다. 필드:

<ResponseField name="items" type="object[]" required>
  실행 목록.

  <Expandable title="fields">
    <ResponseField name="run_id" type="string" required>
      실행 id.
    </ResponseField>

    <ResponseField name="namespace" type="string">
      게시자 사용자 이름.
    </ResponseField>

    <ResponseField name="app_name" type="string">
      App 이름.
    </ResponseField>

    <ResponseField name="app_version" type="string">
      고정된 Release 버전.
    </ResponseField>

    <ResponseField name="build_id" type="string">
      디버그 실행이 고정된 Build 스냅샷. 프로덕션 실행에서는 `null`.
    </ResponseField>

    <ResponseField name="run_kind" type="string">
      실행 종류(`production` / `test` 등).
    </ResponseField>

    <ResponseField name="state" type="enum" required>
      실행 상태. 값: `PENDING` / `QUEUED` / `RUNNING` / `SUCCEEDED` / `PARTIALLY_SUCCEEDED` / `FAILED` / `CANCELLED` / `EXPIRED`.
    </ResponseField>

    <ResponseField name="partial" type="boolean">
      실행이 부분적으로 성공했거나 부분 출력과 함께 취소되었는지 여부.
    </ResponseField>

    <ResponseField name="triggered_by" type="string">
      호출 채널.
    </ResponseField>

    <ResponseField name="created_at" type="string">
      실행이 생성된 시각.
    </ResponseField>

    <ResponseField name="started_at" type="string">
      실행이 시작된 시각.
    </ResponseField>

    <ResponseField name="finished_at" type="string">
      실행이 끝난 시각.
    </ResponseField>

    <ResponseField name="duration_ms" type="integer">
      실행 소요 시간(밀리초).
    </ResponseField>

    <ResponseField name="records" type="integer">
      다시 기록된 레코드 수.
    </ResponseField>

    <ResponseField name="amount" type="number">
      호출자가 지불한 데이터 요금.
    </ResponseField>

    <ResponseField name="error" type="object">
      실패 시 오류 객체.

      <Expandable title="fields">
        <ResponseField name="code" type="string" required>
          안정적인 오류 코드.
        </ResponseField>

        <ResponseField name="category" type="string">
          오류 카테고리.
        </ResponseField>

        <ResponseField name="message" type="string">
          개발자용 메시지.
        </ResponseField>

        <ResponseField name="retryable" type="boolean">
          같은 요청을 재시도하면 성공할 수 있는지 여부.
        </ResponseField>
      </Expandable>
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="pagination" type="object">
  페이징 정보.

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

<ResponseField name="currency" type="string">
  `amount`의 통화.
</ResponseField>

### 오류

| HTTP | `code`             | `category`      | 설명                                                                      |
| ---- | ------------------ | --------------- | ----------------------------------------------------------------------- |
| 401  | `unauthorized`     | `forbidden`     | API 키 누락 또는 무효.                                                         |
| 400  | `invalid-status`   | `invalid_input` | `status`에 어휘 밖 값.                                                       |
| 400  | `invalid-run-kind` | `invalid_input` | `run_kind`가 허용된 값이 아닙니다.                                                |
| 404  | `app-not-found`    | `not_found`     | App이 존재하지 않거나, 이름이 변경되었거나, 현재 자격 증명으로는 보이지 않습니다(private / shared 범위 밖). |

오류 응답은 `{"error": {code, category, message, retryable}}`입니다. <a href="/docs/ko/datahub/api/reference/introduction#errors">오류</a> 참고.

## 클라이언트 라이브러리

Python / JavaScript SDK는 아직 이 엔드포인트를 감싸지 않습니다. REST를 직접 호출하세요.
