Skip to content

The project’s queue of AI operations

GET
/v1/jobs
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.

X-Plune-Project
string

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.

runId
string

Only the jobs of this run. Absent: the whole queue of the project.

The queue

Media type application/json
object
jobs
required
Array<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 »; not an error, no button, listed for 24 hours like completed). progress is null while the operation does not know its size — never 0 / 0.

object
id
required
string format: uuid
kind
required

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.

string
>= 1 characters <= 64 characters
state
required
string
Allowed values: in_progress action_needed paused blocked completed failed cancelled
subjectId
required

What it works on — a run id, an import id.

string
nullable
subjectName
required

Its name as people know it — shown after the kind.

string
nullable <= 200 characters
progress
required

How far it got; null while the size is not known yet.

object
done
required
integer
total
required
integer
>= 1
reason
required

Why it stopped — only on action_needed, paused, blocked, failed, cancelled. A cancel reads «Cancelled by ».

string
nullable <= 2000 characters
cursor
required

The producer’s own token for where it resumes; null — a Retry starts from the beginning.

string
nullable <= 2000 characters
attempt
required

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.

integer
>= 1
createdAt
required
string format: date-time
startedAt
required
string format: date-time
nullable
finishedAt
required

Set on completed, failed and cancelled, and only there.

string format: date-time
nullable
runId

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).

string
updatedAt
required
string format: date-time
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

Media type application/json
object
error
required
string
Example generated
{
"error": "example"
}