## Why It Matters

Webhooks push event data to your systems the moment something happens — a candidate applies, an interview is scheduled, a job posting goes live. Instead of polling an API, your integrations receive instant HTTP callbacks with the full event payload.

## What You Need

- A Kit account with **admin** access
- An HTTPS endpoint that can receive POST requests

## Setup

Navigate to [Integrations > Webhooks](/integrations/webhooks), click **New Webhook**, and fill in:

| Field | Required | Description |
|-------|----------|-------------|
| URL | Yes | The HTTPS endpoint that will receive events |
| Description | No | A label to help you identify this webhook |
| Events | Yes | Which event types to subscribe to |

Select individual events or subscribe to entire categories. Click **Create Webhook** to save. Kit generates a signing secret you'll use to verify payloads.

## Available Events

Kit fires webhooks across six categories:

### Application Events

| Event | Fires When |
|-------|-----------|
| `application.submitted` | A candidate submits an application |
| `application.rejected` | An application is rejected |
| `application.advanced` | An application advances to the next stage |
| `application.withdrawn` | A candidate withdraws their application |
| `application.offer_extended` | An offer is extended to a candidate |

### Offer Events

| Event | Fires When |
|-------|-----------|
| `offer.accepted` | An admin accepts an offer |
| `offer.declined` | An admin declines an offer |
| `offer.candidate_accepted` | A candidate accepts an offer |
| `offer.candidate_declined` | A candidate declines an offer |
| `offer.revised` | An offer is revised with new terms |

### Interview Events

| Event | Fires When |
|-------|-----------|
| `interview.scheduled` | An interview is scheduled |
| `interview.confirmed` | A candidate confirms the interview |
| `interview.completed` | An interview is marked as completed |
| `interview.cancelled` | An interview is cancelled |
| `interview.no_show` | A candidate is marked as a no-show |

### Code Assignment Events

| Event | Fires When |
|-------|-----------|
| `code_assignment.submitted` | A candidate submits their code assignment |
| `code_assignment.auto_submitted` | A code assignment is auto-submitted at deadline |

### Review Events

| Event | Fires When |
|-------|-----------|
| `review.submitted` | A team member submits a review |

### Job Posting Events

| Event | Fires When |
|-------|-----------|
| `job_posting.published` | A job posting is published |
| `job_posting.paused` | A job posting is paused |
| `job_posting.closed` | A job posting is closed |
| `job_posting.reopened` | A job posting is reopened |

## Managing Webhooks

Each webhook shows its status, subscribed events, and recent delivery history.

- **Pause** — Stop deliveries. Events that fire while paused are not queued.
- **Resume** — Re-enable a paused or auto-disabled webhook. Resets the failure counter.
- **Edit** — Change the URL, description, or subscribed events.
- **Rotate Secret** — Generate a new signing secret. Update your endpoint before rotating.
- **Delete** — Permanently remove the webhook and its delivery history.

## Testing Your Endpoint

Click **Send Test Ping** on any webhook to send a `test.ping` event to your endpoint. Use it to verify connectivity and signature validation before subscribing to real events.

The **Deliveries** tab shows request headers, response status, and timing for each delivery attempt.

## Quick Checklist

- [ ] Navigate to [Integrations > Webhooks](/integrations/webhooks)
- [ ] Add your HTTPS endpoint URL
- [ ] Select the events you want to receive
- [ ] Copy your signing secret
- [ ] Send a test ping to verify connectivity
- [ ] Implement [signature verification](/docs/webhook-security-and-delivery) in your endpoint
- [ ] Return a `2xx` status code to acknowledge receipt