NAV Navbar
json

Introduction

What is a web hook?

A web hook is a simple event-notification system. When an event occurs in Greenhouse, a payload of JSON data containing information about the event is sent via POST to a specified endpoint URL over HTTPS.

Each delivery will include a Greenhouse-Event-ID header. This will contain an unique id associated with this delivery.

Creating a web hook

Web hooks have three components. A name, an endpoint URL, and a secret key.

Advanced settings

Advanced settings allow customers with certain other security needs to use web hooks for their system. In most cases, users will not need to configure these.

Authentication

Signature: sha256 37d2725109df92747ffcee59833a1d1262d74b9703fa1234c789407218b4a4ef

To compute the HMAC digest in Ruby:

digest = OpenSSL::Digest.new('sha256')
signature = OpenSSL::HMAC.hexdigest(digest, secret_key, body)

To compute the HMAC digest in PHP:

<?php
  // Requires PHP >= 5.1.2 and PECL hash >= 1.1
  $signature = hash_hmac('sha256', $body, $secret_key);
?>

The body variable in the above code samples refers to the entire content of the JSON response. Not just the payload attribute.

Greenhouse uses a digital signature which is generated using the secret key entered when creating a web hook and the body of the web hook’s request. This data is contained within the Signature header.

The header contains: the SHA algorithm used to generate the signature, a space, and the signature. To verify the request came from Greenhouse, compute the HMAC digest using your secret key and the body and compare it to the signature portion (after the space) contained in the header. If they match, you can be sure the web hook was sent from Greenhouse.

Important note on Unicode: Greenhouse will escape Unicode characters when they are encoded as JSON before computing the signature. For example, if the job post content is <p>hello</p>, the web hook body will represent it as \u003cp\u003ehello\u003c/p\u003e. When we compute the signature, we use the string exactly as it appears in the body, including the escaped unicode. Be sure to duplicate this process on the receiving end so the signatures match.

Common Attributes

Currently, Web Hooks for all event types include these common attributes:

AttributeNote
application.idUnique Greenhouse identifier of the application. Information not included in the web hook can be retrieved via Harvest API - GET Applications
application.credited_toIf populated and a Greenhouse user, the user’s Greenhouse ID, e-mail address, and Employee ID (if available) will be provided. If populated and not a Greenhouse user, just the name will be provided.
application.statusOne of: rejected, hired, active
application.candidate.idUnique Greenhouse identifier of the candidate. Information not included in the web hook can be retrieved via Harvest API - GET Candidates
application.candidate.phone_numbers[].typeOne of: home, work, mobile, skype, other
application.candidate.addresses[].typeApplication Candidate Addresses Type
application.candidate.email_addresses[].typeOne of: personal, work, other
application.candidate.attachments[].typeOne of: cover_letter, offer_packet, resume, take_home_test, offer_letter, signed_offer_letter

Note: Attachments expire in 7 days.
application.candidate.external_idAn arbitrary ID provided by an external source; does not map to another entity in Greenhouse.
application.prospectIf true, this is a prospect application which means that the associated person is a prospect and has not yet applied for this job. (Only prospects will have non-null values for prospect_owner, prospect_pool, or prospect_stage under prospect_detail)
application.prospect_detail.prospect_ownerThe user responsible for keeping track of the prospect. Either null or a user’s id and name
application.prospect_detail.prospect_poolThe current prospect pool of a prospect. Either null or a pool’s id and name
application.prospect_detail.prospect_stageThe current prospect stage of a prospect. Either null or a stage’s id and name
application.jobs[]Candidates will have one job. Prospects will have 0 or more jobs.
application.jobs[].idUnique Greenhouse identifier of the job. Information not included in the web hook can be retrieved via Harvest API - GET Jobs
application.jobs[].requisition_idAn arbitrary ID provided by an external source; does not map to another entity in Greenhouse.
application.opening.opening_idThis is an external opening id that may be defined for an HRIS system. This does not reference anything else in Greenhouse and may be blank.
custom_fieldsContains a hash map/associative array. The key of the hash map is an immutable key; which is an underscore-slugged version of the custom field’s name at creation time. The exported properties reflect the active values of the custom field at the time of the export. All custom fields, public and private, will be exported. If a field exists but does not have a value, it will be exported with a value of null for singular values and empty arrays for multiple values. Important Note: If a custom field is created with the name Salary the key will be salary. If later the name of this custom field is changed to Wage or Bonus, the key will remain salary.
custom_fields[].typeOne of: short_text, long_text, boolean, single_select, multi_select, currency, currency_range, number, number_range, date, url, or user.

Custom Fields

    {
        "custom_fields": {
            "short_text_field": {
                "name": "Short Text Field",
                "type": "short_text",
                "value": "A text string with fewer than 255 characters."
            },
            "long_text_field": {
                "name": "Long Text Field",
                "type": "long_text",
                "value": "A text string of any length."
            },
            "boolean_field": {
                "name": "Boolean Field",
                "type": "boolean",
                "value": true (or false)
            },
            "single_select": {
                "name": "Single Select Field",
                "type": "single_select",
                "value": "The text of selected custom field option."
            },
            "multi_select": {
                "name": "Multi Select Field",
                "type": "multi_select",
                "value": [
                    "An array containing the text of",
                    "all the selected",
                    "custom field options"
                ]
            },
            "currency_field": {
                "name": "Currency Field",
                "type": "currency",
                "value": {
                    "amount": 80000,
                    "unit": "USD"
                }
            },
            "compensation_field": {
                "name": "Compensation Field",
                "type": "currency",
                "value": {
                    "amount": 80000,
                    "unit": "USD"
                },
                "compensation_type": "base",
                "frequency": "annually",
                "rationale": "base rationale"
            },
            "currency_range_field": {
                "name": "Currency Range Field",
                "type": "currency_range",
                "value": {
                    "min_value": 80000,
                    "max_value": 150000,
                    "unit": "USD"
                }
            },
            "number_field": {
                "name": "Number Field",
                "type": "number",
                "value": 125
            },
            "number_range_field": {
                "name": "Number Range Field",
                "type": "number_range",
                "value": {
                    "min_value": 80000,
                    "max_value": 150000
                }
            },
            "date_field": {
                "name": "Date Field",
                "type": "date",
                "value": "YYYY-MM-DD"
            },
            "url_field": {
                "name": "URL Field",
                "type": "url",
                "value": "https://www.thisisjustatextvalue.com"
            },
            "user_field": {
                "name": "User Field",
                "type": "user",
                "value": {
                    "user_id": 94354,
                    "name": "Ben Smith",
                    "email": "ben@example.com",
                    "employee_id": "bs0615"
                }
            }
        }
    }

Custom fields may be attached to several objects within the Greenhouse Recruiting system. These fields may appear on candidates, applications, offers, and other objects in the system. These fields share several properties and are always indicated in web hooks by the “custom_fields” element. However, the “value” attribute of custom fields are different depending on the “type” attribute, so you must check the “type” attribute in order to predict what will be included in the value “attribute”. As described in the previous section, the type attribute will be one of short_text, long_text, boolean, single_select, multi_select, currency, currency_range, number, number_range, date, url, or user. An example of each of these fields’ expected value format are provided.

Compensation Field is a special type of currency custom field. If a currency field is marked as a compensation field, three additional fields will be included: compensation_type, rationale, frequency

Disabled web hooks

If a web hook is disabled, it will not trigger when the event occurs. Web hooks become disabled automatically if a ping event fails on create or update. They need to be manually re-enabled if this occurs.

Retry policy

In the event of a failed webhook request (due to timeout, a non HTTP 200 response, or network issues), Greenhouse will attempt a maximum of 6 retries according to the formula on the right:

This formula increases the amount of time between each retry, while assigning a random number of seconds to avoid consistent failures from overload or contention.

Greenhouse will attempt 6 retries over the course of 15 hours.

RETRY_DELAY_MINUTES = [1, 15, 60, 120, 240, 480]

sidekiq_retry_in do |index, _exception|
  seconds_delay = (RETRY_DELAY_MINUTES[index] || RETRY_DELAY_MINUTES.last) * 60
  offset = rand(30) * (index + 1)

  seconds_delay + offset
end

The table below outlines the estimated wait time for each retry request, assuming that rand(30) always returns 0.

Retry numberNext Retry inTotal waiting time
11m0h 1m
215m0h 16m
360m1h 16m
4120m3h 16m
5240m7h 16m
6480m15h 16m

Application Events

Application created

