---
title: "Status and result of a job"
method: GET
path: "/api/v1/jobs/{id}"
tags: ["Async"]
---

# Status and result of a job

`GET /api/v1/jobs/{id}`

## Request

- Base URL: `https://legal.nexusquantum.legal`
- URL: `https://legal.nexusquantum.legal/api/v1/jobs/{id}`
- Auth: HTTP bearer

## Path parameters

- `id` string, uuid, required

## Response `200`

Job snapshot.

- object
  - `jobId` string, uuid
  - `kind` 'analyze' | 'analyze_batch' | 'debate' | 'consensus'
  - `status` 'pending' | 'running' | 'completed' | 'failed' | 'cancelled'
  - `createdAt` string, date-time
  - `startedAt` string, date-time, nullable
  - `completedAt` string, date-time, nullable
  - `creditsCharged` integer
  - `error` object, nullable: Present when `status=failed`. Carries `{ code, message, details? }`. Terminal `code` values include `BYO_PROVIDER_REQUIRED`, `BYO_PROVIDER_ACCOUNT_ERROR` (YOUR engine rejected the request for an ACCOUNT reason — exhausted credit, revoked key, quota, model access; `details` carries `reason` and `provider`. Nexus never falls back to another engine and never substitutes a verdict your engine did not emit: fix the account and retry), `OUTPUT_WITHHELD_BY_POLICY` (delegated enforcement; `details` follows `WithholdDetails`, no credits charged), and `KEY_REVOKED_DURING_REQUEST` (the API/sub-key was revoked or expired mid-job — parity with the sync `401 KEY_REVOKED_DURING_REQUEST`).
  - `result` object, nullable: Result payload; its shape follows `kind`. For `kind=debate` it carries `analysis`, `arbiter`, `tiers`, `rounds`, `citationAudit`, `jurisdiction` and **`panel`**. `panel` = `{ requested, participated, arbitrated, degraded }` and states how many models the deliverable was ACTUALLY built on. It matters because `tiers` lists the panel that was CONVENED and `rounds` the rounds that were run — neither drops when a debater fails, so a 2-model debate reached you shaped exactly like a 3-model one. Check `panel.degraded` before presenting the output as a full adversarial panel: `true` means `participated < requested` (fewer independent analyses) and/or `arbitrated: false` (the arbiter emitted no synthesis, so `analysis` is a SINGLE model's text, not the panel's reconciled result). The same warning is also prepended INSIDE `analysis`, in the analysis language, so it survives PDF export and copy-paste — the JSON metadata does not. `panel` is a NEW optional object, never a new value in a published enum. Engine failures do not land here: if YOUR BYO engine fails for an account reason the job terminates as `failed` with `error.code: BYO_PROVIDER_ACCOUNT_ERROR` instead of quietly delivering a smaller panel.

## Other responses

- `404`: Job not found.

---

[API](https://skmtc.dev/nexusquantum/apis/nexus-legal-api.md) · [All operations](https://skmtc.dev/nexusquantum/apis/nexus-legal-api/llms.txt) · [OpenAPI document](https://skmtc.dev/nexusquantum/apis/nexus-legal-api/revisions/4084d8d4eb0b?raw)
