Coding agent documentation index Fetch the complete documentation index at: https://docs.worklittle.com/docs-agent-manifest.json Use this file to discover all available pages before exploring further.
Create cover letters
Generate a one-page hiring-ready cover letter for a company and role (HTML, PDF, and/or DOCX).
Overview
POST /jobs/cover-letters (MCP create_cover_letter) writes a short, employer-facing letter - why this company and role, grounded in the candidate’s real background. Pass company and role (and/or job_id) so the letter is not generic. Hiring-ready output has no placeholders. Requires agent:tools. Pricing. Résumés are a separate product: Create resumes.
When to use
If you are building:
A per-company outreach or apply bundle Generate the letter after (or with) a tailored résumé, then attach via cover_letter or cover_letter_file on Apply for jobs An agent that personalizes to one posting Set job_id plus company / role so the opening and body name the employer and title A tone-controlled writer Use instructions for voice (warm, concise, formal) without rewriting the résumé
Basic usage
curl -s -X POST "https://api.worklittle.com/jobs/cover-letters" \
-H "Authorization: Bearer $WORKLITTLE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"job_id": "abc123",
"company": "Example Co",
"role": "Senior Engineer",
"resume_text": "…",
"instructions": "Warm, concise tone"
}'
MCP create_cover_letter uses the same JSON body. company and role are the fields that make this endpoint different from resume generation - set them when you know the target.
> Tip: Pass the same resume_text / profile you used for the résumé so the letter stays consistent with the PDF you attach.
Company, role, and job context
| Goal | What to send | | --- | --- | | Named employer + title in the letter | `company` and `role` | | Pull posting context from Worklittle | `job_id` (server loads the job) | | Keywords without a full JD paste | `job_context` from `get_job_keywords` | | Background for “why me” paragraphs | `resume_text` and/or `profile` |
Hiring-ready mode never invents experience. If you only pass company / role with almost no background, supply more profile data or omit claims you cannot support.
Output formats
Same formats / format / Accept rules as Create resumes > Output formats. Default html + pdf. One AI charge regardless of how many formats you request. PDF is one Letter page; DOCX does not shrink-to-fit.
Create cover letters reference
> Cover letter endpoints only.
Overview
| Method | Path | Purpose | | --- | --- | --- | | POST | `/jobs/cover-letters` | Hiring-ready one-page cover letter (default html + pdf; optional docx) |
Requires agent:tools. Metered AI tokens only - Pricing. MCP: create_cover_letter. Resumes: Create resumes.
Legacy: POST /v1/agent/tool with { "name": "create_cover_letter", "args": { … } }.
Request body
| Field | Type | Notes | | --- | --- | --- | | `job_id` | string | Loads posting context when provided | | `company` | string | Employer name (strongly recommended) | | `role` | string | Job title (strongly recommended) | | `resume_text` | string | Candidate background for the letter body | | `profile` | object | Structured profile JSON | | `job_context` | object | Pre-fetched job fields / keywords | | `instructions` | string | Tone or emphasis (not a full JD dump) | | `formats` | string[] | Subset of `html`, `pdf`, `docx` | | `format` | string | Alias: `html` \| `pdf` \| `docx` |
Response
{
"document_type": "cover_letter",
"mode": "ready",
"formats": ["html", "pdf"],
"html": "<h1>…</h1>…",
"pdf_base64": "JVBERi0xLjQK…",
"pdf_mime": "application/pdf",
"pdf_filename": "cover-letter.pdf",
"docx_base64": null,
"docx_mime": null,
"docx_filename": null,
"billing": { }
}
On apply, use plain text/html in cover_letter or bytes in cover_letter_file - not the résumé resume_file field.
Common mistakes
| Wrong | Correct | | --- | --- | | Generic letter with no `company` / `role` / `job_id` | Set at least employer + title, or a `job_id` | | Thin profile plus invented experience | Omit unknowns. Do not invent a story | | Reusing résumé `instructions` as the letter body | `instructions` is tone/emphasis; content comes from profile + job | | Putting the letter PDF in `resume_file` | Use `cover_letter` or `cover_letter_file` |
Patterns and gotchas
Not a second résumé - keep it short; sell fit for this employer/role. Match the résumé - reuse the same resume_text / profile for consistency. Apply - cover_letter (text) or cover_letter_file (base64) on submit_job_application. Formats detail - see Create resumes so both pages stay in sync.