{
  "action": "new_candidate_application",
  "payload": {
    "application": {
      "id": 71980812,
      "rejected_at": null,
      "prospect": false,
      "status": "active",
      "applied_at": "2017-10-27T14:44:43Z",
      "last_activity_at": "2017-10-27T14:44:42Z",
      "url": "http://app.greenhouse.io/people/60304594?application_id=71980812",
      "source": {
        "id": 16,
        "name": "LinkedIn (Prospecting)"
      },
      "credited_to": {
        "id": 92120,
        "email": "test123@example.com",
        "name": "Greenhouse Admin",
        "employee_id": "123ABC"
      },
      "rejection_reason": null,
      "rejection_details": null,
      "current_stage": {
        "id": 2944102,
        "name": "Preliminary Phone Screen",
        "interviews": [
          {
            "id": 4368004,
            "name": "Preliminary Screening Call",
            "status": "to_be_scheduled",
            "interview_kit": {
              "url": "http://app.greenhouse.io/guides/4368142/people/60304594?application_id=71980812",
              "content": "<p>Directions on how to conduct this interview.</p>",
              "questions": [
                {
                  "id": 3136352,
                  "question": "Could you tell me about your previous experience?"
                },
                {
                  "id": 3136353,
                  "question": "Why do you want to work with us?"
                }
              ]
            },
            "interviewers": []
          }
        ]
      },
      "prospect_detail": {
        "prospect_pool": null,
        "prospect_stage": null,
        "prospect_owner": null
      },
      "custom_fields": {
        "application_custom_test": {
          "name": "Application Custom Test",
          "type": "single_select",
          "value": null
        },
        "custom_boolean_test": {
          "name": "Custom Boolean Test",
          "type": "boolean",
          "value": null
        }
      },
      "candidate": {
        "id": 60304594,
        "first_name": "Jane",
        "last_name": "Smith",
        "title": "Manager",
        "company": "Current Company Co.",
        "created_at": "2017-10-27T14:44:42Z",
        "external_id": null,
        "photo_url": null,
        "url": "http://app.greenhouse.io/people/60304594",
        "is_private": false,
        "can_email": true,
        "phone_numbers": [
          {
            "value": "555-555-5555",
            "type": "mobile"
          }
        ],
        "email_addresses": [
          {
            "value": "person@work.com",
            "type": "work"
          },
          {
            "value": "person@example.com",
            "type": "personal"
          }
        ],
        "addresses": [
          {
            "value": "123 Test Street\nNew York, NY 10001",
            "type": "home"
          }
        ],
        "website_addresses": [
          {
            "value": "mysite.com",
            "type": "personal"
          }
        ],
        "social_media_addresses": [
          {
            "value": "socialmedia.com"
          }
        ],
        "educations": [
          {
            "school_name": "Stanford University",
            "degree": "Bachelor's Degree",
            "discipline": "Computer Science",
            "start_date": "09/15/2007",
            "end_date": "05/15/2011"
          }
        ],
        "employments": [],
        "recruiter": {
          "id": 92121,
          "email": "employee@test.com",
          "name": "Betty Smith",
          "employee_id": "123ABC"
        },
        "coordinator": {
          "id": 92427,
          "email": "user@example.com",
          "name": "Bonnie Bonnet",
          "employee_id": "456DEF"
        },
        "attachments": [
          {
            "filename": "Test Cover Letter.docx",
            "url": "https://prod-heroku.s3.amazonaws.com/...",
            "type": "cover_letter"
          },
          {
            "filename": "Test Resume.docx",
            "url": "https://prod-heroku.s3.amazonaws.com/...",
            "type": "resume"
          }
        ],
        "tags": [
          "Ruby",
          "Comp Sci"
        ],
        "custom_fields": {
          "date_test": {
            "name": "Date Test",
            "type": "date",
            "value": ""
          },
          "desired_salary": {
            "name": "Desired Salary",
            "type": "short_text",
            "value": null
          },
          "graduation_year_1": {
            "name": "Graduation Year",
            "type": "single_select",
            "value": null
          },
          "work_remotely": {
            "name": "Work Remotely",
            "type": "boolean",
            "value": null
          }
        }
      },
      "jobs": [
        {
          "id": 274075,
          "name": "Data Scientist",
          "requisition_id": "ABC",
          "notes": null,
          "confidential": false,
          "job_post_id": 263533,
          "status": "open",
          "created_at": "2016-07-14T17:21:30Z",
          "opened_at": "2016-07-20T16:00:00Z",
          "closed_at": null,
          "url": "http://app.greenhouse.io/sdash/274075",
          "departments": [
            {
              "id": 8717,
              "name": "Data Science",
              "external_id": "ex-dept-1"
            }
          ],
          "offices": [
            {
              "id": 16478,
              "name": "London",
              "location": "London, United Kingdom",
              "external_id": "ex-office-1"
            }
          ],
          "hiring_team": {
            "hiring_managers": [
              {
                "user_id": 92913,
                "employee_id": "123ABC"
              }
            ],
            "sourcers": [
              {
                  "user_id": 92427,
                "employee_id": null
              }
            ],
            "recruiters":  [
              {
                  "user_id": 92427,
                "employee_id": null
              }
            ],
            "coordinators": [
              {
                "user_id": 92427,
                "employee_id": "DEFG123"
              }
            ]
          },
          "custom_fields": {
            "date_test": {
              "name": "Date Test",
              "type": "date",
              "value": "2017-10-27"
            },
            "employment_type": {
              "name": "Employment",
              "type": "single_select",
              "value": "Full-time"
            },
            "replacement_role_": {
              "name": "Replacement Role",
              "type": "boolean",
              "value": true
            },
            "salary_range_2": {
              "name": "Salary Range",
              "type": "currency_range",
              "value": {
                "unit": null,
                "min_value": "10000.0",
                "max_value": "10000.0"
              }
            },
            "test_field_1": {
              "name": "Test Short Text Field",
              "type": "short_text",
              "value": "test"
            },
            "test_user_field": {
              "name": "Test User Field",
              "type": "user",
              "value": {
                "user_id": 117730,
                "name": "Job Admin",
                "email": "asegal+jobadmin@greenhouse.io",
                "employee_id": "user-abc"
              }
            }
          }
        }
      ]
    }
  }
}

The New Candidate Application event occurs when a new application is created for a candidate.

See web hook common attributes.

Application deleted

This web hook only fires when individual applications are destroyed. This occurs when the Harvest API delete endpoint is used, when a candidate is removed from a specific job, or when two duplicate candidates on the same job are merged together. This will not fire when a candidate is deleted. A candidate being deleted implies all their applications have been deleted with them.

{
  "action": "delete_application",
  "payload": {
    "application": {
        "id": 46194062,
        "candidate_id": 37031511,
        "job_id": 371417,
        "created_at": "2013-03-22T00:00:00Z",
        "source_id": 2,
        "candidate_rejection_reason_id": null,
        "rejection_note_id": 123,
        "rejected_at": "2014-04-22T01:00:00Z",
        "referrer_id": 158104,
        "prospect": false,
        "rejected_by_user_id": 158103
        }
    }
}

Noteworthy response attributes

AttributeNote
rejected_by_user_idThe Greenhouse user who rejected this application, if the application is rejected.

Application updated

{
  "action": "application_updated",
  "payload": {
    "application": {
      "id": 22202940,
      "rejected_at": null,
      "prospect": false,
      "prospect_detail": {
        "prospect_owner": null,
        "prospect_pool": null,
        "prospect_stage": null
      },
      "status": "active",
      "applied_at": "2015-12-03T06:31:26Z",
      "last_activity_at": "2015-12-03T06:31:26Z",
      "url": "https://app.greenhouse.io/people/13857579?application_id=22202940",
      "source": {
        "id":2,
        "name": "Jobs page on your website"
      },
      "credited_to": {
        "id": 3695,
        "email": "beauregard.blacksmith.3695@example.com",
        "name": "Beauregard Blacksmith",
        "employee_id": "123ABC"
      },
      "rejection_reason": null,
      "rejection_details": null,
      "current_stage": {
        "id": 711020,
        "name": "Application Review",
        "interviews": [
          {
            "id": 1063685,
            "name": "Application Review",
            "status": "collect_feedback",
            "interview_kit": {
              "url": "http://app.greenhouse.io/guides/1063859/people/13857579",
              "content": "",
              "questions":[]
            },
            "interviewers": []
          }
        ]
      },
      "custom_fields": {
        "custom_application_field": {
          "name": "Custom Application Field",
          "type": "short_text",
          "value": "Example"
        }
      },
      "candidate": {
        "id": 13857579,
        "first_name": "Hank",
        "last_name": "Von Diablo",
        "title": null,
        "company": null,
        "created_at": "2015-12-03T06:31:26Z",
        "external_id": null,
        "photo_url": null,
        "url": "https://app.greenhouse.io/people/13857579",
        "is_private": false,
        "can_email": true,
        "phone_numbers": [
          {
            "value": "330-281-8004",
            "type": "other "
          }
        ],
        "email_addresses": [
          {
            "value": "hank.von diablo.13857579@example.com",
            "type": "personal"
          }
        ],
        "addresses": [],
        "website_addresses": [
          {
            "value": "http://www.example.com/",
            "type": "other"
          }
        ],
        "social_media_addresses": [
          {
            "value": "https://twitter.com/TheRock"
          }
        ],
        "educations": [],
        "recruiter":null,
        "coordinator": null,
        "attachments":[],
        "tags":[],
        "custom_fields": {
          "current_salary": {
            "name": "Current Salary",
            "type": "short_text",
            "value": null
          },
          "desired_salary": {
            "name": "Desired Salary",
            "type": "short_text",
            "value":null
          }
        }
      },
      "jobs": []
    }
  }
}


