Skip to main content

API Keys

All API requests require an API key passed in the Authorization header:
Authorization: Bearer mk_<64 hex characters>

Creating an API Key

  1. Go to Settings → Integrations → API Keys in the Mokaru app
  2. Click Create API key
  3. Give it a name (e.g. “Claude Desktop”) and select permissions
  4. Copy the key immediately - it’s only shown once
API keys require a Plus plan. You can have 1 active key per account. Revoke the existing key to create a new one.

Scopes

Each API key has scopes that control what it can access. Most resources have a :read and :write pair; some have additional verbs.

Core scopes

ScopeDescription
jobs:searchSearch job listings
tracker:readRead your applications
tracker:writeCreate, update, and delete applications
profile:readRead your career profile
profile:writeUpdate your career profile
contacts:readRead your contacts
contacts:writeCreate, update, and delete contacts
resume:readList and read resumes
resume:writeCreate, update, and delete resumes
resume:exportExport resumes as PDF

Resume section scopes

Each section of a resume has its own scope so you can grant fine-grained access.
ScopeDescription
experiences:read / experiences:writeWork experiences
education:read / education:writeEducation entries
skills:read / skills:writeSkills
summaries:read / summaries:writeProfile summary variants
projects:read / projects:writeProjects
certificates:read / certificates:writeCertificates
awards:read / awards:writeAwards
publications:read / publications:writePublications
interests:read / interests:writeInterests
custom-sections:read / custom-sections:writeCustom resume sections and items
If a request requires a scope the key doesn’t have, the API returns 403 Forbidden.

Rate Limits

Rate limits are per account (not per key) using a sliding window. Most endpoints follow a predictable pattern by HTTP method:
HTTP methodDefault limit
GET (list, e.g. /v1/contacts)60 requests/min
GET (single item, e.g. /v1/contacts/:id)30 requests/min
POST (create)20 requests/min
PATCH (update)20 requests/min
DELETE10 requests/min
A few endpoints deviate from the default:
EndpointLimit
POST /v1/jobs/search30 requests/min
POST /v1/resume10 requests/min
POST /v1/resume/:id/export/pdf5 requests/min
GET /v1/profile30 requests/min
Every response includes rate limit headers:
X-RateLimit-Limit: 30
X-RateLimit-Remaining: 29
X-RateLimit-Reset: 1710504000000
When rate limited, the response status is 429 and the body includes a Retry-After indication.
The /mcp endpoint uses a slightly different scheme: 100 requests per 10 seconds per IP and 60 per minute per OAuth client, with RFC-draft RateLimit-* headers. Tools called via MCP still hit the underlying /v1/* rate limits on top of those, so heavy automation can be capped on either layer.

Error Responses

StatusMeaning
400Bad request - missing or invalid fields
401Missing, invalid, expired, or revoked API key
403API key lacks required scope
429Rate limit exceeded
500Internal server error
All errors return JSON:
{
  "error": "Invalid or expired API key"
}

Security

  • Keys are SHA-256 hashed before storage - plain keys are never stored
  • 256-bit entropy (32 random bytes) - cryptographically secure
  • Keys can be revoked instantly from Settings
  • Standalone auth - not tied to your browser session, designed for machine-to-machine access