Skip to main content
POST
/
v1
/
cover-letter
Create Cover Letter
curl --request POST \
  --url https://api.mokaru.ai/v1/cover-letter \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "cvId": "<string>",
  "title": "<string>",
  "content": "<string>",
  "templateId": "<string>",
  "isDefault": true,
  "variables": {},
  "showName": true,
  "showEmail": true,
  "showPhone": true,
  "showAddress": true,
  "headerAlignment": "<string>",
  "fontFamily": "<string>",
  "fontSize": 123,
  "lineSpacing": 123
}
'
{
  "success": true,
  "id": "<string>"
}

Documentation Index

Fetch the complete documentation index at: https://docs.mokaru.ai/llms.txt

Use this file to discover all available pages before exploring further.

Overview

Create a cover letter and link it to a resume. A cover letter cannot exist on its own: cvId is required and must reference an existing resume the caller owns. If the user has no resumes yet, create one first via POST /v1/resume. A resume can have at most one cover letter (the cvId link is unique). If one already exists, this endpoint returns 409 Conflict with the existing id - use PATCH /v1/cover-letter/{id} to update instead.
Plus plan only. This endpoint returns 403 Forbidden with { requiresUpgrade: true } if the user is on the free plan. The free read/list/delete endpoints stay available so downgraded users can still see and clean up their existing cover letters.
Scope required: cover-letter:write | Rate limit: 10 requests/min

Request

POST /v1/cover-letter

Body Parameters

cvId
string
required
Resume id this cover letter belongs to. Must be owned by the caller.
title
string
required
Cover letter title (max 200 chars).
content
string
required
Body text. Markdown allowed - the builder renders it.
templateId
string
Optional cover letter template id.
isDefault
boolean
default:"false"
Mark as the user’s default cover letter (unsets any existing default).
variables
object
Template-variable map, e.g. { "company": "Acme", "contactPerson": "Jane Doe" }. Values are strings.
showName
boolean
default:"true"
Header: show name.
showEmail
boolean
default:"true"
Header: show email.
showPhone
boolean
default:"true"
Header: show phone.
showAddress
boolean
default:"true"
Header: show address.
headerAlignment
string
default:"left"
left | center | right.
fontFamily
string
default:"Inter"
Font family.
fontSize
number
default:"11"
Font size in pt.
lineSpacing
number
default:"1.6"
Line spacing.

Example

curl -X POST "https://api.mokaru.ai/v1/cover-letter" \
  -H "Authorization: Bearer mk_your_key" \
  -H "Content-Type: application/json" \
  -d '{
    "cvId": "clx1234",
    "title": "Stripe - Backend Engineer",
    "content": "Dear hiring team,\n\nI am applying for ...",
    "variables": { "company": "Stripe", "contactPerson": "Jane Doe" }
  }'

Response

success
boolean
Whether the cover letter was created.
id
string
The new cover letter’s unique ID.
{ "success": true, "id": "clx_cl_abc" }

Error: cover letter already exists

{
  "error": "Cover letter already exists for this resume",
  "existingId": "clx_cl_existing"
}
Status: 409 Conflict.