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

# Get AI job status

`GET /v1/ai/jobs/{jobId}`

Retrieve the current status and details of an AI job, including its state, progress information, and result summary.

The response fields vary by `state` — for example, `progress` is only present during `EXECUTING`, and `resultSummary` is only present when `COMPLETE`.

Poll this endpoint every 2–5 seconds until the job reaches a terminal state (`COMPLETE`, `FAILED`, or `CANCELLED`).

## Path parameters

- `jobId` string, uuid, required

## Response `200`

Job status retrieved successfully

- object
  - `id` string, uuid — The unique identifier for this job.
  - `state` 'CANCELLED' | 'COMPLETE' | 'DELIVERING' | 'EXECUTING' | 'FAILED' | 'QUEUED' — Current state of the job. Terminal states are `COMPLETE`, `FAILED`, and `CANCELLED`. Poll until the job reaches a terminal state.
  - `prompt` string — The natural language prompt that was submitted.
  - `conversationId` string, uuid — The conversation this job is associated with. Use this to submit follow-up jobs in the same conversation thread.
  - `modelId` string, uuid, nullable — The shared model ID used for query generation.
  - `branchId` string, uuid, nullable — Branch ID used for model context, or null if querying the main shared model.
  - `organizationId` string, uuid — The organization that owns this job.
  - `userId` string, uuid — The user ID who created (or is associated with) this job.
  - `topicName` string, nullable — Topic name used to scope query generation, or null if the AI selected the topic automatically.
  - `omniChatUrl` string, uri — URL to view this conversation in the Omni chat interface. Opens the chat session where the job actions and results are visible.
  - `progress` object, nullable — **Only present in `EXECUTING` state.** Real-time progress information. Null if no progress has been reported yet. Updated in real-time as the AI works through iterations.
    - `iteration` integer, required — Current iteration number. The AI may take multiple iterations to refine queries and generate a complete answer.
    - `message` string, required — Human-readable status message describing what the AI is currently doing.
    - `updatedAt` string, date-time, required — When this progress update was recorded.
  - `resultSummary` string — **Only present in COMPLETE state.** Markdown-formatted summary of the job result. For the full result with query details and data, use the [Stream AI job results endpoint](/api/ai/stream-ai-job-results).
  - `error` object — **Only present in `FAILED` state.** Error details explaining why the job failed.
    - `code` string — Machine-readable error code.
    - `message` string, required — Human-readable error message.
    - `detail` string — Additional error detail or context.
  - `createdAt` string, date-time — When the job was submitted.
  - `executionStartedAt` string, date-time — When execution began. Present once the job transitions from `QUEUED` to `EXECUTING`. May be absent on jobs that failed or were cancelled before execution started.
  - `completedAt` string, date-time — **Present in `COMPLETE` and `FAILED` states.** When the job finished (successfully or with error).
  - `cancelledAt` string, date-time — When the job was cancelled.
  - `cancelledBy` string, uuid — **Only present in `CANCELLED` state.** User ID of who cancelled the job.
  - `updatedAt` string, date-time — When the job record was last modified.

## Other responses

- `400` — Bad Request Possible error messages: - `Invalid job ID format. Must be a valid UUID.`
- `401` — Unauthorized Possible error messages: - `Missing or invalid API key`
- `404` — Job not found
- `429` — Too Many Requests - Rate limit exceeded (60 requests/minute)
- `500` — Internal Server Error

---

[API](https://skmtc.net/omni/apis/omni-api.md) · [All operations](https://skmtc.net/omni/apis/omni-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/omni/omni-api/revisions/6b02f7349d0e/schema)
