Skip to main content

Greenhouse full reference

This is the full reference documentation for the Greenhouse agent connector.

Supported entities and actions

The Greenhouse connector supports the following entities and actions.

EntityActions
ApplicationsList, Context Store Search
CandidatesList, Context Store Search
DepartmentsList, Context Store Search
InterviewsList
Job PostsList, Context Store Search, Semantic Search
JobsList, Context Store Search, Semantic Search
OffersList, Context Store Search
OfficesList, Context Store Search
SourcesList, Context Store Search
UsersList, Context Store Search
AttachmentsList, Download

Applications

Applications List

Returns a cursor-paginated list of applications.

CLI

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "greenhouse",
"entity": "applications",
"action": "list"
}'

Python SDK

await greenhouse.applications.list()

API

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"
}'

Parameters

Parameter NameTypeRequiredDescription
cursorstringNoCursor from the previous response Link header. Do not combine with any other parameter.
per_pageintegerNoNumber of records to return on the first page.
idsarray<integer>NoReturn only records with these IDs (maximum 50).
updated_atstringNoFilter by updated timestamp using the Harvest v3 pipe expression, such as gte
Response Schema

Records

Field NameTypeDescription
agency_note_idnull | integer
answersnull | array
candidate_idnull | integer
coordinator_idnull | integer
created_atnull | string
custom_fieldsnull | object
idnull | integer
job_idnull | integer
job_interview_stage_idnull | integer
job_post_idnull | integer
last_activity_atnull | string
location_addressnull | string
needs_decisionnull | boolean
prospectnull | boolean
prospective_job_idsnull | array
recruiter_idnull | integer
referrer_idnull | integer
rejected_atnull | string
rejection_reason_idnull | integer
source_idnull | integer
stage_idnull | integer
stage_namenull | string
statusnull | string
updated_atnull | string

Meta

Field NameTypeDescription
nextstring

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.

CLI

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "greenhouse",
"entity": "applications",
"action": "context_store_search",
"params": {
"query": {
"filter": {
"eq": {
"agency_note_id": 0
}
}
}
}
}'

Python SDK

await greenhouse.applications.context_store_search(
query={"filter": {"eq": {"agency_note_id": 0}}}
)

API

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": "context_store_search",
"params": {
"query": {"filter": {"eq": {"agency_note_id": 0}}}
}
}'

Parameters

Parameter NameTypeRequiredDescription
queryobjectYesFilter and sort conditions. Supports operators: eq, neq, gt, gte, lt, lte, in, startswith, endswith, contains, array_contains, fuzzy, keyword, not, and, or
query.filterobjectNoFilter conditions
query.sortarrayNoSort conditions
limitintegerNoMaximum results to return (default 1000)
cursorstringNoPagination cursor from previous response's meta.cursor
fieldsarrayNoField paths to include in results

Searchable Fields

Field NameTypeDescription
agency_note_idintegerId of the note created when the candidate was submitted by an agency, or null if the application did not come through an agency.
answersarrayFree-text answers the candidate provided on the job post application form. Each entry pairs the question text with the candidate's answer.
candidate_idintegerId of the candidate (person) this application belongs to.
coordinator_idintegerId of the user assigned as coordinator on the application's job, or null when unassigned.
created_atstringCreated at from the Greenhouse v3 applications record.
custom_fieldsobjectOrg-defined custom fields keyed by the field's name_key. Each value carries the field's display name, its type, and its value.
idintegerId from the Greenhouse v3 applications record.
job_idintegerId of the job this application is on. null for jobless prospect applications.
job_interview_stage_idintegerId of the job interview stage definition (see GET /v3/job_interview_stages) the candidate is currently in for this application. null for prospect applications and applications in a terminal state.
job_post_idintegerId of the job post the candidate applied through, or null if the application was created internally rather than from a posted role.
last_activity_atstringTimestamp of the most recent activity on this application (notes, emails, stage changes, etc.), in ISO 8601.
location_addressstringFree-form location string captured on the application (typically from the job post's location question).
needs_decisionbooleantrue when the application is waiting on a hiring-team decision (scorecard completion, advance/reject, etc.) in its current stage.
prospectbooleantrue for prospect applications (sourced candidates not yet attached to a single job), false for candidate applications on a specific job.
prospective_job_idsarrayFor prospect applications, the ids of jobs the prospect is being considered for. Empty for non-prospect applications and for jobless prospects.
recruiter_idintegerId of the user assigned as recruiter on the application's job, or null when unassigned.
referrer_idintegerId of the referrer who credited this application, or null if there was no referral. References a referrer, not a Greenhouse user.
rejected_atstringTimestamp the application was rejected, in ISO 8601. null for applications that have not been rejected.
rejection_reason_idintegerId of the rejection reason selected for the application. References a /v3/rejection_reasons row scoped to the organization. null when the application was rejected without a reason, or has not been rejected.
source_idintegerId of the source the application is attributed to (e.g. a job board, an event, an employee referral source). null if no source is set.
stage_idintegerId of the interview stage the candidate is currently in for this application. null for prospect applications and applications in a terminal state.
stage_namestringDisplay name of the candidate's current interview stage on this application.
statusstringLifecycle status of the application. in_process for active candidates, rejected for rejected applications, hired once an offer is closed and the hire endpoint has fired, and converted for prospect applications that have been promoted to a candidate application via convert_to_candidate.
updated_atstringUpdated at from the Greenhouse v3 applications record.
Response Schema
Field NameTypeDescription
dataarrayList of matching records
metaobjectPagination metadata
meta.has_morebooleanWhether additional pages are available
meta.cursorstring | nullCursor for next page of results
meta.took_msnumber | nullQuery execution time in milliseconds
data[].agency_note_idintegerId of the note created when the candidate was submitted by an agency, or null if the application did not come through an agency.
data[].answersarrayFree-text answers the candidate provided on the job post application form. Each entry pairs the question text with the candidate's answer.
data[].candidate_idintegerId of the candidate (person) this application belongs to.
data[].coordinator_idintegerId of the user assigned as coordinator on the application's job, or null when unassigned.
data[].created_atstringCreated at from the Greenhouse v3 applications record.
data[].custom_fieldsobjectOrg-defined custom fields keyed by the field's name_key. Each value carries the field's display name, its type, and its value.
data[].idintegerId from the Greenhouse v3 applications record.
data[].job_idintegerId of the job this application is on. null for jobless prospect applications.
data[].job_interview_stage_idintegerId of the job interview stage definition (see GET /v3/job_interview_stages) the candidate is currently in for this application. null for prospect applications and applications in a terminal state.
data[].job_post_idintegerId of the job post the candidate applied through, or null if the application was created internally rather than from a posted role.
data[].last_activity_atstringTimestamp of the most recent activity on this application (notes, emails, stage changes, etc.), in ISO 8601.
data[].location_addressstringFree-form location string captured on the application (typically from the job post's location question).
data[].needs_decisionbooleantrue when the application is waiting on a hiring-team decision (scorecard completion, advance/reject, etc.) in its current stage.
data[].prospectbooleantrue for prospect applications (sourced candidates not yet attached to a single job), false for candidate applications on a specific job.
data[].prospective_job_idsarrayFor prospect applications, the ids of jobs the prospect is being considered for. Empty for non-prospect applications and for jobless prospects.
data[].recruiter_idintegerId of the user assigned as recruiter on the application's job, or null when unassigned.
data[].referrer_idintegerId of the referrer who credited this application, or null if there was no referral. References a referrer, not a Greenhouse user.
data[].rejected_atstringTimestamp the application was rejected, in ISO 8601. null for applications that have not been rejected.
data[].rejection_reason_idintegerId of the rejection reason selected for the application. References a /v3/rejection_reasons row scoped to the organization. null when the application was rejected without a reason, or has not been rejected.
data[].source_idintegerId of the source the application is attributed to (e.g. a job board, an event, an employee referral source). null if no source is set.
data[].stage_idintegerId of the interview stage the candidate is currently in for this application. null for prospect applications and applications in a terminal state.
data[].stage_namestringDisplay name of the candidate's current interview stage on this application.
data[].statusstringLifecycle status of the application. in_process for active candidates, rejected for rejected applications, hired once an offer is closed and the hire endpoint has fired, and converted for prospect applications that have been promoted to a candidate application via convert_to_candidate.
data[].updated_atstringUpdated at from the Greenhouse v3 applications record.

Candidates

Candidates List

Returns a cursor-paginated list of candidates.

CLI

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "greenhouse",
"entity": "candidates",
"action": "list"
}'

Python SDK

await greenhouse.candidates.list()

API

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"
}'

