Greenhouse
Version
This integration utilizes the Greenhouse Harvest API v3.
Base URL
The base URL used for all Greenhouse API endpoints:https://harvest.greenhouse.io/v3
Authentication & Authorization
The DataGrail Greenhouse integration connects using OAuth 2.0 with the following credentials: Client ID and Client Secret.
Scopes
The Greenhouse integration requires specific scopes that must be granted in order to function for a given capability.
| Scope | Base | Access | Deletion |
|---|---|---|---|
harvest:candidates:list | ✅ | ✅ | ✅ |
harvest:applications:list | ✅ | ||
harvest:jobs:list | ✳️ | ||
harvest:rejection_reasons:list | ✳️ | ||
harvest:offers:list | ✳️ | ||
harvest:attachments:list | ✳️ | ||
harvest:users:list | ✳️ | ||
harvest:sources:list | ✳️ | ||
harvest:candidates:destroy | ✅ | ||
harvest:candidates:update | ✅ |
Endpoints Utilized
DataGrail uses the following endpoints to authorize and test the connection:
| Method | Endpoint | Purpose | Docs |
|---|---|---|---|
| GET | /candidates | Validate the connection | |
| POST | https://auth.greenhouse.io/token | Obtain and refresh an access token using client credentials |
Limits
Limits in Greenhouse are calculated using the leaky
bucket algorithm. All requests that are made after rate limits have been
exceeded are throttled and an HTTP 429 Too Many Requests error is returned.
Requests succeed again after enough requests have emptied out of the bucket.
- DataGrail supports requests throttling to stay within 70-80% of specified service rate limits.
- DataGrail processes API responses with HTTP 429 status to interrupt requests, waiting and retrying (using an exponential backoff strategy).
Capabilities
Access
DataGrail's Greenhouse integration provides Synchronous Access capabilities for the following supported identifier category: Email.Data Interactions
For Access requests, DataGrail will take the following actions:
- Search for Candidates using the Data Subject email address.
- If a match is found, save the extracted candidate data in candidate_records, and then extract the candidate's applications to the separate apps_records collection.
- Look up the jobs, rejection reasons, source, recruiter, and coordinator referenced by the applications and add them to each application, along with its current stage (built from the application's stage data). Recruiter and coordinator include only the ID, name, and employee ID, never the user's email address.
- Retrieve the attachments for the candidate and their applications. Candidate attachments are added to the candidate record, and application attachments are added to each application. Each attachment includes its filename, type, creation date, and a signed URL that expires after 7 days.
- Add the recruiter and coordinator to the candidate record, taken from the candidate's most recently updated application that has one.
- Retrieve the candidates' offers and save them in the separate offers_records collection.
The jobs, rejection reasons, attachments, users (recruiters and coordinators), sources, and offers lookups are optional. If the credential doesn't have the required scope (Greenhouse responds with a 401 or 403), DataGrail skips that lookup, logs a warning, and completes the request with the remaining data. Any other error fails the request so it can be retried. Lookups for fields turned off in field-level controls are not made. Each request makes at most one batched call (up to 50 IDs) to the attachments, users, and sources endpoints.
Endpoints Utilized
Deletion
DataGrail's Greenhouse integration provides Synchronous Deletion capabilities for the following supported identifier category: Email. DataGrail supports two deletion modes: Deletion (Default) and Anonymization.
If you would like to change deletion modes, please contact support@datagrail.io.
Data Interactions
In Deletion mode, DataGrail will take the following actions for Deletion requests:
- Delete a candidate by their ID.
In Anonymization mode, DataGrail will take the following actions for Deletion requests:
- Update a candidate by their ID with the following anonymization rules:
Anonymization Rules
Set the following fields to null:
addressescompanycustom_fieldsemail_addressesphone_numberssocial_media_addressestagstitlewebsite_addresses
Replace the following fields with a random string:
first_namelast_name
Application and offer data can also be anonymized when configured for your account:
offersall_offer_versionscustom_application_fieldsapplication_questionsrejection_reason
Only the fields configured for your account are sent to Greenhouse.
Endpoints Utilized
| Method | Endpoint | Purpose | Docs |
|---|---|---|---|
| PATCH | /candidates/ID | Anonymize a candidate | |
| DEL | /candidates/ID | Delete a candidate |
Disclaimer: The information contained in this message does not constitute as legal advice. We would advise seeking professional counsel before acting on or interpreting any material.