diff --git a/airbyte-integrations/connectors/source-greenhouse-harvest-v3/README.md b/airbyte-integrations/connectors/source-greenhouse-harvest-v3/README.md new file mode 100644 index 000000000000..008a9347a65c --- /dev/null +++ b/airbyte-integrations/connectors/source-greenhouse-harvest-v3/README.md @@ -0,0 +1,33 @@ +# Greenhouse Harvest V3 +This directory contains the manifest-only connector for `source-greenhouse-harvest-v3`. + +Greenhouse v3 connection + +## Usage +There are multiple ways to use this connector: +- You can use this connector as any other connector in Airbyte Marketplace. +- You can load this connector in `pyairbyte` using `get_source`! +- You can open this connector in Connector Builder, edit it, and publish to your workspaces. + +Please refer to the manifest-only connector documentation for more details. + +## Local Development +We recommend you use the Connector Builder to edit this connector. + +But, if you want to develop this connector locally, you can use the following steps. + +### Environment Setup +You will need `airbyte-ci` installed. You can find the documentation [here](airbyte-ci). + +### Build +This will create a dev image (`source-greenhouse-harvest-v3:dev`) that you can use to test the connector locally. +```bash +airbyte-ci connectors --name=source-greenhouse-harvest-v3 build +``` + +### Test +This will run the acceptance tests for the connector. +```bash +airbyte-ci connectors --name=source-greenhouse-harvest-v3 test +``` + diff --git a/airbyte-integrations/connectors/source-greenhouse-harvest-v3/acceptance-test-config.yml b/airbyte-integrations/connectors/source-greenhouse-harvest-v3/acceptance-test-config.yml new file mode 100644 index 000000000000..5f3bfdc05365 --- /dev/null +++ b/airbyte-integrations/connectors/source-greenhouse-harvest-v3/acceptance-test-config.yml @@ -0,0 +1,17 @@ +# See [Connector Acceptance Tests](https://docs.airbyte.com/connector-development/testing-connectors/connector-acceptance-tests-reference) +# for more information about how to configure these tests +connector_image: airbyte/source-greenhouse-harvest-v3:dev +acceptance_tests: + spec: + tests: + - spec_path: "manifest.yaml" + connection: + bypass_reason: "This is a builder contribution, and we do not have secrets at this time" + discovery: + bypass_reason: "This is a builder contribution, and we do not have secrets at this time" + basic_read: + bypass_reason: "This is a builder contribution, and we do not have secrets at this time" + incremental: + bypass_reason: "This is a builder contribution, and we do not have secrets at this time" + full_refresh: + bypass_reason: "This is a builder contribution, and we do not have secrets at this time" diff --git a/airbyte-integrations/connectors/source-greenhouse-harvest-v3/icon.svg b/airbyte-integrations/connectors/source-greenhouse-harvest-v3/icon.svg new file mode 100644 index 000000000000..cf5618012c9a --- /dev/null +++ b/airbyte-integrations/connectors/source-greenhouse-harvest-v3/icon.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/airbyte-integrations/connectors/source-greenhouse-harvest-v3/manifest.yaml b/airbyte-integrations/connectors/source-greenhouse-harvest-v3/manifest.yaml new file mode 100644 index 000000000000..a35a1e0cf41b --- /dev/null +++ b/airbyte-integrations/connectors/source-greenhouse-harvest-v3/manifest.yaml @@ -0,0 +1,4559 @@ +version: 7.17.1 + +type: DeclarativeSource + +description: Greenhouse v3 connection + +check: + type: CheckStream + stream_names: + - applications + dynamic_streams_check_configs: [] + +definitions: + linked: + HttpRequester: + authenticator: + type: OAuthAuthenticator + scopes: + - harvest:applications:list + client_id: "{{ config[\"client_id\"] }}" + grant_type: client_credentials + client_secret: "{{ config[\"client_secret\"] }}" + client_id_name: client_id + grant_type_name: grant_type + access_token_name: access_token + client_secret_name: client_secret + refresh_token_name: refresh_token + use_profile_assertion: false + token_refresh_endpoint: https://auth.greenhouse.io/token + request_parameters: + updated_at: "{{ stream_slice.start_time if not next_page_token else '' }}" + SimpleRetriever: + paginator: + type: DefaultPaginator + page_token_option: + type: RequestPath + pagination_strategy: + type: CursorPagination + cursor_value: "{{ headers.link.next.url }}" + stop_condition: "{{ not headers.get(\"link\") }}" + +streams: + - type: DeclarativeStream + name: applications + retriever: + type: SimpleRetriever + paginator: + type: DefaultPaginator + page_token_option: + type: RequestPath + pagination_strategy: + type: CursorPagination + cursor_value: "{{ headers.link.next.url }}" + stop_condition: "{{ not headers.get(\"link\") }}" + requester: + type: HttpRequester + url: https://harvest.greenhouse.io/v3/applications + http_method: GET + authenticator: + type: OAuthAuthenticator + scopes: + - harvest:applications:list + client_id: "{{ config[\"client_id\"] }}" + grant_type: client_credentials + client_secret: "{{ config[\"client_secret\"] }}" + client_id_name: client_id + grant_type_name: grant_type + access_token_name: access_token + client_secret_name: client_secret + refresh_token_name: refresh_token + use_profile_assertion: false + token_refresh_endpoint: https://auth.greenhouse.io/token + request_parameters: + updated_at: "{{ stream_slice.start_time if not next_page_token else '' }}" + record_selector: + type: RecordSelector + extractor: + type: DpathExtractor + field_path: [] + primary_key: + - id + schema_loader: + type: InlineSchemaLoader + schema: + type: object + $schema: http://json-schema.org/draft-07/schema# + properties: {} + additionalProperties: true + incremental_sync: + type: DatetimeBasedCursor + cursor_field: updated_at + is_data_feed: false + start_datetime: gt|2020-01-01T00:00:00.000Z + datetime_format: gt|%Y-%m-%dT%H:%M:%S.%fZ + cursor_datetime_formats: + - "%Y-%m-%dT%H:%M:%S.%fZ" + partition_field_end: "" + partition_field_start: "" + - type: DeclarativeStream + name: scorecards + retriever: + type: SimpleRetriever + paginator: + type: DefaultPaginator + page_token_option: + type: RequestPath + pagination_strategy: + type: CursorPagination + cursor_value: "{{ headers.link.next.url }}" + stop_condition: "{{ not headers.get(\"link\") }}" + requester: + type: HttpRequester + url: https://harvest.greenhouse.io/v3/scorecards + http_method: GET + authenticator: + type: OAuthAuthenticator + scopes: + - harvest:applications:list + client_id: "{{ config[\"client_id\"] }}" + grant_type: client_credentials + client_secret: "{{ config[\"client_secret\"] }}" + client_id_name: client_id + grant_type_name: grant_type + access_token_name: access_token + client_secret_name: client_secret + refresh_token_name: refresh_token + use_profile_assertion: false + token_refresh_endpoint: https://auth.greenhouse.io/token + request_parameters: + updated_at: "{{ stream_slice.start_time if not next_page_token else '' }}" + record_selector: + type: RecordSelector + extractor: + type: DpathExtractor + field_path: [] + primary_key: + - id + schema_loader: + type: InlineSchemaLoader + schema: + type: object + $schema: http://json-schema.org/schema# + required: + - id + - updated_at + properties: + id: + type: number + notes: + type: + - string + - "null" + status: + type: + - string + - "null" + created_at: + type: + - string + - "null" + updated_at: + type: string + public_notes: + type: + - string + - "null" + submitted_at: + type: + - string + - "null" + submitter_id: + type: + - number + - "null" + private_notes: + type: + - string + - "null" + application_id: + type: + - number + - "null" + interviewed_at: + type: + - string + - "null" + interviewer_id: + type: + - number + - "null" + notes_with_tags: + type: + - string + - "null" + candidate_rating: + type: + - string + - "null" + interview_kit_id: + type: + - number + - "null" + public_notes_with_tags: + type: + - string + - "null" + private_notes_with_tags: + type: + - string + - "null" + additionalProperties: true + incremental_sync: + type: DatetimeBasedCursor + cursor_field: updated_at + is_data_feed: false + start_datetime: gt|2020-01-01T00:00:00.000Z + datetime_format: gt|%Y-%m-%dT%H:%M:%S.%fZ + cursor_datetime_formats: + - "%Y-%m-%dT%H:%M:%S.%fZ" + - type: DeclarativeStream + name: scorecard_question_answers + retriever: + type: SimpleRetriever + paginator: + type: DefaultPaginator + page_token_option: + type: RequestPath + pagination_strategy: + type: CursorPagination + cursor_value: "{{ headers.link.next.url }}" + stop_condition: "{{ not headers.get(\"link\") }}" + requester: + type: HttpRequester + url: https://harvest.greenhouse.io/v3/scorecard_question_answers + http_method: GET + authenticator: + type: OAuthAuthenticator + scopes: + - harvest:applications:list + client_id: "{{ config[\"client_id\"] }}" + grant_type: client_credentials + client_secret: "{{ config[\"client_secret\"] }}" + client_id_name: client_id + grant_type_name: grant_type + access_token_name: access_token + client_secret_name: client_secret + refresh_token_name: refresh_token + use_profile_assertion: false + token_refresh_endpoint: https://auth.greenhouse.io/token + request_parameters: + updated_at: "{{ stream_slice.start_time if not next_page_token else '' }}" + record_selector: + type: RecordSelector + extractor: + type: DpathExtractor + field_path: [] + primary_key: + - id + schema_loader: + type: InlineSchemaLoader + schema: + type: object + $schema: http://json-schema.org/schema# + required: + - id + - updated_at + properties: + id: + type: number + answer: + type: + - string + - "null" + created_at: + type: + - string + - "null" + updated_at: + type: string + scorecard_id: + type: + - number + - "null" + boolean_value: + type: + - boolean + - "null" + answer_with_tags: + type: + - string + - "null" + scorecard_question_id: + type: + - number + - "null" + additionalProperties: true + incremental_sync: + type: DatetimeBasedCursor + cursor_field: updated_at + is_data_feed: false + start_datetime: gt|2020-01-01T00:00:00.000Z + datetime_format: gt|%Y-%m-%dT%H:%M:%S.%fZ + cursor_datetime_formats: + - "%Y-%m-%dT%H:%M:%S.%fZ" + - type: DeclarativeStream + name: scorecard_questions + retriever: + type: SimpleRetriever + paginator: + type: DefaultPaginator + page_token_option: + type: RequestPath + pagination_strategy: + type: CursorPagination + cursor_value: "{{ headers.link.next.url }}" + stop_condition: "{{ not headers.get(\"link\") }}" + requester: + type: HttpRequester + url: https://harvest.greenhouse.io/v3/scorecard_questions + http_method: GET + authenticator: + type: OAuthAuthenticator + scopes: + - harvest:applications:list + client_id: "{{ config[\"client_id\"] }}" + grant_type: client_credentials + client_secret: "{{ config[\"client_secret\"] }}" + client_id_name: client_id + grant_type_name: grant_type + access_token_name: access_token + client_secret_name: client_secret + refresh_token_name: refresh_token + use_profile_assertion: false + token_refresh_endpoint: https://auth.greenhouse.io/token + request_parameters: + updated_at: "{{ stream_slice.start_time if not next_page_token else '' }}" + record_selector: + type: RecordSelector + extractor: + type: DpathExtractor + field_path: [] + primary_key: + - id + schema_loader: + type: InlineSchemaLoader + schema: + type: object + $schema: http://json-schema.org/schema# + required: + - id + - updated_at + properties: + id: + type: number + active: + type: + - boolean + - "null" + question: + type: + - string + - "null" + required: + type: + - boolean + - "null" + created_at: + type: + - string + - "null" + sort_order: + type: + - number + - "null" + updated_at: + type: string + answer_type: + type: + - string + - "null" + interview_kit_id: + type: + - number + - "null" + additionalProperties: true + incremental_sync: + type: DatetimeBasedCursor + cursor_field: updated_at + is_data_feed: false + start_datetime: gt|2020-01-01T00:00:00.000Z + datetime_format: gt|%Y-%m-%dT%H:%M:%S.%fZ + cursor_datetime_formats: + - "%Y-%m-%dT%H:%M:%S.%fZ" + - type: DeclarativeStream + name: candidates + retriever: + type: SimpleRetriever + paginator: + type: DefaultPaginator + page_token_option: + type: RequestPath + pagination_strategy: + type: CursorPagination + cursor_value: "{{ headers.link.next.url }}" + stop_condition: "{{ not headers.get(\"link\") }}" + requester: + type: HttpRequester + url: https://harvest.greenhouse.io/v3/candidates + http_method: GET + authenticator: + type: OAuthAuthenticator + scopes: + - harvest:applications:list + client_id: "{{ config[\"client_id\"] }}" + grant_type: client_credentials + client_secret: "{{ config[\"client_secret\"] }}" + client_id_name: client_id + grant_type_name: grant_type + access_token_name: access_token + client_secret_name: client_secret + refresh_token_name: refresh_token + use_profile_assertion: false + token_refresh_endpoint: https://auth.greenhouse.io/token + request_parameters: + updated_at: "{{ stream_slice.start_time if not next_page_token else '' }}" + record_selector: + type: RecordSelector + extractor: + type: DpathExtractor + field_path: [] + primary_key: + - id + schema_loader: + type: InlineSchemaLoader + schema: + type: object + $schema: http://json-schema.org/schema# + required: + - id + - updated_at + properties: + id: + type: number + tags: + type: + - array + - "null" + items: + type: + - string + - "null" + title: + type: + - string + - "null" + company: + type: + - string + - "null" + private: + type: + - boolean + - "null" + addresses: + type: + - array + - "null" + items: + type: + - object + - "null" + properties: + type: + type: + - string + - "null" + value: + type: + - string + - "null" + can_email: + type: + - boolean + - "null" + last_name: + type: + - string + - "null" + time_zone: + type: + - string + - "null" + created_at: + type: + - string + - "null" + first_name: + type: + - string + - "null" + updated_at: + type: string + custom_fields: + type: + - object + - "null" + properties: + acronym: + type: + - object + - "null" + properties: + type: + type: + - string + - "null" + name: + type: + - string + - "null" + value: + type: + - string + - "null" + location: + type: + - object + - "null" + properties: + type: + type: + - string + - "null" + name: + type: + - string + - "null" + value: + type: + - string + - "null" + resume_url: + type: + - object + - "null" + properties: + type: + type: + - string + - "null" + name: + type: + - string + - "null" + value: + type: + - string + - "null" + fr_due_date: + type: + - object + - "null" + properties: + type: + type: + - string + - "null" + name: + type: + - string + - "null" + interface_url: + type: + - object + - "null" + properties: + type: + type: + - string + - "null" + name: + type: + - string + - "null" + value: + type: + - string + - "null" + resume_status: + type: + - object + - "null" + properties: + type: + type: + - string + - "null" + name: + type: + - string + - "null" + value: + type: + - string + - "null" + academic_comments: + type: + - object + - "null" + properties: + type: + type: + - string + - "null" + name: + type: + - string + - "null" + value: + type: + - string + - "null" + industry_keywords: + type: + - object + - "null" + properties: + type: + type: + - string + - "null" + name: + type: + - string + - "null" + value: + type: + - array + - "null" + items: + type: + - string + - "null" + potential_clients: + type: + - object + - "null" + properties: + type: + type: + - string + - "null" + name: + type: + - string + - "null" + value: + type: + - string + - "null" + techs_and_pillars: + type: + - object + - "null" + properties: + type: + type: + - string + - "null" + name: + type: + - string + - "null" + types_of_projects: + type: + - object + - "null" + properties: + type: + type: + - string + - "null" + name: + type: + - string + - "null" + value: + type: + - array + - "null" + items: + type: + - string + - "null" + fr_review_priority: + type: + - object + - "null" + properties: + type: + type: + - string + - "null" + name: + type: + - string + - "null" + value: + type: + - string + - "null" + lever_candidate_id: + type: + - object + - "null" + properties: + type: + type: + - string + - "null" + name: + type: + - string + - "null" + value: + type: + - string + - "null" + work_authorization: + type: + - object + - "null" + properties: + type: + type: + - string + - "null" + name: + type: + - string + - "null" + factored_resume_url: + type: + - object + - "null" + properties: + type: + type: + - string + - "null" + name: + type: + - string + - "null" + value: + type: + - string + - "null" + resume___completion: + type: + - object + - "null" + properties: + type: + type: + - string + - "null" + name: + type: + - string + - "null" + value: + type: + - string + - "null" + rw_required_service: + type: + - object + - "null" + properties: + type: + type: + - string + - "null" + name: + type: + - string + - "null" + fr_notes_to_consider: + type: + - object + - "null" + properties: + type: + type: + - string + - "null" + name: + type: + - string + - "null" + resume_last_reviewed: + type: + - object + - "null" + properties: + type: + type: + - string + - "null" + name: + type: + - string + - "null" + value: + type: + - string + - "null" + expertise__role_types_: + type: + - object + - "null" + properties: + type: + type: + - string + - "null" + name: + type: + - string + - "null" + first_engineer_persona: + type: + - object + - "null" + properties: + type: + type: + - string + - "null" + name: + type: + - string + - "null" + met_with_resume_writer: + type: + - object + - "null" + properties: + type: + type: + - string + - "null" + name: + type: + - string + - "null" + resume_writer_assigned: + type: + - object + - "null" + properties: + type: + type: + - string + - "null" + name: + type: + - string + - "null" + value: + type: + - object + - "null" + properties: + name: + type: + - string + - "null" + email: + type: + - string + - "null" + user_id: + type: + - number + - "null" + second_engineer_persona: + type: + - object + - "null" + properties: + type: + type: + - string + - "null" + name: + type: + - string + - "null" + short_term_placeability: + type: + - object + - "null" + properties: + type: + type: + - string + - "null" + name: + type: + - string + - "null" + action_items___red_flags: + type: + - object + - "null" + properties: + type: + type: + - string + - "null" + name: + type: + - string + - "null" + proactive_hiring_next_step: + type: + - object + - "null" + properties: + type: + type: + - string + - "null" + name: + type: + - string + - "null" + key_matching_considerations: + type: + - object + - "null" + properties: + type: + type: + - string + - "null" + name: + type: + - string + - "null" + value: + type: + - string + - "null" + video_recordings_folder_url: + type: + - object + - "null" + properties: + type: + type: + - string + - "null" + name: + type: + - string + - "null" + cover_letter___bullet_points: + type: + - object + - "null" + properties: + type: + type: + - string + - "null" + name: + type: + - string + - "null" + proactive_hiring_action_items: + type: + - object + - "null" + properties: + type: + type: + - string + - "null" + name: + type: + - string + - "null" + boosting_program_specialization: + type: + - object + - "null" + properties: + type: + type: + - string + - "null" + name: + type: + - string + - "null" + engagement_activity_participation: + type: + - object + - "null" + properties: + type: + type: + - string + - "null" + name: + type: + - string + - "null" + latest_technical_calibration_video_url: + type: + - object + - "null" + properties: + type: + type: + - string + - "null" + name: + type: + - string + - "null" + boosting_program_time_frame_placeability: + type: + - object + - "null" + properties: + type: + type: + - string + - "null" + name: + type: + - string + - "null" + proactive_hiring_comments___recommendations: + type: + - object + - "null" + properties: + type: + type: + - string + - "null" + name: + type: + - string + - "null" + fr_next_steps_instructions_candidate_1749600845.775027: + type: + - object + - "null" + properties: + type: + type: + - string + - "null" + name: + type: + - string + - "null" + phone_numbers: + type: + - array + - "null" + items: + type: + - object + - "null" + properties: + type: + type: + - string + - "null" + value: + type: + - string + - "null" + preferred_name: + type: + - string + - "null" + email_addresses: + type: + - array + - "null" + items: + type: + - object + - "null" + properties: + type: + type: + - string + - "null" + value: + type: + - string + - "null" + linked_user_ids: + type: + - array + - "null" + last_activity_at: + type: + - string + - "null" + website_addresses: + type: + - array + - "null" + items: + type: + - object + - "null" + properties: + type: + type: + - string + - "null" + value: + type: + - string + - "null" + social_media_addresses: + type: + - array + - "null" + items: + type: + - object + - "null" + properties: + value: + type: + - string + - "null" + additionalProperties: true + incremental_sync: + type: DatetimeBasedCursor + cursor_field: updated_at + is_data_feed: false + start_datetime: gt|2020-01-01T00:00:00.000Z + datetime_format: gt|%Y-%m-%dT%H:%M:%S.%fZ + cursor_datetime_formats: + - "%Y-%m-%dT%H:%M:%S.%fZ" + - type: DeclarativeStream + name: candidate_educations + retriever: + type: SimpleRetriever + paginator: + type: DefaultPaginator + page_token_option: + type: RequestPath + pagination_strategy: + type: CursorPagination + cursor_value: "{{ headers.link.next.url }}" + stop_condition: "{{ not headers.get(\"link\") }}" + requester: + type: HttpRequester + url: https://harvest.greenhouse.io/v3/candidate_educations + http_method: GET + authenticator: + type: OAuthAuthenticator + scopes: + - harvest:applications:list + client_id: "{{ config[\"client_id\"] }}" + grant_type: client_credentials + client_secret: "{{ config[\"client_secret\"] }}" + client_id_name: client_id + grant_type_name: grant_type + access_token_name: access_token + client_secret_name: client_secret + refresh_token_name: refresh_token + use_profile_assertion: false + token_refresh_endpoint: https://auth.greenhouse.io/token + request_parameters: + updated_at: "{{ stream_slice.start_time if not next_page_token else '' }}" + record_selector: + type: RecordSelector + extractor: + type: DpathExtractor + field_path: [] + primary_key: + - id + schema_loader: + type: InlineSchemaLoader + schema: + type: object + $schema: http://json-schema.org/schema# + required: + - id + - updated_at + properties: + id: + type: number + end_at: + type: + - string + - "null" + latest: + type: + - boolean + - "null" + start_at: + type: + - string + - "null" + created_at: + type: + - string + - "null" + updated_at: + type: string + candidate_id: + type: + - number + - "null" + end_date_year: + type: + - number + - "null" + end_date_month: + type: + - number + - "null" + start_date_year: + type: + - number + - "null" + start_date_month: + type: + - number + - "null" + degree_custom_field_option_id: + type: + - number + - "null" + discipline_custom_field_option_id: + type: + - number + - "null" + school_name_custom_field_option_id: + type: + - number + - "null" + additionalProperties: true + incremental_sync: + type: DatetimeBasedCursor + cursor_field: updated_at + is_data_feed: false + start_datetime: gt|2020-01-01T00:00:00.000Z + datetime_format: gt|%Y-%m-%dT%H:%M:%S.%fZ + cursor_datetime_formats: + - "%Y-%m-%dT%H:%M:%S.%fZ" + - type: DeclarativeStream + name: candidate_employments + retriever: + type: SimpleRetriever + paginator: + type: DefaultPaginator + page_token_option: + type: RequestPath + pagination_strategy: + type: CursorPagination + cursor_value: "{{ headers.link.next.url }}" + stop_condition: "{{ not headers.get(\"link\") }}" + requester: + type: HttpRequester + url: https://harvest.greenhouse.io/v3/candidate_employments + http_method: GET + authenticator: + type: OAuthAuthenticator + scopes: + - harvest:applications:list + client_id: "{{ config[\"client_id\"] }}" + grant_type: client_credentials + client_secret: "{{ config[\"client_secret\"] }}" + client_id_name: client_id + grant_type_name: grant_type + access_token_name: access_token + client_secret_name: client_secret + refresh_token_name: refresh_token + use_profile_assertion: false + token_refresh_endpoint: https://auth.greenhouse.io/token + request_parameters: + updated_at: "{{ stream_slice.start_time if not next_page_token else '' }}" + record_selector: + type: RecordSelector + extractor: + type: DpathExtractor + field_path: [] + primary_key: + - id + schema_loader: + type: InlineSchemaLoader + schema: + type: object + $schema: http://json-schema.org/schema# + required: + - id + - updated_at + properties: + id: + type: number + title: + type: + - string + - "null" + latest: + type: + - boolean + - "null" + end_date: + type: + - string + - "null" + created_at: + type: + - string + - "null" + start_date: + type: + - string + - "null" + updated_at: + type: string + candidate_id: + type: + - number + - "null" + company_name: + type: + - string + - "null" + additionalProperties: true + incremental_sync: + type: DatetimeBasedCursor + cursor_field: updated_at + is_data_feed: false + start_datetime: gt|2020-01-01T00:00:00.000Z + datetime_format: gt|%Y-%m-%dT%H:%M:%S.%fZ + cursor_datetime_formats: + - "%Y-%m-%dT%H:%M:%S.%fZ" + - type: DeclarativeStream + name: candidate_tags + retriever: + type: SimpleRetriever + paginator: + type: DefaultPaginator + page_token_option: + type: RequestPath + pagination_strategy: + type: CursorPagination + cursor_value: "{{ headers.link.next.url }}" + stop_condition: "{{ not headers.get(\"link\") }}" + requester: + type: HttpRequester + url: https://harvest.greenhouse.io/v3/candidate_tags + http_method: GET + authenticator: + type: OAuthAuthenticator + scopes: + - harvest:applications:list + client_id: "{{ config[\"client_id\"] }}" + grant_type: client_credentials + client_secret: "{{ config[\"client_secret\"] }}" + client_id_name: client_id + grant_type_name: grant_type + access_token_name: access_token + client_secret_name: client_secret + refresh_token_name: refresh_token + use_profile_assertion: false + token_refresh_endpoint: https://auth.greenhouse.io/token + request_parameters: + updated_at: "{{ stream_slice.start_time if not next_page_token else '' }}" + record_selector: + type: RecordSelector + extractor: + type: DpathExtractor + field_path: [] + primary_key: + - id + schema_loader: + type: InlineSchemaLoader + schema: + type: object + $schema: http://json-schema.org/schema# + required: + - id + - updated_at + properties: + id: + type: number + name: + type: + - string + - "null" + created_at: + type: + - string + - "null" + updated_at: + type: string + additionalProperties: true + incremental_sync: + type: DatetimeBasedCursor + cursor_field: updated_at + is_data_feed: false + start_datetime: gt|2020-01-01T00:00:00.000Z + datetime_format: gt|%Y-%m-%dT%H:%M:%S.%fZ + cursor_datetime_formats: + - "%Y-%m-%dT%H:%M:%S.%fZ" + - type: DeclarativeStream + name: jobs + retriever: + type: SimpleRetriever + paginator: + type: DefaultPaginator + page_token_option: + type: RequestPath + pagination_strategy: + type: CursorPagination + cursor_value: "{{ headers.link.next.url }}" + stop_condition: "{{ not headers.get(\"link\") }}" + requester: + type: HttpRequester + url: https://harvest.greenhouse.io/v3/jobs + http_method: GET + authenticator: + type: OAuthAuthenticator + scopes: + - harvest:applications:list + client_id: "{{ config[\"client_id\"] }}" + grant_type: client_credentials + client_secret: "{{ config[\"client_secret\"] }}" + client_id_name: client_id + grant_type_name: grant_type + access_token_name: access_token + client_secret_name: client_secret + refresh_token_name: refresh_token + use_profile_assertion: false + token_refresh_endpoint: https://auth.greenhouse.io/token + request_parameters: + updated_at: "{{ stream_slice.start_time if not next_page_token else '' }}" + record_selector: + type: RecordSelector + extractor: + type: DpathExtractor + field_path: [] + primary_key: + - id + schema_loader: + type: InlineSchemaLoader + schema: + type: object + $schema: http://json-schema.org/schema# + required: + - id + - updated_at + properties: + id: + type: number + name: + type: + - string + - "null" + status: + type: + - string + - "null" + closed_at: + type: + - string + - "null" + opened_at: + type: + - string + - "null" + created_at: + type: + - string + - "null" + office_ids: + type: + - array + - "null" + items: + type: + - number + - "null" + updated_at: + type: string + is_template: + type: + - boolean + - "null" + confidential: + type: + - boolean + - "null" + custom_fields: + type: + - object + - "null" + properties: + lever_job_id: + type: + - object + - "null" + properties: + type: + type: + - string + - "null" + name: + type: + - string + - "null" + value: + type: + - string + - "null" + employment_type: + type: + - object + - "null" + properties: + type: + type: + - string + - "null" + name: + type: + - string + - "null" + value: + type: + - string + - "null" + reason_for_hire: + type: + - object + - "null" + properties: + type: + type: + - string + - "null" + name: + type: + - string + - "null" + value: + type: + - string + - "null" + department_id: + type: + - number + - "null" + copied_from_id: + type: + - number + - "null" + requisition_id: + type: + - string + - "null" + additionalProperties: true + incremental_sync: + type: DatetimeBasedCursor + cursor_field: updated_at + is_data_feed: false + start_datetime: gt|2020-01-01T00:00:00.000Z + datetime_format: gt|%Y-%m-%dT%H:%M:%S.%fZ + cursor_datetime_formats: + - "%Y-%m-%dT%H:%M:%S.%fZ" + - type: DeclarativeStream + name: job_posts + retriever: + type: SimpleRetriever + paginator: + type: DefaultPaginator + page_token_option: + type: RequestPath + pagination_strategy: + type: CursorPagination + cursor_value: "{{ headers.link.next.url }}" + stop_condition: "{{ not headers.get(\"link\") }}" + requester: + type: HttpRequester + url: https://harvest.greenhouse.io/v3/job_posts + http_method: GET + authenticator: + type: OAuthAuthenticator + scopes: + - harvest:applications:list + client_id: "{{ config[\"client_id\"] }}" + grant_type: client_credentials + client_secret: "{{ config[\"client_secret\"] }}" + client_id_name: client_id + grant_type_name: grant_type + access_token_name: access_token + client_secret_name: client_secret + refresh_token_name: refresh_token + use_profile_assertion: false + token_refresh_endpoint: https://auth.greenhouse.io/token + expires_in_name: "" + token_expiry_date: "" + token_expiry_date_format: "" + refresh_token_error_key: "" + request_parameters: + updated_at: "{{ stream_slice.start_time if not next_page_token else '' }}" + record_selector: + type: RecordSelector + extractor: + type: DpathExtractor + field_path: [] + primary_key: + - id + schema_loader: + type: InlineSchemaLoader + schema: + type: object + $schema: http://json-schema.org/schema# + properties: + id: + type: number + title: + type: + - string + - "null" + language: + type: + - string + - "null" + demographic_question_set_id: + type: + - number + - "null" + created_at: + type: + - string + - "null" + updated_at: + type: string + job_id: + type: + - number + - "null" + first_published_at: + type: + - string + - "null" + public_url: + type: + - string + - "null" + active: + type: + - boolean + - "null" + internal: + type: + - boolean + - "null" + live: + type: + - boolean + - "null" + featured: + type: + - boolean + - "null" + job_board_id: + type: + - number + - "null" + content: + type: + - string + - "null" + questions: + type: + - array + - "null" + items: + type: + - object + - "null" + properties: + description: + type: + - string + - "null" + id: + type: + - number + - "null" + label: + type: + - string + - "null" + name: + type: + - string + - "null" + required: + type: + - boolean + - "null" + private: + type: + - boolean + - "null" + answer_type: + type: + - string + - "null" + options: + type: + - array + - "null" + items: + type: + - object + - "null" + properties: + id: + type: + - number + - "null" + label: + type: + - string + - "null" + required: + - id + - updated_at + additionalProperties: true + incremental_sync: + type: DatetimeBasedCursor + cursor_field: updated_at + is_data_feed: false + start_datetime: gt|2020-01-01T00:00:00.000Z + datetime_format: gt|%Y-%m-%dT%H:%M:%S.%fZ + cursor_datetime_formats: + - "%Y-%m-%dT%H:%M:%S.%fZ" + partition_field_end: "" + partition_field_start: "" + - type: DeclarativeStream + name: job_interview_stages + retriever: + type: SimpleRetriever + paginator: + type: DefaultPaginator + page_token_option: + type: RequestPath + pagination_strategy: + type: CursorPagination + cursor_value: "{{ headers.link.next.url }}" + stop_condition: "{{ not headers.get(\"link\") }}" + requester: + type: HttpRequester + url: https://harvest.greenhouse.io/v3/job_interview_stages + http_method: GET + authenticator: + type: OAuthAuthenticator + scopes: + - harvest:applications:list + client_id: "{{ config[\"client_id\"] }}" + grant_type: client_credentials + client_secret: "{{ config[\"client_secret\"] }}" + client_id_name: client_id + grant_type_name: grant_type + access_token_name: access_token + client_secret_name: client_secret + refresh_token_name: refresh_token + use_profile_assertion: false + token_refresh_endpoint: https://auth.greenhouse.io/token + expires_in_name: "" + token_expiry_date: "" + token_expiry_date_format: "" + refresh_token_error_key: "" + request_parameters: + updated_at: "{{ stream_slice.start_time if not next_page_token else '' }}" + record_selector: + type: RecordSelector + extractor: + type: DpathExtractor + field_path: [] + primary_key: + - id + schema_loader: + type: InlineSchemaLoader + schema: + type: object + $schema: http://json-schema.org/schema# + properties: + id: + type: number + created_at: + type: + - string + - "null" + updated_at: + type: string + name: + type: + - string + - "null" + active: + type: + - boolean + - "null" + job_id: + type: + - number + - "null" + sort_order: + type: + - number + - "null" + required: + - id + - updated_at + additionalProperties: true + incremental_sync: + type: DatetimeBasedCursor + cursor_field: updated_at + is_data_feed: false + start_datetime: gt|2020-01-01T00:00:00.000Z + datetime_format: gt|%Y-%m-%dT%H:%M:%S.%fZ + cursor_datetime_formats: + - "%Y-%m-%dT%H:%M:%S.%fZ" + partition_field_end: "" + partition_field_start: "" + - type: DeclarativeStream + name: openings + retriever: + type: SimpleRetriever + paginator: + type: DefaultPaginator + page_token_option: + type: RequestPath + pagination_strategy: + type: CursorPagination + cursor_value: "{{ headers.link.next.url }}" + stop_condition: "{{ not headers.get(\"link\") }}" + requester: + type: HttpRequester + url: https://harvest.greenhouse.io/v3/openings + http_method: GET + authenticator: + type: OAuthAuthenticator + scopes: + - harvest:applications:list + client_id: "{{ config[\"client_id\"] }}" + grant_type: client_credentials + client_secret: "{{ config[\"client_secret\"] }}" + client_id_name: client_id + grant_type_name: grant_type + access_token_name: access_token + client_secret_name: client_secret + refresh_token_name: refresh_token + use_profile_assertion: false + token_refresh_endpoint: https://auth.greenhouse.io/token + request_parameters: + updated_at: "{{ stream_slice.start_time if not next_page_token else '' }}" + record_selector: + type: RecordSelector + extractor: + type: DpathExtractor + field_path: [] + primary_key: + - id + schema_loader: + type: InlineSchemaLoader + schema: + type: object + $schema: http://json-schema.org/schema# + required: + - id + - updated_at + properties: + id: + type: number + job_id: + type: + - number + - "null" + created_at: + type: + - string + - "null" + opening_id: + type: + - string + - "null" + updated_at: + type: string + custom_fields: + type: + - object + - "null" + application_id: + type: + - number + - "null" + target_start_on: + type: + - string + - "null" + close_reason_id: + type: + - number + - "null" + sort_order: + type: + - number + - "null" + opened_at: + type: + - string + - "null" + closed_at: + type: + - string + - "null" + open: + type: + - boolean + - "null" + additionalProperties: true + incremental_sync: + type: DatetimeBasedCursor + cursor_field: updated_at + is_data_feed: false + start_datetime: gt|2020-01-01T00:00:00.000Z + datetime_format: gt|%Y-%m-%dT%H:%M:%S.%fZ + cursor_datetime_formats: + - "%Y-%m-%dT%H:%M:%S.%fZ" + - type: DeclarativeStream + name: offers + retriever: + type: SimpleRetriever + paginator: + type: DefaultPaginator + page_token_option: + type: RequestPath + pagination_strategy: + type: CursorPagination + cursor_value: "{{ headers.link.next.url }}" + stop_condition: "{{ not headers.get(\"link\") }}" + requester: + type: HttpRequester + url: https://harvest.greenhouse.io/v3/offers + http_method: GET + authenticator: + type: OAuthAuthenticator + scopes: + - harvest:applications:list + client_id: "{{ config[\"client_id\"] }}" + grant_type: client_credentials + client_secret: "{{ config[\"client_secret\"] }}" + client_id_name: client_id + grant_type_name: grant_type + access_token_name: access_token + client_secret_name: client_secret + refresh_token_name: refresh_token + use_profile_assertion: false + token_refresh_endpoint: https://auth.greenhouse.io/token + request_parameters: + updated_at: "{{ stream_slice.start_time if not next_page_token else '' }}" + record_selector: + type: RecordSelector + extractor: + type: DpathExtractor + field_path: [] + primary_key: + - id + schema_loader: + type: InlineSchemaLoader + schema: + type: object + $schema: http://json-schema.org/schema# + required: + - id + - updated_at + properties: + version: + type: + - number + - "null" + id: + type: number + created_at: + type: + - string + - "null" + updated_at: + type: string + application_id: + type: + - number + - "null" + custom_fields: + type: + - object + - "null" + properties: + level: + type: + - object + - "null" + properties: + type: + type: + - string + - "null" + name: + type: + - string + - "null" + value: + type: + - string + - "null" + office: + type: + - object + - "null" + properties: + type: + type: + - string + - "null" + name: + type: + - string + - "null" + value: + type: + - string + - "null" + salary: + type: + - object + - "null" + properties: + type: + type: + - string + - "null" + name: + type: + - string + - "null" + value: + type: + - object + - "null" + properties: + unit: + type: + - string + - "null" + value: + type: + - string + - "null" + frequency: + type: + - string + - "null" + rationale: + type: + - string + - "null" + allowances: + type: + - object + - "null" + properties: + type: + type: + - string + - "null" + name: + type: + - string + - "null" + value: + type: + - object + - "null" + properties: + unit: + type: + - string + - "null" + value: + type: + - string + - "null" + frequency: + type: + - string + - "null" + rationale: + type: + - string + - "null" + hourly_rate: + type: + - object + - "null" + properties: + type: + type: + - string + - "null" + name: + type: + - string + - "null" + annual_bonus: + type: + - object + - "null" + properties: + type: + type: + - string + - "null" + name: + type: + - string + - "null" + sign_on_bonus: + type: + - object + - "null" + properties: + type: + type: + - string + - "null" + name: + type: + - string + - "null" + value: + type: + - object + - "null" + properties: + unit: + type: + - string + - "null" + value: + type: + - string + - "null" + frequency: + type: + - string + - "null" + rationale: + type: + - string + - "null" + employment_type: + type: + - object + - "null" + properties: + type: + type: + - string + - "null" + name: + type: + - string + - "null" + value: + type: + - string + - "null" + offer_declined___other_offer: + type: + - object + - "null" + properties: + type: + type: + - string + - "null" + name: + type: + - string + - "null" + value: + type: + - object + - "null" + properties: + unit: + type: + - string + - "null" + value: + type: + - string + - "null" + enter_the_client_s_name_or__bench__: + type: + - object + - "null" + properties: + type: + type: + - string + - "null" + name: + type: + - string + - "null" + value: + type: + - string + - "null" + feedback_from_ceo_s_final_conversation: + type: + - object + - "null" + properties: + type: + type: + - string + - "null" + name: + type: + - string + - "null" + value: + type: + - string + - "null" + comments_about_the_offer_or_from_ceo_s_final_conv: + type: + - object + - "null" + properties: + type: + type: + - string + - "null" + name: + type: + - string + - "null" + value: + type: + - string + - "null" + comments_about_the_offer__equity_negotiation__salary_after_placement__level_after_placement_: + type: + - object + - "null" + properties: + type: + type: + - string + - "null" + name: + type: + - string + - "null" + value: + type: + - string + - "null" + candidate_id: + type: + - number + - "null" + resolved_at: + type: + - string + - "null" + opening_id: + type: + - number + - "null" + starts_on: + type: + - string + - "null" + sent_on: + type: + - string + - "null" + status: + type: + - string + - "null" + job_id: + type: + - number + - "null" + additionalProperties: true + incremental_sync: + type: DatetimeBasedCursor + cursor_field: updated_at + is_data_feed: false + start_datetime: gt|2020-01-01T00:00:00.000Z + datetime_format: gt|%Y-%m-%dT%H:%M:%S.%fZ + cursor_datetime_formats: + - "%Y-%m-%dT%H:%M:%S.%fZ" + - type: DeclarativeStream + name: prospect_pools + retriever: + type: SimpleRetriever + paginator: + type: DefaultPaginator + page_token_option: + type: RequestPath + pagination_strategy: + type: CursorPagination + cursor_value: "{{ headers.link.next.url }}" + stop_condition: "{{ not headers.get(\"link\") }}" + requester: + type: HttpRequester + url: https://harvest.greenhouse.io/v3/prospect_pools + http_method: GET + authenticator: + type: OAuthAuthenticator + scopes: + - harvest:applications:list + client_id: "{{ config[\"client_id\"] }}" + grant_type: client_credentials + client_secret: "{{ config[\"client_secret\"] }}" + client_id_name: client_id + grant_type_name: grant_type + access_token_name: access_token + client_secret_name: client_secret + refresh_token_name: refresh_token + use_profile_assertion: false + token_refresh_endpoint: https://auth.greenhouse.io/token + request_parameters: + updated_at: "{{ stream_slice.start_time if not next_page_token else '' }}" + record_selector: + type: RecordSelector + extractor: + type: DpathExtractor + field_path: [] + primary_key: + - id + schema_loader: + type: InlineSchemaLoader + schema: + type: object + $schema: http://json-schema.org/schema# + properties: + description: + type: + - string + - "null" + department_ids: + type: + - array + - "null" + items: + type: + - number + - "null" + updated_at: + type: string + office_ids: + type: + - array + - "null" + created_at: + type: + - string + - "null" + job_ids: + type: + - array + - "null" + items: + type: + - number + - "null" + active: + type: + - boolean + - "null" + name: + type: + - string + - "null" + id: + type: number + additionalProperties: true + required: + - id + - updated_at + incremental_sync: + type: DatetimeBasedCursor + cursor_field: updated_at + is_data_feed: false + start_datetime: gt|2020-01-01T00:00:00.000Z + datetime_format: gt|%Y-%m-%dT%H:%M:%S.%fZ + cursor_datetime_formats: + - "%Y-%m-%dT%H:%M:%S.%fZ" + - type: DeclarativeStream + name: interviews + retriever: + type: SimpleRetriever + paginator: + type: DefaultPaginator + page_token_option: + type: RequestPath + pagination_strategy: + type: CursorPagination + cursor_value: "{{ headers.link.next.url }}" + stop_condition: "{{ not headers.get(\"link\") }}" + requester: + type: HttpRequester + url: https://harvest.greenhouse.io/v3/interviews + http_method: GET + authenticator: + type: OAuthAuthenticator + scopes: + - harvest:applications:list + client_id: "{{ config[\"client_id\"] }}" + grant_type: client_credentials + client_secret: "{{ config[\"client_secret\"] }}" + client_id_name: client_id + grant_type_name: grant_type + access_token_name: access_token + client_secret_name: client_secret + refresh_token_name: refresh_token + use_profile_assertion: false + token_refresh_endpoint: https://auth.greenhouse.io/token + expires_in_name: "" + token_expiry_date: "" + token_expiry_date_format: "" + refresh_token_error_key: "" + request_parameters: + updated_at: "{{ stream_slice.start_time if not next_page_token else '' }}" + record_selector: + type: RecordSelector + extractor: + type: DpathExtractor + field_path: [] + primary_key: + - id + schema_loader: + type: InlineSchemaLoader + schema: + type: object + $schema: http://json-schema.org/schema# + properties: + id: + type: number + application_id: + type: + - number + - "null" + external_event_id: + type: + - string + - "null" + starts_at: + type: + - string + - "null" + ends_at: + type: + - string + - "null" + location: + type: + - string + - "null" + created_at: + type: + - string + - "null" + updated_at: + type: string + organizer_id: + type: + - number + - "null" + scheduled_at: + type: + - string + - "null" + availability_received_at: + type: + - string + - "null" + job_id: + type: + - number + - "null" + job_interview_id: + type: + - number + - "null" + video_conferencing_url: + type: + - string + - "null" + status: + type: + - string + - "null" + required: + - id + - updated_at + additionalProperties: true + incremental_sync: + type: DatetimeBasedCursor + cursor_field: updated_at + is_data_feed: false + start_datetime: gt|2020-01-01T00:00:00.000Z + datetime_format: gt|%Y-%m-%dT%H:%M:%S.%fZ + cursor_datetime_formats: + - "%Y-%m-%dT%H:%M:%S.%fZ" + partition_field_end: "" + partition_field_start: "" + - type: DeclarativeStream + name: scorecard_candidate_attributes + retriever: + type: SimpleRetriever + paginator: + type: DefaultPaginator + page_token_option: + type: RequestPath + pagination_strategy: + type: CursorPagination + cursor_value: "{{ headers.link.next.url }}" + stop_condition: "{{ not headers.get(\"link\") }}" + requester: + type: HttpRequester + url: https://harvest.greenhouse.io/v3/scorecard_candidate_attributes + http_method: GET + authenticator: + type: OAuthAuthenticator + scopes: + - harvest:applications:list + client_id: "{{ config[\"client_id\"] }}" + grant_type: client_credentials + client_secret: "{{ config[\"client_secret\"] }}" + client_id_name: client_id + grant_type_name: grant_type + access_token_name: access_token + client_secret_name: client_secret + refresh_token_name: refresh_token + use_profile_assertion: false + token_refresh_endpoint: https://auth.greenhouse.io/token + request_parameters: + updated_at: "{{ stream_slice.start_time if not next_page_token else '' }}" + record_selector: + type: RecordSelector + extractor: + type: DpathExtractor + field_path: [] + primary_key: + - id + schema_loader: + type: InlineSchemaLoader + schema: + type: object + $schema: http://json-schema.org/schema# + required: + - id + - updated_at + properties: + id: + type: number + created_at: + type: + - string + - "null" + updated_at: + type: string + job_candidate_attribute_id: + type: + - number + - "null" + candidate_attribute_rating: + type: + - string + - "null" + scorecard_id: + type: + - number + - "null" + note: + type: + - string + - "null" + additionalProperties: true + incremental_sync: + type: DatetimeBasedCursor + cursor_field: updated_at + is_data_feed: false + start_datetime: gt|2020-01-01T00:00:00.000Z + datetime_format: gt|%Y-%m-%dT%H:%M:%S.%fZ + cursor_datetime_formats: + - "%Y-%m-%dT%H:%M:%S.%fZ" + - type: DeclarativeStream + name: departments + retriever: + type: SimpleRetriever + paginator: + type: DefaultPaginator + page_token_option: + type: RequestPath + pagination_strategy: + type: CursorPagination + cursor_value: "{{ headers.link.next.url }}" + stop_condition: "{{ not headers.get(\"link\") }}" + requester: + type: HttpRequester + url: https://harvest.greenhouse.io/v3/departments + http_method: GET + authenticator: + type: OAuthAuthenticator + scopes: + - harvest:applications:list + client_id: "{{ config[\"client_id\"] }}" + grant_type: client_credentials + client_secret: "{{ config[\"client_secret\"] }}" + client_id_name: client_id + grant_type_name: grant_type + access_token_name: access_token + client_secret_name: client_secret + refresh_token_name: refresh_token + use_profile_assertion: false + token_refresh_endpoint: https://auth.greenhouse.io/token + request_parameters: + updated_at: "{{ stream_slice.start_time if not next_page_token else '' }}" + record_selector: + type: RecordSelector + extractor: + type: DpathExtractor + field_path: [] + primary_key: + - id + schema_loader: + type: InlineSchemaLoader + schema: + type: object + $schema: http://json-schema.org/schema# + required: + - id + - updated_at + properties: + id: + type: number + name: + type: + - string + - "null" + created_at: + type: + - string + - "null" + updated_at: + type: string + parent_id: + type: + - number + - "null" + additionalProperties: true + incremental_sync: + type: DatetimeBasedCursor + cursor_field: updated_at + is_data_feed: false + start_datetime: gt|2020-01-01T00:00:00.000Z + datetime_format: gt|%Y-%m-%dT%H:%M:%S.%fZ + cursor_datetime_formats: + - "%Y-%m-%dT%H:%M:%S.%fZ" + - type: DeclarativeStream + name: offices + retriever: + type: SimpleRetriever + paginator: + type: DefaultPaginator + page_token_option: + type: RequestPath + pagination_strategy: + type: CursorPagination + cursor_value: "{{ headers.link.next.url }}" + stop_condition: "{{ not headers.get(\"link\") }}" + requester: + type: HttpRequester + url: https://harvest.greenhouse.io/v3/offices + http_method: GET + authenticator: + type: OAuthAuthenticator + scopes: + - harvest:applications:list + client_id: "{{ config[\"client_id\"] }}" + grant_type: client_credentials + client_secret: "{{ config[\"client_secret\"] }}" + client_id_name: client_id + grant_type_name: grant_type + access_token_name: access_token + client_secret_name: client_secret + refresh_token_name: refresh_token + use_profile_assertion: false + token_refresh_endpoint: https://auth.greenhouse.io/token + request_parameters: + updated_at: "{{ stream_slice.start_time if not next_page_token else '' }}" + record_selector: + type: RecordSelector + extractor: + type: DpathExtractor + field_path: [] + primary_key: + - id + schema_loader: + type: InlineSchemaLoader + schema: + type: object + $schema: http://json-schema.org/schema# + required: + - id + - updated_at + properties: + id: + type: number + name: + type: + - string + - "null" + created_at: + type: + - string + - "null" + updated_at: + type: string + location: + type: + - string + - "null" + additionalProperties: true + incremental_sync: + type: DatetimeBasedCursor + cursor_field: updated_at + is_data_feed: false + start_datetime: gt|2020-01-01T00:00:00.000Z + datetime_format: gt|%Y-%m-%dT%H:%M:%S.%fZ + cursor_datetime_formats: + - "%Y-%m-%dT%H:%M:%S.%fZ" + - type: DeclarativeStream + name: users + retriever: + type: SimpleRetriever + paginator: + type: DefaultPaginator + page_token_option: + type: RequestPath + pagination_strategy: + type: CursorPagination + cursor_value: "{{ headers.link.next.url }}" + stop_condition: "{{ not headers.get(\"link\") }}" + requester: + type: HttpRequester + url: https://harvest.greenhouse.io/v3/users + http_method: GET + authenticator: + type: OAuthAuthenticator + scopes: + - harvest:applications:list + client_id: "{{ config[\"client_id\"] }}" + grant_type: client_credentials + client_secret: "{{ config[\"client_secret\"] }}" + client_id_name: client_id + grant_type_name: grant_type + access_token_name: access_token + client_secret_name: client_secret + refresh_token_name: refresh_token + use_profile_assertion: false + token_refresh_endpoint: https://auth.greenhouse.io/token + request_parameters: + updated_at: "{{ stream_slice.start_time if not next_page_token else '' }}" + record_selector: + type: RecordSelector + extractor: + type: DpathExtractor + field_path: [] + primary_key: + - id + schema_loader: + type: InlineSchemaLoader + schema: + type: object + $schema: http://json-schema.org/schema# + required: + - id + - updated_at + properties: + id: + type: number + created_at: + type: + - string + - "null" + updated_at: + type: string + linked_candidate_ids: + type: + - array + - "null" + items: + type: + - number + - "null" + interviewer_tags: + type: + - array + - "null" + items: + type: + - object + - "null" + properties: + id: + type: + - number + - "null" + name: + type: + - string + - "null" + department_ids: + type: + - array + - "null" + items: + type: + - number + - "null" + primary_email: + type: + - string + - "null" + custom_fields: + type: + - object + - "null" + properties: + employment_level: + type: + - object + - "null" + properties: + type: + type: + - string + - "null" + name: + type: + - string + - "null" + value: + type: + - string + - "null" + employee_id: + type: + - string + - "null" + deactivated: + type: + - boolean + - "null" + site_admin: + type: + - boolean + - "null" + office_ids: + type: + - array + - "null" + items: + type: + - number + - "null" + first_name: + type: + - string + - "null" + last_name: + type: + - string + - "null" + job_title: + type: + - string + - "null" + name: + type: + - string + - "null" + additionalProperties: true + incremental_sync: + type: DatetimeBasedCursor + cursor_field: updated_at + is_data_feed: false + start_datetime: gt|2020-01-01T00:00:00.000Z + datetime_format: gt|%Y-%m-%dT%H:%M:%S.%fZ + cursor_datetime_formats: + - "%Y-%m-%dT%H:%M:%S.%fZ" + - type: DeclarativeStream + name: user_job_permissions + retriever: + type: SimpleRetriever + paginator: + type: DefaultPaginator + page_token_option: + type: RequestPath + pagination_strategy: + type: CursorPagination + cursor_value: "{{ headers.link.next.url }}" + stop_condition: "{{ not headers.get(\"link\") }}" + requester: + type: HttpRequester + url: https://harvest.greenhouse.io/v3/user_job_permissions + http_method: GET + authenticator: + type: OAuthAuthenticator + scopes: + - harvest:applications:list + client_id: "{{ config[\"client_id\"] }}" + grant_type: client_credentials + client_secret: "{{ config[\"client_secret\"] }}" + client_id_name: client_id + grant_type_name: grant_type + access_token_name: access_token + client_secret_name: client_secret + refresh_token_name: refresh_token + use_profile_assertion: false + token_refresh_endpoint: https://auth.greenhouse.io/token + request_parameters: + updated_at: "{{ stream_slice.start_time if not next_page_token else '' }}" + record_selector: + type: RecordSelector + extractor: + type: DpathExtractor + field_path: [] + primary_key: + - id + schema_loader: + type: InlineSchemaLoader + schema: + type: object + $schema: http://json-schema.org/schema# + required: + - id + - updated_at + properties: + id: + type: number + created_at: + type: + - string + - "null" + updated_at: + type: string + automated: + type: + - boolean + - "null" + user_id: + type: + - number + - "null" + role_id: + type: + - number + - "null" + job_id: + type: + - number + - "null" + additionalProperties: true + incremental_sync: + type: DatetimeBasedCursor + cursor_field: updated_at + is_data_feed: false + start_datetime: gt|2020-01-01T00:00:00.000Z + datetime_format: gt|%Y-%m-%dT%H:%M:%S.%fZ + cursor_datetime_formats: + - "%Y-%m-%dT%H:%M:%S.%fZ" + - type: DeclarativeStream + name: user_roles + retriever: + type: SimpleRetriever + paginator: + type: DefaultPaginator + page_token_option: + type: RequestPath + pagination_strategy: + type: CursorPagination + cursor_value: "{{ headers.link.next.url }}" + stop_condition: "{{ not headers.get(\"link\") }}" + requester: + type: HttpRequester + url: https://harvest.greenhouse.io/v3/user_roles + http_method: GET + authenticator: + type: OAuthAuthenticator + scopes: + - harvest:applications:list + client_id: "{{ config[\"client_id\"] }}" + grant_type: client_credentials + client_secret: "{{ config[\"client_secret\"] }}" + client_id_name: client_id + grant_type_name: grant_type + access_token_name: access_token + client_secret_name: client_secret + refresh_token_name: refresh_token + use_profile_assertion: false + token_refresh_endpoint: https://auth.greenhouse.io/token + request_parameters: + updated_at: "{{ stream_slice.start_time if not next_page_token else '' }}" + record_selector: + type: RecordSelector + extractor: + type: DpathExtractor + field_path: [] + primary_key: + - id + schema_loader: + type: InlineSchemaLoader + schema: + type: object + $schema: http://json-schema.org/schema# + required: + - id + - updated_at + properties: + id: + type: number + created_at: + type: + - string + - "null" + updated_at: + type: string + role_type: + type: + - string + - "null" + name: + type: + - string + - "null" + additionalProperties: true + incremental_sync: + type: DatetimeBasedCursor + cursor_field: updated_at + is_data_feed: false + start_datetime: gt|2020-01-01T00:00:00.000Z + datetime_format: gt|%Y-%m-%dT%H:%M:%S.%fZ + cursor_datetime_formats: + - "%Y-%m-%dT%H:%M:%S.%fZ" + - type: DeclarativeStream + name: future_job_permissions + retriever: + type: SimpleRetriever + paginator: + type: DefaultPaginator + page_token_option: + type: RequestPath + pagination_strategy: + type: CursorPagination + cursor_value: "{{ headers.link.next.url }}" + stop_condition: "{{ not headers.get(\"link\") }}" + requester: + type: HttpRequester + url: https://harvest.greenhouse.io/v3/future_job_permissions + http_method: GET + authenticator: + type: OAuthAuthenticator + scopes: + - harvest:applications:list + client_id: "{{ config[\"client_id\"] }}" + grant_type: client_credentials + client_secret: "{{ config[\"client_secret\"] }}" + client_id_name: client_id + grant_type_name: grant_type + access_token_name: access_token + client_secret_name: client_secret + refresh_token_name: refresh_token + use_profile_assertion: false + token_refresh_endpoint: https://auth.greenhouse.io/token + request_parameters: + updated_at: "{{ stream_slice.start_time if not next_page_token else '' }}" + record_selector: + type: RecordSelector + extractor: + type: DpathExtractor + field_path: [] + primary_key: + - id + schema_loader: + type: InlineSchemaLoader + schema: + type: object + $schema: http://json-schema.org/schema# + required: + - id + - updated_at + properties: + id: + type: number + created_at: + type: + - string + - "null" + updated_at: + type: string + department_id: + type: + - number + - "null" + user_id: + type: + - number + - "null" + role_id: + type: + - number + - "null" + additionalProperties: true + incremental_sync: + type: DatetimeBasedCursor + cursor_field: updated_at + is_data_feed: false + start_datetime: gt|2020-01-01T00:00:00.000Z + datetime_format: gt|%Y-%m-%dT%H:%M:%S.%fZ + cursor_datetime_formats: + - "%Y-%m-%dT%H:%M:%S.%fZ" + - type: DeclarativeStream + name: approval_flows + retriever: + type: SimpleRetriever + paginator: + type: DefaultPaginator + page_token_option: + type: RequestPath + pagination_strategy: + type: CursorPagination + cursor_value: "{{ headers.link.next.url }}" + stop_condition: "{{ not headers.get(\"link\") }}" + requester: + type: HttpRequester + url: https://harvest.greenhouse.io/v3/approval_flows + http_method: GET + authenticator: + type: OAuthAuthenticator + scopes: + - harvest:applications:list + client_id: "{{ config[\"client_id\"] }}" + grant_type: client_credentials + client_secret: "{{ config[\"client_secret\"] }}" + client_id_name: client_id + grant_type_name: grant_type + access_token_name: access_token + client_secret_name: client_secret + refresh_token_name: refresh_token + use_profile_assertion: false + token_refresh_endpoint: https://auth.greenhouse.io/token + request_parameters: + updated_at: "{{ stream_slice.start_time if not next_page_token else '' }}" + record_selector: + type: RecordSelector + extractor: + type: DpathExtractor + field_path: [] + primary_key: + - id + schema_loader: + type: InlineSchemaLoader + schema: + type: object + $schema: http://json-schema.org/schema# + required: + - id + - updated_at + properties: + version: + type: + - number + - "null" + id: + type: number + created_at: + type: + - string + - "null" + updated_at: + type: string + requested_by_id: + type: + - number + - "null" + approval_status: + type: + - string + - "null" + approval_type: + type: + - string + - "null" + sequential: + type: + - boolean + - "null" + job_id: + type: + - number + - "null" + additionalProperties: true + incremental_sync: + type: DatetimeBasedCursor + cursor_field: updated_at + is_data_feed: false + start_datetime: gt|2020-01-01T00:00:00.000Z + datetime_format: gt|%Y-%m-%dT%H:%M:%S.%fZ + cursor_datetime_formats: + - "%Y-%m-%dT%H:%M:%S.%fZ" + - type: DeclarativeStream + name: approver_groups + retriever: + type: SimpleRetriever + paginator: + type: DefaultPaginator + page_token_option: + type: RequestPath + pagination_strategy: + type: CursorPagination + cursor_value: "{{ headers.link.next.url }}" + stop_condition: "{{ not headers.get(\"link\") }}" + requester: + type: HttpRequester + url: https://harvest.greenhouse.io/v3/approver_groups + http_method: GET + authenticator: + type: OAuthAuthenticator + scopes: + - harvest:applications:list + client_id: "{{ config[\"client_id\"] }}" + grant_type: client_credentials + client_secret: "{{ config[\"client_secret\"] }}" + client_id_name: client_id + grant_type_name: grant_type + access_token_name: access_token + client_secret_name: client_secret + refresh_token_name: refresh_token + use_profile_assertion: false + token_refresh_endpoint: https://auth.greenhouse.io/token + request_parameters: + updated_at: "{{ stream_slice.start_time if not next_page_token else '' }}" + record_selector: + type: RecordSelector + extractor: + type: DpathExtractor + field_path: [] + primary_key: + - id + schema_loader: + type: InlineSchemaLoader + schema: + type: object + $schema: http://json-schema.org/schema# + required: + - id + - updated_at + properties: + id: + type: number + created_at: + type: + - string + - "null" + updated_at: + type: string + required_for_exception: + type: + - boolean + - "null" + approvals_required: + type: + - number + - "null" + approval_flow_id: + type: + - number + - "null" + resolved_at: + type: + - string + - "null" + sort_order: + type: + - number + - "null" + additionalProperties: true + incremental_sync: + type: DatetimeBasedCursor + cursor_field: updated_at + is_data_feed: false + start_datetime: gt|2020-01-01T00:00:00.000Z + datetime_format: gt|%Y-%m-%dT%H:%M:%S.%fZ + cursor_datetime_formats: + - "%Y-%m-%dT%H:%M:%S.%fZ" + - type: DeclarativeStream + name: close_reasons + retriever: + type: SimpleRetriever + paginator: + type: DefaultPaginator + page_token_option: + type: RequestPath + pagination_strategy: + type: CursorPagination + cursor_value: "{{ headers.link.next.url }}" + stop_condition: "{{ not headers.get(\"link\") }}" + requester: + type: HttpRequester + url: https://harvest.greenhouse.io/v3/close_reasons + http_method: GET + authenticator: + type: OAuthAuthenticator + scopes: + - harvest:applications:list + client_id: "{{ config[\"client_id\"] }}" + grant_type: client_credentials + client_secret: "{{ config[\"client_secret\"] }}" + client_id_name: client_id + grant_type_name: grant_type + access_token_name: access_token + client_secret_name: client_secret + refresh_token_name: refresh_token + use_profile_assertion: false + token_refresh_endpoint: https://auth.greenhouse.io/token + request_parameters: + updated_at: "{{ stream_slice.start_time if not next_page_token else '' }}" + record_selector: + type: RecordSelector + extractor: + type: DpathExtractor + field_path: [] + primary_key: + - id + schema_loader: + type: InlineSchemaLoader + schema: + type: object + $schema: http://json-schema.org/schema# + required: + - id + - updated_at + properties: + id: + type: number + name: + type: + - string + - "null" + created_at: + type: + - string + - "null" + updated_at: + type: string + additionalProperties: true + incremental_sync: + type: DatetimeBasedCursor + cursor_field: updated_at + is_data_feed: false + start_datetime: gt|2020-01-01T00:00:00.000Z + datetime_format: gt|%Y-%m-%dT%H:%M:%S.%fZ + cursor_datetime_formats: + - "%Y-%m-%dT%H:%M:%S.%fZ" + - type: DeclarativeStream + name: rejection_reasons + retriever: + type: SimpleRetriever + paginator: + type: DefaultPaginator + page_token_option: + type: RequestPath + pagination_strategy: + type: CursorPagination + cursor_value: "{{ headers.link.next.url }}" + stop_condition: "{{ not headers.get(\"link\") }}" + requester: + type: HttpRequester + url: https://harvest.greenhouse.io/v3/rejection_reasons + http_method: GET + authenticator: + type: OAuthAuthenticator + scopes: + - harvest:applications:list + client_id: "{{ config[\"client_id\"] }}" + grant_type: client_credentials + client_secret: "{{ config[\"client_secret\"] }}" + client_id_name: client_id + grant_type_name: grant_type + access_token_name: access_token + client_secret_name: client_secret + refresh_token_name: refresh_token + use_profile_assertion: false + token_refresh_endpoint: https://auth.greenhouse.io/token + request_parameters: + updated_at: "{{ stream_slice.start_time if not next_page_token else '' }}" + record_selector: + type: RecordSelector + extractor: + type: DpathExtractor + field_path: [] + primary_key: + - id + schema_loader: + type: InlineSchemaLoader + schema: + type: object + $schema: http://json-schema.org/schema# + required: + - id + - updated_at + properties: + type: + type: + - object + - "null" + properties: + id: + type: + - number + - "null" + key: + type: + - string + - "null" + name: + type: + - string + - "null" + id: + type: number + created_at: + type: + - string + - "null" + updated_at: + type: string + name: + type: + - string + - "null" + additionalProperties: true + incremental_sync: + type: DatetimeBasedCursor + cursor_field: updated_at + is_data_feed: false + start_datetime: gt|2020-01-01T00:00:00.000Z + datetime_format: gt|%Y-%m-%dT%H:%M:%S.%fZ + cursor_datetime_formats: + - "%Y-%m-%dT%H:%M:%S.%fZ" + - type: DeclarativeStream + name: rejection_details + retriever: + type: SimpleRetriever + paginator: + type: DefaultPaginator + page_token_option: + type: RequestPath + pagination_strategy: + type: CursorPagination + cursor_value: "{{ headers.link.next.url }}" + stop_condition: "{{ not headers.get(\"link\") }}" + requester: + type: HttpRequester + url: https://harvest.greenhouse.io/v3/rejection_details + http_method: GET + authenticator: + type: OAuthAuthenticator + scopes: + - harvest:applications:list + client_id: "{{ config[\"client_id\"] }}" + grant_type: client_credentials + client_secret: "{{ config[\"client_secret\"] }}" + client_id_name: client_id + grant_type_name: grant_type + access_token_name: access_token + client_secret_name: client_secret + refresh_token_name: refresh_token + use_profile_assertion: false + token_refresh_endpoint: https://auth.greenhouse.io/token + request_parameters: + updated_at: "{{ stream_slice.start_time if not next_page_token else '' }}" + record_selector: + type: RecordSelector + extractor: + type: DpathExtractor + field_path: [] + primary_key: + - id + schema_loader: + type: InlineSchemaLoader + schema: + type: object + $schema: http://json-schema.org/schema# + required: + - id + - updated_at + properties: + id: + type: number + created_at: + type: + - string + - "null" + updated_at: + type: string + question_custom_fields: + type: + - object + - "null" + rejection_reason_id: + type: + - number + - "null" + rejection_note_id: + type: + - number + - "null" + rejected_by_id: + type: + - number + - "null" + application_id: + type: + - number + - "null" + rejected_at: + type: + - string + - "null" + additionalProperties: true + incremental_sync: + type: DatetimeBasedCursor + cursor_field: updated_at + is_data_feed: false + start_datetime: gt|2020-01-01T00:00:00.000Z + datetime_format: gt|%Y-%m-%dT%H:%M:%S.%fZ + cursor_datetime_formats: + - "%Y-%m-%dT%H:%M:%S.%fZ" + - type: DeclarativeStream + name: sources + retriever: + type: SimpleRetriever + paginator: + type: DefaultPaginator + page_token_option: + type: RequestPath + pagination_strategy: + type: CursorPagination + cursor_value: "{{ headers.link.next.url }}" + stop_condition: "{{ not headers.get(\"link\") }}" + requester: + type: HttpRequester + url: https://harvest.greenhouse.io/v3/sources + http_method: GET + authenticator: + type: OAuthAuthenticator + scopes: + - harvest:applications:list + client_id: "{{ config[\"client_id\"] }}" + grant_type: client_credentials + client_secret: "{{ config[\"client_secret\"] }}" + client_id_name: client_id + grant_type_name: grant_type + access_token_name: access_token + client_secret_name: client_secret + refresh_token_name: refresh_token + use_profile_assertion: false + token_refresh_endpoint: https://auth.greenhouse.io/token + request_parameters: + updated_at: "{{ stream_slice.start_time if not next_page_token else '' }}" + record_selector: + type: RecordSelector + extractor: + type: DpathExtractor + field_path: [] + primary_key: + - id + schema_loader: + type: InlineSchemaLoader + schema: + type: object + $schema: http://json-schema.org/schema# + properties: + type: + type: + - object + - "null" + properties: + id: + type: + - number + - "null" + name: + type: + - string + - "null" + updated_at: + type: string + created_at: + type: + - string + - "null" + name: + type: + - string + - "null" + id: + type: number + additionalProperties: true + required: + - id + - updated_at + incremental_sync: + type: DatetimeBasedCursor + cursor_field: updated_at + is_data_feed: false + start_datetime: gt|2020-01-01T00:00:00.000Z + datetime_format: gt|%Y-%m-%dT%H:%M:%S.%fZ + cursor_datetime_formats: + - "%Y-%m-%dT%H:%M:%S.%fZ" + - type: DeclarativeStream + name: email_templates + retriever: + type: SimpleRetriever + paginator: + type: DefaultPaginator + page_token_option: + type: RequestPath + pagination_strategy: + type: CursorPagination + cursor_value: "{{ headers.link.next.url }}" + stop_condition: "{{ not headers.get(\"link\") }}" + requester: + type: HttpRequester + url: https://harvest.greenhouse.io/v3/email_templates + http_method: GET + authenticator: + type: OAuthAuthenticator + scopes: + - harvest:applications:list + client_id: "{{ config[\"client_id\"] }}" + grant_type: client_credentials + client_secret: "{{ config[\"client_secret\"] }}" + client_id_name: client_id + grant_type_name: grant_type + access_token_name: access_token + client_secret_name: client_secret + refresh_token_name: refresh_token + use_profile_assertion: false + token_refresh_endpoint: https://auth.greenhouse.io/token + expires_in_name: "" + token_expiry_date: "" + token_expiry_date_format: "" + refresh_token_error_key: "" + request_parameters: + updated_at: "{{ stream_slice.start_time if not next_page_token else '' }}" + record_selector: + type: RecordSelector + extractor: + type: DpathExtractor + field_path: [] + primary_key: + - id + schema_loader: + type: InlineSchemaLoader + schema: + type: object + $schema: http://json-schema.org/schema# + properties: + description: + type: + - string + - "null" + id: + type: number + subject: + type: + - string + - "null" + body: + type: + - string + - "null" + name: + type: + - string + - "null" + recipients: + type: + - string + - "null" + default: + type: + - boolean + - "null" + html_body: + type: + - string + - "null" + office_anywhere: + type: + - boolean + - "null" + from_type: + type: + - string + - "null" + cc_recruiter: + type: + - boolean + - "null" + cc_coordinator: + type: + - boolean + - "null" + created_at: + type: + - string + - "null" + updated_at: + type: string + email_type: + type: + - string + - "null" + required: + - id + - updated_at + additionalProperties: true + incremental_sync: + type: DatetimeBasedCursor + cursor_field: updated_at + is_data_feed: false + start_datetime: gt|2020-01-01T00:00:00.000Z + datetime_format: gt|%Y-%m-%dT%H:%M:%S.%fZ + cursor_datetime_formats: + - "%Y-%m-%dT%H:%M:%S.%fZ" + partition_field_end: "" + partition_field_start: "" + - type: DeclarativeStream + name: custom_fields + retriever: + type: SimpleRetriever + paginator: + type: DefaultPaginator + page_token_option: + type: RequestPath + pagination_strategy: + type: CursorPagination + cursor_value: "{{ headers.link.next.url }}" + stop_condition: "{{ not headers.get(\"link\") }}" + requester: + type: HttpRequester + url: https://harvest.greenhouse.io/v3/custom_fields + http_method: GET + authenticator: + type: OAuthAuthenticator + scopes: + - harvest:applications:list + client_id: "{{ config[\"client_id\"] }}" + grant_type: client_credentials + client_secret: "{{ config[\"client_secret\"] }}" + client_id_name: client_id + grant_type_name: grant_type + access_token_name: access_token + client_secret_name: client_secret + refresh_token_name: refresh_token + use_profile_assertion: false + token_refresh_endpoint: https://auth.greenhouse.io/token + request_parameters: + updated_at: "{{ stream_slice.start_time if not next_page_token else '' }}" + record_selector: + type: RecordSelector + extractor: + type: DpathExtractor + field_path: [] + primary_key: + - id + schema_loader: + type: InlineSchemaLoader + schema: + type: object + $schema: http://json-schema.org/schema# + required: + - id + - updated_at + properties: + id: + type: number + name: + type: + - string + - "null" + active: + type: + - boolean + - "null" + created_at: + type: + - string + - "null" + sort_order: + type: + - number + - "null" + updated_at: + type: string + use_for_offer_approvals: + type: + - boolean + - "null" + expose_in_job_board_api: + type: + - boolean + - "null" + use_for_job_approvals: + type: + - boolean + - "null" + trigger_new_version: + type: + - boolean + - "null" + require_approval: + type: + - boolean + - "null" + application_type: + type: + - string + - "null" + updated_by_id: + type: + - number + - "null" + value_type: + type: + - string + - "null" + field_type: + type: + - string + - "null" + required: + type: + - boolean + - "null" + name_key: + type: + - string + - "null" + api_only: + type: + - boolean + - "null" + private: + type: + - boolean + - "null" + additionalProperties: true + incremental_sync: + type: DatetimeBasedCursor + cursor_field: updated_at + is_data_feed: false + start_datetime: gt|2020-01-01T00:00:00.000Z + datetime_format: gt|%Y-%m-%dT%H:%M:%S.%fZ + cursor_datetime_formats: + - "%Y-%m-%dT%H:%M:%S.%fZ" + - type: DeclarativeStream + name: custom_field_options + retriever: + type: SimpleRetriever + paginator: + type: DefaultPaginator + page_token_option: + type: RequestPath + pagination_strategy: + type: CursorPagination + cursor_value: "{{ headers.link.next.url }}" + stop_condition: "{{ not headers.get(\"link\") }}" + requester: + type: HttpRequester + url: https://harvest.greenhouse.io/v3/custom_field_options + http_method: GET + authenticator: + type: OAuthAuthenticator + scopes: + - harvest:applications:list + client_id: "{{ config[\"client_id\"] }}" + grant_type: client_credentials + client_secret: "{{ config[\"client_secret\"] }}" + client_id_name: client_id + grant_type_name: grant_type + access_token_name: access_token + client_secret_name: client_secret + refresh_token_name: refresh_token + use_profile_assertion: false + token_refresh_endpoint: https://auth.greenhouse.io/token + request_parameters: + updated_at: "{{ stream_slice.start_time if not next_page_token else '' }}" + record_selector: + type: RecordSelector + extractor: + type: DpathExtractor + field_path: [] + primary_key: + - id + schema_loader: + type: InlineSchemaLoader + schema: + type: object + $schema: http://json-schema.org/schema# + required: + - id + - updated_at + properties: + id: + type: number + created_at: + type: + - string + - "null" + updated_at: + type: string + custom_field_id: + type: + - number + - "null" + sort_order: + type: + - number + - "null" + active: + type: + - boolean + - "null" + name: + type: + - string + - "null" + additionalProperties: true + incremental_sync: + type: DatetimeBasedCursor + cursor_field: updated_at + is_data_feed: false + start_datetime: gt|2020-01-01T00:00:00.000Z + datetime_format: gt|%Y-%m-%dT%H:%M:%S.%fZ + cursor_datetime_formats: + - "%Y-%m-%dT%H:%M:%S.%fZ" + - type: DeclarativeStream + name: tracking_links + retriever: + type: SimpleRetriever + paginator: + type: DefaultPaginator + page_token_option: + type: RequestPath + pagination_strategy: + type: CursorPagination + cursor_value: "{{ headers.link.next.url }}" + stop_condition: "{{ not headers.get(\"link\") }}" + requester: + type: HttpRequester + url: https://harvest.greenhouse.io/v3/tracking_links + http_method: GET + authenticator: + type: OAuthAuthenticator + scopes: + - harvest:applications:list + client_id: "{{ config[\"client_id\"] }}" + grant_type: client_credentials + client_secret: "{{ config[\"client_secret\"] }}" + client_id_name: client_id + grant_type_name: grant_type + access_token_name: access_token + client_secret_name: client_secret + refresh_token_name: refresh_token + use_profile_assertion: false + token_refresh_endpoint: https://auth.greenhouse.io/token + request_parameters: + updated_at: "{{ stream_slice.start_time if not next_page_token else '' }}" + record_selector: + type: RecordSelector + extractor: + type: DpathExtractor + field_path: [] + primary_key: + - id + schema_loader: + type: InlineSchemaLoader + schema: + type: object + $schema: http://json-schema.org/schema# + properties: + related_post_type: + type: + - string + - "null" + related_post_id: + type: + - number + - "null" + job_board_id: + type: + - number + - "null" + referrer_id: + type: + - number + - "null" + job_post_id: + type: + - number + - "null" + updated_at: + type: string + created_at: + type: + - string + - "null" + source_id: + type: + - number + - "null" + token: + type: + - string + - "null" + id: + type: number + additionalProperties: true + required: + - id + - updated_at + incremental_sync: + type: DatetimeBasedCursor + cursor_field: updated_at + is_data_feed: false + start_datetime: gt|2020-01-01T00:00:00.000Z + datetime_format: gt|%Y-%m-%dT%H:%M:%S.%fZ + cursor_datetime_formats: + - "%Y-%m-%dT%H:%M:%S.%fZ" + - type: DeclarativeStream + name: eeoc + retriever: + type: SimpleRetriever + paginator: + type: DefaultPaginator + page_token_option: + type: RequestPath + pagination_strategy: + type: CursorPagination + cursor_value: "{{ headers.link.next.url }}" + stop_condition: "{{ not headers.get(\"link\") }}" + requester: + type: HttpRequester + url: https://harvest.greenhouse.io/v3/eeoc + http_method: GET + authenticator: + type: OAuthAuthenticator + scopes: + - harvest:applications:list + client_id: "{{ config[\"client_id\"] }}" + grant_type: client_credentials + client_secret: "{{ config[\"client_secret\"] }}" + client_id_name: client_id + grant_type_name: grant_type + access_token_name: access_token + client_secret_name: client_secret + refresh_token_name: refresh_token + use_profile_assertion: false + token_refresh_endpoint: https://auth.greenhouse.io/token + expires_in_name: "" + token_expiry_date: "" + token_expiry_date_format: "" + refresh_token_error_key: "" + request_parameters: + updated_at: "{{ stream_slice.start_time if not next_page_token else '' }}" + record_selector: + type: RecordSelector + extractor: + type: DpathExtractor + field_path: [] + primary_key: + - id + schema_loader: + type: InlineSchemaLoader + schema: + type: object + $schema: http://json-schema.org/schema# + properties: + id: + type: number + application_id: + type: + - number + - "null" + submitted_at: + type: + - string + - "null" + created_at: + type: + - string + - "null" + updated_at: + type: string + candidate_id: + type: + - number + - "null" + gender: + type: + - object + - "null" + properties: + description: + type: + - string + - "null" + id: + type: + - number + - "null" + veteran_status: + type: + - object + - "null" + properties: + description: + type: + - string + - "null" + id: + type: + - number + - "null" + race: + type: + - object + - "null" + properties: + description: + type: + - string + - "null" + id: + type: + - number + - "null" + disability_status: + type: + - object + - "null" + properties: + description: + type: + - string + - "null" + id: + type: + - number + - "null" + required: + - id + - updated_at + additionalProperties: true + incremental_sync: + type: DatetimeBasedCursor + cursor_field: updated_at + is_data_feed: false + start_datetime: gt|2020-01-01T00:00:00.000Z + datetime_format: gt|%Y-%m-%dT%H:%M:%S.%fZ + cursor_datetime_formats: + - "%Y-%m-%dT%H:%M:%S.%fZ" + partition_field_end: "" + partition_field_start: "" + +spec: + type: Spec + documentation_url: https://harvestdocs.greenhouse.io/reference/generate-token + connection_specification: + type: object + $schema: http://json-schema.org/draft-07/schema# + required: + - client_id + - client_secret + properties: + client_id: + type: string + order: 0 + title: OAuth Client ID + airbyte_secret: true + client_secret: + type: string + order: 1 + title: OAuth Client Secret + airbyte_secret: true + additionalProperties: true + +metadata: + assist: + docsUrl: https://harvestdocs.greenhouse.io/reference/generate-token + testedStreams: + eeoc: + isStale: false + hasRecords: true + streamHash: bc6605d9d6caf70143a332dcf20620ede2f77a4e + hasResponse: true + primaryKeysAreUnique: true + primaryKeysArePresent: true + responsesAreSuccessful: true + jobs: + isStale: false + hasRecords: true + streamHash: 7daf993f53c8139747494a09e44a894aad2a0a01 + hasResponse: true + primaryKeysAreUnique: true + primaryKeysArePresent: true + responsesAreSuccessful: true + users: + isStale: false + hasRecords: true + streamHash: c0f2567e005528c55f183a3477c23e12feea3aa8 + hasResponse: true + primaryKeysAreUnique: true + primaryKeysArePresent: true + responsesAreSuccessful: true + offers: + isStale: false + hasRecords: true + streamHash: c66f5d0e44e05cdf27a690bc86fbfd39c1de5024 + hasResponse: true + primaryKeysAreUnique: true + primaryKeysArePresent: true + responsesAreSuccessful: true + offices: + isStale: false + hasRecords: true + streamHash: bd7660a0eb61e2f84291c8c939aaeab4a907d58c + hasResponse: true + primaryKeysAreUnique: true + primaryKeysArePresent: true + responsesAreSuccessful: true + sources: + isStale: false + hasRecords: true + streamHash: da709adc017cc7cbe83687d9708d180fd3f35ba3 + hasResponse: true + primaryKeysAreUnique: true + primaryKeysArePresent: true + responsesAreSuccessful: true + openings: + isStale: false + hasRecords: true + streamHash: 4816ed4e935b6458209f2c95a7ff00fc13461bca + hasResponse: true + primaryKeysAreUnique: true + primaryKeysArePresent: true + responsesAreSuccessful: true + job_posts: + isStale: false + hasRecords: true + streamHash: c6e4e651dd07a99a0181e74741f5d4deb061aee5 + hasResponse: true + primaryKeysAreUnique: true + primaryKeysArePresent: true + responsesAreSuccessful: true + candidates: + isStale: false + hasRecords: true + streamHash: 8f1c4fce34aaa947527ebf9dc518834bc2660b4b + hasResponse: true + primaryKeysAreUnique: true + primaryKeysArePresent: true + responsesAreSuccessful: true + interviews: + isStale: false + hasRecords: true + streamHash: d5ef1ae7ddf0a3de144e58daf3af3268336d2285 + hasResponse: true + primaryKeysAreUnique: true + primaryKeysArePresent: true + responsesAreSuccessful: true + scorecards: + isStale: false + hasRecords: true + streamHash: 5a4b89b4844ce566864396778ec1908278dc9ddf + hasResponse: true + primaryKeysAreUnique: true + primaryKeysArePresent: true + responsesAreSuccessful: true + user_roles: + isStale: false + hasRecords: true + streamHash: 86635bbce381894c40d4cd5700d0072d27d0f16d + hasResponse: true + primaryKeysAreUnique: true + primaryKeysArePresent: true + responsesAreSuccessful: true + departments: + isStale: false + hasRecords: true + streamHash: cb7f7da05bd5376109e6721d60860d26edf89752 + hasResponse: true + primaryKeysAreUnique: true + primaryKeysArePresent: true + responsesAreSuccessful: true + applications: + isStale: true + hasRecords: true + streamHash: 3b970458c47c0fd2dc1afa5bca038c8ebc15a22d + hasResponse: true + primaryKeysAreUnique: true + primaryKeysArePresent: true + responsesAreSuccessful: true + activity_feed: + isStale: false + hasRecords: false + streamHash: 1aa47580501295e82636a6909e9eb9198a0f8696 + hasResponse: true + primaryKeysAreUnique: true + primaryKeysArePresent: true + responsesAreSuccessful: false + close_reasons: + isStale: false + hasRecords: true + streamHash: d6e2176adf69003c1893d765cfe54c3bfae1769e + hasResponse: true + primaryKeysAreUnique: true + primaryKeysArePresent: true + responsesAreSuccessful: true + custom_fields: + isStale: false + hasRecords: true + streamHash: 1236cdcd4cffeaccfd37d821df0c54af9744bcad + hasResponse: true + primaryKeysAreUnique: true + primaryKeysArePresent: true + responsesAreSuccessful: true + approval_flows: + isStale: false + hasRecords: true + streamHash: b1b38d0276ec889e14cbcc4b0404321da095cfdb + hasResponse: true + primaryKeysAreUnique: true + primaryKeysArePresent: true + responsesAreSuccessful: true + candidate_tags: + isStale: false + hasRecords: true + streamHash: 0c088268473b9c9f85085da9bc35c29d009a3ef3 + hasResponse: true + primaryKeysAreUnique: true + primaryKeysArePresent: true + responsesAreSuccessful: true + prospect_pools: + isStale: false + hasRecords: true + streamHash: 3f7ce13966152d2ee0b9192326b9f8dd339adeeb + hasResponse: true + primaryKeysAreUnique: true + primaryKeysArePresent: true + responsesAreSuccessful: true + tracking_links: + isStale: false + hasRecords: true + streamHash: 1a21f424bdc0f01f03a10c19ed3b9100213263f1 + hasResponse: true + primaryKeysAreUnique: true + primaryKeysArePresent: true + responsesAreSuccessful: true + approver_groups: + isStale: false + hasRecords: true + streamHash: c24928ab675db49048cc16aad4bc84fccf53d85f + hasResponse: true + primaryKeysAreUnique: true + primaryKeysArePresent: true + responsesAreSuccessful: true + email_templates: + isStale: false + hasRecords: true + streamHash: d161ade2ff8510eb904d17710d128783c969fe46 + hasResponse: true + primaryKeysAreUnique: true + primaryKeysArePresent: true + responsesAreSuccessful: true + rejection_details: + isStale: false + hasRecords: true + streamHash: 201147772ffefc0a0793984d20859aab37a49fdb + hasResponse: true + primaryKeysAreUnique: true + primaryKeysArePresent: true + responsesAreSuccessful: true + rejection_reasons: + isStale: false + hasRecords: true + streamHash: 2fb9ca2f769348716ec2cc2a157891b65f17ee4d + hasResponse: true + primaryKeysAreUnique: true + primaryKeysArePresent: true + responsesAreSuccessful: true + scorecard_questions: + isStale: false + hasRecords: true + streamHash: 7a930590b7c7c7b9e38f613de6d18f2971536296 + hasResponse: true + primaryKeysAreUnique: true + primaryKeysArePresent: true + responsesAreSuccessful: true + candidate_educations: + isStale: false + hasRecords: true + streamHash: cc3d3e80fcc6c53440376185383d70767568a7bf + hasResponse: true + primaryKeysAreUnique: true + primaryKeysArePresent: true + responsesAreSuccessful: true + custom_field_options: + isStale: false + hasRecords: true + streamHash: 57c2d165f3baaacf016e3e7b14a0c90ddcd01899 + hasResponse: true + primaryKeysAreUnique: true + primaryKeysArePresent: true + responsesAreSuccessful: true + user_job_permissions: + isStale: false + hasRecords: true + streamHash: 6779e98b248306420b113bf65acaa74bf48572f6 + hasResponse: true + primaryKeysAreUnique: true + primaryKeysArePresent: true + responsesAreSuccessful: true + candidate_employments: + isStale: false + hasRecords: true + streamHash: c013e0794cf811462e09dcb7d486989f0f26c8e7 + hasResponse: true + primaryKeysAreUnique: true + primaryKeysArePresent: true + responsesAreSuccessful: true + future_job_permissions: + isStale: false + hasRecords: true + streamHash: 51695fad030c8163927571e84248e4ca35268257 + hasResponse: true + primaryKeysAreUnique: true + primaryKeysArePresent: true + responsesAreSuccessful: true + scorecard_question_answers: + isStale: false + hasRecords: true + streamHash: bb85af52ac6316a7bab4d15856636b12ec86bee3 + hasResponse: true + primaryKeysAreUnique: true + primaryKeysArePresent: true + responsesAreSuccessful: true + scorecard_candidate_attributes: + isStale: false + hasRecords: true + streamHash: 7248d0c481cc3fcd6488a6bc4553440ff1c2d5f1 + hasResponse: true + primaryKeysAreUnique: true + primaryKeysArePresent: true + responsesAreSuccessful: true + job_interview_stages: + isStale: false + hasRecords: true + streamHash: 31ffe36d36367239ac89a68104e97aeaf88e55f9 + hasResponse: true + primaryKeysAreUnique: true + primaryKeysArePresent: true + responsesAreSuccessful: true + autoImportSchema: + eeoc: true + jobs: true + users: true + offers: true + offices: true + sources: true + openings: true + job_posts: true + candidates: true + interviews: true + scorecards: true + user_roles: true + departments: true + applications: true + activity_feed: true + close_reasons: true + custom_fields: true + approval_flows: true + candidate_tags: true + prospect_pools: true + tracking_links: true + approver_groups: true + email_templates: true + rejection_details: true + rejection_reasons: true + scorecard_questions: true + candidate_educations: true + custom_field_options: true + user_job_permissions: true + candidate_employments: true + future_job_permissions: true + scorecard_question_answers: true + scorecard_candidate_attributes: true + job_interview_stages: true diff --git a/airbyte-integrations/connectors/source-greenhouse-harvest-v3/metadata.yaml b/airbyte-integrations/connectors/source-greenhouse-harvest-v3/metadata.yaml new file mode 100644 index 000000000000..5bb7b68701b3 --- /dev/null +++ b/airbyte-integrations/connectors/source-greenhouse-harvest-v3/metadata.yaml @@ -0,0 +1,34 @@ +metadataSpecVersion: "1.0" +data: + allowedHosts: + hosts: + registryOverrides: + oss: + enabled: true + cloud: + enabled: true + remoteRegistries: + pypi: + enabled: false + packageName: airbyte-source-greenhouse-harvest-v3 + connectorBuildOptions: + baseImage: docker.io/airbyte/source-declarative-manifest:7.23.7@sha256:c8318a72046a68ab48bd5bd57adb459d5a69dead827356f19c2ef78fbecfe0c9 + connectorSubtype: api + connectorType: source + definitionId: bed5b388-5dc2-4a5f-9888-793e811803c4 + dockerImageTag: 0.0.1 + dockerRepository: airbyte/source-greenhouse-harvest-v3 + githubIssueLabel: source-greenhouse-harvest-v3 + icon: icon.svg + license: ELv2 + name: Greenhouse Harvest V3 + releaseDate: 2026-07-22 + releaseStage: alpha + supportLevel: community + documentationUrl: https://docs.airbyte.com/integrations/sources/greenhouse-harvest-v3 + tags: + - language:manifest-only + - cdk:low-code + ab_internal: + ql: 100 + sl: 100 diff --git a/docs/integrations/sources/greenhouse-harvest-v3.md b/docs/integrations/sources/greenhouse-harvest-v3.md new file mode 100644 index 000000000000..d1a06f3ae974 --- /dev/null +++ b/docs/integrations/sources/greenhouse-harvest-v3.md @@ -0,0 +1,57 @@ +# Greenhouse Harvest V3 +Greenhouse v3 connection + +## Configuration + +| Input | Type | Description | Default Value | +|-------|------|-------------|---------------| +| `client_id` | `string` | OAuth Client ID. | | +| `client_secret` | `string` | OAuth Client Secret. | | + +## Streams +| Stream Name | Primary Key | Pagination | Supports Full Sync | Supports Incremental | +|-------------|-------------|------------|---------------------|----------------------| +| applications | id | DefaultPaginator | ✅ | ✅ | +| scorecards | id | DefaultPaginator | ✅ | ✅ | +| scorecard_question_answers | id | DefaultPaginator | ✅ | ✅ | +| scorecard_questions | id | DefaultPaginator | ✅ | ✅ | +| candidates | id | DefaultPaginator | ✅ | ✅ | +| candidate_educations | id | DefaultPaginator | ✅ | ✅ | +| candidate_employments | id | DefaultPaginator | ✅ | ✅ | +| candidate_tags | id | DefaultPaginator | ✅ | ✅ | +| jobs | id | DefaultPaginator | ✅ | ✅ | +| job_posts | id | DefaultPaginator | ✅ | ✅ | +| job_interview_stages | id | DefaultPaginator | ✅ | ✅ | +| openings | id | DefaultPaginator | ✅ | ✅ | +| offers | id | DefaultPaginator | ✅ | ✅ | +| prospect_pools | id | DefaultPaginator | ✅ | ✅ | +| interviews | id | DefaultPaginator | ✅ | ✅ | +| scorecard_candidate_attributes | id | DefaultPaginator | ✅ | ✅ | +| departments | id | DefaultPaginator | ✅ | ✅ | +| offices | id | DefaultPaginator | ✅ | ✅ | +| users | id | DefaultPaginator | ✅ | ✅ | +| user_job_permissions | id | DefaultPaginator | ✅ | ✅ | +| user_roles | id | DefaultPaginator | ✅ | ✅ | +| future_job_permissions | id | DefaultPaginator | ✅ | ✅ | +| approval_flows | id | DefaultPaginator | ✅ | ✅ | +| approver_groups | id | DefaultPaginator | ✅ | ✅ | +| close_reasons | id | DefaultPaginator | ✅ | ✅ | +| rejection_reasons | id | DefaultPaginator | ✅ | ✅ | +| rejection_details | id | DefaultPaginator | ✅ | ✅ | +| sources | id | DefaultPaginator | ✅ | ✅ | +| email_templates | id | DefaultPaginator | ✅ | ✅ | +| custom_fields | id | DefaultPaginator | ✅ | ✅ | +| custom_field_options | id | DefaultPaginator | ✅ | ✅ | +| tracking_links | id | DefaultPaginator | ✅ | ✅ | +| eeoc | id | DefaultPaginator | ✅ | ✅ | + +## Changelog + +
+ Expand to review + +| Version | Date | Pull Request | Subject | +|------------------|-------------------|--------------|----------------| +| 0.0.1 | 2026-07-22 | | Initial release by [@NumberPiOso](https://github.com/NumberPiOso) via Connector Builder | + +