Every change to a job’s criteria creates a new version. Scoring jobs reference the version they used.
What creates a new version
POST /v1/jobs/{jobId}/criteria/generate
POST /v1/jobs/{jobId}/criteria/items
PATCH /v1/jobs/{jobId}/criteria/items/{criterionId}
DELETE /v1/jobs/{jobId}/criteria/items/{criterionId}
DELETE /v1/jobs/{jobId}/criteria (archives the active version)
Criteria endpoints return a flat array of criterion items:
{
"criteria": [
{
"id": "crit_a1b2c3d4e5f6",
"text": "5+ years experience",
"importance": "MUST_HAVE",
"order": 0
}
]
}
Version metadata is available through dedicated endpoints:
GET /v1/jobs/{jobId}/criteria/versions/current
GET /v1/jobs/{jobId}/criteria/versions
GET /v1/jobs/{jobId}/criteria/versions/{criteriaVersionId}
Criterion IDs are stable across versions. When you add, edit, or remove a criterion, a new version is created internally, but each criterion keeps its original id.
How this affects scoring
Scoring uses the job’s active criteria version by default. When re-scoring (rescore.enabled: true), you can pin a specific version with rescore.criteriaVersionId.
Old scores stay tied to the criteria version used at the time. Criteria changes don’t retroactively alter historical results.