Configure Greenhouse Native Candidate Webhooks
July 15, 2026
Greenhouse Recruiting requires native webhooks to be created manually in its Dev Center.
This guide explains how to connect Greenhouse candidate events to a Unified webhook subscription.
Before you begin
You need:
- An active Greenhouse connection in Unified
- The Greenhouse connection ID
- A public HTTPS endpoint in your application that can receive Unified webhook payloads
- Greenhouse's Manage and configure webhooks developer permission
- A Unified API key
How the webhook flow works
- Greenhouse sends a candidate event to Unified.
- Unified converts the event into the unified
ats_candidateformat. - Unified sends the normalized webhook payload to your application's webhook URL.
Note
For
createdandupdatedevents, Unified retrieves the latest candidate record from Greenhouse before sending the payload to your application.For
deletedevents, the payload contains the deleted candidate ID.
Step 1: Create Unified webhook subscriptions
Create one native Unified webhook subscription for each event type you need:
createdupdateddeleted
Example: Created candidate subscription
curl --request POST \
--url 'https://api.unified.to/unified/webhook' \
--header 'Authorization: Bearer YOUR_UNIFIED_API_KEY' \
--header 'Content-Type: application/json' \
--data '{
"connection_id": "YOUR_GREENHOUSE_CONNECTION_ID",
"object_type": "ats_candidate",
"event": "created",
"webhook_type": "native",
"hook_url": "https://your-app.example.com/webhooks/unified"
}'
The hook_url is your application's endpoint. Unified sends normalized webhook payloads to this URL.
Repeat the request with event set to updated and deleted when those events are required.
Save the id returned for each webhook subscription.
Step 2: Build the Greenhouse endpoint URLs
Build a separate Greenhouse endpoint URL using each Unified webhook subscription ID.
| Unified region | Greenhouse endpoint |
|---|---|
| US | https://api.unified.to/webhook/greenhouse/UNIFIED_WEBHOOK_ID |
| EU | https://api-eu.unified.to/webhook/greenhouse/UNIFIED_WEBHOOK_ID |
| Australia | https://api-au.unified.to/webhook/greenhouse/UNIFIED_WEBHOOK_ID |
| Use: |
- The
createdsubscription ID for Greenhouse creation triggers - The
updatedsubscription ID for Greenhouse update triggers - The
deletedsubscription ID for Greenhouse deletion triggers
Important
Do not enter your application's
hook_urlin Greenhouse.Greenhouse must send its payload to the Unified endpoint shown above. Unified will then normalize the event and forward it to your application.
Step 3: Open Greenhouse webhook settings
In Greenhouse Recruiting:
- Select Configure.
- Select Dev Center.
- Select Web Hooks.
- Select Web Hooks again.
- Select the option to create a new webhook.
Permission required
If you cannot access this page, ask a Greenhouse administrator to grant you the Manage and configure webhooks developer permission.
Step 4: Create the Greenhouse webhooks
Greenhouse allows only one trigger per webhook.
Create a separate Greenhouse webhook for every trigger you want to receive.
For each webhook, enter the following:
| Field | Value |
|---|---|
| Name this webhook | A descriptive name, such as Unified – Candidate hired |
| When | One of the supported triggers listed below |
| Endpoint URL | The Unified endpoint for the corresponding Unified event |
| Secret Key | A unique, randomly generated secret stored securely |
| Error recipient email | A Greenhouse administrator who should receive delivery failure notices |
| Disabled? | No |
| Advanced settings | Leave blank unless your organization has additional requirements |
Created candidate events
Point the following Greenhouse triggers to the endpoint containing your Unified created webhook ID:
- Application created
- Prospect created
Updated candidate events
Point the following Greenhouse triggers to the endpoint containing your Unified updated webhook ID:
- Candidate/Prospect updated
- Candidate hired
- Candidate/Prospect rejected
- Candidate stage change
- Candidate unhired
- Candidate/Prospect unrejected
Deleted candidate events
Point the following Greenhouse triggers to the endpoint containing your Unified deleted webhook ID:
- Candidate deleted
- Candidate merged
Important
Use the correct Unified endpoint for each trigger group.
For example, do not send a Candidate hired trigger to the endpoint associated with a Unified
createdsubscription.
Trigger mapping reference
| Greenhouse trigger | Unified event |
|---|---|
| Application created | created |
| Prospect created | created |
| Candidate/Prospect updated | updated |
| Candidate hired | updated |
| Candidate/Prospect rejected | updated |
| Candidate stage change | updated |
| Candidate unhired | updated |
| Candidate/Prospect unrejected | updated |
| Candidate deleted | deleted |
| Candidate merged | deleted |
Step 5: Confirm that each webhook is active
When a Greenhouse webhook is created, Greenhouse sends a test ping to the configured endpoint.
- If the ping succeeds, Greenhouse activates the webhook.
- If the ping fails, Greenhouse saves the webhook in a disabled state.
Retry a failed webhook
- Open the webhook in Greenhouse.
- Confirm that the endpoint contains the correct Unified webhook subscription ID.
- Set Disabled? to No.
- Save the webhook again.
Test the integration
Perform a Greenhouse action matching one of the configured triggers.
For example, update a test candidate after configuring the Candidate/Prospect updated trigger.
Confirm that your application receives a Unified webhook payload containing:
typeset toNATIVEwebhook.object_typeset toats_candidatewebhook.eventset to the expected Unified event- The normalized candidate record in the
dataarray
Deleted candidate events contain an object with the deleted candidate's id.
Remove the webhooks
Deleting a Unified webhook subscription does not delete the manually configured Greenhouse webhooks.
To fully remove the integration:
- Disable or delete each corresponding webhook in Greenhouse.
- Delete the Unified webhook subscriptions.
Troubleshooting
The Greenhouse webhook is disabled immediately
The initial endpoint ping failed.
Check that:
- The endpoint starts with
https://. - The Unified webhook ID is correct.
- The endpoint uses the API hostname for the correct Unified region.
- The Unified webhook subscription still exists.
No webhook arrives after a candidate change
Check that:
- You configured the specific Greenhouse trigger for that action.
- The trigger points to the Unified endpoint for the correct
created,updated, ordeletedsubscription. - The Greenhouse webhook is not disabled.
- The Greenhouse connection still has permission to retrieve candidates.
- The configured error recipient has not received a Greenhouse delivery failure email.
Duplicate deliveries
Check that the same Greenhouse trigger was not created more than once.
Greenhouse may also retry failed deliveries, so your application should process webhook deliveries idempotently.