Core Endpoints
POST /api/parse, POST /api/render/pdf, validate, and template reference.
Core endpoints are available in every deployment — no authentication required.
Health
GET /health
Returns 200 with body ok. Used by Docker healthchecks and load balancers.
Version
GET /version
Returns the version, commit, and build time of the running build, so a deploy can be verified with a single cheap request:
{
"version": "0.44.0",
"commit": "c515854",
"built_at": "2026-07-25T19:38:00Z"
}
commit is the short commit the image was built from — the same seven characters as the
sha-<commit> container tag. commit and built_at are null for builds made without that
metadata, such as a local cargo run.
Templates
GET /api/templates
Returns all 12 templates with theme colors:
[
{
"id": "rhyhorn",
"name": "Rhyhorn",
"theme": {
"background": "#ffffff",
"text": "#000000",
"primary": "#65a30d"
}
}
]
GET /api/templates/{id}/thumbnail
Returns a PNG preview rendered with sample data. Cached for 24 hours (Cache-Control: public, max-age=86400).
Parse
POST /api/parse
Content-Type: application/json
Convert external formats to Rustume JSON.
Parse request body
{
"format": "json-resume",
"data": "{\"basics\":{\"name\":\"Jane Doe\",\"label\":\"Engineer\"}}",
"base64": false
}
format value | Input |
|---|---|
json-resume | JSON Resume string |
LinkedIn (linkedin) | Base64-encoded LinkedIn export ZIP (base64: true) |
rrv3 | Reactive Resume JSON |
rustume | Native Rustume JSON |
Response: 200 with ResumeData JSON.
Render PDF
POST /api/render/pdf
Content-Type: application/json
PDF request body
{
"resume": { "basics": { "name": "Jane Doe" }, "sections": {}, "metadata": {} },
"template": "onyx"
}
template is optional — defaults to metadata.template or rhyhorn.
Response: 200 with Content-Type: application/pdf. Body starts with %PDF.
Validates resume before rendering. Returns 422 with validation details on failure.
Render preview
POST /api/render/preview
Content-Type: application/json
Preview request body
{
"resume": { ... },
"template": "azurill",
"page": 0
}
Response: 200 PNG image. Header X-Total-Pages indicates total page count.
Validate
POST /api/validate
Content-Type: application/json
Request: Full ResumeData JSON body.
Response
{ "valid": true }
Or on failure:
{
"valid": false,
"errors": ["basics.email: invalid email format"]
}
Always returns 200 — check the valid field. Nested field paths use dot notation (e.g.
sections.experience.items[0].company).
Rate limits
Connected deployments apply per-route limits when RUSTUME_CLOUD=true and DATABASE_URL is
configured. Defaults, route groups, 429 responses, and bulk export caps are documented in Rate
Limits. Hosted billing does not hide parsing, rendering,
templates, or connected capabilities from self-hosted operators.
CLI equivalents
| API | CLI |
|---|---|
POST /api/parse | rustume parse |
POST /api/render/pdf | rustume render |
POST /api/render/preview | rustume preview |
POST /api/validate | rustume validate |
GET /api/templates | rustume templates |