The Application Updated event occurs when an application is updated.

See web hook common attributes.

Offer created

This web hook fires when creating a new offer in Greenhouse. This may also fire when changing an offer if the change causes a new version to be created. When bulk creating offers, this will fire per offer created.

{
    "action": "offer_created",
    "payload": {
        "id": 12345,
        "application_id": 234556,
        "job_id": 45678,
        "user_id": 67890,
        "version": 1,
        "sent_on": "2013-03-22",
        "resolved_at": "2013-03-25T00:00:00Z",
        "start_date": "04/15/2013",
        "notes": "Vacation scheduled 4/20 - 4/23",
        "offer_status": "Accepted",
        "custom_fields": {
            "custom_application_field": {
                "name": "Custom Application Field",
                "type": "short_text",
                "value": "Example"
            }
        }
    }
}

Offer approved

This web hook fires when an offer requires approval and the approval is received.

{
    "action": "offer_approved",
    "payload": {
        "id": 12345,
        "application_id": 234556,
        "job_id": 45678,
        "user_id": 67890,
        "version": 1,
        "sent_on": "2013-03-22",
        "resolved_at": "2013-03-25T00:00:00Z",
        "start_date": "04/15/2013",
        "notes": "Vacation scheduled 4/20 - 4/23",
        "offer_status": "Accepted",
        "custom_fields": {
            "custom_application_field": {
                "name": "Custom Application Field",
                "type": "short_text",
                "value": "Example"
            }
        }
    }
}

Offer updated

This web hook fires when an offer is updated. In some cases, an offer may be changed without generating a new version. In that case, this will fire by itself. If a change causes a new offer version to be generated, this will fire on the old version with the update to deprecate this offer and also a new “create” web hook will fire for the new version. This web hook should also fire when a person is hired, which marks the offer as “accepted.”

{
    "action": "offer_updated",
    "payload": {
        "id": 12345,
        "application_id": 234556,
        "job_id": 45678,
        "user_id": 67890,
        "version": 2,
        "sent_on": "2013-03-22",
        "resolved_at": "2013-03-25T00:00:00Z",
        "start_date": "04/15/2013",
        "notes": "Vacation scheduled 4/20 - 4/23",
        "offer_status": "Deprecated",
        "custom_fields": {
            "custom_application_field": {
                "name": "Custom Application Field",
                "type": "short_text",
                "value": "Example"
            }
        }
    }
}

Offer deleted

This web hook only fires when offers are deleted from the Greenhouse system. This only happens when the “Delete” link is clicked on an individual offer or when the anonymize candidate process is run with the “all_offer_versions” option selected. This will not fire individually when an application is deleted.

