---
title: "Stream AI job results"
method: GET
path: "/v1/ai/jobs/{jobId}/result"
tags: ["AI"]
---

# Stream AI job results

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

## Request

- Base URL: `https://blobsrus.omniapp.co/api`
- URL: `https://blobsrus.omniapp.co/api/v1/ai/jobs/{jobId}/result`
- Auth: HTTP bearer

Retrieve the full result of a completed AI job, including all actions taken by the AI (queries generated, data retrieved) and the final summarized answer. 

Results are only available for jobs in `COMPLETE` state and are retained for 14 days after completion. The response is streamed directly from storage.

## Path parameters

- `jobId` string, uuid, required

## Response `200`

Job results retrieved successfully

- object
  - `actions` object[]: Ordered list of actions the AI took during execution. Each action represents a step such as generating a query, executing it, or synthesizing a final answer.
    - `type` string, required: The type of action. Common types include: - `generate_query` - Query generation and execution - `summarize` - Final answer synthesis - `validate_analysis` - Post-answer check for critical errors in the analysis - `publish_dashboard` - Publishing a dashboard draft to make changes live When validation is enabled for the organization, the final answer can be on a `validate_analysis` action instead of `summarize`. Read the top-level `message` or `resultSummary` fields for the final answer rather than assuming it's on the last action.
    - `status` 'pending' | 'complete' | 'partial' | 'skipped' | 'failed': The outcome of this action: - `pending` - The action is still in progress, such as a query the AI is still running. - `complete` - The action finished successfully. - `partial` - The action finished with a caveat, such as a note about incomplete fulfillment. - `skipped` - The action didn't result in a change, such as navigating to a tab that was already open. - `failed` - The action failed with an error.
    - `message` string, required: The AI's explanation of what it is doing in this step, written in natural language.
    - `timestamp` string, required: ISO 8601 timestamp when this action occurred.
    - `result` object: Query result data. Only present for `generate_query` action types.
      - `resultId` string: Stable, unique identifier for this query result within the job. Use it to reference a specific result — for example, to correlate or de-duplicate results across responses.
      - `queryName` string, required: Human-readable name describing what this query retrieves.
      - `status` 'success' | 'error', required: Whether the query executed successfully.
      - `query` object, required: The semantic query definition that was executed. This can be used with the [Run query endpoint](/api/queries/run-query) to re-run the query.
      - `csvResult` string, required: Query results formatted as CSV text.
      - `csvResultWasTruncated` boolean, required: Whether the CSV data was truncated due to size limits. If `true`, the full result set may contain additional rows not included in `csvResult`.
      - `csvResultCellsWereTruncated` boolean: Whether individual CSV cell values were cut short due to size limits. Truncated values end with `...`. A narrower query (fewer rows or fields) retrieves them in full.
      - `hasResults` boolean, required: Whether the query returned any data rows.
      - `totalRowCount` integer, required: Total number of rows returned by the query.
  - `message` string: The AI's final response message in Markdown format. This is the complete answer to the original prompt, incorporating data from all executed queries. When the AI publishes a dashboard, the message discloses that the publish occurred. If the published draft contained changes made by someone other than the caller (drafts are per-dashboard, not per-user), the message also discloses that fact with attribution and timestamp.
  - `resultSummary` string: Summary of the job result. Typically matches the final message content. When the AI publishes a dashboard, the summary discloses that the publish occurred. If the published draft contained changes made by someone other than the caller, the summary also discloses that fact.
  - `topic` string: The topic name used for query generation.
  - `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.

## Other responses

- `400`: Bad Request Possible error messages: - `Invalid job ID`
- `401`: Unauthorized Possible error messages: - `Missing or invalid API key`
- `404`: Job not found or results not available Possible error messages: - `Job not found` - `Job results not yet available` - `Result is no longer available`. Results are retained for 14 days.
- `429`: Too Many Requests - Rate limit exceeded (60 requests/minute)
- `500`: Internal Server Error

## Changes

- **2026-11-03** `43290040f88f`: 2 info
  - added the optional property `actions/items/result/csvResultCellsWereTruncated` to the response with the `200` status
  - added the optional property `actions/items/status` to the response with the `200` status

[Operation history](https://skmtc.dev/omni/apis/omni-api/changes/v1/ai/jobs/:jobId/result/get.md)

---

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