Parameters

Parameter NameTypeRequiredDescription
cursorstringNoCursor from the previous response Link header. Do not combine with any other parameter.
per_pageintegerNoNumber of records to return on the first page.
idsarray<integer>NoReturn only records with these IDs (maximum 50).
updated_atstringNoFilter by updated timestamp using the Harvest v3 pipe expression, such as gte
Response Schema

Records

Field NameTypeDescription
addressesnull | array
can_emailnull | boolean
companynull | string
created_atnull | string
custom_fieldsnull | object
email_addressesnull | array
first_namenull | string
idnull | integer
last_activity_atnull | string
last_namenull | string
linked_user_idsnull | array
phone_numbersnull | array
preferred_namenull | string
privatenull | boolean
social_media_addressesnull | array
tagsnull | array
time_zonenull | string
titlenull | string
updated_atnull | string
website_addressesnull | array

Meta

Field NameTypeDescription
nextstring

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.

CLI

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "greenhouse",
"entity": "candidates",
"action": "context_store_search",
"params": {
"query": {
"filter": {
"eq": {
"addresses": []
}
}
}
}
}'

Python SDK

await greenhouse.candidates.context_store_search(
query={"filter": {"eq": {"addresses": []}}}
)

API

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": "context_store_search",
"params": {
"query": {"filter": {"eq": {"addresses": []}}}
}
}'

Parameters

Parameter NameTypeRequiredDescription
queryobjectYesFilter and sort conditions. Supports operators: eq, neq, gt, gte, lt, lte, in, startswith, endswith, contains, array_contains, fuzzy, keyword, not, and, or
query.filterobjectNoFilter conditions
query.sortarrayNoSort conditions
limitintegerNoMaximum results to return (default 1000)
cursorstringNoPagination cursor from previous response's meta.cursor
fieldsarrayNoField paths to include in results

Searchable Fields

Field NameTypeDescription
addressesarrayPostal addresses on the candidate's profile. Each entry pairs the value with a type such as home, work, or other.
can_emailbooleanWhether this candidate has consented to receive email communication from your organization.
companystringCandidate's current company, as entered on their profile.
created_atstringCreated at from the Greenhouse v3 candidates record.
custom_fieldsobjectOrg-defined custom fields keyed by the field's name_key. Each value carries the field's display name, its type, and its value.
email_addressesarrayEmail addresses on the candidate's profile. Each entry pairs the value with a type such as personal, work, or other.
first_namestringFirst name from the Greenhouse v3 candidates record.
idintegerId from the Greenhouse v3 candidates record.
last_activity_atstringTimestamp of the most recent activity on any of the candidate's applications (notes, emails, stage changes, etc.), in ISO 8601.
last_namestringLast name from the Greenhouse v3 candidates record.
linked_user_idsarrayIds of Greenhouse users linked to this candidate (employees represented by both a user record and a candidate record).
phone_numbersarrayPhone numbers on the candidate's profile. Each entry pairs the value with a type such as mobile, home, work, skype, or other.
preferred_namestringPreferred or chosen name the candidate goes by, when different from their legal first name.
privatebooleanIf true, the candidate is restricted to users with View Private Candidates access. Defaults to false.
social_media_addressesarraySocial media handles or URLs on the candidate's profile. Social entries are untyped — only the value is returned.
tagsarrayCandidate tag names applied to this candidate within your organization.
time_zonestringCandidate's time zone as a Rails-style identifier (for example Eastern Time (US & Canada)).
titlestringCandidate's current job title, as entered on their profile.
updated_atstringUpdated at from the Greenhouse v3 candidates record.
website_addressesarrayPersonal websites or portfolio URLs on the candidate's profile. Each entry pairs the value with a type such as personal, company, portfolio, blog, or other.
Response Schema
Field NameTypeDescription
dataarrayList of matching records
metaobjectPagination metadata
meta.has_morebooleanWhether additional pages are available
meta.cursorstring | nullCursor for next page of results
meta.took_msnumber | nullQuery execution time in milliseconds
data[].addressesarrayPostal addresses on the candidate's profile. Each entry pairs the value with a type such as home, work, or other.
data[].can_emailbooleanWhether this candidate has consented to receive email communication from your organization.
data[].companystringCandidate's current company, as entered on their profile.
data[].created_atstringCreated at from the Greenhouse v3 candidates record.
data[].custom_fieldsobjectOrg-defined custom fields keyed by the field's name_key. Each value carries the field's display name, its type, and its value.
data[].email_addressesarrayEmail addresses on the candidate's profile. Each entry pairs the value with a type such as personal, work, or other.
data[].first_namestringFirst name from the Greenhouse v3 candidates record.
data[].idintegerId from the Greenhouse v3 candidates record.
data[].last_activity_atstringTimestamp of the most recent activity on any of the candidate's applications (notes, emails, stage changes, etc.), in ISO 8601.
data[].last_namestringLast name from the Greenhouse v3 candidates record.
data[].linked_user_idsarrayIds of Greenhouse users linked to this candidate (employees represented by both a user record and a candidate record).
data[].phone_numbersarrayPhone numbers on the candidate's profile. Each entry pairs the value with a type such as mobile, home, work, skype, or other.
data[].preferred_namestringPreferred or chosen name the candidate goes by, when different from their legal first name.
data[].privatebooleanIf true, the candidate is restricted to users with View Private Candidates access. Defaults to false.
data[].social_media_addressesarraySocial media handles or URLs on the candidate's profile. Social entries are untyped — only the value is returned.
data[].tagsarrayCandidate tag names applied to this candidate within your organization.
data[].time_zonestringCandidate's time zone as a Rails-style identifier (for example Eastern Time (US & Canada)).
data[].titlestringCandidate's current job title, as entered on their profile.
data[].updated_atstringUpdated at from the Greenhouse v3 candidates record.
data[].website_addressesarrayPersonal websites or portfolio URLs on the candidate's profile. Each entry pairs the value with a type such as personal, company, portfolio, blog, or other.

Departments

Departments List

Returns a cursor-paginated list of departments.

CLI

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "greenhouse",
"entity": "departments",
"action": "list"
}'

Python SDK

await greenhouse.departments.list()

API

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"
}'

Parameters

Parameter NameTypeRequiredDescription
cursorstringNoCursor from the previous response Link header. Do not combine with any other parameter.
per_pageintegerNoNumber of records to return on the first page.
idsarray<integer>NoReturn only records with these IDs (maximum 50).
Response Schema

