> **Building with AI coding agents?** Install the authstack plugin with one command. This equips your agent with accurate Scalekit implementation patterns.
>
> **Recommended** (the `-y` flags skip prompts, so the command runs without an interactive terminal):
> ```bash
> npx -y @scalekit-inc/cli setup -y
> ```
>
> Global:
> ```bash
> npm install -g @scalekit-inc/cli
> scalekit setup -y
> ```
>
> Supports Claude Code, Cursor, GitHub Copilot, Codex + skills for other Agent Skills-compatible agents in `~/.agents/skills`.
> Skills: integrate-agentkit, implement-saaskit, add-mcp-oauth, implement-sso, implement-scim.
> [Full setup guide](https://docs.scalekit.com/dev-kit/build-with-ai/)

---

# Connect AI agents to Greenhouse

The Greenhouse connector lets your AI agent act in each user's Greenhouse account. Each user signs in to Greenhouse once, and Scalekit stores and refreshes their tokens, so your agent never handles credentials. It comes with 90 tools.

**Authentication:** OAuth 2.0
**Categories:** Productivity
**Tools:** 90: 46 read, 32 write, 12 destructive
**Users sign in with:** OAuth
**OAuth app:** Your own Greenhouse app
**Built by:** Scalekit connector
**Try it:** [Playground in the Scalekit dashboard](https://app.scalekit.com/ws/signup?sk_intent=playground&provider=GREENHOUSE)

## Setup

1. ### Install the SDK

   **Node.js**

   ```bash
   npm install @scalekit-sdk/node dotenv
   ```

   **Python**

   ```bash
   pip install scalekit-sdk-python python-dotenv
   ```

2. ### Set your credentials

   Add your Scalekit credentials to your `.env` file. Find values in **[app.scalekit.com](https://app.scalekit.com)** > **Developers** > **API Credentials**.

   ```sh title=".env"
   SCALEKIT_ENVIRONMENT_URL=<your-environment-url>
   SCALEKIT_CLIENT_ID=<your-client-id>
   SCALEKIT_CLIENT_SECRET=<your-client-secret>
   ```

3. ### Create the Greenhouse connection

   In **AgentKit > Connections**, create a Greenhouse connection and copy its redirect URI. The name you give it is the `connection_name` your code passes. See [Configure connections](/agentkit/connections/).

4. ### Register an OAuth app

   Greenhouse connections use your own OAuth app. Register one with Greenhouse and add the redirect URI you copied.

   Then enter the app's Client ID and Client Secret on the Greenhouse connection.

5. ### Authorize a user and make your first call

   **Node.js** (`quickstart.mts`)

   ```typescript
   import { ScalekitClient } from '@scalekit-sdk/node'
   import 'dotenv/config'
   import { createInterface } from 'node:readline/promises'

   const scalekit = new ScalekitClient(
     process.env.SCALEKIT_ENVIRONMENT_URL,
     process.env.SCALEKIT_CLIENT_ID,
     process.env.SCALEKIT_CLIENT_SECRET,
   )
   const actions = scalekit.actions

   const connector = 'greenhouse'
   const identifier = 'user_123'

   // Generate an authorization link for the user
   const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
   console.log('Authorize Greenhouse:', link)
   const rl = createInterface({ input: process.stdin, output: process.stdout })
   await rl.question('Press Enter after authorizing...')
   rl.close()

   // Make your first call
   const result = await actions.executeTool({
     connector,
     identifier,
     toolName: 'greenhouse_application_stages_list',
     toolInput: {},
   })
   console.log(result)
   ```

   ```bash
   npx tsx quickstart.mts
   ```

   **Python** (`quickstart.py`)

   ```python
   import os
   from scalekit import ScalekitClient
   from dotenv import load_dotenv
   load_dotenv()

   scalekit_client = ScalekitClient(
       env_url=os.getenv("SCALEKIT_ENVIRONMENT_URL"),
       client_id=os.getenv("SCALEKIT_CLIENT_ID"),
       client_secret=os.getenv("SCALEKIT_CLIENT_SECRET"),
   )
   actions = scalekit_client.actions

   connection_name = "greenhouse"
   identifier = "user_123"

   # Generate an authorization link for the user
   link_response = actions.get_authorization_link(
       connection_name=connection_name,
       identifier=identifier,
   )
   print("Authorize Greenhouse:", link_response.link)
   input("Press Enter after authorizing...")

   # Make your first call
   result = actions.execute_tool(
       tool_input={},
       tool_name="greenhouse_application_stages_list",
       connection_name=connection_name,
       identifier=identifier,
   )
   print(result)
   ```

   ```bash
   python quickstart.py
   ```

   Each user signs in once. See [Authorize a user](/agentkit/tools/authorize/) for the full flow and statuses.

## Tools

Pass the exact name to `execute_tool`, with an input like each tool's example. To ask for a tool that's missing, use the [request form](https://scalekitsupport.portal.usepylon.com/forms/request-a-connector-tool).

**Node.js**

```typescript
const result = await actions.executeTool({
  toolName: 'greenhouse_application_stages_list',
  toolInput: {},
  connector: 'greenhouse',
  identifier: 'user_123',
})
```

**Python**

```python
result = actions.execute_tool(
    tool_name="greenhouse_application_stages_list",
    tool_input={},
    connection_name="greenhouse",
    identifier="user_123",
)
```

`result.data` is the app's response as JSON, and `result.execution_id` (`executionId` in Node.js) is the ID of the call.

### `greenhouse_application_stages_list`

List Application Stages · Read-only

List the stage history rows of Greenhouse applications, one row per interview stage an application has occupied.
Returns stage rows with application_id, job_interview_stage_id, entered_at and exited_at.
Use this for time-in-stage or the current stage of an application (current true). Use greenhouse_job_interview_stages_list for a job's stage definitions.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `application_ids` (`string`, optional): Return only rows for these application ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `created_at` (`string`, optional): Filter by when the record was created, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z
- `current` (`boolean`, optional): When true, return only the application's current stage entry (the one with exited_at null); when false, only past stage entries. Omit to include the full stage history. Example: true
- `fields` (`string`, optional): Comma-separated list of fields to include in each result, to keep responses small. Allowed values: application_id, created_at, current, days_in_stage, entered_at, exited_at, id, job_interview_stage_id, updated_at. Example: id,application_id,created_at
- `ids` (`string`, optional): Return only application stages with these ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `job_interview_stage_ids` (`string`, optional): Return only stage entries where the application visited one of these interview stage ids. These are hiring plan interview stage ids (look up the stages on a job via greenhouse_job_interview_stages_list (filtered by job_ids)); each row represents an application's visit to a stage, not the stage definition itself. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `per_page` (`integer`, optional): Number of results to return, from 1 to 500. Defaults to 100. Results are ordered newest first (by id). Example: 100
- `updated_at` (`string`, optional): Filter by when the record was last updated, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z

Example input: `{}`

### `greenhouse_applications_list`

List Applications · Read-only

List Greenhouse applications, filtered by candidate, job, job post, source, referrer, stage, status, or created/updated time.
Returns applications with candidate_id, job_id, current stage_id and stage_name, status, source, recruiter, coordinator and rejection data, newest first.
Use this to see where candidates are in the pipeline. Use greenhouse_application_stages_list for an application's stage history.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `candidate_ids` (`string`, optional): Return only rows for these candidate ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `created_at` (`string`, optional): Filter by when the record was created, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z
- `custom_field_option_id` (`integer`, optional): Return only applications whose application custom field value matches this single-select or multi-select option id. Example: 4012345002
- `fields` (`string`, optional): Comma-separated list of fields to include in each result, to keep responses small. Allowed values: agency_note_id, answers, candidate_id, coordinator_id, created_at, custom_fields, id, job_id, job_interview_stage_id, job_post_id, last_activity_at, location_address, needs_decision, prospect, prospective_job_ids, recruiter_id, referrer_id, rejected_at, rejection_reason_id, source_id, stage_id, stage_name, status, updated_at. Example: id,agency_note_id,answers
- `ids` (`string`, optional): Return only applications with these ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `job_ids` (`string`, optional): Return only applications attached to these job (hiring plan) ids. This is the application's current job, not any prospective placement — use prospective_job_ids for that. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `job_interview_stage_ids` (`string`, optional): Return only applications whose current job interview stage matches one of these stage IDs. These are job interview stage definition IDs (IDs from greenhouse_job_interview_stages_list). Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `job_post_ids` (`string`, optional): Return only rows for these job post ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `last_activity_at_after` (`string`, optional): Filter by last-activity timestamp on the application: return records on or after this value, given as an ISO 8601 date-time. Example: 2026-01-01T00:00:00Z
- `last_activity_at_before` (`string`, optional): Filter by last-activity timestamp on the application: return records on or before this value, given as an ISO 8601 date-time. Example: 2026-01-01T00:00:00Z
- `per_page` (`integer`, optional): Number of results to return, from 1 to 500. Defaults to 100. Results are ordered newest first (by id). Example: 100
- `prospect` (`boolean`, optional): When true, return only prospect applications; when false, only non-prospect (candidate) applications. Omit to include both. Example: true
- `prospective_job_ids` (`string`, optional): Return only applications that have a prospective placement on one of these job (hiring plan) ids. Prospective jobs are jobs a candidate is being considered for before being moved onto them; use job_ids to filter by the application's current job. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `referrer_ids` (`string`, optional): Return only applications attributed to these referrer ids. A referrer is the Greenhouse Referrer record (see greenhouse_referrers_list) — not a user id. Look up the referrer id for a user via that endpoint first. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `source_ids` (`string`, optional): Return only rows for these source ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `stage_ids` (`string`, optional): Return only applications whose current stage matches one of these stage IDs. These are application-stage IDs — the same value returned as stage_id on each application — not job interview stage definition IDs (IDs from greenhouse_job_interview_stages_list will not match). Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `stage_name` (`string`, optional): Filter applications by current stage name (exact match, case sensitive). Useful when you want to slice by stage without first looking up its id. Example: Phone Screen
- `status` (`string`, optional): Filter by the application's lifecycle status. active returns applications still in process; rejected and hired filter by terminal state. One of: rejected, hired, converted, active. Example: rejected. One of: `rejected`, `hired`, `converted`, `active`.
- `updated_at` (`string`, optional): Filter by when the record was last updated, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z

Example input: `{}`

### `greenhouse_applied_candidate_tags_list`

List Applied Candidate Tags · Read-only

List the tags applied to Greenhouse candidates, one row per candidate and tag, filtered by candidate or tag.
Returns rows with id, candidate_id and candidate_tag_id.
Use this to see a candidate's tags or everyone with a tag. Use greenhouse_candidate_tags_list for the tag names.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `candidate_ids` (`string`, optional): Return only rows for these candidate ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `candidate_tag_ids` (`string`, optional): Return only rows for these candidate tag ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `created_at` (`string`, optional): Filter by when the record was created, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z
- `fields` (`string`, optional): Comma-separated list of fields to include in each result, to keep responses small. Allowed values: candidate_id, candidate_tag_id, created_at, id, updated_at. Example: id,candidate_id,candidate_tag_id
- `ids` (`string`, optional): Return only applied candidate tags with these ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `per_page` (`integer`, optional): Number of results to return, from 1 to 500. Defaults to 100. Results are ordered newest first (by id). Example: 100
- `updated_at` (`string`, optional): Filter by when the record was last updated, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z

Example input: `{}`

### `greenhouse_attachments_list`

List Attachments · Read-only

List files attached to Greenhouse applications, such as resumes, cover letters and offer letters, filtered by candidate, application, or type.
Returns attachments with id, application_id, candidate_id, type, filename and a short-lived download url.
Use this to find a candidate's resume or documents. Use greenhouse_attachment_create to add a file.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `application_ids` (`string`, optional): Return only rows for these application ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `candidate_ids` (`string`, optional): Return only attachments whose application belongs to one of these candidates (people). Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `created_at` (`string`, optional): Filter by when the record was created, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z
- `fields` (`string`, optional): Comma-separated list of fields to include in each result, to keep responses small. Allowed values: application_id, candidate_id, created_at, filename, id, type, updated_at, url. Example: id,application_id,candidate_id
- `ids` (`string`, optional): Return only attachments with these ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `per_page` (`integer`, optional): Number of results to return, from 1 to 500. Defaults to 100. Results are ordered newest first (by id). Example: 100
- `type` (`string`, optional): Filter by attachment type. resume, cover_letter, take_home_test are candidate-supplied documents; offer_packet, offer_letter, signed_offer_letter are offer documents; midfunnel_agreement and automated_agreement are e-signed documents; form_attachment is generated by Greenhouse forms; other is the free-form bucket. One of: resume, cover_letter, take_home_test, offer_packet, offer_letter, signed_offer_letter, other, form_attachment, midfunnel_agreement, automated_agreement. Example: resume. One of: `resume`, `cover_letter`, `take_home_test`, `offer_packet`, `offer_letter`, `signed_offer_letter`, `other`, `form_attachment`, `midfunnel_agreement`, `automated_agreement`.
- `updated_at` (`string`, optional): Filter by when the record was last updated, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z

Example input: `{}`

### `greenhouse_candidate_educations_list`

List Candidate Educations · Read-only

List education entries on Greenhouse candidate profiles, filtered by candidate, latest entry, or start/end date.
Returns educations with candidate_id, school, degree and discipline option ids, and start and end dates.
Use this to read a candidate's education. Use greenhouse_candidate_employments_list for work history.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `candidate_ids` (`string`, optional): Return only rows for these candidate ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `created_at` (`string`, optional): Filter by when the record was created, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z
- `end_at_after` (`string`, optional): Filter by education end date: return records on or after this value, given as an ISO 8601 date-time. Example: 2026-01-01T00:00:00Z
- `end_at_before` (`string`, optional): Filter by education end date: return records on or before this value, given as an ISO 8601 date-time. Example: 2026-01-01T00:00:00Z
- `fields` (`string`, optional): Comma-separated list of fields to include in each result, to keep responses small. Allowed values: candidate_id, created_at, degree_custom_field_option_id, discipline_custom_field_option_id, end_at, end_date_month, end_date_year, id, latest, school_name_custom_field_option_id, start_at, start_date_month, start_date_year, updated_at. Example: id,candidate_id,created_at
- `ids` (`string`, optional): Return only candidate educations with these ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `latest` (`boolean`, optional): When true, return only each candidate's most recent education entry; when false, exclude the most recent. Omit to include the full education history. Example: true
- `per_page` (`integer`, optional): Number of results to return, from 1 to 500. Defaults to 100. Results are ordered newest first (by id). Example: 100
- `start_at_after` (`string`, optional): Filter by education start date: return records on or after this value, given as an ISO 8601 date-time. Example: 2026-01-01T00:00:00Z
- `start_at_before` (`string`, optional): Filter by education start date: return records on or before this value, given as an ISO 8601 date-time. Example: 2026-01-01T00:00:00Z
- `updated_at` (`string`, optional): Filter by when the record was last updated, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z

Example input: `{}`

### `greenhouse_candidate_employments_list`

List Candidate Employments · Read-only

List work history entries on Greenhouse candidate profiles, filtered by candidate or latest entry.
Returns employments with candidate_id, company_name, title, start_date and end_date.
Use this to read a candidate's work history. Use greenhouse_candidate_educations_list for education.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `candidate_ids` (`string`, optional): Return only rows for these candidate ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `created_at` (`string`, optional): Filter by when the record was created, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z
- `fields` (`string`, optional): Comma-separated list of fields to include in each result, to keep responses small. Allowed values: candidate_id, company_name, created_at, end_date, id, latest, start_date, title, updated_at. Example: id,candidate_id,company_name
- `ids` (`string`, optional): Return only candidate employments with these ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `latest` (`boolean`, optional): When true, return only each candidate's most recent employment entry; when false, exclude the most recent. Omit to include the full work history. Example: true
- `per_page` (`integer`, optional): Number of results to return, from 1 to 500. Defaults to 100. Results are ordered newest first (by id). Example: 100
- `updated_at` (`string`, optional): Filter by when the record was last updated, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z

Example input: `{}`

### `greenhouse_candidate_tags_list`

List Candidate Tags · Read-only

List the organization's Greenhouse candidate tag dictionary.
Returns tags with id and name.
Use this to find a candidate_tag_id. Use greenhouse_applied_candidate_tags_list to see which candidates carry a tag.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `created_at` (`string`, optional): Filter by when the record was created, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z
- `fields` (`string`, optional): Comma-separated list of fields to include in each result, to keep responses small. Allowed values: created_at, id, name, updated_at. Example: id,created_at,name
- `ids` (`string`, optional): Return only candidate tags with these ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `per_page` (`integer`, optional): Number of results to return, from 1 to 500. Defaults to 100. Results are ordered newest first (by id). Example: 100
- `updated_at` (`string`, optional): Filter by when the record was last updated, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z

Example input: `{}`

### `greenhouse_candidates_list`

List Candidates · Read-only

List Greenhouse candidates and prospects, optionally filtered by ids, email, tag, custom field option, or created/updated time.
Returns candidate profiles (id, names, company, title, emails, phones, tags, custom fields, last activity), newest first, up to per_page (max 500).
Use this to find a candidate or fetch one by id via ids. Use greenhouse_applications_list for a candidate's job applications.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `created_at` (`string`, optional): Filter by when the record was created, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z
- `custom_field_option_id` (`integer`, optional): Return only candidates whose custom field value matches this single-select or multi-select option id. Example: 4012345002
- `email` (`string`, optional): Return only candidates with this email address on their profile. Matches against any of the candidate's email addresses, case-insensitively. Example: jane.doe@example.com
- `fields` (`string`, optional): Comma-separated list of fields to include in each result, to keep responses small. Allowed values: addresses, can_email, company, created_at, custom_fields, email_addresses, first_name, id, last_activity_at, last_name, linked_user_ids, phone_numbers, preferred_name, private, social_media_addresses, tags, time_zone, title, updated_at, website_addresses. Example: id,addresses,can_email
- `ids` (`string`, optional): Return only candidates with these ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `last_activity_at_after` (`string`, optional): Filter by last-activity timestamp on the candidate's applications: return records on or after this value, given as an ISO 8601 date-time. Example: 2026-01-01T00:00:00Z
- `last_activity_at_before` (`string`, optional): Filter by last-activity timestamp on the candidate's applications: return records on or before this value, given as an ISO 8601 date-time. Example: 2026-01-01T00:00:00Z
- `per_page` (`integer`, optional): Number of results to return, from 1 to 500. Defaults to 100. Results are ordered newest first (by id). Example: 100
- `private` (`boolean`, optional): Include private candidates the caller has access to. Defaults to true; set false to exclude private candidates. Example: true
- `tag` (`string`, optional): Filter by candidate tag name (exact match). Use the greenhouse_candidate_tags_list endpoint to discover available tag names for your organization. Example: referral
- `updated_at` (`string`, optional): Filter by when the record was last updated, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z

Example input: `{}`

### `greenhouse_close_reasons_list`

List Close Reasons · Read-only

List the organization's Greenhouse close reasons for openings.
Returns close reasons with id and name.
Use this to find a close_reason_id for greenhouse_application_hire or greenhouse_opening_update.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `created_at` (`string`, optional): Filter by when the record was created, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z
- `fields` (`string`, optional): Comma-separated list of fields to include in each result, to keep responses small. Allowed values: created_at, id, name, updated_at. Example: id,created_at,name
- `ids` (`string`, optional): Return only close reasons with these ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `per_page` (`integer`, optional): Number of results to return, from 1 to 500. Defaults to 100. Results are ordered newest first (by id). Example: 100
- `updated_at` (`string`, optional): Filter by when the record was last updated, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z

Example input: `{}`

### `greenhouse_custom_field_options_list`

List Custom Field Options · Read-only

List the options of Greenhouse single-select and multi-select custom fields, filtered by custom field id or name_key.
Returns options with id, custom_field_id, name and sort_order.
Use this to find option ids for custom_fields values and for school, degree and discipline ids. Use greenhouse_custom_fields_list for the fields.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `active` (`boolean`, optional): Filter by selectability. true returns options currently usable in the UI; false returns archived (soft-deleted) options. Omit to return both. Example: true
- `created_at` (`string`, optional): Filter by when the record was created, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z
- `custom_field_ids` (`string`, optional): Return only rows for these custom field ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `custom_field_key` (`string`, optional): Filter options to a single custom field by its name_key (e.g. school_name, degree, discipline, cost_center). Use this when you know the field's stable key but not its id — these are the V3 replacement for V1's /schools, /degrees, and /disciplines endpoints. Example: school_name
- `fields` (`string`, optional): Comma-separated list of fields to include in each result, to keep responses small. Allowed values: active, created_at, custom_field_id, external_id, id, name, sort_order, updated_at. Example: id,active,created_at
- `ids` (`string`, optional): Return only custom field options with these ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `per_page` (`integer`, optional): Number of results to return, from 1 to 500. Defaults to 100. Results are ordered newest first (by id). Example: 100
- `updated_at` (`string`, optional): Filter by when the record was last updated, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z

Example input: `{}`

### `greenhouse_custom_fields_list`

List Custom Fields · Read-only

List Greenhouse custom field definitions, filtered by the resource they attach to (field_type), name, name_key, or active status.
Returns custom fields with id, name, name_key, field_type, value_type and required flag.
Use this to learn which custom_fields entries a create or update tool accepts. Use greenhouse_custom_field_options_list for select options.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `active` (`boolean`, optional): Filter by archival status. Defaults to returning both active and archived; set true for live fields only, false for archived only. Example: true
- `created_at` (`string`, optional): Filter by when the record was created, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z
- `field_type` (`string`, optional): Filter by the resource the field attaches to (e.g. job, offer, candidate, application, opening, user_attribute). Replaces the V1 path segment /v1/custom_fields/{field_type}. One of: job, opening, standard, offer, compensation_frequency, candidate, referral_question, application, rejection_question, form, agency_question, user_attribute. Example: job. One of: `job`, `opening`, `standard`, `offer`, `compensation_frequency`, `candidate`, `referral_question`, `application`, `rejection_question`, `form`, `agency_question`, `user_attribute`.
- `fields` (`string`, optional): Comma-separated list of fields to include in each result, to keep responses small. Allowed values: active, api_only, application_type, created_at, default_value, description, expose_in_job_board_api, field_type, id, internal_type, name, name_key, placeholder, private, require_approval, required, sort_order, template_token_string, trigger_new_version, updated_at, updated_by_id, use_for_job_approvals, use_for_offer_approvals, value_type. Example: id,active,api_only
- `ids` (`string`, optional): Return only custom fields with these ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `name` (`string`, optional): Filter to fields whose human-readable name exactly matches this value (case-insensitive). Example: Desired Salary
- `name_key` (`string`, optional): Filter to the field with this name_key (the stable lowercase identifier used when setting values on parent resources). Prefer this over name for integrations — name_key is stable across rename. Example: desired_salary
- `per_page` (`integer`, optional): Number of results to return, from 1 to 500. Defaults to 100. Results are ordered newest first (by id). Example: 100
- `updated_at` (`string`, optional): Filter by when the record was last updated, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z

Example input: `{}`

### `greenhouse_default_interviewers_list`

List Default Interviewers · Read-only

List the default interviewers configured on Greenhouse interview kits, filtered by interview kit or user.
Returns default interviewer rows with interview_kit_id and user_id.
Use this to see who normally runs an interview. Use greenhouse_interviewers_list for the panel on a scheduled interview.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `created_at` (`string`, optional): Filter by when the record was created, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z
- `fields` (`string`, optional): Comma-separated list of fields to include in each result, to keep responses small. Allowed values: created_at, id, interview_kit_id, updated_at, user_id. Example: id,created_at,interview_kit_id
- `ids` (`string`, optional): Return only default interviewers with these ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `interview_kit_ids` (`string`, optional): Return only default-interviewer rows for these interview kit ids. Use this to look up the default interview panel for a specific stage on a job (fetch the kits for the job via greenhouse_interview_kits_list (filtered by job_ids) first). Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `per_page` (`integer`, optional): Number of results to return, from 1 to 500. Defaults to 100. Results are ordered newest first (by id). Example: 100
- `updated_at` (`string`, optional): Filter by when the record was last updated, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z
- `user_ids` (`string`, optional): Return only rows for these user ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003

Example input: `{}`

### `greenhouse_departments_list`

List Departments · Read-only

List the organization's Greenhouse departments, filtered by parent department or external id.
Returns departments with id, name, parent_id and external_id.
Use this to find a department_id for jobs and filters. Use greenhouse_offices_list for offices.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `created_at` (`string`, optional): Filter by when the record was created, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z
- `external_id` (`string`, optional): Return only the department whose external_id matches this value exactly. Useful for reconciling departments against an HRIS or other external system without an extra name lookup. Example: DEPT-ENG
- `fields` (`string`, optional): Comma-separated list of fields to include in each result, to keep responses small. Allowed values: created_at, external_id, id, name, parent_id, updated_at. Example: id,created_at,external_id
- `ids` (`string`, optional): Return only departments with these ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `parent_id` (`integer`, optional): Return only departments whose immediate parent is this department id. Omit to list every department regardless of position in the tree. Example: 4012345002
- `per_page` (`integer`, optional): Number of results to return, from 1 to 500. Defaults to 100. Results are ordered newest first (by id). Example: 100
- `updated_at` (`string`, optional): Filter by when the record was last updated, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z

Example input: `{}`

### `greenhouse_email_templates_list`

List Email Templates · Read-only

List the organization's Greenhouse email templates, filtered by email type or sender type.
Returns templates with id, name, email_type, subject, from_type and body.
Use this to find an email_template_id for the rejection email in greenhouse_application_reject.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `created_at` (`string`, optional): Filter by when the record was created, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z
- `email_type` (`string`, optional): Filter by notification category (e.g. candidate_email, candidate_rejection, interviewer_invite). Matches the email_type field on the response. Pass none to retrieve uncategorized custom templates. One of: candidate_auto_reply, new_candidate, new_internal_candidate, new_referral, new_agency_submission, candidate_hired, approved_to_start_recruiting, offer_fully_approved, job_closed, candidate_rejection, weekly_status, scorecard_reminder, scorecard_repeat_reminder, interviewer_invite, take_home_test_email, daily_recruiting, stage_transition, scorecard_progress, agency_candidate_status, agency_candidate_stage, candidate_email, team_email, none, extending_offer, non_admin_welcome, job_admin_welcome, site_admin_welcome, prospect_referral_receipt, candidate_referral_receipt, candidate_availability_request, candidate_availability_confirmation, approval_request, eeoc_data_request, event_prospect_auto_reply, job_post_request, gdpr_notification, stage_change_for_followers, rejection_for_followers, calendly_request, gdpr_consent_extension, agency_recruiter_assigned, slack_mentions, candidate_self_schedule_request, sourcing_automation_step, candidate_survey, esignature_request, scheduling_link_confirmation, talent_matching_summary, identity_verification_request, identity_verification_daily_digest, candidate_interview_reminder, identity_verification_persona_request, notetaker_consent_request, new_dream_job_applicant. Example: candidate_auto_reply. One of: `candidate_auto_reply`, `new_candidate`, `new_internal_candidate`, `new_referral`, `new_agency_submission`, `candidate_hired`, `approved_to_start_recruiting`, `offer_fully_approved`, `job_closed`, `candidate_rejection`, `weekly_status`, `scorecard_reminder`, `scorecard_repeat_reminder`, `interviewer_invite`, `take_home_test_email`, `daily_recruiting`, `stage_transition`, `scorecard_progress`, `agency_candidate_status`, `agency_candidate_stage`, `candidate_email`, `team_email`, `none`, `extending_offer`, `non_admin_welcome`, `job_admin_welcome`, `site_admin_welcome`, `prospect_referral_receipt`, `candidate_referral_receipt`, `candidate_availability_request`, `candidate_availability_confirmation`, `approval_request`, `eeoc_data_request`, `event_prospect_auto_reply`, `job_post_request`, `gdpr_notification`, `stage_change_for_followers`, `rejection_for_followers`, `calendly_request`, `gdpr_consent_extension`, `agency_recruiter_assigned`, `slack_mentions`, `candidate_self_schedule_request`, `sourcing_automation_step`, `candidate_survey`, `esignature_request`, `scheduling_link_confirmation`, `talent_matching_summary`, `identity_verification_request`, `identity_verification_daily_digest`, `candidate_interview_reminder`, `identity_verification_persona_request`, `notetaker_consent_request`, `new_dream_job_applicant`.
- `fields` (`string`, optional): Comma-separated list of fields to include in each result, to keep responses small. Allowed values: body, cc_coordinator, cc_recruiter, created_at, default, description, email_type, from_type, html_body, id, name, office_anywhere, recipients, subject, updated_at, user_id. Example: id,body,cc_coordinator
- `from_type` (`string`, optional): Filter by how the sender's address is resolved at send time. See the from_type field on the response for the meaning of each value. One of: user_email, organization_email, my_email_address, inviter, organizer, not_applicable. Example: user_email. One of: `user_email`, `organization_email`, `my_email_address`, `inviter`, `organizer`, `not_applicable`.
- `ids` (`string`, optional): Return only email templates with these ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `per_page` (`integer`, optional): Number of results to return, from 1 to 500. Defaults to 100. Results are ordered newest first (by id). Example: 100
- `updated_at` (`string`, optional): Filter by when the record was last updated, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z

Example input: `{}`

### `greenhouse_interview_kits_list`

List Interview Kits · Read-only

List Greenhouse interview kits (the guide and scorecard for a job interview), filtered by job interview.
Returns interview kits with id, job_id, job_interview_id and exercises.
Use this to find an interview_kit_id for greenhouse_scorecard_create. Use greenhouse_scorecard_questions_list for a kit's questions.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `created_at` (`string`, optional): Filter by when the record was created, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z
- `fields` (`string`, optional): Comma-separated list of fields to include in each result, to keep responses small. Allowed values: anonymize_candidate, anonymize_resumes, created_at, exercises, id, job_id, job_interview_id, updated_at. Example: id,anonymize_candidate,anonymize_resumes
- `ids` (`string`, optional): Return only interview kits with these ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `job_ids` (`string`, optional): Return only interview kits belonging to these job (hiring plan) ids. Each interview kit is configured on a single job's interview plan. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `job_interview_ids` (`string`, optional): Return only interview kits attached to these job_interview (interview slot) ids. Each kit defines the instructions and scorecard for a specific interview slot on the job's interview plan. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `per_page` (`integer`, optional): Number of results to return, from 1 to 500. Defaults to 100. Results are ordered newest first (by id). Example: 100
- `updated_at` (`string`, optional): Filter by when the record was last updated, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z

Example input: `{}`

### `greenhouse_interviewers_list`

List Interviewers · Read-only

List the panel members on scheduled Greenhouse interviews, filtered by interview, scorecard, user, or RSVP status.
Returns interviewer rows with interview_id, user_id, scorecard_id and response_status.
Use this to see who is on an interview panel. Use greenhouse_default_interviewers_list for the default panel on an interview kit.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `created_at` (`string`, optional): Filter by when the record was created, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z
- `fields` (`string`, optional): Comma-separated list of fields to include in each result, to keep responses small. Allowed values: created_at, email, id, interview_id, response_status, scorecard_id, updated_at, user_id. Example: id,created_at,email
- `ids` (`string`, optional): Return only interviewers with these ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `interview_ids` (`string`, optional): Return only rows for these interview ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `per_page` (`integer`, optional): Number of results to return, from 1 to 500. Defaults to 100. Results are ordered newest first (by id). Example: 100
- `response_status` (`string`, optional): Filter by the panel member's calendar RSVP. needs_action is the default until the invitee responds; accepted, tentative, and declined mirror the calendar response. One of: needs_action, declined, tentative, accepted. Example: needs_action. One of: `needs_action`, `declined`, `tentative`, `accepted`.
- `scorecard_ids` (`string`, optional): Return only rows for these scorecard ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `updated_at` (`string`, optional): Filter by when the record was last updated, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z
- `user_ids` (`string`, optional): Return only interviewer rows for these Greenhouse user ids (the users serving on the panel). Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003

Example input: `{}`

### `greenhouse_interviews_list`

List Interviews · Read-only

List scheduled Greenhouse interviews, filtered by application, job, interview slot, organizer, status, external calendar event, or start/end time.
Returns interviews with id, application_id, job_interview_id, starts_at, ends_at, location, organizer, video link and status.
Use this to see a candidate's interview schedule. Use greenhouse_interviewers_list for the panel on each interview.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `all_day_end_on_after` (`string`, optional): Filter all-day interviews by end date (YYYY-MM-DD): return records on or after this value, given as an ISO 8601 date (YYYY-MM-DD). Example: 2026-01-01
- `all_day_end_on_before` (`string`, optional): Filter all-day interviews by end date (YYYY-MM-DD): return records on or before this value, given as an ISO 8601 date (YYYY-MM-DD). Example: 2026-01-01
- `all_day_start_on_after` (`string`, optional): Filter all-day interviews by start date (YYYY-MM-DD): return records on or after this value, given as an ISO 8601 date (YYYY-MM-DD). Example: 2026-01-01
- `all_day_start_on_before` (`string`, optional): Filter all-day interviews by start date (YYYY-MM-DD): return records on or before this value, given as an ISO 8601 date (YYYY-MM-DD). Example: 2026-01-01
- `application_ids` (`string`, optional): Return only rows for these application ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `created_at` (`string`, optional): Filter by when the record was created, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z
- `ends_at_after` (`string`, optional): Filter by interview end time: return records on or after this value, given as an ISO 8601 date-time. Example: 2026-01-01T00:00:00Z
- `ends_at_before` (`string`, optional): Filter by interview end time: return records on or before this value, given as an ISO 8601 date-time. Example: 2026-01-01T00:00:00Z
- `external_event_id` (`string`, optional): Return the interview tied to this external calendar event id (e.g. a Google Calendar or Outlook event id). Useful for round-tripping from a calendar webhook back to the Greenhouse interview. Example: 7c9e6679-calendar-event
- `fields` (`string`, optional): Comma-separated list of fields to include in each result, to keep responses small. Allowed values: all_day_end_on, all_day_start_on, application_id, availability_received_at, created_at, ends_at, external_event_id, id, job_id, job_interview_id, location, organizer_id, scheduled_at, starts_at, status, updated_at, video_conferencing_url. Example: id,all_day_end_on,all_day_start_on
- `ids` (`string`, optional): Return only interviews with these ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `job_ids` (`string`, optional): Return only interviews scheduled for applications on these job (hiring plan) ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `job_interview_ids` (`string`, optional): Return only interviews scheduled against these job_interview ids. A job_interview is the stage's interview configuration (template) on an interview kit, not the scheduled interview itself — fetch ids via greenhouse_job_interviews_list. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `organizer_ids` (`string`, optional): Return only interviews organized by these Greenhouse user ids. The organizer is the calendar role responsible for scheduling the interview, not an interviewer on the panel. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `per_page` (`integer`, optional): Number of results to return, from 1 to 500. Defaults to 100. Results are ordered newest first (by id). Example: 100
- `starts_at_after` (`string`, optional): Filter by interview start time: return records on or after this value, given as an ISO 8601 date-time. Example: 2026-01-01T00:00:00Z
- `starts_at_before` (`string`, optional): Filter by interview start time: return records on or before this value, given as an ISO 8601 date-time. Example: 2026-01-01T00:00:00Z
- `status` (`string`, optional): Filter by interview lifecycle status. scheduled is on the calendar; awaiting_feedback is past with scorecards outstanding; complete is past with all scorecards in; to_be_scheduled is the pre-schedule placeholder. Take-home test interviews use to_be_sent, sent, and received. One of: to_be_scheduled, scheduled, awaiting_feedback, complete, skipped, collect_feedback, to_be_sent, sent, received. Example: to_be_scheduled. One of: `to_be_scheduled`, `scheduled`, `awaiting_feedback`, `complete`, `skipped`, `collect_feedback`, `to_be_sent`, `sent`, `received`.
- `updated_at` (`string`, optional): Filter by when the record was last updated, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z

Example input: `{}`

### `greenhouse_job_boards_list`

List Job Boards · Read-only

List the organization's Greenhouse job boards (career sites), filtered by live or internal status.
Returns job boards with id, company_name, url_token, status and internal flag.
Use this to find a job_board_id for greenhouse_job_post_create. Use greenhouse_job_posts_list for the posts on a board.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `created_at` (`string`, optional): Filter by when the record was created, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z
- `fields` (`string`, optional): Comma-separated list of fields to include in each result, to keep responses small. Allowed values: about, company_name, conclusion, created_at, id, internal, introduction, status, updated_at, url_token. Example: id,about,company_name
- `ids` (`string`, optional): Return only job boards with these ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `internal` (`boolean`, optional): Restrict results by audience. Pass true to return only the organization's internal job board, or false to return external (public-facing) boards. Omit to return both. Example: true
- `live` (`boolean`, optional): Restrict results by publication state. Pass true to return only boards currently published at https://job-boards.greenhouse.io/{url_token}, or false to return draft (unpublished) boards. Omit to return both. Example: true
- `per_page` (`integer`, optional): Number of results to return, from 1 to 500. Defaults to 100. Results are ordered newest first (by id). Example: 100
- `updated_at` (`string`, optional): Filter by when the record was last updated, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z

Example input: `{}`

### `greenhouse_job_candidate_attributes_list`

List Job Candidate Attributes · Read-only

List the candidate attributes (traits rated on scorecards, such as Leadership or JavaScript) configured on Greenhouse jobs, filtered by job or active status.
Returns attributes with id, job_id, candidate_attribute_type_id, name, active and sort_order.
Use this to find job_candidate_attribute_id values for the candidate_attributes ratings in greenhouse_scorecard_create. Use greenhouse_scorecard_questions_list for scorecard questions.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `active` (`boolean`, optional): When true, return only attributes still in use on the job; when false, only archived ones. Omit to include both. Example: true
- `candidate_attribute_type_ids` (`string`, optional): Return only rows for these candidate attribute type ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `created_at` (`string`, optional): Filter by when the record was created, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z
- `fields` (`string`, optional): Comma-separated list of fields to include in each result, to keep responses small. Allowed values: active, candidate_attribute_type_id, created_at, id, job_id, name, sort_order, updated_at. Example: id,active,candidate_attribute_type_id
- `ids` (`string`, optional): Return only job candidate attributes with these ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `job_ids` (`string`, optional): Return only job candidate attributes registered on these job (hiring plan) ids. A job candidate attribute is a scoring rubric item attached to a single job, so this filters to the attributes belonging to those jobs. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `per_page` (`integer`, optional): Number of results to return, from 1 to 500. Defaults to 100. Results are ordered newest first (by id). Example: 100
- `updated_at` (`string`, optional): Filter by when the record was last updated, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z

Example input: `{}`

### `greenhouse_job_hiring_managers_list`

List Job Hiring Managers · Read-only

List the hiring manager assignments on Greenhouse jobs, filtered by job or user.
Returns assignment rows with id, job_id and user_id.
Use this to see who manages hiring on a job. Use greenhouse_job_owners_list for recruiters, coordinators and sourcers.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `created_at` (`string`, optional): Filter by when the record was created, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z
- `fields` (`string`, optional): Comma-separated list of fields to include in each result, to keep responses small. Allowed values: created_at, id, job_id, updated_at, user_id. Example: id,created_at,job_id
- `ids` (`string`, optional): Return only job hiring managers with these ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `job_ids` (`string`, optional): Return only job hiring manager rows for these job (hiring plan) ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `per_page` (`integer`, optional): Number of results to return, from 1 to 500. Defaults to 100. Results are ordered newest first (by id). Example: 100
- `updated_at` (`string`, optional): Filter by when the record was last updated, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z
- `user_ids` (`string`, optional): Return only job hiring manager rows for these Greenhouse user ids (the users serving in the hiring-manager role on a job). Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003

Example input: `{}`

### `greenhouse_job_interview_stages_list`

List Job Interview Stages · Read-only

List the interview stage definitions on Greenhouse jobs' interview plans, filtered by job or active status.
Returns stages with id, job_id, name and sort_order.
Use this to find a to_stage_id for greenhouse_application_move. Use greenhouse_application_stages_list for an application's actual stage history.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `active` (`boolean`, optional): Filter by whether the stage is on the job's current interview plan. Omit to return both active and inactive stages; pass true to restrict to the current plan or false to return only retired stages. Example: true
- `created_at` (`string`, optional): Filter by when the record was created, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z
- `fields` (`string`, optional): Comma-separated list of fields to include in each result, to keep responses small. Allowed values: active, created_at, id, job_id, name, sort_order, updated_at. Example: id,active,created_at
- `ids` (`string`, optional): Return only job interview stages with these ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `job_ids` (`string`, optional): Return only interview stages belonging to these job (hiring plan) ids. Each interview stage is scoped to a single job. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `per_page` (`integer`, optional): Number of results to return, from 1 to 500. Defaults to 100. Results are ordered newest first (by id). Example: 100
- `updated_at` (`string`, optional): Filter by when the record was last updated, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z

Example input: `{}`

### `greenhouse_job_interviews_list`

List Job Interviews · Read-only

List the interview slots configured on Greenhouse jobs' interview plans, filtered by job, interview stage, or scheduling type.
Returns job interviews with id, job_id, job_interview_stage_id, name, duration and scheduling_type.
Use this to find a job_interview_id for greenhouse_interview_create. Use greenhouse_interviews_list for interviews actually scheduled.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `active` (`boolean`, optional): Filter by whether the slot is on the job's current interview plan. Omit to return both active and inactive slots; pass true to restrict to the current plan or false to return only retired slots. Example: true
- `created_at` (`string`, optional): Filter by when the record was created, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z
- `fields` (`string`, optional): Comma-separated list of fields to include in each result, to keep responses small. Allowed values: active, created_at, duration, id, instructions, job_id, job_interview_stage_id, name, require_scorecard, scheduling_type, sort_order, summary, updated_at. Example: id,active,created_at
- `ids` (`string`, optional): Return only job interviews with these ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `job_ids` (`string`, optional): Return only interview slots belonging to these job (hiring plan) ids. Each slot is configured on a single job's interview plan. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `job_interview_stage_ids` (`string`, optional): Return only rows for these job interview stage ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `per_page` (`integer`, optional): Number of results to return, from 1 to 500. Defaults to 100. Results are ordered newest first (by id). Example: 100
- `scheduling_type` (`string`, optional): Filter by how the slot is fulfilled. needs_scheduling for calendared interviews, take_home_test for asynchronous tests, offer for the offer step, none for feedback-only slots. One of: none, needs_scheduling, take_home_test, offer. Example: none. One of: `none`, `needs_scheduling`, `take_home_test`, `offer`.
- `updated_at` (`string`, optional): Filter by when the record was last updated, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z

Example input: `{}`

### `greenhouse_job_notes_list`

List Job Notes · Read-only

List internal notes on Greenhouse jobs, filtered by job, author, or visibility.
Returns job notes with id, job_id, user_id, body and visibility.
Use this for notes about a job. Use greenhouse_notes_list for notes about candidates.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `created_at` (`string`, optional): Filter by when the record was created, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z
- `fields` (`string`, optional): Comma-separated list of fields to include in each result, to keep responses small. Allowed values: body, created_at, id, job_id, updated_at, user_id, visibility. Example: id,body,created_at
- `ids` (`string`, optional): Return only job notes with these ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `job_ids` (`string`, optional): Return only notes attached to these job (hiring plan) ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `per_page` (`integer`, optional): Number of results to return, from 1 to 500. Defaults to 100. Results are ordered newest first (by id). Example: 100
- `updated_at` (`string`, optional): Filter by when the record was last updated, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z
- `user_ids` (`string`, optional): Return only notes authored by these Greenhouse user ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `visibility` (`string`, optional): Filter by note visibility. admin_only_visible returns notes visible to Job Admins on the job; privately_visible returns notes restricted to users with the "view and create private job notes" permission. One of: admin_only_visible, privately_visible. Example: admin_only_visible. One of: `admin_only_visible`, `privately_visible`.

Example input: `{}`

### `greenhouse_job_owners_list`

List Job Owners · Read-only

List recruiter, coordinator and sourcer assignments on Greenhouse jobs, filtered by job, user, or role type.
Returns assignment rows with id, job_id, user_id, type and responsible flag.
Use this to see a job's recruiting team. Use greenhouse_job_hiring_managers_list for hiring managers.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `created_at` (`string`, optional): Filter by when the record was created, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z
- `fields` (`string`, optional): Comma-separated list of fields to include in each result, to keep responses small. Allowed values: created_at, id, job_id, responsible, type, updated_at, user_id. Example: id,created_at,job_id
- `ids` (`string`, optional): Return only job owners with these ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `job_ids` (`string`, optional): Return only job owner rows for these job (hiring plan) ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `per_page` (`integer`, optional): Number of results to return, from 1 to 500. Defaults to 100. Results are ordered newest first (by id). Example: 100
- `type` (`string`, optional): Restrict to hiring-team assignments of this role. One of sourcer, recruiter, or coordinator. Hiring managers are not returned here — list them via greenhouse_job_hiring_managers_list. Example: sourcer. One of: `sourcer`, `recruiter`, `coordinator`.
- `updated_at` (`string`, optional): Filter by when the record was last updated, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z
- `user_ids` (`string`, optional): Return only job owner rows for these Greenhouse user ids (the users assigned as sourcer, recruiter, or coordinator on a job). Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003

Example input: `{}`

### `greenhouse_job_post_locations_list`

List Job Post Locations · Read-only

List the locations attached to Greenhouse job posts, filtered by job post, office, custom location, or location text.
Returns location rows with id, job_post_id, type, office_id, custom_location_id and plain_text_location.
Use this to see where a job post is advertised. Use greenhouse_offices_list for the organization's offices.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `created_at` (`string`, optional): Filter by when the record was created, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z
- `custom_location_ids` (`string`, optional): Return only job post locations linked to one of these job-board-scoped custom location ids. Custom locations are reusable, admin-defined location labels configured per job board (see greenhouse_job_boards_list), distinct from free-text strings and Greenhouse offices. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `fields` (`string`, optional): Comma-separated list of fields to include in each result, to keep responses small. Allowed values: created_at, custom_location_id, id, job_post_id, office_id, plain_text_location, type, updated_at. Example: id,created_at,custom_location_id
- `ids` (`string`, optional): Return only job post locations with these ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `job_post_ids` (`string`, optional): Return only rows for these job post ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `office_ids` (`string`, optional): Return only rows for these office ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `per_page` (`integer`, optional): Number of results to return, from 1 to 500. Defaults to 100. Results are ordered newest first (by id). Example: 100
- `plain_text_location` (`string`, optional): Filter by exact match on the free-text location string (e.g. New York, NY). Only matches rows whose type is free_text; rows backed by an office or custom location are excluded. Example: New York, NY
- `type` (`string`, optional): Filter by how the location is sourced. free_text returns admin-typed strings, office returns rows linked to an organization office, and custom_list returns rows linked to a board-scoped custom location. One of: free_text, office, custom_list. Example: free_text. One of: `free_text`, `office`, `custom_list`.
- `updated_at` (`string`, optional): Filter by when the record was last updated, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z

Example input: `{}`

### `greenhouse_job_posts_list`

List Job Posts · Read-only

List Greenhouse job posts (the listings candidates apply through), filtered by job, job board, live, active, internal or featured status.
Returns job posts with id, job_id, job_board_id, title, content, public_url, and live, active and internal flags.
Use this to read or audit job listings. Use greenhouse_jobs_list for the underlying requisitions.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `active` (`boolean`, optional): Filter by whether the post is active (not deleted). Defaults to true; pass false to retrieve soft-deleted posts. Example: true
- `created_at` (`string`, optional): Filter by when the record was created, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z
- `featured` (`boolean`, optional): Filter by featured status on the organization's internal job board. Only internal posts can be featured. Example: true
- `fields` (`string`, optional): Comma-separated list of fields to include in each result, to keep responses small. Allowed values: active, content, created_at, demographic_question_set_id, featured, first_published_at, id, internal, internal_content, job_board_id, job_id, language, live, public_url, questions, title, updated_at. Example: id,active,content
- `ids` (`string`, optional): Return only job posts with these ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `internal` (`boolean`, optional): Filter by post visibility. true returns posts on internal job boards (visible to employees); false returns external posts on public job boards. Omit to return both. Example: true
- `job_board_ids` (`string`, optional): Return only rows for these job board ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `job_ids` (`string`, optional): Return only posts belonging to these job (hiring plan) ids. Each job post is published against a single job. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `live` (`boolean`, optional): When true, return only posts that are published and whose job board is also live — equivalent to posts whose public_url is reachable. When false, return posts that are not published or whose board is not live. Example: true
- `per_page` (`integer`, optional): Number of results to return, from 1 to 500. Defaults to 100. Results are ordered newest first (by id). Example: 100
- `updated_at` (`string`, optional): Filter by when the record was last updated, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z

Example input: `{}`

### `greenhouse_jobs_list`

List Jobs · Read-only

List Greenhouse jobs (requisitions), filtered by status, department, office, requisition id, or opened, closed, created or updated time.
Returns jobs with id, name, requisition_id, status, department, offices, notes and custom fields, newest first.
Use this to find a job_id. Use greenhouse_job_posts_list for the public job listings attached to jobs.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `closed_at_after` (`string`, optional): Filter by the timestamp the job most recently transitioned to closed: return records on or after this value, given as an ISO 8601 date-time. Example: 2026-01-01T00:00:00Z
- `closed_at_before` (`string`, optional): Filter by the timestamp the job most recently transitioned to closed: return records on or before this value, given as an ISO 8601 date-time. Example: 2026-01-01T00:00:00Z
- `confidential` (`boolean`, optional): Filter by the confidential flag. Set false to exclude legacy confidential jobs; omit to return both. Example: true
- `created_at` (`string`, optional): Filter by when the record was created, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z
- `custom_field_option_id` (`integer`, optional): Return only jobs that have this custom_field_option id selected on any of their single- or multi-select job custom fields. Example: 4012345002
- `department_id` (`integer`, optional): Return only jobs assigned to this department. Example: 4012345002
- `fields` (`string`, optional): Comma-separated list of fields to include in each result, to keep responses small. Allowed values: closed_at, confidential, copied_from_id, created_at, custom_fields, department_id, id, is_template, name, notes, office_ids, opened_at, requisition_id, status, updated_at. Example: id,closed_at,confidential
- `ids` (`string`, optional): Return only jobs with these ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `office_id` (`integer`, optional): Return only jobs assigned to this office. A job that spans multiple offices matches when any one of them is the supplied id. Example: 4012345002
- `opened_at_after` (`string`, optional): Filter by the timestamp the job first transitioned to open: return records on or after this value, given as an ISO 8601 date-time. Example: 2026-01-01T00:00:00Z
- `opened_at_before` (`string`, optional): Filter by the timestamp the job first transitioned to open: return records on or before this value, given as an ISO 8601 date-time. Example: 2026-01-01T00:00:00Z
- `per_page` (`integer`, optional): Number of results to return, from 1 to 500. Defaults to 100. Results are ordered newest first (by id). Example: 100
- `requisition_id` (`string`, optional): Return only jobs whose partner-supplied requisition_id matches exactly. Not unique across the organization — multiple jobs may share a requisition_id. Example: REQ-1042
- `status` (`string`, optional): Filter by job lifecycle status. One of: open, draft, closed. Example: open. One of: `open`, `draft`, `closed`.
- `updated_at` (`string`, optional): Filter by when the record was last updated, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z

Example input: `{}`

### `greenhouse_notes_list`

List Notes · Read-only

List notes on Greenhouse candidates and applications, filtered by candidate, application, author, note type, or visibility.
Returns notes with id, candidate_id, application_id, user_id, body, subject, type and visibility.
Use this to read candidate notes and logged activity. Use greenhouse_job_notes_list for notes on a job.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `application_ids` (`string`, optional): Return only rows for these application ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `candidate_ids` (`string`, optional): Return only rows for these candidate ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `created_at` (`string`, optional): Filter by when the record was created, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z
- `fields` (`string`, optional): Comma-separated list of fields to include in each result, to keep responses small. Allowed values: application_id, body, body_with_tags, candidate_id, created_at, email_attachment_file_names, email_cc, email_from, email_to, id, import_hash, subject, type, updated_at, user_id, visibility. Example: id,application_id,body
- `ids` (`string`, optional): Return only notes with these ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `per_page` (`integer`, optional): Number of results to return, from 1 to 500. Defaults to 100. Results are ordered newest first (by id). Example: 100
- `type` (`string`, optional): Filter by note type, as a comma separated list. Matches the type field on the response (for example NOTE, EMAIL, ACTIVITY, INTERVIEW, FEEDBACK). Notes of any listed type are returned, so a single request can replace one per type. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `updated_at` (`string`, optional): Filter by when the record was last updated, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z
- `user_ids` (`string`, optional): Return only notes authored by these Greenhouse user ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `visibility` (`string`, optional): Filter by note visibility. publicly_visible is visible to anyone with access to the candidate, privately_visible requires the "see private notes" permission, and admin_only_visible is restricted to Job Admins and Site Admins. One of: admin_only_visible, privately_visible, publicly_visible. Example: admin_only_visible. One of: `admin_only_visible`, `privately_visible`, `publicly_visible`.

Example input: `{}`

### `greenhouse_offers_list`

List Offers · Read-only

List Greenhouse offers, filtered by application, candidate, job, opening, status, custom field option, or start, sent or resolved dates.
Returns offers with id, version, application_id, job_id, candidate_id, status, starts_on, sent_on, resolved_at and custom fields such as compensation.
Use this to track offers. Set current_only to true to get only each application's latest offer version.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `application_ids` (`string`, optional): Return only rows for these application ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `candidate_ids` (`string`, optional): Return only rows for these candidate ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `created_at` (`string`, optional): Filter by when the record was created, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z
- `current_only` (`boolean`, optional): When true, returns only the latest version of each offer per application — superseded prior versions are excluded. Combine with application_ids or candidate_ids to retrieve the current offer for a specific application or candidate. Example: true
- `custom_field_option_id` (`integer`, optional): Return only offers whose offer custom field value selects this single-select or multi-select option id. Example: 4012345002
- `fields` (`string`, optional): Comma-separated list of fields to include in each result, to keep responses small. Allowed values: application_id, candidate_id, created_at, custom_fields, id, job_id, opening_id, resolved_at, sent_on, starts_on, status, updated_at, version. Example: id,application_id,candidate_id
- `ids` (`string`, optional): Return only offers with these ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `job_ids` (`string`, optional): Return only offers extended on applications attached to these job (hiring plan) ids. Matches the application's current job at the time the offer was generated. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `opening_ids` (`string`, optional): Return only offers tied to these opening (headcount slot) ids. An offer is made against a specific opening on the job — use greenhouse_openings_list (filtered by job_ids) to look ids up. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `per_page` (`integer`, optional): Number of results to return, from 1 to 500. Defaults to 100. Results are ordered newest first (by id). Example: 100
- `resolved_at_after` (`string`, optional): Filter by the timestamp the offer was resolved (Accepted or Rejected): return records on or after this value, given as an ISO 8601 date-time. Example: 2026-01-01T00:00:00Z
- `resolved_at_before` (`string`, optional): Filter by the timestamp the offer was resolved (Accepted or Rejected): return records on or before this value, given as an ISO 8601 date-time. Example: 2026-01-01T00:00:00Z
- `sent_on_after` (`string`, optional): Filter by the date the offer was sent to the candidate: return records on or after this value, given as an ISO 8601 date (YYYY-MM-DD). Example: 2026-01-01
- `sent_on_before` (`string`, optional): Filter by the date the offer was sent to the candidate: return records on or before this value, given as an ISO 8601 date (YYYY-MM-DD). Example: 2026-01-01
- `starts_on_after` (`string`, optional): Filter by the candidate's proposed start date on the offer: return records on or after this value, given as an ISO 8601 date (YYYY-MM-DD). Example: 2026-01-01
- `starts_on_before` (`string`, optional): Filter by the candidate's proposed start date on the offer: return records on or before this value, given as an ISO 8601 date (YYYY-MM-DD). Example: 2026-01-01
- `status` (`string`, optional): Filter by offer status. Case-insensitive match against one of Created, Accepted, Rejected, or Deprecated (the status enum on the response). One of: Created, Accepted, Rejected, Deprecated. Example: Created. One of: `Created`, `Accepted`, `Rejected`, `Deprecated`.
- `updated_at` (`string`, optional): Filter by when the record was last updated, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z

Example input: `{}`

### `greenhouse_offices_list`

List Offices · Read-only

List the organization's Greenhouse offices, filtered by parent office or external id.
Returns offices with id, name, location, parent_id and external_id.
Use this to find an office_id for jobs and filters. Use greenhouse_departments_list for departments.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `created_at` (`string`, optional): Filter by when the record was created, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z
- `external_id` (`string`, optional): Return only the office whose external_id matches this value. Useful for HRIS-driven reconciliation where partners track offices by their external identifier rather than by Greenhouse id. Example: DEPT-ENG
- `fields` (`string`, optional): Comma-separated list of fields to include in each result, to keep responses small. Allowed values: created_at, external_id, id, location, name, parent_id, primary_in_house_contact_user_id, updated_at. Example: id,created_at,external_id
- `ids` (`string`, optional): Return only offices with these ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `parent_id` (`integer`, optional): Return only offices whose parent is this office id. Use to traverse the office tree one level at a time. Example: 4012345002
- `per_page` (`integer`, optional): Number of results to return, from 1 to 500. Defaults to 100. Results are ordered newest first (by id). Example: 100
- `updated_at` (`string`, optional): Filter by when the record was last updated, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z

Example input: `{}`

### `greenhouse_openings_list`

List Openings · Read-only

List Greenhouse job openings (headcount slots), filtered by job, open state, close reason, opening id, or opened/closed time.
Returns openings with id, job_id, opening_id, open flag, opened_at, closed_at, close_reason_id, target_start_on and the application_id that filled it.
Use this to find an opening_id for greenhouse_application_hire or to track headcount. Use greenhouse_jobs_list for the jobs themselves.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `application_ids` (`string`, optional): Return only openings currently filled by these application ids. An opening's application_id is set when a candidate's application is moved onto the opening; null while the opening is still unfilled. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `close_reason_ids` (`string`, optional): Return only openings closed with one of these close_reason ids (e.g. Hire - New Headcount, On Hold, Requisition Cancelled). Resolve ids via greenhouse_close_reasons_list. Open openings have no close_reason_id and will not match. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `closed_at_after` (`string`, optional): Filter by the timestamp the opening was closed: return records on or after this value, given as an ISO 8601 date-time. Example: 2026-01-01T00:00:00Z
- `closed_at_before` (`string`, optional): Filter by the timestamp the opening was closed: return records on or before this value, given as an ISO 8601 date-time. Example: 2026-01-01T00:00:00Z
- `created_at` (`string`, optional): Filter by when the record was created, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z
- `custom_field_option_id` (`integer`, optional): Return only openings that have this custom_field_option id selected on any of their single- or multi-select opening custom fields. Example: 4012345002
- `fields` (`string`, optional): Comma-separated list of fields to include in each result, to keep responses small. Allowed values: application_id, close_reason_id, closed_at, created_at, custom_fields, id, job_id, open, opened_at, opening_id, sort_order, target_start_on, updated_at. Example: id,application_id,close_reason_id
- `ids` (`string`, optional): Return only openings with these ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `job_ids` (`string`, optional): Return only openings on these job (hiring plan) ids. Openings represent headcount on a job, so this filters to the openings belonging to those jobs. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `open` (`boolean`, optional): When true, return only openings that are still available to be filled; when false, only openings that have been closed. Omit to return both. Example: true
- `opened_at_after` (`string`, optional): Filter by the timestamp the opening transitioned to open: return records on or after this value, given as an ISO 8601 date-time. Example: 2026-01-01T00:00:00Z
- `opened_at_before` (`string`, optional): Filter by the timestamp the opening transitioned to open: return records on or before this value, given as an ISO 8601 date-time. Example: 2026-01-01T00:00:00Z
- `opening_id` (`string`, optional): Return only openings whose partner-supplied opening_id matches exactly. Not unique across the organization — multiple openings may share an opening_id. Example: POS-2231
- `per_page` (`integer`, optional): Number of results to return, from 1 to 500. Defaults to 100. Results are ordered newest first (by id). Example: 100
- `updated_at` (`string`, optional): Filter by when the record was last updated, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z

Example input: `{}`

### `greenhouse_prospect_details_list`

List Prospect Details · Read-only

List prospect details on Greenhouse prospect applications, filtered by prospect pool, pool stage, owner, department or office.
Returns rows with application_id, prospect pool and stage ids, prospect owner and prospective departments and offices.
Use this to work a sourcing pipeline. Use greenhouse_applications_list with prospect true for the prospect applications themselves.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `application_ids` (`string`, optional): Return only rows for these application ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `created_at` (`string`, optional): Filter by when the record was created, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z
- `department_ids` (`string`, optional): Return only prospect details whose underlying application is being considered for one of these department ids (matches the prospective department, not the application's hiring plan department). Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `fields` (`string`, optional): Comma-separated list of fields to include in each result, to keep responses small. Allowed values: application_id, created_at, department_id, id, office_id, pool_id, pool_stage_id, prospect_owner_id, updated_at. Example: id,application_id,created_at
- `ids` (`string`, optional): Return only prospect details with these ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `office_ids` (`string`, optional): Return only prospect details whose underlying application is being considered for one of these office ids (matches the prospective department's office, not the application's hiring plan office). Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `per_page` (`integer`, optional): Number of results to return, from 1 to 500. Defaults to 100. Results are ordered newest first (by id). Example: 100
- `pool_ids` (`string`, optional): Return only rows for these pool ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `pool_stage_ids` (`string`, optional): Return only prospect details whose current prospect pool stage matches one of these stage ids. Stage ids are unique across pools, so this can be used without also passing pool_ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `prospect_owner_ids` (`string`, optional): Return only prospect details owned by these Greenhouse user ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `updated_at` (`string`, optional): Filter by when the record was last updated, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z

Example input: `{}`

### `greenhouse_prospect_pool_stages_list`

List Prospect Pool Stages · Read-only

List the stages inside Greenhouse prospect pools, filtered by prospect pool.
Returns stages with id, prospect_pool_id, name and sort_order.
Use this to find a prospect_pool_stage_id for prospect applications. Use greenhouse_prospect_pools_list for the pools.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `created_at` (`string`, optional): Filter by when the record was created, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z
- `fields` (`string`, optional): Comma-separated list of fields to include in each result, to keep responses small. Allowed values: created_at, id, name, prospect_pool_id, sort_order, updated_at. Example: id,created_at,name
- `ids` (`string`, optional): Return only prospect pool stages with these ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `per_page` (`integer`, optional): Number of results to return, from 1 to 500. Defaults to 100. Results are ordered newest first (by id). Example: 100
- `prospect_pool_ids` (`string`, optional): Return only rows for these prospect pool ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `updated_at` (`string`, optional): Filter by when the record was last updated, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z

Example input: `{}`

### `greenhouse_prospect_pools_list`

List Prospect Pools · Read-only

List the organization's Greenhouse prospect pools, filtered by active status, department or office.
Returns prospect pools with id, name and active flag.
Use this to find a prospect_pool_id. Use greenhouse_prospect_pool_stages_list for the stages inside a pool.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `active` (`boolean`, optional): Filter by pool status. true returns active pools, false returns inactive (retained) pools. Example: true
- `created_at` (`string`, optional): Filter by when the record was created, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z
- `department_ids` (`string`, optional): Return only rows for these department ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `fields` (`string`, optional): Comma-separated list of fields to include in each result, to keep responses small. Allowed values: active, created_at, department_ids, description, id, job_ids, name, office_ids, updated_at. Example: id,active,created_at
- `ids` (`string`, optional): Return only prospect pools with these ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `job_ids` (`string`, optional): Return only prospect pools restricted to these job (hiring plan) ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `office_ids` (`string`, optional): Return only rows for these office ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `per_page` (`integer`, optional): Number of results to return, from 1 to 500. Defaults to 100. Results are ordered newest first (by id). Example: 100
- `updated_at` (`string`, optional): Filter by when the record was last updated, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z

Example input: `{}`

### `greenhouse_referrers_list`

List Referrers · Read-only

List the referrer records in Greenhouse (the people credited with referrals).
Returns referrers with id, name and user_id.
Use this to find a referrer_id for applications. Use greenhouse_sources_list for sources.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `created_at` (`string`, optional): Filter by when the record was created, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z
- `fields` (`string`, optional): Comma-separated list of fields to include in each result, to keep responses small. Allowed values: created_at, id, name, updated_at, user_id. Example: id,created_at,name
- `ids` (`string`, optional): Return only referrers with these ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `per_page` (`integer`, optional): Number of results to return, from 1 to 500. Defaults to 100. Results are ordered newest first (by id). Example: 100
- `updated_at` (`string`, optional): Filter by when the record was last updated, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z
- `user_ids` (`string`, optional): Return only referrer records made by these Greenhouse user ids. The user here is the Greenhouse user who made the referral; the resulting Referrer record is a separate entity (with its own id) attributed to that user. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003

Example input: `{}`

### `greenhouse_rejection_details_list`

List Rejection Details · Read-only

List rejection details recorded on rejected Greenhouse applications, filtered by application, rejection reason, or custom field option.
Returns rows with application_id, rejection_reason_id, rejected_by_id, rejected_at and rejection question answers.
Use this to analyze why candidates were rejected. Use greenhouse_rejection_detail_update to correct a record.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `application_ids` (`string`, optional): Return only rows for these application ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `created_at` (`string`, optional): Filter by when the record was created, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z
- `custom_field_option_id` (`integer`, optional): Return only rejection details whose question_custom_fields include the given custom field option. Use with single-select or multi-select rejection question custom fields to find every rejection tagged with a particular option. Example: 4012345002
- `fields` (`string`, optional): Comma-separated list of fields to include in each result, to keep responses small. Allowed values: application_id, created_at, id, question_custom_fields, rejected_at, rejected_by_id, rejection_note_id, rejection_reason_id, updated_at. Example: id,application_id,created_at
- `ids` (`string`, optional): Return only rejection details with these ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `per_page` (`integer`, optional): Number of results to return, from 1 to 500. Defaults to 100. Results are ordered newest first (by id). Example: 100
- `rejection_reason_ids` (`string`, optional): Return only rows for these rejection reason ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `updated_at` (`string`, optional): Filter by when the record was last updated, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z

Example input: `{}`

### `greenhouse_rejection_reason_get`

Get Rejection Reason · Read-only

Get one Greenhouse rejection reason by id.
Returns the rejection reason's id, name and type.
Use this when you already have a rejection_reason_id. Use greenhouse_rejection_reasons_list to browse all reasons.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `rejection_reason_id` (`integer`, required): Id of the rejection reason to get. Get it from greenhouse_rejection_reasons_list. Example: 4012345002
- `fields` (`string`, optional): Comma-separated list of fields to include in each result, to keep responses small. Allowed values: . Example: id

Example input: `{"rejection_reason_id":4012345002}`

### `greenhouse_rejection_reasons_list`

List Rejection Reasons · Read-only

List the organization's Greenhouse rejection reasons, optionally including Greenhouse's built-in defaults.
Returns rejection reasons with id, name and type.
Use this to find a rejection_reason_id for greenhouse_application_reject. Use greenhouse_rejection_reason_get to fetch one by id.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `created_at` (`string`, optional): Filter by when the record was created, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z
- `fields` (`string`, optional): Comma-separated list of fields to include in each result, to keep responses small. Allowed values: created_at, id, name, type, updated_at. Example: id,created_at,name
- `ids` (`string`, optional): Return only rejection reasons with these ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `include_defaults` (`boolean`, optional): Include Greenhouse's built-in default rejection reasons alongside the organization's customized list. Defaults to false, in which case only reasons created by the organization are returned. Set to true to also surface the standard set (e.g. Not a cultural fit, Lacking skill(s)/qualification(s), Wasn't interested, Didn't like offer) that every Greenhouse account starts with. Example: true
- `per_page` (`integer`, optional): Number of results to return, from 1 to 500. Defaults to 100. Results are ordered newest first (by id). Example: 100
- `updated_at` (`string`, optional): Filter by when the record was last updated, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z

Example input: `{}`

### `greenhouse_scorecard_question_answers_list`

List Scorecard Question Answers · Read-only

List the answers given to Greenhouse scorecard questions, filtered by scorecard or question.
Returns answer rows with scorecard_id, scorecard_question_id and the answer value.
Use this to read detailed interview feedback. Use greenhouse_scorecards_list for the overall rating and notes.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `created_at` (`string`, optional): Filter by when the record was created, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z
- `fields` (`string`, optional): Comma-separated list of fields to include in each result, to keep responses small. Allowed values: answer, answer_with_tags, boolean_value, created_at, id, scorecard_id, scorecard_question_id, updated_at, value. Example: id,answer,answer_with_tags
- `ids` (`string`, optional): Return only scorecard question answers with these ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `per_page` (`integer`, optional): Number of results to return, from 1 to 500. Defaults to 100. Results are ordered newest first (by id). Example: 100
- `scorecard_ids` (`string`, optional): Return only rows for these scorecard ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `scorecard_question_ids` (`string`, optional): Return only rows for these scorecard question ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `updated_at` (`string`, optional): Filter by when the record was last updated, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z

Example input: `{}`

### `greenhouse_scorecard_question_options_list`

List Scorecard Question Options · Read-only

List the answer options of single-select and multi-select Greenhouse scorecard questions, filtered by question or active status.
Returns options with id, scorecard_question_id, name, sort_order and active flag.
Use this to find option ids for question_answers in greenhouse_scorecard_create. Use greenhouse_scorecard_questions_list for the questions.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `active` (`boolean`, optional): Filter by whether the option is still selectable on its parent question. Defaults to returning both active and removed options; set true for live options only, false for removed only. Example: true
- `created_at` (`string`, optional): Filter by when the record was created, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z
- `fields` (`string`, optional): Comma-separated list of fields to include in each result, to keep responses small. Allowed values: active, created_at, id, name, scorecard_question_id, sort_order, updated_at. Example: id,active,created_at
- `ids` (`string`, optional): Return only scorecard question options with these ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `per_page` (`integer`, optional): Number of results to return, from 1 to 500. Defaults to 100. Results are ordered newest first (by id). Example: 100
- `scorecard_question_ids` (`string`, optional): Return only rows for these scorecard question ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `updated_at` (`string`, optional): Filter by when the record was last updated, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z

Example input: `{}`

### `greenhouse_scorecard_questions_list`

List Scorecard Questions · Read-only

List the questions on Greenhouse interview kit scorecards, filtered by interview kit or active status.
Returns questions with id, interview_kit_id, question text, answer_type and required flag.
Use this to find scorecard_question_id values for greenhouse_scorecard_create. Use greenhouse_scorecard_question_answers_list for submitted answers.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `active` (`boolean`, optional): Filter by whether the question is still in use on its interview kit. Defaults to returning both active and removed questions; set true for live questions only, false for removed only. Example: true
- `created_at` (`string`, optional): Filter by when the record was created, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z
- `fields` (`string`, optional): Comma-separated list of fields to include in each result, to keep responses small. Allowed values: active, answer_type, created_at, id, interview_kit_id, question, required, sort_order, updated_at. Example: id,active,answer_type
- `ids` (`string`, optional): Return only scorecard questions with these ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `interview_kit_ids` (`string`, optional): Return only scorecard questions attached to these interview kit ids. An interview kit is a stage's interview definition on a job, and its scorecard questions make up the rubric interviewers score against; look up kits for a job via greenhouse_interview_kits_list (filtered by job_ids). Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `per_page` (`integer`, optional): Number of results to return, from 1 to 500. Defaults to 100. Results are ordered newest first (by id). Example: 100
- `updated_at` (`string`, optional): Filter by when the record was last updated, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z

Example input: `{}`

### `greenhouse_scorecards_list`

List Scorecards · Read-only

List Greenhouse interview scorecards, filtered by application, interview kit, interviewer, submitter, status, or interview or submission time.
Returns scorecards with id, application_id, interviewer, candidate_rating, notes, status and submitted_at.
Use this to read interview feedback. Use greenhouse_scorecard_question_answers_list for the answers to each scorecard question.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `application_ids` (`string`, optional): Return only rows for these application ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `created_at` (`string`, optional): Filter by when the record was created, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z
- `fields` (`string`, optional): Comma-separated list of fields to include in each result, to keep responses small. Allowed values: application_id, candidate_rating, created_at, id, interview_kit_id, interviewed_at, interviewer_id, notes, notes_with_tags, private_notes, private_notes_with_tags, public_notes, public_notes_with_tags, status, submitted_at, submitter_id, updated_at. Example: id,application_id,candidate_rating
- `ids` (`string`, optional): Return only scorecards with these ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `interview_kit_ids` (`string`, optional): Return only rows for these interview kit ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `interviewed_at_after` (`string`, optional): Filter by interview timestamp on the scorecard: return records on or after this value, given as an ISO 8601 date-time. Example: 2026-01-01T00:00:00Z
- `interviewed_at_before` (`string`, optional): Filter by interview timestamp on the scorecard: return records on or before this value, given as an ISO 8601 date-time. Example: 2026-01-01T00:00:00Z
- `interviewer_ids` (`string`, optional): Return only scorecards assigned to these interviewer user ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `per_page` (`integer`, optional): Number of results to return, from 1 to 500. Defaults to 100. Results are ordered newest first (by id). Example: 100
- `status` (`string`, optional): Filter by scorecard lifecycle status. draft returns in-progress scorecards; complete returns submitted scorecards. One of: draft, complete. Example: draft. One of: `draft`, `complete`.
- `submitted_at_after` (`string`, optional): Filter by submission timestamp: return records on or after this value, given as an ISO 8601 date-time. Example: 2026-01-01T00:00:00Z
- `submitted_at_before` (`string`, optional): Filter by submission timestamp: return records on or before this value, given as an ISO 8601 date-time. Example: 2026-01-01T00:00:00Z
- `submitter_ids` (`string`, optional): Return only rows for these submitter ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `updated_at` (`string`, optional): Filter by when the record was last updated, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z

Example input: `{}`

### `greenhouse_sources_list`

List Sources · Read-only

List the candidate sources configured in Greenhouse (job boards, referrals, agencies and others).
Returns sources with id, name and type.
Use this to find a source_id for applications. Use greenhouse_referrers_list for individual referrers.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `created_at` (`string`, optional): Filter by when the record was created, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z
- `fields` (`string`, optional): Comma-separated list of fields to include in each result, to keep responses small. Allowed values: created_at, id, name, type, updated_at. Example: id,created_at,name
- `ids` (`string`, optional): Return only sources with these ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `per_page` (`integer`, optional): Number of results to return, from 1 to 500. Defaults to 100. Results are ordered newest first (by id). Example: 100
- `updated_at` (`string`, optional): Filter by when the record was last updated, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z

Example input: `{}`

### `greenhouse_tracking_links_list`

List Tracking Links · Read-only

List Greenhouse source tracking links, filtered by token, job post, job board, source, referrer, or related post.
Returns tracking links with id, token, source_id, referrer_id, job_id, job_post_id and job_board_id.
Use this to resolve a gh_src token to its source. Use greenhouse_sources_list for the sources themselves.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `created_at` (`string`, optional): Filter by when the record was created, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z
- `fields` (`string`, optional): Comma-separated list of fields to include in each result, to keep responses small. Allowed values: created_at, id, job_board_id, job_id, job_post_id, referrer_id, related_post_id, related_post_type, source_id, token, updated_at. Example: id,created_at,job_board_id
- `ids` (`string`, optional): Return only tracking links with these ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `job_board_ids` (`string`, optional): Return only rows for these job board ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `job_ids` (`string`, optional): Return only tracking links attached to these job (hiring plan) ids. A tracking link points at the careers page or a specific job post for these jobs. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `job_post_ids` (`string`, optional): Return only rows for these job post ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `per_page` (`integer`, optional): Number of results to return, from 1 to 500. Defaults to 100. Results are ordered newest first (by id). Example: 100
- `referrer_ids` (`string`, optional): Return only tracking links attributed to these referrer ids. A referrer is the Greenhouse Referrer record (see greenhouse_referrers_list) — not a user id. Look up the referrer id for a user via that endpoint first. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `related_post_ids` (`string`, optional): Return only tracking links generated for these related_post ids — the external post the link was distributed on (e.g. a tweet, LinkedIn post, or ProgrammaticSourcing::AppcastJobAd). Pair with related_post_type to disambiguate, since related_post is polymorphic. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `related_post_type` (`string`, optional): Filter by the polymorphic related_post class name (e.g. Application, ProgrammaticSourcing::AppcastJobAd). Combine with related_post_ids to narrow to a specific record of that type. Example: JobPost
- `source_ids` (`string`, optional): Return only rows for these source ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `token` (`string`, optional): Return the tracking link with this exact short-URL token (the gh_src value). Useful for resolving an incoming application's gh_src back to the link that generated it. Example: abc123
- `updated_at` (`string`, optional): Filter by when the record was last updated, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z

Example input: `{}`

### `greenhouse_user_roles_list`

List User Roles · Read-only

List the job-level and organization-level user roles defined in Greenhouse.
Returns roles with id, name and role_type.
Use this to interpret user permission data. Use greenhouse_users_list for the users themselves.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `created_at` (`string`, optional): Filter by when the record was created, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z
- `fields` (`string`, optional): Comma-separated list of fields to include in each result, to keep responses small. Allowed values: created_at, id, name, role_type, updated_at. Example: id,created_at,name
- `ids` (`string`, optional): Return only user roles with these ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `per_page` (`integer`, optional): Number of results to return, from 1 to 500. Defaults to 100. Results are ordered newest first (by id). Example: 100
- `updated_at` (`string`, optional): Filter by when the record was last updated, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z

Example input: `{}`

### `greenhouse_users_list`

List Users · Read-only

List Greenhouse users (recruiters, hiring managers, interviewers and admins), filtered by email, employee id, department, office, or activation state.
Returns users with id, name, primary email, employee_id, site admin flag, department and office ids.
Use this to find a user_id for hiring team, interview, note or scorecard tools.

Read only: yes. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `agency_ids` (`string`, optional): Return only users belonging to one of these recruiting Agency ids. Greenhouse stores agencies as separate records from users — Harvest lists agencies at GET /v3/agencies, which has no tool here. Users without an agency association will not match. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `created_at` (`string`, optional): Filter by when the record was created, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z
- `custom_field_option_id` (`integer`, optional): Return only users whose user-attribute custom field value selects this custom_field_option id. Example: 4012345002
- `deactivated` (`boolean`, optional): Filter by activation state. true returns only deactivated users; false returns only active users; omit to return both. Example: true
- `department_ids` (`string`, optional): Return only rows for these department ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `employee_ids` (`string`, optional): Return only users whose employee_id is in this list. Useful for HRIS-driven sync where the partner only has external employee identifiers. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `external_department_id` (`string`, optional): Return only users assigned to the department whose external_id matches this value. Use this when the partner only has external department identifiers; prefer department_id (via the parent filter) when the Greenhouse id is already known. Example: DEPT-ENG
- `external_office_id` (`string`, optional): Return only users assigned to the office whose external_id matches this value. Use this when the partner only has external office identifiers; prefer office_id (via the parent filter) when the Greenhouse id is already known. Example: OFF-NYC
- `fields` (`string`, optional): Comma-separated list of fields to include in each result, to keep responses small. Allowed values: agency_id, created_at, custom_fields, deactivated, department_ids, emails, employee_id, first_name, id, interviewer_tags, job_title, last_name, linked_candidate_ids, name, office_ids, primary_email, site_admin, updated_at. Example: id,agency_id,created_at
- `ids` (`string`, optional): Return only users with these ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `interviewer_tag_ids` (`string`, optional): Return only users who have one of these interviewer Tag ids assigned. Interviewer tags are used to group users into interview panels — resolve ids via the tags endpoint. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `linked_candidate_ids` (`string`, optional): Return only users who are linked to one of these candidate ids via a person link (used when a candidate also exists as a Greenhouse user, e.g. an ex-employee re-entering the funnel). Look up the candidate id via greenhouse_candidates_list. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `office_ids` (`string`, optional): Return only rows for these office ids. Pass a comma-separated list of ids (up to 50). Example: 4012345002,4012345003
- `per_page` (`integer`, optional): Number of results to return, from 1 to 500. Defaults to 100. Results are ordered newest first (by id). Example: 100
- `primary_email` (`string`, optional): Return only the user whose primary_email matches this address (exact match). Example: recruiter@example.com
- `show_service_accounts` (`boolean`, optional): If true, include integration/service-account users (used by Harvest integrations and ISUs) in the result set. Defaults to false, which omits them. Example: true
- `updated_at` (`string`, optional): Filter by when the record was last updated, written as operator|timestamp where operator is gte, lte, gt or lt and the timestamp is ISO 8601. Do not combine created_at and updated_at in one call. Example: gte|2026-01-01T00:00:00Z

Example input: `{}`

### `greenhouse_application_convert_to_candidate`

Convert Prospect to Candidate · Write

Convert a Greenhouse prospect application into a candidate application on a specific job, optionally at a chosen interview stage.
Returns the new candidate application; the prospect application's status becomes converted.
Use this when a prospect is ready to interview. Use greenhouse_application_create to add a fresh application instead.
Requires a prospect application id from greenhouse_applications_list (prospect true) and a job_id the prospect is attached to.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `application_id` (`integer`, required): Id of the application to act on. Get it from greenhouse_applications_list. Example: 4012345002
- `job_id` (`integer`, required): Id of the Greenhouse job. Get it from greenhouse_jobs_list. Example: 4012345002
- `to_job_interview_stage_id` (`integer`, optional): Id of the job interview stage to place the new candidate application in. Defaults to the job's first stage. Get it from greenhouse_job_interview_stages_list. Example: 4012345002

Example input: `{"application_id":4012345002,"job_id":4012345002}`

### `greenhouse_application_create`

Create Application · Write

Create an application for an existing Greenhouse candidate on a job, or a prospect application when prospect is true.
Returns the created application.
Use this to add a job application for a known candidate. Use greenhouse_candidate_create to create a new person and their first application together.
Requires a candidate_id from greenhouse_candidates_list and a job_id from greenhouse_jobs_list.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `candidate_id` (`integer`, required): Id of the Greenhouse candidate. Get it from greenhouse_candidates_list. Example: 4012345002
- `coordinator_id` (`integer`, optional): Greenhouse user id of the coordinator responsible for the application. Get it from greenhouse_users_list. Example: 4012345002
- `created_at` (`string`, optional): Backdated creation time for the application, in ISO 8601, for records migrated from another system. Example: 2026-01-15T14:00:00Z
- `custom_fields` (`array`, optional): Custom field values to set. Each entry names the field by name_key or custom_field_id and gives a value shaped for the field type: text, boolean, number, option name or id, a list of options, or a currency object with amount and currency_code. Pass null as the value to clear it. Use greenhouse_custom_fields_list to see the available fields. Example: [{"name_key": "desired_salary", "value": "120000"}]
- `initial_stage_id` (`integer`, optional): Id of the job interview stage to place the new application in. Defaults to the job's first stage. Get it from greenhouse_job_interview_stages_list. Example: 4012345002
- `job_id` (`integer`, optional): Id of the job to apply the candidate to. Required unless prospect is true. Get it from greenhouse_jobs_list. Example: 4012345002
- `job_ids` (`array`, optional): Ids of the jobs to attach a prospect application to. Only used when prospect is true. Example: [4012345002]
- `prospect` (`boolean`, optional): Set true to create a prospect application instead of a candidate application on a job. Example: true
- `prospect_owner_id` (`integer`, optional): Greenhouse user id of the prospect's owner. Get it from greenhouse_users_list. Example: 4012345002
- `prospect_pool_id` (`integer`, optional): Id of the prospect pool to put the prospect in. Get it from greenhouse_prospect_pools_list. Example: 4012345002
- `prospect_pool_stage_id` (`integer`, optional): Id of the stage within the prospect pool. Get it from greenhouse_prospect_pool_stages_list. Example: 4012345002
- `prospective_department_id` (`integer`, optional): Id of the department the prospect is being considered for. Get it from greenhouse_departments_list. Example: 4012345002
- `prospective_office_id` (`integer`, optional): Id of the office the prospect is being considered for. Get it from greenhouse_offices_list. Example: 4012345002
- `recruiter_id` (`integer`, optional): Greenhouse user id of the recruiter responsible for the application. Get it from greenhouse_users_list. Example: 4012345002
- `referrer_id` (`integer`, optional): Id of the referrer credited for the application. Get it from greenhouse_referrers_list (not a user id). Example: 4012345002
- `source_id` (`integer`, optional): Id of the source credited for the application. Get it from greenhouse_sources_list. Example: 4000001002

Example input: `{"candidate_id":4012345002}`

### `greenhouse_application_hire`

Hire Application · Write

Mark a Greenhouse application as hired and close the job opening it fills, with an optional start date and close reason.
Returns no content on success (HTTP 204).
Use this when a candidate accepts and the hire is final. Use greenhouse_offer_update to record offer acceptance details.
Requires an opening_id from greenhouse_openings_list when the job has more than one open opening.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `application_id` (`integer`, required): Id of the application to act on. Get it from greenhouse_applications_list. Example: 4012345002
- `close_reason_id` (`integer`, optional): Id of the close reason for the opening being filled, usually a Hire reason. Get it from greenhouse_close_reasons_list. Example: 4012345002
- `opening_id` (`integer`, optional): Id of the job opening this hire fills. Required when the job has more than one open opening. Get it from greenhouse_openings_list. Example: 4012345002
- `start_date` (`string`, optional): The new hire's start date, as YYYY-MM-DD. Example: 2026-03-02

Example input: `{"application_id":4012345002}`

### `greenhouse_application_move`

Move Application · Write

Move a Greenhouse application to another interview stage on the same job, or transfer it to a different job.
Returns no content on success (HTTP 204).
Use this to advance or move back a candidate. Use greenhouse_application_reject to reject and greenhouse_application_hire to hire.
Requires the application's current stage id (from_stage_id) from greenhouse_applications_list and a target from greenhouse_job_interview_stages_list.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `application_id` (`integer`, required): Id of the application to act on. Get it from greenhouse_applications_list. Example: 4012345002
- `from_stage_id` (`integer`, required): Id of the application's current stage. It must match the current stage, as a guard against moving a stale record. Get it from the stage_id field in greenhouse_applications_list. Example: 4012345002
- `email_from_user_id` (`integer`, optional): Greenhouse user id that automated stage-change emails are sent from. Example: 4012345002
- `to_job_id` (`integer`, optional): Id of a different job to transfer the application to; it lands on that job's first stage. Give this or to_stage_id. Example: 4012345002
- `to_stage_id` (`integer`, optional): Id of the job interview stage to move to, on the same job. Get it from greenhouse_job_interview_stages_list. Give this or to_job_id. Example: 4012345002

Example input: `{"application_id":4012345002,"from_stage_id":4012345002}`

### `greenhouse_application_reject`

Reject Application · Write

Reject a Greenhouse application with a rejection reason, optional notes, and an optional templated rejection email.
Returns no content on success (HTTP 204).
Use this to close out a candidacy and keep its history. Use greenhouse_application_unreject to reverse it, or greenhouse_application_delete to remove the application entirely.
Requires a rejection_reason_id from greenhouse_rejection_reasons_list.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `application_id` (`integer`, required): Id of the application to act on. Get it from greenhouse_applications_list. Example: 4012345002
- `rejection_reason_id` (`integer`, required): Id of the rejection reason to record. Get it from greenhouse_rejection_reasons_list. Example: 4012345002
- `custom_fields` (`array`, optional): Custom field values to set. Each entry names the field by name_key or custom_field_id and gives a value shaped for the field type: text, boolean, number, option name or id, a list of options, or a currency object with amount and currency_code. Pass null as the value to clear it. Use greenhouse_custom_fields_list to see the available fields. Example: [{"name_key": "desired_salary", "value": "120000"}]
- `notes` (`string`, optional): Internal notes explaining the rejection. Example: Not enough experience with distributed systems.
- `rejection_email` (`object`, optional): Optional rejection email to the candidate. Give email_template_id (from greenhouse_email_templates_list) and email_from_user_id, and send_email_at in ISO 8601 to schedule it for later. Example: {"email_template_id": 4012345002, "email_from_user_id": 4012345003}

Example input: `{"application_id":4012345002,"rejection_reason_id":4012345002}`

### `greenhouse_application_unreject`

Unreject Application · Write

Reverse the rejection of a Greenhouse application, returning it to the stage it was rejected from and clearing the rejection reason.
Returns no content on success (HTTP 204).
Use this to bring a rejected candidate back into consideration. Use greenhouse_application_reject to reject one.
Requires the id of a rejected application from greenhouse_applications_list (status rejected).

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `application_id` (`integer`, required): Id of the application to act on. Get it from greenhouse_applications_list. Example: 4012345002

Example input: `{"application_id":4012345002}`

### `greenhouse_application_update`

Update Application · Write

Update attribution fields on a Greenhouse application: source, referrer, recruiter, coordinator, prospect pool and stage, rejection date, or custom fields.
Returns the updated application.
Use this to fix metadata. Use greenhouse_application_move, greenhouse_application_reject or greenhouse_application_hire to change the application's stage or outcome.
Requires an application_id from greenhouse_applications_list.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `application_id` (`integer`, required): Id of the application to update. Get it from greenhouse_applications_list. Example: 4012345002
- `coordinator_id` (`integer`, optional): Greenhouse user id of the coordinator responsible for the application. Get it from greenhouse_users_list. Example: 4012345002
- `created_at` (`string`, optional): Backdated creation time for the application, in ISO 8601, for records migrated from another system. Example: 2026-01-15T14:00:00Z
- `custom_fields` (`array`, optional): Custom field values to set. Each entry names the field by name_key or custom_field_id and gives a value shaped for the field type: text, boolean, number, option name or id, a list of options, or a currency object with amount and currency_code. Pass null as the value to clear it. Use greenhouse_custom_fields_list to see the available fields. Example: [{"name_key": "desired_salary", "value": "120000"}]
- `prospect_pool_id` (`number`, optional): Id of the prospect pool to put the prospect in. Get it from greenhouse_prospect_pools_list. Example: 4012345002
- `prospect_stage_id` (`number`, optional): Id of the prospect pool stage to move the prospect to. Get it from greenhouse_prospect_pool_stages_list. Example: 4012345002
- `recruiter_id` (`integer`, optional): Greenhouse user id of the recruiter responsible for the application. Get it from greenhouse_users_list. Example: 4012345002
- `referrer_id` (`integer`, optional): Id of the referrer credited for the application. Get it from greenhouse_referrers_list (not a user id). Example: 4012345002
- `rejected_at` (`string`, optional): Backdated rejection time for an already rejected application, in ISO 8601. Example: 2026-01-15T14:00:00Z
- `source_id` (`integer`, optional): Id of the source credited for the application. Get it from greenhouse_sources_list. Example: 4000001002

Example input: `{"application_id":4012345002}`

### `greenhouse_applied_candidate_tag_create`

Apply Tag to Candidate · Write

Apply an existing tag to a Greenhouse candidate.
Returns the created applied-tag row.
Use this to tag one candidate. Use greenhouse_candidate_tag_create first if the tag does not exist yet.
Requires a candidate_id from greenhouse_candidates_list and a candidate_tag_id from greenhouse_candidate_tags_list.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `candidate_id` (`integer`, required): Id of the Greenhouse candidate. Get it from greenhouse_candidates_list. Example: 4012345002
- `candidate_tag_id` (`integer`, required): Id of the candidate tag to apply. Get it from greenhouse_candidate_tags_list. Example: 4012345002

Example input: `{"candidate_id":4012345002,"candidate_tag_id":4012345002}`

### `greenhouse_attachment_create`

Create Attachment · Write

Attach a file to a Greenhouse application, supplied as base64 content or a publicly fetchable URL.
Returns the created attachment.
Use this to upload a resume, cover letter or other document. Use greenhouse_attachments_list to see existing files.
Requires an application_id from greenhouse_applications_list.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `application_id` (`integer`, required): Id of the application the attachment will be associated with. Example: 4012345002
- `filename` (`string`, required): Filename to store the attachment under, including extension. Extensions present in the organization's blocklisted-extensions list are rejected. Example: jane-doe-resume.pdf
- `type` (`string`, required): Classification of the attachment. resume, cover_letter, and take_home_test are candidate-supplied documents; offer_packet, offer_letter, and signed_offer_letter are offer documents; midfunnel_agreement and automated_agreement are e-signed documents; form_attachment is generated by Greenhouse forms; other is the free-form bucket. One of: resume, cover_letter, take_home_test, offer_packet, offer_letter, signed_offer_letter, other, form_attachment, midfunnel_agreement, automated_agreement. Example: resume. One of: `resume`, `cover_letter`, `take_home_test`, `offer_packet`, `offer_letter`, `signed_offer_letter`, `other`, `form_attachment`, `midfunnel_agreement`, `automated_agreement`.
- `content` (`string`, optional): Base64-encoded file contents. Provide either content or url, not both. Example: JVBERi0xLjQKJcfsj6IK...
- `url` (`string`, optional): Publicly fetchable URL Greenhouse should download the file from. Provide either url or content, not both. Example: https://example.com/files/resume.pdf
- `visibility` (`string`, optional): Who can see the attachment within Greenhouse. public is visible to site admins, job admins, and assigned interviewers; admin_only is restricted to site admins and assigned job admins; private is restricted to admins with explicit private-candidate access. Defaults are inferred from type when omitted. One of: admin_only, private, public. Example: admin_only. One of: `admin_only`, `private`, `public`.

Example input: `{"application_id":4012345002,"filename":"<filename>","type":"resume"}`

### `greenhouse_candidate_create`

Create Candidate · Write

Create a Greenhouse candidate profile, optionally with a first application on a job or in a prospect pool.
Returns the created candidate and, when an application was supplied, the created application.
Use this for a new person. Use greenhouse_application_create to add another job application for an existing candidate.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `first_name` (`string`, required): The candidate's legal first name. Example: Jane
- `last_name` (`string`, required): The candidate's last name. Example: Doe
- `addresses` (`array`, optional): Postal addresses for the candidate. Each entry has a value and a type: home, work or other. On update this replaces the whole list. Example: [{"value": "123 Main St, New York, NY", "type": "home"}]
- `application` (`object`, optional): An optional first application to create with the candidate. Give job_id to make an applicant on that job, or prospect_pool_id (and no job_id) to make a prospect. It also accepts source_id, recruiter_id, coordinator_id, referrer_id, initial_stage_id and custom_fields. Example: {"job_id": 4012345002, "source_id": 4000001002}
- `can_email` (`boolean`, optional): Whether the candidate has consented to receive email from your organization. Example: true
- `company` (`string`, optional): The candidate's current employer, as shown on their profile. Example: Acme Corp
- `custom_fields` (`array`, optional): Custom field values to set. Each entry names the field by name_key or custom_field_id and gives a value shaped for the field type: text, boolean, number, option name or id, a list of options, or a currency object with amount and currency_code. Pass null as the value to clear it. Use greenhouse_custom_fields_list to see the available fields. Example: [{"name_key": "desired_salary", "value": "120000"}]
- `email_addresses` (`array`, optional): Email addresses for the candidate. Each entry has a value and a type: personal, work or other. On update this replaces the whole list. Example: [{"value": "jane.doe@example.com", "type": "personal"}]
- `linked_user_ids` (`array`, optional): Greenhouse user ids linked to this candidate, for internal candidates who are also employees. On update this replaces the whole list. Example: [4012345002]
- `phone_numbers` (`array`, optional): Phone numbers for the candidate. Each entry has a value and a type: home, work, mobile, skype or other. On update this replaces the whole list. Example: [{"value": "+1 555 010 0199", "type": "mobile"}]
- `preferred_name` (`string`, optional): The name the candidate prefers to go by, when different from the legal first name. Example: Jo
- `social_media_addresses` (`array`, optional): Social media profile links for the candidate. Each entry has a value. On update this replaces the whole list. Example: [{"value": "https://linkedin.com/in/janedoe"}]
- `tags` (`array`, optional): Tag names to put on the candidate. Tags that do not exist yet are created. On update this replaces the whole list. Example: ["python", "referral"]
- `time_zone` (`string`, optional): The candidate's time zone, as a lowercase Rails-style zone name from the allowed list. Example: eastern time (us & canada). One of: `international date line west`, `midway island`, `american samoa`, `hawaii`, `alaska`, `pacific time (us & canada)`, `tijuana`, `mountain time (us & canada)`, `arizona`, `chihuahua`, `mazatlan`, `central time (us & canada)`, `saskatchewan`, `guadalajara`, `mexico city`, `monterrey`, `central america`, `eastern time (us & canada)`, `indiana (east)`, `bogota`, `lima`, `quito`, `atlantic time (canada)`, `caracas`, `la paz`, `santiago`, `asuncion`, `newfoundland`, `brasilia`, `buenos aires`, `montevideo`, `georgetown`, `puerto rico`, `greenland`, `mid-atlantic`, `azores`, `cape verde is.`, `dublin`, `edinburgh`, `lisbon`, `london`, `casablanca`, `monrovia`, `utc`, `belgrade`, `bratislava`, `budapest`, `ljubljana`, `prague`, `sarajevo`, `skopje`, `warsaw`, `zagreb`, `brussels`, `copenhagen`, `madrid`, `paris`, `amsterdam`, `berlin`, `bern`, `zurich`, `rome`, `stockholm`, `vienna`, `west central africa`, `bucharest`, `cairo`, `helsinki`, `kyiv`, `riga`, `sofia`, `tallinn`, `vilnius`, `athens`, `istanbul`, `minsk`, `jerusalem`, `harare`, `pretoria`, `kaliningrad`, `moscow`, `st. petersburg`, `volgograd`, `samara`, `kuwait`, `riyadh`, `nairobi`, `baghdad`, `tehran`, `abu dhabi`, `muscat`, `baku`, `tbilisi`, `yerevan`, `kabul`, `ekaterinburg`, `islamabad`, `karachi`, `tashkent`, `chennai`, `kolkata`, `mumbai`, `new delhi`, `kathmandu`, `dhaka`, `sri jayawardenepura`, `almaty`, `astana`, `novosibirsk`, `rangoon`, `bangkok`, `hanoi`, `jakarta`, `krasnoyarsk`, `beijing`, `chongqing`, `hong kong`, `urumqi`, `kuala lumpur`, `singapore`, `taipei`, `perth`, `irkutsk`, `ulaanbaatar`, `seoul`, `osaka`, `sapporo`, `tokyo`, `yakutsk`, `darwin`, `adelaide`, `canberra`, `melbourne`, `sydney`, `brisbane`, `hobart`, `vladivostok`, `guam`, `port moresby`, `magadan`, `srednekolymsk`, `solomon is.`, `new caledonia`, `fiji`, `kamchatka`, `marshall is.`, `auckland`, `wellington`, `nuku'alofa`, `tokelau is.`, `chatham is.`, `samoa`.
- `title` (`string`, optional): The candidate's current job title, as shown on their profile. Example: Senior Engineer
- `website_addresses` (`array`, optional): Websites for the candidate. Each entry has a value and a type: personal, company, portfolio, blog or other. On update this replaces the whole list. Example: [{"value": "https://janedoe.dev", "type": "portfolio"}]

Example input: `{"first_name":"<first_name>","last_name":"<last_name>"}`

### `greenhouse_candidate_education_create`

Create Candidate Education · Write

Add an education entry to a Greenhouse candidate profile using school, degree and discipline option ids.
Returns the created education entry.
Use this to record schooling. Use greenhouse_candidate_employment_create to record a job.
Requires a candidate_id from greenhouse_candidates_list; school, degree and discipline ids come from greenhouse_custom_field_options_list.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `candidate_id` (`integer`, required): Id of the Greenhouse candidate. Get it from greenhouse_candidates_list. Example: 4012345002
- `degree_custom_field_option_id` (`integer`, optional): Option id of the degree. Get it from greenhouse_custom_field_options_list with custom_field_key degree. Example: 4012345002
- `discipline_custom_field_option_id` (`integer`, optional): Option id of the discipline. Get it from greenhouse_custom_field_options_list with custom_field_key discipline. Example: 4012345002
- `end_date` (`string`, optional): End date of the education, as YYYY-MM-DD. Example: 2020-05-31
- `end_date_month` (`integer`, optional): End month (1-12), when you only have a month and year instead of end_date. Example: 5
- `end_date_year` (`integer`, optional): End year, when you only have a month and year instead of end_date. Example: 2020
- `school_name_custom_field_option_id` (`integer`, optional): Option id of the school. Get it from greenhouse_custom_field_options_list with custom_field_key school_name. Example: 4012345002
- `start_date` (`string`, optional): Start date of the education, as YYYY-MM-DD. Example: 2016-09-01
- `start_date_month` (`integer`, optional): Start month (1-12), when you only have a month and year instead of start_date. Example: 9
- `start_date_year` (`integer`, optional): Start year, when you only have a month and year instead of start_date. Example: 2016

Example input: `{"candidate_id":4012345002}`

### `greenhouse_candidate_employment_create`

Create Candidate Employment · Write

Add a work history entry (company, title, dates) to a Greenhouse candidate profile.
Returns the created employment entry.
Use this to record a past or current job. Use greenhouse_candidate_education_create to record schooling.
Requires a candidate_id from greenhouse_candidates_list.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `candidate_id` (`integer`, required): Id of the candidate (person) the employment entry belongs to. Example: 4012345002
- `company_name` (`string`, required): Free-text name of the employer. Example: Acme Corp
- `start_date` (`string`, required): Start date of the employment, as YYYY-MM-DD. Only month and year are kept. Example: 2019-06-01
- `title` (`string`, required): The candidate's job title at this employer. Example: Software Engineer
- `end_date` (`string`, optional): End date of the employment, as YYYY-MM-DD. Omit when this is the candidate's current job. Example: 2023-08-31

Example input: `{"candidate_id":4012345002,"company_name":"<company_name>","start_date":"<start_date>","title":"<title>"}`

### `greenhouse_candidate_tag_create`

Create Candidate Tag · Write

Add a new tag to the organization's Greenhouse candidate tag dictionary.
Returns the created tag.
Use this to define a new tag. Use greenhouse_applied_candidate_tag_create to put a tag on a candidate.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `name` (`string`, required): Name of the candidate tag to create. Example: python

Example input: `{"name":"<name>"}`

### `greenhouse_candidate_update`

Update Candidate · Write

Update fields on an existing Greenhouse candidate profile; array fields such as emails, phones and tags replace the whole list.
Returns the updated candidate.
Use this to edit profile data. Use greenhouse_application_update to change source, recruiter or other application fields.
Requires a candidate_id from greenhouse_candidates_list.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `candidate_id` (`integer`, required): Id of the candidate to update. Get it from greenhouse_candidates_list. Example: 4012345002
- `addresses` (`array`, optional): Postal addresses for the candidate. Each entry has a value and a type: home, work or other. On update this replaces the whole list. Example: [{"value": "123 Main St, New York, NY", "type": "home"}]
- `can_email` (`boolean`, optional): Whether the candidate has consented to receive email from your organization. Example: true
- `company` (`string`, optional): The candidate's current employer, as shown on their profile. Example: Acme Corp
- `custom_fields` (`array`, optional): Custom field values to set. Each entry names the field by name_key or custom_field_id and gives a value shaped for the field type: text, boolean, number, option name or id, a list of options, or a currency object with amount and currency_code. Pass null as the value to clear it. Use greenhouse_custom_fields_list to see the available fields. Example: [{"name_key": "desired_salary", "value": "120000"}]
- `email_addresses` (`array`, optional): Email addresses for the candidate. Each entry has a value and a type: personal, work or other. On update this replaces the whole list. Example: [{"value": "jane.doe@example.com", "type": "personal"}]
- `first_name` (`string`, optional): The candidate's legal first name. Example: Jane
- `is_private` (`boolean`, optional): Set true to restrict the candidate to users with View Private Candidates access. Example: false
- `last_name` (`string`, optional): The candidate's last name. Example: Doe
- `linked_user_ids` (`array`, optional): Greenhouse user ids linked to this candidate, for internal candidates who are also employees. On update this replaces the whole list. Example: [4012345002]
- `phone_numbers` (`array`, optional): Phone numbers for the candidate. Each entry has a value and a type: home, work, mobile, skype or other. On update this replaces the whole list. Example: [{"value": "+1 555 010 0199", "type": "mobile"}]
- `preferred_name` (`string`, optional): The name the candidate prefers to go by, when different from the legal first name. Example: Jo
- `social_media_addresses` (`array`, optional): Social media profile links for the candidate. Each entry has a value. On update this replaces the whole list. Example: [{"value": "https://linkedin.com/in/janedoe"}]
- `tags` (`array`, optional): Tag names to put on the candidate. Tags that do not exist yet are created. On update this replaces the whole list. Example: ["python", "referral"]
- `time_zone` (`string`, optional): The candidate's time zone, as a lowercase Rails-style zone name from the allowed list. Example: eastern time (us & canada). One of: `international date line west`, `midway island`, `american samoa`, `hawaii`, `alaska`, `pacific time (us & canada)`, `tijuana`, `mountain time (us & canada)`, `arizona`, `chihuahua`, `mazatlan`, `central time (us & canada)`, `saskatchewan`, `guadalajara`, `mexico city`, `monterrey`, `central america`, `eastern time (us & canada)`, `indiana (east)`, `bogota`, `lima`, `quito`, `atlantic time (canada)`, `caracas`, `la paz`, `santiago`, `asuncion`, `newfoundland`, `brasilia`, `buenos aires`, `montevideo`, `georgetown`, `puerto rico`, `greenland`, `mid-atlantic`, `azores`, `cape verde is.`, `dublin`, `edinburgh`, `lisbon`, `london`, `casablanca`, `monrovia`, `utc`, `belgrade`, `bratislava`, `budapest`, `ljubljana`, `prague`, `sarajevo`, `skopje`, `warsaw`, `zagreb`, `brussels`, `copenhagen`, `madrid`, `paris`, `amsterdam`, `berlin`, `bern`, `zurich`, `rome`, `stockholm`, `vienna`, `west central africa`, `bucharest`, `cairo`, `helsinki`, `kyiv`, `riga`, `sofia`, `tallinn`, `vilnius`, `athens`, `istanbul`, `minsk`, `jerusalem`, `harare`, `pretoria`, `kaliningrad`, `moscow`, `st. petersburg`, `volgograd`, `samara`, `kuwait`, `riyadh`, `nairobi`, `baghdad`, `tehran`, `abu dhabi`, `muscat`, `baku`, `tbilisi`, `yerevan`, `kabul`, `ekaterinburg`, `islamabad`, `karachi`, `tashkent`, `chennai`, `kolkata`, `mumbai`, `new delhi`, `kathmandu`, `dhaka`, `sri jayawardenepura`, `almaty`, `astana`, `novosibirsk`, `rangoon`, `bangkok`, `hanoi`, `jakarta`, `krasnoyarsk`, `beijing`, `chongqing`, `hong kong`, `urumqi`, `kuala lumpur`, `singapore`, `taipei`, `perth`, `irkutsk`, `ulaanbaatar`, `seoul`, `osaka`, `sapporo`, `tokyo`, `yakutsk`, `darwin`, `adelaide`, `canberra`, `melbourne`, `sydney`, `brisbane`, `hobart`, `vladivostok`, `guam`, `port moresby`, `magadan`, `srednekolymsk`, `solomon is.`, `new caledonia`, `fiji`, `kamchatka`, `marshall is.`, `auckland`, `wellington`, `nuku'alofa`, `tokelau is.`, `chatham is.`, `samoa`.
- `title` (`string`, optional): The candidate's current job title, as shown on their profile. Example: Senior Engineer
- `website_addresses` (`array`, optional): Websites for the candidate. Each entry has a value and a type: personal, company, portfolio, blog or other. On update this replaces the whole list. Example: [{"value": "https://janedoe.dev", "type": "portfolio"}]

Example input: `{"candidate_id":4012345002}`

### `greenhouse_interview_create`

Create Interview · Write

Record a scheduled interview on a Greenhouse application for an event on your own calendar, with its panel, time, location and video link.
Returns the created interview. Greenhouse does not create the calendar event or send invites.
Use this to sync an externally scheduled interview into Greenhouse. Use greenhouse_interview_update to change one.
Requires an application_id from greenhouse_applications_list and a job_interview_id from greenhouse_job_interviews_list.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `application_id` (`integer`, required): Id of the Greenhouse application. Get it from greenhouse_applications_list. Example: 4012345002
- `ends_at` (`string`, required): Interview end time in ISO 8601. Example: 2026-02-10T16:00:00Z
- `external_event_id` (`string`, required): Id of the event on your external calendar that this interview records. Greenhouse does not create this event or send invites for it. Example: 7c9e6679-calendar-event
- `interviewers` (`array`, required): The interview panel. Each entry names one interviewer by user_id, email or employee_id, plus a response_status of accepted, declined, tentative or needs_action. On update this replaces the panel. Example: [{"user_id": 4012345002, "response_status": "accepted"}]
- `job_interview_id` (`integer`, required): Id of the interview slot on the job's interview plan. Get it from greenhouse_job_interviews_list. Example: 4012345002
- `starts_at` (`string`, required): Interview start time in ISO 8601. Example: 2026-02-10T15:00:00Z
- `location` (`string`, optional): Where the interview happens, as free text. Example: Conference Room B
- `organizer_id` (`integer`, optional): Id of the Greenhouse user to record as the interview's organizer. Must be an active user who can manage the application. Defaults to the authenticated user when omitted. Not available to MCP integrations. Example: 4012345002
- `video_conferencing_url` (`string`, optional): Video meeting link for the interview. Example: https://zoom.us/j/1234567890

Example input: `{"application_id":4012345002,"ends_at":"<ends_at>","external_event_id":"<external_event_id>","interviewers":[{"user_id":4012345002,"response_status":"accepted"}],"job_interview_id":4012345002,"starts_at":"<starts_at>"}`

### `greenhouse_interview_update`

Update Interview · Write

Update a scheduled Greenhouse interview's time, location, video link, panel, organizer, or external calendar event id.
Returns the updated interview.
Use this to reschedule or change the panel. Use greenhouse_interview_delete to remove the interview.
Requires an interview id from greenhouse_interviews_list.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `interview_id` (`integer`, required): Id of the interview to update. Get it from greenhouse_interviews_list. Example: 4012345002
- `ends_at` (`string`, optional): Interview end time in ISO 8601. Example: 2026-02-10T16:00:00Z
- `external_event_id` (`string`, optional): Id of the event on your own calendar (Google, Outlook or other) that this interview records. Greenhouse does not create the event or send invites. Example: 7c9e6679-calendar-event
- `interviewers` (`array`, optional): The interview panel. Each entry names one interviewer by user_id, email or employee_id, plus a response_status of accepted, declined, tentative or needs_action. On update this replaces the panel. Example: [{"user_id": 4012345002, "response_status": "accepted"}]
- `location` (`string`, optional): Where the interview happens, as free text. Example: Conference Room B
- `organizer_id` (`integer`, optional): Id of the Greenhouse user to record as the interview's organizer. Must be an active user who can manage the application. The existing organizer is kept when omitted. Not available to MCP integrations. Example: 4012345002
- `starts_at` (`string`, optional): Interview start time in ISO 8601. Example: 2026-02-10T15:00:00Z
- `video_conferencing_url` (`string`, optional): Video meeting link for the interview. Example: https://zoom.us/j/1234567890

Example input: `{"interview_id":4012345002}`

### `greenhouse_job_create`

Create Job · Write

Create a Greenhouse job from a template job, copying its interview plan, scorecards, hiring team and approvals, with a set number of openings.
Returns the created job.
Use this to open a new requisition. Use greenhouse_job_update to edit an existing job and greenhouse_opening_create to add openings to one.
Requires a template_job_id from greenhouse_jobs_list.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `number_of_openings` (`integer`, required): Number of openings to create on the new job. Each opening can be filled by a single hire. The total open openings across the job cannot exceed Greenhouse's internal limit of 200; requests that would exceed it are rejected. Example: 4012345002
- `template_job_id` (`integer`, required): Id of an existing job (typically a template) used as the source for this job's interview plan, scorecards, hiring team, and approval workflow. Required — Greenhouse Recruiting remains the source of truth for these configurations, so new jobs always inherit them from a template. Example: 4012345002
- `custom_fields` (`array`, optional): Values to set on this job's job custom fields. Each entry identifies the field by custom_field_id or name_key and supplies a value whose shape matches the field's value_type (see greenhouse_custom_fields_list (filtered by field_type)). Every field marked required that the template job leaves blank must be supplied here. Single-select and multi-select values must name an active option: read them from greenhouse_custom_field_options_list (filtered by active), because archived options are listed unless active=true is passed and are rejected on write. Example: [{"name_key": "cost_center", "value": "R&D"}]
- `department_id` (`integer`, optional): Id of the department to assign the job to. Mutually exclusive with external_department_id. Example: 4012345002
- `external_department_id` (`string`, optional): Partner-supplied external_id of the department to assign the job to. Resolved to a Greenhouse department_id in the caller's organization; unknown values are rejected. Mutually exclusive with department_id. Example: DEPT-ENG
- `external_office_ids` (`array`, optional): Partner-supplied external_id values of the offices to assign the job to. Each entry is resolved to a Greenhouse office_id in the caller's organization; unknown values are rejected. Mutually exclusive with office_ids. Example: ["OFF-NYC"]
- `ignore_approver_permission_check` (`boolean`, optional): If true, skips the check that a user set as a job or offer approver via custom_fields has permission to view/edit this job. Lets an integration assign an approver without first broadening that user's Greenhouse permissions. Restricted to integration service-account credentials; other callers are rejected with a 422. Example: true
- `ignore_custom_field_requirements` (`boolean`, optional): If true, skips validation that required job custom fields have a value. Useful for integrations that only intend to sync a subset of fields and rely on the template job or a later request to supply the rest. Restricted to integration service-account credentials; other callers are rejected with a 422. Example: true
- `job_name` (`string`, optional): Internal job title shown to the hiring team (e.g. Senior Backend Engineer). When omitted, the template job's name is used. Example: Senior Backend Engineer
- `job_post_name` (`string`, optional): External-facing title for the job's initial internal job post (the listing shown on the company's careers site). Defaults to job_name when omitted. Example: Senior Backend Engineer
- `notes` (`string`, optional): Internal HTML notes about the job, surfaced to the hiring team in the Greenhouse UI. Example: Backfill for the payments team.

- `office_ids` (`array`, optional): Ids of the offices to assign the job to. A job can span multiple offices. Mutually exclusive with external_office_ids. Example: [4012345002]
- `opening_ids` (`array`, optional): Optional partner-supplied identifiers for the openings being created — one entry per new opening, paired positionally with number_of_openings. Each value is stored on the resulting opening as its opening_id (a free-form string, not the Greenhouse opening id) and may be null. Greenhouse enforces an internal limit of 200 open openings per job; requests that would exceed it fail. Example: ["POS-2231", "POS-2232"]
- `requisition_id` (`string`, optional): Partner-supplied external identifier for the requisition (e.g. an HRIS or ATS code). Free-form string and not required to be unique across the organization. Example: REQ-1042

Example input: `{"number_of_openings":4012345002,"template_job_id":4012345002}`

### `greenhouse_job_hiring_manager_create`

Add Job Hiring Manager · Write

Assign a Greenhouse user as a hiring manager on a job.
Returns the created hiring manager assignment.
Use this for hiring managers only. Use greenhouse_job_owner_create to add a recruiter, coordinator or sourcer.
Requires a job_id from greenhouse_jobs_list and a user_id from greenhouse_users_list.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `job_id` (`integer`, required): Id of the job to add the hiring manager to. Get it from greenhouse_jobs_list. Example: 4012345002
- `user_id` (`integer`, required): Id of the user to assign as a hiring manager on the job. The user must already exist in your organization. Example: 4012345002

Example input: `{"job_id":4012345002,"user_id":4012345002}`

### `greenhouse_job_note_create`

Create Job Note · Write

Add an internal note to a Greenhouse job.
Returns the created job note.
Use this for notes about a requisition. Use greenhouse_note_create for notes about a candidate.
Requires a job_id from greenhouse_jobs_list.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `body` (`string`, required): Text of the note. Newlines are kept as line breaks. Example: Spoke with the candidate about relocation.
- `job_id` (`integer`, required): Id of the Greenhouse job. Get it from greenhouse_jobs_list. Example: 4012345002
- `user_id` (`integer`, required): Greenhouse user id to record as the note's author. Get it from greenhouse_users_list. Example: 4012345002
- `visibility` (`string`, required): Who can see the job note: admin_only_visible (Job Admins on the job) or privately_visible (users with the view and create private job notes permission). Example: admin_only_visible. One of: `admin_only_visible`, `privately_visible`.

Example input: `{"body":"<body>","job_id":4012345002,"user_id":4012345002,"visibility":"admin_only_visible"}`

### `greenhouse_job_note_update`

Update Job Note · Write

Edit the body, author or visibility of an existing note on a Greenhouse job.
Returns the updated job note.
Use this to correct a job note. Use greenhouse_job_note_create to add a new one.
Requires a job note id from greenhouse_job_notes_list.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `job_note_id` (`integer`, required): Id of the job note to update. Get it from greenhouse_job_notes_list. Example: 4012345002
- `body` (`string`, optional): Text of the note. Newlines are kept as line breaks. Example: Spoke with the candidate about relocation.
- `job_id` (`integer`, optional): Id of the Greenhouse job. Get it from greenhouse_jobs_list. Example: 4012345002
- `user_id` (`integer`, optional): Greenhouse user id to record as the note's author. Get it from greenhouse_users_list. Example: 4012345002
- `visibility` (`string`, optional): Who can see the job note: admin_only_visible (Job Admins on the job) or privately_visible (users with the view and create private job notes permission). Example: admin_only_visible. One of: `admin_only_visible`, `privately_visible`.

Example input: `{"job_note_id":4012345002}`

### `greenhouse_job_owner_create`

Add Job Owner · Write

Assign a Greenhouse user to a job's hiring team as recruiter, coordinator or sourcer, optionally making them responsible for its candidates.
Returns the created assignment.
Use this to staff a job's recruiting team. Use greenhouse_job_hiring_manager_create to add a hiring manager.
Requires a job_id from greenhouse_jobs_list and a user_id from greenhouse_users_list.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `job_id` (`integer`, required): Id of the job to assign the user to. Must belong to your organization. Example: 4012345002
- `type` (`string`, required): Hiring-team role to assign. One of sourcer, recruiter, or coordinator. To assign a hiring manager instead, use greenhouse_job_hiring_manager_create. Example: sourcer. One of: `sourcer`, `recruiter`, `coordinator`.
- `user_id` (`integer`, required): Id of the user to add to the hiring team. The user must already exist in your organization and have permission to edit the job. Example: 4012345002
- `candidate_responsibility` (`string`, optional): For recruiter and coordinator only, which existing and future candidates on the job this user becomes the responsible owner for: active (in-process), inactive (rejected and hired), future (new applications only), or all. Ignored for sourcer. If omitted for a recruiter or coordinator, no existing or future candidates are assigned to the user, which can leave new applications without a responsible recruiter — pass all to match the legacy V1 POST /v1/jobs/{id}/hiring_team behavior. One of: active, inactive, future, all. Example: active. One of: `active`, `inactive`, `future`, `all`.

Example input: `{"job_id":4012345002,"type":"sourcer","user_id":4012345002}`

### `greenhouse_job_post_create`

Create Job Post · Write

Create a Greenhouse job post by duplicating an existing post onto a job board, optionally with a new title, content and status.
Returns the created job post.
Use this to publish a job on another board. Use greenhouse_job_post_update to edit an existing post.
Requires a template_job_post_id from greenhouse_job_posts_list and a job_board_id from greenhouse_job_boards_list.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `job_board_id` (`integer`, required): Id of the job_board to publish the post to. A single post belongs to one board at a time; resolve available boards via greenhouse_job_boards_list. Example: 4012345002
- `template_job_post_id` (`integer`, required): Id of an existing job post to duplicate. The new post is created on the same parent job as the template and copies its content, questions, and configuration. The template post itself is unchanged. Example: 4012345002
- `content` (`string`, optional): HTML body of the post shown to candidates. Sanitized server-side — only a limited element/attribute allowlist (including iframe, video, source) survives. Pass null or omit to inherit the template's content. Example: Join our payments team...

- `demographic_question_set_id` (`integer`, optional): Id of the demographic question set to attach to the new post for DE&I reporting. Pass null to opt out of demographic questions. Example: 4012345002
- `internal` (`boolean`, optional): If true, create the post on the organization's internal job board (employees only). If false or null, the post is external. Must be consistent with job_board_id — internal job boards only accept internal posts. Example: true
- `status` (`string`, optional): Initial publication status. Use live to publish immediately or draft to save as an unpublished working copy. Defaults to draft. One of: draft, live. Example: draft. One of: `draft`, `live`.
- `title` (`string`, optional): Public-facing title for the new post. Defaults to the template post's title when omitted. Example: Senior Backend Engineer

Example input: `{"job_board_id":4012345002,"template_job_post_id":4012345002}`

### `greenhouse_job_post_update`

Update Job Post · Write

Update a Greenhouse job post's title or HTML content, or publish it (live) or unpublish it (draft).
Returns the updated job post.
Use this to edit or publish a listing. Use greenhouse_job_update to change the underlying job.
Requires a job_post_id from greenhouse_job_posts_list.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `job_post_id` (`integer`, required): Id of the job post to update. Get it from greenhouse_job_posts_list. Example: 4012345002
- `content` (`string`, optional): Replacement HTML body for the post. For internal posts this updates internal_content; for external posts it updates content. Sanitized server-side — only a limited element/attribute allowlist (including iframe, video, source) survives. Example: Join our payments team...

- `job_application_status` (`string`, optional): Transition the post's publication status. live publishes the post (subject to its job board also being live); draft returns it to an unpublished working state. One of: draft, live. Example: draft. One of: `draft`, `live`.
- `title` (`string`, optional): New public-facing title for the post. Limited to 255 characters. Example: Senior Backend Engineer

Example input: `{"job_post_id":4012345002}`

### `greenhouse_job_update`

Update Job · Write

Update a Greenhouse job's name, notes, requisition id, department, offices, remote status, internal selling notes, or custom fields.
Returns the updated job.
Use this to edit job details. Use greenhouse_job_post_update to edit the public job listing.
Requires a job_id from greenhouse_jobs_list.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `job_id` (`integer`, required): Id of the job to update. Get it from greenhouse_jobs_list. Example: 4012345002
- `anywhere` (`boolean`, optional): If true, the job is marked as remote-anywhere and office_ids is cleared. Mutually exclusive with supplying office_ids or external_office_ids. Example: true
- `custom_fields` (`array`, optional): Values to set on this job's job custom fields. Replaces the existing collection wholesale — send the full desired list, not a delta. Each entry identifies the field by custom_field_id or name_key and supplies a value matching the field's value_type. Example: [{"name_key": "cost_center", "value": "R&D"}]
- `department_id` (`integer`, optional): Set the job's department by Greenhouse id. Pass null to clear. Mutually exclusive with external_department_id. Example: 4012345002
- `external_department_id` (`string`, optional): Set the job's department by partner-supplied department external_id. Resolved to a Greenhouse department_id in the caller's organization; unknown values are rejected. Mutually exclusive with department_id. Example: DEPT-ENG
- `external_office_ids` (`array`, optional): Replace the job's office assignments by partner-supplied office external_id values. Each entry is resolved to a Greenhouse office_id in the caller's organization; unknown values are rejected. Mutually exclusive with office_ids. Example: ["OFF-NYC"]
- `how_to_sell_this_job` (`string`, optional): Internal selling-points note used by recruiters when pitching the role, shown to the hiring team in the Greenhouse UI. Example: Greenfield platform work with a small senior team.
- `ignore_approver_permission_check` (`boolean`, optional): If true, skips the check that a user set as a job or offer approver via custom_fields has permission to view/edit this job. Lets an integration assign an approver without first broadening that user's Greenhouse permissions. Restricted to integration service-account credentials; other callers are rejected with a 422. Example: true
- `ignore_custom_field_requirements` (`boolean`, optional): If true, a null value sent via custom_fields for a required field clears it instead of failing the request. Restricted to integration service-account credentials; other callers are rejected with a 422. Example: true
- `name` (`string`, optional): Internal job title shown to the hiring team in Greenhouse. Example: Senior Backend Engineer
- `notes` (`string`, optional): Internal HTML notes about the job. Replaces the existing value when supplied. Example: Backfill for the payments team.

- `office_ids` (`array`, optional): Replace the job's office assignments with these office ids. Send the full desired list, not a delta. Mutually exclusive with external_office_ids and with anywhere: true. Example: [4012345002]
- `requisition_id` (`string`, optional): Partner-supplied external identifier for the requisition. Pass null to clear the value. Example: REQ-1042
- `team_and_responsibilities` (`string`, optional): Internal description of the team and the role's responsibilities, shown to the hiring team in the Greenhouse UI. Example: Owns the payments API and its reliability.

Example input: `{"job_id":4012345002}`

### `greenhouse_note_create`

Create Note · Write

Add a note, a logged email, or an activity entry to a Greenhouse candidate, optionally tied to one application.
Returns the created note.
Use this for candidate notes and activity logging. Use greenhouse_job_note_create for notes on a job.
Requires a candidate_id from greenhouse_candidates_list.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `body` (`string`, required): Free-text body of the note. Newline characters (\n) are stored verbatim and rendered as line breaks in the Greenhouse UI. Example: Spoke with the candidate about relocation.
- `candidate_id` (`integer`, required): Id of the candidate the note is attached to. Required for every note. When application_id is also supplied, the application must belong to this candidate. Example: 4012345002
- `note_type` (`string`, required): Classification of the note being created. NOTE posts a candidate note in the Notes tab; EMAIL logs an email into the activity feed and requires the email_* fields; ACTIVITY logs a free-form entry into the activity feed. Other note types (interview, feedback, touchpoint, etc.) are produced by Greenhouse features and cannot be created through this endpoint. One of: EMAIL, ACTIVITY, NOTE. Example: NOTE. One of: `EMAIL`, `ACTIVITY`, `NOTE`.
- `visibility` (`string`, required): Who will be able to see this note. public is visible to anyone with access to the candidate, private requires the "see private notes" permission, and admin_only is restricted to Job Admins and Site Admins. One of: admin_only, private, public. Example: public. One of: `admin_only`, `private`, `public`.
- `application_id` (`integer`, optional): Id of the application to anchor this note to. The application must belong to candidate_id. Omit for candidate-level notes that are not tied to any single application. Example: 4012345002
- `email_cc` (`array`, optional): Cc addresses on the email being logged. Required (may be an empty array) when note_type is EMAIL and forbidden for other types. Example: []
- `email_from` (`array`, optional): From addresses on the email being logged. Required when note_type is EMAIL and forbidden for other types. Example: ["recruiter@example.com"]
- `email_to` (`array`, optional): To addresses on the email being logged. Required when note_type is EMAIL and forbidden for other types. Example: ["jane.doe@example.com"]
- `subject` (`string`, optional): Subject line on the note. Required when note_type is EMAIL; optional for NOTE and ACTIVITY. Example: Follow-up on your application
- `user_id` (`integer`, optional): Greenhouse user id to record as the note's author. Defaults to the authenticated user. Get it from greenhouse_users_list. Example: 4012345002

Example input: `{"body":"<body>","candidate_id":4012345002,"note_type":"EMAIL","visibility":"admin_only"}`

### `greenhouse_offer_create`

Create Offer · Write

Create an offer on a Greenhouse application, with an optional start date and offer custom fields such as compensation.
Returns the created offer.
Use this to extend a new offer. Use greenhouse_offer_update to change an existing offer.
Requires an application_id from greenhouse_applications_list. Required offer fields are listed by greenhouse_custom_fields_list with field_type offer.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `application_id` (`integer`, required): Id of the application this offer is being extended on. Required. Example: 4012345002
- `custom_fields` (`array`, optional): Values for the offer's custom fields, including compensation components (base pay, equity, bonus, etc.). Each entry sets one custom field by name or id; only fields configured on the application's hiring plan apply. Offer custom fields the organization marks as required must be included, otherwise the request fails with a 422 naming the missing fields. List the organization's offer fields, including required and name_key, via greenhouse_custom_fields_list (filtered by field_type and active) Harvest V3 does not evaluate calculated custom fields; if the organization hasn't enabled overriding that field, the request fails with a 422 naming it as not overridable. Example: [{"name_key": "cost_center", "value": "R&D"}]
- `starts_on` (`string`, optional): Candidate's proposed start date, in ISO 8601 (YYYY-MM-DD). Required when the organization marks the Start Date offer field as required. Example: 2026-03-02

Example input: `{"application_id":4012345002}`

### `greenhouse_offer_update`

Update Offer · Write

Update a Greenhouse offer's start date, sent date, created date, resolved time, or offer custom fields.
Returns the updated offer; changing the start date usually creates a new offer version.
Use this to revise an offer. Use greenhouse_application_hire to mark the candidate hired.
Requires an offer id from greenhouse_offers_list.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `offer_id` (`integer`, required): Id of the offer to update. Get it from greenhouse_offers_list. Example: 4012345002
- `created_at` (`string`, optional): Date the offer was created, in ISO 8601 (YYYY-MM-DD). Use to backfill the original creation date for offers migrated from another system. Example: 2026-03-02
- `custom_fields` (`array`, optional): Values for the offer's custom fields, including compensation components (base pay, equity, bonus, etc.). Each entry sets one custom field by name or id; only fields configured on the application's hiring plan apply. Replaces the listed fields wholesale — omit entries you do not want to modify. Harvest V3 does not evaluate calculated custom fields; if the organization hasn't enabled overriding that field, the request fails with a 422 naming it as not overridable. Example: [{"name_key": "cost_center", "value": "R&D"}]
- `resolved_at` (`string`, optional): Timestamp the offer was resolved (Accepted or Rejected), in ISO 8601. Updates are normalized to noon UTC on the date provided. Example: 2026-01-15T14:00:00Z
- `sent_on` (`string`, optional): Date the offer was sent to the candidate, in ISO 8601 (YYYY-MM-DD). Use to backfill the sent date for offers handled outside of Greenhouse. Example: 2026-03-02
- `starts_on` (`string`, optional): Candidate's proposed start date, in ISO 8601 (YYYY-MM-DD). Changing this on an existing offer typically creates a new offer version. Example: 2026-03-02

Example input: `{"offer_id":4012345002}`

### `greenhouse_opening_create`

Create Opening · Write

Add an opening (headcount slot) to a Greenhouse job, with an optional external opening id and custom fields.
Returns the created opening.
Use this to increase headcount on an existing job. Use greenhouse_job_create to create a new job with openings.
Requires a job_id from greenhouse_jobs_list.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `job_id` (`integer`, required): Id of the parent job (requisition) to add this opening to. Required. Greenhouse enforces an internal limit of 200 open openings per job; requests that would exceed it are rejected. Example: 4012345002
- `custom_fields` (`array`, optional): Values to set on this opening's opening custom fields. Each entry identifies the field by custom_field_id or name_key and supplies a value whose shape matches the field's value_type (see greenhouse_custom_fields_list (filtered by field_type)). Example: [{"name_key": "cost_center", "value": "R&D"}]
- `opening_id` (`string`, optional): Partner-supplied external identifier for the new opening (e.g. an HRIS or ATS position id). Free-form string, not required to be unique across the organization. Distinct from the Greenhouse id. Example: POS-2231

Example input: `{"job_id":4012345002}`

### `greenhouse_opening_update`

Update Opening · Write

Update a Greenhouse opening: close or reopen it, set its close reason, external opening id, target start date, or custom fields.
Returns the updated opening.
Use this to close or reopen headcount. Use greenhouse_application_hire to close an opening by hiring into it.
Requires an opening id from greenhouse_openings_list.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `opening_record_id` (`integer`, required): Id of the opening to update. Get it from greenhouse_openings_list. Example: 4012345002
- `close_reason_id` (`integer`, optional): ID of the close_reason to record when closing the opening, for example Hire - New Headcount, On Hold, or Requisition Cancelled. Resolve via greenhouse_close_reasons_list. On an open opening, supplying close_reason_id without also setting status to closed returns 422; on an already-closed opening, close_reason_id can be updated on its own. Example: 4012345002
- `custom_fields` (`array`, optional): Values to set on this opening's opening custom fields. Each entry identifies the field by custom_field_id or name_key and supplies a value whose shape matches the field's value_type (see greenhouse_custom_fields_list (filtered by field_type)). Replaces the existing values wholesale — send the full desired list, not a delta. Example: [{"name_key": "cost_center", "value": "R&D"}]
- `job_id` (`integer`, optional): Id of the job (requisition) this opening belongs to. Provided to disambiguate the opening; reassigning an opening to a different job is not supported. Example: 4012345002
- `opening_id` (`string`, optional): Partner-supplied external identifier for the opening (e.g. an HRIS or ATS position id). Free-form string, not required to be unique across the organization. Example: POS-2231
- `status` (`string`, optional): Transition the opening's lifecycle. Pass closed to close an open opening (optionally with close_reason_id); pass open to reopen a closed opening that has not been filled. One of: open, closed. Example: open. One of: `open`, `closed`.
- `target_start_on` (`string`, optional): Target start date for the hire that will fill this opening, in ISO 8601 (YYYY-MM-DD). Example: 2026-03-02

Example input: `{"opening_record_id":4012345002}`

### `greenhouse_rejection_detail_update`

Update Rejection Detail · Write

Change the rejection reason or rejection question answers recorded on a rejected Greenhouse application.
Returns the updated rejection detail.
Use this to correct a rejection record. Use greenhouse_application_reject to reject an application.
Requires a rejection detail id from greenhouse_rejection_details_list.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `rejection_detail_id` (`integer`, required): Id of the rejection detail to update. Get it from greenhouse_rejection_details_list. Example: 4012345002
- `custom_fields` (`array`, optional): Values for the application's rejection question custom fields. Each entry sets one custom field by name or id; only fields configured as rejection questions on the organization apply. Replaces the listed fields wholesale — omit entries you do not want to modify. Example: [{"name_key": "cost_center", "value": "R&D"}]
- `rejection_reason_id` (`integer`, optional): Id of the rejection reason to associate with the application. Must reference a greenhouse_rejection_reasons_list row in the same organization. Updating this value does not change the application's existing rejected_at timestamp. Example: 4012345002

Example input: `{"rejection_detail_id":4012345002}`

### `greenhouse_scorecard_create`

Create Scorecard · Write

Create an interview scorecard on a Greenhouse application, as a draft or submitted, with a rating, notes, question answers and attribute ratings.
Returns the created scorecard.
Use this to file interview feedback. Use greenhouse_scorecard_update to edit an existing scorecard.
Requires an application_id from greenhouse_applications_list, an interview_kit_id from greenhouse_interview_kits_list and user ids from greenhouse_users_list.

Read only: no. Destructive: no. Idempotent (safe to retry): no.

Inputs:

- `application_id` (`integer`, required): Id of the application the scorecard belongs to. The application's job must own the supplied interview_kit_id. Example: 4012345002
- `interview_kit_id` (`integer`, required): Id of the interview kit this scorecard is filled out against. Must belong to the same job as the application_id. Example: 4012345002
- `interviewed_at` (`string`, required): Timestamp the interview took place, in ISO 8601. Used to compute time-to-submit and to align the scorecard with the interview slot. Example: 2026-01-15T14:00:00Z
- `interviewer_id` (`integer`, required): Id of the Greenhouse user this scorecard is assigned to (the interviewer being scored against). Example: 4012345002
- `submitter_id` (`integer`, required): Id of the user submitting the scorecard. Usually matches interviewer_id; set differently when an admin is filing the scorecard on the interviewer's behalf. Example: 4012345002
- `candidate_attributes` (`array`, optional): Ratings for the job's candidate attributes, written atomically with the scorecard. Each entry identifies the attribute by job_candidate_attribute_id. Attributes omitted here are left unrated. Example: [{"job_candidate_attribute_id": 4012345002, "value": "strong_yes", "note": "Led two migrations."}]
- `candidate_rating` (`string`, optional): Overall recommendation for the candidate. One of strong_no ("Definitely Not"), no, yes, strong_yes, or no_decision. Pass no_decision to submit the scorecard without picking a recommendation. Example: strong_no. One of: `strong_no`, `no`, `yes`, `strong_yes`, `no_decision`.
- `notes` (`string`, optional): Free-text "key takeaways" the interviewer is recording (pros, cons, follow-ups). Plain text; @-mentions are accepted and stored alongside the rendered names. Example: Strong system design; probe testing habits next round.
- `private_notes` (`string`, optional): Free-text private notes; only users with the "see private notes" permission can read these back. Example: Salary expectations above band.
- `public_notes` (`string`, optional): Free-text "note to other interviewers" shared with the rest of the hiring team. Example: Great communicator; dig into system design next.
- `question_answers` (`array`, optional): Answers to the interview kit's scorecard questions, written atomically with the scorecard. Each entry identifies the question by scorecard_question_id and supplies a value shaped by the question's answer_type. Questions omitted here are left unanswered. Example: [{"scorecard_question_id": 4012345002, "value": "Clear, well-structured API design."}]
- `status` (`string`, optional): Initial lifecycle status. Send draft to create an in-progress scorecard, or complete to submit it immediately — sending complete also stamps submitted_at. One of: draft, complete. Example: draft. One of: `draft`, `complete`.

Example input: `{"application_id":4012345002,"interview_kit_id":4012345002,"interviewed_at":"<interviewed_at>","interviewer_id":4012345002,"submitter_id":4012345002}`

### `greenhouse_scorecard_update`

Update Scorecard · Write

Update a Greenhouse scorecard's rating, notes, status, question answers or attribute ratings.
Returns the updated scorecard.
Use this to edit or submit feedback. Use greenhouse_scorecard_create to file a new scorecard.
Requires a scorecard id from greenhouse_scorecards_list.

Read only: no. Destructive: no. Idempotent (safe to retry): yes.

Inputs:

- `interviewed_at` (`string`, required): Timestamp the interview took place, in ISO 8601. Example: 2026-01-15T14:00:00Z
- `interviewer_id` (`integer`, required): Id of the Greenhouse user this scorecard is assigned to (the interviewer being scored against). Example: 4012345002
- `scorecard_id` (`integer`, required): Id of the scorecard to update. Get it from greenhouse_scorecards_list. Example: 4012345002
- `submitter_id` (`integer`, required): Id of the user submitting (or last editing) the scorecard. Usually matches interviewer_id. Example: 4012345002
- `candidate_attributes` (`array`, optional): Attribute ratings to merge into the draft, matched to existing rows by job_candidate_attribute_id. Entries present are updated; entries omitted are untouched; value: null clears a rating. Example: [{"job_candidate_attribute_id": 4012345002, "value": "strong_yes", "note": "Led two migrations."}]
- `candidate_rating` (`string`, optional): Overall recommendation. One of strong_no ("Definitely Not"), no, yes, strong_yes, or no_decision. Example: strong_no. One of: `strong_no`, `no`, `yes`, `strong_yes`, `no_decision`.
- `notes` (`string`, optional): Free-text "key takeaways" (pros, cons, follow-ups). Replaces the existing value wholesale. Example: Strong system design; probe testing habits next round.
- `private_notes` (`string`, optional): Free-text private notes; only readers with the "see private notes" permission see these. Replaces the existing value wholesale. Example: Salary expectations above band.
- `public_notes` (`string`, optional): Free-text "note to other interviewers". Replaces the existing value wholesale. Example: Great communicator; dig into system design next.
- `question_answers` (`array`, optional): Answers to merge into the draft, matched to existing answer rows by scorecard_question_id. Entries present are updated; entries omitted are untouched; value: null clears an answer. Matching is against the kit's active questions — an answer whose question has since been deactivated can only be edited via the per-resource endpoints. Example: [{"scorecard_question_id": 4012345002, "value": "Clear, well-structured API design."}]
- `status` (`string`, optional): Lifecycle status. Move a draft to complete to submit (Greenhouse stamps submitted_at on transition). Site Admins can edit submitted scorecards at any time; Job Admins are bound by the organization's scorecard-edit window. One of: draft, complete. Example: draft. One of: `draft`, `complete`.

Example input: `{"interviewed_at":"<interviewed_at>","interviewer_id":4012345002,"scorecard_id":4012345002,"submitter_id":4012345002}`

### `greenhouse_application_delete`

Delete Application · Destructive

Permanently delete a Greenhouse application with its interview stages, scorecards, rejection details and prospect details; the candidate is kept.
Returns the deleted application id and a confirmation message.
Use this only to remove an application created in error. Use greenhouse_application_reject to record a rejection instead.
Requires an application_id from greenhouse_applications_list.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `application_id` (`integer`, required): Id of the application to delete. Get it from greenhouse_applications_list. Example: 4012345002

Example input: `{"application_id":4012345002}`

### `greenhouse_applied_candidate_tag_delete`

Remove Tag from Candidate · Destructive

Remove one tag from one Greenhouse candidate.
Returns the deleted applied-tag id and a confirmation message.
Use this to untag a candidate. Use greenhouse_candidate_tag_delete to delete the tag for everyone.
Requires an applied-tag row id from greenhouse_applied_candidate_tags_list, not the candidate or tag id.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `applied_candidate_tag_id` (`integer`, required): Id of the applied candidate tag row to delete. Get it from greenhouse_applied_candidate_tags_list. Example: 4012345002

Example input: `{"applied_candidate_tag_id":4012345002}`

### `greenhouse_attachment_delete`

Delete Attachment · Destructive

Permanently remove a file attachment from a Greenhouse application.
Returns the deleted attachment id and a confirmation message.
Use this to remove a wrong or outdated file. Use greenhouse_attachment_create to add a replacement.
Requires an attachment id from greenhouse_attachments_list.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `attachment_id` (`integer`, required): Id of the attachment to delete. Get it from greenhouse_attachments_list. Example: 4012345002

Example input: `{"attachment_id":4012345002}`

### `greenhouse_candidate_delete`

Delete Candidate · Destructive

Permanently delete a Greenhouse candidate and all of their applications, attachments, scorecards and notes.
Returns the deleted candidate id and a confirmation message.
Use this only to remove a record for good. Use greenhouse_application_reject to close out a candidacy and keep history.
Requires a candidate_id from greenhouse_candidates_list.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `candidate_id` (`integer`, required): Id of the candidate to delete. Get it from greenhouse_candidates_list. Example: 4012345002

Example input: `{"candidate_id":4012345002}`

### `greenhouse_candidate_education_delete`

Delete Candidate Education · Destructive

Delete an education entry from a Greenhouse candidate profile.
Returns the deleted entry id and a confirmation message.
Use this to remove a wrong education entry. Use greenhouse_candidate_education_create to add a corrected one.
Requires an education id from greenhouse_candidate_educations_list.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `candidate_education_id` (`integer`, required): Id of the education entry to delete. Get it from greenhouse_candidate_educations_list. Example: 4012345002

Example input: `{"candidate_education_id":4012345002}`

### `greenhouse_candidate_employment_delete`

Delete Candidate Employment · Destructive

Delete a work history entry from a Greenhouse candidate profile.
Returns the deleted entry id and a confirmation message.
Use this to remove a wrong employment entry. Use greenhouse_candidate_employment_create to add a corrected one.
Requires an employment id from greenhouse_candidate_employments_list.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `candidate_employment_id` (`integer`, required): Id of the employment entry to delete. Get it from greenhouse_candidate_employments_list. Example: 4012345002

Example input: `{"candidate_employment_id":4012345002}`

### `greenhouse_candidate_tag_delete`

Delete Candidate Tag · Destructive

Delete a tag from the organization's Greenhouse candidate tag dictionary.
Returns the deleted tag id and a confirmation message.
Use this to retire a tag for everyone. Use greenhouse_applied_candidate_tag_delete to take a tag off one candidate.
Requires a candidate tag id from greenhouse_candidate_tags_list.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `candidate_tag_id` (`integer`, required): Id of the candidate tag to delete. Get it from greenhouse_candidate_tags_list. Example: 4012345002

Example input: `{"candidate_tag_id":4012345002}`

### `greenhouse_interview_delete`

Delete Interview · Destructive

Delete a scheduled interview from a Greenhouse application.
Returns the deleted interview id and a confirmation message.
Use this when an interview is cancelled. Use greenhouse_interview_update to reschedule it instead.
Requires an interview id from greenhouse_interviews_list.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `interview_id` (`integer`, required): Id of the interview to delete. Get it from greenhouse_interviews_list. Example: 4012345002

Example input: `{"interview_id":4012345002}`

### `greenhouse_job_hiring_manager_delete`

Remove Job Hiring Manager · Destructive

Remove a hiring manager assignment from a Greenhouse job; the user account is not affected.
Returns the deleted assignment id and a confirmation message.
Use this to take a hiring manager off a job. Use greenhouse_job_owner_delete for recruiters, coordinators and sourcers.
Requires an assignment id from greenhouse_job_hiring_managers_list.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `job_hiring_manager_id` (`integer`, required): Id of the hiring manager assignment to delete. Get it from greenhouse_job_hiring_managers_list. Example: 4012345002

Example input: `{"job_hiring_manager_id":4012345002}`

### `greenhouse_job_note_delete`

Delete Job Note · Destructive

Permanently delete a note from a Greenhouse job.
Returns the deleted note id and a confirmation message.
Use this to remove a job note. Use greenhouse_job_note_update to edit it instead.
Requires a job note id from greenhouse_job_notes_list.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `job_note_id` (`integer`, required): Id of the job note to delete. Get it from greenhouse_job_notes_list. Example: 4012345002

Example input: `{"job_note_id":4012345002}`

### `greenhouse_job_owner_delete`

Remove Job Owner · Destructive

Remove a recruiter, coordinator or sourcer assignment from a Greenhouse job; the user account is not affected.
Returns the deleted assignment id and a confirmation message.
Use this to take someone off a job's recruiting team. Use greenhouse_job_hiring_manager_delete for hiring managers.
Requires an assignment id from greenhouse_job_owners_list.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `job_owner_id` (`integer`, required): Id of the job owner assignment to delete. Get it from greenhouse_job_owners_list. Example: 4012345002

Example input: `{"job_owner_id":4012345002}`

### `greenhouse_opening_delete`

Delete Opening · Destructive

Permanently delete an opening from a Greenhouse job.
Returns the deleted opening id and a confirmation message.
Use this to remove headcount created in error. Use greenhouse_opening_update with status closed to close an opening and keep its history.
Requires an opening id from greenhouse_openings_list.

Read only: no. Destructive: yes. Idempotent (safe to retry): yes.

Inputs:

- `opening_record_id` (`integer`, required): Id of the opening to delete. Get it from greenhouse_openings_list. Example: 4012345002

Example input: `{"opening_record_id":4012345002}`

## Related

Other Productivity connectors ([all 144](/agentkit/connectors/?category=productivity)):

- [Slack](/agentkit/connectors/slack/): Scalekit connector, OAuth, 96 tools
- [Microsoft 365](/agentkit/connectors/microsoft365/): Scalekit connector, OAuth, 317 tools
- [Notion](/agentkit/connectors/notion/): Scalekit connector, OAuth, 51 tools


---

## More Scalekit documentation

| Resource | What it contains | When to use it |
|----------|-----------------|----------------|
| [/llms.txt](/llms.txt) | Structured index with routing hints per product area | Start here — find which documentation set covers your topic before loading full content |
| [/llms-full.txt](/llms-full.txt) | Complete documentation for all Scalekit products in one file | Use when you need exhaustive context across multiple products or when the topic spans several areas |
| [sitemap-0.xml](https://docs.scalekit.com/sitemap-0.xml) | Full URL list of every documentation page | Use to discover specific page URLs you can fetch for targeted, page-level answers |