{
  "action": "offer_deleted",
  "payload": {
    "offer": {
      "id": 506406,
      "application_id": 46194062,
      "offering_user_id": 158104,
      "offer_status": "Created",
      "version": 1,
      "sent_on": "2013-03-22",
      "resolved_at": "2013-03-25T00:00:00Z",
      "notes": "These are notes on the offer.",
      "job_id": 371417
  }
}

Noteworthy response attributes

AttributeNote
offer_statusOne of Created, Accepted, Rejected, or Deprecated.
versionThis is the version of the offer in Greenhouse. New versions are triggered when certain fields are updated.
sent_onWhen the offer was sent to the candidate
resolved_atWhen this version was either accepted, rejected, or deprecated (a new version was made)

Prospect created

{
  "action": "new_prospect_application",
  "payload": {
    "application": {
      "id": 979554,
      "rejected_at": null,
      "prospect": true,
      "status": "active",
      "applied_at": "2014-12-02T23:10:16Z",
      "last_activity_at": "2014-12-02T23:10:16Z",
      "url": "https://app.greenhouse.io/people/968190?application_id=979554",
      "source": {
        "id": 13,
        "public_name": "Referral"
      },
      "credited_to": {
        "id": 2622,
        "email": "carl.buddha.2622@example.com",
        "name": "Carl Buddha",
        "employee_id": "123ABC"
      },
      "rejection_reason": null,
      "rejection_details": null,
      "current_stage": null,
      "custom_fields": {
        "custom_application_field": {
          "name": "Custom Application Field",
          "type": "short_text",
          "value": null
        }
      },
      "candidate": {
        "id": 968190,
        "first_name": "Trisha",
        "last_name": "Troy",
        "title": null,
        "company": null,
        "created_at": "2014-12-02T23:10:16Z",
        "external_id": null,
        "photo_url": null,
        "is_private": false,
        "can_email": true,
        "phone_numbers": [
          {
            "value": "123456",
            "type": "other"
          }
        ],
        "email_addresses": [
          {
            "value": "t.troy@example.com",
            "type": "personal"
          }
        ],
        "addresses": [],
        "website_addresses": [],
        "social_media_addresses": [],
        "educations": [
          {
            "school_name": "Harvard University",
            "degree": "Bachelor's Degree",
            "discipline": "Information Systems",
            "start_date": "01/01/2012",
            "end_date": "01/01/2016"
          }
        ],
        "employments": [
          {
            "company_name": "Greenhouse",
            "title": "Engineer",
            "start_date": "01/01/2012",
            "end_date": "01/01/2016"
          }
        ],
        "recruiter": {
          "id": 3128,
          "email": "alicia.flopple.3128@example.com",
          "name": "Alicia Flopple",
          "employee_id": "456DEF"
        },
        "coordinator": null,
        "attachments": [
          {
            "filename": "resume.pdf",
            "url": "https://prod-heroku.s3.amazonaws.com/...",
            "type": "resume"
          }
        ],
        "tags": [
          "Import from Previous ATS"
        ],
        "custom_fields": {
          "favorite_color": {
            "name": "Favorite Color",
            "type": "short_text",
            "value": "Blue"
          }
        }
      },
      "jobs": [
        {
          "id": 371417,
          "name": "Designer",
          "requisition_id": null,
          "notes": "Digital and print",
          "confidential": false,
          "job_post_id": 54321,
          "status": "open",
          "created_at": "2013-10-02T22:59:29Z",
          "opened_at": "2015-01-23T00:25:04Z",
          "closed_at": null,
          "departments": [
            {
              "id": 237,
              "name": "Community",
              "external_id": "ex-dept-1"
            }
          ],
          "offices": [
            {
              "id": 54,
              "name": "New York",
              "location": "New York, NY",
              "external_id": "ex-office-1"
            }
          ],
          "custom_fields": {
            "employment_type": {
              "name": "Employment Type",
              "type": "single_select",
              "value": "Full Time"
            }
          }
        }
      ]
    }
  }
}

The New Prospect Application event occurs when a new prospect application is created.

See web hook common attributes.

Candidate Events

Candidate deleted

This web hook will fire when a candidate or prospect is deleted from Greenhouse. This occurs when the Harvest delete candidate methods are used, when a candidate is merged into another candidate, when a candidate is deleted in the application, and once for each candidate in a bulk delete operation. Deleting a candidate will cause other deletes within Greenhouse but we will not fire an individual web hook for those deletions. In the case of the applications that this delete causes, we will include an array of those Application IDs that will be removed from Greenhouse.

{
  "action": "delete_candidate",
  "payload": {
    "person": {
        "id": 37031511,
        "first_name": "Jack",
        "last_name": "Sparrow",
        "company": "Pirate Shipping",
        "title": "Captain",
        "created_at": "2013-03-22T00:00:00Z",
        "headline": "Eager to find a new commission",
        "is_private": false,
        "recruiter_user_id": 123,
        "coordinator_user_id": 456,
        "can_email": false,
        "deleted_application_ids": [
                46196263,
                46196258
            ]
        }
    }
}

Noteworthy response attributes

AttributeNote
is_privateTrue or false; if this candidate has been marked private in Greenhouse.
recruiter_user_idThe Greenhouse user_id of this candidate’s recruiter
coordinator_user_idThe Greenhouse user_id of this candidate’s coordinator
can_emailTrue or false; if this candidate can be e-mailed.
application_idsThis is an array containing the Greenhouse application IDs that will be deleted as a consequence of this candidate being deleted
deleted_application_idsIn many merge cases, this section will be blank, as applications will have been merged into the new candidate.

Candidate hired

{
  "action": "hire_candidate",
  "payload": {
    "application": {
      "id": 46194062,
      "opening": {
        "opening_id": "1234-56",
        "custom_fields": []
      },
      "credited_to": {
        "id": 158104,
        "email": "bob_johnson1@localhost.com",
        "name": "Robert Johnson",
        "employee_id": "123ABC"
      },
      "source": {
        "id": 25,
        "public_name": "Monster"
      },
      "url": "https://app.greenhouse.io/people/35897443?application_id=46194062",
      "candidate": {
        "id": 35897443,
        "first_name": "Johnny",
        "last_name": "Smith",
        "title": "Previous Title",
        "external_id": "12345",
        "url": "https://app.greenhouse.io/people/35897443",
        "is_private": false,
        "can_email": true,
        "phone_numbers": [
          {
            "value": "518-555-1212",
            "type": "work"
          },
          {
            "value": "212-555-1212",
            "type": "home"
          }
        ],
        "email_addresses": [
          {
            "value": "personal@example.com",
            "type": "personal"
          },
          {
            "value": "work@example.com",
            "type": "work"
          }
        ],
        "addresses": [
          {
            "value": "455 Broadway New York, NY 10280",
            "type": "home"
          }
        ],
        "educations": [
          {
            "school_name": "Harvard University",
            "degree": "Bachelor's Degree",
            "discipline": "Information Systems",
            "start_date": "01/01/2012",
            "end_date": "01/01/2016"
          }
        ],
        "employments": [
          {
            "company_name": "Greenhouse",
            "title": "Engineer",
            "start_date": "01/01/2012",
            "end_date": "01/01/2016"
          }
        ],
        "recruiter": {
          "id": 55,
          "email": "bob_johnson@localhost.com",
          "name": "Bob Johnson",
          "employee_id": "456DEF"
        },
        "coordinator": {
          "id": 56,
          "email": "bob_johnson_approver1@localhost.com",
          "name": "Robert J Approver",
          "employee_id": "789GHI"
        },
        "attachments": [
          {
            "filename": "resume.pdf",
            "url": "https://prod-heroku.s3.amazonaws.com/...",
            "type": "resume"
          }
        ],
        "custom_fields": {
          "desired_level": {
            "name": "Desired Level",
            "type": "short_text",
            "value": "Senior"
          },
          "favorite_programming_language": {
            "name": "Favorite Programming Language",
            "type": "short_text",
            "value": "Rails"
          }
        }
      },
      "job": {
        "id": 323753,
        "name": "Developer",
        "open_date": "2014-11-20T22:49:14Z",
        "close_date": "2014-11-25T22:49:14Z",
        "requisition_id": null,
        "departments": [
          {
            "id": 7,
            "name": "Technology",
            "external_id": "ex-dept-1"
          }
        ],
        "offices": [
          {
            "id": 13,
            "name": "New York City",
            "location": "New York, NY",
            "external_id": "ex-office-1"
          },
          {
            "id": 14,
            "name": "St. Louis",
            "location": null,
            "external_id": null
          }
        ],
        "custom_fields": {
          "approved": {
            "name": "Approved",
            "type": "boolean",
            "value": true
          },
          "employment_type": {
            "name": "Employment Type",
            "type": "single_select",
            "value": "Full-time"
          },
          "salary_range": {
            "name": "SalaryRange",
            "type": "currency_range",
            "value": {
              "unit": "USD",
              "min_value": "10000.0",
              "max_value": "20000.0"
            }
          }
        }
      },
      "jobs": [
        {
          "id": 323753,
          "name": "Developer",
          "requisition_id": null,
          "confidential": false,
          "opened_at": "2014-11-20T22:49:14Z",
          "closed_at": "2014-11-25T22:49:14Z",
          "departments": [
            {
              "id": 7,
              "name": "Technology",
              "external_id": "ex-dept-1"
            }
          ],
          "offices": [
            {
              "id": 13,
              "name": "New York City",
              "location": "New York, NY",
              "external_id": "ex-office-1"
            },
            {
              "id": 14,
              "name": "St. Louis",
              "location": null,
              "external_id": null
            }
          ],
          "custom_fields": {
            "approved": {
              "name": "Approved",
              "type": "boolean",
              "value": true
            },
            "employment_type": {
              "name": "Employment Type",
              "type": "single_select",
              "value": "Full-time"
            },
            "salary_range": {
              "name": "SalaryRange",
              "type": "currency_range",
              "value": {
                "unit": "USD",
                "min_value": "10000.0",
                "max_value": "20000.0"
              }
            }
          }
        }
      ],
      "custom_fields": {
        "custom_application_field": {
          "name": "Custom Application Field",
          "type": "short_text",
          "value": "Example123"
        }
      },
      "offer": {
        "id": 506409,
        "version": 2,
        "created_at": "2014-11-20T22:49:14Z",
        "sent_at": "2014-11-10",
        "resolved_at": "2014-11-20T22:49:14Z",
        "starts_at": "2015-01-23",
        "custom_fields": {
          "salary": {
            "name": "Salary",
            "type": "currency",
            "value": {
              "amount": 80000,
              "unit": "USD"
            }
          },
          "seasons": {
            "name": "Seasons",
            "type": "multi_select",
            "value": [
              "Season 1",
              "Season 2"
            ]
          }
        }
      }
    }
  }
}

The Hire Candidate event occurs when an offer is accepted. This is triggered by clicking the “Accept Offer” button on the candidate’s Private tab.

Noteworthy attributes

See web hook common attributes.

AttributeNote
application.offer.idUnique Greenhouse identifier of the offer. Information not included in the web hook can be retrieved via Harvest API - GET Offers
application.offer.created_atDate when this offer was drafted.
application.offer.sent_onDate when this offer was sent to the candidate.
application.offer.resolved_atDate the offer was accepted.
application.offer.starts_atThe candidate’s start date. Expected format is YYYY-MM-DD
application.jobDeprecated. Use application.jobs[] instead
application.job.close_dateDeprecated. Use application.jobs[].closed_at instead.
application.job.open_dateDeprecated. Use application.jobs[].opened_at instead.
application.opening.custom_fieldsThis element may be omitted if the organization does not have custom fields for openings enabled.

Candidate merged

This web hook will fire when a candidate or prospect is merged with another candidate. This process should fire for regular manual merges and auto-merges. It will also fire per candidate for a bulk merge. This web hook supersedes the candidate deleted web hook. If both candidate deleted and candidate merged are configured on your site, only the candidate merged web hook will fire when candidate records are removed via merge. If a candidate deleted web hook is configured but candidate merged is not, then the candidate deleted web hook will fire when a candidate record is deleted via merge. The payload for a candidate merged web hook matches the payload for candidate deleted except it contains the ID of the winning candidate record.

{
  "action": "merge_candidate",
  "payload": {
    "person": {
        "id": 37031511,
        "first_name": "Jack",
        "last_name": "Sparrow",
        "company": "Pirate Shipping",
        "title": "Captain",
        "created_at": "2013-03-22T00:00:00Z",
        "headline": "Eager to find a new commission",
        "is_private": false,
        "recruiter_user_id": 123,
        "coordinator_user_id": 456,
        "can_email": false,
        "new_candidate_id": 457456
    }
  }
}

Noteworthy response attributes

AttributeNote
new_candidate_idThe ID of the candidate to whom this candidate has been merged

Candidate stage change

{
  "action": "candidate_stage_change",
  "payload": {
    "application": {
      "id": 265277,
      "rejected_at": null,
      "prospect": false,
      "status": "active",
      "applied_at": "2013-03-22T00:00:00Z",
      "last_activity_at": "2015-02-09T16:38:36Z",
      "url": "https://app.greenhouse.io/people/265772?application_id= 265277",
      "source": {
        "id": 31,
        "name": "Agency"
      },
      "credited_to": {
        "id": 15,
        "email": "ada@example.com",
        "name": "Ada Lacey",
        "employee_id": "123ABC"
      },
      "rejection_reason": null,
      "rejection_details": null,
      "current_stage": {
        "id": 71416,
        "name": "Assessment",
        "interviews": [
          {
            "id": 113101,
            "name": "Assessment",
            "status": "to_be_scheduled",
            "interview_kit": {
              "url": "https://app.greenhouse.io/guides/113153/people/265772",
              "content": "Assess their skills",
              "questions": []
            },
            "interviewers": [
              {
                "id": 2622,
                "display_name": "Carl Buddha",
                "status": "tentative"
              }
            ]
          }
        ]
      },
      "custom_fields": {
        "custom_application_field": {
          "name": "Custom Application Field",
          "type": "short_text",
          "value": "Example"
        }
      },
      "candidate": {
        "id": 265772,
        "first_name": "Giuseppe",
        "last_name": "Hurley",
        "title": "Great Person",
        "company": null,
        "created_at": "2013-10-04T01:24:44Z",
        "external_id": "241b399ce4b0fd1c84e5528d",
        "photo_url": null,
        "url": "https://app.greenhouse.io/people/265772",
        "is_private": false,
        "can_email": true,
        "phone_numbers": [
          {
            "value": "330-281-8004",
            "type": "home"
          }
        ],
        "email_addresses": [
          {
            "value": "giuseppe.hurley@example.com",
            "type": "personal"
          }
        ],
        "addresses": [
          {
            "value": "123 Fake St.",
            "type": "home"
          }
        ],
        "website_addresses": [
          {
            "value": "ghurley.example.com",
            "type": "personal"
          }
        ],
        "social_media_addresses": [
          {
            "value": "linkedin.example.com/ghurley"
          }
        ],
        "educations": [
          {
            "school_name": "Harvard University",
            "degree": "Bachelor's Degree",
            "discipline": "Information Systems",
            "start_date": "01/01/2012",
            "end_date": "01/01/2016"
          }
        ],
        "employments": [
          {
            "company_name": "Greenhouse",
            "title": "Engineer",
            "start_date": "01/01/2012",
            "end_date": "01/01/2016"
          }
        ],
        "recruiter": {
          "id": 3128,
          "email": "alicia.flopple.3128@example.com",
          "name": "Alicia Flopple",
          "employee_id": "789GHI"
        },
        "coordinator": {
          "id": 3128,
          "email": "alicia.flopple.3128@example.com",
          "name": "Alicia Flopple",
          "employee_id": "789GHI"
        },
        "attachments": [
          {
            "filename": "resume.pdf",
            "url": "https://prod-heroku.s3.amazonaws.com/...",
            "type": "resume"
          },
          {
            "filename": "cover_letter.pdf",
            "url": "https://prod-heroku.s3.amazonaws.com/...",
            "type": "cover_letter"
          },
          {
            "filename": "portfolio.pdf",
            "url": "https://prod-heroku.s3.amazonaws.com/...",
            "type": "attachment"
          }
        ],
        "tags": [
          "Import from Previous ATS"
        ],
        "custom_fields": {
          "favorite_color": {
            "name": "Favorite Color",
            "type": "short_text",
            "value": "Blue"
          }
        }
      },
      "jobs": [
        {
          "id": 3485,
          "name": "Designer",
          "requisition_id": null,
          "notes": "Digital and print",
          "confidential": false,
          "job_post_id": 553282,
          "status": "open",
          "created_at": "2013-10-02T22:59:29Z",
          "opened_at": "2015-01-23T00:25:04Z",
          "closed_at": null,
          "departments": [
            {
              "id": 237,
              "name": "Community",
              "external_id": "ex-dept-1"
            }
          ],
          "offices": [
            {
              "id": 54,
              "name": "New York",
              "location": "New York, NY",
              "external_id": "ex-office-1"
            }
          ],
          "custom_fields": {
            "employment_type": {
              "name": "Employment Type",
              "type": "single_select",
              "value": "Full Time"
            }
          }
        }
      ]
    }
  }
}

Noteworthy response attributes

See web hook common attributes.

AttributeNote
application.current_stage.interviews[].interviewers.statusOne of: needs_action, declined, tentative, accepted
application.current_stage.interviews[].statusOne of: to_be_scheduled, scheduled, awaiting_feedback, complete, skipped, collect_feedback, to_be_sent, sent, received

Candidate unhired

{
  "action": "unhire_candidate",
  "payload": {
    "application": {
      "id": 265293,
      "rejected_at": null,
      "prospect": false,
      "status": "active",
      "applied_at": "2013-03-22T00:00:00Z",
      "last_activity_at": "2015-03-18T20:28:09Z",
      "url": "https://app.greenhouse.io/people/265788?application_id=265293",
      "source": {
        "id": 27,
        "public_name": "LinkedIn"
      },
      "credited_to": null,
      "rejection_reason": null,
      "rejection_details": null,
      "current_stage": {
        "id": 678901,
        "name": "Application Review",
        "interviews": [
          {
            "id": 989099,
            "name":"Application Review",
            "status": "collect_feedback",
            "interview_kit": {
              "url": "http://app.greenhouse.io/guides/67656/people/265788",
              "content": "",
              "questions": []
            },
            "interviewers": []
          }
        ]
      },
      "custom_fields": {
        "custom_application_field": {
          "name": "Custom Application Field",
          "type": "short_text",
          "value": null
        }
      },
      "candidate": {
        "id": 265788,
        "first_name": "Hector",
        "last_name": "Porter",
        "title": null,
        "company": null,
        "created_at": "2013-10-04T01:24:48Z",
        "external_id": null,
        "photo_url": null,
        "url": "https://app.greenhouse.io/people/265788",
        "is_private": false,
        "can_email": true,
        "phone_numbers": [
          {
            "value": "330-281-8004",
            "type": "home"
          }
        ],
        "email_addresses": [
          {
            "value": "hector.porter.265788@example.com",
            "type": "personal"
          }
        ],
        "addresses": [],
        "website_addresses": [],
        "social_media_addresses": [],
        "educations": [
          {
            "school_name": "Harvard University",
            "degree": "Bachelor's Degree",
            "discipline": "Information Systems",
            "start_date": "01/01/2012",
            "end_date": "01/01/2016"
          }
        ],
        "employments": [
          {
            "company_name": "Greenhouse",
            "title": "Engineer",
            "start_date": "01/01/2012",
            "end_date": "01/01/2016"
          }
        ],
        "recruiter": null,
        "coordinator": null,
        "attachments": [
          {
            "filename": "resume.pdf",
            "url": "https://prod-heroku.s3.amazonaws.com/...",
            "type": "resume"
          }
        ],
        "tags": [
          "Import from Previous ATS"
        ],
        "custom_fields": {
          "favorite_color": {
            "name": "Favorite Color",
            "type": "short_text",
            "value": "Blue"
          }
        }
      },
      "jobs": [
        {
          "id": 371417,
          "name": "Designer",
          "requisition_id": null,
          "notes": "Digital and print",
          "confidential": false,
          "job_post_id": 54321,
          "status": "open",
          "created_at": "2013-10-02T22:59:29Z",
          "opened_at": "2015-01-23T00:25:04Z",
          "closed_at": null,
          "departments": [
            {
              "id": 14501,
              "name": "Community",
              "external_id": "ex-dept-1"
            }
          ],
          "offices": [
            {
              "id": 9099,
              "name": "New York",
              "location": "New York, NY",
              "external_id": "ex-office-1"
            }
          ],
          "custom_fields": {
            "employment_type": {
              "name": "Employment Type",
              "type": "single_select",
              "value": "Full Time"
            }
          }
        }
      ]
    }
  }
}

This web hook only fires when the “Unhire” button is clicked in Greenhouse. This button is only available on the candidate profile page after a candidate has been hired.

See web hook common attributes.

Candidate/Prospect rejected

{
  "action": "reject_candidate",
  "payload": {
    "application": {
      "id": 265293,
      "rejected_at": "2015-02-11T15:50:41Z",
      "prospect": false,
      "status": "rejected",
      "applied_at": "2013-03-22T00:00:00Z",
      "last_activity_at": "2015-02-11T15:50:41Z",
      "url": "https://app.greenhouse.io/people/265788?application_id=265293",
      "source": {
        "id": 27,
        "public_name": "LinkedIn"
      },
      "credited_to": null,
      "rejection_reason": {
        "id": 14,
        "name": "Too Junior",
        "type": {
          "id": 3,
          "name": "Wrong skill set"
        }
      },
      "rejection_details": {
        "custom_fields": {
          "custom_rejection_question_field": {
            "name": "Custom Rejection Question Field",
            "type": "short_text",
            "value": "Example"
          }
        }
      },
      "current_stage": {
        "id": 2708728,
        "name": "Offer",
        "interviews": []
      },
      "custom_fields": {
        "custom_application_field": {
          "name": "Custom Application Field",
          "type": "short_text",
          "value": "Example123"
        }
      },
      "candidate": {
        "id": 265788,
        "first_name": "Hector",
        "last_name": "Porter",
        "title": null,
        "company": null,
        "created_at": "2013-10-04T01:24:48Z",
        "external_id": null,
        "photo_url": null,
        "is_private": false,
        "can_email": true,
        "phone_numbers": [
          {
            "value": "330-281-8004",
            "type": "home"
          }
        ],
        "email_addresses": [
          {
            "value": "hector.porter.265788@example.com",
            "type": "personal"
          }
        ],
        "addresses": [],
        "website_addresses": [],
        "social_media_addresses": [],
        "educations": [
          {
            "school_name": "Harvard University",
            "degree": "Bachelor's Degree",
            "discipline": "Information Systems",
            "start_date": "01/01/2012",
            "end_date": "01/01/2016"
          }
        ],
        "employments": [
          {
            "company_name": "Greenhouse",
            "title": "Engineer",
            "start_date": "01/01/2012",
            "end_date": "01/01/2016"
          }
        ],
        "recruiter": null,
        "coordinator": null,
        "attachments": [
          {
            "filename": "resume.pdf",
            "url": "https://prod-heroku.s3.amazonaws.com/...",
            "type": "resume"
          }
        ],
        "tags": [
          "Imported"
        ],
        "custom_fields": {
          "favorite_color": {
            "name": "Favorite Color",
            "type": "short_text",
            "value": "Blue"
          }
        }
      },
      "jobs": [
        {
          "id": 371417,
          "name": "Designer",
          "requisition_id": null,
          "notes": "Digital and print",
          "confidential": false,
          "job_post_id": 54321,
          "status": "open",
          "created_at": "2013-10-02T22:59:29Z",
          "opened_at": "2015-01-23T00:25:04Z",
          "closed_at": null,
          "departments": [
            {
              "id": 237,
              "name": "Community",
              "external_id": "ex-dept-1"
            }
          ],
          "offices": [
            {
              "id": 9099,
              "name": "New York",
              "location": "New York, NY",
              "external_id": "ex-office-1"
            }
          ],
          "custom_fields": {
            "employment_type": {
              "name": "Employment Type",
              "type": "single_select",
              "value": "Full Time"
            }
          }
        }
      ]
    }
  }
}

The Reject Candidate event occurs when a prospect or candidate is rejected for a position. When candidates are rejected via a bulk action, a web hook will fire once for each candidate or prospect rejected.

See web hook common attributes.

Candidate/Prospect unrejected

{
  "action": "unreject_candidate",
  "payload": {
    "application": {
      "id": 265293,
      "rejected_at": null,
      "prospect": false,
      "status": "active",
      "applied_at": "2013-03-22T00:00:00Z",
      "last_activity_at": "2015-02-11T15:50:41Z",
      "url": "https://app.greenhouse.io/people/265788?application_id=265293",
      "source": {
        "id": 27,
        "public_name": "LinkedIn"
      },
      "credited_to": null,
      "rejection_reason": null,
      "rejection_details": null,
      "current_stage": {
        "id": 2708728,
        "name": "Offer",
        "interviews": []
      },
      "custom_fields": {
        "custom_application_field": {
          "name": "Custom Application Field",
          "type": "short_text",
          "value": "Example123"
        }
      },
      "candidate": {
        "id": 265788,
        "first_name": "Hector",
        "last_name": "Porter",
        "title": null,
        "company": null,
        "created_at": "2013-10-04T01:24:48Z",
        "external_id": null,
        "photo_url": null,
        "is_private": false,
        "can_email": true,
        "phone_numbers": [
          {
            "value": "330-281-8004",
            "type": "home"
          }
        ],
        "email_addresses": [
          {
            "value": "hector.porter.265788@example.com",
            "type": "personal"
          }
        ],
        "addresses": [],
        "website_addresses": [],
        "social_media_addresses": [],
        "educations": [
          {
            "school_name": "Harvard University",
            "degree": "Bachelor's Degree",
            "discipline": "Information Systems",
            "start_date": "01/01/2012",
            "end_date": "01/01/2016"
          }
        ],
        "employments": [
          {
            "company_name": "Greenhouse",
            "title": "Engineer",
            "start_date": "01/01/2012",
            "end_date": "01/01/2016"
          }
        ],
        "recruiter": null,
        "coordinator": null,
        "attachments": [
          {
            "filename": "resume.pdf",
            "url": "https://prod-heroku.s3.amazonaws.com/...",
            "type": "resume"
          }
        ],
        "tags": [
          "Imported"
        ],
        "custom_fields": {
          "favorite_color": {
            "name": "Favorite Color",
            "type": "short_text",
            "value": "Blue"
          }
        }
      },
      "jobs": [
        {
          "id": 371417,
          "name": "Designer",
          "requisition_id": null,
          "notes": "Digital and print",
          "confidential": false,
          "job_post_id": 54321,
          "status": "open",
          "created_at": "2013-10-02T22:59:29Z",
          "opened_at": "2015-01-23T00:25:04Z",
          "closed_at": null,
          "departments": [
            {
              "id": 237,
              "name": "Community",
              "external_id": "ex-dept-1"
            }
          ],
          "offices": [
            {
              "id": 9099,
              "name": "New York",
              "location": "New York, NY",
              "external_id": "ex-office-1"
            }
          ],
          "custom_fields": {
            "employment_type": {
              "name": "Employment Type",
              "type": "single_select",
              "value": "Full Time"
            }
          }
        }
      ]
    }
  }
}

The Unreject Candidate event occurs when a prospect or candidate is unrejected.

See web hook common attributes.

Candidate/Prospect updated

{
  "action": "update_candidate",
  "payload": {
    "candidate": {
      "id": 15696179,
      "first_name": "Ronald",
      "last_name": "Ronnie",
      "title": "Director of Strategic Janitorial Initiatives",
      "company": "Example",
      "created_at": "2016-08-23T17:51:27Z",
      "external_id": "946aa514658",
      "photo_url": null,
      "url": "https://app.greenhouse.io/people/15696179",
      "phone_numbers": [
        {
          "value": "911",
          "type": "mobile"
        }
      ],
      "email_addresses": [
        {
          "value": "123456email@email.com",
          "type": "work"
        }
      ],
      "addresses": [
        {
          "value": "99-99 5th Ave.\nNew York, NY 101-11",
          "type": "home"
        }
      ],
      "website_addresses": [
        {
          "value": "google.com",
          "type": "personal"
        }
      ],
      "social_media_addresses": [
        {
          "value": "@ronaldronnie99999"
        }
      ],
      "educations": [
        {
          "school_name": "Harvard University",
          "degree": "Bachelor's Degree",
          "discipline": "Information Systems",
          "start_date": "01/01/2012",
          "end_date": "01/01/2016"
        }
      ],
      "employments": [
        {
          "company_name": "Greenhouse",
          "title": "Engineer",
          "start_date": "01/01/2012",
          "end_date": "01/01/2016"
        }
      ],
      "recruiter": {
        "id": 169779,
        "email": "hank.hollandaise.169779@example.com",
        "name": "Hank Hollandaise",
        "employee_id": "123ABC"
      },
      "coordinator": {
        "id": 83637,
        "email": "sterling.kang.83637@example.com",
        "name": "Sterling Kang",
        "employee_id": "456DEF"
      },
      "attachments": [
        {
          "filename": "resumeA.pdf",
          "url": "https://prod-heroku.s3.amazonaws.com/...",
          "type": "resume"
        },
        {
          "filename": "resumeB.pdf",
          "url": "https://prod-heroku.s3.amazonaws.com/...",
          "type": "resume"
        }
      ],
      "tags": [
        "foo",
        "File Import"
      ],
      "custom_fields": {
        "current_salary": {
          "name": "Current Salary",
          "type": "short_text",
          "value": null
        },
        "desired_salary": {
          "name": "Desired Salary",
          "type": "short_text",
          "value": null
        }
      }
    }
  }
}

The Candidate or Prospect Updated event occurs when a candidate or prospect’s standard field or custom field is updated. For instance, an update to a candidate’s first name would trigger this event.

See web hook common attributes.

Candidate anonymized

This web hook will fire when a particular candidate receives an anonymize event. Anonymize events may occur from the Anonymize Endpoint in Harvest or may be configured in the GDPR page in the Greenhouse application. An anonymize web hook consists of the action type, the id of the candidate who had properties anonymized, and the information that was anonymized.

{
  "action": "candidate_anonymized",
  "payload": {
    "candidate_id": 37031511,
    "anonymized_fields": ["full_name", "current_title"]
  }
}

Anonymized Fields

A list of possible anonymized fields are provided. If the item in “attribute” is received in the anonymized_fields array, the corresponding changes in notes have been applied in Greenhouse. Note that some of these fields may not be accessible via other web hooks or via Harvest.

AttributeAnonymize Process
activity_itemsDestroy all items in the candidate’s activity feed of type “activity”. In Harvest’s Activity Feed endpoint, these are items in the activities section.
addressesDestroy all values from candidate.addresses
all_offer_versionsFor each of this candidate’s applications, destroy all offers. (For legacy reasons, this will also raise an Offer Deleted web hook if one is configured.)
application_questionsFor each of this candidate’s applications, destroy all values from application.answers.
attachmentsDestroy all attachments on this candidate and all their associated applications.
candidate_stage_dataFor each of this candidate’s applications, set the created_at time to now, remove the candidate from the current stage, destroy all stage transition information, and set the candidate back to the first stage.
coordinatorSet candidate.coordinator to null
credited_toFor each of this candidate’s application, destroy application.credited_to.
custom_application_fieldsFor each of this candidate’s applications, destroy application.custom_fields.
custom_candidate_fieldsDestroy all values from candidate.custom_fields
custom_rejection_question_fieldsFor each of this candidate’s application, destroy all custom fields on rejection details.
current_companySet candidate.company to null.
current_titleSet candidate.title to null.
educationRemove all values from candidate.educations
email_addressesDestroy all values from candidate.email_addresses
employmentRemove all values from candidate.employments
emailsDestroy record of any e-mails sent to this candidate via Greenhouse.
follow_up_remindersDestroy any follow-up reminders configured on this person.
full_nameSet candidate.first_name to “Anonymized” and candidate.last_name to the candidate.id.
headlineSet the candidate’s headline to null.
inmailsDestroy record of any LinkedIn Inmails synced to this candidate from LinkedIn.
innotesDestroy record of any LinkedIn Innotes synced to this candidate from LinkedIn.
locationFor each of this candidate’s applications, set application.location to null.
notesDestroy all notes on this candidate.
offersDestroy all information on all offers on any of this candidate’s applications without destroying that an offer was made.
phone_numbersRemove all values from candidate.phone_numbers
prospect_jobsRemove all associations between this prospect and jobs.
prospect_officesRemove all associations between this prospect and offices.
prospect_offices_and_departmentsRemove all associations between this prospect and departments.
prospect_ownerFor each of this candidate’s prospect applications, destroy the prospect owner.
prospect_pool_and_stageFor each of this candidate’s application, destroy the prospect pool and the prospect pool stage.
recruiterSet candidate.recruiter to null
referral_questionsDestroy all referral answers for this candidate.
rejection_notesDestroy all notes specifically related to this candidate’s rejection.
rejection_reasonsSet rejection_reason on all candidate applications to null.
scorecards_and_interviewsDestroy all scorecards with this candidate id and all interviews with any application from this candidate id
social_media_linksRemove all values from candidate.social_media_addresses
sourceRemove application.source in all this candidate’s applications.
tagsRemove all values from candidate.tags
third_party_integrationsDisconnect the candidate’s profile from the LinkedIn CSA and RSC integrations.
touchpointsDestroy all touchpoints on the candidate, all the candidate’s applications, and any notes associated with touchpoints.
websitesRemove all values from candidate.website_addresses

Interview Events

Interview deleted

This web hook fires when a scheduled interview is cancelled or the interview is deleted directly. This web hook will not fire if an interview is deleted because a candidate, application, or hiring plan is deleted.

{
  "action": "interview_deleted",
  "payload": {
    "interview": {
      "id": 31087450
    }
  }
}

Scorecard deleted

This web hook only fires when individual scorecards are destroyed. This occurs when the Harvest API delete endpoint is used, or when the delete scorecard link is used in the application. This will not fire when a candidate or application is deleted. A candidate being deleted implies all their scorecards have been deleted with them. An application being deleted does not cause scorecards to be deleted.

{
  "action": "scorecard_deleted",
  "payload": {
    "scorecard": {
      "id": 6036088,
      "candidate_id": 29843272,
      "interviewed_at": "2016-12-28T17:00:00.000Z",
      "created_at": "2016-12-28T22:58:03.552Z",
      "updated_at": "2016-12-28T22:58:03.552Z",
      "scorecard_status": "complete"
    }
  }
}

Job Events

Job created

{
  "action": "job_created",
  "payload": {
    "job": {
      "id": 371417,
      "name": "Software Engineer",
      "requisition_id": null,
      "notes": "Looking for the best!",
      "confidential": false,
      "job_post_id": 2154,
      "status": "open",
      "created_at": "2016-10-20T18:16:32Z",
      "opened_at": "2016-10-20T18:16:32Z",
      "closed_at": null,
      "departments": [
        {
          "id": 7,
          "name": "Technology",
          "external_id": "ex-dept-1"
        }
      ],
      "offices": [
        {
          "id": 13,
          "name": "New York City",
          "location": "New York, NY",
          "external_id": "ex-office-1"
        },
        {
          "id": 14,
          "name": "St. Louis",
          "location": null,
          "external_id": null
        }
      ],
      "hiring_team": {
        "hiring_managers": [
          {
            "user_id": 1234,
            "employee_id": "abc-123"
          }
        ],
        "sourcers": [],
        "recruiters": [
          {
            "user_id": 2345,
            "employee_id": null
          },
          {
            "user_id": 3456,
            "employee_id": "abc-234"
          }
        ],
        "coordinators": []
      },
      "openings": [
        {
          "id": 1234,
          "opening_id": "abc-1",
          "custom_fields": []
        },
        {
          "id": 1235,
          "opening_id": "abc-2",
          "custom_fields": []
        }
      ],
      "custom_fields": {
        "approved": {
          "name": "Approved",
          "type": "boolean",
          "value": true
        },
        "employment_type": {
          "name": "Employment Type",
          "type": "single_select",
          "value": "Full-time"
        },
        "salary_range": {
          "name": "SalaryRange",
          "type": "currency_range",
          "value": {
            "unit": "USD",
            "min_value": "10000.0",
            "max_value": "20000.0"
          }
        }
      }
    }
  }
}

The Job Created event is triggered when a new job is created from scratch or copied from another job.

AttributeNote
hiring_teamField contains the Greenhouse users responsible for this job. Each field contains the user’s Greenhouse user id and the user’s external employee id from the customer’s system. The employee id will be null if it has not been set in Greenhouse.
openingsField contains all the openings in this job. The custom field element on each opening may be omitted if the organization does not have custom fields on openings enabled.

Job deleted

This web hook only fires when jobs are deleted from the Greenhouse system. This only happens when a job is closed and then the “Delete” button is clicked from the Job Dashboard.

{
  "action": "job_deleted",
  "payload": {
    "job": {
      "id": 209256,
      "name": "Project Manager"
    }
  }
}

Noteworthy response attributes

AttributeNote
idThe internal Greenhouse Job id
nameThe name of the job that was deleted

Job updated

{
  "action": "job_updated",
  "payload": {
    "job": {
      "id": 100445,
      "name": "Assistant Store Manager, NYC",
      "requisition_id": null,
      "notes": "<p>Looking for the best!<\/p>",
      "confidential": false,
      "job_post_id": 88010,
      "status": "open",
      "created_at": "2015-08-11T23:02:09Z",
      "opened_at": "2015-08-11T23:02:09Z",
      "closed_at": null,
      "departments": [
        {
          "id": 74,
          "name": "Guideshops",
          "external_id": "ex-dept-1"
        }
      ],
      "offices": [
        {
          "id": 104,
          "name": "New York",
          "location": "New York, NY",
          "external_id": "ex-office-1"
        }
      ],
      "hiring_team": {
        "hiring_managers": [
          {
            "user_id": 1234,
            "employee_id": "abc-123"
          }
        ],
        "sourcers": [],
        "recruiters": [
          {
            "user_id": 2345,
            "employee_id": null
          },
          {
            "user_id": 3456,
            "employee_id": "abc-234"
          }
        ],
        "coordinators": []
      },
      "openings": [
        {
          "id": 1234,
          "opening_id": "abc-1",
          "custom_fields": []
        },
        {
          "id": 1235,
          "opening_id": "abc-2",
          "custom_fields": []
        }
      ],
      "custom_fields": {
        "bonus": {
          "name": "Bonus",
          "type": "short_text",
          "value": null
        },
        "employment_type": {
          "name": "Employment Type",
          "type": "single_select",
          "value": null
        },
        "options": {
          "name": "Options",
          "type": "short_text",
          "value": null
        },
        "salary": {
          "name": "Salary",
          "type": "short_text",
          "value": null
        }
      }
    }
  }
}

The Job Updated event is triggered any time one or more of the following fields are changed for a job: Internal Job Name, Department, Office, Level, Open Date, Status, Notes, Team and Responsibilities, and How To Sell This Job. Changes to custom fields on a job will also trigger this web hook.

AttributeNote
hiring_teamField contains the Greenhouse users responsible for this job. Each field contains the user’s Greenhouse user id and the user’s external employee id from the customer’s system. The employee id will be null if it has not been set in Greenhouse.
openingsField contains all the openings in this job. The custom field element on each opening may be omitted if the organization does not have custom fields on openings enabled.

Job Approved

{
  "action": "job_approved",
  "payload": {
    "approval_flow": {
      "approval_flow_type": "open_job"
    },
    "job": {
      "id": 100445,
      "name": "Assistant Store Manager, NYC",
      "requisition_id": null,
      "notes": "<p>Looking for the best!<\/p>",
      "confidential": false,
      "job_post_id": 88010,
      "status": "open",
      "created_at": "2015-08-11T23:02:09Z",
      "opened_at": "2015-08-11T23:02:09Z",
      "closed_at": null,
      "departments": [
        {
          "id": 74,
          "name": "Guideshops",
          "external_id": "ex-dept-1"
        }
      ],
      "offices": [
        {
          "id": 104,
          "name": "New York",
          "location": "New York, NY",
          "external_id": "ex-office-1"
        }
      ],
      "hiring_team": {
        "hiring_managers": [
          {
            "user_id": 1234,
            "employee_id": "abc-123"
          }
        ],
        "sourcers": [],
        "recruiters": [
          {
            "user_id": 2345,
            "employee_id": null
          },
          {
            "user_id": 3456,
            "employee_id": "abc-234"
          }
        ],
        "coordinators": []
      },
      "openings": [
        {
          "id": 1234,
          "opening_id": "abc-1",
          "custom_fields": []
        },
        {
          "id": 1235,
          "opening_id": "abc-2",
          "custom_fields": []
        }
      ],
      "custom_fields": {
        "bonus": {
          "name": "Bonus",
          "type": "short_text",
          "value": null
        },
        "employment_type": {
          "name": "Employment Type",
          "type": "single_select",
          "value": null
        },
        "options": {
          "name": "Options",
          "type": "short_text",
          "value": null
        },
        "salary": {
          "name": "Salary",
          "type": "short_text",
          "value": null
        }
      }
    }
  }
}

The Job Approved event is triggered when the final approval is received in a Greenhouse job’s approval flow. “Approvals to start recruiting” will be identified as “approval_flow_type”: “open_job” while “Official job approval” will be identified as “approval_flow_type”: “offer_job”.

Job Post created

This web hook fires when a job post or prospect post is created. This occurs when a new job post or prospect post is added from the job set up.

If job_id is present in the payload, the payload represents a new job post.

If job_id is not present, the payload represents a new prospect post.

{
  "action": "job_post_created",
  "payload": {
    "id": 1815002,
    "title": "A Cool Job",
    "location": "New York, NY",
    "content": "<p>Hey, this is a neat job. You should apply!</p>",
    "internal_content": null,
    "updated_at": "2017-10-12T15:06:32.691Z",
    "job_id": 1842002,
    "external": true,
    "internal": false,
    "live": false,
    "questions": [
      {
        "required": false,
        "private": false,
        "label": "LinkedIn Profile",
        "type": "input_text",
        "values": []
      },
      {
        "required": false,
        "private": false,
        "label": "Website",
        "type": "input_text",
        "values": []
      },
      {
        "required": false,
        "private": false,
        "label": "How did you hear about this job?",
        "type": "input_text",
        "values": []
      }
    ]
  }
}

Job Post updated

This web hook fires when a job post or prospect post is updated via the “Edit Job Post” page. It also fires when the live status of the job changes from on to off or vice-versa.

If job_id is present in the payload, the payload represents an updated job post.

If job_id is not present, the payload represents an updated prospect post.

{
  "action": "job_post_updated",
  "payload": {
    "id": 1813002,
    "title": "A Cool Job",
    "location": "At a Cool Place",
    "content": "<p>Come work for us!</p>",
    "internal_content": null,
    "updated_at": "2017-10-12T18:29:08.399Z",
    "job_id": 1842002,
    "external": true,
    "internal": false,
    "live": false,
    "questions": [
      {
        "required": false,
        "private": false,
        "label": "LinkedIn Profile",
        "type": "input_text",
        "values": []
      },
      {
        "required": false,
        "private": false,
        "label": "Website",
        "type": "input_text",
        "values": []
      },
      {
        "required": false,
        "private": false,
        "label": "How did you hear about this job?",
        "type": "input_text",
        "values": []
      }
    ]
  }
}

Job Post deleted

This web hook fires when a job post or prospect post is deleted. This occurs when the delete link is clicked on a post. Only posts that are not live may be deleted. This will not fire if a job itself is deleted; a job being deleted implies all of its posts have been deleted with them.

If job_id is present in the payload, the payload represents a deleted job post.

If job_id is not present, the payload represents a deleted prospect post.

{
  "action": "job_post_deleted",
  "payload": {
    "job_post": {
      "id": 258341,
      "job_id": 284999,
      "title": "Software Engineer",
      "location": "Dallas",
      "content": "<p>A pretty interesting job post!</p>",
      "updated_at": "2017-01-19T20:01:53.146Z",
      "internal_content": null,
      "questions": [
        {
          "required": false,
          "private": false,
          "label": "LinkedIn Profile",
          "type": "input_text",
          "values": []
        },
        {
          "required": false,
          "private": false,
          "label": "Website",
          "type": "input_text",
          "values": []
        },
        {
          "required": false,
          "private": false,
          "label": "How did you hear about this job?",
          "type": "input_text",
          "values": []
        },
        {
          "required": true,
          "private": true,
          "label": "Are you a cool engineer?",
          "type": "multi_value_single_select",
          "values": [
            "Yes",
            "No",
            "As a cucumber"
          ]
        }
      ],
      "external": true,
      "internal": false,
      "live": false
    }
  }
}

Job Stage deleted

This web hook only fires when interview stages on a job are removed. This occurs when the remove stage link is used in the Job Setup section of the application. This will not fire when a job is deleted. A job being deleted implies all of its stages have been deleted with them.

{
  "action": "job_interview_stage_deleted",
  "payload": {
    "job_interview_stage": {
      "id": 430608,
      "job_id": 60453,
      "created_at": "2015-03-11T13:25:25.313Z",
      "updated_at": "2016-08-16T09:29:33.650Z",
      "name": "Phone Screen",
      "active": true
    }
  }
}

Organization Events

Department deleted

This web hook fires when departments are deleted from the Greenhouse system from the Configure » Organization screen. This only happens when the “Remove” button is clicked after clicking the “X” next to an office name.

{
  "action": "department_deleted",
  "payload": {
    "department": {
      "id": 106,
      "name": "Creative",
      "child_ids": [
        23328
      ],
      "parent_id": 5,
      "external_id": "ex-office-1"
    }
  }
}

Noteworthy response attributes

AttributeNote
idThe Greenhouse id for the department
nameThe name of the department deleted
child_idsAny former child department ids (this includes all descendants); will be [] if empty
parent_idThe department’s parent department id; will be null if empty

Office deleted

This web hook fires when offices are deleted from the Greenhouse system from the Configure » Organization screen. This only happens when the “Remove” button is clicked after clicking the “X” next to an office name.

{
  "action": "office_deleted",
  "payload": {
    "office": {
      "id": 16492,
      "name": "New York",
      "location": {
        "name": "New York, NY"
      },
      "child_ids": [
        123,
        456
      ],
      "parent_id": 789,
      "external_id": "ex-dep-1"
    }
  }
}

Noteworthy response attributes

AttributeNote
idThe Greenhouse id for the office
nameThe name of the office deleted
locationThe location for the office
child_idsAny former child office ids; will be [] if empty
parent_idThe office’s parent office id; will be null if empty