Unified.to
All articles

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

  1. Greenhouse sends a candidate event to Unified.
  2. Unified converts the event into the unified ats_candidate format.
  3. Unified sends the normalized webhook payload to your application's webhook URL.

Note

For created and updated events, Unified retrieves the latest candidate record from Greenhouse before sending the payload to your application.

For deleted events, 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:

  • created
  • updated
  • deleted

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.

Create webhook subscription


Step 2: Build the Greenhouse endpoint URLs

Build a separate Greenhouse endpoint URL using each Unified webhook subscription ID.

Unified regionGreenhouse endpoint
UShttps://api.unified.to/webhook/greenhouse/UNIFIED_WEBHOOK_ID
EUhttps://api-eu.unified.to/webhook/greenhouse/UNIFIED_WEBHOOK_ID
Australiahttps://api-au.unified.to/webhook/greenhouse/UNIFIED_WEBHOOK_ID
Use:
  • The created subscription ID for Greenhouse creation triggers
  • The updated subscription ID for Greenhouse update triggers
  • The deleted subscription ID for Greenhouse deletion triggers

Important

Do not enter your application's hook_url in 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:

  1. Select Configure.
  2. Select Dev Center.
  3. Select Web Hooks.
  4. Select Web Hooks again.
  5. 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:

FieldValue
Name this webhookA descriptive name, such as Unified – Candidate hired
WhenOne of the supported triggers listed below
Endpoint URLThe Unified endpoint for the corresponding Unified event
Secret KeyA unique, randomly generated secret stored securely
Error recipient emailA Greenhouse administrator who should receive delivery failure notices
Disabled?No
Advanced settingsLeave 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 triggerUnified event
Application createdcreated
Prospect createdcreated
Candidate/Prospect updatedupdated
Candidate hiredupdated
Candidate/Prospect rejectedupdated
Candidate stage changeupdated
Candidate unhiredupdated
Candidate/Prospect unrejectedupdated
Candidate deleteddeleted
Candidate mergeddeleted

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

  1. Open the webhook in Greenhouse.
  2. Confirm that the endpoint contains the correct Unified webhook subscription ID.
  3. Set Disabled? to No.
  4. 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:

  • type set to NATIVE
  • webhook.object_type set to ats_candidate
  • webhook.event set to the expected Unified event
  • The normalized candidate record in the data array

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:

  1. Disable or delete each corresponding webhook in Greenhouse.
  2. 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 createdupdated, or deleted subscription.
  • 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.


Additional documentation

All articles