Records

Field NameTypeDescription
created_atnull | string
external_idnull | string
idnull | integer
namenull | string
parent_idnull | integer
updated_atnull | string

Meta

Field NameTypeDescription
nextstring

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.

CLI

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "greenhouse",
"entity": "departments",
"action": "context_store_search",
"params": {
"query": {
"filter": {
"eq": {
"created_at": "<str>"
}
}
}
}
}'

Python SDK

await greenhouse.departments.context_store_search(
query={"filter": {"eq": {"created_at": "<str>"}}}
)

API

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": "context_store_search",
"params": {
"query": {"filter": {"eq": {"created_at": "<str>"}}}
}
}'

Parameters

Parameter NameTypeRequiredDescription
queryobjectYesFilter and sort conditions. Supports operators: eq, neq, gt, gte, lt, lte, in, startswith, endswith, contains, array_contains, fuzzy, keyword, not, and, or
query.filterobjectNoFilter conditions
query.sortarrayNoSort conditions
limitintegerNoMaximum results to return (default 1000)
cursorstringNoPagination cursor from previous response's meta.cursor
fieldsarrayNoField paths to include in results

Searchable Fields

Field NameTypeDescription
created_atstringCreated at from the Greenhouse v3 departments record.
external_idstringPartner-supplied identifier for the department, typically the matching id from an HRIS or other external system. Free-form string and null when no external id has been set.
idintegerId from the Greenhouse v3 departments record.
namestringDisplay name of the department (e.g. Engineering, Marketing).
parent_idintegerId of the parent department in the organization's department tree. null for top-level departments. References another /v3/departments row.
updated_atstringUpdated at from the Greenhouse v3 departments record.
Response Schema
Field NameTypeDescription
dataarrayList of matching records
metaobjectPagination metadata
meta.has_morebooleanWhether additional pages are available
meta.cursorstring | nullCursor for next page of results
meta.took_msnumber | nullQuery execution time in milliseconds
data[].created_atstringCreated at from the Greenhouse v3 departments record.
data[].external_idstringPartner-supplied identifier for the department, typically the matching id from an HRIS or other external system. Free-form string and null when no external id has been set.
data[].idintegerId from the Greenhouse v3 departments record.
data[].namestringDisplay name of the department (e.g. Engineering, Marketing).
data[].parent_idintegerId of the parent department in the organization's department tree. null for top-level departments. References another /v3/departments row.
data[].updated_atstringUpdated at from the Greenhouse v3 departments record.

Interviews

Interviews List

Returns a cursor-paginated list of interviews.

CLI

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "greenhouse",
"entity": "interviews",
"action": "list"
}'

Python SDK

await greenhouse.interviews.list()

API

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": "interviews",
"action": "list"
}'

Parameters

Parameter NameTypeRequiredDescription
cursorstringNoCursor from the previous response Link header. Do not combine with any other parameter.
per_pageintegerNoNumber of records to return on the first page.
idsarray<integer>NoReturn only records with these IDs (maximum 50).
updated_atstringNoFilter by updated timestamp using the Harvest v3 pipe expression, such as gte
Response Schema

Records

Field NameTypeDescription
all_day_end_onnull | string
all_day_start_onnull | string
application_idnull | integer
availability_received_atnull | string
created_atnull | string
ends_atnull | string
external_event_idnull | string
idnull | integer
job_idnull | integer
job_interview_idnull | integer
locationnull | string
organizer_idnull | integer
scheduled_atnull | string
starts_atnull | string
statusnull | string
updated_atnull | string
video_conferencing_urlnull | string

Meta

Field NameTypeDescription
nextstring

Job Posts

Job Posts List

Returns a cursor-paginated list of job posts.

CLI

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "greenhouse",
"entity": "job_posts",
"action": "list"
}'

Python SDK

await greenhouse.job_posts.list()

API

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"
}'

Parameters

Parameter NameTypeRequiredDescription
cursorstringNoCursor from the previous response Link header. Do not combine with any other parameter.
per_pageintegerNoNumber of records to return on the first page.
idsarray<integer>NoReturn only records with these IDs (maximum 50).
updated_atstringNoFilter by updated timestamp using the Harvest v3 pipe expression, such as gte
activebooleanNoFilter by active status.
Response Schema

Records

Field NameTypeDescription
activenull | boolean
contentnull | string
created_atnull | string
demographic_question_set_idnull | integer
featurednull | boolean
first_published_atnull | string
idnull | integer
internalnull | boolean
internal_contentnull | string
job_board_idnull | integer
job_idnull | integer
languagenull | string
livenull | boolean
public_urlnull | string
questionsnull | array
titlenull | string
updated_atnull | string

Meta

Field NameTypeDescription
nextstring

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.

CLI

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "greenhouse",
"entity": "job_posts",
"action": "context_store_search",
"params": {
"query": {
"filter": {
"eq": {
"active": true
}
}
}
}
}'

Python SDK

await greenhouse.job_posts.context_store_search(
query={"filter": {"eq": {"active": True}}}
)

API

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": "context_store_search",
"params": {
"query": {"filter": {"eq": {"active": True}}}
}
}'

Parameters

Parameter NameTypeRequiredDescription
queryobjectYesFilter and sort conditions. Supports operators: eq, neq, gt, gte, lt, lte, in, startswith, endswith, contains, array_contains, fuzzy, keyword, not, and, or
query.filterobjectNoFilter conditions
query.sortarrayNoSort conditions
limitintegerNoMaximum results to return (default 1000)
cursorstringNoPagination cursor from previous response's meta.cursor
fieldsarrayNoField paths to include in results

Searchable Fields

