Logo StartupKit
Integrations

Webhook Events Reference

Payload shapes, headers, and field definitions for every webhook event.

Why It Matters

Every webhook delivery wraps event-specific data in the same envelope. This reference documents the exact payload shape for each event so you can parse and act on them confidently.

Payload Envelope

{
  "event": "application.submitted",
  "created_at": "2025-01-15T14:30:00Z",
  "data": { }
}
Field Type Description
event string The event type that triggered this delivery
created_at string ISO 8601 timestamp of when the event occurred
data object Event-specific payload (varies by event type)

Request Headers

Every webhook request includes these headers:

Header Example Description
Content-Type application/json Always JSON
X-Webhook-Event application.submitted The event type
X-Webhook-Signature a1b2c3d4... HMAC-SHA256 hex digest
X-Webhook-Timestamp 2025-01-15T14:30:00Z ISO 8601 timestamp used in signature
User-Agent Kit-Webhooks/1.0 Identifies Kit as the sender

See Webhook Security & Delivery for signature verification details.

Application Events

Events: application.submitted, application.rejected, application.advanced, application.withdrawn, application.offer_extended

{
  "event": "application.submitted",
  "created_at": "2025-01-15T14:30:00Z",
  "data": {
    "id": 42,
    "candidate": {
      "id": 7,
      "name": "Jane Smith",
      "email": "[email protected]"
    },
    "job_posting": {
      "id": 3,
      "title": "Senior Engineer"
    },
    "current_stage": "Applied",
    "submitted_at": "2025-01-15T14:30:00Z",
    "rejected": false,
    "withdrawn": false,
    "offered": false
  }
}
Field Type Description
id integer Application ID
candidate.id integer Candidate ID
candidate.name string Candidate full name
candidate.email string Candidate email address
job_posting.id integer Job posting ID
job_posting.title string Job posting title
current_stage string Name of the current pipeline stage
submitted_at string | null ISO 8601 timestamp of submission
rejected boolean Whether the application has been rejected
withdrawn boolean Whether the candidate has withdrawn
offered boolean Whether an offer has been extended

Offer Events

Events: offer.accepted, offer.declined, offer.candidate_accepted, offer.candidate_declined, offer.revised

  • offer.accepted / offer.declined — fired when an admin accepts or declines an offer
  • offer.candidate_accepted / offer.candidate_declined — fired when a candidate responds to an offer
  • offer.revised — fired when an admin revises the offer with new terms
{
  "event": "offer.candidate_accepted",
  "created_at": "2025-01-20T10:00:00Z",
  "data": {
    "id": 15,
    "status": "candidate_accepted",
    "details": "Senior Engineer — $150k base",
    "extended_at": "2025-01-18T09:00:00Z",
    "expires_at": "2025-01-25T23:59:59Z",
    "accepted_at": null,
    "declined_at": null,
    "candidate": {
      "id": 7,
      "name": "Jane Smith",
      "email": "[email protected]"
    },
    "job_posting": {
      "id": 3,
      "title": "Senior Engineer"
    }
  }
}
Field Type Description
id integer Offer ID
status string One of: pending, accepted, declined, candidate_accepted, candidate_declined, expired
details string | null Offer details text
extended_at string | null When the offer was extended
expires_at string | null When the offer expires
accepted_at string | null When the offer was accepted by an admin
declined_at string | null When the offer was declined by an admin
candidate object Candidate details (same shape as application events)
job_posting object Job posting details (same shape as application events)

Interview Events

Events: interview.scheduled, interview.confirmed, interview.completed, interview.cancelled, interview.no_show

{
  "event": "interview.scheduled",
  "created_at": "2025-01-16T09:00:00Z",
  "data": {
    "id": 28,
    "status": "scheduled",
    "scheduled_at": "2025-01-20T14:00:00Z",
    "duration_minutes": 60,
    "candidate": {
      "id": 7,
      "name": "Jane Smith",
      "email": "[email protected]"
    },
    "job_posting": {
      "id": 3,
      "title": "Senior Engineer"
    }
  }
}
Field Type Description
id integer Interview ID
status string Interview status (scheduled, confirmed, completed, cancelled, no_show)
scheduled_at string | null ISO 8601 timestamp of the scheduled time
duration_minutes integer Interview duration in minutes
candidate object Candidate details
job_posting object Job posting details

Code Assignment Events

Events: code_assignment.submitted, code_assignment.auto_submitted

{
  "event": "code_assignment.submitted",
  "created_at": "2025-01-22T16:45:00Z",
  "data": {
    "id": 11,
    "repo_url": "https://github.com/org/assignment-jane-smith",
    "submitted_at": "2025-01-22T16:45:00Z",
    "deadline_at": "2025-01-25T23:59:59Z",
    "candidate": {
      "id": 7,
      "name": "Jane Smith",
      "email": "[email protected]"
    },
    "job_posting": {
      "id": 3,
      "title": "Senior Engineer"
    }
  }
}
Field Type Description
id integer Code submission ID
repo_url string GitHub repository URL
submitted_at string | null When the assignment was submitted
deadline_at string | null Assignment deadline
candidate object Candidate details
job_posting object Job posting details

Review Events

Events: review.submitted

{
  "event": "review.submitted",
  "created_at": "2025-01-23T11:00:00Z",
  "data": {
    "id": 9,
    "recommendation": "strong_yes",
    "reviewer": "Alex Johnson",
    "candidate": {
      "id": 7,
      "name": "Jane Smith",
      "email": "[email protected]"
    },
    "job_posting": {
      "id": 3,
      "title": "Senior Engineer"
    },
    "stage": "Technical Interview"
  }
}
Field Type Description
id integer Review ID
recommendation string Reviewer’s recommendation
reviewer string Name of the reviewer
candidate object Candidate details
job_posting object Job posting details
stage string Pipeline stage name where the review was submitted

Job Posting Events

Events: job_posting.published, job_posting.paused, job_posting.closed, job_posting.reopened

{
  "event": "job_posting.published",
  "created_at": "2025-01-10T08:00:00Z",
  "data": {
    "id": 3,
    "title": "Senior Engineer",
    "status": "published",
    "location": "Remote",
    "department": "Engineering",
    "employment_type": "Full-time",
    "published_at": "2025-01-10T08:00:00Z",
    "closed_at": null,
    "public_url": "https://careers.example.com/senior-engineer"
  }
}
Field Type Description
id integer Job posting ID
title string Job title
status string Current status (published, paused, closed)
location string Job location
department string Department name
employment_type string Employment type (Full-time, Part-time, Contract, etc.)
published_at string | null When the posting was published
closed_at string | null When the posting was closed
public_url string Public career portal URL for this posting

Test Events

Events: test.ping

The test.ping event is sent when you click Send Test Ping in the webhook settings. Use it to verify endpoint connectivity and signature validation.

{
  "event": "test.ping",
  "created_at": "2025-01-15T14:30:00Z",
  "data": {}
}

Type to search...