Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Co-authored-by: ian.alton@airbyte.io <ian.alton@airbyte.io> Co-authored-by: octavia-bot[bot] <108746235+octavia-bot[bot]@users.noreply.github.com>
24 KiB
Greenhouse
Supported Entities and Actions
| Entity | Actions |
|---|---|
| Candidates | List, Get |
| Applications | List, Get |
| Jobs | List, Get |
| Offers | List, Get |
| Users | List, Get |
| Departments | List, Get |
| Offices | List, Get |
| Job Posts | List, Get |
| Sources | List |
| Scheduled Interviews | List, Get |
| Application Attachment | Download |
| Candidate Attachment | Download |
Candidates
Candidates List
Returns a paginated list of all candidates in the organization
Python SDK
greenhouse.candidates.list()
API
curl --location 'https://api.airbyte.ai/api/v1/connectors/instances/{your_connector_instance_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "candidates",
"action": "list"
}'
Params
| Parameter Name | Type | Required | Description |
|---|---|---|---|
per_page |
integer |
No | Number of items to return per page (max 500) |
page |
integer |
No | Page number for pagination |
Candidates Get
Get a single candidate by ID
Python SDK
greenhouse.candidates.get(
id=0
)
API
curl --location 'https://api.airbyte.ai/api/v1/connectors/instances/{your_connector_instance_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "candidates",
"action": "get",
"params": {
"id": 0
}
}'
Params
| Parameter Name | Type | Required | Description |
|---|---|---|---|
id |
integer |
Yes | Candidate ID |
Response Schema
Records
| Field Name | Type | Description |
|---|---|---|
id |
integer |
|
first_name |
string |
|
last_name |
string |
|
company |
string | null |
|
title |
string | null |
|
created_at |
string |
|
updated_at |
string |
|
last_activity |
string |
|
is_private |
boolean |
|
photo_url |
string | null |
|
attachments |
array<object> |
|
attachments[].filename |
string |
|
attachments[].url |
string |
|
attachments[].type |
"resume" | "cover_letter" | "admin_only" | "take_home_test" | "offer_packet" | "offer_letter" | "signed_offer_letter" | "other" |
|
attachments[].created_at |
string |
|
application_ids |
array<integer> |
|
phone_numbers |
array<object> |
|
addresses |
array<object> |
|
email_addresses |
array<object> |
|
website_addresses |
array<object> |
|
social_media_addresses |
array<object> |
|
recruiter |
object | null |
|
coordinator |
object | null |
|
can_email |
boolean |
|
tags |
array<string> |
|
custom_fields |
object |
Applications
Applications List
Returns a paginated list of all applications
Python SDK
greenhouse.applications.list()
API
curl --location 'https://api.airbyte.ai/api/v1/connectors/instances/{your_connector_instance_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "applications",
"action": "list"
}'
Params
| Parameter Name | Type | Required | Description |
|---|---|---|---|
per_page |
integer |
No | Number of items to return per page (max 500) |
page |
integer |
No | Page number for pagination |
created_before |
string |
No | Filter by applications created before this timestamp |
created_after |
string |
No | Filter by applications created after this timestamp |
last_activity_after |
string |
No | Filter by applications with activity after this timestamp |
job_id |
integer |
No | Filter by job ID |
status |
"active" | "rejected" | "hired" |
No | Filter by application status |
Applications Get
Get a single application by ID
Python SDK
greenhouse.applications.get(
id=0
)
API
curl --location 'https://api.airbyte.ai/api/v1/connectors/instances/{your_connector_instance_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "applications",
"action": "get",
"params": {
"id": 0
}
}'
Params
| Parameter Name | Type | Required | Description |
|---|---|---|---|
id |
integer |
Yes | Application ID |
Response Schema
Records
| Field Name | Type | Description |
|---|---|---|
id |
integer |
|
candidate_id |
integer |
|
prospect |
boolean |
|
applied_at |
string |
|
rejected_at |
string | null |
|
last_activity_at |
string |
|
location |
object | null |
|
source |
object |
|
credited_to |
object |
|
rejection_reason |
object | null |
|
rejection_details |
object | null |
|
jobs |
array<object> |
|
job_post_id |
integer | null |
|
status |
string |
|
current_stage |
object | null |
|
answers |
array<object> |
|
prospective_office |
object | null |
|
prospective_department |
object | null |
|
prospect_detail |
object |
|
attachments |
array<object> |
|
attachments[].filename |
string |
|
attachments[].url |
string |
|
attachments[].type |
"resume" | "cover_letter" | "admin_only" | "take_home_test" | "offer_packet" | "offer_letter" | "signed_offer_letter" | "other" |
|
attachments[].created_at |
string |
|
custom_fields |
object |
Jobs
Jobs List
Returns a paginated list of all jobs in the organization
Python SDK
greenhouse.jobs.list()
API
curl --location 'https://api.airbyte.ai/api/v1/connectors/instances/{your_connector_instance_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "jobs",
"action": "list"
}'
Params
| Parameter Name | Type | Required | Description |
|---|---|---|---|
per_page |
integer |
No | Number of items to return per page (max 500) |
page |
integer |
No | Page number for pagination |
Jobs Get
Get a single job by ID
Python SDK
greenhouse.jobs.get(
id=0
)
API
curl --location 'https://api.airbyte.ai/api/v1/connectors/instances/{your_connector_instance_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "jobs",
"action": "get",
"params": {
"id": 0
}
}'
Params
| Parameter Name | Type | Required | Description |
|---|---|---|---|
id |
integer |
Yes | Job ID |
Response Schema
Records
| Field Name | Type | Description |
|---|---|---|
id |
integer |
|
name |
string |
|
requisition_id |
string | null |
|
notes |
string | null |
|
confidential |
boolean |
|
status |
string |
|
created_at |
string |
|
opened_at |
string |
|
closed_at |
string | null |
|
updated_at |
string |
|
departments |
array<object | null> |
|
offices |
array<object> |
|
custom_fields |
object |
|
hiring_team |
object |
|
openings |
array<object> |
Offers
Offers List
Returns a paginated list of all offers
Python SDK
greenhouse.offers.list()
API
curl --location 'https://api.airbyte.ai/api/v1/connectors/instances/{your_connector_instance_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "offers",
"action": "list"
}'
Params
| Parameter Name | Type | Required | Description |
|---|---|---|---|
per_page |
integer |
No | Number of items to return per page (max 500) |
page |
integer |
No | Page number for pagination |
created_before |
string |
No | Filter by offers created before this timestamp |
created_after |
string |
No | Filter by offers created after this timestamp |
resolved_after |
string |
No | Filter by offers resolved after this timestamp |
Offers Get
Get a single offer by ID
Python SDK
greenhouse.offers.get(
id=0
)
API
curl --location 'https://api.airbyte.ai/api/v1/connectors/instances/{your_connector_instance_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "offers",
"action": "get",
"params": {
"id": 0
}
}'
Params
| Parameter Name | Type | Required | Description |
|---|---|---|---|
id |
integer |
Yes | Offer ID |
Response Schema
Records
| Field Name | Type | Description |
|---|---|---|
id |
integer |
|
version |
integer |
|
application_id |
integer |
|
job_id |
integer |
|
candidate_id |
integer |
|
opening |
object | null |
|
created_at |
string |
|
updated_at |
string |
|
sent_at |
string | null |
|
resolved_at |
string | null |
|
starts_at |
string | null |
|
status |
string |
|
custom_fields |
object |
Users
Users List
Returns a paginated list of all users
Python SDK
greenhouse.users.list()
API
curl --location 'https://api.airbyte.ai/api/v1/connectors/instances/{your_connector_instance_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "users",
"action": "list"
}'
Params
| Parameter Name | Type | Required | Description |
|---|---|---|---|
per_page |
integer |
No | Number of items to return per page (max 500) |
page |
integer |
No | Page number for pagination |
created_before |
string |
No | Filter by users created before this timestamp |
created_after |
string |
No | Filter by users created after this timestamp |
updated_before |
string |
No | Filter by users updated before this timestamp |
updated_after |
string |
No | Filter by users updated after this timestamp |
Users Get
Get a single user by ID
Python SDK
greenhouse.users.get(
id=0
)
API
curl --location 'https://api.airbyte.ai/api/v1/connectors/instances/{your_connector_instance_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "users",
"action": "get",
"params": {
"id": 0
}
}'
Params
| Parameter Name | Type | Required | Description |
|---|---|---|---|
id |
integer |
Yes | User ID |
Response Schema
Records
| Field Name | Type | Description |
|---|---|---|
id |
integer |
|
name |
string |
|
first_name |
string |
|
last_name |
string |
|
primary_email_address |
string |
|
updated_at |
string |
|
created_at |
string |
|
disabled |
boolean |
|
site_admin |
boolean |
|
emails |
array<string> |
|
employee_id |
string | null |
|
linked_candidate_ids |
array<integer> |
|
offices |
array<object> |
|
departments |
array<object> |
Departments
Departments List
Returns a paginated list of all departments
Python SDK
greenhouse.departments.list()
API
curl --location 'https://api.airbyte.ai/api/v1/connectors/instances/{your_connector_instance_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "departments",
"action": "list"
}'
Params
| Parameter Name | Type | Required | Description |
|---|---|---|---|
per_page |
integer |
No | Number of items to return per page (max 500) |
page |
integer |
No | Page number for pagination |
Departments Get
Get a single department by ID
Python SDK
greenhouse.departments.get(
id=0
)
API
curl --location 'https://api.airbyte.ai/api/v1/connectors/instances/{your_connector_instance_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "departments",
"action": "get",
"params": {
"id": 0
}
}'
Params
| Parameter Name | Type | Required | Description |
|---|---|---|---|
id |
integer |
Yes | Department ID |
Response Schema
Records
| Field Name | Type | Description |
|---|---|---|
id |
integer |
|
name |
string |
|
parent_id |
integer | null |
|
parent_department_external_id |
string | null |
|
child_ids |
array<integer> |
|
child_department_external_ids |
array<string> |
|
external_id |
string | null |
Offices
Offices List
Returns a paginated list of all offices
Python SDK
greenhouse.offices.list()
API
curl --location 'https://api.airbyte.ai/api/v1/connectors/instances/{your_connector_instance_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "offices",
"action": "list"
}'
Params
| Parameter Name | Type | Required | Description |
|---|---|---|---|
per_page |
integer |
No | Number of items to return per page (max 500) |
page |
integer |
No | Page number for pagination |
Offices Get
Get a single office by ID
Python SDK
greenhouse.offices.get(
id=0
)
API
curl --location 'https://api.airbyte.ai/api/v1/connectors/instances/{your_connector_instance_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "offices",
"action": "get",
"params": {
"id": 0
}
}'
Params
| Parameter Name | Type | Required | Description |
|---|---|---|---|
id |
integer |
Yes | Office ID |
Response Schema
Records
| Field Name | Type | Description |
|---|---|---|
id |
integer |
|
name |
string |
|
location |
object | null |
|
primary_contact_user_id |
integer | null |
|
parent_id |
integer | null |
|
parent_office_external_id |
string | null |
|
child_ids |
array<integer> |
|
child_office_external_ids |
array<string> |
|
external_id |
string | null |
Job Posts
Job Posts List
Returns a paginated list of all job posts
Python SDK
greenhouse.job_posts.list()
API
curl --location 'https://api.airbyte.ai/api/v1/connectors/instances/{your_connector_instance_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "job_posts",
"action": "list"
}'
Params
| Parameter Name | Type | Required | Description |
|---|---|---|---|
per_page |
integer |
No | Number of items to return per page (max 500) |
page |
integer |
No | Page number for pagination |
live |
boolean |
No | Filter by live status |
active |
boolean |
No | Filter by active status |
Job Posts Get
Get a single job post by ID
Python SDK
greenhouse.job_posts.get(
id=0
)
API
curl --location 'https://api.airbyte.ai/api/v1/connectors/instances/{your_connector_instance_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "job_posts",
"action": "get",
"params": {
"id": 0
}
}'
Params
| Parameter Name | Type | Required | Description |
|---|---|---|---|
id |
integer |
Yes | Job Post ID |
Response Schema
Records
| Field Name | Type | Description |
|---|---|---|
id |
integer |
|
title |
string |
|
location |
object | null |
|
internal |
boolean |
|
external |
boolean |
|
active |
boolean |
|
live |
boolean |
|
first_published_at |
string | null |
|
job_id |
integer |
|
content |
string | null |
|
internal_content |
string | null |
|
updated_at |
string |
|
created_at |
string |
|
demographic_question_set_id |
integer | null |
|
questions |
array<object> |
Sources
Sources List
Returns a paginated list of all sources
Python SDK
greenhouse.sources.list()
API
curl --location 'https://api.airbyte.ai/api/v1/connectors/instances/{your_connector_instance_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "sources",
"action": "list"
}'
Params
| Parameter Name | Type | Required | Description |
|---|---|---|---|
per_page |
integer |
No | Number of items to return per page (max 500) |
page |
integer |
No | Page number for pagination |
Scheduled Interviews
Scheduled Interviews List
Returns a paginated list of all scheduled interviews
Python SDK
greenhouse.scheduled_interviews.list()
API
curl --location 'https://api.airbyte.ai/api/v1/connectors/instances/{your_connector_instance_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "scheduled_interviews",
"action": "list"
}'
Params
| Parameter Name | Type | Required | Description |
|---|---|---|---|
per_page |
integer |
No | Number of items to return per page (max 500) |
page |
integer |
No | Page number for pagination |
created_before |
string |
No | Filter by interviews created before this timestamp |
created_after |
string |
No | Filter by interviews created after this timestamp |
updated_before |
string |
No | Filter by interviews updated before this timestamp |
updated_after |
string |
No | Filter by interviews updated after this timestamp |
starts_after |
string |
No | Filter by interviews starting after this timestamp |
ends_before |
string |
No | Filter by interviews ending before this timestamp |
Scheduled Interviews Get
Get a single scheduled interview by ID
Python SDK
greenhouse.scheduled_interviews.get(
id=0
)
API
curl --location 'https://api.airbyte.ai/api/v1/connectors/instances/{your_connector_instance_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "scheduled_interviews",
"action": "get",
"params": {
"id": 0
}
}'
Params
| Parameter Name | Type | Required | Description |
|---|---|---|---|
id |
integer |
Yes | Scheduled Interview ID |
Response Schema
Records
| Field Name | Type | Description |
|---|---|---|
id |
integer |
|
application_id |
integer |
|
external_event_id |
string | null |
|
created_at |
string |
|
updated_at |
string |
|
start |
object | null |
|
end |
object | null |
|
location |
string | null |
|
video_conferencing_url |
string | null |
|
status |
string |
|
interview |
object | null |
|
organizer |
object | null |
|
interviewers |
array<object> |
Application Attachment
Application Attachment Download
Downloads an attachment (resume, cover letter, etc.) for an application by index. The attachment URL is a temporary signed AWS S3 URL that expires within 7 days. Files should be downloaded immediately after retrieval.
Python SDK
async for chunk in greenhouse.application_attachment.download( id=0, attachment_index=0):# Process each chunk (e.g., write to file)
file.write(chunk)
Note
: Download operations return an async iterator of bytes chunks for memory-efficient streaming. Use
async forto process chunks as they arrive.
API
curl --location 'https://api.airbyte.ai/api/v1/connectors/instances/{your_connector_instance_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "application_attachment",
"action": "download",
"params": {
"id": 0,
"attachment_index": 0
}
}'
Params
| Parameter Name | Type | Required | Description |
|---|---|---|---|
id |
integer |
Yes | Application ID |
attachment_index |
integer |
Yes | Index of the attachment to download (0-based) |
range_header |
string |
No | Optional Range header for partial downloads (e.g., 'bytes=0-99') |
Candidate Attachment
Candidate Attachment Download
Downloads an attachment (resume, cover letter, etc.) for a candidate by index. The attachment URL is a temporary signed AWS S3 URL that expires within 7 days. Files should be downloaded immediately after retrieval.
Python SDK
async for chunk in greenhouse.candidate_attachment.download( id=0, attachment_index=0):# Process each chunk (e.g., write to file)
file.write(chunk)
Note
: Download operations return an async iterator of bytes chunks for memory-efficient streaming. Use
async forto process chunks as they arrive.
API
curl --location 'https://api.airbyte.ai/api/v1/connectors/instances/{your_connector_instance_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "candidate_attachment",
"action": "download",
"params": {
"id": 0,
"attachment_index": 0
}
}'
Params
| Parameter Name | Type | Required | Description |
|---|---|---|---|
id |
integer |
Yes | Candidate ID |
attachment_index |
integer |
Yes | Index of the attachment to download (0-based) |
range_header |
string |
No | Optional Range header for partial downloads (e.g., 'bytes=0-99') |
Authentication
The Greenhouse connector supports the following authentication methods:
Harvest API Key Authentication
| Field Name | Type | Required | Description |
|---|---|---|---|
api_key |
str |
Yes | Your Greenhouse Harvest API Key from the Dev Center |
Example
Python SDK
GreenhouseConnector(
auth_config=GreenhouseAuthConfig(
api_key="<Your Greenhouse Harvest API Key from the Dev Center>"
)
)
API
curl --location 'https://api.airbyte.ai/api/v1/connectors/instances' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"connector_definition_id": "59f1e50a-331f-4f09-b3e8-2e8d4d355f44",
"auth_config": {
"api_key": "<Your Greenhouse Harvest API Key from the Dev Center>"
},
"name": "My Greenhouse Connector"
}'