Field NameTypeDescription
activebooleanIf true, the post has not been deleted. Deleted posts are excluded by default; pass active=false on the list endpoint to retrieve them.
contentstringHTML body of the post shown to candidates on the job board. For internal posts this returns the internal_content instead. Sanitized server-side — only a limited element/attribute allowlist (including iframe, video, source) survives. null while the post is still being scaffolded.
created_atstringCreated at from the Greenhouse v3 job posts record.
demographic_question_set_idintegerId of the demographic question set surfaced to candidates on this post for diversity, equity, and inclusion (DE&I) reporting. null when the post does not collect demographic data.
featuredbooleanIf true, the post is currently featured on the organization's internal job board and surfaces in the weekly internal-jobs email. Only internal posts can be featured, and at most three can be featured at a time.
first_published_atstringTimestamp the post first transitioned to live, in ISO 8601. null for posts that have never been published.
idintegerId from the Greenhouse v3 job posts record.
internalbooleanIf true, the post lives on an internal job board and is visible only to existing employees signed in to the internal board. If false, the post is external and lives on a public-facing job_board. Set by the board the post is associated with at create time.
internal_contentstringHTML body shown on the internal job board when the post is also configured as internal. null for external-only posts. Same sanitization rules as content.
job_board_idintegerId of the job_board this post is published to. Resolves to either an external (careers site, syndicated board) or internal job board depending on internal. Each post belongs to exactly one board at a time.
job_idintegerId of the parent job (requisition) this post belongs to. A single job can have multiple posts; the job is the source of truth for the hiring team, openings, and interview plan.
languagestringISO 639-1 locale of the post, used to render the candidate-facing application form in the matching language (e.g. en, fr, ja). null when no locale has been chosen.
livebooleanIf true, the post is published (job_application_status is live) and its job board is also live. A post on an unpublished board is not live — its public_url returns a 404 until the board is enabled.
public_urlstringCanonical public URL of the post on its job board, including the gh_jid tracking parameter. null when the post has no associated job board or the board has no public URL configured.
questionsarrayApplication form questions presented to candidates on this post, including default questions (resume, cover letter, basic info) and any custom questions configured by the hiring team. Ordered as they appear on the form.
titlestringPublic-facing title shown to candidates on the job board (e.g. Senior Backend Engineer, Remote). Distinct from the internal job.name — a single job can have several posts with different titles, one per board, language, or geography.
updated_atstringUpdated at from the Greenhouse v3 job posts record.
Response Schema
Field NameTypeDescription
dataarrayList of matching records
metaobjectPagination metadata
meta.has_morebooleanWhether additional pages are available
meta.cursorstring | nullCursor for next page of results
meta.took_msnumber | nullQuery execution time in milliseconds
data[].activebooleanIf true, the post has not been deleted. Deleted posts are excluded by default; pass active=false on the list endpoint to retrieve them.
data[].contentstringHTML body of the post shown to candidates on the job board. For internal posts this returns the internal_content instead. Sanitized server-side — only a limited element/attribute allowlist (including iframe, video, source) survives. null while the post is still being scaffolded.
data[].created_atstringCreated at from the Greenhouse v3 job posts record.
data[].demographic_question_set_idintegerId of the demographic question set surfaced to candidates on this post for diversity, equity, and inclusion (DE&I) reporting. null when the post does not collect demographic data.
data[].featuredbooleanIf true, the post is currently featured on the organization's internal job board and surfaces in the weekly internal-jobs email. Only internal posts can be featured, and at most three can be featured at a time.
data[].first_published_atstringTimestamp the post first transitioned to live, in ISO 8601. null for posts that have never been published.
data[].idintegerId from the Greenhouse v3 job posts record.
data[].internalbooleanIf true, the post lives on an internal job board and is visible only to existing employees signed in to the internal board. If false, the post is external and lives on a public-facing job_board. Set by the board the post is associated with at create time.
data[].internal_contentstringHTML body shown on the internal job board when the post is also configured as internal. null for external-only posts. Same sanitization rules as content.
data[].job_board_idintegerId of the job_board this post is published to. Resolves to either an external (careers site, syndicated board) or internal job board depending on internal. Each post belongs to exactly one board at a time.
data[].job_idintegerId of the parent job (requisition) this post belongs to. A single job can have multiple posts; the job is the source of truth for the hiring team, openings, and interview plan.
data[].languagestringISO 639-1 locale of the post, used to render the candidate-facing application form in the matching language (e.g. en, fr, ja). null when no locale has been chosen.
data[].livebooleanIf true, the post is published (job_application_status is live) and its job board is also live. A post on an unpublished board is not live — its public_url returns a 404 until the board is enabled.
data[].public_urlstringCanonical public URL of the post on its job board, including the gh_jid tracking parameter. null when the post has no associated job board or the board has no public URL configured.
data[].questionsarrayApplication form questions presented to candidates on this post, including default questions (resume, cover letter, basic info) and any custom questions configured by the hiring team. Ordered as they appear on the form.
data[].titlestringPublic-facing title shown to candidates on the job board (e.g. Senior Backend Engineer, Remote). Distinct from the internal job.name — a single job can have several posts with different titles, one per board, language, or geography.
data[].updated_atstringUpdated at from the Greenhouse v3 job posts record.

Search job posts records by meaning rather than by exact or fuzzy field values. Semantic search embeds a natural-language prompt and returns the most similar passages, ranked by relevance. Pass semantic={field, prompt, filter?, context_size?, min_similarity?, dedup?} to context_store_search instead of query. Only available in hosted mode.

CLI

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "greenhouse",
"entity": "job_posts",
"action": "context_store_search",
"params": {
"semantic": {"field": "content", "prompt": "<your natural-language query>"}
}
}'

Python SDK

Semantic search is passed through the generic execute method — the typed job_posts.context_store_search helper only accepts query.

await greenhouse.execute(
"job_posts",
"context_store_search",
{"semantic": {"field": "content", "prompt": "<your natural-language query>"}},
)

API

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": "context_store_search",
"params": {
"semantic": {"field": "content", "prompt": "<your natural-language query>"}
}
}'

Semantic Parameters

Parameter NameTypeRequiredDescription
semantic.fieldstringYesField to search semantically. Mutually exclusive with query.
semantic.promptstringYesNatural-language query that is embedded and compared against stored passages.
semantic.filterobjectNoFilter conditions (same shape/operators as query.filter). sort is not supported — results are ranked by similarity.
semantic.context_sizeintegerNoCharacters of surrounding context to return per hit, up to the field's configured window. Omit to return the full configured window.
semantic.min_similaritynumberNoMinimum similarity score in [-1.0, 1.0]. Omit for 0.25; scores below the threshold are discarded before deduplication and top-k selection. Use -1.0 to disable the cutoff.
semantic.dedupstringNomax (default) returns the single best-scoring passage per record; none returns multiple passages per record, still ranked by similarity and capped by limit.
fieldsarrayNoField paths to include in results (dot notation for nested fields). Applied to each hit's entity.
limitintegerNoMaximum results to return (default 10, maximum 100).

Semantically Searchable Fields

Field NameMax Context (chars)Description
content2048HTML body of the post shown to candidates on the job board. For internal posts this returns the internal_content instead. Sanitized server-side — only a limited element/attribute allowlist (including iframe, video, source) survives. null while the post is still being scaffolded.
internal_content2048HTML body shown on the internal job board when the post is also configured as internal. null for external-only posts. Same sanitization rules as content.
Response Schema
Field NameTypeDescription
dataarrayList of matching passages
data[].entityobjectThe matched source record
data[].entity.idstringSource record field
data[].entity.updated_atstringSource record field
data[].entity.titlestringSource record field
data[].entity.job_idstringSource record field
data[].entity.livestringSource record field
data[].entity.internalstringSource record field
data[].entity.first_published_atstringSource record field
data[].entity.created_atstringSource record field
data[].metadataobjectMatch metadata
data[].metadata.scorenumberSimilarity score
data[].metadata.contextstringThe matched passage text
metaobjectPagination metadata
meta.has_morebooleanWhether additional pages are available
meta.cursorstring | nullCursor for next page of results
meta.took_msnumber | nullQuery execution time in milliseconds

Jobs

Jobs List

Returns a cursor-paginated list of jobs.

CLI

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "greenhouse",
"entity": "jobs",
"action": "list"
}'

Python SDK

await greenhouse.jobs.list()

API

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"
}'

Parameters

Parameter NameTypeRequiredDescription
cursorstringNoCursor from the previous response Link header. Do not combine with any other parameter.
per_pageintegerNoNumber of records to return on the first page.
idsarray<integer>NoReturn only records with these IDs (maximum 50).
updated_atstringNoFilter by updated timestamp using the Harvest v3 pipe expression, such as gte
Response Schema

Records

Field NameTypeDescription
closed_atnull | string
confidentialnull | boolean
copied_from_idnull | integer
created_atnull | string
custom_fieldsnull | object
department_idnull | integer
idnull | integer
is_templatenull | boolean
namenull | string
notesnull | string
office_idsnull | array
opened_atnull | string
requisition_idnull | string
statusnull | string
updated_atnull | string

Meta

Field NameTypeDescription
nextstring

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.

CLI

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "greenhouse",
"entity": "jobs",
"action": "context_store_search",
"params": {
"query": {
"filter": {
"eq": {
"closed_at": "<str>"
}
}
}
}
}'

Python SDK

