---
title: "One page of per-video outcomes for a bulk job, optionally with transcript text"
method: GET
path: "/api/v1/bulk/{run_id}/results"
---

# One page of per-video outcomes for a bulk job, optionally with transcript text

`GET /api/v1/bulk/{run_id}/results`

## Request

- Base URL: `https://bulktranscripts.co`
- URL: `https://bulktranscripts.co/api/v1/bulk/{run_id}/results`
- Auth: one of:
  - HTTP bearer
  - API key in header `X-API-Key`

Free. Pass next_cursor from the previous page to continue. include=text adds each finished transcript (25 per page); include=segments adds timed segments too.

## Path parameters

- `run_id` string, required

## Query parameters

- `cursor` integer
- `limit` integer
- `include` 'text' | 'segments'

## Response `200`

OK

- BulkResults
  - `run_id` string
  - `status` string
  - `total` integer
  - `items` object[]
    - `position` integer
    - `video_id` string, nullable
    - `title` string, nullable
    - `status` 'ok' | 'cached' | 'error'
    - `url` string, nullable
    - `channel` string, nullable
    - `duration` integer, nullable
    - `word_count` integer, nullable
    - `error` object
      - `code` string
      - `message` string
    - `text` string
    - `paragraphs` string[]
    - `language` string
    - `upload_date` string, nullable
    - `source` string
    - `segments` object[]
  - `next_cursor` integer, nullable
  - `note` string

## Other responses

- `400`: Bad request (invalid_input, resolution_failed, or empty_source)
- `401`: Unauthorized (missing_api_key, invalid_api_key, or invalid_token)
- `404`: Not found (no_transcript (video has no captions; not charged) or not_found)
- `429`: Rate limited (rate_limited; honour the Retry-After header (seconds))

---

[API](https://skmtc.dev/bulktranscripts/apis/bulktranscripts-api.md) · [All operations](https://skmtc.dev/bulktranscripts/apis/bulktranscripts-api/llms.txt) · [OpenAPI document](https://skmtc.dev/bulktranscripts/apis/bulktranscripts-api/revisions/4949830b74d7?raw)
