Skip to main content

Resume Output APIs

These endpoints persist the artifacts produced by the Hermes resume agent.

POST /api/generated-resumes

Purpose: Save a finished generated resume and link it back to the source job description.

Used by: Hermes agent.

Used in skills: resume-pipeline-orchestrator, final persistence step after latex-assembly and the mandatory self-review gate.

Authentication: API key auth.

Request format: JSON body containing the rendered output plus the source JD context.

{
"company_name": "Acme",
"job_description": "We are hiring a senior platform engineer...",
"job_description_id": "<JOB_DESCRIPTION_ID>",
"latex_content": "\\documentclass{article} ...",
"source": "jobright"
}

Behavior: The backend stores the generated artifact and associates it with the source JD. The orchestrator contract requires both job_description and job_description_id; the raw JD string is still validated even when the ID is present.

Success response:

{
"success": true,
"generated_resume": {
"id": "<GENERATED_RESUME_ID>",
"job_description_id": "<JOB_DESCRIPTION_ID>",
"company_name": "Acme",
"created_at": "2026-06-16T15:23:44.000Z"
}
}

Failure/empty-state behavior: Returns 400 if required fields are missing, including the raw job_description string. Returns 404 or validation errors if the JD reference is invalid.

Why it matters: This is the persistence step that turns a successful Hermes run into a dashboard-visible artifact.

Example request:

curl -X POST "<DASHBOARD_BASE_URL>/api/generated-resumes" \
-H "Authorization: Bearer <API_KEY>" \
-H "Content-Type: application/json" \
-d '{
"company_name": "Acme",
"job_description": "We are hiring a senior platform engineer...",
"job_description_id": "<JOB_DESCRIPTION_ID>",
"latex_content": "\\documentclass{article} ...",
"source": "jobright"
}'