Skip to content

Get what the background pipeline is doing

GET
/api/pipeline
curl --request GET \
--url http://127.0.0.1:8765/api/pipeline

What the background pipeline is doing: lanes, caps used today, queue counts, approvals, each job’s steps and Scout label. System data only: ids, codes, counts, numbers and timestamps. A job is named by its job_identity (the posting’s public link). No posting, resume, answer or story text, no title, no company. setting is the pipeline’s settings in effect with the source that decided them (default, setting, environment, settings_unreadable); readable false: the settings file cannot be read and the pipeline is off. runner is this server’s runner thread (null when it runs none); its rank is the background rank lane’s last turn (null before the first: state, reason, model calls made, postings ranked, warning). yielding_to names live work the pipeline waits for (sources_update, assess_batch, find_jobs_run), else null. lanes: steps running per model lane against its cap, and error_code / retry_at while a lane is backed off. caps: today’s model calls of the pipeline and of the background rank against their daily caps (one count for the install, every profile together; warning once the count is past warn_at) and jobs_per_trigger. counts: steps per state and jobs per state (running, awaiting_approval, failed, waiting, done, cancelled). approvals: the pending approvals with their estimate. jobs: at most 200, most recently changed first, each with its steps’ states, the trigger that queued it, why it waits (daily_cap_reached, lane_backoff, retry_backoff), its failed step’s code and, once the label step is done, the Scout label as codes (label: recommended or needs_attention, reasons, ats_score). errors: the last 20 failed attempts, newest first, by code. A job enters the pipeline only when the user answered one of its questions, saved a story about one, or asked for it (POST /api/pipeline/process): new postings never do. Reading makes no model call and creates nothing.

Success.

Media typeapplication/json
object
schema_version
required
Allowed value: scout-pipeline:1
key
additional properties
any
Example
{
"approvals": {
"items": [
{
"created_at": "2026-10-03T09:30:00.000000Z",
"decided_at": null,
"decided_by": null,
"est_calls": 4,
"est_tokens": 78000,
"id": "apv_0123456789abcdef0123456789abcdef",
"jobs": 2,
"profile_id": null,
"state": "pending",
"trigger": "answer_saved",
"waiting": [
{
"job_identity": "https://boards.greenhouse.io/acme/jobs/111",
"profile_id": "prof_1"
},
{
"job_identity": "https://boards.greenhouse.io/acme/jobs/112",
"profile_id": "prof_1"
}
],
"waiting_jobs": 2
}
],
"pending": 1
},
"caps": {
"day": "2026-10-03",
"jobs_per_trigger": 10,
"pipeline_calls": {
"limit": 40,
"used": 6
},
"rank_calls": {
"limit": 100,
"used": 12,
"warn_at": 60,
"warning": false
}
},
"counts": {
"jobs": {
"awaiting_approval": 2,
"done": 1,
"running": 1
},
"jobs_total": 4,
"steps": {
"awaiting_approval": 2,
"blocked": 3,
"done": 4,
"running": 1
}
},
"errors": [
{
"at": "2026-10-03T09:12:00.000000Z",
"attempt": 1,
"error_code": "assess_timeout",
"job_identity": "https://boards.greenhouse.io/acme/jobs/109",
"profile_id": "prof_1",
"step": "tailor"
}
],
"jobs": [
{
"approval_id": null,
"error_code": null,
"job_identity": "https://boards.greenhouse.io/acme/jobs/101",
"label": {
"ats_score": 84,
"label": "recommended",
"reasons": []
},
"profile_id": "prof_1",
"state": "done",
"steps": {
"ats": "done",
"label": "done",
"reassess": "done",
"tailor": "done"
},
"trigger": "answer_saved",
"updated_at": "2026-10-03T09:31:10.000000Z",
"waiting": null
}
],
"lanes": [
{
"cap": 2,
"error_code": null,
"lane": "claude_cli",
"retry_at": null,
"running": 0
},
{
"cap": 2,
"error_code": null,
"lane": "codex_cli",
"retry_at": null,
"running": 1
},
{
"cap": 4,
"error_code": null,
"lane": "local",
"retry_at": null,
"running": 0
},
{
"cap": 1,
"error_code": null,
"lane": "ollama",
"retry_at": null,
"running": 0
}
],
"readable": true,
"runner": {
"active": true,
"last": {
"reason": null,
"state": "ran",
"steps": 4
},
"rank": {
"calls": 2,
"ranked": 73,
"reason": null,
"state": "ran",
"warning": false
}
},
"schema_version": "scout-pipeline:1",
"setting": {
"auto_jobs_per_trigger": 10,
"enabled": true,
"label_min_ats": 0,
"max_model_calls_per_day": 40,
"models": {},
"rank": {
"enabled": true,
"max_calls_per_day": 100,
"source": "default",
"warn_calls_per_day": 60
},
"source": "default"
},
"yielding_to": null
}

Forbidden / forbidden_origin: loopback peer and Host 127.0.0.1:<port> or localhost:<port> only (Origin too on writes).

Media typeapplication/json
object
error
required
object
allowed_keys
Array<string>
code
required
string
message
required
string
key
additional properties
any
Examplegenerated
{
"error": {
"allowed_keys": [
"example"
],
"code": "example",
"message": "example"
}
}

Unknown_key

Media typeapplication/json
object
error
required
object
allowed_keys
Array<string>
code
required
string
message
required
string
key
additional properties
any
Example
{
"error": {
"code": "unknown_key",
"message": "..."
}
}