Configure your webhook URLs in the Webhook Manager
POST https://your-domain.com/webhooks/careervault
Headers:
X-CareerVault-Signature: <hmac_signature>
X-CareerVault-Event: <event_name>
Content-Type: application/jsonapplication.createdTriggered when a new job application is submitted
{
"event": "application.created",
"timestamp": "2025-01-15T10:30:00Z",
"data": {
"application_id": "app_abc123",
"job_id": "job_xyz789",
"job_title": "Senior Software Engineer",
"applicant_email": "candidate@example.com",
"applicant_name": "John Doe",
"applicant_profile_id": "profile_123",
"status": "applied",
"application_date": "2025-01-15T10:30:00Z",
"cover_letter": "I am excited to apply...",
"resume_url": "https://...",
"ats_synced": false
}
}application.status_changedTriggered when an application's status is updated
{
"event": "application.status_changed",
"timestamp": "2025-01-16T14:20:00Z",
"data": {
"application_id": "app_abc123",
"job_id": "job_xyz789",
"applicant_email": "candidate@example.com",
"previous_status": "applied",
"new_status": "interviewing",
"changed_by": "recruiter@company.com",
"changed_at": "2025-01-16T14:20:00Z",
"notes": "Moving to interview stage"
}
}application.withdrawnTriggered when a candidate withdraws their application
{
"event": "application.withdrawn",
"timestamp": "2025-01-17T09:15:00Z",
"data": {
"application_id": "app_abc123",
"job_id": "job_xyz789",
"applicant_email": "candidate@example.com",
"withdrawn_date": "2025-01-17T09:15:00Z",
"previous_status": "interviewing"
}
}job.createdTriggered when a new job posting is created
{
"event": "job.created",
"timestamp": "2025-01-15T08:00:00Z",
"data": {
"job_id": "job_xyz789",
"title": "Senior Software Engineer",
"company_name": "Tech Corp",
"company_id": "company_123",
"location": "San Francisco, CA",
"work_model": "hybrid",
"employment_type": "full_time",
"min_salary": 120000,
"max_salary": 180000,
"status": "open",
"posted_by": "recruiter@company.com",
"ats_integration_id": "int_456",
"ats_source": "greenhouse"
}
}job.status_changedTriggered when a job's status changes
{
"event": "job.status_changed",
"timestamp": "2025-01-20T16:00:00Z",
"data": {
"job_id": "job_xyz789",
"title": "Senior Software Engineer",
"previous_status": "open",
"new_status": "closed",
"changed_by": "recruiter@company.com",
"reason": "Position filled"
}
}job.applicant_count_thresholdTriggered when a job reaches a specified number of applications
{
"event": "job.applicant_count_threshold",
"timestamp": "2025-01-18T12:00:00Z",
"data": {
"job_id": "job_xyz789",
"title": "Senior Software Engineer",
"applicant_count": 50,
"threshold_reached": 50,
"status": "open"
}
}interview.scheduledTriggered when an interview is scheduled
{
"event": "interview.scheduled",
"timestamp": "2025-01-16T10:00:00Z",
"data": {
"interview_id": "int_abc123",
"application_id": "app_abc123",
"job_id": "job_xyz789",
"candidate_email": "candidate@example.com",
"candidate_name": "John Doe",
"interviewer_emails": ["interviewer1@company.com", "interviewer2@company.com"],
"interview_type": "technical",
"scheduled_date": "2025-01-20T14:00:00Z",
"duration_minutes": 60,
"meeting_link": "https://zoom.us/j/123456",
"created_by": "recruiter@company.com"
}
}interview.completedTriggered when an interview is marked as completed
{
"event": "interview.completed",
"timestamp": "2025-01-20T15:00:00Z",
"data": {
"interview_id": "int_abc123",
"application_id": "app_abc123",
"candidate_email": "candidate@example.com",
"feedback_count": 2,
"average_rating": 4.5,
"recommendation": "yes",
"completed_date": "2025-01-20T15:00:00Z"
}
}interview.cancelledTriggered when an interview is cancelled
{
"event": "interview.cancelled",
"timestamp": "2025-01-19T09:00:00Z",
"data": {
"interview_id": "int_abc123",
"application_id": "app_abc123",
"candidate_email": "candidate@example.com",
"cancelled_by": "recruiter@company.com",
"cancellation_reason": "Candidate no longer available",
"originally_scheduled": "2025-01-20T14:00:00Z"
}
}candidate.profile_createdTriggered when a new candidate profile is created
{
"event": "candidate.profile_created",
"timestamp": "2025-01-15T09:00:00Z",
"data": {
"profile_id": "profile_123",
"user_email": "candidate@example.com",
"full_name": "John Doe",
"title": "Software Engineer",
"location": "San Francisco, CA",
"years_experience": 5,
"skills": ["React", "Node.js", "Python"],
"linkedin_url": "https://linkedin.com/in/johndoe",
"is_verified": false,
"availability": "available"
}
}candidate.profile_updatedTriggered when a candidate updates their profile
{
"event": "candidate.profile_updated",
"timestamp": "2025-01-16T11:30:00Z",
"data": {
"profile_id": "profile_123",
"user_email": "candidate@example.com",
"updated_fields": ["skills", "years_experience", "uploaded_resume_url"],
"previous_values": {
"skills": ["React", "Node.js"],
"years_experience": 5
},
"new_values": {
"skills": ["React", "Node.js", "Python", "TypeScript"],
"years_experience": 6
}
}
}candidate.verification_completedTriggered when a candidate's identity or credentials are verified
{
"event": "candidate.verification_completed",
"timestamp": "2025-01-17T14:00:00Z",
"data": {
"profile_id": "profile_123",
"user_email": "candidate@example.com",
"verification_type": "identity",
"verification_status": "verified",
"verified_date": "2025-01-17T14:00:00Z",
"verification_provider": "Stripe Identity"
}
}reference.verifiedTriggered when a professional reference is verified
{
"event": "reference.verified",
"timestamp": "2025-01-18T10:00:00Z",
"data": {
"reference_id": "ref_123",
"professional_email": "candidate@example.com",
"reference_email": "manager@company.com",
"reference_name": "Jane Smith",
"relationship": "Former Manager",
"company": "Tech Corp",
"verification_date": "2025-01-18T10:00:00Z",
"recommendation": "I highly recommend John for..."
}
}offer.sentTriggered when an offer letter is sent to a candidate
{
"event": "offer.sent",
"timestamp": "2025-01-19T15:00:00Z",
"data": {
"offer_id": "offer_123",
"application_id": "app_abc123",
"job_id": "job_xyz789",
"candidate_email": "candidate@example.com",
"candidate_name": "John Doe",
"job_title": "Senior Software Engineer",
"base_salary": 150000,
"start_date": "2025-02-15",
"acceptance_deadline": "2025-01-26",
"sent_date": "2025-01-19T15:00:00Z"
}
}offer.acceptedTriggered when a candidate accepts an offer
{
"event": "offer.accepted",
"timestamp": "2025-01-21T10:00:00Z",
"data": {
"offer_id": "offer_123",
"application_id": "app_abc123",
"candidate_email": "candidate@example.com",
"accepted_date": "2025-01-21T10:00:00Z",
"signature_data": "<base64_signature>",
"ip_address": "192.168.1.1",
"start_date": "2025-02-15"
}
}offer.declinedTriggered when a candidate declines an offer
{
"event": "offer.declined",
"timestamp": "2025-01-21T10:00:00Z",
"data": {
"offer_id": "offer_123",
"application_id": "app_abc123",
"candidate_email": "candidate@example.com",
"declined_date": "2025-01-21T10:00:00Z",
"decline_reason": "Accepted another offer"
}
}ats.sync_completedTriggered when an ATS sync operation completes
{
"event": "ats.sync_completed",
"timestamp": "2025-01-20T08:00:00Z",
"data": {
"sync_id": "sync_123",
"ats_source": "greenhouse",
"sync_type": "full_sync",
"sync_direction": "bidirectional",
"jobs_synced": 25,
"applications_synced": 150,
"candidates_synced": 120,
"conflicts_detected": 2,
"sync_duration_seconds": 45,
"sync_status": "success"
}
}ats.sync_conflictTriggered when a conflict is detected during ATS sync
{
"event": "ats.sync_conflict",
"timestamp": "2025-01-20T08:15:00Z",
"data": {
"conflict_id": "conflict_123",
"application_id": "app_abc123",
"ats_source": "greenhouse",
"careervault_status": "interviewing",
"ats_status": "offer_extended",
"careervault_last_modified": "2025-01-19T14:00:00Z",
"ats_last_modified": "2025-01-20T08:00:00Z",
"conflict_resolution": "manual",
"resolution_url": "https://app.careervault.com/ATSSyncDashboard?conflict=conflict_123"
}
}Need Help?
Contact our developer support team at api-support@careervault.com