---
title: "get_job_activity"
method: GET
path: "/v1/jobs/{job_id}/activity"
tags: ["operations"]
---

# get_job_activity

`GET /v1/jobs/{job_id}/activity`

## Request

- Base URL: `https://ndi-api.nace.ai`
- URL: `https://ndi-api.nace.ai/v1/jobs/{job_id}/activity`
- Auth: API key in header `X-API-Key`
- TypeScript: <https://skmtc.dev/nace/apis/ndi-platform-api/docs/v1/jobs/:job_id/activity/get.ts> (a function with typed inputs; its response is checked against the schema)

Read bounded private agent activity. Requires the initiating key and unchanged workspace access.

## Path parameters

- `job_id` string, uuid, required: Job identifier.

## Response `200`

Successful Response

- ActivitySnapshot
  - `activities` AgentActivity[]: Observed work in chronological order.
    - `attempt` integer, required: Execution attempt; a retry never appends to an earlier attempt's thinking.
    - `details` ActivityDetail[]: Allowlisted tool inputs, suitable for an expanded view.
      - `name` string, required: The tool input being described.
      - `value` string, required: A bounded, displayable value of the input.
    - `display_name` string, nullable: Human-facing description of a recognized tool operation.
    - `execution_id` string, required: Agent execution that produced this activity.
    - `finished_at` string, date-time, nullable: When the activity finished, when known.
    - `id` string, required: Stable identity of this activity within the job.
    - `kind` 'thinking' | 'tool' | 'message' | 'answer', required: Whether this is model thinking, a tool, model commentary, or the answer as the agent writes it. An answer is a draft while running, accepted once completed, replaced by a retry once superseded, and handed over when it is an automatic search's fact answer the agent was then asked to settle; the job's result is the published answer.
    - `name` string, required: Tool name or agent activity label.
    - `revision` integer: Increasing version of this activity, used to ignore duplicated or older updates.
    - `started_at` string, date-time, required: When the activity was first observed.
    - `status` 'running' | 'completed' | 'failed' | 'retrying' | 'interrupted' | 'superseded' | 'handed_over', required: The observed state of this activity. Interrupted and superseded activities are incomplete. A handed-over answer is complete but is not the job's: fact search wrote it before the automatic search handed the question to the agent, whose activities follow it.
    - `step_id` string, required: Model request or tool call this activity belongs to.
    - `text` string: Bounded thinking, commentary, or tool result text.
    - `truncated` boolean: Whether the activity exceeded the retained text budget.
  - `cursor` string: Opaque replay cursor for subscribing after this snapshot.
  - `incomplete` boolean: Whether some activity could not be captured or recovered.
  - `job_id` string, uuid, required: The job whose agent work is shown.
  - `status` 'queued' | 'running' | 'succeeded' | 'failed' | 'cancelled', required: ``cancelled`` is a first-class terminal status, not a ``failed`` variant. Conflating them makes error-rate metrics lie and forces every client to string-match an error code.
  - `type` 'snapshot'

## Other responses

- `504`: Gateway Timeout
- `default`: Typed error envelope used by every 4xx and 5xx. ``error.code`` distinguishes the failure; HTTP status is a consequence of the code.

---

[API](https://skmtc.dev/nace/apis/ndi-platform-api.md) - [All operations](https://skmtc.dev/nace/apis/ndi-platform-api/llms.txt) - [OpenAPI document](https://skmtc.dev/nace/apis/ndi-platform-api/revisions/54dad7e0ff00?raw)
