You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
# Seed the questionnaire schema into MongoDB
bun run seed
# Seed fake applicants (dev only — exits if NODE_ENV=production)
bun run --cwd .. seed:applicants # default count
bun run --cwd .. seed:applicants -- --count 50
bun run --cwd .. seed:applicants -- --count 50 --clear
API reference
Public
Method
Path
Description
GET
/health
Health check
GET
/api/v1/form/questionnaire
Fetch active questionnaire + submission key
POST
/api/v1/form/submit
Submit a completed form
POST /submit requires the X-Submission-Key header obtained from GET /questionnaire. This proves the client fetched the questionnaire legitimately rather than guessing version strings.
Admin (Bearer token required)
# Login to get a JWT
curl -X POST http://localhost:3001/api/v1/admin/login \
-H "Content-Type: application/json" \
-d '{"username":"admin","password":"..."}'
Method
Path
Description
POST
/api/v1/admin/login
Get admin JWT
GET
/api/v1/admin/applicants
List applicants (paginated)
GET
/api/v1/admin/applicants/:id
Get applicant profile
GET
/api/v1/admin/applicants/:id/identity
Decrypt & return Instagram handle ⚠ audit logged
DELETE
/api/v1/admin/applicants/:id
Deactivate applicant
GET
/api/v1/admin/audit-logs
View audit trail
POST
/api/v1/admin/questionnaires
Create new questionnaire version
Matching (Bearer token required)
Method
Path
Description
GET
/api/v1/matching/candidates/:id
Top N candidates for one applicant
POST
/api/v1/matching/run
Full pairwise pass over all active applicants
Both endpoints accept an algorithm parameter: baseline, cosine, or embedding-cosine.
See src/matching/README.md for algorithm details.