---
title: "Get Job Status"
method: GET
path: "/v2/jobs/{job_id}"
tags: ["jobs"]
---

# Get Job Status

`GET /v2/jobs/{job_id}`

Get status, progress, and file-level details for an indexing job. Use files_limit and files_cursor to page through indexed files when the job contains many inputs.

## Path parameters

- `job_id` string, required

## Query parameters

- `files_limit` integer
- `files_cursor` string, nullable

## Headers

- `authorization` string, nullable

## Response `200`

Successful Response

- JobStatusResponse
  - `billing` JobBilling — Billing/credit information for a completed indexing job. Returned when job status is 'completed'.
    - `credits` BillingCredits, required — Credit usage for a completed indexing job
      - `remaining` number, double, required — Credits remaining in the billing period after this job.
      - `used_advanced` integer, required — Advanced pages processed by this job (2.5 credits each).
      - `used_basic` integer, required — Basic pages processed by this job (1 credit each).
      - `used_total` number, double, required — Total credits consumed: (basic * 1) + (advanced * 2.5).
    - `included_credits` integer, required — Total credits included in the current billing period.
    - `period_end` integer, nullable — Billing period end, as a Unix timestamp in milliseconds.
    - `period_start` integer, nullable — Billing period start, as a Unix timestamp in milliseconds.
  - `cancelled_at` string, nullable — RFC 3339 timestamp when the job was cancelled.
  - `collection_name` string, nullable — Name of the collection this job is indexing into.
  - `completed_at` string, nullable — RFC 3339 timestamp when the job reached a terminal state.
  - `created_at` string, nullable — RFC 3339 timestamp when the job was created.
  - `error_code` string, nullable — Machine-readable error code. Present when the job failed.
  - `error_message` string, nullable — Human-readable error message. Present when the job failed.
  - `estimated_time_remaining_seconds` integer, nullable — Estimated seconds until the job finishes. 0 once the job is in a terminal state.
  - `files` FileStatus[], nullable — Per-file status for the files in this job. Paginated: control the page with the `files_limit` and `files_cursor` query parameters.
    - `document_id` string, nullable — Document ID assigned once the file is indexed. Use it with `GET /v2/collections/{collection_name}/documents/{document_id}`.
    - `error_code` string, nullable — Machine-readable error code. Present when the file failed.
    - `error_message` string, nullable — Human-readable error message. Present when the file failed.
    - `progress_message` string, nullable — Human-readable progress for this file.
    - `stage` string, nullable — Pipeline stage this file is in. One of `scanning`, `extracting`, `indexing`, `embedding`, `finalizing`.
    - `status` string, required — Status of this file. One of `queued`, `processing`, `completed`, `failed`, `skipped`, `cancelled`.
    - `updated_at` string, nullable — RFC 3339 timestamp of the last update to this file's status.
    - `uri` string, required — Source URI of the file, e.g. `s3://bucket/path/file.pdf`.
  - `files_page` FilesPagination
    - `limit` integer, nullable — Maximum number of files returned in this page.
    - `next_cursor` string, nullable — Cursor for the next page of files. Pass it as the `files_cursor` query parameter. Null when there are no more files.
    - `total_estimated` integer, nullable — Estimated total number of files in the job.
  - `job_id` string, required — Unique identifier for the indexing job, as returned by the indexing endpoint that started it.
  - `job_type` string, nullable — The indexing operation that created this job, e.g. `index_s3_directory`. Matches the endpoint the job was started from.
  - `progress` JobProgress — Detailed progress information for running jobs
    - `current_stage` string, required — Current pipeline stage. One of `scanning`, `extracting`, `indexing`, `embedding`, `finalizing`.
    - `elapsed_seconds` integer, nullable — Seconds elapsed since processing began.
    - `files_failed` integer, nullable — Number of files that failed processing.
    - `files_processed` integer, nullable — Number of files processed so far.
    - `files_skipped` integer, nullable — Number of files skipped, e.g. unsupported file types.
    - `files_total` integer, nullable — Total number of files the job will process.
    - `stage_description` string, required — Human-readable description of the current stage.
  - `progress_message` string, nullable — Human-readable summary of the job's current progress.
  - `result` JobResult — Final result data when job is completed
    - `duration_seconds` integer, nullable — Total processing time in seconds.
    - `failed_files` FailedFileDetail[], nullable — Details for each file that failed.
      - `error` string, nullable — Why the file failed.
      - `file_name` string, nullable — Name of the file that failed.
    - `files_failed` integer, nullable — Number of files that failed.
    - `files_indexed` integer, nullable — Number of files indexed successfully.
    - `files_skipped` integer, nullable — Number of files skipped.
    - `warnings` string[], nullable — Non-fatal warnings raised during the job.
  - `started_at` string, nullable — RFC 3339 timestamp when processing began. Null while the job is pending.
  - `status` string, required — Current job status. - `pending`: queued, not yet started - `running`: in progress; see `progress` for the current stage - `completed`: all files indexed successfully - `completed_with_errors`: finished, but some files failed; see `files` and `result` - `failed`: the job failed; see `error_code` and `error_message` - `cancelled`: cancelled via `DELETE /v2/jobs/{job_id}` - `timed_out`: execution exceeded the time limit
  - `updated_at` string, nullable — RFC 3339 timestamp when the job was last updated.
  - `custom_metadata` object, nullable
  - `youtube` YoutubeVideoRecord[], nullable — Per-video records for YouTube indexing jobs: which pipeline each video actually ran through and whether an on_missing_transcript fallback fired (a fallback changes what the job bills, so it is always visible here). Absent for non-YouTube jobs.
    - `video_id` string, required
    - `url` string, nullable
    - `mode_used` string, required — The pipeline this video actually ran through, which determines how it bills: 'transcript' (basic text pages), 'audio' (5 credits/minute), 'video' (20 credits/minute), or 'failed' (dropped at submission; nothing indexed, nothing billed).
    - `fell_back_from` string, nullable — 'transcript' when on_missing_transcript escalated this video to a media mode; null when the requested mode ran directly.
    - `transcript_available` boolean, nullable — Whether the video has captions. Null when availability was not determined (media modes probe best-effort).
    - `languages` string[] — Caption languages available or used for this video.
    - `error` string, nullable — Set only when mode_used is 'failed': why this video was dropped.
  - `pii_report` PiiReportHintV2
    - `state` string, required — `retained`, `deleted`, or `expired`.
    - `url` string, nullable — `/v2/jobs/{job_id}/pii` while retained.
    - `deleted_at` string, nullable — Set when `state` is `deleted` (RFC3339).

---

[API](https://skmtc.dev/runcaptain/apis/api-reference.md) · [All operations](https://skmtc.dev/runcaptain/apis/api-reference/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/runcaptain/api-reference/revisions/fe4649e3f4aa/schema)
