---
title: "Workspace job history (cursor pagination)"
method: GET
path: "/v1/jobs"
tags: ["jobs"]
---

# Workspace job history (cursor pagination)

`GET /v1/jobs`

## Request

- Base URL: `https://api.transcriptdock.com`
- URL: `https://api.transcriptdock.com/v1/jobs`
- Auth: one of:
  - HTTP bearer
  - API key in cookie `sb-access-token`

## Query parameters

- `cursor` string
- `limit` integer
- `platform` 'youtube' | 'tiktok' | 'instagram' | 'upload' | 'direct'
- `source_id` string

## Response `200`

Newest first, ordered by created_at and id

- JobList
  - `items` Job[], required
    - `id` string, uuid, required: Job id; use with GET /v1/jobs/{id}.
    - `status` 'queued' | 'processing' | 'awaiting_provider' | 'succeeded' | 'failed' | 'cancelled', required
    - `stage` 'resolve' | 'captions' | 'acquire_audio' | 'submit_asr' | 'wait_asr' | 'finalize' | 'null', nullable, required: Current pipeline step while in flight; null once final.
    - `result_id` string, uuid, nullable, required: Transcript id once status is succeeded; fetch with GET /v1/transcripts/{id}. Null otherwise.
    - `error` ErrorObject, required
      - `code` 'INVALID_REQUEST' | 'INVALID_URL' | 'INVALID_CURSOR' | 'UNSUPPORTED_SOURCE' | 'UNSUPPORTED_MEDIA' | 'CAPABILITY_UNAVAILABLE' | 'UNAUTHENTICATED' | 'FORBIDDEN' | 'EMAIL_UNVERIFIED' | 'NOT_FOUND' | 'INSUFFICIENT_BALANCE' | 'PLAN_REQUIRED' | 'BUDGET_EXCEEDED' | 'IDEMPOTENCY_CONFLICT' | 'JOB_NOT_RETRYABLE' | 'CANCELLATION_NOT_ALLOWED' | 'RATE_LIMITED' | 'SOURCE_NOT_FOUND' | 'SOURCE_PRIVATE' | 'SOURCE_AUTH_REQUIRED' | 'SOURCE_REGION_RESTRICTED' | 'NO_CAPTIONS' | 'LANGUAGE_UNAVAILABLE' | 'LANGUAGE_UNSUPPORTED' | 'NO_SPEECH' | 'NO_AUDIO' | 'TIMESTAMPS_UNAVAILABLE' | 'DURATION_LIMIT_EXCEEDED' | 'FILE_TOO_LARGE' | 'UNSAFE_URL' | 'INVALID_MEDIA' | 'SOURCE_RATE_LIMITED' | 'SOURCE_BLOCKED' | 'SOURCE_TIMEOUT' | 'SOURCE_CHANGED' | 'PROVIDER_UNAVAILABLE' | 'STORAGE_UNAVAILABLE' | 'PROVIDER_REJECTED' | 'INTERNAL_ERROR', required
      - `message` string, required
      - `retryable` boolean, required
      - `retry_after_seconds` integer
      - `details` object
      - `doc_url` string, uri: Where this code is documented.
    - `billing` JobBilling, required
      - `credits_reserved` integer, required: Credits held while the job runs; released or settled when it finishes.
      - `credits_charged` integer, required: Credits charged after settlement (0 until the job finishes). 1 for a caption transcript, transcribe_credits_per_minute per started minute for AI transcription, 0 for a cached result.
      - `kind` 'captions' | 'ai_transcription' | 'cached', required: What the job paid for: captions (1 credit), ai_transcription (per minute), or cached (a reused result, free within the workspace).
    - `source` object
      - `platform` 'youtube' | 'tiktok' | 'instagram' | 'upload' | 'direct', required
      - `media_id` string, nullable, required
      - `canonical_url` string, nullable, required
      - `title` string, nullable, required
      - `upload_id` string, nullable, required
    - `options` object
      - `mode` 'captions_only' | 'auto' | 'transcribe', required
      - `language` string, nullable, required
      - `caption_preference` string, required
    - `created_at` string, date-time, required: Submission time, UTC.
  - `next_cursor` string, nullable, required

---

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