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.