---
title: "Get job status and telemetry"
method: GET
path: "/v4/workflows/{workflowId}/jobs/{jobId}"
tags: ["Workflows"]
---

# Get job status and telemetry

`GET /v4/workflows/{workflowId}/jobs/{jobId}`

## Request

- Base URL: `https://api.kadoa.com`
- URL: `https://api.kadoa.com/v4/workflows/{workflowId}/jobs/{jobId}`
- Auth: API key in header `x-api-key`

Retrieve the current status and telemetry information for a specific job

## Path parameters

- `workflowId` string, required
- `jobId` string, required

## Response `200`

200

- JobStatusResponse: Job status and telemetry response
  - `id` string, required: The job ID
  - `state` 'IN_PROGRESS' | 'FINISHED' | 'FAILED' | 'NOT_SUPPORTED' | 'FAILED_INSUFFICIENT_FUNDS', required: Current state of the job
  - `startedAt` string, date-time: Start date and time of the job
  - `finishedAt` string, date-time: Finish date and time of the job (if completed)
  - `estimatedFinishedAtUtc` string, date-time, nullable: Estimated UTC finish time for an active workflow run
  - `limit` integer, nullable: Record limit for the job
  - `workflowId` string: ID of the workflow/scraper
  - `variables` object: Job variables
  - `errors` JobError[]: List of errors if the job failed
    - `errorCode` string, required: Error code identifying the type of error
    - `message` string, required: Human-readable error message
    - `occurredAt` string, date-time, required: Timestamp when the error occurred
    - `screenshot` string: URL to error screenshot if available
    - `context` object: Additional error context
  - `snapshot` JobStatusSnapshotBlock: ADR-009 snapshot drift block; null for runs predating the snapshot migration
    - `configHash` string, required: sha256 of the canonical config the run was executed against
    - `snapshotCreatedAt` string, date-time, required: When the snapshot draft was inserted (run entry)
    - `snapshotConfirmedAt` string, date-time, nullable, required: When the snapshot was confirmed (terminal success); null while draft
    - `isConfigStaleVsCurrent` boolean, required: True when the snapshot hash differs from the workflow's current canonical hash
    - `driftKeys` string[], required: Top-level config keys that differ from the current config
    - `runBuildId` string, nullable, required: Shelly build that produced this run; null for legacy rows and non-SHELLY_SCRIPT workflows
    - `currentBuildId` string, nullable, required: The workflow's live Shelly build, or null when none has gone live
    - `isBuildStaleVsCurrent` boolean, required: True when runBuildId is set and differs from currentBuildId — the script that produced this run's data is no longer the one the workflow runs
    - `workspaceClean` boolean, nullable, required: True when the live Shelly workspace matches the latest completed build input; null when unknown
    - `freshnessReason` 'config_drift' | 'build_drift' | 'workspace_dirty' | 'no_build_yet', nullable, required: Priority freshness reason for the snapshot block; null when config, build, and workspace are fresh

## Other responses

- `400`: 400
- `401`: 401
- `404`: 404
- `500`: 500

---

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