Skip to main content
HTTPS destinations receive a signed JSON envelope; Slack and Teams destinations get a formatted chat card instead; see Slack and Teams. Register events with POST /webhooks/create/ (events array). Verify X-Praxicraft-Signature before parsing. SDK helpers. Setup overview: Webhooks.

Envelope

Every HTTPS delivery looks like this:
Header on every HTTPS delivery:
Live destinations only receive live events. Use a Test-mode destination (or ct_test_ key) while debugging.

Correlation fields

Assessment completion / pass-fail payloads include:

Assessment

assessment.started

Candidate begins a session.

assessment.completed

Candidate submitted (or timer finalized) the assessment. Scores may still be calculating. use candidate.passed / candidate.failed for scored outcomes.
external_id is omitted when not set on the invitation.

candidate.passed

Score meets or exceeds the assessment passing threshold (after grading).

candidate.failed

Same data shape as candidate.passed, with passed: false and a failing score.

candidate.violation

Proctoring signal recorded (fullscreen exit, copy/paste, screen share, webcam, or focus loss).

Invitation

invitation.created

A new assessment invitation was created (email may or may not have been sent).
enrollment_id / pipeline_enrollment_id appear only when the invite was created through a pipeline enrollment.

invitation.expired

Pending invitation expired before the candidate started.

Pipeline

Shared enrollment fields (pipeline.enrolled, pipeline.completed, pipeline.rejected, pipeline.held, pipeline.unheld):

pipeline.enrolled

pipeline.advanced

Enrollment moved to a later stage. Includes from_stage, to_stage, and next_stage_type.

pipeline.completed

Enrollment status became passed.

pipeline.rejected

pipeline.held / pipeline.unheld

Same shared enrollment fields. On hold, status is on_hold. After unhold, status returns to active (or another terminal status if catch-up applied).

Interview

Shared interview room fields:

interview.scheduled

interview.started

Same shape; status reflects in-progress, started_at set.

interview.completed

Same shape; ended_at set after a normal finish.

interview.cancelled

Same shape; room cancelled by recruiter or API.

interview.no_show

Same shape; interview expired without completion.

interview.analysis_ready

Room fields plus analysis summary:

System

webhook.test

Connectivity ping from POST /webhooks/{id}/test/ (or health probes).
HTTP 2xx on this ping sets is_verified and activates the destination.

Quick reference

Next

Webhooks setup · Verify signatures · Connect ATS via webhooks · n8n · Zapier
Last modified on August 27, 2026