We value your privacy

We use cookies to enhance your browsing experience, serve personalized content, and analyze our traffic. By clicking "Accept All", you consent to our use of cookies. You can manage your preferences or learn more in our Cookie Policy and Privacy Policy.

API Documentation

Complete guide to CareerVault's webhooks, REST APIs, and integration endpoints

Outbound Webhooks
CareerVault will send HTTP POST requests to your configured webhook URLs when these events occur

Webhook Configuration

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/json

Application Events

application.created

Triggered when a new job application is submitted

Triggered When:

  • Candidate submits an application through Easy Apply
  • External candidate is imported with application
  • Application is created via API

Payload Example:

{
  "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_changed

Triggered when an application's status is updated

Triggered When:

  • Recruiter manually changes status
  • Status updated via API
  • Automated status change (e.g., interview scheduled)

Payload Example:

{
  "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.withdrawn

Triggered when a candidate withdraws their application

Triggered When:

  • Candidate withdraws application themselves
  • Application withdrawn via API

Payload Example:

{
  "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 Events

job.created

Triggered when a new job posting is created

Triggered When:

  • Job posted through CareerVault
  • Job synced from ATS
  • Job created via API

Payload Example:

{
  "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_changed

Triggered when a job's status changes

Triggered When:

  • Job opened, closed, or archived
  • Status changed via API

Payload Example:

{
  "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_threshold

Triggered when a job reaches a specified number of applications

Triggered When:

  • Application count reaches 10, 25, 50, 100, or custom threshold

Payload Example:

{
  "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 Events

interview.scheduled

Triggered when an interview is scheduled

Triggered When:

  • Interview scheduled through CareerVault
  • Interview scheduled via API

Payload Example:

{
  "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.completed

Triggered when an interview is marked as completed

Triggered When:

  • Interview status changed to completed
  • Feedback submitted for interview

Payload Example:

{
  "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.cancelled

Triggered when an interview is cancelled

Triggered When:

  • Interview cancelled by recruiter or candidate
  • Interview cancelled via API

Payload Example:

{
  "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 Events

candidate.profile_created

Triggered when a new candidate profile is created

Triggered When:

  • Candidate registers on CareerVault
  • External candidate imported
  • Profile created via API

Payload Example:

{
  "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_updated

Triggered when a candidate updates their profile

Triggered When:

  • Candidate updates profile information
  • Profile updated via API
  • Resume uploaded or updated

Payload Example:

{
  "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_completed

Triggered when a candidate's identity or credentials are verified

Triggered When:

  • Identity verification completed
  • Education verification completed
  • Employment verification completed

Payload Example:

{
  "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 Events

reference.verified

Triggered when a professional reference is verified

Triggered When:

  • Reference clicks verification link and confirms
  • Reference verified via API

Payload Example:

{
  "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 Events

offer.sent

Triggered when an offer letter is sent to a candidate

Triggered When:

  • Offer generated and sent to candidate
  • Offer sent via API

Payload Example:

{
  "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.accepted

Triggered when a candidate accepts an offer

Triggered When:

  • Candidate digitally signs and accepts offer
  • Offer accepted via API

Payload Example:

{
  "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.declined

Triggered when a candidate declines an offer

Triggered When:

  • Candidate declines offer through CareerVault
  • Offer declined via API

Payload Example:

{
  "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 Integration Events

ats.sync_completed

Triggered when an ATS sync operation completes

Triggered When:

  • Scheduled ATS sync completes
  • Manual sync triggered and completed

Payload Example:

{
  "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_conflict

Triggered when a conflict is detected during ATS sync

Triggered When:

  • Application status different in CareerVault and ATS
  • Conflict requires manual resolution

Payload Example:

{
  "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"
  }
}

Additional Resources

Need Help?

Contact our developer support team at api-support@careervault.com

Need help? Chat with us!