SetBenchmark API is running

Environment staging, providers real. This is the backend only: the screens arrive with the web apps.

Every /v1 request needs x-tenant: <company> and Authorization: Bearer <token>. Demo tokens are printed in the terminal where the server started.

GET /healthStatus check
GET /auth/login?tenant=acme&redirect_uri=…Sign in (mock WorkOS page locally)
POST /candidate/link-checkCheck a candidate link and count its open tests, without using it
POST /candidate/sessionSwap a candidate link token for a session
GET /v1/meWho am I
GET /v1/users · POST /v1/users · PATCH /v1/users/:idUsers & roles (admins)
GET /v1/applications · POST /v1/applicationsCandidate applications
POST /v1/applications/:id/candidate-linkSingle-use candidate link, optionally sent by email/SMS/WhatsApp
POST /v1/applications/:id/ai-reviewAsk the AI for an advisory recommendation
GET /v1/applications/:id/recommendationSee the AI recommendation
POST /v1/applications/:id/decisionHuman decision: {outcome, reason, reviewStartedAt}
POST /v1/decisions/bulk-advanceAdvance several at once (only where the AI agreed)
GET /v1/decision-log/verifyCheck the tamper-evident decision log
POST /v1/code/runRun code (mock executor locally)
GET /v1/audit · GET /v1/audit.csvAudit log (admins)
GET /v1/entitlements · GET /v1/usagePlan modules and this month’s usage
GET/POST /v1/webhooks · GET /v1/webhooks/deliveriesSigned webhooks (admins)
GET /v1/skills · GET /v1/job-rolesSkills taxonomy and job roles (SetBenchmark library + your own)
GET /v1/questions?q=…&type=…Question library search
POST /v1/questions · PUT /v1/questions/:idWrite questions (every edit is a new version)
POST /v1/questions/:id/submit · /review · /retire · /duplicateReview workflow
POST /v1/questions/:id/tryGrade a sample answer against the question
GET /v1/questions/import/template · POST /v1/questions/importBulk import from Excel (check with dryRun first)
GET/POST /v1/interviews · POST /v1/interviews/:id/joinVideo interviews (mock LiveKit locally)
GET/POST /v1/assessments · POST /:id/items · /publishBuild and publish tests
POST /v1/assessments/:id/invitationsInvite a candidate (link + optional email/SMS/WhatsApp)
GET /v1/candidate/invitations · POST /v1/candidate/invitations/:id/startCandidate: see and start tests
PUT /v1/candidate/attempts/:id/answers/:position · POST …/submitCandidate: autosave and submit
GET /v1/attempts/:id/result · GET /v1/review-queue · POST …/markScores, reviewer queue, human marking
POST /v1/ai/questions · POST /v1/ai/assessment-from-jdAI drafts (always reviewed by a person)
POST /v1/ai-interviews · POST /v1/candidate/ai-interviews/:id/answerAI chat interviewer
POST /v1/candidate/ai-interviews/:id/voice-session · /voice-turnAI voice interviewer (mock speech locally)
PUT /v1/interviews/:id/code · /notes · POST /scorecard · GET /calendar.icsLive interview: shared editor, private notes, scorecards, calendar
POST /v1/candidate/invitations/:id/checks · /attempts/:id/proctoring-eventsProctoring checks and signals
GET /v1/billing/subscriptionThe company’s plan
/platform/plans · /platform/coupons · /platform/tenants/:slug/subscriptionKombee staff: subscription builder (x-platform-token)
POST /webhooks/razorpayRazorpay webhooks (signature-checked)
GET /v1/notifications · GET /v1/dev/outboxNotification log, and what the mocks “sent”