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 valueInput
json-resumeJSON Resume string
LinkedIn (linkedin)Base64-encoded LinkedIn export ZIP (base64: true)
rrv3Reactive Resume JSON
rustumeNative 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

APICLI
POST /api/parserustume parse
POST /api/render/pdfrustume render
POST /api/render/previewrustume preview
POST /api/validaterustume validate
GET /api/templatesrustume templates