Two follow-up additions on top of the breaking-changes release earlier this month.
New: Job source URL endpoints
Each source object includes:
source_url is the publicly shareable link for that source. Visits to that URL increment the visits counter — useful for attribution.Expanded response fields
Many fields were previously available in the database but not exposed. They are now included in responses without changing existing field names.Jobs (GET /v1/jobs, GET /v1/get-job) now include: public_slug, company_logo_url, department, industry, career_level, full salary breakdown (salary_type, salary_min, salary_max, salary_fixed), and a sources object with each source’s tracking URL. GET /v1/get-job additionally includes questions (the application form configuration: built-in fields toggles plus custom per-job questions).Candidates (GET /v1/candidates, GET /v1/get-candidate, GET /v1/job-candidates) now include: github_url, cover_letter, languages, custom_answers (answers to the job’s questions), tags, pool_stage, location_country, and the full AI screening breakdown (ai_skills_match, ai_experience_match, ai_location_match, plus linkedin_matching). The single-candidate endpoint additionally returns linkedin_data, github_data, and github_evaluation.Webhooks (GET /v1/webhooks) now include updated_at alongside created_at.Partial updates: PATCH endpoints accept more fields
PATCH /v1/update-job now accepts any subset of: job_title, job_description, department, industry, job_country, city, workplace, job_type, career_level, salary, currency, salary_period, hide_salary, questions, status. Only the fields you send are updated. Status casing rules (Pending→draft, Hired→closed) are unchanged.PATCH /v1/update-candidate now accepts: status, tags, pool_stage (cold/warm/hot/not_interested), note_to_candidate.POST /v1/add-job now accepts two new optional body fields: industry and questions. public_slug is also optional — auto-generated from the title if not provided.A workspace-wide breaking-changes release. All clients integrating against the Applicants endpoints, scoped tokens, or capitalized status values need to update.
Applicants renamed to Candidates
The applications table now stores three candidate sub-types —applicant, prospect, and upload — so the public API has been renamed from “applicants” to “candidates” to reflect this. Every candidate object now includes a type field, and GET /v1/candidates accepts an optional ?type= filter.A new endpoint
GET /v1/get-candidate?candidate_id= was added — single-candidate fetches were previously undocumented.Webhook path changes
GET /v1/webhooks and POST /v1/create-webhook are unchanged.Multiple webhooks per workspace are now allowed. The previous one-per-workspace unique constraint has been dropped.Lowercase status enums
Status values are now lowercase in both input and output.- Job status — input accepts
PendingActivePausedHiredClosed(capitalized values still accepted for backwards compatibility) and normalizes them.Pendingmaps todraft.Hiredis accepted as a deprecated alias forclosed. Output is always lowercase: one ofdraftactivepausedclosed. - Candidate status — canonical lowercase values:
appliedscreeningphone_screeninterviewtechnicalofferhiredrejectedwithdrawnon_holdshortlistedqualifieduploaded. The previous 7-value capitalized list (Applied/Reviewed/Accepted/Scheduled/Met/Hired/Rejected) is no longer accepted. job_mode—onsiteremotehybrid(note:onsite, no hyphen).job_type—full-timepart-timecontractfreelanceinternshiptemporaryproject-based.career_level—juniormid-levelseniorteam-leadermanagerdirectorvpc-level.
Scopes removed
The scope system has been removed entirely. Any valid API token can call any endpoint — there is noToken is missing required scope error any more. The developers/scopes page has been deleted from the documentation. Existing tokens continue to work.Other changes
job_locationin job responses is now formatted as"City, Country"(the city portion is omitted if the job has no city).- Companies are soft-deleted using an
archived_attimestamp. No public-facing behavior change forDELETE /v1/delete-company— the response shape is the same.
Jobs created via the API now include a
google_jobs_indexed boolean in the response, indicating whether the listing has been submitted to Google Jobs indexing.Added
POST /companies — create a company directly via the API. See Create Company for the full schema.The
status field on applicants now supports two additional values:scheduled— interview has been scheduledmet— interview has been completed
The Hirempire Webhooks API is now available. Subscribe to workspace events and receive instant
POST notifications to your endpoint.Supported events at launch:Endpoints:
POST /webhooks (create), GET /webhooks (list), PUT /webhooks/:id (update).Each registered webhook goes through a challenge verification step — your endpoint must echo back the challenge token before delivery begins.See the Webhooks reference for full setup instructions and payload schemas.API rate limits are now enforced per plan. Exceeding the limit returns
HTTP 429 Too Many Requests.API tokens now support granular scopes. When generating a token from Settings → Integrations → API Tokens, you choose which resource groups the token can access:
Jobs— read and write job postingsApplicants— read and update applicant recordsCompanies— create and read company profiles
The Hirempire REST API launched with full Jobs and Applicants coverage.Jobs endpoints:
Applicants endpoints:
Applicant status values at launch:
new, reviewed, accepted, rejectedAll endpoints require Bearer token authentication. See Get Started for base URL, authentication, and response format details.