---
title: "Read runs with captured deliverable metadata"
---

> Documentation Index
> Fetch the complete documentation index at: https://tryshiba.dev/llms.txt
> Use this file to discover all available pages before exploring further.

Path: Shiba public API

`GET /threads/{threadId}/runs`

## Authentication

- `bearerAuth`, http, header `Authorization`, format `API key`

## Path parameters

- `threadId` (`get/threads/threadId/runs.path.threadId`; string, required)

## Code samples

### cURL

```bash
curl --request GET \
  --url '<base-url>/api/v1/threads/<threadId>/runs' \
  --header 'Authorization: Bearer <token>'
```

### TypeScript

```typescript
const url = '<base-url>/api/v1/threads/<threadId>/runs';
const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};

fetch(url, options)
  .then(res => res.json())
  .then(json => console.log(json))
  .catch(err => console.error(err));
```

### Python

```python
import requests

url = "<base-url>/api/v1/threads/<threadId>/runs"

headers = {"Authorization": "Bearer <token>"}

response = requests.get(url, headers=headers)

print(response.text)
```

## Responses

### 200

Run projection

#### Example

```json
{
  "ok": true,
  "runs": [
    {
      "id": "string",
      "threadId": "string",
      "status": "string",
      "expectedDeliverables": [
        "string"
      ],
      "deliverables": [
        {
          "path": "string",
          "mediaType": "string",
          "bytes": 1,
          "sha256": "string",
          "artifactId": "string",
          "version": 1,
          "sourceRunId": "string",
          "provenance": {
            "skills": [
              {}
            ],
            "customAgent": {
              "id": "string",
              "version": 1
            }
          },
          "review": {
            "status": "pending_review",
            "updatedAt": 0,
            "note": "string"
          }
        }
      ]
    }
  ]
}
```

- `ok` (`get/threads/threadId/runs.response.200.ok`; boolean, optional)
- `runs` (`get/threads/threadId/runs.response.200.runs`; array<object>, optional)
  - `id` (`get/threads/threadId/runs.response.200.runs.id`; string, optional)
  - `threadId` (`get/threads/threadId/runs.response.200.runs.threadId`; string, optional)
  - `status` (`get/threads/threadId/runs.response.200.runs.status`; string, optional)
  - `expectedDeliverables` (`get/threads/threadId/runs.response.200.runs.expectedDeliverables`; array<string>, optional) — Optional approval-frozen workspace output paths, in delivery order. Paths are unique ignoring case; relative, non-hidden ASCII segments only (letters/digits, dot, underscore, hyphen, internal spaces), no empty/dot/parent/absolute segments or leading/trailing spaces. Only md/txt/json/csv. Requested complete UTF-8 nonempty files are capped at 16384 bytes each and 65536 bytes total; JSON must parse. Collection checks do not assess semantic quality.
    - minLength 1; maxLength 240; pattern `^(?!.* (?:/|$))(?:[A-Za-z0-9][A-Za-z0-9._ -]*/)*[A-Za-z0-9][A-Za-z0-9._ -]*\.(?:[mM][dD]|[tT][xX][tT]|[jJ][sS][oO][nN]|[cC][sS][vV])$`
  - `deliverables` (`get/threads/threadId/runs.response.200.runs.deliverables`; array<object>, optional)
    - `path` (`get/threads/threadId/runs.response.200.runs.deliverables.path`; string, required)
      - maxLength 240
    - `mediaType` (`get/threads/threadId/runs.response.200.runs.deliverables.mediaType`; string, required)
    - `bytes` (`get/threads/threadId/runs.response.200.runs.deliverables.bytes`; integer, required)
      - min 1; max 16384
    - `sha256` (`get/threads/threadId/runs.response.200.runs.deliverables.sha256`; string, required)
      - pattern `^[a-f0-9]{64}$`
    - `artifactId` (`get/threads/threadId/runs.response.200.runs.deliverables.artifactId`; string, optional) — Opaque stable identity for grouping retained versions within the owning run store.
      - pattern `^artifact_[a-f0-9]{32}$`
    - `version` (`get/threads/threadId/runs.response.200.runs.deliverables.version`; integer, optional)
      - min 1
    - `sourceRunId` (`get/threads/threadId/runs.response.200.runs.deliverables.sourceRunId`; string, optional)
    - `provenance` (`get/threads/threadId/runs.response.200.runs.deliverables.provenance`; object, optional)
      - `skills` (`get/threads/threadId/runs.response.200.runs.deliverables.provenance.skills`; array<object>, optional)
        - `skillId` (`get/threads/threadId/runs.response.200.runs.deliverables.provenance.skills.skillId`; string, required)
        - `version` (`get/threads/threadId/runs.response.200.runs.deliverables.provenance.skills.version`; integer, required)
          - min 1
        - `name` (`get/threads/threadId/runs.response.200.runs.deliverables.provenance.skills.name`; string, required)
      - `customAgent` (`get/threads/threadId/runs.response.200.runs.deliverables.provenance.customAgent`; object, optional)
        - `id` (`get/threads/threadId/runs.response.200.runs.deliverables.provenance.customAgent.id`; string, required)
        - `version` (`get/threads/threadId/runs.response.200.runs.deliverables.provenance.customAgent.version`; integer, required)
          - min 1
    - `review` (`get/threads/threadId/runs.response.200.runs.deliverables.review`; object, optional)
      - `status` (`get/threads/threadId/runs.response.200.runs.deliverables.review.status`; string, required)
        - one of `"pending_review"`, `"approved"`, `"changes_requested"`
      - `updatedAt` (`get/threads/threadId/runs.response.200.runs.deliverables.review.updatedAt`; integer, optional)
      - `note` (`get/threads/threadId/runs.response.200.runs.deliverables.review.note`; string, optional)
        - maxLength 500


Source: https://tryshiba.dev/reference/api/get/threads/threadId/runs/index.md