await greenhouse.jobs.context_store_search(
query={"filter": {"eq": {"closed_at": "<str>"}}}
)

API

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": "context_store_search",
"params": {
"query": {"filter": {"eq": {"closed_at": "<str>"}}}
}
}'

Parameters

Parameter NameTypeRequiredDescription
queryobjectYesFilter and sort conditions. Supports operators: eq, neq, gt, gte, lt, lte, in, startswith, endswith, contains, array_contains, fuzzy, keyword, not, and, or
query.filterobjectNoFilter conditions
query.sortarrayNoSort conditions
limitintegerNoMaximum results to return (default 1000)
cursorstringNoPagination cursor from previous response's meta.cursor
fieldsarrayNoField paths to include in results

Searchable Fields

Field NameTypeDescription
closed_atstringTimestamp the job most recently transitioned to closed, in ISO 8601. null for jobs that are still open or draft.
confidentialbooleanIf true, the job is restricted to users explicitly granted access on the Hiring Team. The legacy Confidential Jobs feature has been sunset — this flag cannot be set on new jobs and is preserved for jobs that already had it enabled.
copied_from_idintegerId of the job (typically a template) this job was copied from on creation. null when the job was not created from another job.
created_atstringCreated at from the Greenhouse v3 jobs record.
custom_fieldsobjectOrg-defined custom fields keyed by the field's name_key. Each value carries the field's display name, its type, and its value.
department_idintegerId of the department this job is assigned to. null when no department is set.
idintegerId from the Greenhouse v3 jobs record.
is_templatebooleanIf true, this job is a template used as the source for new jobs rather than a real requisition. Templates do not accept applications; reference them via template_job_id on POST /v3/jobs.
namestringInternal job title shown to the hiring team in Greenhouse (e.g. Senior Backend Engineer). Distinct from the external-facing title on each job_post.
notesstringInternal HTML notes about the job, surfaced to the hiring team in the Greenhouse UI. Not exposed on public job posts.
office_idsarrayIds of the offices this job is assigned to. A job can span multiple offices; empty array or null when no offices are set.
opened_atstringTimestamp the job first transitioned to open, in ISO 8601. null while the job is still in draft.
requisition_idstringPartner-supplied external identifier for the requisition (e.g. an HRIS or ATS code). Free-form string, not unique across the organization, and null when no external id has been set.
statusstringLifecycle status of the job. draft while it is being scaffolded, open once it has at least one open opening, and closed after every opening is closed. A job moves to closed automatically when its last open opening is closed via PATCH /v3/openings/\{id\}.
updated_atstringUpdated at from the Greenhouse v3 jobs record.
Response Schema
Field NameTypeDescription
dataarrayList of matching records
metaobjectPagination metadata
meta.has_morebooleanWhether additional pages are available
meta.cursorstring | nullCursor for next page of results
meta.took_msnumber | nullQuery execution time in milliseconds
data[].closed_atstringTimestamp the job most recently transitioned to closed, in ISO 8601. null for jobs that are still open or draft.
data[].confidentialbooleanIf true, the job is restricted to users explicitly granted access on the Hiring Team. The legacy Confidential Jobs feature has been sunset — this flag cannot be set on new jobs and is preserved for jobs that already had it enabled.
data[].copied_from_idintegerId of the job (typically a template) this job was copied from on creation. null when the job was not created from another job.
data[].created_atstringCreated at from the Greenhouse v3 jobs record.
data[].custom_fieldsobjectOrg-defined custom fields keyed by the field's name_key. Each value carries the field's display name, its type, and its value.
data[].department_idintegerId of the department this job is assigned to. null when no department is set.
data[].idintegerId from the Greenhouse v3 jobs record.
data[].is_templatebooleanIf true, this job is a template used as the source for new jobs rather than a real requisition. Templates do not accept applications; reference them via template_job_id on POST /v3/jobs.
data[].namestringInternal job title shown to the hiring team in Greenhouse (e.g. Senior Backend Engineer). Distinct from the external-facing title on each job_post.
data[].notesstringInternal HTML notes about the job, surfaced to the hiring team in the Greenhouse UI. Not exposed on public job posts.
data[].office_idsarrayIds of the offices this job is assigned to. A job can span multiple offices; empty array or null when no offices are set.
data[].opened_atstringTimestamp the job first transitioned to open, in ISO 8601. null while the job is still in draft.
data[].requisition_idstringPartner-supplied external identifier for the requisition (e.g. an HRIS or ATS code). Free-form string, not unique across the organization, and null when no external id has been set.
data[].statusstringLifecycle status of the job. draft while it is being scaffolded, open once it has at least one open opening, and closed after every opening is closed. A job moves to closed automatically when its last open opening is closed via PATCH /v3/openings/\{id\}.
data[].updated_atstringUpdated at from the Greenhouse v3 jobs record.

Search jobs records by meaning rather than by exact or fuzzy field values. Semantic search embeds a natural-language prompt and returns the most similar passages, ranked by relevance. Pass semantic={field, prompt, filter?, context_size?, min_similarity?, dedup?} to context_store_search instead of query. Only available in hosted mode.

CLI

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "greenhouse",
"entity": "jobs",
"action": "context_store_search",
"params": {
"semantic": {"field": "notes", "prompt": "<your natural-language query>"}
}
}'

Python SDK

Semantic search is passed through the generic execute method — the typed jobs.context_store_search helper only accepts query.

await greenhouse.execute(
"jobs",
"context_store_search",
{"semantic": {"field": "notes", "prompt": "<your natural-language query>"}},
)

API

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": "context_store_search",
"params": {
"semantic": {"field": "notes", "prompt": "<your natural-language query>"}
}
}'

Semantic Parameters

Parameter NameTypeRequiredDescription
semantic.fieldstringYesField to search semantically. Mutually exclusive with query.
semantic.promptstringYesNatural-language query that is embedded and compared against stored passages.
semantic.filterobjectNoFilter conditions (same shape/operators as query.filter). sort is not supported — results are ranked by similarity.
semantic.context_sizeintegerNoCharacters of surrounding context to return per hit, up to the field's configured window. Omit to return the full configured window.
semantic.min_similaritynumberNoMinimum similarity score in [-1.0, 1.0]. Omit for 0.25; scores below the threshold are discarded before deduplication and top-k selection. Use -1.0 to disable the cutoff.
semantic.dedupstringNomax (default) returns the single best-scoring passage per record; none returns multiple passages per record, still ranked by similarity and capped by limit.
fieldsarrayNoField paths to include in results (dot notation for nested fields). Applied to each hit's entity.
limitintegerNoMaximum results to return (default 10, maximum 100).

Semantically Searchable Fields

Field NameMax Context (chars)Description
notes2048Internal HTML notes about the job, surfaced to the hiring team in the Greenhouse UI. Not exposed on public job posts.
Response Schema
Field NameTypeDescription
dataarrayList of matching passages
data[].entityobjectThe matched source record
data[].entity.idstringSource record field
data[].entity.updated_atstringSource record field
data[].entity.namestringSource record field
data[].entity.statusstringSource record field
data[].entity.requisition_idstringSource record field
data[].entity.confidentialstringSource record field
data[].entity.opened_atstringSource record field
data[].entity.closed_atstringSource record field
data[].entity.created_atstringSource record field
data[].metadataobjectMatch metadata
data[].metadata.scorenumberSimilarity score
data[].metadata.contextstringThe matched passage text
metaobjectPagination metadata
meta.has_morebooleanWhether additional pages are available
meta.cursorstring | nullCursor for next page of results
meta.took_msnumber | nullQuery execution time in milliseconds

