The project’s queue of AI operations
const url = 'https://beta-api.plune.ai/v1/jobs';const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url https://beta-api.plune.ai/v1/jobs \ --header 'Authorization: Bearer <token>'Every job of the project that has not completed, the failed ones nobody dismissed, and those that completed or were cancelled in the last 24 hours — one list, what needs a person first: action_needed, failed, blocked, paused, in_progress, completed, cancelled, then the most recently updated. At most 100; when there are more, the finished ones are cut first, never a job that runs. The dashboard asks every few seconds while a job runs or the panel is open. Every member reads it, a reader too. With runId (#1279 AC-05) the same list holds only that run’s jobs — what its page shows under the head: its exports (run-export, by the run of the file) and any job whose subjectId is the run (a sync names it with a progress report). A run of another project, or an id that is no run, lists nothing.
Authorizations
Section titled “Authorizations ”Parameters
Section titled “ Parameters ”Header Parameters
Section titled “Header Parameters ”Which of your projects to act in — an id from GET /v1/projects. Absent, your default project. A project you are not a member of answers 404, the same as one that does not exist. Ignored under a bearer token, which is bound to the project it was minted in.
Query Parameters
Section titled “Query Parameters ”Only the jobs of this run. Absent: the whole queue of the project.
Responses
Section titled “ Responses ”The queue
object
One long AI operation. Seven states: in_progress, action_needed (waits for a person — reason says for what), paused (the quota is spent; Resume, or it resumes by itself), blocked (an outside service failed — reason names it; no button), completed, failed (reason is the raw error; a person may Dismiss it), cancelled (a person’s Cancel — reason is «Cancelled by completed). progress is null while the operation does not know its size — never 0 / 0.
object
Which operation: ingest, sync, auto-analysis, and bin-empty — the Bin emptied by the server (#1388) — and runs-delete — runs deleted in the background (#1423) — today; open-ended.
What it works on — a run id, an import id.
Its name as people know it — shown after the kind.
How far it got; null while the size is not known yet.
object
Why it stopped — only on action_needed, paused, blocked, failed, cancelled. A cancel reads «Cancelled by
The producer’s own token for where it resumes; null — a Retry starts from the beginning.
Which try this is: 1, and one more for each Retry. A producer sends it back in its reports (attempt), and a report of an earlier try is 409 stale_attempt.
Set on completed, failed and cancelled, and only there.
Only on a run-export job in GET /v1/jobs and in the answer of GET /v1/runs/{id}/export (202): the run the file is of, so «Export again» works from any browser. A completed export stays in the list 7 days (its file goes after 24 hours).
Example
{ "jobs": [ { "id": "6f1c2b3a-0000-4000-8000-0000000000a9", "kind": "ingest", "state": "in_progress", "subjectId": "6f1c2b3a-0000-4000-8000-0000000000d1", "subjectName": "nightly-e2e", "progress": { "done": 600, "total": 800 }, "reason": null, "cursor": "result:600", "attempt": 1, "createdAt": "2026-09-16T10:02:00.000Z", "startedAt": "2026-09-16T10:02:00.000Z", "finishedAt": null, "updatedAt": "2026-09-16T10:09:41.000Z" } ]}No / invalid token or session
The project named in X-Plune-Project is not one of yours
object
Example generated
{ "error": "example"}