The ZenHire CV matching API scores every resume against a job description by meaning, not keywords, returning a 0-100 fit score, the parsed CV, and the skill gaps behind it from a single REST call, at bulk scale.
{
"match_score": 87,
"skills_matched": [
"team leadership",
"SLA reporting",
"CRM (Salesforce)"
],
"skills_missing": ["WFM forecasting"],
"experience_years": 6.5,
"qualification": "qualified"
}Every call yields a structured verdict: an overall 0-100 fit score built from a per-dimension breakdown across work experience, skills, and education, the parsed resume, per-skill matches against the role's must-haves, and a qualification flag. A recruiter reads a ranked shortlist instead of a stack of PDFs.
Where a resume has no machine-readable text (a scanned image with no OCR layer), the API returns a low-confidence flag rather than a guessed score, so you never rank on noise. The same structured fields power our standalone resume parsing api when you only need extraction without scoring.
A raw resume read is a weak predictor of who performs on the job, landing near r = 0.14 in the selection literature. This is why the match_score is only the first gate: feed the API's ranked shortlist into structured interviews and skills assessments and the combined signal climbs past 0.6, so the score narrows the field while validated later stages carry the hiring decision.
| Field | What it carries |
|---|---|
| match_score | Overall 0-100 semantic fit against the job description |
| skills_matched | Competencies the resume actually demonstrates for the role |
| skills_missing | Role must-haves the resume does not evidence |
| experience_years | Auto-calculated relevant experience |
| parsed_cv | Structured fields: experience, education, skills, contact |
| qualification | Auto-qualify or disqualify against your threshold |

It places the resume and the job description in the same meaning space, then measures the overlap of demonstrated competencies. So “managed a 12-person support floor” satisfies a “team leadership” requirement that a keyword filter never catches, and a buzzword with no supporting work history earns little credit. Each requirement you send carries an importance weight from 1 to 5, spanning hard skills, soft skills, qualifications, industries, and languages, so the score reflects what actually matters for the role instead of treating every line equally. This is the same matching engine behind the CVDeepMatch solution inside the ZenHire platform.
Some teams worry that semantic scoring is a black box. It is not. The API returns the matched evidence and each skill's contribution to the score, so a recruiter can see why a candidate landed where they did and override it when judgment says otherwise. This is the same engine behind ZenHire's ai candidate matching inside the platform.

You call one REST endpoint with a resume and a job description, then collect the JSON by polling or over a signed webhook, typically within 1 to 3 minutes end to end, with no rip-and-replace and no model training. Most teams move from sandbox to production in one to two weeks.
It runs as an intelligence layer on top of your current existing ats, so the system of record stays put while every new applicant arrives pre-scored. Each run accepts your own external id plus up to 50 metadata keys and 20 tags, all filterable on list endpoints, so every score stays tied to the right candidate and requisition on your side. For high-volume bpo hiring it clears the backlog before a recruiter opens the first profile. Pair it with the candidate scoring API when you need to rank the survivors on more than resume fit.
Built for high-volume hiring: the matching engine handles positions with 3,000+ candidate applications and bulk imports of 1,000+ resumes per role without slowing down, a single campaign-scale req scored in one batch.
| Production concern | How the API handles it |
|---|---|
| Result delivery | Async submit-then-poll, or push over signed webhooks; typical end-to-end latency is 1 to 3 minutes |
| Safe retries | Idempotency keys with a 24-hour window: replaying the same key returns the original run instead of creating a duplicate |
| Webhook security | HTTPS-only delivery with Stripe-style HMAC-SHA256 signatures, three attempts with exponential backoff, and PII excluded from every payload |
| Throughput | A default 500 requests per minute per client; excess runs queue cleanly with a 202 rather than erroring |
| Billing safety | Your balance is checked before processing starts, and failed runs are never charged |
1. Get a key
Sign up for an API key and sandbox, live in minutes, no sales call required.
2. Send a request
POST the candidate CV (PDF, up to 5 MB) and the job description to /v1/cv-match.
3. Read the score
Parse the JSON: fit score, matched and missing skills, qualification flag.
4. Calibrate & ship
Set your qualify thresholds, validate against past hires, then route at scale.
The CV matching API is not keyword matching. It compares the meaning of a resume against the meaning of a job description, so a phrase like 'ran a 12-person support floor' satisfies a 'team leadership' requirement that a keyword filter would miss. It also distinguishes a skill a candidate demonstrated from one they merely listed.
The CV matching API extracts CV fields at 97% accuracy and aligns with human screeners more than 93% of the time, measured by comparing the top and bottom of its rankings against blind human review. Every score ships with the matched evidence, so a recruiter can audit and override it.
The CV matching API reduces hiring bias by scoring demonstrated competencies rather than pedigree, and by keeping each decision explainable and auditable; sensitive attributes are excluded from scoring. Because it surfaces transferable skills, it tends to advance capable candidates that keyword filters reject for the wrong reasons.
The CV matching API scores thousands of resumes per role in a single batch, returning a ranked shortlist without a human reading the first page. Runs are asynchronous, typically completing in 1 to 3 minutes end to end with results by polling or signed webhook, and a default 500 requests per minute keeps campaign-scale imports flowing, so a backlog that took a team days clears in the background.
You get an API key and a sandbox immediately on sign-up, integrate against one REST endpoint, and calibrate thresholds before going live, typically within one to two weeks. Usage is priced per call, with no per-seat fees.
Free for CV Matching API quickstart
A developer quickstart with the /v1/cv-match request and response spec, the full field reference, and a threshold-calibration checklist for going live in one to two weeks.
Score your next thousand candidates by fit, with the evidence to back every decision.