---
title: "List webhooks **Greenhouse partners exclusive**"
method: GET
path: "/v3/webhooks"
tags: ["Webhooks"]
---

# List webhooks \*\*Greenhouse partners exclusive\*\*

`GET /v3/webhooks`

## Request

- Base URL: `https://harvest.greenhouse.io`
- URL: `https://harvest.greenhouse.io/v3/webhooks`
- Auth: one of:
  - OAuth 2
    - Authorization code: `https://auth.greenhouse.io/authorize`
    - Client credentials
    - Token URL: `https://auth.greenhouse.io/token` scopes: `harvest:webhooks:list`
  - HTTP bearer

Webhooks are partner-configured subscriptions that fire when a Greenhouse event occurs (e.g. a candidate is hired or moves stages, a job post is created, an offer is approved). Each webhook listens to one `event_action_type` and posts the event payload to its `endpoint_url`. Scoped to webhooks owned by the calling partner application — webhooks created by other partners or by the customer in the Dev Center are not returned.

## Query parameters

- `cursor` string
- `per_page` integer
- `ids` integer[]
- `created_at` object
  - `gte` string, date-time
  - `lte` string, date-time
  - `gt` string, date-time
  - `lt` string, date-time
- `updated_at` object
  - `gte` string, date-time
  - `lte` string, date-time
  - `gt` string, date-time
  - `lt` string, date-time
- `fields` string[]
- `last_delivered` object
  - `gte` string, date-time
  - `lte` string, date-time
  - `gt` string, date-time
  - `lt` string, date-time
- `event_action_type` 'application_updated' | 'candidate_anonymized' | 'candidate_stage_change' | 'delete_application' | 'delete_candidate' | 'department_deleted' | 'hire_candidate' | 'interview_deleted' | 'job_approved' | 'job_created' | 'job_deleted' | 'job_interview_stage_deleted' | 'job_post_created' | 'job_post_deleted' | 'job_post_updated' | 'job_updated' | 'merge_candidate' | 'new_candidate_application' | 'new_prospect_application' | 'offer_approved' | 'offer_created' | 'offer_deleted' | 'offer_updated' | 'office_deleted' | 'reject_candidate' | 'scorecard_deleted' | 'unhire_candidate' | 'unreject_candidate' | 'update_candidate'
- `deactivated` boolean

## Response `200`

Successful

- object[]
  - `id` integer
  - `created_at` string, date-time
  - `updated_at` string, date-time
  - `name` string: Human-readable label for the webhook shown in Greenhouse's Dev Center (e.g. `Workday hire export`). Used only for identification — does not affect delivery.
  - `endpoint_url` string: HTTPS URL Greenhouse posts the event payload to. Must use port 80, 443, 1880, 8081, 9090, or 54015. Greenhouse pings this URL on create; if the ping fails, the webhook is still saved but starts in a deactivated state.
  - `event_action_type` 'application_updated' | 'candidate_anonymized' | 'candidate_stage_change' | 'delete_application' | 'delete_candidate' | 'department_deleted' | 'hire_candidate' | 'interview_deleted' | 'job_approved' | 'job_created' | 'job_deleted' | 'job_interview_stage_deleted' | 'job_post_created' | 'job_post_deleted' | 'job_post_updated' | 'job_updated' | 'merge_candidate' | 'new_candidate_application' | 'new_prospect_application' | 'offer_approved' | 'offer_created' | 'offer_deleted' | 'offer_updated' | 'office_deleted' | 'reject_candidate' | 'scorecard_deleted' | 'unhire_candidate' | 'unreject_candidate' | 'update_candidate': Greenhouse event that fires this webhook (e.g. `hire_candidate`, `candidate_stage_change`, `job_post_created`, `offer_created`). A webhook listens to exactly one event type.
  - `max_attempts` integer: Maximum number of delivery attempts Sidekiq will make before giving up. Must be between 1 and 7 inclusive; defaults to 6 in Greenhouse. Failed attempts are retried with exponential backoff.
  - `additional_headers` string, nullable: Extra HTTP headers Greenhouse appends to the delivery request, one per line in `Header-Name: value` format (e.g. `X-Tenant: acme\r\nX-Source: greenhouse`). `null` when no custom headers are configured.
  - `error_recipient_email` string, nullable: Email address notified when a webhook delivery exhausts its retries. `null` disables failure notifications — there is no in-app alert otherwise.
  - `deactivated` boolean: If `true`, the webhook is paused and will not fire on its event. Set automatically when a newly created webhook fails its initial ping; can be toggled by partners through `PATCH /v3/webhooks/{id}`.
  - `last_delivered` string, date-time, nullable: Timestamp of the most recent successful delivery, in ISO 8601. `null` when the webhook has never delivered a payload (including newly created webhooks).
  - `client_id` string, nullable: The `client_id` of the partner client application that owns this webhook. A webhook is owned by the application that created it through the API; ownership scopes which application can see and modify it. `null` when the webhook is unattributed — created in the Greenhouse Dev Center, or before provenance tracking — in which case every one of the partner's applications can see and modify it.

---

[API](https://skmtc.dev/greenhouse/apis/harvest-api.md) - [All operations](https://skmtc.dev/greenhouse/apis/harvest-api/llms.txt) - [OpenAPI document](https://skmtc.dev/greenhouse/apis/harvest-api/revisions/822822e3f771?raw)
