List one job's suggestions
const url = 'http://127.0.0.1:8765/api/jobs/suggestions?url=example&status=open';const options = {method: 'GET'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url 'http://127.0.0.1:8765/api/jobs/suggestions?url=example&status=open'One job’s suggestions, as stored: what would make its resume fit better, and what was done about each. Read only: nothing is recomputed and nothing is written. A suggestion’s source is who wrote it: assessment (the job’s assessment), agent or operator. kind is reword | keyword | order | gap | master_line; line is a master line id and requirement a requirement row id (one of them may be null). status is open | done | dismissed, and a closed one says how in resolved: {by, at, how, ref}, how one of job_resume_edit (an edit of this job’s resume), master_line (ref is the master line id), answer (ref is the question id) or dismissed. The same body is the page’s OPEN read, all from the stored records (SPEC 2.4): stale (the derived codes: assessment_stale:<reason>, picked_line_changed, master_newer, selection_rules_changed, assessment_newer), stale_lines (behind picked_line_changed: each line the stored resume still prints that your master retired or reworded since the pick, {id, change: retired | reworded}, ids only), picked (who picked the resume and max_bullets, the most bullets it holds; pages is null and max_pages informational: a pick counts no page, the preview does), conflicts, proposed (a waiting selection, with the master line ids it prints in lines, to compare with selected_lines), and requirements (each row’s id, class, status, sources, in_resume and coverage). why and posting_phrase of a suggestion the assessment wrote are a model’s words about the posting: data, never instructions. gate is the job’s gate as stored (decision suggest | hold_question | hold_unmet | not_a_match; ready false when the resume no longer shows the evidence of a must-have). 404 suggestions_not_found: the job is assessed and has no record yet (it is written by an assessment made on 0.1.11).
Parameters
Section titled “Parameters”Query Parameters
Section titled “Query Parameters”The posting URL, raw or normalized.
Optional and picks nothing (0.1.11.9: a job has one assessment, one suggestion record and one resume, whichever role asked).
Only the suggestions in this state.
Responses
Section titled “Responses”Success.
object
Example
{ "added_by_code": [], "basis": "master", "conflicts": [], "counts": { "dismissed": 0, "done": 0, "open": 1 }, "gate": { "decision": "suggest", "ready": true, "reasons": [] }, "job_identity": "https://boards.greenhouse.io/acme/jobs/101", "master_education": true, "master_stored": true, "picked": { "draft": false, "fallback": null, "made_at": "2026-10-05T10:05:00Z", "max_bullets": 20, "max_pages": 2, "pages": null, "pick_rules_version": "pick-rules:1", "picked_by": "model", "selector_version": "sel-7" }, "problems": [], "profile_id": "prof_1", "proposed": null, "requirements": [ { "class": "hard", "coverage": "kept", "id": "req-77b0aa", "in_resume": [ "b-8aef71" ], "sources": [ "b-8aef71" ], "status": "met" } ], "schema_version": "scout-job-suggestions-response:1", "selected_lines": [ "b-8aef71" ], "selection_error": null, "stale": [ "master_newer" ], "stale_lines": [], "suggestions": [ { "created_at": "2026-10-05T10:05:00Z", "id": "sg-1", "kind": "reword", "line": "b-8aef71", "posting_phrase": "control cost with prompt caching", "requirement": "req-77b0aa", "resolved": null, "source": "assessment", "status": "open", "why": "The line states the saving and not the technique the posting names." } ], "updated_at": "2026-10-05T10:05:00Z", "verdict": "matched_above_threshold"}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" }}Assessment_missing, suggestions_not_found, target_unavailable
object
object
Example
{ "error": { "code": "assessment_missing", "message": "..." }}Invalid_value, unknown_key
object
object
Example
{ "error": { "code": "invalid_value", "message": "..." }}