Render a tailored resume as a PDF
const url = 'http://127.0.0.1:8765/api/tailored-resumes/pdf';const options = { method: 'POST', headers: {'Content-Type': 'application/json'}, body: '{"job_identity":"https://boards.greenhouse.io/acme/jobs/101","profile_id":"prof_1"}'};
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/tailored-resumes/pdf \ --header 'Content-Type: application/json' \ --data '{ "job_identity": "https://boards.greenhouse.io/acme/jobs/101", "profile_id": "prof_1" }'Render the stored tailored resume as a PDF (binary). Returns application/pdf with Content-Disposition: attachment; filename=<company>-<role>-<YYYY-MM-DD>.pdf (never your name); changes nothing. X-GigAI-Pages and X-GigAI-Spacing-Scale say what was rendered. 0.1.11.5: a job whose spacing was saved (the job page’s slider, POST /api/tailored-resumes/preview) is rendered at that spacing as saved; below 1.0 the spacing also tightens the body’s line height (14.3pt at 1.0 down to 11.5pt at 0.7; the type size never changes), so 0.7 holds about a quarter more text than 1.0. GigAI stores no name or contact details: without header the PDF has no header (a blank block keeps the page layout) and the response carries X-GigAI-Finish-Url, the local Scout page where the person adds their details in the Generate PDF form and downloads; an agent cannot finish that step unless it drives that person’s browser. The PDF stays on the resume’s page limit: a saved spacing that would run past it is tightened (to 0.8), then the spacing goes to 0.7 at most; when no spacing fits, the PDF is rendered as saved and X-GigAI-Fit-Note says so in one plain sentence (page counts and what to do; nothing of the resume). 0.1.11.4: when the posting’s board no longer lists it the PDF is made all the same and X-GigAI-Posting-Note says “This posting looks closed: check it before you apply” (GET /api/jobs liveness: one board request at most, none within the hour).
Request Bodyrequired
Section titled “Request Bodyrequired”object
The Generate PDF form: {name, email, phone, location, github, linkedin, website, link, work_authorization}, each an optional string of at most 200 characters. github and linkedin take the id alone and website a site address (a profile address there is read as the id); they print as links. The header is the name and ONE contact line: location | work_authorization (e.g. VISA: H1B, as written) | the links | email | phone; an empty field leaves no separator, and a line too long for the page is set smaller before it wraps. Optional links: at most 6 more links, each {label, url}; a link prints without https:// or www. and its target is the full URL. Fills this one PDF’s header; never stored, logged or returned. Left out: the PDF has no header. Details an agent sends here went through that agent and its model provider; the default for an agent is the headerless PDF and the person finishing it in Scout.
object
The job identity.
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.
The spacing for this PDF, 0.7 to 1.4, used as given (nothing tightens it) and not saved. Default: the spacing saved for this job, else the saved layout.
Example
{ "job_identity": "https://boards.greenhouse.io/acme/jobs/101", "profile_id": "prof_1"}Responses
Section titled “Responses”Success.
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" }}Tailored_resume_not_found, target_unavailable
object
object
Example
{ "error": { "code": "tailored_resume_not_found", "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": "..." }}Pdf_render_failed
object
object
Example
{ "error": { "code": "pdf_render_failed", "message": "..." }}