Quick Start
Three steps to your first API call.
Create an API key
Go to Settings → Developer → API Keys and create a key with the scopes you need. Save the key — it's only shown once.
Set the header
Pass your key in the X-API-Key header on every request.
Make your first request
curl -s \
-H "X-API-Key: hh_live_your_key_here" \
https://head-honta-production.up.railway.app/api/v1/jobs?status=open&limit=10Authentication
API Key Header
All requests must include your API key in the X-API-Key header. Keys are scoped to your organization — you can only access your own data.
X-API-Key: hh_live_a1b2c3d4e5f6...Scoped Permissions
Each key has granular scopes controlling what it can access. Assign only what you need.
jobs:readView jobs in your organizationjobs:writeCreate and update jobscandidates:readView candidate informationcandidates:writeCreate and update candidatespipeline:readView pipeline stages and candidate positionspipeline:writeMove candidates between pipeline stagesapplications:readView job applicationsPagination
All list endpoints use cursor-based pagination for stable, efficient traversal.
Parameters
limitResults per page (1-100, default 20)cursorPass nextCursor from the previous responseResponse
{
"success": true,
"data": [...],
"pagination": {
"hasMore": true,
"nextCursor": "abc123",
"limit": 20
}
}Endpoint Reference
All endpoints are prefixed with /api/v1 and require an API key. For interactive testing, use the Swagger UI.
Jobs
Create, read, and update job postings in your organization.
/api/v1/jobsList jobs (cursor-paginated)jobs:read/api/v1/jobsCreate a new jobjobs:write/api/v1/jobs/{id}Get a job by IDjobs:read/api/v1/jobs/{id}Update a jobjobs:writeCandidates
Manage candidate records in your talent pool.
/api/v1/candidatesList candidatescandidates:read/api/v1/candidatesCreate a candidatecandidates:write/api/v1/candidates/{id}Get a candidate by IDcandidates:read/api/v1/candidates/{id}Update a candidatecandidates:writePipeline
View stages and move candidates through your hiring pipeline.
/api/v1/pipeline/stagesList pipeline stagespipeline:read/api/v1/pipeline/stages/{stageId}/candidatesGet candidates at a stagepipeline:read/api/v1/pipeline/candidates/{id}/moveMove candidate to a stagepipeline:writeApplications
View job applications and their statuses.
/api/v1/jobs/{jobId}/applicationsList applications for a jobapplications:readExamples
Common workflows, ready to paste.
curl -s -X POST \
-H "X-API-Key: hh_live_your_key_here" \
-H "Content-Type: application/json" \
https://head-honta-production.up.railway.app/api/v1/jobs \
-d '{
"title": "Senior Backend Engineer",
"description": "We are looking for...",
"location": "Lagos, Nigeria",
"employmentType": "full-time",
"status": "open"
}'curl -s \
-H "X-API-Key: hh_live_your_key_here" \
https://head-honta-production.up.railway.app/api/v1/pipeline/stages/{stageId}/candidates?limit=20curl -s -X PUT \
-H "X-API-Key: hh_live_your_key_here" \
-H "Content-Type: application/json" \
https://head-honta-production.up.railway.app/api/v1/pipeline/candidates/{id}/move \
-d '{ "stageId": "target-stage-uuid" }'Rate Limits & Plans
API access is gated by subscription plan. Burst rate: 60 requests per minute per key.
| Plan | API Access | Max Keys | Monthly Requests |
|---|---|---|---|
| Free | - | - | - |
| Starter | 1 | 1,000 | |
| Professional | 5 | 10,000 | |
| Enterprise | Unlimited | Unlimited |