QuickResume API Reference
The QuickResume API lets you manage resumes, users, and AI features programmatically. Build integrations, automate workflows, or extend the platform for your use case.
https://www.quickresume.onlineUse the www host. The apex domain quickresume.online 301-redirects to it, and a POST to the apex can lose its body. Self-hosted deployments use their own domain.
Two ways to call the API
Every procedure is reachable through two mounts. Pick the one that matches the endpoint — the method badge and the callout on each endpoint tell you which.
/api/openapiStandard REST. Uses the HTTP method and path shown (with {id} path params and query strings). Send and receive bare JSON — no wrapper. Covers resume, auth, printer, chatbot, API keys, flags, statistics, and feedback.
/api/rpcoRPC protocol. Always POST to /api/rpc/<namespace>/<procedure>, with the body wrapped as { "json": { … } } and responses wrapped in { "json": … }. The only way to reach AI, payments, subscriptions, and storage (they have no REST route).
REST example
# Get a resume by id (bare JSON, no envelope) curl https://www.quickresume.online/api/openapi/resume/550e8400-e29b-41d4-a716-446655440000 \ -H "Authorization: Bearer qr_abc123..."
RPC example
# Generate a summary (POST + { "json": … } envelope)
curl -X POST https://www.quickresume.online/api/rpc/ai/generateSkills \
-H "Authorization: Bearer qr_abc123..." \
-H "Content-Type: application/json" \
-d '{"json":{"jobTarget":"Frontend Engineer","experience":[]}}'Authentication
Protected endpoints require one of two authentication methods:
Pass your API key in the Authorization header as a Bearer token. Keys are prefixed with qr_.
Authorization: Bearer qr_...Browser sessions use the Supabase auth cookie automatically — no header needed.
Cookie: sb-... (set automatically)Data Model — ResumeData
The data field on create (via import) and update is a single ResumeData object. It is strictly validated — when you send data, the whole object and all of its fields are required. There is no partial-data merge.
ResumeData {
picture: { hidden, url, size, rotation, aspectRatio, borderRadius, ... }
basics: { name, headline, email, phone, location, website, customFields[] }
summary: { title, columns, hidden, content } // content is HTML
sections: { ...13 built-in sections, see below }
customSections: [ { id, type, items[], title, columns, hidden } ]
metadata: { template, layout, css, page, design, typography, notes }
}Built-in section keys (13)
profilesexperienceeducationprojectsskillslanguagesinterestsawardscertificationspublicationsvolunteerinternshipsreferencesEach section has { title, columns, hidden, items[] }; every item has at least { id, hidden } plus type-specific fields. name, slug, and id live on the resume record, not inside ResumeData.
HTTP Status Codes
The API uses standard HTTP codes. Error responses include a JSON body with a message field.
| Status | Meaning |
|---|---|
| 200 | Success |
| 400 | Bad Request — validation error or missing fields |
| 401 | Unauthorized — missing or invalid credentials |
| 402 | Payment Required — quota exceeded or plan restriction |
| 403 | Forbidden — insufficient permissions |
| 404 | Not Found — resource doesn't exist |
| 500 | Internal Server Error — unexpected server failure |
Quick Start
Create an API key in Settings → API Keys, then make your first request:
# 1. List your resumes (REST — bare JSON)
curl https://www.quickresume.online/api/openapi/resume/list \
-H "Authorization: Bearer YOUR_API_KEY"
# 2. Get a specific resume by id
curl https://www.quickresume.online/api/openapi/resume/YOUR_RESUME_ID \
-H "Authorization: Bearer YOUR_API_KEY"
# 3. Render it to a PDF (returns { url })
curl https://www.quickresume.online/api/openapi/printer/resume/YOUR_RESUME_ID/pdf \
-H "Authorization: Bearer YOUR_API_KEY"