Skip to main content
TapTalent sends webhook events for various operations. All webhook payloads follow a consistent structure.

Payload structure

Every webhook body looks like:

Headers

All webhook requests include:
  • Content-Type: application/json
  • X-Webhook-Event: The event type (e.g. resume.bulk_upload_parse.started)
  • X-Webhook-Timestamp: ISO 8601 timestamp of when the event occurred
  • X-Webhook-Key: Your webhook verification secret. When you have generated a webhook key in the dashboard, TapTalent sends it in this header. Compare it to your stored key to verify the request came from TapTalent. If no key has been set, the header may be empty.

Resume events

resume.bulk_upload_parse.started

Triggered when a bulk resume upload batch starts processing.

resume.bulk_upload_parse.completed

Triggered when a bulk resume upload batch completes processing.

resume.bulk_upload_parse.failed

Triggered when a bulk resume upload batch fails before processing begins (e.g. validation errors, invalid URLs).

Job events (recruiter actions)

job.created

Triggered when a recruiter creates a new job from the dashboard.

job.updated

Triggered when a recruiter updates a job’s basic details (e.g. title, description, location) from the dashboard. Does not fire when only the job status is changed.

job.status_changed

Triggered when a recruiter changes a job’s status (e.g. Draft → Active, Active → Inactive/Closed).

Candidate events (recruiter actions)

candidate.added_to_job

Triggered when a recruiter adds one or more candidates to a job (e.g. from company list, AI search, or moving from another job).

candidate.stage_changed

Triggered when a recruiter moves one or more candidates to a different pipeline stage (e.g. kanban drag-and-drop).

candidate.hired

Triggered when a recruiter moves one or more candidates to the Hired stage.

candidate.rejected

Triggered when a recruiter rejects or disqualifies one or more candidates, or when an automated screening flow disqualifies a candidate.

candidate.removed_from_job

Triggered when one or more candidates are removed from a job. This is sent when:
  • A recruiter uses the bulk “Remove from job” / “Delete” action on candidates in that job (move-job-candidates with delete), or
  • A recruiter deletes one or more candidates from the company (DELETE /candidates), in which case one event is sent per job those candidates were in.

candidate.updated

Triggered when a recruiter updates a candidate’s profile or job-application details from the dashboard.
  • Profile (scope: "profile"): Company-level profile (e.g. name, email, phone, resume, skills) via Update company candidate details or Update job candidate details (email/phone).
  • Application (scope: "application"): Application for a specific job (e.g. expected CTC, notice period, hired date) via Update job candidate application.
Profile update example:
Application update example (includes jobCandidateId and jobId):

Application events

Events for candidate applications submitted through the TapTalent-hosted application experience. See Candidate Applications.

candidate.applied

Triggered when a candidate submits an application on the TapTalent-hosted application experience for a job. Fires once per submission (never batched). The job candidate is created at the pipeline’s APPLIED stage.
After candidate.applied, resume parsing and AI scoring run and job.candidate.score.completed (or .failed) follows for the same jobCandidateId. If the job has screening automation configured, it may then emit candidate.stage_changed or candidate.rejected. Note that candidate.applied is always per-candidate, while candidate.stage_changed remains batched.

Job candidate scoring events

job.candidate.score.completed

Triggered when AI scoring is completed for a candidate’s application to a job. This event is sent after the candidate’s resume has been analyzed and matched against the job requirements, and a score has been calculated.

job.candidate.score.failed

Triggered when AI scoring fails for a candidate’s application to a job. This event is sent when the scoring process encounters an error (e.g. insufficient candidate data, processing error, or service unavailability).

Assessment events

assessment.ready

Triggered when questions have been generated for an assessment (e.g. after Auto-Generate Assessment or Generate Questions). You can then fetch the assessment or invite candidates.

assessment.bulk_invite.completed

Triggered when processing finishes for a bulk invite batch. Fetch per-candidate outcomes from Get Bulk Invite Status.

interview.started

Triggered when a candidate has started an assessment interview (e.g. opened the interview and it has begun). Use this to track when invited candidates begin their assessment.

interview.scoring_completed

Triggered when scoring has finished for an interview submission. Use this to sync results to your system, fetch the result report PDF or public result link, or notify recruiters.

interview.ended

Triggered when a candidate has finished or left the interview (e.g. completed all questions, timed out, or ended the session). Use this to track completion and optionally wait for interview.scoring_completed for the final score.

interview.error

Triggered when an error occurs during the interview flow (e.g. failed to start, scoring failure, or permission issues). Use this to monitor failures and alert or retry as needed.

interview.complete_later

Triggered when a candidate clicks “Complete later (not recommended)” on the pre-interview setup screen. The candidate has chosen to save their link and finish the assessment later instead of starting now.

Agentic Onboarding events

Events for the Agentic Onboarding API. All report and document files are PDFs delivered as time-limited URLs—download promptly, or re-fetch fresh URLs from List Candidate Documents and Reports.

onboarding.candidate.enrolled

Triggered when a candidate is enrolled into an onboarding flow (fires once per candidate, including bulk enrollments). Use this to store the onboardingCandidateId against your own candidate record.

onboarding.candidate.status_changed

Triggered when a candidate’s overallStatus changes, including terminal states (completed, rejected, failed, terminated). Use this to move the candidate’s status in your system of record where your process requires it.

onboarding.documents.verified

Triggered when a candidate’s government documents and numbers have been validated during pre-onboarding. Use the PDF URLs and extracted fields to upload the documents to the candidate’s record in your system.

onboarding.report.ready

Triggered every time a report PDF becomes available: a background verification report (initial or final), a pre-employment medical result, or a medical clearance slip. Use the PDF URL to upload and tag the report in your system of record.

onboarding.candidate.completed

Triggered when a candidate reaches completed after final validation. Carries the final document package; use it to upload the package and finalize the hire in your system. A onboarding.candidate.status_changed event is also emitted for the same transition—key your terminal handling off this event and de-duplicate.

onboarding.offer.completed

Triggered when every signer on an offer document has signed and the final signed PDF and audit certificate are ready. Use it to file the signed offer letter against the candidate in your system of record. This is the only offer event—for interim signer progress, poll Get Offer Document.

More event types may be added in future releases. Check this page for updates.