Skip to content

Add or remove a master line on a job's tailored resume

PUT
/api/tailored-resumes/selection
curl --request PUT \
--url http://127.0.0.1:8765/api/tailored-resumes/selection \
--header 'Content-Type: application/json' \
--data '{ "item_id": "b-hex-03", "job_identity": "https://boards.greenhouse.io/acme/jobs/101", "profile_id": "prof_1", "updated_at": "2026-09-29T10:05:00Z", "use": "add" }'

Add or Remove one master line on a job’s tailored resume. For a resume tailored from the master resume (its selection lists what was picked and what was left out). remove takes the line off this one job’s resume and lists it under selection.left_out with code removed_by_you. add shows the line: one an older pick had cut for length comes back as it was; any other is a copy of the master line as the master words it now, under its role. The reply is the tailored resume with selection_change: {use, item_id, applied, changed, needs_choice, pages, max_pages, would_cut, cut}. An add ALWAYS applies and nothing else moves: no page is counted and nothing is rendered, so applied is true, needs_choice false, would_cut and cut empty and pages null (the fields stay for callers; until 0.1.11.5 an add that ran past 2 pages stored nothing and asked what to cut). How many pages the resume now prints on is what POST /api/tailored-resumes/preview says, and its spacing fits the page. An add may take a resume past the 20 bullets a pick holds. updated_at is unchanged. The resume is then yours: background tailoring never replaces it. Other jobs, the profile’s selection and the master are untouched. Local only: no model call.

Media typeapplication/json
object
fit

Accepted and ignored since 0.1.11.5: an add always applies and nothing is cut to make room (the preview’s spacing fits the page).

string
Allowed values: ask cut keep
item_id
required

The master line’s id (from selection.picked / selection.left_out, or GET /api/master).

string
job_identity
required

The job identity.

string
profile_id

Optional (0.1.11.9: a job has one resume, and the job names it). Still taken from callers of before; “ephemeral” names a pasted resume’s.

string
updated_at
required

The updated_at of the tailored resume you read; a newer tailoring answers 409.

string
use
required

Add shows a left-out master line; remove takes a picked one off this resume.

string
Allowed values: add remove
Example
{
"item_id": "b-hex-03",
"job_identity": "https://boards.greenhouse.io/acme/jobs/101",
"profile_id": "prof_1",
"updated_at": "2026-09-29T10:05:00Z",
"use": "add"
}

Success.

Media typeapplication/json
object
schema_version
required
Allowed value: scout-tailor-response:1
key
additional properties
any
Example
{
"job": {
"job_identity": "https://boards.greenhouse.io/acme/jobs/101"
},
"markdown": "# ...",
"schema_version": "scout-tailor-response:1",
"selection_change": {
"applied": true,
"changed": true,
"cut": [],
"item_id": "b-hex-03",
"max_pages": 2,
"needs_choice": false,
"pages": null,
"use": "add",
"would_cut": []
}
}

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"
}
}

Tailored_resume_not_found, master_line_not_found, master_not_found, target_unavailable

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

Selection_line_not_shown, tailored_resume_changed

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

Unsupported_media_type: writes need Content-Type: application/json.

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, invalid_value, selection_unavailable, selection_line_unsupported

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": "..."
}
}