Start a find-jobs run (deprecated)
const url = 'http://127.0.0.1:8765/api/run';const options = { method: 'POST', headers: {'Content-Type': 'application/json'}, body: '{"config_digest":"sha256:...","keywords":["kubernetes"],"schema_version":"scout-find-jobs-run-request:1","selection_cap":10}'};
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/run \ --header 'Content-Type: application/json' \ --data '{ "config_digest": "sha256:...", "keywords": [ "kubernetes" ], "schema_version": "scout-find-jobs-run-request:1", "selection_cap": 10 }'Deprecated: start a find-jobs run (acquire, rank, assess up to the cap). Deprecated since 0.1.10.7 and kept for one release for scripts: a run is no longer the way in. Search with GET /api/postings (the stored index, live, no run), see what is new with GET /api/new, and assess on approval with POST /api/postings/assess or POST /api/new; ranking runs in the background. Existing runs stay readable (GET /api/runs and the routes under it) and what they assessed is in the read model (POST /api/runs/import). Reads the boards over the network and spends model calls on assessment; returns as soon as the run is allocated. Poll GET /api/runs/{run_id}. keywords filter the postings the profile’s titles matched, through the full-text index (title and description): a posting whose stored text matches none of them is dropped; one keyword is enough, each is matched as a phrase. A posting with no stored text cannot be checked: it is kept and counted. They never add postings the titles did not match. The run’s sealed config carries them (keywords), and GET /api/runs/{run_id}/progress boards.keywords reports {terms, mode: filter, applied, reason, message, matched, dropped, text_not_checked}; with no text index on this machine applied is false, reason is no_text_index, text_index_unavailable or bad_query, and the search runs as if no keyword was given. config_digest is the one GET /api/config returned (keywords are not part of it).
Request Bodyrequired
Section titled “Request Bodyrequired”object
Config_digest from GET /api/config.
The consent envelope the UI sends.
object
Optional full-text keywords for this one search: up to 20 phrases of at most 100 characters.
Model target.
Scout-find-jobs-run-request:1.
Postings to assess (1..50).
Which postings the cap keeps.
Example
{ "config_digest": "sha256:...", "keywords": [ "kubernetes" ], "schema_version": "scout-find-jobs-run-request:1", "selection_cap": 10}Responses
Section titled “Responses”Success.
object
Example
{ "node_receipts": [], "run_id": "run_20260929T100000Z", "schema_version": "scout-find-jobs-run-response:1", "status": "running"}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" }}Config_missing
object
object
Example
{ "error": { "code": "config_missing", "message": "..." }}Config_digest_mismatch
object
object
Example
{ "error": { "code": "config_digest_mismatch", "message": "..." }}Unsupported_media_type: writes need Content-Type: application/json.
object
object
Examplegenerated
{ "error": { "allowed_keys": [ "example" ], "code": "example", "message": "example" }}Invalid_value, wrong_type, unknown_key
object
object
Example
{ "error": { "code": "invalid_value", "message": "..." }}