| POST |
/v1/cvs |
Upload CV(s), initiate parsing |
cv:write |
No |
| GET |
/v1/cvs/{cvId} |
Read CV metadata/extraction status |
cv:read |
No |
| GET |
/v1/candidates |
Search candidates in CV Bank |
candidate:read |
No |
| GET |
/v1/candidates/{candidateId} |
Read candidate profile |
candidate:read |
No |
| POST |
/v1/tans |
Create TAN + JD |
tan:write |
No (approval is a separate step) |
| GET |
/v1/tans/{tanId} |
Read TAN |
tan:read |
No |
| PATCH |
/v1/tans/{tanId} |
Update TAN/JD (pre-approval only) |
tan:write |
No |
| POST |
/v1/tans/{tanId}/approve |
Approve TAN |
tan:approve |
Yes |
| POST |
/v1/tans/{tanId}/matches |
Trigger AI matching run |
matching:execute |
No |
| GET |
/v1/tans/{tanId}/matches |
Read ranked, explainable recommendations |
matching:read |
No |
| POST |
/v1/applications/{applicationId}/shortlist-approval |
Approve/reject shortlist |
shortlist:approve |
Yes |
| POST |
/v1/applications/{applicationId}/interviews |
Schedule interview |
interview:write |
No |
| PATCH |
/v1/interviews/{interviewId} |
Reschedule/cancel interview |
interview:write |
No |
| POST |
/v1/interviews/{interviewId}/feedback |
Submit structured feedback |
interview:feedback |
No (feedback itself is the human decision record) |
| POST |
/v1/applications/{applicationId}/progression-decision |
Confirm progression (L1→L2, L2→client, etc.) |
application:progress |
Yes (final selection step) |
| POST |
/v1/applications/{applicationId}/offers |
Create draft offer |
offer:write |
No |
| POST |
/v1/offers/{offerId}/approve |
Approve offer |
offer:approve |
Yes |
| POST |
/v1/offers/{offerId}/send |
Send approved offer |
offer:send |
No (system action, gated by prior approval) |
| POST |
/v1/offers/{offerId}/acceptance |
Record candidate acceptance/decline |
offer:respond (candidate-scoped token) |
No |
| POST |
/v1/offers/{offerId}/green-form |
Issue Green Form link |
green_form:issue |
No |
| GET |
/v1/green-forms/{greenFormId} |
Read Green Form status |
green_form:read |
No |
| POST |
/v1/green-forms/{greenFormId}/submissions |
Candidate submits data/documents |
green_form:submit (candidate-scoped token) |
No |
| POST |
/v1/documents/{documentId}/verify |
Trigger/read verification |
document:verify |
No |
| POST |
/v1/documents/{documentId}/reupload-request |
Request re-upload/clarification |
document:request_reupload |
No |
| POST |
/v1/discrepancies |
Create discrepancy record |
discrepancy:write |
No |
| GET |
/v1/discrepancies/{discrepancyId} |
Read discrepancy |
discrepancy:read |
No |
| POST |
/v1/discrepancies/{discrepancyId}/resolve |
Close/grant exception |
discrepancy:resolve |
Yes |
| POST |
/v1/applications/{applicationId}/employee-conversion |
Convert to employee, issue Employee ID |
employee:convert |
Yes |
| GET |
/v1/workflow/{subjectType}/{subjectId}/status |
Read current workflow status |
workflow:read |
No |
| GET |
/v1/audit-log |
Query audit log |
audit:read |
No (read-only, restricted to compliance/HR approver roles) |
| GET |
/v1/evaluations/{runId} |
Read AI evaluation run status |
evaluation:read |
No |