The HIRESSCOPE REST API lets you upload CVs, retrieve AI scores, manage jobs, and automate your hiring pipeline. All responses are JSON.
The Swagger UI is available on the dev server. The OpenAPI JSON spec is bundled with this site.
https://api.hiresscope.com/api/v1Bearer Token (JWT)
Obtain a JWT access token via POST /auth/login. Include it in every protected request:
Authorization: Bearer <accessToken>Access tokens expire after 15 minutes. Use POST /auth/refresh with the refresh token (7-day expiry) to obtain a new access token.
API Key
For server-to-server integrations, use an API key header instead of a Bearer token. Generate keys from Settings → API Keys.
X-API-Key: hsk_live_xxxxxxxxxxxxxxxxxxxxRetry-After header./auth/signupCreate employer account (starts 3-day free trial)public/auth/loginLog in and receive access + refresh tokenspublic/auth/refreshRotate refresh token and get new access tokenpublic/auth/logoutRevoke refresh token/auth/meReturn authenticated user and tenant details/jobsList all jobs for tenant (optional ?status filter)/jobsCreate a new job posting/jobs/:idGet a single job by ID/jobs/:idUpdate job fields (partial)/jobs/:idSoft-delete job; returns talent-pool eligible candidates/jobs/:id/confirm-deleteConfirm deletion; save selected candidates to talent pool/jobs/:id/optimizeRe-run AI job description optimizer/jobs/publicList public active jobs (optional ?company filter)public/jobs/:jobId/applicationsUpload a single CV (multipart/form-data)/jobs/:jobId/applications/bulkUpload up to 50 CVs at once/jobs/:jobId/applicationsList applications for a job (paginated, sortable)/applications/:idGet full application detail including AI explanation/applications/:id/statusUpdate status: SHORTLISTED | REJECTED/jobs/:jobId/applications/export-csvExport scored applications as CSV/apply/:slugPublic apply endpoint — candidate submits CV via linkpublic/candidates/registerRegister candidate accountpublic/candidates/loginCandidate login → candidate JWTpublic/candidates/me/applicationsCandidate: list own applications (candidateJWT)/candidates/me/score/:appIdCandidate: get AI score + explanation for one application/candidates/me/profileCandidate: update name / phone / LinkedIn URL/candidates/:idEmployer: get candidate detail (tenant-scoped)/analytics/overviewActive jobs, total CVs, avg score, shortlisted count (5-min cache)/analytics/jobs/:jobIdDaily trend, score distribution, status breakdown (1-min cache)/talent-poolList saved candidates (optional ?department filter)/talent-poolSave a candidate to the talent pool/talent-pool/:idRemove a candidate from the talent pool/talent-pool/suggest/:jobIdSuggest talent pool candidates for a job by score + dept/webhooksList webhook endpoints/webhooksCreate a webhook endpoint/webhooks/:idUpdate endpoint URL or events/webhooks/:idDelete endpoint/webhooks/:id/testSend a test event to the endpoint/billing/plansList all plans with pricing and feature limitspublic/billing/usageCurrent period CV uploads, jobs created, subscription status/referrals/generateGenerate or retrieve referral code + link/referrals/statsInvited / converted / months earned counters/healthReturns { status, db, timestamp, version }publicAll errors follow the same envelope format:
{
"statusCode": 400,
"message": "Validation failed: email must be an email",
"error": "Bad Request"
}400Validation error — check request body fields401Missing or expired JWT / API key403Plan limit reached or feature not available on your plan404Resource not found or outside your tenant scope409Conflict — e.g. duplicate email application413File too large (max 5 MB per CV)415Unsupported file type (only PDF, DOCX, DOC, TXT)429Rate limit exceeded — see Retry-After header500Internal server error — reported to Sentry automatically