Skip to content

Render resume markdown as a PDF

POST
/api/resume/pdf
curl --request POST \
--url http://127.0.0.1:8765/api/resume/pdf \
--header 'Content-Type: application/json' \
--data '{ "auto_fit": true, "markdown": "## Summary\n\n- Platform engineer with nine years building billing systems.\n\n## Experience\n\n### Northwind Health\nStaff Engineer | Jun 2020 - Present\n\n- Rebuilt the scheduling service on Python and Postgres.\n" }'

Render resume markdown you send as a PDF (binary), with the saved layout. Returns application/pdf with Content-Disposition: attachment; filename=resume-<YYYY-MM-DD>.pdf, X-GigAI-Pages and X-GigAI-Spacing-Scale; changes nothing. Local only: the markdown is not sent to a model, not stored and not logged. 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. Lines above the first ## section are not printed. Trailing <!-- ... --> comments are dropped, so a tailored resume’s markdown renders as it is. 422 resume_markdown_invalid names the line number and the rule.

Media typeapplication/json
object
auto_fit

Pick the spacing scale that ends the content near a page boundary. Default: the saved setting.

boolean
header

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
markdown
required

Resume markdown in GigAI’s format, at most 65536 bytes: ## Summary|Experience|Skills|Education|Projects|Other sections; in Experience, Projects and Education ### <heading> entries with - bullets.

string
profile_id

A profile id: with header, its saved title prints under the name.

string
spacing_scale

The spacing scale for this render, 0.7 to 1.4; turns auto fit off unless auto_fit is sent. Default: the saved setting.

number
Example
{
"auto_fit": true,
"markdown": "## Summary\n\n- Platform engineer with nine years building billing systems.\n\n## Experience\n\n### Northwind Health\nStaff Engineer | Jun 2020 - Present\n\n- Rebuilt the scheduling service on Python and Postgres.\n"
}

Success.

Media typeapplication/pdf
string format: binary

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

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": "target_unavailable",
"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, wrong_type, invalid_value, resume_markdown_invalid, resume_markdown_too_large

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

Pdf_render_failed

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