Greenhouse
Connect Greenhouse to show open jobs: title, department, office, when it opened and how many openings. Connect once for the company (Global) or per brand. Open roles refresh every 30 minutes and are only ever read.
What it lights up #
- HR · open roles
- Brand page · Team & Hiring
- Scorecard · open roles
Create a Harvest V3 credential in Greenhouse #
Greenhouse's older Harvest v1/v2 API keys stopped working after 31 August 2026. Use a Harvest v3 (OAuth) credential.
You need a Greenhouse user who can manage all of the organization's API credentials.
- In Greenhouse Recruiting, click the Configure icon, then Dev Center, then API Credential Management, and choose Create new API credentials.
- Choose Harvest v3 (OAuth) as the type. For a custom integration set Partner to
custom, describe it as VX Terminal, and save. - Choose View and store credentials and copy the Client ID (Greenhouse may call it the client key) and the Client Secret. The secret is shown only once.
- Grant list (read) permissions for Jobs, Openings, Departments and Offices, for example
harvest:jobs:list, and click Save. Nothing needs write access.
Connect it in VX Terminal #
- Open Settings → Connections, find Greenhouse under People and press Connect on the row.
- Paste the Client ID and Client secret.
- If one Greenhouse account hires for several brands, set Brand comes from:
none: every job is company-wide;department: a job's department names its brand;custom_field: one of the job's custom fields names it. Enter that field's key in Brand custom field key (lowercase letters, digits and underscores, likebrand).
- Optional Brand mapping:
Value=brand-slugpairs separated by semicolons, for exampleKitchen=calloway-foods; Rail Ops=brightline-rail. A value with no pair becomes a slug as it is (Calloway Foods becomescalloway-foods). - Press Test, then Save.
A connection made for one brand puts every job under that brand, whatever Brand comes from says.
How Test works #
Test gets an access token with the client credentials and counts open jobs, for example "Connected to Greenhouse · 12 open jobs". Nothing is changed.
Common errors #
| Message | Fix |
|---|---|
| "Greenhouse rejected the Client ID and Secret. Check they belong to a Harvest V3 (OAuth) credential and were copied whole." | Copy both again. An old v1/v2 API key won't work. |
| "The credential works but can't list jobs. Grant it the Jobs list permission (harvest:jobs:list)." | Edit the credential's permissions in Greenhouse and save. |
| "Greenhouse issued a token but then refused it. Try again; if it persists, recreate the credential." | Test again, then create a new credential. |
| "Greenhouse is rate-limiting this credential. Wait a minute and test again." | Wait, then test again. |
"Brand mapping has … without an =; write Value=brand-slug" | Each pair needs an =. |
"Brand mapping maps to …, which isn't a brand slug (lowercase letters, digits and hyphens)" | Use the brand's slug from Settings → Brands. |
| "Brand custom field key must be the custom field's key: lowercase letters, digits and underscores (like brand)" | Use the field's key, not its display name. |
Greenhouse only returns jobs the credential's user can see. If some jobs are missing, check that user's access in Greenhouse.