API reference
Generated from the same OpenAPI 3.1 document the API serves, so it cannot drift from the code. All paths are relative to the base URL.
Base URL https://api.helixhumancapital.in. Download the spec: openapi.json. Authentication is Authorization: Bearer <key> on everything except /v1/plans. Common errors for every endpoint: 401 missing or invalid key, 402 plan ended or out of credits, 403 missing scope or disabled key, 429 rate limited. See error codes.
Account and billing
/v1/plansno key neededPublic price list
Responses
200 Success
/v1/meThis key: plan, scopes, credits left (free)
Responses
200 Success
/v1/usageCalls and credits per endpoint (free)
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
days | query | integer | min 1, max 90, default 30 |
Responses
200 Success
/v1/billing/checkoutStart a payment for a plan period or a top-up (INR, Cashfree)
Also works on a key whose period has ended. Paying starts a fresh 30-day period; unused credits do not carry over.
Request body (application/json)
| Field | Type | Notes |
|---|---|---|
kindrequired | "plan" | "topup" | |
plan | "pro" | "pro_scale" | |
packs | integer | Top-up packs of 1,000 credits. · min 1, max 20 |
phonerequired | string | 10-digit mobile, required by the payment gateway. |
Responses
200 Success · 400 Invalid request.
Candidates
/v1/searchRanked candidates for a natural-language query (1 credit; +5 per record when expand=true)
Scope: search. With expand=true each result is a full record limited to the field scopes the key has; every release is logged.
Request body (application/json)
| Field | Type | Notes |
|---|---|---|
queryrequired | string | min length 2, max length 2000 |
limit | integer | min 1, max 25, default 10 |
expand | boolean | default false |
exclude | integer[] | Candidate ids to skip (paging). |
filters | object |
filters fields:
| Field | Type | Notes |
|---|---|---|
seniority | "early" | "mid" | "senior" | "leadership"[] | |
maxNoticeDays | integer | |
city | string | |
maxExpectedLpa | number | |
minYears | number |
Responses
200 Success · 400 Invalid request.
/v1/candidates/{id}Full candidate record (5 credits)
Scope: search. Contact, compensation and document fields appear only with the pii:contact, pii:comp and pii:docs scopes.
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
idrequired | path | integer |
Responses
200 Success · 404 Not found.
/v1/candidates/{id}/cv10-minute resume download link (2 credits)
Scope: pii:docs.
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
idrequired | path | integer |
Responses
200 Success · 404 Not found.
/v1/matchBest-fitting candidates for a job description (10 credits; +5 per record when expand=true)
Scope: match.
Request body (application/json)
| Field | Type | Notes |
|---|---|---|
jobDescriptionrequired | string | min length 80, max length 12000 |
limit | integer | min 1, max 25, default 10 |
expand | boolean | default false |
Responses
200 Success · 400 Invalid request. · 503 Scoring temporarily unavailable. Not charged.
/v1/fitHow well one candidate fits one job description (3 credits)
Scope: match.
Request body (application/json)
| Field | Type | Notes |
|---|---|---|
candidateIdrequired | integer | |
jobDescriptionrequired | string | min length 80, max length 12000 |
Responses
200 Success · 404 Not found.
Parsing
/v1/parse/resumeResume file to structured JSON (2 credits)
Scope: parse. PDF, DOC or DOCX up to 5 MB. Nothing is stored.
Request body (multipart/form-data)
| Field | Type | Notes |
|---|---|---|
filerequired | string |
Responses
200 Success · 422 Unreadable file. Not charged.
/v1/parse/jdJob description to a requirement checklist (2 credits)
Scope: parse.
Request body (application/json)
| Field | Type | Notes |
|---|---|---|
jobDescriptionrequired | string | min length 80, max length 12000 |
Responses
200 Success
Market and jobs
/v1/market/pay-bandsMarket pay for a role (free)
Scope: market. Curated benchmarks plus observed percentiles of self-reported fixed pay (INR lakh per annum) among the people nearest the role, overall and by seniority, with a confidence level. Groups smaller than 5 people are never shown.
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
rolerequired | query | string | min length 3 |
city | query | string | Restrict observed pay to people currently in this city. |
Responses
200 Success
/v1/market/skillsMost common skills near a role, or across the pool (free)
Scope: market.
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
role | query | string | |
limit | query | integer | min 1, max 50, default 25 |
Responses
200 Success
/v1/market/overviewShape of the candidate pool (free)
Scope: market. Seniority mix, top cities, notice periods, work mode. Cached for an hour.
Responses
200 Success
/v1/jobsOpen roles (free)
Scope: jobs.
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
team | query | string | |
level | query | "junior" | "mid" | "senior" | "lead" | |
mode | query | "ON_SITE" | "HYBRID" | "REMOTE" | |
q | query | string | |
limit | query | integer | min 1, max 100, default 50 |
Responses
200 Success
/v1/jobs/{slug}One open role (free)
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
slugrequired | path | string |
Responses
200 Success · 404 Not found.
Webhooks
/v1/webhooksRegister a webhook endpoint (free)
https only. The signing secret is returned once. Each delivery carries `Helix-Signature: t=<unix>,v1=<hex>` where v1 is HMAC-SHA256 of `<t>.<raw body>` with the secret; reject signatures older than 5 minutes. Failed deliveries retry with backoff (30s, 2m, 10m, 1h, 6h, 24h). Events: credits.low, credits.exhausted, subscription.renewed, subscription.expiring, subscription.expired, webhook.test.
Request body (application/json)
| Field | Type | Notes |
|---|---|---|
urlrequired | string | |
events | string[] | Defaults to all events. |
Responses
201 Created · 400 Invalid URL or events. · 409 Endpoint limit reached.
/v1/webhooksList webhook endpoints (free)
Responses
200 Success
/v1/webhooks/{id}Remove a webhook endpoint (free)
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
idrequired | path | integer |
Responses
200 Success · 404 Not found.
/v1/webhooks/{id}/testSend a signed test event now (free)
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
idrequired | path | integer |
Responses
200 Success · 404 Not found.
/v1/webhooks/{id}/deliveriesLast 25 deliveries to an endpoint (free)
Parameters
| Name | In | Type | Notes |
|---|---|---|---|
idrequired | path | integer |
Responses
200 Success · 404 Not found.
Agents and contribution
/v1/mcpModel Context Protocol server (JSON-RPC 2.0 over HTTP)
Stateless Streamable-HTTP MCP endpoint. Tools: search_candidates, get_candidate, get_candidate_cv, match_job_description, score_candidate_fit, parse_job_description, parse_resume, market_pay_bands, market_skills, market_overview, list_jobs, account_status. Each runs the same handler as its REST route, so scopes and credits are identical.
Request body (application/json)
Responses
200 Success · 202 Notification accepted.
/v1/chatConversational search (anonymised), streamed. Scope: chat.
Responses
200 Server-sent event stream.
/v1/resumesContribute resumes to the pool (multipart). Scope: ingest.
Responses
200 Success
/v1/feedbackRate candidates returned by chat. Scope: feedback.
Responses
200 Success
Schemas
Candidate
contact, compensation and cv appear only when the key holds pii:contact, pii:comp and pii:docs respectively.
| Field | Type | Notes |
|---|---|---|
id | integer | |
role | string | null | |
seniority | string | null | |
yearsExperience | number | null | |
skills | string[] | |
summary | string | |
fit | "strong" | "possible" | "stretch" | null | |
contact | object | |
compensation | object | INR, lakh per annum. Self-reported by the candidate; not verified. |
cv | object |
Error
{ "error": { "code": "missing_scope", "message": "…", "requestId": "…" } }