Offers

Offers List

Returns a cursor-paginated list of offers.

CLI

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "greenhouse",
"entity": "offers",
"action": "list"
}'

Python SDK

await greenhouse.offers.list()

API

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"
}'

Parameters

Parameter NameTypeRequiredDescription
cursorstringNoCursor from the previous response Link header. Do not combine with any other parameter.
per_pageintegerNoNumber of records to return on the first page.
idsarray<integer>NoReturn only records with these IDs (maximum 50).
updated_atstringNoFilter by updated timestamp using the Harvest v3 pipe expression, such as gte
Response Schema

Records

Field NameTypeDescription
application_idnull | integer
candidate_idnull | integer
created_atnull | string
custom_fieldsnull | object
idnull | integer
job_idnull | integer
opening_idnull | integer
resolved_atnull | string
sent_onnull | string
starts_onnull | string
statusnull | string
updated_atnull | string
versionnull | integer

Meta

Field NameTypeDescription
nextstring

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.

CLI

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "greenhouse",
"entity": "offers",
"action": "context_store_search",
"params": {
"query": {
"filter": {
"eq": {
"application_id": 0
}
}
}
}
}'

Python SDK

await greenhouse.offers.context_store_search(
query={"filter": {"eq": {"application_id": 0}}}
)

API

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": "context_store_search",
"params": {
"query": {"filter": {"eq": {"application_id": 0}}}
}
}'

Parameters

Parameter NameTypeRequiredDescription
queryobjectYesFilter and sort conditions. Supports operators: eq, neq, gt, gte, lt, lte, in, startswith, endswith, contains, array_contains, fuzzy, keyword, not, and, or
query.filterobjectNoFilter conditions
query.sortarrayNoSort conditions
limitintegerNoMaximum results to return (default 1000)
cursorstringNoPagination cursor from previous response's meta.cursor
fieldsarrayNoField paths to include in results

Searchable Fields

Field NameTypeDescription
application_idintegerId of the application this offer is extended on. Every offer belongs to exactly one application; the offer is voided if the application is rejected or deleted.
candidate_idintegerId of the candidate (person) receiving this offer. Resolved through the offer's application.
created_atstringCreated at from the Greenhouse v3 offers record.
custom_fieldsobjectOrg-defined custom fields keyed by the field's name_key. Each value carries the field's display name, its type, and its value.
idintegerId from the Greenhouse v3 offers record.
job_idintegerId of the job this offer's application is on.
opening_idintegerId of the specific opening this offer is being extended for. null when the offer has not yet been linked to an opening.
resolved_atstringTimestamp the offer was resolved (Accepted or Rejected), in ISO 8601. Date updates submitted through PATCH /v3/offers/\{id\} are normalized to noon UTC on the supplied date. null while the offer is still Created or has been superseded as Deprecated without a resolution.
sent_onstringDate the offer was sent to the candidate, in ISO 8601 (YYYY-MM-DD). null until the offer has been sent.
starts_onstringCandidate's proposed start date, in ISO 8601 (YYYY-MM-DD). null when no start date has been set on the offer.
statusstringLifecycle status of the offer. Created for offers still being drafted or pending approval, Accepted once the candidate accepts, Rejected if declined or withdrawn, and Deprecated for superseded prior versions (a new offer version replaces an earlier one with this status).
updated_atstringUpdated at from the Greenhouse v3 offers record.
versionintegerRevision number of this offer within its application. Greenhouse creates a new offer row (incrementing version) whenever a tracked field on an existing offer changes — typically starts_on, opening_id, or a custom field configured to trigger a new version. Pair with current_only=true to filter the list endpoint down to the latest version per application.
Response Schema
Field NameTypeDescription
dataarrayList of matching records
metaobjectPagination metadata
meta.has_morebooleanWhether additional pages are available
meta.cursorstring | nullCursor for next page of results
meta.took_msnumber | nullQuery execution time in milliseconds
data[].application_idintegerId of the application this offer is extended on. Every offer belongs to exactly one application; the offer is voided if the application is rejected or deleted.
data[].candidate_idintegerId of the candidate (person) receiving this offer. Resolved through the offer's application.
data[].created_atstringCreated at from the Greenhouse v3 offers record.
data[].custom_fieldsobjectOrg-defined custom fields keyed by the field's name_key. Each value carries the field's display name, its type, and its value.
data[].idintegerId from the Greenhouse v3 offers record.
data[].job_idintegerId of the job this offer's application is on.
data[].opening_idintegerId of the specific opening this offer is being extended for. null when the offer has not yet been linked to an opening.
data[].resolved_atstringTimestamp the offer was resolved (Accepted or Rejected), in ISO 8601. Date updates submitted through PATCH /v3/offers/\{id\} are normalized to noon UTC on the supplied date. null while the offer is still Created or has been superseded as Deprecated without a resolution.
data[].sent_onstringDate the offer was sent to the candidate, in ISO 8601 (YYYY-MM-DD). null until the offer has been sent.
data[].starts_onstringCandidate's proposed start date, in ISO 8601 (YYYY-MM-DD). null when no start date has been set on the offer.
data[].statusstringLifecycle status of the offer. Created for offers still being drafted or pending approval, Accepted once the candidate accepts, Rejected if declined or withdrawn, and Deprecated for superseded prior versions (a new offer version replaces an earlier one with this status).
data[].updated_atstringUpdated at from the Greenhouse v3 offers record.
data[].versionintegerRevision number of this offer within its application. Greenhouse creates a new offer row (incrementing version) whenever a tracked field on an existing offer changes — typically starts_on, opening_id, or a custom field configured to trigger a new version. Pair with current_only=true to filter the list endpoint down to the latest version per application.

Offices

Offices List

Returns a cursor-paginated list of offices.

CLI

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "greenhouse",
"entity": "offices",
"action": "list"
}'

Python SDK

await greenhouse.offices.list()

API

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"
}'

Parameters

Parameter NameTypeRequiredDescription
cursorstringNoCursor from the previous response Link header. Do not combine with any other parameter.
per_pageintegerNoNumber of records to return on the first page.
idsarray<integer>NoReturn only records with these IDs (maximum 50).
Response Schema

Records

Field NameTypeDescription
created_atnull | string
external_idnull | string
idnull | integer
locationnull | string
namenull | string
parent_idnull | integer
primary_in_house_contact_user_idnull | integer
updated_atnull | string

Meta

Field NameTypeDescription
nextstring

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.

CLI

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "greenhouse",
"entity": "offices",
"action": "context_store_search",
"params": {
"query": {
"filter": {
"eq": {
"created_at": "<str>"
}
}
}
}
}'

Python SDK

await greenhouse.offices.context_store_search(
query={"filter": {"eq": {"created_at": "<str>"}}}
)

API

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": "context_store_search",
"params": {
"query": {"filter": {"eq": {"created_at": "<str>"}}}
}
}'

Parameters

Parameter NameTypeRequiredDescription
queryobjectYesFilter and sort conditions. Supports operators: eq, neq, gt, gte, lt, lte, in, startswith, endswith, contains, array_contains, fuzzy, keyword, not, and, or
query.filterobjectNoFilter conditions
query.sortarrayNoSort conditions
limitintegerNoMaximum results to return (default 1000)
cursorstringNoPagination cursor from previous response's meta.cursor
fieldsarrayNoField paths to include in results

Searchable Fields

