Approve or deny a pipeline approval
const url = 'http://127.0.0.1:8765/api/pipeline/approvals/example';const options = { method: 'POST', headers: {'Content-Type': 'application/json'}, body: '{"approve":true}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url http://127.0.0.1:8765/api/pipeline/approvals/example \ --header 'Content-Type: application/json' \ --data '{ "approve": true }'Approve or deny one approval. 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. Approved jobs run in the background within the daily cap of model calls (pipeline.max_model_calls_per_day): the call over it waits for the next day. decided_jobs is how many jobs this call opened or cancelled; deciding an approval that is already decided changes nothing and answers it as it is. runner false: this server runs no pipeline thread (run gigai scout pipeline run --once). This call itself makes no model call.
Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”The approval’s id (GET /api/pipeline/approvals).
Request Bodyrequired
Section titled “Request Bodyrequired”object
Who decides, recorded on the approval (default: the X-GigAI-Actor header, else operator).
True: its jobs open and run. false: its jobs are cancelled; no model call is made.
Example
{ "approve": true}Responses
Section titled “Responses”Success.
object
Example
{ "approval": { "created_at": "2026-10-03T09:30:00.000000Z", "decided_at": "2026-10-03T09:40:00.000000Z", "decided_by": "operator", "decided_jobs": 2, "est_calls": 4, "est_tokens": 78000, "id": "apv_0123456789abcdef0123456789abcdef", "jobs": 2, "profile_id": null, "state": "approved", "trigger": "answer_saved", "waiting": [], "waiting_jobs": 0 }, "runner": true, "schema_version": "scout-pipeline-approval:1"}Forbidden / forbidden_origin: loopback peer and Host 127.0.0.1:<port> or localhost:<port> only (Origin too on writes).
object
object
Examplegenerated
{ "error": { "allowed_keys": [ "example" ], "code": "example", "message": "example" }}Approval_not_found, target_unavailable
object
object
Example
{ "error": { "code": "approval_not_found", "message": "..." }}Unsupported_media_type: writes need Content-Type: application/json.
object
object
Examplegenerated
{ "error": { "allowed_keys": [ "example" ], "code": "example", "message": "example" }}Wrong_type, unknown_key, bad_enum, invalid_value
object
object
Example
{ "error": { "code": "wrong_type", "message": "..." }}