Jobs overview
The Jobs catalog lets you define a job once — its description prose plus its structured requirements config — and then reference it from both CV DeepMatch and CV DeepSearch instead of re-sending the full content on every run.
Base URL: https://platform.zenhire.ai/api/v1/jobs
Why it exists
Without the catalog, every POST /api/v1/cvdeepmatch/submit repeats the same
job_description + config, and every POST /api/v1/cvds/search repeats the
same position_metadata. With it:
Define once Reference many
Create a job POST /api/v1/jobs Match a CV POST /api/v1/cvdeepmatch/submit
(JD + config, → id (job_id) { position_id } ← no JD/config needed
your own Search a corpus POST /api/v1/cvds/search
position_id) { corpus_id, position_id } ← no metadata needed
One saved job serves both services: CV DeepMatch consumes
job_description + config directly; CV DeepSearch composes its
position_metadata from the same job as {...config, job_description}.
The two identifiers
position_id— your own job id. The same identifier contract the run APIs already use ([A-Za-z0-9._-], 1–28 chars). Unique per client among active jobs.job_id(the job'sid) — the platform-assigned id. A UUID returned on create; usable everywhereposition_idis, as an alternative reference.
Endpoints
| Endpoint | Purpose |
|---|---|
POST /api/v1/jobs | Create a job (strict save-time validation). |
GET /api/v1/jobs | List your active jobs (paginated, compact rows). |
GET /api/v1/jobs/{jobId} | Get one job's full content. |
PATCH /api/v1/jobs/{jobId} | Partial update (re-validated). |
DELETE /api/v1/jobs/{jobId} | Archive (soft delete; frees the position_id). |
Available to any client whose permissions[] contains cvdeepmatch or
cvdeepsearch.
Read the Jobs guide for the full reuse-by-reference flow —
including the saveJob save-on-submit flag, the both-or-neither rule, and the
automatic job_updated derivation on CV DeepSearch.