---
title: "GET /assets/jobs/{id}"
method: GET
path: "/assets/jobs/{id}"
tags: ["Jobs"]
---

# GET /assets/jobs/{id}

`GET /assets/jobs/{id}`

Fetch one job you started through the API or MCP. Statuses: queued, running (both non-terminal - the response carries poll_after_ms, wait at least that long before asking again), then succeeded (read `result`), failed (read `error`: {code, subcode, message, retriable}; the held credits are refunded) or canceled. Generations typically finish within a few minutes; a job still queued after 15 minutes can be cancelled and resubmitted. Better still, pass wait=<seconds> (up to 60) to long-poll: the request is held until the job reaches a terminal state, so one call replaces a polling loop. Once status is succeeded, `result` holds exactly what the synchronous form of the operation named by task_type would have returned. This is a free read-only lookup (no credits). Requires an API key (user scope).

## Path parameters

- `id` string, required

## Query parameters

- `wait` integer

## Response `200`

Success

- PublicJob
  - `id` string, required
  - `task_type` string, required — The public operationId that created this job (e.g. createImage). Determines the shape of `result`: it is exactly the 200 response body documented for that operation.
  - `status` 'queued' | 'running' | 'succeeded' | 'failed' | 'canceled', required
  - `request_id` string
  - `created_at` integer, required — Unix ms
  - `finished_at` integer
  - `credits_charged` number, float — Credits this job cost you. Charged at enqueue; reported as 0 once a job fails or is canceled, since the charge is refunded.
  - `result` object — Present only when status is succeeded. Same shape as the synchronous response of the operation named by task_type.
  - `error` PublicJobError
    - `status` integer
    - `message` string
  - `poll_after_ms` integer — Present while the job is queued or running: wait at least this many milliseconds before polling again. Prefer GET /assets/jobs/{id}?wait=30 (long-poll) over tight loops.

## Other responses

- `400` — Error
- `404` — No such job for this API key

## Changes

- **2026-08-30** `a8a0b85d1839` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/ludo/apis/ludo-ai-api/changes/assets/jobs/:id/get.md)

---

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