docs/ai-agents/connectors/greenhouse/REFERENCE.md
This is the full reference documentation for the Greenhouse agent connector.
The Greenhouse connector supports the following entities and actions.
| Entity | Actions |
|---|---|
| Candidates | List, Get, Search |
| Applications | List, Get, Search |
| Jobs | List, Get, Search |
| Offers | List, Get, Search |
| Users | List, Get, Search |
| Departments | List, Get, Search |
| Offices | List, Get, Search |
| Job Posts | List, Get, Search |
| Sources | List, Search |
| Scheduled Interviews | List, Get |
| Application Attachment | Download |
| Candidate Attachment | Download |
Returns a paginated list of all candidates in the organization
await greenhouse.candidates.list()
curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "candidates",
"action": "list"
}'
| 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 |
| 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 |
Get a single candidate by ID
await greenhouse.candidates.get(
id=0
)
curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "candidates",
"action": "get",
"params": {
"id": 0
}
}'
| Parameter Name | Type | Required | Description |
|---|---|---|---|
id | integer | Yes | Candidate ID |
| 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 |
Search and filter candidates records powered by Airbyte's data sync. This often provides additional fields and operators beyond what the API natively supports, making it easier to narrow down results before performing further operations. Only available in hosted mode.
await greenhouse.candidates.search(
query={"filter": {"eq": {"addresses": []}}}
)
curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "candidates",
"action": "search",
"params": {
"query": {"filter": {"eq": {"addresses": []}}}
}
}'
| Parameter Name | Type | Required | Description |
|---|---|---|---|
query | object | Yes | Filter and sort conditions. Supports operators: eq, neq, gt, gte, lt, lte, in, like, fuzzy, keyword, not, and, or |
query.filter | object | No | Filter conditions |
query.sort | array | No | Sort conditions |
limit | integer | No | Maximum results to return (default 1000) |
cursor | string | No | Pagination cursor from previous response's meta.cursor |
fields | array | No | Field paths to include in results |
| Field Name | Type | Description |
|---|---|---|
addresses | array | Candidate's addresses |
application_ids | array | List of application IDs |
applications | array | An array of all applications made by candidates. |
attachments | array | Attachments related to the candidate |
can_email | boolean | Indicates if candidate can be emailed |
company | string | Company where the candidate is associated |
coordinator | string | Coordinator assigned to the candidate |
created_at | string | Date and time of creation |
custom_fields | object | Custom fields associated with the candidate |
educations | array | List of candidate's educations |
email_addresses | array | Candidate's email addresses |
employments | array | List of candidate's employments |
first_name | string | Candidate's first name |
id | integer | Candidate's ID |
is_private | boolean | Indicates if the candidate's data is private |
keyed_custom_fields | object | Keyed custom fields associated with the candidate |
last_activity | string | Details of the last activity related to the candidate |
last_name | string | Candidate's last name |
phone_numbers | array | Candidate's phone numbers |
photo_url | string | URL of the candidate's profile photo |
recruiter | string | Recruiter assigned to the candidate |
social_media_addresses | array | Candidate's social media addresses |
tags | array | Tags associated with the candidate |
title | string | Candidate's title (e.g., Mr., Mrs., Dr.) |
updated_at | string | Date and time of last update |
website_addresses | array | List of candidate's website addresses |
| Field Name | Type | Description |
|---|---|---|
data | array | List of matching records |
meta | object | Pagination metadata |
meta.has_more | boolean | Whether additional pages are available |
meta.cursor | string | null | Cursor for next page of results |
meta.took_ms | number | null | Query execution time in milliseconds |
data[].addresses | array | Candidate's addresses |
data[].application_ids | array | List of application IDs |
data[].applications | array | An array of all applications made by candidates. |
data[].attachments | array | Attachments related to the candidate |
data[].can_email | boolean | Indicates if candidate can be emailed |
data[].company | string | Company where the candidate is associated |
data[].coordinator | string | Coordinator assigned to the candidate |
data[].created_at | string | Date and time of creation |
data[].custom_fields | object | Custom fields associated with the candidate |
data[].educations | array | List of candidate's educations |
data[].email_addresses | array | Candidate's email addresses |
data[].employments | array | List of candidate's employments |
data[].first_name | string | Candidate's first name |
data[].id | integer | Candidate's ID |
data[].is_private | boolean | Indicates if the candidate's data is private |
data[].keyed_custom_fields | object | Keyed custom fields associated with the candidate |
data[].last_activity | string | Details of the last activity related to the candidate |
data[].last_name | string | Candidate's last name |
data[].phone_numbers | array | Candidate's phone numbers |
data[].photo_url | string | URL of the candidate's profile photo |
data[].recruiter | string | Recruiter assigned to the candidate |
data[].social_media_addresses | array | Candidate's social media addresses |
data[].tags | array | Tags associated with the candidate |
data[].title | string | Candidate's title (e.g., Mr., Mrs., Dr.) |
data[].updated_at | string | Date and time of last update |
data[].website_addresses | array | List of candidate's website addresses |
Returns a paginated list of all applications
await greenhouse.applications.list()
curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "applications",
"action": "list"
}'
| 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 |
| 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 |
Get a single application by ID
await greenhouse.applications.get(
id=0
)
curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "applications",
"action": "get",
"params": {
"id": 0
}
}'
| Parameter Name | Type | Required | Description |
|---|---|---|---|
id | integer | Yes | Application ID |
| 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 |
Search and filter applications records powered by Airbyte's data sync. This often provides additional fields and operators beyond what the API natively supports, making it easier to narrow down results before performing further operations. Only available in hosted mode.
await greenhouse.applications.search(
query={"filter": {"eq": {"answers": []}}}
)
curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "applications",
"action": "search",
"params": {
"query": {"filter": {"eq": {"answers": []}}}
}
}'
| Parameter Name | Type | Required | Description |
|---|---|---|---|
query | object | Yes | Filter and sort conditions. Supports operators: eq, neq, gt, gte, lt, lte, in, like, fuzzy, keyword, not, and, or |
query.filter | object | No | Filter conditions |
query.sort | array | No | Sort conditions |
limit | integer | No | Maximum results to return (default 1000) |
cursor | string | No | Pagination cursor from previous response's meta.cursor |
fields | array | No | Field paths to include in results |
| Field Name | Type | Description |
|---|---|---|
answers | array | Answers provided in the application. |
applied_at | string | Timestamp when the candidate applied. |
attachments | array | Attachments uploaded with the application. |
candidate_id | integer | Unique identifier for the candidate. |
credited_to | object | Information about the employee who credited the application. |
current_stage | object | Current stage of the application process. |
id | integer | Unique identifier for the application. |
job_post_id | integer | |
jobs | array | Jobs applied for by the candidate. |
last_activity_at | string | Timestamp of the last activity on the application. |
location | string | Location related to the application. |
prospect | boolean | Status of the application prospect. |
prospect_detail | object | Details related to the application prospect. |
prospective_department | string | Prospective department for the candidate. |
prospective_office | string | Prospective office for the candidate. |
rejected_at | string | Timestamp when the application was rejected. |
rejection_details | object | Details related to the application rejection. |
rejection_reason | object | Reason for the application rejection. |
source | object | Source of the application. |
status | string | Status of the application. |
| Field Name | Type | Description |
|---|---|---|
data | array | List of matching records |
meta | object | Pagination metadata |
meta.has_more | boolean | Whether additional pages are available |
meta.cursor | string | null | Cursor for next page of results |
meta.took_ms | number | null | Query execution time in milliseconds |
data[].answers | array | Answers provided in the application. |
data[].applied_at | string | Timestamp when the candidate applied. |
data[].attachments | array | Attachments uploaded with the application. |
data[].candidate_id | integer | Unique identifier for the candidate. |
data[].credited_to | object | Information about the employee who credited the application. |
data[].current_stage | object | Current stage of the application process. |
data[].id | integer | Unique identifier for the application. |
data[].job_post_id | integer | |
data[].jobs | array | Jobs applied for by the candidate. |
data[].last_activity_at | string | Timestamp of the last activity on the application. |
data[].location | string | Location related to the application. |
data[].prospect | boolean | Status of the application prospect. |
data[].prospect_detail | object | Details related to the application prospect. |
data[].prospective_department | string | Prospective department for the candidate. |
data[].prospective_office | string | Prospective office for the candidate. |
data[].rejected_at | string | Timestamp when the application was rejected. |
data[].rejection_details | object | Details related to the application rejection. |
data[].rejection_reason | object | Reason for the application rejection. |
data[].source | object | Source of the application. |
data[].status | string | Status of the application. |
Returns a paginated list of all jobs in the organization
await greenhouse.jobs.list()
curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "jobs",
"action": "list"
}'
| 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 |
| 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> |
Get a single job by ID
await greenhouse.jobs.get(
id=0
)
curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "jobs",
"action": "get",
"params": {
"id": 0
}
}'
| Parameter Name | Type | Required | Description |
|---|---|---|---|
id | integer | Yes | Job ID |
| 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> |
Search and filter jobs records powered by Airbyte's data sync. This often provides additional fields and operators beyond what the API natively supports, making it easier to narrow down results before performing further operations. Only available in hosted mode.
await greenhouse.jobs.search(
query={"filter": {"eq": {"closed_at": "<str>"}}}
)
curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "jobs",
"action": "search",
"params": {
"query": {"filter": {"eq": {"closed_at": "<str>"}}}
}
}'
| Parameter Name | Type | Required | Description |
|---|---|---|---|
query | object | Yes | Filter and sort conditions. Supports operators: eq, neq, gt, gte, lt, lte, in, like, fuzzy, keyword, not, and, or |
query.filter | object | No | Filter conditions |
query.sort | array | No | Sort conditions |
limit | integer | No | Maximum results to return (default 1000) |
cursor | string | No | Pagination cursor from previous response's meta.cursor |
fields | array | No | Field paths to include in results |
| Field Name | Type | Description |
|---|---|---|
closed_at | string | The date and time the job was closed |
confidential | boolean | Indicates if the job details are confidential |
copied_from_id | integer | The ID of the job from which this job was copied |
created_at | string | The date and time the job was created |
custom_fields | object | Custom fields related to the job |
departments | array | Departments associated with the job |
hiring_team | object | Members of the hiring team for the job |
id | integer | Unique ID of the job |
is_template | boolean | Indicates if the job is a template |
keyed_custom_fields | object | Keyed custom fields related to the job |
name | string | Name of the job |
notes | string | Additional notes or comments about the job |
offices | array | Offices associated with the job |
opened_at | string | The date and time the job was opened |
openings | array | Openings associated with the job |
requisition_id | string | ID associated with the job requisition |
status | string | Current status of the job |
updated_at | string | The date and time the job was last updated |
| Field Name | Type | Description |
|---|---|---|
data | array | List of matching records |
meta | object | Pagination metadata |
meta.has_more | boolean | Whether additional pages are available |
meta.cursor | string | null | Cursor for next page of results |
meta.took_ms | number | null | Query execution time in milliseconds |
data[].closed_at | string | The date and time the job was closed |
data[].confidential | boolean | Indicates if the job details are confidential |
data[].copied_from_id | integer | The ID of the job from which this job was copied |
data[].created_at | string | The date and time the job was created |
data[].custom_fields | object | Custom fields related to the job |
data[].departments | array | Departments associated with the job |
data[].hiring_team | object | Members of the hiring team for the job |
data[].id | integer | Unique ID of the job |
data[].is_template | boolean | Indicates if the job is a template |
data[].keyed_custom_fields | object | Keyed custom fields related to the job |
data[].name | string | Name of the job |
data[].notes | string | Additional notes or comments about the job |
data[].offices | array | Offices associated with the job |
data[].opened_at | string | The date and time the job was opened |
data[].openings | array | Openings associated with the job |
data[].requisition_id | string | ID associated with the job requisition |
data[].status | string | Current status of the job |
data[].updated_at | string | The date and time the job was last updated |
Returns a paginated list of all offers
await greenhouse.offers.list()
curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "offers",
"action": "list"
}'
| 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 |
| 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 |
Get a single offer by ID
await greenhouse.offers.get(
id=0
)
curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "offers",
"action": "get",
"params": {
"id": 0
}
}'
| Parameter Name | Type | Required | Description |
|---|---|---|---|
id | integer | Yes | Offer ID |
| 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 |
Search and filter offers records powered by Airbyte's data sync. This often provides additional fields and operators beyond what the API natively supports, making it easier to narrow down results before performing further operations. Only available in hosted mode.
await greenhouse.offers.search(
query={"filter": {"eq": {"application_id": 0}}}
)
curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "offers",
"action": "search",
"params": {
"query": {"filter": {"eq": {"application_id": 0}}}
}
}'
| Parameter Name | Type | Required | Description |
|---|---|---|---|
query | object | Yes | Filter and sort conditions. Supports operators: eq, neq, gt, gte, lt, lte, in, like, fuzzy, keyword, not, and, or |
query.filter | object | No | Filter conditions |
query.sort | array | No | Sort conditions |
limit | integer | No | Maximum results to return (default 1000) |
cursor | string | No | Pagination cursor from previous response's meta.cursor |
fields | array | No | Field paths to include in results |
| Field Name | Type | Description |
|---|---|---|
application_id | integer | Unique identifier for the application associated with the offer |
candidate_id | integer | Unique identifier for the candidate associated with the offer |
created_at | string | Timestamp indicating when the offer was created |
custom_fields | object | Additional custom fields related to the offer |
id | integer | Unique identifier for the offer |
job_id | integer | Unique identifier for the job associated with the offer |
keyed_custom_fields | object | Keyed custom fields associated with the offer |
opening | object | Details about the job opening |
resolved_at | string | Timestamp indicating when the offer was resolved |
sent_at | string | Timestamp indicating when the offer was sent |
starts_at | string | Timestamp indicating when the offer starts |
status | string | Status of the offer |
updated_at | string | Timestamp indicating when the offer was last updated |
version | integer | Version of the offer data |
| Field Name | Type | Description |
|---|---|---|
data | array | List of matching records |
meta | object | Pagination metadata |
meta.has_more | boolean | Whether additional pages are available |
meta.cursor | string | null | Cursor for next page of results |
meta.took_ms | number | null | Query execution time in milliseconds |
data[].application_id | integer | Unique identifier for the application associated with the offer |
data[].candidate_id | integer | Unique identifier for the candidate associated with the offer |
data[].created_at | string | Timestamp indicating when the offer was created |
data[].custom_fields | object | Additional custom fields related to the offer |
data[].id | integer | Unique identifier for the offer |
data[].job_id | integer | Unique identifier for the job associated with the offer |
data[].keyed_custom_fields | object | Keyed custom fields associated with the offer |
data[].opening | object | Details about the job opening |
data[].resolved_at | string | Timestamp indicating when the offer was resolved |
data[].sent_at | string | Timestamp indicating when the offer was sent |
data[].starts_at | string | Timestamp indicating when the offer starts |
data[].status | string | Status of the offer |
data[].updated_at | string | Timestamp indicating when the offer was last updated |
data[].version | integer | Version of the offer data |
Returns a paginated list of all users
await greenhouse.users.list()
curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "users",
"action": "list"
}'
| 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 |
| 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> |
Get a single user by ID
await greenhouse.users.get(
id=0
)
curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "users",
"action": "get",
"params": {
"id": 0
}
}'
| Parameter Name | Type | Required | Description |
|---|---|---|---|
id | integer | Yes | User ID |
| 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> |
Search and filter users records powered by Airbyte's data sync. This often provides additional fields and operators beyond what the API natively supports, making it easier to narrow down results before performing further operations. Only available in hosted mode.
await greenhouse.users.search(
query={"filter": {"eq": {"created_at": "<str>"}}}
)
curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "users",
"action": "search",
"params": {
"query": {"filter": {"eq": {"created_at": "<str>"}}}
}
}'
| Parameter Name | Type | Required | Description |
|---|---|---|---|
query | object | Yes | Filter and sort conditions. Supports operators: eq, neq, gt, gte, lt, lte, in, like, fuzzy, keyword, not, and, or |
query.filter | object | No | Filter conditions |
query.sort | array | No | Sort conditions |
limit | integer | No | Maximum results to return (default 1000) |
cursor | string | No | Pagination cursor from previous response's meta.cursor |
fields | array | No | Field paths to include in results |
| Field Name | Type | Description |
|---|---|---|
created_at | string | The date and time when the user account was created. |
departments | array | List of departments associated with users |
disabled | boolean | Indicates whether the user account is disabled. |
emails | array | Email addresses of the users |
employee_id | string | Employee identifier for the user. |
first_name | string | The first name of the user. |
id | integer | Unique identifier for the user. |
last_name | string | The last name of the user. |
linked_candidate_ids | array | IDs of candidates linked to the user. |
name | string | The full name of the user. |
offices | array | List of office locations where users are based |
primary_email_address | string | The primary email address of the user. |
site_admin | boolean | Indicates whether the user is a site administrator. |
updated_at | string | The date and time when the user account was last updated. |
| Field Name | Type | Description |
|---|---|---|
data | array | List of matching records |
meta | object | Pagination metadata |
meta.has_more | boolean | Whether additional pages are available |
meta.cursor | string | null | Cursor for next page of results |
meta.took_ms | number | null | Query execution time in milliseconds |
data[].created_at | string | The date and time when the user account was created. |
data[].departments | array | List of departments associated with users |
data[].disabled | boolean | Indicates whether the user account is disabled. |
data[].emails | array | Email addresses of the users |
data[].employee_id | string | Employee identifier for the user. |
data[].first_name | string | The first name of the user. |
data[].id | integer | Unique identifier for the user. |
data[].last_name | string | The last name of the user. |
data[].linked_candidate_ids | array | IDs of candidates linked to the user. |
data[].name | string | The full name of the user. |
data[].offices | array | List of office locations where users are based |
data[].primary_email_address | string | The primary email address of the user. |
data[].site_admin | boolean | Indicates whether the user is a site administrator. |
data[].updated_at | string | The date and time when the user account was last updated. |
Returns a paginated list of all departments
await greenhouse.departments.list()
curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "departments",
"action": "list"
}'
| 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 |
| 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 |
Get a single department by ID
await greenhouse.departments.get(
id=0
)
curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "departments",
"action": "get",
"params": {
"id": 0
}
}'
| Parameter Name | Type | Required | Description |
|---|---|---|---|
id | integer | Yes | Department ID |
| 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 |
Search and filter departments records powered by Airbyte's data sync. This often provides additional fields and operators beyond what the API natively supports, making it easier to narrow down results before performing further operations. Only available in hosted mode.
await greenhouse.departments.search(
query={"filter": {"eq": {"child_department_external_ids": []}}}
)
curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "departments",
"action": "search",
"params": {
"query": {"filter": {"eq": {"child_department_external_ids": []}}}
}
}'
| Parameter Name | Type | Required | Description |
|---|---|---|---|
query | object | Yes | Filter and sort conditions. Supports operators: eq, neq, gt, gte, lt, lte, in, like, fuzzy, keyword, not, and, or |
query.filter | object | No | Filter conditions |
query.sort | array | No | Sort conditions |
limit | integer | No | Maximum results to return (default 1000) |
cursor | string | No | Pagination cursor from previous response's meta.cursor |
fields | array | No | Field paths to include in results |
| Field Name | Type | Description |
|---|---|---|
child_department_external_ids | array | External IDs of child departments associated with this department. |
child_ids | array | Unique IDs of child departments associated with this department. |
external_id | string | External ID of this department. |
id | integer | Unique ID of this department. |
name | string | Name of the department. |
parent_department_external_id | string | External ID of the parent department of this department. |
parent_id | integer | Unique ID of the parent department of this department. |
| Field Name | Type | Description |
|---|---|---|
data | array | List of matching records |
meta | object | Pagination metadata |
meta.has_more | boolean | Whether additional pages are available |
meta.cursor | string | null | Cursor for next page of results |
meta.took_ms | number | null | Query execution time in milliseconds |
data[].child_department_external_ids | array | External IDs of child departments associated with this department. |
data[].child_ids | array | Unique IDs of child departments associated with this department. |
data[].external_id | string | External ID of this department. |
data[].id | integer | Unique ID of this department. |
data[].name | string | Name of the department. |
data[].parent_department_external_id | string | External ID of the parent department of this department. |
data[].parent_id | integer | Unique ID of the parent department of this department. |
Returns a paginated list of all offices
await greenhouse.offices.list()
curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "offices",
"action": "list"
}'
| 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 |
| 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 |
Get a single office by ID
await greenhouse.offices.get(
id=0
)
curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "offices",
"action": "get",
"params": {
"id": 0
}
}'
| Parameter Name | Type | Required | Description |
|---|---|---|---|
id | integer | Yes | Office ID |
| 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 |
Search and filter offices records powered by Airbyte's data sync. This often provides additional fields and operators beyond what the API natively supports, making it easier to narrow down results before performing further operations. Only available in hosted mode.
await greenhouse.offices.search(
query={"filter": {"eq": {"child_ids": []}}}
)
curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "offices",
"action": "search",
"params": {
"query": {"filter": {"eq": {"child_ids": []}}}
}
}'
| Parameter Name | Type | Required | Description |
|---|---|---|---|
query | object | Yes | Filter and sort conditions. Supports operators: eq, neq, gt, gte, lt, lte, in, like, fuzzy, keyword, not, and, or |
query.filter | object | No | Filter conditions |
query.sort | array | No | Sort conditions |
limit | integer | No | Maximum results to return (default 1000) |
cursor | string | No | Pagination cursor from previous response's meta.cursor |
fields | array | No | Field paths to include in results |
| Field Name | Type | Description |
|---|---|---|
child_ids | array | IDs of child offices associated with this office |
child_office_external_ids | array | External IDs of child offices associated with this office |
external_id | string | Unique identifier for this office in the external system |
id | integer | Unique identifier for this office in the API system |
location | object | Location details of this office |
name | string | Name of the office |
parent_id | integer | ID of the parent office, if this office is a branch office |
parent_office_external_id | string | External ID of the parent office in the external system |
primary_contact_user_id | integer | User ID of the primary contact person for this office |
| Field Name | Type | Description |
|---|---|---|
data | array | List of matching records |
meta | object | Pagination metadata |
meta.has_more | boolean | Whether additional pages are available |
meta.cursor | string | null | Cursor for next page of results |
meta.took_ms | number | null | Query execution time in milliseconds |
data[].child_ids | array | IDs of child offices associated with this office |
data[].child_office_external_ids | array | External IDs of child offices associated with this office |
data[].external_id | string | Unique identifier for this office in the external system |
data[].id | integer | Unique identifier for this office in the API system |
data[].location | object | Location details of this office |
data[].name | string | Name of the office |
data[].parent_id | integer | ID of the parent office, if this office is a branch office |
data[].parent_office_external_id | string | External ID of the parent office in the external system |
data[].primary_contact_user_id | integer | User ID of the primary contact person for this office |
Returns a paginated list of all job posts
await greenhouse.job_posts.list()
curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "job_posts",
"action": "list"
}'
| 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 |
| 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> |
Get a single job post by ID
await greenhouse.job_posts.get(
id=0
)
curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "job_posts",
"action": "get",
"params": {
"id": 0
}
}'
| Parameter Name | Type | Required | Description |
|---|---|---|---|
id | integer | Yes | Job Post ID |
| 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> |
Search and filter job posts records powered by Airbyte's data sync. This often provides additional fields and operators beyond what the API natively supports, making it easier to narrow down results before performing further operations. Only available in hosted mode.
await greenhouse.job_posts.search(
query={"filter": {"eq": {"active": True}}}
)
curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "job_posts",
"action": "search",
"params": {
"query": {"filter": {"eq": {"active": True}}}
}
}'
| Parameter Name | Type | Required | Description |
|---|---|---|---|
query | object | Yes | Filter and sort conditions. Supports operators: eq, neq, gt, gte, lt, lte, in, like, fuzzy, keyword, not, and, or |
query.filter | object | No | Filter conditions |
query.sort | array | No | Sort conditions |
limit | integer | No | Maximum results to return (default 1000) |
cursor | string | No | Pagination cursor from previous response's meta.cursor |
fields | array | No | Field paths to include in results |
| Field Name | Type | Description |
|---|---|---|
active | boolean | Flag indicating if the job post is active or not. |
content | string | Content or description of the job post. |
created_at | string | Date and time when the job post was created. |
demographic_question_set_id | integer | ID of the demographic question set associated with the job post. |
external | boolean | Flag indicating if the job post is external or not. |
first_published_at | string | Date and time when the job post was first published. |
id | integer | Unique identifier of the job post. |
internal | boolean | Flag indicating if the job post is internal or not. |
internal_content | string | Internal content or description of the job post. |
job_id | integer | ID of the job associated with the job post. |
live | boolean | Flag indicating if the job post is live or not. |
location | object | Details about the job post location. |
questions | array | List of questions related to the job post. |
title | string | Title or headline of the job post. |
updated_at | string | Date and time when the job post was last updated. |
| Field Name | Type | Description |
|---|---|---|
data | array | List of matching records |
meta | object | Pagination metadata |
meta.has_more | boolean | Whether additional pages are available |
meta.cursor | string | null | Cursor for next page of results |
meta.took_ms | number | null | Query execution time in milliseconds |
data[].active | boolean | Flag indicating if the job post is active or not. |
data[].content | string | Content or description of the job post. |
data[].created_at | string | Date and time when the job post was created. |
data[].demographic_question_set_id | integer | ID of the demographic question set associated with the job post. |
data[].external | boolean | Flag indicating if the job post is external or not. |
data[].first_published_at | string | Date and time when the job post was first published. |
data[].id | integer | Unique identifier of the job post. |
data[].internal | boolean | Flag indicating if the job post is internal or not. |
data[].internal_content | string | Internal content or description of the job post. |
data[].job_id | integer | ID of the job associated with the job post. |
data[].live | boolean | Flag indicating if the job post is live or not. |
data[].location | object | Details about the job post location. |
data[].questions | array | List of questions related to the job post. |
data[].title | string | Title or headline of the job post. |
data[].updated_at | string | Date and time when the job post was last updated. |
Returns a paginated list of all sources
await greenhouse.sources.list()
curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "sources",
"action": "list"
}'
| 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 |
| Field Name | Type | Description |
|---|---|---|
id | integer | |
name | string | |
type | object | null |
Search and filter sources records powered by Airbyte's data sync. This often provides additional fields and operators beyond what the API natively supports, making it easier to narrow down results before performing further operations. Only available in hosted mode.
await greenhouse.sources.search(
query={"filter": {"eq": {"id": 0}}}
)
curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "sources",
"action": "search",
"params": {
"query": {"filter": {"eq": {"id": 0}}}
}
}'
| Parameter Name | Type | Required | Description |
|---|---|---|---|
query | object | Yes | Filter and sort conditions. Supports operators: eq, neq, gt, gte, lt, lte, in, like, fuzzy, keyword, not, and, or |
query.filter | object | No | Filter conditions |
query.sort | array | No | Sort conditions |
limit | integer | No | Maximum results to return (default 1000) |
cursor | string | No | Pagination cursor from previous response's meta.cursor |
fields | array | No | Field paths to include in results |
| Field Name | Type | Description |
|---|---|---|
id | integer | The unique identifier for the source. |
name | string | The name of the source. |
type | object | Type of the data source |
| Field Name | Type | Description |
|---|---|---|
data | array | List of matching records |
meta | object | Pagination metadata |
meta.has_more | boolean | Whether additional pages are available |
meta.cursor | string | null | Cursor for next page of results |
meta.took_ms | number | null | Query execution time in milliseconds |
data[].id | integer | The unique identifier for the source. |
data[].name | string | The name of the source. |
data[].type | object | Type of the data source |
Returns a paginated list of all scheduled interviews
await greenhouse.scheduled_interviews.list()
curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "scheduled_interviews",
"action": "list"
}'
| 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 |
| 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> |
Get a single scheduled interview by ID
await greenhouse.scheduled_interviews.get(
id=0
)
curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "scheduled_interviews",
"action": "get",
"params": {
"id": 0
}
}'
| Parameter Name | Type | Required | Description |
|---|---|---|---|
id | integer | Yes | Scheduled Interview ID |
| 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> |
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.
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.
curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_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
}
}'
| 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') |
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.
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.
curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_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
}
}'
| 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') |