---
title: "Get job status"
method: GET
path: "/v1/jobs/{job_id}"
tags: ["jobs"]
---

# Get job status

`GET /v1/jobs/{job_id}`

## Request

- Base URL: `https://api.slideforge.dev`
- URL: `https://api.slideforge.dev/v1/jobs/{job_id}`
- Auth: one of:
  - HTTP bearer
  - API key in header `X-API-Key`

Poll a generation job's status. Returns pptx_url and preview_url when complete. For deck jobs, includes per-slide progress. Includes `cost_charged` — the retail price you paid.

## Path parameters

- `job_id` string, required

## Query parameters

- `wait` integer: Long-poll: hold the connection up to N seconds (max 60) waiting for terminal status. 0 = immediate response (default).
- `fields` string, nullable: Comma-separated field names to include (e.g. 'status,cost_charged'). Returns only those fields + job_id. Default: all fields.
- `sig` string: HMAC signature for signed-URL polling (used by MCP Apps iframe which has no Bearer token).
- `exp` string: Signature expiry timestamp (unix epoch).

## Response `200`

Job status with results when complete

- JobStatus: GET /v1/jobs/{id} response. Status is one of: queued, generating, executing, rendering, complete, partial, failed. `partial` is deck-only — set when some child slides succeeded and at least one failed. The deck PPTX still contains the successful slides; agents that previously trusted `status == "complete"` must now also handle `partial` (and read `failed_slides` to decide).
  - `job_id` string, required
  - `name` string, nullable
  - `status` string, required
  - `current_iteration` integer
  - `max_iterations` integer
  - `current_score` number, nullable
  - `target_score` number
  - `pptx_url` string, nullable
  - `preview_url` string, nullable
  - `pdf_url` string, nullable
  - `final_score` number, nullable
  - `score_breakdown` object, nullable
  - `iterations` integer, nullable
  - `cost_charged` number, nullable
  - `latency_ms` integer, nullable
  - `strategy` string, nullable
  - `slides_completed` integer, nullable
  - `slides_failed` integer, nullable
  - `failed_slides` object[], nullable
  - `quality_warnings` QualityWarning[], nullable
    - `category` string, required
    - `severity` string, required
    - `description` string, required
    - `source` string
    - `location` object, nullable
  - `error` string, nullable

## Other responses

- `404`: Job not found or not owned by you
- `422`: Validation Error

---

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