RResumezBeta
POSTLive

Match profile or resume to job

Deterministically scores the canonical profile or an owned resume artifact/version against a job, returning matched and missing skills, recommendations, and the exact scoring source.

/v1/jobs/{jobId}:match

Authorization

Credential

oauth_user

Required scopes

profile:readjobs:analyze

Path parameters

jobId

string · required

Request body

JSON · application/json

artifactIdstring
artifactVersioninteger

Implementation note

Omit artifactId for canonical-profile scoring (which fails with `profile_incomplete` until onboarding is complete). artifactId selects an owned resume artifact; artifactVersion optionally pins an immutable version. Foreign, deleted, non-resume, or missing versions all return the same typed `not_found` response.

Error responses

400Invalid request

The request body was missing, malformed, or failed schema validation. Field-level problems are listed under `issues`.

401Authentication required

No valid credentials were supplied. Attach a Bearer access token and retry.

402Upgrade required

The authenticated user's plan does not include this capability. `feature` names the gated capability, `requiredPlan` the cheapest plan that unlocks it, `currentPlan` the user's plan today, and `upgradeUrl` links to checkout. This is a plan gate, not a transient error — retrying without upgrading fails again; surface `upgradeUrl` to the user instead. Dormant until a plan that grants the feature is active, so a route that documents it may not currently return it.

403Insufficient scope

The token is valid but lacks the OAuth scope (or token kind) this endpoint requires.

404Resource not found

The addressed resource does not exist, or is not visible to the caller.

409Profile incomplete

The canonical career profile is missing required fields for generation; `missingRequired` lists them and `remedy` says how to fix it. Onboard the user first: import an existing resume (import-create → import-apply) or fill the gaps via profile-update / experiences-create, then retry. Check `me.profileReadiness` to detect this before calling.