Developer API
Integrate AssessFit with your ATS, Zapier, or internal tooling — create jobs, invite candidates, pull results, and receive signed webhooks the moment a candidate finishes.
Authentication
Generate an API key in Employer Dashboard → Settings → API & integrations and send it on every request:
curl https://assessfit.com/api/v1/jobs \ -H "X-Api-Key: tp_live_…"
Keys are workspace-scoped. Rotating a key immediately invalidates the previous one. Requests are rate-limited to 300/min per IP.
Endpoints
GET/api/v1/jobs
List job openings with invitation and completion counts.
POST/api/v1/jobs
Create a job and invite candidates in one call. Invitation emails are sent automatically; each invitation consumes one credit.
curl -X POST https://assessfit.com/api/v1/jobs \
-H "X-Api-Key: tp_live_…" -H "Content-Type: application/json" \
-d '{
"title": "Senior Accountant",
"roleKey": "accountant",
"tests": ["attention", "financial", "numerical", "conscientiousness"],
"cameraRequired": true,
"shareResults": false,
"candidates": [
{ "name": "Ana Putri", "email": "ana@example.com" }
]
}'
Role keys: accountant, engineer,
sales, support,
marketing, analyst,
custom. Omit tests? No — pass the test
keys you want; fetch the library via the dashboard.
GET/api/v1/jobs/:id
Full job detail: every invite with funnel timestamps
(tracking.sent/opened/loggedIn), personal invitation
link, and the result object once completed.
POST/api/v1/jobs/:id/invites
Add candidates to an existing job: {"candidates":[{"name":"…","email":"…"}]}.
Returns the created invites with their links.
GET/api/v1/invites/:id/result
Pull one candidate's completed result: overall score, per-test scores, integrity score, verdict and flags, and timing analysis. Returns 404 until the candidate finishes.
Webhooks
Set a webhook URL in Settings. AssessFit POSTs JSON events with an HMAC-SHA256 signature computed over the raw body using your API key as the secret:
POST https://your-app.example.com/hooks/assessfit
X-AssessFit-Event: candidate.completed
X-AssessFit-Signature: sha256=3f5a…
{
"event": "candidate.completed",
"createdAt": "2026-07-22T09:14:03.000Z",
"data": {
"inviteId": "inv_…",
"jobId": "job_…",
"jobTitle": "Senior Accountant",
"candidate": { "name": "Ana Putri", "email": "ana@example.com" },
"overall": 84,
"scores": { "attention": 83, "numerical": 100 },
"integrity": { "score": 100, "verdict": "clean" }
}
}
Verify the signature before trusting a payload:
// Node.js
const crypto = require("crypto");
function verify(rawBody, signatureHeader, apiKey) {
const expected = "sha256=" +
crypto.createHmac("sha256", apiKey).update(rawBody).digest("hex");
return crypto.timingSafeEqual(Buffer.from(signatureHeader), Buffer.from(expected));
}
Delivery is retried 3× (immediately, +2s, +8s). Every attempt is visible in
Settings → Recent webhook deliveries, and you can fire a
webhook.test event any time with the "Send Test Event" button.
Events: candidate.completed, webhook.test.
Integration recipes
- ATS (Greenhouse/Lever/etc.): when a candidate reaches your "Assessment" stage,
call
POST /api/v1/jobs/:id/invites; on thecandidate.completedwebhook, write the scores back to the candidate profile via your ATS API. - Zapier/Make: use "Webhooks by Zapier" as the trigger with your AssessFit
webhook URL, and an HTTP action with
X-Api-Keyfor invites. - Slack alert: receive the webhook in a tiny function and post "🏁 Ana Putri finished Senior Accountant — 84/100, integrity clean" to your hiring channel.