Field NameTypeDescription
created_atstringCreated at from the Greenhouse v3 offices record.
external_idstringStable identifier supplied by the customer or HRIS for cross-system reconciliation. null when no external id has been set. Available when the org_structure_external_id product flag is enabled.
idintegerId from the Greenhouse v3 offices record.
locationstringFree-form physical location string for the office (e.g. New York, NY, USA). null for offices that have no location set, including most remote offices.
namestringDisplay name of the office (e.g. San Francisco, Remote (US)). Unique among active offices in the same organization.
parent_idintegerId of the parent office when offices are organized hierarchically. null for top-level offices. References another /v3/offices row in the same organization.
primary_in_house_contact_user_idintegerId of the Greenhouse user designated as the office's primary internal contact, typically the local recruiting lead. References a /v3/users row. null when no contact has been assigned.
updated_atstringUpdated at from the Greenhouse v3 offices record.
Response Schema
Field NameTypeDescription
dataarrayList of matching records
metaobjectPagination metadata
meta.has_morebooleanWhether additional pages are available
meta.cursorstring | nullCursor for next page of results
meta.took_msnumber | nullQuery execution time in milliseconds
data[].created_atstringCreated at from the Greenhouse v3 offices record.
data[].external_idstringStable identifier supplied by the customer or HRIS for cross-system reconciliation. null when no external id has been set. Available when the org_structure_external_id product flag is enabled.
data[].idintegerId from the Greenhouse v3 offices record.
data[].locationstringFree-form physical location string for the office (e.g. New York, NY, USA). null for offices that have no location set, including most remote offices.
data[].namestringDisplay name of the office (e.g. San Francisco, Remote (US)). Unique among active offices in the same organization.
data[].parent_idintegerId of the parent office when offices are organized hierarchically. null for top-level offices. References another /v3/offices row in the same organization.
data[].primary_in_house_contact_user_idintegerId of the Greenhouse user designated as the office's primary internal contact, typically the local recruiting lead. References a /v3/users row. null when no contact has been assigned.
data[].updated_atstringUpdated at from the Greenhouse v3 offices record.

Sources

Sources List

Returns a cursor-paginated list of sources.

CLI

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "greenhouse",
"entity": "sources",
"action": "list"
}'

Python SDK

await greenhouse.sources.list()

API

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"
}'

Parameters

Parameter NameTypeRequiredDescription
cursorstringNoCursor from the previous response Link header. Do not combine with any other parameter.
per_pageintegerNoNumber of records to return on the first page.
idsarray<integer>NoReturn only records with these IDs (maximum 50).
Response Schema

Records

Field NameTypeDescription
created_atnull | string
idnull | integer
namenull | string
typenull | object
updated_atnull | string

Meta

Field NameTypeDescription
nextstring

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.

CLI

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "greenhouse",
"entity": "sources",
"action": "context_store_search",
"params": {
"query": {
"filter": {
"eq": {
"created_at": "<str>"
}
}
}
}
}'

Python SDK

await greenhouse.sources.context_store_search(
query={"filter": {"eq": {"created_at": "<str>"}}}
)

API

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": "context_store_search",
"params": {
"query": {"filter": {"eq": {"created_at": "<str>"}}}
}
}'

Parameters

Parameter NameTypeRequiredDescription
queryobjectYesFilter and sort conditions. Supports operators: eq, neq, gt, gte, lt, lte, in, startswith, endswith, contains, array_contains, fuzzy, keyword, not, and, or
query.filterobjectNoFilter conditions
query.sortarrayNoSort conditions
limitintegerNoMaximum results to return (default 1000)
cursorstringNoPagination cursor from previous response's meta.cursor
fieldsarrayNoField paths to include in results

Searchable Fields

Field NameTypeDescription
created_atstringCreated at from the Greenhouse v3 sources record.
idintegerId from the Greenhouse v3 sources record.
namestringDisplay name of the source as recruiters see it in Greenhouse (e.g. LinkedIn (Prospecting), Indeed, Referral, Internal Applicant, or a custom agency name). For organization-specific sources this is the label the org configured; for global Greenhouse sources it is the standard public name.
typeobjectThe sourcing strategy this source rolls up to — the broader category used for reporting. Sources are grouped under sourcing strategies such as Agencies, Referral, Third-party boards, Prospecting, Social media, Company marketing, In person event, MyGreenhouse, and Other. Use the strategy when aggregating candidate volume by channel; use the source itself when reporting on a specific channel within that category.
updated_atstringUpdated at from the Greenhouse v3 sources record.
Response Schema
Field NameTypeDescription
dataarrayList of matching records
metaobjectPagination metadata
meta.has_morebooleanWhether additional pages are available
meta.cursorstring | nullCursor for next page of results
meta.took_msnumber | nullQuery execution time in milliseconds
data[].created_atstringCreated at from the Greenhouse v3 sources record.
data[].idintegerId from the Greenhouse v3 sources record.
data[].namestringDisplay name of the source as recruiters see it in Greenhouse (e.g. LinkedIn (Prospecting), Indeed, Referral, Internal Applicant, or a custom agency name). For organization-specific sources this is the label the org configured; for global Greenhouse sources it is the standard public name.
data[].typeobjectThe sourcing strategy this source rolls up to — the broader category used for reporting. Sources are grouped under sourcing strategies such as Agencies, Referral, Third-party boards, Prospecting, Social media, Company marketing, In person event, MyGreenhouse, and Other. Use the strategy when aggregating candidate volume by channel; use the source itself when reporting on a specific channel within that category.
data[].updated_atstringUpdated at from the Greenhouse v3 sources record.

Users

Users List

Returns a cursor-paginated list of users.

CLI

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "greenhouse",
"entity": "users",
"action": "list"
}'

Python SDK

await greenhouse.users.list()

API

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"
}'

Parameters

Parameter NameTypeRequiredDescription
cursorstringNoCursor from the previous response Link header. Do not combine with any other parameter.
per_pageintegerNoNumber of records to return on the first page.
idsarray<integer>NoReturn only records with these IDs (maximum 50).
updated_atstringNoFilter by updated timestamp using the Harvest v3 pipe expression, such as gte
show_service_accountsbooleanNoInclude Greenhouse service accounts.
Response Schema

Records

Field NameTypeDescription
agency_idnull | integer
created_atnull | string
custom_fieldsnull | object
deactivatednull | boolean
department_idsnull | array
emailsnull | array
employee_idnull | string
first_namenull | string
idnull | integer
interviewer_tagsnull | array
job_titlenull | string
last_namenull | string
linked_candidate_idsnull | array
namenull | string
office_idsnull | array
primary_emailnull | string
site_adminnull | boolean
updated_atnull | string

Meta

Field NameTypeDescription
nextstring

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.

CLI

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "greenhouse",
"entity": "users",
"action": "context_store_search",
"params": {
"query": {
"filter": {
"eq": {
"agency_id": 0
}
}
}
}
}'

Python SDK

await greenhouse.users.context_store_search(
query={"filter": {"eq": {"agency_id": 0}}}
)

API

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": "context_store_search",
"params": {
"query": {"filter": {"eq": {"agency_id": 0}}}
}
}'

Parameters

Parameter NameTypeRequiredDescription
queryobjectYesFilter and sort conditions. Supports operators: eq, neq, gt, gte, lt, lte, in, startswith, endswith, contains, array_contains, fuzzy, keyword, not, and, or
query.filterobjectNoFilter conditions
query.sortarrayNoSort conditions
limitintegerNoMaximum results to return (default 1000)
cursorstringNoPagination cursor from previous response's meta.cursor
fieldsarrayNoField paths to include in results

