Authentication
The NexivoHR API uses bearer tokens. Generate a personal API token from Account → API Tokens in your dashboard.
Include the token in every request:
Authorization: Bearer YOUR_API_TOKEN
🔐 Security tip: Never commit API tokens to source control. Use environment variables.
Base URL
https://your-domain.com/ats/api/v1
Endpoints
Candidates
List, create, retrieve, update, and delete candidates.
/candidatesReturns a paginated list of candidates.
Query parameters:
page— page number (default 1)per_page— items per page (default 25, max 100)q— search query (boolean syntax)status— filter by status:new,screening,available,placed
Example:
curl -H "Authorization: Bearer YOUR_TOKEN" \
"https://your-domain.com/ats/api/v1/candidates?page=1&per_page=10"
/candidatesCreates a new candidate.
curl -X POST -H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"first_name": "Jane",
"last_name": "Smith",
"email": "jane@example.com",
"phone": "+1-555-1234",
"current_title": "Senior Engineer",
"city": "San Francisco",
"state": "CA"
}' \
https://your-domain.com/ats/api/v1/candidates
/candidates/{id}Retrieves a single candidate by ID.
/candidates/{id}Updates a candidate. Send only the fields you want to change.
/candidates/{id}Soft-deletes a candidate (sets status to inactive).
Jobs
Same CRUD pattern as candidates.
GET /jobs— list jobsPOST /jobs— create a jobGET /jobs/{id}— get a jobPATCH /jobs/{id}— update a jobDELETE /jobs/{id}— close a job
Submissions
Track candidates through the pipeline for a job.
GET /jobs/{job_id}/submissions— list submissions for a jobPOST /jobs/{job_id}/submissions— submit a candidatePATCH /submissions/{id}— update stage (screening,interview,offer,placed,rejected)
Webhooks
Register webhooks under Account → API Tokens → Webhooks. Available events:
candidate.createdcandidate.updatedjob.createdsubmission.stage_changedsubmission.placed
Payloads are signed with HMAC-SHA256 in the X-NexivoHR-Signature header.
Rate Limits
| Plan | Requests per minute | Requests per day |
|---|---|---|
| Starter | No API access | — |
| Professional | 60 | 10,000 |
| Enterprise | 600 | 1,000,000 |
Rate-limited responses return HTTP 429 Too Many Requests with a Retry-After header.
Errors
The API uses standard HTTP status codes:
200 OK— request succeeded201 Created— resource created400 Bad Request— validation error (checkerrorsfield in response)401 Unauthorized— missing or invalid token403 Forbidden— token doesn't have permission404 Not Found— resource doesn't exist429 Too Many Requests— rate limited500 Server Error— something went wrong on our end
SDKs & Libraries
Official libraries coming soon. In the meantime, the API works with any HTTP client:
- Node.js:
fetch,axios - Python:
requests,httpx - PHP:
curl,Guzzle - Ruby:
Faraday,httparty - Go:
net/http
Want API access?
The API is available on Professional and Enterprise plans.
View Pricing Contact Sales