Searchable Fields

Field NameTypeDescription
agency_idintegerId of the staffing agency this user belongs to, when the user is an external agency recruiter rather than an employee of your organization. null for in-house users.
created_atstringCreated at from the Greenhouse v3 users record.
custom_fieldsobjectOrg-defined custom fields keyed by the field's name_key. Each value carries the field's display name, its type, and its value.
deactivatedbooleanWhether the user has been deactivated. Deactivated users cannot sign in or be assigned to new jobs, but their historical activity (notes, scorecards, emails) is preserved. Toggle via POST /v3/users/\{id\}/deactivate and POST /v3/users/\{id\}/activate.
department_idsarrayIds of the departments this user is assigned to. Used to scope future job permissions and to filter the user list by department. Empty when the user is not pinned to any department.
emailsarrayAll email addresses on the user's account, including the primary address and any additional verified addresses.
employee_idstringPartner-supplied external employee identifier, typically the user's HRIS or payroll id. Free-form string; not unique across organizations and null when no employee id has been set.
first_namestringFirst name from the Greenhouse v3 users record.
idintegerId from the Greenhouse v3 users record.
interviewer_tagsarrayInterviewer tags applied to this user — the labeled skill or panel groupings (e.g. Senior Engineer, Bar Raiser) used to suggest qualified interviewers when building an interview plan. Each entry pairs the tag's id with its name.
job_titlestringFree-form job title set on the user's Greenhouse profile (e.g. Senior Recruiter). Not synchronized with any HRIS title.
last_namestringLast name from the Greenhouse v3 users record.
linked_candidate_idsarrayIds of candidate records linked to this user. Populated when an employee is represented by both a user record (for Greenhouse access) and a candidate record (for past or internal applications).
namestringConcatenation of first_name and last_name rendered as a single display string. Provided for convenience; partners that need either component should read first_name/last_name directly.
office_idsarrayIds of the offices this user is assigned to. Used to scope future job permissions and to filter the user list by office. Empty when the user is not pinned to any office.
primary_emailstringPrimary email address on the user's account. Sign-in identifier and the address Greenhouse uses for outbound mail; additional verified addresses are not surfaced here. Service accounts (integration/ISU users) have no email and are excluded from this endpoint by default; when included via show_service_accounts=true, their primary_email is an empty string.
site_adminbooleanWhether the user holds the Site Admin role. Site admins have unrestricted access to every non-confidential job and to organization-level settings. Demote a site admin to a Basic user with POST /v3/users/\{id\}/revoke_permissions.
updated_atstringUpdated at from the Greenhouse v3 users record.
Response Schema
Field NameTypeDescription
dataarrayList of matching records
metaobjectPagination metadata
meta.has_morebooleanWhether additional pages are available
meta.cursorstring | nullCursor for next page of results
meta.took_msnumber | nullQuery execution time in milliseconds
data[].agency_idintegerId of the staffing agency this user belongs to, when the user is an external agency recruiter rather than an employee of your organization. null for in-house users.
data[].created_atstringCreated at from the Greenhouse v3 users record.
data[].custom_fieldsobjectOrg-defined custom fields keyed by the field's name_key. Each value carries the field's display name, its type, and its value.
data[].deactivatedbooleanWhether the user has been deactivated. Deactivated users cannot sign in or be assigned to new jobs, but their historical activity (notes, scorecards, emails) is preserved. Toggle via POST /v3/users/\{id\}/deactivate and POST /v3/users/\{id\}/activate.
data[].department_idsarrayIds of the departments this user is assigned to. Used to scope future job permissions and to filter the user list by department. Empty when the user is not pinned to any department.
data[].emailsarrayAll email addresses on the user's account, including the primary address and any additional verified addresses.
data[].employee_idstringPartner-supplied external employee identifier, typically the user's HRIS or payroll id. Free-form string; not unique across organizations and null when no employee id has been set.
data[].first_namestringFirst name from the Greenhouse v3 users record.
data[].idintegerId from the Greenhouse v3 users record.
data[].interviewer_tagsarrayInterviewer tags applied to this user — the labeled skill or panel groupings (e.g. Senior Engineer, Bar Raiser) used to suggest qualified interviewers when building an interview plan. Each entry pairs the tag's id with its name.
data[].job_titlestringFree-form job title set on the user's Greenhouse profile (e.g. Senior Recruiter). Not synchronized with any HRIS title.
data[].last_namestringLast name from the Greenhouse v3 users record.
data[].linked_candidate_idsarrayIds of candidate records linked to this user. Populated when an employee is represented by both a user record (for Greenhouse access) and a candidate record (for past or internal applications).
data[].namestringConcatenation of first_name and last_name rendered as a single display string. Provided for convenience; partners that need either component should read first_name/last_name directly.
data[].office_idsarrayIds of the offices this user is assigned to. Used to scope future job permissions and to filter the user list by office. Empty when the user is not pinned to any office.
data[].primary_emailstringPrimary email address on the user's account. Sign-in identifier and the address Greenhouse uses for outbound mail; additional verified addresses are not surfaced here. Service accounts (integration/ISU users) have no email and are excluded from this endpoint by default; when included via show_service_accounts=true, their primary_email is an empty string.
data[].site_adminbooleanWhether the user holds the Site Admin role. Site admins have unrestricted access to every non-confidential job and to organization-level settings. Demote a site admin to a Basic user with POST /v3/users/\{id\}/revoke_permissions.
data[].updated_atstringUpdated at from the Greenhouse v3 users record.

Attachments

Attachments List

Returns a cursor-paginated list of attachments.

CLI

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "greenhouse",
"entity": "attachments",
"action": "list"
}'

Python SDK

await greenhouse.attachments.list()

API

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": "attachments",
"action": "list"
}'

Parameters

Parameter NameTypeRequiredDescription
cursorstringNoCursor from the previous response Link header. Do not combine with any other parameter.
per_pageintegerNoNumber of records to return on the first page.
idsarray<integer>NoReturn only records with these IDs (maximum 50).
updated_atstringNoFilter by updated timestamp using the Harvest v3 pipe expression, such as gte
application_idsarray<integer>NoReturn attachments associated with these application IDs (maximum 50).
candidate_idsarray<integer>NoReturn attachments belonging to these candidate IDs (maximum 50).
type"resume" | "cover_letter" | "take_home_test" | "offer_packet" | "offer_letter" | "signed_offer_letter" | "other" | "form_attachment" | "midfunnel_agreement" | "automated_agreement"NoFilter by attachment type.
Response Schema

Records

Field NameTypeDescription
idinteger
application_idinteger
candidate_idinteger | null
created_atstring
updated_atstring
filenamestring
urlstring
type"resume" | "cover_letter" | "take_home_test" | "offer_packet" | "offer_letter" | "signed_offer_letter" | "other" | "form_attachment" | "midfunnel_agreement" | "automated_agreement"

Meta

Field NameTypeDescription
nextstring

Attachments Download

Looks up an attachment by ID and follows its current time-limited download URL.

CLI

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "greenhouse",
"entity": "attachments",
"action": "download",
"params": {
"ids": []
}
}'

Python SDK

async for chunk in greenhouse.attachments.download( ids=[]):# 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 for to process chunks as they arrive.

API

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": "attachments",
"action": "download",
"params": {
"ids": []
}
}'

Parameters

Parameter NameTypeRequiredDescription
idsarray<integer>YesThe single attachment ID to download.
range_headerstringNoOptional Range header for partial downloads (e.g., 'bytes=0-99')