openapi: 3.1.0 info: title: Kombo AI Apply Unified ATS API API version: 1.0.0 description: Endpoints for AI-powered job application features. servers: - url: https://api.kombo.dev/v1 description: Kombo EU API - url: https://api.us.kombo.dev/v1 description: Kombo US API security: - ApiKey: [] tags: - name: Unified ATS API description: Unified endpoints to access all the ATS concepts you might need. paths: /ats/applications: get: operationId: GetAtsApplications summary: Get applications description: 'Retrieve all applications. Visit our in-depth guides to learn more about: - 💡 [Being aware of which applications are tracked](/ats/features/implementation-guide/tracking-created-applications#be-aware-of-which-applications-are-tracked) - 🚦 [Hiring signals](/ats/features/implementation-guide/tracking-created-applications#hiring-signals) - 📈 [Application stage changes](/ats/features/implementation-guide/tracking-created-applications#application-stage-changes) - ❓ [ATS-specific limitations](/ats/features/implementation-guide/tracking-created-applications#ats-specific-limitations) Top level filters use AND, while individual filters use OR if they accept multiple arguments. That means filters will be resolved like this: `(id IN ids) AND (remote_id IN remote_ids)`' tags: - Unified ATS API parameters: - in: header name: X-Integration-Id schema: type: string description: ID of the integration you want to interact with. example: join:HWUTwvyx2wLoSUHphiWVrp28 required: true - name: cursor in: query required: false description: An optional cursor string used for pagination. This can be retrieved from the `next` property of the previous page response. schema: $ref: '#/components/schemas/GetAtsApplicationsParameterCursor' - name: page_size in: query required: false description: The number of results to return per page. Maximum is 250. schema: $ref: '#/components/schemas/GetAtsApplicationsParameterPageSize' - name: updated_after in: query required: false description: 'Filter the entries based on the modification date in format `YYYY-MM-DDTHH:mm:ss.sssZ`. Returns records where either the record itself **OR** its nested data has been updated since this timestamp, even if the record''s own `changed_at` field remains unchanged. If you want to track entry deletion, also set the `include_deleted=true` query parameter, because otherwise, deleted entries will be hidden. For more details, see [Understanding changed_at vs updated_after Behavior](https://docs.kombo.dev/ats/getting-started/fetching-data#understanding-changed_at-vs-updated_after-behavior). For this endpoint, `updated_after` matches when the returned record changed, or when related data changed as described below. | Path | Added/Removed | Linked Record | | --- | --- | --- | | `candidate` | n/a | ✓ Yes | | `candidate` → `tags` | ✗ No | ✗ No | | `current_stage` | n/a | ✓ Yes | | `job` | ✗ No | ✗ No | | `interviews` | ✓ Yes | ✓ Yes | | `offers` | ✓ Yes | ✓ Yes | _**Added/Removed**: Whether adding or removing entries from this list triggers an update (n/a for single records). **Linked Record**: Whether changes to the linked record itself trigger an update._' schema: $ref: '#/components/schemas/GetAtsApplicationsParameterUpdatedAfter' - name: include_deleted in: query required: false description: By default, deleted entries are not returned. Use the `include_deleted` query param to include deleted entries too. schema: $ref: '#/components/schemas/GetAtsApplicationsParameterIncludeDeleted' - name: ignore_unsupported_filters in: query required: false description: When set to `true`, filters targeting fields not supported by this integration will be ignored instead of filtering out all results. schema: $ref: '#/components/schemas/GetAtsApplicationsParameterIgnoreUnsupportedFilters' - name: ids in: query required: false description: Filter by a comma-separated list of IDs such as `222k7eCGyUdgt2JWZDNnkDs3,B5DVmypWENfU6eMe6gYDyJG3`. schema: $ref: '#/components/schemas/GetAtsApplicationsParameterIds' - name: remote_ids in: query required: false description: Filter by a comma-separated list of remote IDs. schema: $ref: '#/components/schemas/GetAtsApplicationsParameterRemoteIds' - name: outcome in: query required: false description: '**(⚠️ Deprecated - Use the `outcomes` filter instead.)** Filter applications by outcome. This allows you to get applications that are for example `PENDING`, `HIRED`, or `DECLINED`.' schema: $ref: '#/components/schemas/GetAtsApplicationsParameterOutcome' - name: outcomes in: query required: false description: "Filter by a comma-separated list of `PENDING`, `HIRED`, `DECLINED` \n* `PENDING`: The application is still being processed. \n* `HIRED`: The candidate was hired. \n* `DECLINED`: The candidate was declined. \n \n\nLeave this blank to get results matching all values." schema: $ref: '#/components/schemas/GetAtsApplicationsParameterOutcomes' - name: job_ids in: query required: false description: Filter by a comma-separated list of job IDs. We will only return applications that are related to _any_ of the jobs. schema: $ref: '#/components/schemas/GetAtsApplicationsParameterJobIds' - name: job_remote_ids in: query required: false description: Filter by a comma-separated list of job remote IDs. We will only return applications that are related to _any_ of the jobs. schema: $ref: '#/components/schemas/GetAtsApplicationsParameterJobRemoteIds' - name: current_stage_ids in: query required: false description: Filter by a comma-separated list of application stage IDs. We will only return applications that are currently in _any_ of the stages. schema: $ref: '#/components/schemas/GetAtsApplicationsParameterCurrentStageIds' - name: remote_created_after in: query required: false description: Filter applications by the day they were created in the remote system. This allows you to get applications that were created on or after a certain day. schema: $ref: '#/components/schemas/GetAtsApplicationsParameterRemoteCreatedAfter' responses: '200': description: GET /ats/applications Positive response content: application/json: schema: $ref: '#/components/schemas/GetAtsApplicationsPositiveResponse' examples: example1: value: status: success data: next: eyJwYWdlIjoxMiwibm90ZSI6InRoaXMgaXMganVzdCBhbiBleGFtcGxlIGFuZCBub3QgcmVwcmVzZW50YXRpdmUgZm9yIGEgcmVhbCBjdXJzb3IhIn0= results: - id: H77fDF8uvEzGNPRubiz5DvQ7 remote_id: '32' outcome: HIRED rejection_reason_name: null rejected_at: null current_stage_id: 5J7L4b48wBfffYwek9Az9pkM job_id: H5daSm8e85Dmvmne3wLeCPhX candidate_id: 26vafvWSRmbhNcxJYqjCzuJg screening_question_answers: - answer: choice: TypeScript question: remote_id: 48b4d36a-1d4b-4c50-ada7-9519078e65b4 title: Which is your primary programming language type: SINGLE_SELECT custom_fields: {} integration_fields: [] remote_url: https://app.greenhouse.io/applications/32 changed_at: '2022-08-07T14:01:29.196Z' remote_deleted_at: null remote_created_at: '2022-08-07T14:01:29.196Z' remote_updated_at: '2022-08-07T14:01:29.196Z' remote_data: null candidate: id: 26vafvWSRmbhNcxJYqjCzuJg remote_id: '32' first_name: John last_name: Doe email_addresses: - email_address: john.doe@example.com type: PRIVATE phone_numbers: - phone_number: +1-541-754-3010 type: HOME social_media: - link: https://www.youtube.com/watch?v=dQw4w9WgXcQ type: YOUTUBE username: null source: Employee Referral remote_url: https://app.greenhouse.io/people/32 tags: - id: 26vafvWSRmbhNcxJYqjCzuJg remote_id: '32' name: High Potential current_stage: id: 5J7L4b48wBfffYwek9Az9pkM remote_id: '32' name: Initial Screening index: 2 job: id: H5daSm8e85Dmvmne3wLeCPhX remote_id: '32' name: Backend Engineer interviews: - id: 26vafvWSRmbhNcxJYqjCzuJg remote_id: '32' title: Interview with John Doe starting_at: '2023-06-26T14:30:00.000Z' ending_at: '2023-06-26T15:30:00.000Z' location: city: Berlin country: DE raw: Berlin, Germany state: Berlin street_1: Lohmühlenstraße 65 street_2: null zip_code: '12435' canceled: false offers: - id: 76bab8LKuFtqpZ89mofCPMHX remote_id: '6' status: ACCEPTED default: $ref: '#/components/responses/ErrorResponseATS' /ats/applications/{application_id}/stage: put: operationId: PutAtsApplicationsApplicationIdStage summary: Move application to stage description: "Moves an application to a specified stage. Use job-specific stages from GET /jobs, not the deprecated /application-stages endpoint.\n\n\n This endpoint requires the permission **Set application stage** to be enabled in [your scope config](/scopes).\n\n\n### Example Request Body\n\n```json\n{\n \"stage_id\": \"3PJ8PZhZZa1eEdd2DtPNtVup\",\n \"remote_fields\": {}\n}\n```" tags: - Unified ATS API parameters: - in: header name: X-Integration-Id schema: type: string description: ID of the integration you want to interact with. example: join:HWUTwvyx2wLoSUHphiWVrp28 required: true - name: application_id in: path required: true description: The Kombo ID of the application you want to move to a different stage. schema: $ref: '#/components/schemas/PutAtsApplicationsApplicationIdStageParameterApplicationId' examples: example1: value: GRKdd9dibYKKCrmGRSMJf3wu requestBody: description: PUT /ats/applications/:application_id/stage Request body content: application/json: schema: $ref: '#/components/schemas/PutAtsApplicationsApplicationIdStageRequestBody' examples: example1: value: stage_id: 3PJ8PZhZZa1eEdd2DtPNtVup responses: '200': description: PUT /ats/applications/:application_id/stage Positive response content: application/json: schema: $ref: '#/components/schemas/PutAtsApplicationsApplicationIdStagePositiveResponse' examples: example1: value: status: success data: {} warnings: - message: This is an example warning! default: $ref: '#/components/responses/ErrorResponseATS' /ats/applications/{application_id}/result-links: post: operationId: PostAtsApplicationsApplicationIdResultLinks summary: Add result link to application description: "Add a result link to an application.\n\nThis can, for example, be used to link a candidate back to a test result/assessment in your application. As not all ATS tools have a \"result link\" feature, we sometimes repurpose other fields to expose it.\n\n\n This endpoint requires the permission **Add result links** to be enabled in [your scope config](/scopes).\n\n\n### Example Request Body\n\n```json\n{\n \"application_id\": \"8Xi6iZrwusZqJmDGXs49GBmJ\",\n \"label\": \"Assessment Result\",\n \"url\": \"https://example.com/test-results/5BtP1WC1UboS7CF3yxjKcvjG\",\n \"details\": {\n \"custom_field_name_prefix\": \"Acme:\",\n \"attributes\": [\n {\n \"key\": \"Score\",\n \"value\": \"100%\"\n },\n {\n \"key\": \"Time\",\n \"value\": \"2:30h\"\n }\n ]\n },\n \"remote_fields\": {}\n}\n```" tags: - Unified ATS API parameters: - in: header name: X-Integration-Id schema: type: string description: ID of the integration you want to interact with. example: join:HWUTwvyx2wLoSUHphiWVrp28 required: true - name: application_id in: path required: true description: The Kombo ID of the application you want to create the link for. schema: $ref: '#/components/schemas/PostAtsApplicationsApplicationIdResultLinksParameterApplicationId' examples: example1: value: 8Xi6iZrwusZqJmDGXs49GBmJ requestBody: description: POST /ats/applications/:application_id/result-links Request body content: application/json: schema: $ref: '#/components/schemas/PostAtsApplicationsApplicationIdResultLinksRequestBody' examples: example1: value: label: Assessment Result url: https://example.com/test-results/5BtP1WC1UboS7CF3yxjKcvjG details: custom_field_name_prefix: 'Acme:' attributes: - key: Score value: 100% - key: Time value: 2:30h responses: '200': description: POST /ats/applications/:application_id/result-links Positive response content: application/json: schema: $ref: '#/components/schemas/PostAtsApplicationsApplicationIdResultLinksPositiveResponse' examples: example1: value: status: success data: {} warnings: - message: This is an example warning! default: $ref: '#/components/responses/ErrorResponseATS' /ats/applications/{application_id}/notes: post: operationId: PostAtsApplicationsApplicationIdNotes summary: Add note to application description: "Add a note to an application.\n\nAdd extra information to an application. This can be any extra text information you want to add to an application.\n\n\n This endpoint requires the permission **Add notes** to be enabled in [your scope config](/scopes).\n\n\n### Example Request Body\n\n```json\n{\n \"content\": \"A new message from the candidate is available in YourChat!\",\n \"content_type\": \"PLAIN_TEXT\",\n \"remote_fields\": {}\n}\n```" tags: - Unified ATS API parameters: - in: header name: X-Integration-Id schema: type: string description: ID of the integration you want to interact with. example: join:HWUTwvyx2wLoSUHphiWVrp28 required: true - name: application_id in: path required: true description: The Kombo ID of the application you want to create the note for. schema: $ref: '#/components/schemas/PostAtsApplicationsApplicationIdNotesParameterApplicationId' examples: example1: value: 8Xi6iZrwusZqJmDGXs49GBmJ requestBody: description: POST /ats/applications/:application_id/notes Request body content: application/json: schema: $ref: '#/components/schemas/PostAtsApplicationsApplicationIdNotesRequestBody' examples: example1: value: content: A new message from the candidate is available in YourChat! content_type: PLAIN_TEXT responses: '200': description: POST /ats/applications/:application_id/notes Positive response content: application/json: schema: $ref: '#/components/schemas/PostAtsApplicationsApplicationIdNotesPositiveResponse' examples: example1: value: status: success data: {} warnings: - message: This is an example warning! default: $ref: '#/components/responses/ErrorResponseATS' /ats/applications/{application_id}/attachments: get: operationId: GetAtsApplicationsApplicationIdAttachments summary: Get application attachments description: "Get attachments from a candidate or application.\n\nGet attachments from an application. If the ATS stores the attachments on the candidate, it will get the attachments from the corresponding candidate instead.\n\n\n This endpoint requires the permission **Read document attachments** to be enabled in [your scope config](/scopes).\n" tags: - Unified ATS API parameters: - in: header name: X-Integration-Id schema: type: string description: ID of the integration you want to interact with. example: join:HWUTwvyx2wLoSUHphiWVrp28 required: true - name: application_id in: path required: true description: The Kombo ID of the application you want to obtain attachments for. schema: $ref: '#/components/schemas/GetAtsApplicationsApplicationIdAttachmentsParameterApplicationId' examples: example1: value: 8Xi6iZrwusZqJmDGXs49GBmJ responses: '200': description: GET /ats/applications/:application_id/attachments Positive response content: application/json: schema: $ref: '#/components/schemas/GetAtsApplicationsApplicationIdAttachmentsPositiveResponse' examples: example1: value: status: success data: results: - type: CV id: EYJjhMQT3LtVKXnTbnRT8s6U remote_id: GUzE666zfyjeoCJX6A8n7wh6 data_url: https://resources.kombo.dev/7yZfKGzWigXxxRTygqAfHvyE file_name: Frank Doe CV.pdf content_type: application/x-pdf remote_created_at: null remote_updated_at: null warnings: - message: This is an example warning! default: $ref: '#/components/responses/ErrorResponseATS' post: operationId: PostAtsApplicationsApplicationIdAttachments summary: Add attachment to application description: "Uploads an attachment file for the specified applicant.\n\n\n If adding an attachment to an application is not supported by the integration, the attachment will be [added to the candidate](/ats/v1/post-candidates-candidate-id-attachments) instead. \n\n\n\n This endpoint requires the permission **Add attachments** to be enabled in [your scope config](/scopes).\n\n\n### Example Request Body\n\n```json\n{\n \"application_id\": \"GRKdd9dibYKKCrmGRSMJf3wu\",\n \"attachment\": {\n \"name\": \"Frank Doe CV.txt\",\n \"data\": \"SGkgdGhlcmUsIEtvbWJvIGlzIGN1cnJlbnRseSBoaXJpbmcgZW5naW5lZXJzIHRoYXQgbG92ZSB0byB3b3JrIG9uIGRldmVsb3BlciBwcm9kdWN0cy4=\",\n \"type\": \"CV\",\n \"content_type\": \"text/plain\"\n },\n \"remote_fields\": {}\n}\n```" tags: - Unified ATS API parameters: - in: header name: X-Integration-Id schema: type: string description: ID of the integration you want to interact with. example: join:HWUTwvyx2wLoSUHphiWVrp28 required: true - name: application_id in: path required: true description: POST /ats/applications/:application_id/attachments Parameter schema: $ref: '#/components/schemas/PostAtsApplicationsApplicationIdAttachmentsParameterApplicationId' examples: example1: value: GRKdd9dibYKKCrmGRSMJf3wu requestBody: description: POST /ats/applications/:application_id/attachments Request body content: application/json: schema: $ref: '#/components/schemas/PostAtsApplicationsApplicationIdAttachmentsRequestBody' examples: example1: value: attachment: name: Frank Doe CV.txt data: SGkgdGhlcmUsIEtvbWJvIGlzIGN1cnJlbnRseSBoaXJpbmcgZW5naW5lZXJzIHRoYXQgbG92ZSB0byB3b3JrIG9uIGRldmVsb3BlciBwcm9kdWN0cy4= type: CV content_type: text/plain responses: '200': description: POST /ats/applications/:application_id/attachments Positive response content: application/json: schema: $ref: '#/components/schemas/PostAtsApplicationsApplicationIdAttachmentsPositiveResponse' examples: example1: value: status: success data: {} warnings: - message: This is an example warning! default: $ref: '#/components/responses/ErrorResponseATS' /ats/applications/{application_id}/reject: post: operationId: PostAtsApplicationsApplicationIdReject summary: Reject application description: "Rejects an application with a provided reason.\n\nRejects an application with a provided reason. Optionally, you can provide a free text note. You can get the list of rejection reasons with our [Get rejection reasons endpoint](/ats/v1/get-rejection-reasons).\n\n\n This endpoint requires the permission **Reject applications** to be enabled in [your scope config](/scopes).\n\n\n### Example Request Body\n\n```json\n{\n \"rejection_reason_id\": \"3PJ8PZhZZa1eEdd2DtPNtVup\",\n \"note\": \"Candidate was a great culture fit but didn't bring the hard skills we need.\",\n \"remote_fields\": {}\n}\n```" tags: - Unified ATS API parameters: - in: header name: X-Integration-Id schema: type: string description: ID of the integration you want to interact with. example: join:HWUTwvyx2wLoSUHphiWVrp28 required: true - name: application_id in: path required: true description: The Kombo ID of the application you want to reject. schema: $ref: '#/components/schemas/PostAtsApplicationsApplicationIdRejectParameterApplicationId' examples: example1: value: GRKdd9dibYKKCrmGRSMJf3wu requestBody: description: POST /ats/applications/:application_id/reject Request body content: application/json: schema: $ref: '#/components/schemas/PostAtsApplicationsApplicationIdRejectRequestBody' examples: example1: value: rejection_reason_id: 3PJ8PZhZZa1eEdd2DtPNtVup note: Candidate was a great culture fit but didn't bring the hard skills we need. responses: '200': description: POST /ats/applications/:application_id/reject Positive response content: application/json: schema: $ref: '#/components/schemas/PostAtsApplicationsApplicationIdRejectPositiveResponse' examples: example1: value: status: success data: {} warnings: - message: This is an example warning! default: $ref: '#/components/responses/ErrorResponseATS' /ats/applications/{application_id}/interviews: post: operationId: PostAtsApplicationsApplicationIdInterviews summary: Create interview description: 'Create interview **Closed Beta Feature:** This endpoint is currently in closed beta. We''re testing it with selected customers before its public release. If you''re interested in learning more or getting early access, please reach out. ' tags: - Unified ATS API parameters: - in: header name: X-Integration-Id schema: type: string description: ID of the integration you want to interact with. example: join:HWUTwvyx2wLoSUHphiWVrp28 required: true - name: application_id in: path required: true description: The ID of the application schema: $ref: '#/components/schemas/PostAtsApplicationsApplicationIdInterviewsParameterApplicationId' requestBody: description: POST /ats/applications/:application_id/interviews Request body content: application/json: schema: $ref: '#/components/schemas/PostAtsApplicationsApplicationIdInterviewsRequestBody' responses: '200': description: POST /ats/applications/:application_id/interviews Positive response content: application/json: schema: $ref: '#/components/schemas/PostAtsApplicationsApplicationIdInterviewsPositiveResponse' default: $ref: '#/components/responses/ErrorResponseATS' patch: operationId: PatchAtsApplicationsApplicationIdInterviews summary: Update interview description: 'Update interview **Closed Beta Feature:** This endpoint is currently in closed beta. We''re testing it with selected customers before its public release. If you''re interested in learning more or getting early access, please reach out. ' tags: - Unified ATS API parameters: - in: header name: X-Integration-Id schema: type: string description: ID of the integration you want to interact with. example: join:HWUTwvyx2wLoSUHphiWVrp28 required: true - name: application_id in: path required: true description: The ID of the application schema: $ref: '#/components/schemas/PatchAtsApplicationsApplicationIdInterviewsParameterApplicationId' requestBody: description: PATCH /ats/applications/:application_id/interviews Request body content: application/json: schema: $ref: '#/components/schemas/PatchAtsApplicationsApplicationIdInterviewsRequestBody' responses: '200': description: PATCH /ats/applications/:application_id/interviews Positive response content: application/json: schema: $ref: '#/components/schemas/PatchAtsApplicationsApplicationIdInterviewsPositiveResponse' default: $ref: '#/components/responses/ErrorResponseATS' /ats/candidates: get: operationId: GetAtsCandidates summary: Get candidates description: 'Retrieve all candidates. Top level filters use AND, while individual filters use OR if they accept multiple arguments. That means filters will be resolved like this: `(id IN ids) AND (remote_id IN remote_ids)`' tags: - Unified ATS API parameters: - in: header name: X-Integration-Id schema: type: string description: ID of the integration you want to interact with. example: join:HWUTwvyx2wLoSUHphiWVrp28 required: true - name: cursor in: query required: false description: An optional cursor string used for pagination. This can be retrieved from the `next` property of the previous page response. schema: $ref: '#/components/schemas/GetAtsCandidatesParameterCursor' - name: page_size in: query required: false description: The number of results to return per page. Maximum is 250. schema: $ref: '#/components/schemas/GetAtsCandidatesParameterPageSize' - name: updated_after in: query required: false description: 'Filter the entries based on the modification date in format `YYYY-MM-DDTHH:mm:ss.sssZ`. Returns records where either the record itself **OR** its nested data has been updated since this timestamp, even if the record''s own `changed_at` field remains unchanged. If you want to track entry deletion, also set the `include_deleted=true` query parameter, because otherwise, deleted entries will be hidden. For more details, see [Understanding changed_at vs updated_after Behavior](https://docs.kombo.dev/ats/getting-started/fetching-data#understanding-changed_at-vs-updated_after-behavior). For this endpoint, `updated_after` matches when the returned record changed, or when related data changed as described below. | Path | Added/Removed | Linked Record | | --- | --- | --- | | `applications` | ✓ Yes | ✓ Yes | | `applications` → `current_stage` | ✗ No | ✗ No | | `applications` → `job` | ✗ No | ✗ No | | `tags` | ✓ Yes | ✗ No | _**Added/Removed**: Whether adding or removing entries from this list triggers an update (n/a for single records). **Linked Record**: Whether changes to the linked record itself trigger an update._' schema: $ref: '#/components/schemas/GetAtsCandidatesParameterUpdatedAfter' - name: include_deleted in: query required: false description: By default, deleted entries are not returned. Use the `include_deleted` query param to include deleted entries too. schema: $ref: '#/components/schemas/GetAtsCandidatesParameterIncludeDeleted' - name: ignore_unsupported_filters in: query required: false description: When set to `true`, filters targeting fields not supported by this integration will be ignored instead of filtering out all results. schema: $ref: '#/components/schemas/GetAtsCandidatesParameterIgnoreUnsupportedFilters' - name: ids in: query required: false description: Filter by a comma-separated list of IDs such as `222k7eCGyUdgt2JWZDNnkDs3,B5DVmypWENfU6eMe6gYDyJG3`. schema: $ref: '#/components/schemas/GetAtsCandidatesParameterIds' - name: remote_ids in: query required: false description: Filter by a comma-separated list of remote IDs. schema: $ref: '#/components/schemas/GetAtsCandidatesParameterRemoteIds' - name: email in: query required: false description: Filter the candidates based on an email address. When set, returns only the candidates where the given `email` is in `email_addresses`. This filter is case-insensitive. schema: $ref: '#/components/schemas/GetAtsCandidatesParameterEmail' - name: job_ids in: query required: false description: Filter by a comma-separated list of job IDs. We will only return candidates that have applied to _any_ of the jobs. schema: $ref: '#/components/schemas/GetAtsCandidatesParameterJobIds' - name: first_name in: query required: false description: Filter candidates by first name. This filter is case-insensitive and matches the exact first name. Fuzzy matching might be enabled in the future, so consider this for your implementation. schema: $ref: '#/components/schemas/GetAtsCandidatesParameterFirstName' - name: last_name in: query required: false description: Filter candidates by last name. This filter is case-insensitive and matches the exact last name. Fuzzy matching might be enabled in the future, so consider this for your implementation. schema: $ref: '#/components/schemas/GetAtsCandidatesParameterLastName' responses: '200': description: GET /ats/candidates Positive response content: application/json: schema: $ref: '#/components/schemas/GetAtsCandidatesPositiveResponse' examples: example1: value: status: success data: next: eyJwYWdlIjoxMiwibm90ZSI6InRoaXMgaXMganVzdCBhbiBleGFtcGxlIGFuZCBub3QgcmVwcmVzZW50YXRpdmUgZm9yIGEgcmVhbCBjdXJzb3IhIn0= results: - id: 26vafvWSRmbhNcxJYqjCzuJg remote_id: '32' first_name: John last_name: Doe company: Acme, Inc. title: Head of Marketing confidential: false source: Employee Referral phone_numbers: - phone_number: +1-541-754-3010 type: HOME email_addresses: - email_address: john.doe@example.com type: PRIVATE social_media: - link: https://www.youtube.com/watch?v=dQw4w9WgXcQ type: YOUTUBE username: null location: city: Berlin country: DE raw: Berlin, Germany state: Berlin street_1: Lohmühlenstraße 65 street_2: null zip_code: '12435' custom_fields: {} integration_fields: [] remote_url: https://app.greenhouse.io/people/32 remote_created_at: '2022-04-02T00:00:00.000Z' remote_updated_at: '2022-04-04T00:00:00.000Z' remote_data: null changed_at: '2022-04-04T00:00:00.000Z' remote_deleted_at: null applications: - id: H77fDF8uvEzGNPRubiz5DvQ7 remote_id: '32' outcome: HIRED rejection_reason_name: null rejected_at: null remote_url: https://app.greenhouse.io/applications/32 changed_at: '2022-08-07T14:01:29.196Z' remote_created_at: '2022-08-07T14:01:29.196Z' remote_updated_at: '2022-08-07T14:01:29.196Z' current_stage: id: 5J7L4b48wBfffYwek9Az9pkM name: Initial Screening remote_id: '32' index: 2 job: id: H5daSm8e85Dmvmne3wLeCPhX name: Backend Engineer remote_id: '32' tags: - id: 26vafvWSRmbhNcxJYqjCzuJg name: High Potential remote_id: '32' default: $ref: '#/components/responses/ErrorResponseATS' post: operationId: PostAtsCandidates summary: Create candidate description: "Create a new candidate and application for the specified job.\n\n\n **We recommend using the [Create application](/ats/v1/post-jobs-job-id-applications) endpoint instead.**\n\n We realized that in practice it was always more about creating _applications_ instead of _candidates_, so we created a new, more aptly named one that you should use instead: [Create application](/ats/v1/post-jobs-job-id-applications)\n\n Using it also has the benefit that we return the newly created applicant at the root level, so you can easily store its ID.\n \n\n\n This endpoint requires the permission **Create applications and candidates** to be enabled in [your scope config](/scopes).\n\n\n### Example Request Body\n\n```json\n{\n \"candidate\": {\n \"first_name\": \"Frank\",\n \"last_name\": \"Doe\",\n \"company\": \"Acme Inc.\",\n \"title\": \"Head of Integrations\",\n \"email_address\": \"frank.doe@example.com\",\n \"phone_number\": \"+1-541-754-3010\",\n \"gender\": \"MALE\",\n \"salary_expectations\": {\n \"amount\": 100000,\n \"period\": \"YEAR\"\n },\n \"availability_date\": \"2021-01-01\",\n \"location\": {\n \"city\": \"New York\",\n \"country\": \"US\",\n \"state\": \"NY\"\n },\n \"social_links\": [\n {\n \"url\": \"https://www.linkedin.com/in/frank-doe-123456789/\"\n },\n {\n \"url\": \"https://twitter.com/frankdoe\"\n }\n ]\n },\n \"application\": {\n \"job_id\": \"BDpgnpZ148nrGh4mYHNxJBgx\",\n \"stage_id\": \"8x3YKRDcuRnwShdh96ShBNn1\"\n },\n \"attachments\": [\n {\n \"name\": \"Frank Doe CV.txt\",\n \"data\": \"SGkgdGhlcmUsIEtvbWJvIGlzIGN1cnJlbnRseSBoaXJpbmcgZW5naW5lZXJzIHRoYXQgbG92ZSB0byB3b3JrIG9uIGRldmVsb3BlciBwcm9kdWN0cy4=\",\n \"type\": \"CV\",\n \"content_type\": \"text/plain\"\n }\n ],\n \"screening_question_answers\": [\n {\n \"question_id\": \"3phFBNXRweGnDmsU9o2vdPuQ\",\n \"answer\": \"Yes\"\n },\n {\n \"question_id\": \"EYJjhMQT3LtVKXnTbnRT8s6U\",\n \"answer\": [\n \"GUzE666zfyjeoCJX6A8n7wh6\",\n \"5WPHzzKAv8cx97KtHRUV96U8\",\n \"7yZfKGzWigXxxRTygqAfHvyE\"\n ]\n }\n ],\n \"remote_fields\": {}\n}\n```" tags: - Unified ATS API parameters: - in: header name: X-Integration-Id schema: type: string description: ID of the integration you want to interact with. example: join:HWUTwvyx2wLoSUHphiWVrp28 required: true requestBody: description: POST /ats/candidates Request body content: application/json: schema: $ref: '#/components/schemas/PostAtsCandidatesRequestBody' examples: example1: value: candidate: first_name: Frank last_name: Doe company: Acme Inc. title: Head of Integrations email_address: frank.doe@example.com phone_number: +1-541-754-3010 gender: MALE salary_expectations: amount: 100000 period: YEAR availability_date: '2021-01-01' location: city: New York country: US state: NY social_links: - url: https://www.linkedin.com/in/frank-doe-123456789/ - url: https://twitter.com/frankdoe application: job_id: BDpgnpZ148nrGh4mYHNxJBgx stage_id: 8x3YKRDcuRnwShdh96ShBNn1 attachments: - name: Frank Doe CV.txt data: SGkgdGhlcmUsIEtvbWJvIGlzIGN1cnJlbnRseSBoaXJpbmcgZW5naW5lZXJzIHRoYXQgbG92ZSB0byB3b3JrIG9uIGRldmVsb3BlciBwcm9kdWN0cy4= type: CV content_type: text/plain screening_question_answers: - question_id: 3phFBNXRweGnDmsU9o2vdPuQ answer: 'Yes' - question_id: EYJjhMQT3LtVKXnTbnRT8s6U answer: - GUzE666zfyjeoCJX6A8n7wh6 - 5WPHzzKAv8cx97KtHRUV96U8 - 7yZfKGzWigXxxRTygqAfHvyE responses: '200': description: POST /ats/candidates Positive response content: application/json: schema: $ref: '#/components/schemas/PostAtsCandidatesPositiveResponse' examples: example1: value: status: success data: id: 26vafvWSRmbhNcxJYqjCzuJg remote_id: '32' first_name: John last_name: Doe company: Acme, Inc. title: Head of Marketing confidential: false source: Employee Referral phone_numbers: - phone_number: +1-541-754-3010 type: HOME email_addresses: - email_address: john.doe@example.com type: PRIVATE social_media: - link: https://www.youtube.com/watch?v=dQw4w9WgXcQ type: YOUTUBE username: null location: city: Berlin country: DE raw: Berlin, Germany state: Berlin street_1: Lohmühlenstraße 65 street_2: null zip_code: '12435' custom_fields: {} integration_fields: [] remote_url: https://app.greenhouse.io/people/32 remote_created_at: '2022-04-02T00:00:00.000Z' remote_updated_at: '2022-04-04T00:00:00.000Z' remote_data: null changed_at: '2022-04-04T00:00:00.000Z' remote_deleted_at: null applications: - id: H77fDF8uvEzGNPRubiz5DvQ7 remote_id: '32' outcome: HIRED rejection_reason_name: null rejected_at: null remote_url: https://app.greenhouse.io/applications/32 changed_at: '2022-04-04T00:00:00.000Z' remote_created_at: '2022-04-02T00:00:00.000Z' remote_updated_at: '2022-04-04T00:00:00.000Z' current_stage: id: 5J7L4b48wBfffYwek9Az9pkM name: Initial Screening remote_id: '32' index: 2 job: id: H5daSm8e85Dmvmne3wLeCPhX name: Backend Engineer remote_id: '32' tags: - id: 26vafvWSRmbhNcxJYqjCzuJg name: High Potential remote_id: '32' warnings: - message: This is an example warning! default: $ref: '#/components/responses/ErrorResponseATS' /ats/candidates/{candidate_id}/attachments: get: operationId: GetAtsCandidatesCandidateIdAttachments summary: Get candidate attachments description: "Get attachments from a candidate, including all attachments of all of their applications.\n\n\n This endpoint requires the permission **Read document attachments** to be enabled in [your scope config](/scopes).\n" tags: - Unified ATS API parameters: - in: header name: X-Integration-Id schema: type: string description: ID of the integration you want to interact with. example: join:HWUTwvyx2wLoSUHphiWVrp28 required: true - name: candidate_id in: path required: true description: The Kombo ID of the candidate you want to obtain attachments for. schema: $ref: '#/components/schemas/GetAtsCandidatesCandidateIdAttachmentsParameterCandidateId' examples: example1: value: 8Xi6iZrwusZqJmDGXs49GBmJ responses: '200': description: GET /ats/candidates/:candidate_id/attachments Positive response content: application/json: schema: $ref: '#/components/schemas/GetAtsCandidatesCandidateIdAttachmentsPositiveResponse' examples: example1: value: status: success data: results: - id: EYJjhMQT3LtVKXnTbnRT8s6U application_id: null candidate_id: BTbkvY2w5ou3z3hdwuKcKzDh type: CV remote_id: GUzE666zfyjeoCJX6A8n7wh6 data_url: https://resources.kombo.dev/EYJjhMQT3LtVKXnTbnRT8s6U file_name: Frank Doe CV.pdf content_type: application/pdf remote_created_at: null remote_updated_at: null warnings: - message: This is an example warning! default: $ref: '#/components/responses/ErrorResponseATS' post: operationId: PostAtsCandidatesCandidateIdAttachments summary: Add attachment to candidate description: "Uploads an attachment file for the specified candidate.\n\n\n **We recommend using the [add attachment to application](/ats/v1/post-applications-application-id-attachments) endpoint instead.**\n\n We realized that in practice it was always more about adding attachments to _applications_ instead of _candidates_, so we created a new, more aptly named one that you should use instead: [add attachment to application](/ats/v1/post-applications-application-id-attachments)\n \n\n\n This endpoint requires the permission **Add attachments** to be enabled in [your scope config](/scopes).\n\n\n### Example Request Body\n\n```json\n{\n \"candidate_id\": \"GRKdd9dibYKKCrmGRSMJf3wu\",\n \"attachment\": {\n \"name\": \"Frank Doe CV.txt\",\n \"data\": \"SGkgdGhlcmUsIEtvbWJvIGlzIGN1cnJlbnRseSBoaXJpbmcgZW5naW5lZXJzIHRoYXQgbG92ZSB0byB3b3JrIG9uIGRldmVsb3BlciBwcm9kdWN0cy4=\",\n \"type\": \"CV\",\n \"content_type\": \"text/plain\"\n }\n}\n```" tags: - Unified ATS API parameters: - in: header name: X-Integration-Id schema: type: string description: ID of the integration you want to interact with. example: join:HWUTwvyx2wLoSUHphiWVrp28 required: true - name: candidate_id in: path required: true description: The Kombo ID of the candidate you want to add the attachment to. schema: $ref: '#/components/schemas/PostAtsCandidatesCandidateIdAttachmentsParameterCandidateId' examples: example1: value: GRKdd9dibYKKCrmGRSMJf3wu requestBody: description: POST /ats/candidates/:candidate_id/attachments Request body content: application/json: schema: $ref: '#/components/schemas/PostAtsCandidatesCandidateIdAttachmentsRequestBody' examples: example1: value: attachment: name: Frank Doe CV.txt data: SGkgdGhlcmUsIEtvbWJvIGlzIGN1cnJlbnRseSBoaXJpbmcgZW5naW5lZXJzIHRoYXQgbG92ZSB0byB3b3JrIG9uIGRldmVsb3BlciBwcm9kdWN0cy4= type: CV content_type: text/plain responses: '200': description: POST /ats/candidates/:candidate_id/attachments Positive response content: application/json: schema: $ref: '#/components/schemas/PostAtsCandidatesCandidateIdAttachmentsPositiveResponse' default: $ref: '#/components/responses/ErrorResponseATS' /ats/candidates/{candidate_id}/result-links: post: operationId: PostAtsCandidatesCandidateIdResultLinks summary: Add result link to candidate description: "Add a result link to a candidate.\n\n\n **We recommend to use [add result link to application](/ats/v1/post-applications-application-id-result-links) instead.**\n\n This can, for example, be used to link a candidate back to a test result/assessment in your application. As not all ATS tools have a \"result link\" feature, we sometimes repurpose other fields to expose it.\n\n \n \n\n\n This endpoint requires the permission **Add result links** to be enabled in [your scope config](/scopes).\n\n\n### Example Request Body\n\n```json\n{\n \"label\": \"Assessment Result\",\n \"url\": \"https://example.com/test-results/5BtP1WC1UboS7CF3yxjKcvjG\",\n \"details\": {\n \"custom_field_name_prefix\": \"Acme:\",\n \"attributes\": [\n {\n \"key\": \"Score\",\n \"value\": \"100%\"\n },\n {\n \"key\": \"Time\",\n \"value\": \"2:30h\"\n }\n ]\n },\n \"remote_fields\": {}\n}\n```" tags: - Unified ATS API parameters: - in: header name: X-Integration-Id schema: type: string description: ID of the integration you want to interact with. example: join:HWUTwvyx2wLoSUHphiWVrp28 required: true - name: candidate_id in: path required: true description: The Kombo ID of the candidate you want to add the result link to. schema: $ref: '#/components/schemas/PostAtsCandidatesCandidateIdResultLinksParameterCandidateId' examples: example1: value: 8Xi6iZrwusZqJmDGXs49GBmJ requestBody: description: POST /ats/candidates/:candidate_id/result-links Request body content: application/json: schema: $ref: '#/components/schemas/PostAtsCandidatesCandidateIdResultLinksRequestBody' examples: example1: value: label: Assessment Result url: https://example.com/test-results/5BtP1WC1UboS7CF3yxjKcvjG details: custom_field_name_prefix: 'Acme:' attributes: - key: Score value: 100% - key: Time value: 2:30h responses: '200': description: POST /ats/candidates/:candidate_id/result-links Positive response content: application/json: schema: $ref: '#/components/schemas/PostAtsCandidatesCandidateIdResultLinksPositiveResponse' default: $ref: '#/components/responses/ErrorResponseATS' /ats/candidates/{candidate_id}/tags: post: operationId: PostAtsCandidatesCandidateIdTags summary: Add tag to candidate description: "Add a tag to a candidate.\n\nKombo takes care of creating the tag if required, finding out the right ID, and appending it to the list of tags.\n\n\n This endpoint requires the permission **Manage tags** to be enabled in [your scope config](/scopes).\n\n\n### Example Request Body\n\n```json\n{\n \"tag\": {\n \"name\": \"Excellent Fit\"\n }\n}\n```" tags: - Unified ATS API parameters: - in: header name: X-Integration-Id schema: type: string description: ID of the integration you want to interact with. example: join:HWUTwvyx2wLoSUHphiWVrp28 required: true - name: candidate_id in: path required: true description: The Kombo ID of the candidate you want to add the tag to. schema: $ref: '#/components/schemas/PostAtsCandidatesCandidateIdTagsParameterCandidateId' examples: example1: value: 8Xi6iZrwusZqJmDGXs49GBmJ requestBody: description: POST /ats/candidates/:candidate_id/tags Request body content: application/json: schema: $ref: '#/components/schemas/PostAtsCandidatesCandidateIdTagsRequestBody' examples: example1: value: tag: name: Excellent Fit responses: '200': description: POST /ats/candidates/:candidate_id/tags Positive response content: application/json: schema: $ref: '#/components/schemas/PostAtsCandidatesCandidateIdTagsPositiveResponse' examples: example1: value: status: success data: {} warnings: - message: This is an example warning! default: $ref: '#/components/responses/ErrorResponseATS' delete: operationId: DeleteAtsCandidatesCandidateIdTags summary: Remove tag from candidate description: "Remove a tag from a candidate based on its name.\n\nThis will also succeed if the tag does not exist on the candidate.\n\n\n This endpoint requires the permission **Manage tags** to be enabled in [your scope config](/scopes).\n\n\n### Example Request Body\n\n```json\n{\n \"tag\": {\n \"name\": \"Excellent Fit\"\n }\n}\n```" tags: - Unified ATS API parameters: - in: header name: X-Integration-Id schema: type: string description: ID of the integration you want to interact with. example: join:HWUTwvyx2wLoSUHphiWVrp28 required: true - name: candidate_id in: path required: true description: The Kombo ID of the candidate you want to remove the tag from. schema: $ref: '#/components/schemas/DeleteAtsCandidatesCandidateIdTagsParameterCandidateId' examples: example1: value: 8Xi6iZrwusZqJmDGXs49GBmJ requestBody: description: DELETE /ats/candidates/:candidate_id/tags Request body content: application/json: schema: $ref: '#/components/schemas/DeleteAtsCandidatesCandidateIdTagsRequestBody' examples: example1: value: tag: name: Excellent Fit responses: '200': description: DELETE /ats/candidates/:candidate_id/tags Positive response content: application/json: schema: $ref: '#/components/schemas/DeleteAtsCandidatesCandidateIdTagsPositiveResponse' examples: example1: value: status: success data: {} warnings: - message: This is an example warning! default: $ref: '#/components/responses/ErrorResponseATS' /ats/tags: get: operationId: GetAtsTags summary: Get tags description: 'Retrieve all tags. Top level filters use AND, while individual filters use OR if they accept multiple arguments. That means filters will be resolved like this: `(id IN ids) AND (remote_id IN remote_ids)`' tags: - Unified ATS API parameters: - in: header name: X-Integration-Id schema: type: string description: ID of the integration you want to interact with. example: join:HWUTwvyx2wLoSUHphiWVrp28 required: true - name: cursor in: query required: false description: An optional cursor string used for pagination. This can be retrieved from the `next` property of the previous page response. schema: $ref: '#/components/schemas/GetAtsTagsParameterCursor' - name: page_size in: query required: false description: The number of results to return per page. Maximum is 250. schema: $ref: '#/components/schemas/GetAtsTagsParameterPageSize' - name: updated_after in: query required: false description: 'Filter the entries based on the modification date in format `YYYY-MM-DDTHH:mm:ss.sssZ`. Returns records where either the record itself **OR** its nested data has been updated since this timestamp, even if the record''s own `changed_at` field remains unchanged. If you want to track entry deletion, also set the `include_deleted=true` query parameter, because otherwise, deleted entries will be hidden. For more details, see [Understanding changed_at vs updated_after Behavior](https://docs.kombo.dev/ats/getting-started/fetching-data#understanding-changed_at-vs-updated_after-behavior). For this endpoint, only changes to the returned record itself are considered.' schema: $ref: '#/components/schemas/GetAtsTagsParameterUpdatedAfter' - name: include_deleted in: query required: false description: By default, deleted entries are not returned. Use the `include_deleted` query param to include deleted entries too. schema: $ref: '#/components/schemas/GetAtsTagsParameterIncludeDeleted' - name: ignore_unsupported_filters in: query required: false description: When set to `true`, filters targeting fields not supported by this integration will be ignored instead of filtering out all results. schema: $ref: '#/components/schemas/GetAtsTagsParameterIgnoreUnsupportedFilters' - name: ids in: query required: false description: Filter by a comma-separated list of IDs such as `222k7eCGyUdgt2JWZDNnkDs3,B5DVmypWENfU6eMe6gYDyJG3`. schema: $ref: '#/components/schemas/GetAtsTagsParameterIds' - name: remote_ids in: query required: false description: Filter by a comma-separated list of remote IDs. schema: $ref: '#/components/schemas/GetAtsTagsParameterRemoteIds' responses: '200': description: GET /ats/tags Positive response content: application/json: schema: $ref: '#/components/schemas/GetAtsTagsPositiveResponse' examples: example1: value: status: success data: next: eyJwYWdlIjoxMiwibm90ZSI6InRoaXMgaXMganVzdCBhbiBleGFtcGxlIGFuZCBub3QgcmVwcmVzZW50YXRpdmUgZm9yIGEgcmVhbCBjdXJzb3IhIn0= results: - id: 26vafvWSRmbhNcxJYqjCzuJg remote_id: '32' name: High Potential remote_data: null changed_at: '2022-08-07T14:01:29.196Z' remote_deleted_at: null default: $ref: '#/components/responses/ErrorResponseATS' /ats/application-stages: get: operationId: GetAtsApplicationStages summary: Get application stages description: "Get all application stages available in the ATS.\n\n\n **This endpoint is deprecated!**\n\n Get all application stages available in the ATS. This is deprecated because most ATS systems have separate sets of stages for each job. We'd recommend using the `stages` property from the [GET Jobs endpoint](/ats/v1/get-jobs) instead.\n\n**Important**: Using global stages can cause \"Stage not found\" errors when moving applications, especially with systems like Workable that have job-specific stages.\n\n[Moving Applications Guide](/ats/implementation-guide/moving-and-rejecting-candidates).\n\n\nTop level filters use AND, while individual filters use OR if they accept multiple arguments. That means filters will be resolved like this: `(id IN ids) AND (remote_id IN remote_ids)`" tags: - Unified ATS API parameters: - in: header name: X-Integration-Id schema: type: string description: ID of the integration you want to interact with. example: join:HWUTwvyx2wLoSUHphiWVrp28 required: true - name: cursor in: query required: false description: An optional cursor string used for pagination. This can be retrieved from the `next` property of the previous page response. schema: $ref: '#/components/schemas/GetAtsApplicationStagesParameterCursor' - name: page_size in: query required: false description: The number of results to return per page. Maximum is 250. schema: $ref: '#/components/schemas/GetAtsApplicationStagesParameterPageSize' - name: updated_after in: query required: false description: 'Filter the entries based on the modification date in format `YYYY-MM-DDTHH:mm:ss.sssZ`. Returns records where either the record itself **OR** its nested data has been updated since this timestamp, even if the record''s own `changed_at` field remains unchanged. If you want to track entry deletion, also set the `include_deleted=true` query parameter, because otherwise, deleted entries will be hidden. For more details, see [Understanding changed_at vs updated_after Behavior](https://docs.kombo.dev/ats/getting-started/fetching-data#understanding-changed_at-vs-updated_after-behavior). For this endpoint, only changes to the returned record itself are considered.' schema: $ref: '#/components/schemas/GetAtsApplicationStagesParameterUpdatedAfter' - name: include_deleted in: query required: false description: By default, deleted entries are not returned. Use the `include_deleted` query param to include deleted entries too. schema: $ref: '#/components/schemas/GetAtsApplicationStagesParameterIncludeDeleted' - name: ignore_unsupported_filters in: query required: false description: When set to `true`, filters targeting fields not supported by this integration will be ignored instead of filtering out all results. schema: $ref: '#/components/schemas/GetAtsApplicationStagesParameterIgnoreUnsupportedFilters' - name: ids in: query required: false description: Filter by a comma-separated list of IDs such as `222k7eCGyUdgt2JWZDNnkDs3,B5DVmypWENfU6eMe6gYDyJG3`. schema: $ref: '#/components/schemas/GetAtsApplicationStagesParameterIds' - name: remote_ids in: query required: false description: Filter by a comma-separated list of remote IDs. schema: $ref: '#/components/schemas/GetAtsApplicationStagesParameterRemoteIds' responses: '200': description: GET /ats/application-stages Positive response content: application/json: schema: $ref: '#/components/schemas/GetAtsApplicationStagesPositiveResponse' examples: example1: value: status: success data: next: eyJwYWdlIjoxMiwibm90ZSI6InRoaXMgaXMganVzdCBhbiBleGFtcGxlIGFuZCBub3QgcmVwcmVzZW50YXRpdmUgZm9yIGEgcmVhbCBjdXJzb3IhIn0= results: - id: 5J7L4b48wBfffYwek9Az9pkM remote_id: '32' name: Initial Screening remote_data: null changed_at: '2022-08-07T14:01:29.196Z' remote_deleted_at: null default: $ref: '#/components/responses/ErrorResponseATS' /ats/jobs: get: operationId: GetAtsJobs summary: Get jobs description: 'Retrieve all jobs. Visit our in-depth guides to learn more about: - 🔄 [Getting updates of the data](/ats/features/implementation-guide/reading-jobs#getting-updates-of-the-data) - ❗ [Handling failing syncs](/ats/features/implementation-guide/reading-jobs#handling-failing-syncs) - 🔍 [Letting your customer choose which jobs to expose](/ats/features/implementation-guide/reading-jobs#let-your-customer-choose-which-jobs-to-expose-to-you) - 🔗 [Matching jobs in your database to ATS jobs](/ats/features/implementation-guide/reading-jobs#match-jobs-in-your-database-to-ats-jobs) - 🗑️ [Reacting to deleted/closed jobs](/ats/features/implementation-guide/reading-jobs#reacting-to-deleted-closed-jobs) Top level filters use AND, while individual filters use OR if they accept multiple arguments. That means filters will be resolved like this: `(id IN ids) AND (remote_id IN remote_ids)`' tags: - Unified ATS API parameters: - in: header name: X-Integration-Id schema: type: string description: ID of the integration you want to interact with. example: join:HWUTwvyx2wLoSUHphiWVrp28 required: true - name: cursor in: query required: false description: An optional cursor string used for pagination. This can be retrieved from the `next` property of the previous page response. schema: $ref: '#/components/schemas/GetAtsJobsParameterCursor' - name: page_size in: query required: false description: The number of results to return per page. Maximum is 250. schema: $ref: '#/components/schemas/GetAtsJobsParameterPageSize' - name: updated_after in: query required: false description: 'Filter the entries based on the modification date in format `YYYY-MM-DDTHH:mm:ss.sssZ`. Returns records where either the record itself **OR** its nested data has been updated since this timestamp, even if the record''s own `changed_at` field remains unchanged. If you want to track entry deletion, also set the `include_deleted=true` query parameter, because otherwise, deleted entries will be hidden. For more details, see [Understanding changed_at vs updated_after Behavior](https://docs.kombo.dev/ats/getting-started/fetching-data#understanding-changed_at-vs-updated_after-behavior). For this endpoint, `updated_after` matches when the returned record changed, or when related data changed as described below. | Path | Added/Removed | Linked Record | | --- | --- | --- | | `stages` | ✓ Yes | ✗ No | | `screening_questions` | ✓ Yes | ✗ No | | `job_postings` | ✓ Yes | ✓ Yes | | `hiring_team` | ✓ Yes | ✗ No | _**Added/Removed**: Whether adding or removing entries from this list triggers an update (n/a for single records). **Linked Record**: Whether changes to the linked record itself trigger an update._' schema: $ref: '#/components/schemas/GetAtsJobsParameterUpdatedAfter' - name: include_deleted in: query required: false description: By default, deleted entries are not returned. Use the `include_deleted` query param to include deleted entries too. schema: $ref: '#/components/schemas/GetAtsJobsParameterIncludeDeleted' - name: ignore_unsupported_filters in: query required: false description: When set to `true`, filters targeting fields not supported by this integration will be ignored instead of filtering out all results. schema: $ref: '#/components/schemas/GetAtsJobsParameterIgnoreUnsupportedFilters' - name: ids in: query required: false description: Filter by a comma-separated list of IDs such as `222k7eCGyUdgt2JWZDNnkDs3,B5DVmypWENfU6eMe6gYDyJG3`. schema: $ref: '#/components/schemas/GetAtsJobsParameterIds' - name: remote_ids in: query required: false description: Filter by a comma-separated list of remote IDs. schema: $ref: '#/components/schemas/GetAtsJobsParameterRemoteIds' - name: job_codes in: query required: false description: Filter by a comma-separated list of job codes. schema: $ref: '#/components/schemas/GetAtsJobsParameterJobCodes' - name: post_url in: query required: false description: Filter by the `post_url` field. Can be used to find a job based on its public posting URL. schema: $ref: '#/components/schemas/GetAtsJobsParameterPostUrl' - name: status in: query required: false description: '**(⚠️ Deprecated - Use the `statuses` filter instead.)** Filter by the `status` field. Can be used to find a job based on its status.' schema: $ref: '#/components/schemas/GetAtsJobsParameterStatus' - name: statuses in: query required: false description: "Filter by a comma-separated list of `OPEN`, `CLOSED`, `DRAFT`, `ARCHIVED` \n\nLeave this blank to get results matching all values." schema: $ref: '#/components/schemas/GetAtsJobsParameterStatuses' - name: employment_types in: query required: false description: "Filter by a comma-separated list of `FULL_TIME`, `PART_TIME`, `CONTRACT`, `SEASONAL`, `INTERNSHIP` \n\nLeave this blank to get results matching all values." schema: $ref: '#/components/schemas/GetAtsJobsParameterEmploymentTypes' - name: visibilities in: query required: false description: "Filter by a comma-separated list of `PUBLIC`, `INTERNAL`, `UNLISTED`, `CONFIDENTIAL` \n\nLeave this blank to get results matching all values." schema: $ref: '#/components/schemas/GetAtsJobsParameterVisibilities' - name: remote_created_after in: query required: false description: Filter jobs by the day they were created in the remote system. This allows you to get jobs that were created on or after a certain day. schema: $ref: '#/components/schemas/GetAtsJobsParameterRemoteCreatedAfter' - name: name_contains in: query required: false description: Filter by the `name` field. Can be used to find a job by keywords present in the job name. schema: $ref: '#/components/schemas/GetAtsJobsParameterNameContains' responses: '200': description: GET /ats/jobs Positive response content: application/json: schema: $ref: '#/components/schemas/GetAtsJobsPositiveResponse' examples: example1: value: status: success data: next: eyJwYWdlIjoxMiwibm90ZSI6InRoaXMgaXMganVzdCBhbiBleGFtcGxlIGFuZCBub3QgcmVwcmVzZW50YXRpdmUgZm9yIGEgcmVhbCBjdXJzb3IhIn0= results: - id: H5daSm8e85Dmvmne3wLeCPhX remote_id: '32' name: Backend Engineer job_code: BE-2021-01 description:

Kombo is hiring engineers! If you are reading this and you are located in Berlin, Germany, feel free to contact us about this position.

confidential: false weekly_hours: 37 employment_type: FULL_TIME status: OPEN visibility: PUBLIC category: Technical Job department: Engineering post_url: https://jobs.example.com/post/159829112 experience_level: Mid-Senior remote_work_status: HYBRID salary_amount: 4200 salary_amount_from: null salary_amount_to: null salary_currency: EUR salary_period: MONTH location: city: Berlin country: DE raw: Berlin, Germany state: Berlin street_1: Lohmühlenstraße 65 street_2: null zip_code: '12435' custom_fields: {} integration_fields: [] remote_url: https://app.greenhouse.io/jobs/32 opened_at: '2022-08-07T14:01:29.196Z' closed_at: null remote_created_at: '2022-08-07T14:01:29.196Z' remote_updated_at: '2022-08-07T14:01:29.196Z' contact_id: 6gT2yLMBEipd3zpezATv3Rhu remote_data: null changed_at: '2022-08-07T14:01:29.196Z' remote_deleted_at: null stages: - id: 5J7L4b48wBfffYwek9Az9pkM remote_id: '32' name: Initial Screening remote_data: null index: 0 screening_questions: - id: 26vafvWSRmbhNcxJYqjCzuJg remote_id: 48b4d36a-1d4b-4c50-ada7-9519078e65b4 title: Which is your primary programming language? description: Please enter the language you are most comfortable with. format: display_type: SINGLE_LINE max_length: null type: TEXT category: null index: 0 required: true precondition_question_id: 4ZVteCSSgDw3BdwGzcQqGEPk precondition_options: - 7qd5qjPwDHarsMLFMGzXYG1K job_postings: - id: 26vafvWSRmbhNcxJYqjCzuJg remote_id: 48b4d36a-1d4b-4c50-ada7-9519078e65b4 title: Frontend Engineer description_html:

We are looking for a Frontend Engineer.

status: ACTIVE visibility: PUBLIC url: https://jobs.example.com/post/159829112 remote_data: null hiring_team: - id: 26vafvWSRmbhNcxJYqjCzuJg remote_id: '32' first_name: John last_name: Doe email: john.doe@kombo.dev hiring_team_roles: - RECRUITER job_roles: - remote_id: '32' remote_label: Hiring Manager scope: JOB unified_type: HIRING_MANAGER default: $ref: '#/components/responses/ErrorResponseATS' /ats/jobs/{job_id}/applications: post: operationId: PostAtsJobsJobIdApplications summary: Create application description: "Create a new application and candidate for the specified job.\n\nVisit our in-depth guides to learn more about:\n\n- \U0001F310 [Setting the source of the application](/ats/features/implementation-guide/creating-applications#set-the-source-of-the-application) \n- \U0001F4CE [Uploading attachments with the application](/ats/features/implementation-guide/creating-applications#upload-attachments-with-the-application) \n- ♻️ [Retry behaviour](/ats/features/implementation-guide/creating-applications#retry-behaviour) \n- ✏️ [Writing answers to screening questions](/ats/features/implementation-guide/creating-applications#write-answers-to-screening-questions) \n- ⚠️ [Handling ATS-specific limitations](/ats/features/implementation-guide/creating-applications#handle-ats-specific-limitations)\n\n\n This endpoint requires the permission **Create applications and candidates** to be enabled in [your scope config](/scopes).\n\n\n### Example Request Body\n\n```json\n{\n \"candidate\": {\n \"first_name\": \"Frank\",\n \"last_name\": \"Doe\",\n \"company\": \"Acme Inc.\",\n \"title\": \"Head of Integrations\",\n \"email_address\": \"frank.doe@example.com\",\n \"phone_number\": \"+1-541-754-3010\",\n \"gender\": \"MALE\",\n \"salary_expectations\": {\n \"amount\": 100000,\n \"period\": \"YEAR\"\n },\n \"availability_date\": \"2021-01-01\",\n \"location\": {\n \"city\": \"New York\",\n \"zip_code\": \"10016\",\n \"state\": \"NY\",\n \"country\": \"US\"\n }\n },\n \"stage_id\": \"8x3YKRDcuRnwShdh96ShBNn1\",\n \"attachments\": [\n {\n \"name\": \"Frank Doe CV.txt\",\n \"data\": \"SGkgdGhlcmUsIEtvbWJvIGlzIGN1cnJlbnRseSBoaXJpbmcgZW5naW5lZXJzIHRoYXQgbG92ZSB0byB3b3JrIG9uIGRldmVsb3BlciBwcm9kdWN0cy4=\",\n \"type\": \"CV\",\n \"content_type\": \"text/plain\"\n }\n ],\n \"screening_question_answers\": [\n {\n \"question_id\": \"3phFBNXRweGnDmsU9o2vdPuQ\",\n \"answer\": \"Yes\"\n },\n {\n \"question_id\": \"EYJjhMQT3LtVKXnTbnRT8s6U\",\n \"answer\": [\n \"GUzE666zfyjeoCJX6A8n7wh6\",\n \"5WPHzzKAv8cx97KtHRUV96U8\",\n \"7yZfKGzWigXxxRTygqAfHvyE\"\n ]\n }\n ],\n \"remote_fields\": {}\n}\n```" tags: - Unified ATS API parameters: - in: header name: X-Integration-Id schema: type: string description: ID of the integration you want to interact with. example: join:HWUTwvyx2wLoSUHphiWVrp28 required: true - name: job_id in: path required: true description: The Kombo ID or Remote ID of the Job this candidate should apply for. If you want to use the ID of the integrated system (remote_id) you need to prefix the id with "remote:". You can use the remote ID if you do not want to sync jobs. schema: $ref: '#/components/schemas/PostAtsJobsJobIdApplicationsParameterJobId' examples: example1: value: BDpgnpZ148nrGh4mYHNxJBgx requestBody: description: POST /ats/jobs/:job_id/applications Request body content: application/json: schema: $ref: '#/components/schemas/PostAtsJobsJobIdApplicationsRequestBody' examples: example1: value: candidate: first_name: Frank last_name: Doe company: Acme Inc. title: Head of Integrations email_address: frank.doe@example.com phone_number: +1-541-754-3010 gender: MALE salary_expectations: amount: 100000 period: YEAR availability_date: '2021-01-01' location: city: New York zip_code: '10016' state: NY country: US stage_id: 8x3YKRDcuRnwShdh96ShBNn1 attachments: - name: Frank Doe CV.txt data: SGkgdGhlcmUsIEtvbWJvIGlzIGN1cnJlbnRseSBoaXJpbmcgZW5naW5lZXJzIHRoYXQgbG92ZSB0byB3b3JrIG9uIGRldmVsb3BlciBwcm9kdWN0cy4= type: CV content_type: text/plain screening_question_answers: - question_id: 3phFBNXRweGnDmsU9o2vdPuQ answer: 'Yes' - question_id: EYJjhMQT3LtVKXnTbnRT8s6U answer: - GUzE666zfyjeoCJX6A8n7wh6 - 5WPHzzKAv8cx97KtHRUV96U8 - 7yZfKGzWigXxxRTygqAfHvyE responses: '200': description: POST /ats/jobs/:job_id/applications Positive response content: application/json: schema: $ref: '#/components/schemas/PostAtsJobsJobIdApplicationsPositiveResponse' examples: example1: value: status: success data: id: H77fDF8uvEzGNPRubiz5DvQ7 remote_id: '32' outcome: PENDING rejection_reason_name: null rejected_at: null current_stage_id: 5J7L4b48wBfffYwek9Az9pkM job_id: H5daSm8e85Dmvmne3wLeCPhX candidate_id: 26vafvWSRmbhNcxJYqjCzuJg screening_question_answers: [] custom_fields: {} integration_fields: [] remote_url: https://example.com/applications/32 changed_at: '2022-08-07T14:01:29.196Z' remote_deleted_at: null remote_created_at: '2022-04-02T00:00:00.000Z' remote_updated_at: '2022-04-04T00:00:00.000Z' remote_data: null current_stage: id: 5J7L4b48wBfffYwek9Az9pkM name: Interview remote_id: '5' index: 2 job: id: H5daSm8e85Dmvmne3wLeCPhX name: Head of Integrations remote_id: '1' candidate: id: 26vafvWSRmbhNcxJYqjCzuJg remote_id: '32' first_name: John last_name: Doe company: Acme, Inc. title: Head of Marketing confidential: false source: Employee Referral phone_numbers: - phone_number: +1-541-754-3010 type: HOME email_addresses: - email_address: john.doe@example.com type: PRIVATE social_media: - link: https://www.youtube.com/watch?v=dQw4w9WgXcQ type: YOUTUBE username: null location: city: Berlin country: DE raw: Berlin, Germany state: Berlin street_1: Lohmühlenstraße 65 street_2: null zip_code: '12435' custom_fields: {} integration_fields: [] remote_url: https://example.com/candidates/32 remote_created_at: '2022-04-02T00:00:00.000Z' remote_updated_at: '2022-04-04T00:00:00.000Z' remote_data: null changed_at: '2022-04-04T00:00:00.000Z' remote_deleted_at: null tags: - id: 7DHDky9zk4qnWkycuuQjFXNh name: Fast Learner remote_id: '1' warnings: - message: This is an example warning! default: $ref: '#/components/responses/ErrorResponseATS' /ats/users: get: operationId: GetAtsUsers summary: Get users description: 'Retrieve all users. Top level filters use AND, while individual filters use OR if they accept multiple arguments. That means filters will be resolved like this: `(id IN ids) AND (remote_id IN remote_ids)`' tags: - Unified ATS API parameters: - in: header name: X-Integration-Id schema: type: string description: ID of the integration you want to interact with. example: join:HWUTwvyx2wLoSUHphiWVrp28 required: true - name: cursor in: query required: false description: An optional cursor string used for pagination. This can be retrieved from the `next` property of the previous page response. schema: $ref: '#/components/schemas/GetAtsUsersParameterCursor' - name: page_size in: query required: false description: The number of results to return per page. Maximum is 250. schema: $ref: '#/components/schemas/GetAtsUsersParameterPageSize' - name: updated_after in: query required: false description: 'Filter the entries based on the modification date in format `YYYY-MM-DDTHH:mm:ss.sssZ`. Returns records where either the record itself **OR** its nested data has been updated since this timestamp, even if the record''s own `changed_at` field remains unchanged. If you want to track entry deletion, also set the `include_deleted=true` query parameter, because otherwise, deleted entries will be hidden. For more details, see [Understanding changed_at vs updated_after Behavior](https://docs.kombo.dev/ats/getting-started/fetching-data#understanding-changed_at-vs-updated_after-behavior). For this endpoint, `updated_after` matches when the returned record changed, or when related data changed as described below. | Path | Added/Removed | Linked Record | | --- | --- | --- | | `system_role_assignment` | ✓ Yes | ✓ Yes | _**Added/Removed**: Whether adding or removing entries from this list triggers an update (n/a for single records). **Linked Record**: Whether changes to the linked record itself trigger an update._' schema: $ref: '#/components/schemas/GetAtsUsersParameterUpdatedAfter' - name: include_deleted in: query required: false description: By default, deleted entries are not returned. Use the `include_deleted` query param to include deleted entries too. schema: $ref: '#/components/schemas/GetAtsUsersParameterIncludeDeleted' - name: ignore_unsupported_filters in: query required: false description: When set to `true`, filters targeting fields not supported by this integration will be ignored instead of filtering out all results. schema: $ref: '#/components/schemas/GetAtsUsersParameterIgnoreUnsupportedFilters' - name: ids in: query required: false description: Filter by a comma-separated list of IDs such as `222k7eCGyUdgt2JWZDNnkDs3,B5DVmypWENfU6eMe6gYDyJG3`. schema: $ref: '#/components/schemas/GetAtsUsersParameterIds' - name: remote_ids in: query required: false description: Filter by a comma-separated list of remote IDs. schema: $ref: '#/components/schemas/GetAtsUsersParameterRemoteIds' - name: emails in: query required: false description: Filter by a comma-separated list of emails. We will only return users who have _any_ of the emails. The format of the emails is case-insensitive. schema: $ref: '#/components/schemas/GetAtsUsersParameterEmails' responses: '200': description: GET /ats/users Positive response content: application/json: schema: $ref: '#/components/schemas/GetAtsUsersPositiveResponse' examples: example1: value: status: success data: next: eyJwYWdlIjoxMiwibm90ZSI6InRoaXMgaXMganVzdCBhbiBleGFtcGxlIGFuZCBub3QgcmVwcmVzZW50YXRpdmUgZm9yIGEgcmVhbCBjdXJzb3IhIn0= results: - id: 26vafvWSRmbhNcxJYqjCzuJg remote_id: '32' first_name: John last_name: Doe email: john.doe@kombo.dev status: ACTIVE remote_data: null changed_at: '2022-08-07T14:01:29.196Z' remote_deleted_at: null system_roles: - remote_id: '32' remote_label: Hiring Manager scope: JOB unified_type: HIRING_MANAGER default: $ref: '#/components/responses/ErrorResponseATS' /ats/roles: get: operationId: GetAtsRoles summary: Get roles description: 'Retrieve all roles. Visit our in-depth guide about [roles](/ats/features/roles) to learn more. Top level filters use AND, while individual filters use OR if they accept multiple arguments. That means filters will be resolved like this: `(id IN ids) AND (remote_id IN remote_ids)`' tags: - Unified ATS API parameters: - in: header name: X-Integration-Id schema: type: string description: ID of the integration you want to interact with. example: join:HWUTwvyx2wLoSUHphiWVrp28 required: true - name: cursor in: query required: false description: An optional cursor string used for pagination. This can be retrieved from the `next` property of the previous page response. schema: $ref: '#/components/schemas/GetAtsRolesParameterCursor' - name: page_size in: query required: false description: The number of results to return per page. Maximum is 250. schema: $ref: '#/components/schemas/GetAtsRolesParameterPageSize' - name: updated_after in: query required: false description: 'Filter the entries based on the modification date in format `YYYY-MM-DDTHH:mm:ss.sssZ`. Returns records where either the record itself **OR** its nested data has been updated since this timestamp, even if the record''s own `changed_at` field remains unchanged. If you want to track entry deletion, also set the `include_deleted=true` query parameter, because otherwise, deleted entries will be hidden. For more details, see [Understanding changed_at vs updated_after Behavior](https://docs.kombo.dev/ats/getting-started/fetching-data#understanding-changed_at-vs-updated_after-behavior). For this endpoint, only changes to the returned record itself are considered.' schema: $ref: '#/components/schemas/GetAtsRolesParameterUpdatedAfter' - name: include_deleted in: query required: false description: By default, deleted entries are not returned. Use the `include_deleted` query param to include deleted entries too. schema: $ref: '#/components/schemas/GetAtsRolesParameterIncludeDeleted' - name: ignore_unsupported_filters in: query required: false description: When set to `true`, filters targeting fields not supported by this integration will be ignored instead of filtering out all results. schema: $ref: '#/components/schemas/GetAtsRolesParameterIgnoreUnsupportedFilters' - name: ids in: query required: false description: Filter by a comma-separated list of IDs such as `222k7eCGyUdgt2JWZDNnkDs3,B5DVmypWENfU6eMe6gYDyJG3`. schema: $ref: '#/components/schemas/GetAtsRolesParameterIds' - name: remote_ids in: query required: false description: Filter by a comma-separated list of remote IDs. schema: $ref: '#/components/schemas/GetAtsRolesParameterRemoteIds' - name: scopes in: query required: false description: "Filter by a comma-separated list of `SYSTEM`, `JOB` \n* `SYSTEM`: System-wide roles that apply globally (e.g., an \"Admin\" role). \n* `JOB`: Job-scoped roles that apply to specific jobs (e.g., a \"Hiring Manager\" role). \n \n\nLeave this blank to get results matching all values." schema: $ref: '#/components/schemas/GetAtsRolesParameterScopes' responses: '200': description: GET /ats/roles Positive response content: application/json: schema: $ref: '#/components/schemas/GetAtsRolesPositiveResponse' examples: example1: value: status: success data: next: eyJwYWdlIjoxMiwibm90ZSI6InRoaXMgaXMganVzdCBhbiBleGFtcGxlIGFuZCBub3QgcmVwcmVzZW50YXRpdmUgZm9yIGEgcmVhbCBjdXJzb3IhIn0= results: - id: 26vafvWSRmbhNcxJYqjCzuJg remote_id: '32' remote_label: Hiring Manager scope: JOB unified_type: HIRING_MANAGER remote_data: null changed_at: '2022-08-07T14:01:29.196Z' remote_deleted_at: null default: $ref: '#/components/responses/ErrorResponseATS' /ats/offers: get: operationId: GetAtsOffers summary: Get offers description: 'Retrieve all offers. Top level filters use AND, while individual filters use OR if they accept multiple arguments. That means filters will be resolved like this: `(id IN ids) AND (remote_id IN remote_ids)`' tags: - Unified ATS API parameters: - in: header name: X-Integration-Id schema: type: string description: ID of the integration you want to interact with. example: join:HWUTwvyx2wLoSUHphiWVrp28 required: true - name: cursor in: query required: false description: An optional cursor string used for pagination. This can be retrieved from the `next` property of the previous page response. schema: $ref: '#/components/schemas/GetAtsOffersParameterCursor' - name: page_size in: query required: false description: The number of results to return per page. Maximum is 250. schema: $ref: '#/components/schemas/GetAtsOffersParameterPageSize' - name: updated_after in: query required: false description: 'Filter the entries based on the modification date in format `YYYY-MM-DDTHH:mm:ss.sssZ`. Returns records where either the record itself **OR** its nested data has been updated since this timestamp, even if the record''s own `changed_at` field remains unchanged. If you want to track entry deletion, also set the `include_deleted=true` query parameter, because otherwise, deleted entries will be hidden. For more details, see [Understanding changed_at vs updated_after Behavior](https://docs.kombo.dev/ats/getting-started/fetching-data#understanding-changed_at-vs-updated_after-behavior). For this endpoint, `updated_after` matches when the returned record changed, or when related data changed as described below. | Path | Added/Removed | Linked Record | | --- | --- | --- | | `application` | n/a | ✓ Yes | | `application` → `candidate` | ✗ No | ✗ No | | `application` → `job` | ✗ No | ✗ No | _**Added/Removed**: Whether adding or removing entries from this list triggers an update (n/a for single records). **Linked Record**: Whether changes to the linked record itself trigger an update._' schema: $ref: '#/components/schemas/GetAtsOffersParameterUpdatedAfter' - name: include_deleted in: query required: false description: By default, deleted entries are not returned. Use the `include_deleted` query param to include deleted entries too. schema: $ref: '#/components/schemas/GetAtsOffersParameterIncludeDeleted' - name: ignore_unsupported_filters in: query required: false description: When set to `true`, filters targeting fields not supported by this integration will be ignored instead of filtering out all results. schema: $ref: '#/components/schemas/GetAtsOffersParameterIgnoreUnsupportedFilters' - name: ids in: query required: false description: Filter by a comma-separated list of IDs such as `222k7eCGyUdgt2JWZDNnkDs3,B5DVmypWENfU6eMe6gYDyJG3`. schema: $ref: '#/components/schemas/GetAtsOffersParameterIds' - name: remote_ids in: query required: false description: Filter by a comma-separated list of remote IDs. schema: $ref: '#/components/schemas/GetAtsOffersParameterRemoteIds' responses: '200': description: GET /ats/offers Positive response content: application/json: schema: $ref: '#/components/schemas/GetAtsOffersPositiveResponse' examples: example1: value: status: success data: next: eyJwYWdlIjoxMiwibm90ZSI6InRoaXMgaXMganVzdCBhbiBleGFtcGxlIGFuZCBub3QgcmVwcmVzZW50YXRpdmUgZm9yIGEgcmVhbCBjdXJzb3IhIn0= results: - id: 76bab8LKuFtqpZ89mofCPMHX remote_id: '6' status: ACCEPTED employment_start_date: '2022-08-07T14:01:29.196Z' application_id: BAkbueBMBusj9Bg7L1Wps3AR custom_fields: {} integration_fields: [] changed_at: '2022-08-07T14:01:29.196Z' remote_deleted_at: null remote_created_at: '2022-08-07T14:01:29.196Z' remote_updated_at: '2022-08-07T14:01:29.196Z' remote_data: null application: candidate: id: 26vafvWSRmbhNcxJYqjCzuJg remote_id: '32' first_name: John last_name: Doe email_addresses: - email_address: john.doe@example.com type: PRIVATE job: id: H5daSm8e85Dmvmne3wLeCPhX remote_id: '32' name: Backend Engineer default: $ref: '#/components/responses/ErrorResponseATS' /ats/rejection-reasons: get: operationId: GetAtsRejectionReasons summary: Get rejection reasons description: 'Retrieve all rejection reasons. Get all rejection reasons available in the system. The Kombo ID is required in the associated [reject application action](/ats/v1/post-applications-application-id-reject). Top level filters use AND, while individual filters use OR if they accept multiple arguments. That means filters will be resolved like this: `(id IN ids) AND (remote_id IN remote_ids)`' tags: - Unified ATS API parameters: - in: header name: X-Integration-Id schema: type: string description: ID of the integration you want to interact with. example: join:HWUTwvyx2wLoSUHphiWVrp28 required: true - name: cursor in: query required: false description: An optional cursor string used for pagination. This can be retrieved from the `next` property of the previous page response. schema: $ref: '#/components/schemas/GetAtsRejectionReasonsParameterCursor' - name: page_size in: query required: false description: The number of results to return per page. Maximum is 250. schema: $ref: '#/components/schemas/GetAtsRejectionReasonsParameterPageSize' - name: updated_after in: query required: false description: 'Filter the entries based on the modification date in format `YYYY-MM-DDTHH:mm:ss.sssZ`. Returns records where either the record itself **OR** its nested data has been updated since this timestamp, even if the record''s own `changed_at` field remains unchanged. If you want to track entry deletion, also set the `include_deleted=true` query parameter, because otherwise, deleted entries will be hidden. For more details, see [Understanding changed_at vs updated_after Behavior](https://docs.kombo.dev/ats/getting-started/fetching-data#understanding-changed_at-vs-updated_after-behavior). For this endpoint, only changes to the returned record itself are considered.' schema: $ref: '#/components/schemas/GetAtsRejectionReasonsParameterUpdatedAfter' - name: include_deleted in: query required: false description: By default, deleted entries are not returned. Use the `include_deleted` query param to include deleted entries too. schema: $ref: '#/components/schemas/GetAtsRejectionReasonsParameterIncludeDeleted' - name: ignore_unsupported_filters in: query required: false description: When set to `true`, filters targeting fields not supported by this integration will be ignored instead of filtering out all results. schema: $ref: '#/components/schemas/GetAtsRejectionReasonsParameterIgnoreUnsupportedFilters' - name: ids in: query required: false description: Filter by a comma-separated list of IDs such as `222k7eCGyUdgt2JWZDNnkDs3,B5DVmypWENfU6eMe6gYDyJG3`. schema: $ref: '#/components/schemas/GetAtsRejectionReasonsParameterIds' - name: remote_ids in: query required: false description: Filter by a comma-separated list of remote IDs. schema: $ref: '#/components/schemas/GetAtsRejectionReasonsParameterRemoteIds' responses: '200': description: GET /ats/rejection-reasons Positive response content: application/json: schema: $ref: '#/components/schemas/GetAtsRejectionReasonsPositiveResponse' examples: example1: value: status: success data: next: eyJwYWdlIjoxMiwibm90ZSI6InRoaXMgaXMganVzdCBhbiBleGFtcGxlIGFuZCBub3QgcmVwcmVzZW50YXRpdmUgZm9yIGEgcmVhbCBjdXJzb3IhIn0= results: - id: 76bab8LKuFtqpZ89mofCPMHX remote_id: '6' name: Not a fit changed_at: '2022-08-07T14:01:29.196Z' remote_deleted_at: null remote_data: null default: $ref: '#/components/responses/ErrorResponseATS' /ats/interviews: get: operationId: GetAtsInterviews summary: Get interviews description: 'Retrieve all interviews. Top level filters use AND, while individual filters use OR if they accept multiple arguments. That means filters will be resolved like this: `(id IN ids) AND (remote_id IN remote_ids)`' tags: - Unified ATS API parameters: - in: header name: X-Integration-Id schema: type: string description: ID of the integration you want to interact with. example: join:HWUTwvyx2wLoSUHphiWVrp28 required: true - name: cursor in: query required: false description: An optional cursor string used for pagination. This can be retrieved from the `next` property of the previous page response. schema: $ref: '#/components/schemas/GetAtsInterviewsParameterCursor' - name: page_size in: query required: false description: The number of results to return per page. Maximum is 250. schema: $ref: '#/components/schemas/GetAtsInterviewsParameterPageSize' - name: updated_after in: query required: false description: 'Filter the entries based on the modification date in format `YYYY-MM-DDTHH:mm:ss.sssZ`. Returns records where either the record itself **OR** its nested data has been updated since this timestamp, even if the record''s own `changed_at` field remains unchanged. If you want to track entry deletion, also set the `include_deleted=true` query parameter, because otherwise, deleted entries will be hidden. For more details, see [Understanding changed_at vs updated_after Behavior](https://docs.kombo.dev/ats/getting-started/fetching-data#understanding-changed_at-vs-updated_after-behavior). For this endpoint, `updated_after` matches when the returned record changed, or when related data changed as described below. | Path | Added/Removed | Linked Record | | --- | --- | --- | | `interviewers` | ✓ Yes | ✗ No | | `application` | n/a | ✓ Yes | | `application` → `candidate` | ✗ No | ✗ No | | `application` → `job` | ✗ No | ✗ No | _**Added/Removed**: Whether adding or removing entries from this list triggers an update (n/a for single records). **Linked Record**: Whether changes to the linked record itself trigger an update._' schema: $ref: '#/components/schemas/GetAtsInterviewsParameterUpdatedAfter' - name: include_deleted in: query required: false description: By default, deleted entries are not returned. Use the `include_deleted` query param to include deleted entries too. schema: $ref: '#/components/schemas/GetAtsInterviewsParameterIncludeDeleted' - name: ignore_unsupported_filters in: query required: false description: When set to `true`, filters targeting fields not supported by this integration will be ignored instead of filtering out all results. schema: $ref: '#/components/schemas/GetAtsInterviewsParameterIgnoreUnsupportedFilters' - name: ids in: query required: false description: Filter by a comma-separated list of IDs such as `222k7eCGyUdgt2JWZDNnkDs3,B5DVmypWENfU6eMe6gYDyJG3`. schema: $ref: '#/components/schemas/GetAtsInterviewsParameterIds' - name: remote_ids in: query required: false description: Filter by a comma-separated list of remote IDs. schema: $ref: '#/components/schemas/GetAtsInterviewsParameterRemoteIds' - name: job_ids in: query required: false description: Filter by a comma-separated list of job IDs. We will only return interviews for applications associated with any of these jobs. schema: $ref: '#/components/schemas/GetAtsInterviewsParameterJobIds' responses: '200': description: GET /ats/interviews Positive response content: application/json: schema: $ref: '#/components/schemas/GetAtsInterviewsPositiveResponse' examples: example1: value: status: success data: next: eyJwYWdlIjoxMiwibm90ZSI6InRoaXMgaXMganVzdCBhbiBleGFtcGxlIGFuZCBub3QgcmVwcmVzZW50YXRpdmUgZm9yIGEgcmVhbCBjdXJzb3IhIn0= results: - id: 26vafvWSRmbhNcxJYqjCzuJg remote_id: '32' title: Interview with John Doe starting_at: '2023-06-26T14:30:00.000Z' ending_at: '2023-06-26T15:30:00.000Z' location: city: Berlin country: DE raw: Berlin, Germany state: Berlin street_1: Lohmühlenstraße 65 street_2: null zip_code: '12435' video_conferencing_url: https://meet.example.com/interview-abc123 application_id: H77fDF8uvEzGNPRubiz5DvQ7 stage_id: H5daSm8e85Dmvmne3wLeCPhX canceled: false remote_created_at: '2022-08-07T14:01:29.196Z' remote_updated_at: '2022-08-07T14:01:29.196Z' remote_data: null changed_at: '2022-08-07T14:01:29.196Z' remote_deleted_at: null users: - id: 26vafvWSRmbhNcxJYqjCzuJg remote_id: '32' first_name: John last_name: Doe email: john.doe@kombo.dev application: id: H77fDF8uvEzGNPRubiz5DvQ7 remote_id: '32' outcome: HIRED rejection_reason_name: null candidate: id: 26vafvWSRmbhNcxJYqjCzuJg remote_id: '32' first_name: John last_name: Doe email_addresses: - email_address: john.doe@example.com type: PRIVATE job: id: H5daSm8e85Dmvmne3wLeCPhX remote_id: '32' name: Backend Engineer default: $ref: '#/components/responses/ErrorResponseATS' /ats/actions/ats_create_candidate: get: operationId: GetAtsActionsAtsCreateCandidate tags: - Unified ATS API parameters: - in: header name: X-Integration-Id schema: type: string description: ID of the integration you want to interact with. example: join:HWUTwvyx2wLoSUHphiWVrp28 required: true responses: '200': description: GET /ats/actions/ats_create_candidate Positive response content: application/json: schema: $ref: '#/components/schemas/GetAtsActionsAtsCreateCandidatePositiveResponse' examples: example1: value: status: success data: attachment_restrictions: total_size_bytes: 20000000 types: CV: is_supported: true min_amount: 1 max_amount: 1 max_file_size_bytes: 10000000 accepted_mime_types: - application/pdf - application/msword COVER_LETTER: is_supported: true min_amount: 0 max_amount: null max_file_size_bytes: null accepted_mime_types: null OTHER: is_supported: false default: $ref: '#/components/responses/ErrorResponseATS' /ats/actions/ats_create_application: get: operationId: GetAtsActionsAtsCreateApplication tags: - Unified ATS API parameters: - in: header name: X-Integration-Id schema: type: string description: ID of the integration you want to interact with. example: join:HWUTwvyx2wLoSUHphiWVrp28 required: true responses: '200': description: GET /ats/actions/ats_create_application Positive response content: application/json: schema: $ref: '#/components/schemas/GetAtsActionsAtsCreateApplicationPositiveResponse' examples: example1: value: status: success data: attachment_restrictions: total_size_bytes: 20000000 types: CV: is_supported: true min_amount: 1 max_amount: 1 max_file_size_bytes: 10000000 accepted_mime_types: - application/pdf - application/msword COVER_LETTER: is_supported: true min_amount: 0 max_amount: null max_file_size_bytes: null accepted_mime_types: null OTHER: is_supported: false default: $ref: '#/components/responses/ErrorResponseATS' /ats/actions/ats_add_application_attachment: get: operationId: GetAtsActionsAtsAddApplicationAttachment tags: - Unified ATS API parameters: - in: header name: X-Integration-Id schema: type: string description: ID of the integration you want to interact with. example: join:HWUTwvyx2wLoSUHphiWVrp28 required: true responses: '200': description: GET /ats/actions/ats_add_application_attachment Positive response content: application/json: schema: $ref: '#/components/schemas/GetAtsActionsAtsAddApplicationAttachmentPositiveResponse' examples: example1: value: status: success data: attachment_restrictions: types: CV: is_supported: false COVER_LETTER: is_supported: false OTHER: is_supported: true max_file_size_bytes: 10485760 accepted_mime_types: - application/pdf - application/msword default: $ref: '#/components/responses/ErrorResponseATS' /ats/actions/ats_add_candidate_attachment: get: operationId: GetAtsActionsAtsAddCandidateAttachment tags: - Unified ATS API parameters: - in: header name: X-Integration-Id schema: type: string description: ID of the integration you want to interact with. example: join:HWUTwvyx2wLoSUHphiWVrp28 required: true responses: '200': description: GET /ats/actions/ats_add_candidate_attachment Positive response content: application/json: schema: $ref: '#/components/schemas/GetAtsActionsAtsAddCandidateAttachmentPositiveResponse' examples: example1: value: status: success data: attachment_restrictions: types: CV: is_supported: false COVER_LETTER: is_supported: false OTHER: is_supported: true max_file_size_bytes: 10485760 accepted_mime_types: - application/pdf - application/msword default: $ref: '#/components/responses/ErrorResponseATS' /ats/import-tracked-application: post: operationId: PostAtsImportTrackedApplication summary: Import tracked application description: "Import tracked application\n\nRetroactively import existing applications into Kombo's tracking system. This is particularly useful if you have enabled the 'sync only created applications' setting and want to start tracking applications that were created before using Kombo.\n\nTo import an application, you'll need to provide specific identifiers based on the ATS. The available `id_type` values are defined by Kombo based on the tool's API capabilities. Please reach out to Kombo support if you require further types to be supported.\n\nOnce imported, Kombo will automatically fetch and update the application's complete data during the next sync.\n\n### Example Request Body\n\n```json\n{\n \"tracked_at\": \"2024-04-12T14:33:47.000Z\",\n \"successfactors\": {\n \"id_type\": \"application_remote_id\",\n \"application_remote_id\": \"1224042\"\n }\n}\n```" tags: - Unified ATS API parameters: - in: header name: X-Integration-Id schema: type: string description: ID of the integration you want to interact with. example: join:HWUTwvyx2wLoSUHphiWVrp28 required: true requestBody: description: POST /ats/import-tracked-application Request body content: application/json: schema: $ref: '#/components/schemas/PostAtsImportTrackedApplicationRequestBody' examples: example1: value: tracked_at: '2024-04-12T14:33:47.000Z' successfactors: id_type: application_remote_id application_remote_id: '1224042' responses: '200': description: POST /ats/import-tracked-application Positive response content: application/json: schema: $ref: '#/components/schemas/PostAtsImportTrackedApplicationPositiveResponse' examples: example1: value: status: success data: id: 5wdtQtJei2oVhJKya2V1KZLM tracked_at: '2025-02-11T15:37:37.000Z' imported_id: successfactors: id_type: application_remote_id application_remote_id: '1224042' warnings: - message: This is an example warning! default: $ref: '#/components/responses/ErrorResponseATS' components: schemas: GetAtsRolesParameterIds: type: string description: Filter by a comma-separated list of IDs such as `222k7eCGyUdgt2JWZDNnkDs3,B5DVmypWENfU6eMe6gYDyJG3`. GetAtsJobsParameterJobCodes: type: string description: Filter by a comma-separated list of job codes. GetAtsJobsParameterStatus: type: string enum: - OPEN - CLOSED - DRAFT - ARCHIVED description: '**(⚠️ Deprecated - Use the `statuses` filter instead.)** Filter by the `status` field. Can be used to find a job based on its status.' GetAtsApplicationsParameterOutcomes: type: string description: "Filter by a comma-separated list of `PENDING`, `HIRED`, `DECLINED` \n* `PENDING`: The application is still being processed. \n* `HIRED`: The candidate was hired. \n* `DECLINED`: The candidate was declined. \n \n\nLeave this blank to get results matching all values." GetAtsApplicationsParameterIds: type: string description: Filter by a comma-separated list of IDs such as `222k7eCGyUdgt2JWZDNnkDs3,B5DVmypWENfU6eMe6gYDyJG3`. PostAtsApplicationsApplicationIdResultLinksPositiveResponse: type: object properties: status: type: string const: success data: type: object examples: - {} warnings: type: array items: type: object properties: message: type: string required: - message description: These are the interaction warnings that are shown in the dashboard. They are meant to provide debug information to you. We recommend logging them to the console. required: - status - data - warnings PatchAtsApplicationsApplicationIdInterviewsParameterApplicationId: type: string description: The ID of the application GetAtsApplicationsParameterPageSize: type: integer format: int64 minimum: 1 maximum: 250 default: 100 description: The number of results to return per page. Maximum is 250. GetAtsTagsParameterCursor: type: string description: An optional cursor string used for pagination. This can be retrieved from the `next` property of the previous page response. PostAtsCandidatesCandidateIdTagsRequestBody: type: object properties: tag: type: object properties: name: type: string minLength: 1 description: The name of the tag you would like to add. We will automatically find the matching ID of the tag in the system. required: - name remote_fields: type: object properties: greenhouse: type: object properties: post_headers: type: object properties: On-Behalf-Of: type: - string - 'null' description: ID of the the user that will show up as having performed the action in Greenhouse. We already pass a value by default, but you can use this to override it. description: Headers we will pass with `POST` requests to Greenhouse. description: Fields specific to Greenhouse. workable: type: object properties: on_behalf_of_user_remote_id: type: string description: The remote ID of the user that will be displayed in the UI as the one that performed the action. description: Workable specific remote fields for ATS actions. description: Additional fields that we will pass through to specific ATS systems. required: - tag GetAtsJobsParameterIgnoreUnsupportedFilters: type: string enum: - 'true' - 'false' default: 'false' description: When set to `true`, filters targeting fields not supported by this integration will be ignored instead of filtering out all results. GetAtsRejectionReasonsParameterPageSize: type: integer format: int64 minimum: 1 maximum: 250 default: 100 description: The number of results to return per page. Maximum is 250. PostAtsJobsJobIdApplicationsPositiveResponse: type: object properties: status: type: string const: success data: type: object properties: id: type: string description: The globally unique ID of this object generated by Kombo. We recommend using this as a stable primary key for syncing. remote_id: type: - string - 'null' description: The raw ID of the object in the remote system. We don't recommend using this as a primary key on your side as it might sometimes be compromised of multiple identifiers if a system doesn't provide a clear primary key. outcome: type: - string - 'null' enum: - PENDING - HIRED - DECLINED description: 'Parsed status of the application. If Kombo identifies that the application was accepted and the candidate hired, it will be `HIRED`. If the application was rejected or the candidate declined, it will be `DECLINED`. If the application is still in process, it will be `PENDING`. Kombo will always try to deliver this information as reliably as possible.' rejection_reason_name: type: - string - 'null' description: Reason for the rejection of the candidate. rejected_at: description: The time that the application was rejected. type: - string - 'null' format: date-time externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString current_stage_id: type: - string - 'null' description: ID of the current application stage job_id: type: - string - 'null' description: The Kombo ID of the job which the candidate applied to. The ID can be used to retrieve the job from the `get jobs` endpoint. candidate_id: type: - string - 'null' description: The Kombo ID of the candidate who applied to the job. The ID can be used to retrieve the candidate from the `get candidates` endpoint. screening_question_answers: type: - array - 'null' items: anyOf: - type: object properties: answer: type: object properties: content: type: - string - 'null' required: - content question: type: object properties: remote_id: type: - string - 'null' title: type: string type: type: string const: TEXT required: - remote_id - title - type required: - answer - question - type: object properties: answer: type: object properties: choice: type: - string - 'null' required: - choice question: type: object properties: remote_id: type: - string - 'null' title: type: string type: type: string const: SINGLE_SELECT required: - remote_id - title - type required: - answer - question - type: object properties: answer: type: object properties: choices: type: array items: type: string default: [] question: type: object properties: remote_id: type: - string - 'null' title: type: string type: type: string const: MULTI_SELECT required: - remote_id - title - type required: - answer - question - type: object properties: answer: type: object properties: checked: type: - boolean - 'null' required: - checked question: type: object properties: remote_id: type: - string - 'null' title: type: string type: type: string const: BOOLEAN required: - remote_id - title - type required: - answer - question - type: object properties: answer: type: object properties: number: type: - number - 'null' format: double minimum: -1.7976931348623157e+308 required: - number question: type: object properties: remote_id: type: - string - 'null' title: type: string type: type: string const: NUMBER required: - remote_id - title - type required: - answer - question - type: object properties: answer: type: object properties: date: type: - string - 'null' format: date-time pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?Z$ required: - date question: type: object properties: remote_id: type: - string - 'null' title: type: string type: type: string const: DATE required: - remote_id - title - type required: - answer - question - type: object properties: answer: type: object properties: raw: type: 'null' description: We pass the original question data along so you can handle it. question: type: object properties: remote_id: type: - string - 'null' title: type: string type: type: string const: UNKNOWN description: When we're not able to map a specific question type yet, we will return this type. Every `UNKNOWN` question will also be parsed and unified by us at some point. required: - remote_id - title - type required: - answer - question default: [] description: A list of answers to screening questions. The screening answer type `FILE` is currently unsupported. custom_fields: type: - object - 'null' additionalProperties: true description: A key-value store of fields not covered by the schema. [Read more](/custom-fields) integration_fields: type: array items: type: object properties: id: type: string description: The globally unique ID of this object. key: type: string description: The key of the field in the remote system. type: type: string enum: - DEFAULT - CUSTOM description: '- `DEFAULT`: static fields in the remote system. - `CUSTOM`: fields that are created/editable by the user.' value: type: 'null' description: The field's value. label: type: - string - 'null' description: The label of the field. (not always available) required: - id - key - type - label description: An array of selected passthrough integration fields. [Read more](/integration-fields) examples: - - id: 5NVFhMpB9Ah6by44tzNjZLyE key: firstName type: DEFAULT value: Frank label: First Name - id: 8nuajYpoRd5GnxEQaaWKUDYQ key: customTshirtSize type: CUSTOM value: XL label: T-Shirt Size remote_url: type: - string - 'null' format: uri description: URL to the application in the source ATS system. When embedding this in your system, please consider that not for all ATS a dedicated application URL is available, so you might need to fall back to the candidate URL. changed_at: description: The timestamp when this specific record was last modified. This field only updates when properties directly on this record change, NOT when related or nested models change. For filtering that considers nested data changes, use the `updated_after` parameter which will return records when either the record itself OR its related models have been updated. type: string format: date-time externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString remote_deleted_at: description: The date and time the object was deleted in the remote system. Objects are automatically marked as deleted when Kombo can't retrieve them from the remote system anymore. Kombo will also anonymize entries 14 days after they disappear. type: - string - 'null' format: date-time externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString remote_created_at: description: The date and time the object was created in the remote system. type: - string - 'null' format: date-time externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString remote_updated_at: description: A timestamp retrieved from the remote system, describing when the resource was last updated. type: - string - 'null' format: date-time externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString remote_data: type: - object - 'null' additionalProperties: true description: 'Includes the data fetched from the remote system. Please be aware that including this in you scope config might violate other scopes that are set. Remote data always has the endpoint path that we got the data from as the top level key. For example, it could look like: `{ "/companies": { ... }}` This is not available on all plans. Reach out to Kombo if you need it.' current_stage: type: - object - 'null' properties: id: type: string description: The globally unique ID of this object generated by Kombo. We recommend using this as a stable primary key for syncing. name: type: - string - 'null' description: The application stage name. For example, "Initial Screening". remote_id: type: - string - 'null' description: The raw ID of the object in the remote system. We don't recommend using this as a primary key on your side as it might sometimes be compromised of multiple identifiers if a system doesn't provide a clear primary key. index: type: - integer - 'null' format: int64 examples: - 2 required: - id - name - remote_id - index job: type: - object - 'null' properties: id: type: string description: The globally unique ID of this object generated by Kombo. We recommend using this as a stable primary key for syncing. name: type: - string - 'null' description: Title of the job. remote_id: type: string description: The raw ID of the object in the remote system. We don't recommend using this as a primary key on your side as it might sometimes be compromised of multiple identifiers if a system doesn't provide a clear primary key. required: - id - name - remote_id examples: - id: H5daSm8e85Dmvmne3wLeCPhX name: Backend Engineer remote_id: '32' candidate: type: - object - 'null' properties: id: type: string description: The globally unique ID of this object generated by Kombo. We recommend using this as a stable primary key for syncing. remote_id: type: string description: The raw ID of the object in the remote system. We don't recommend using this as a primary key on your side as it might sometimes be compromised of multiple identifiers if a system doesn't provide a clear primary key. first_name: type: - string - 'null' description: First name of the candidate. last_name: type: - string - 'null' description: Last name of the candidate. company: type: - string - 'null' description: The current company of the candidate. title: type: - string - 'null' description: The current job title of the candidate. confidential: type: - boolean - 'null' description: Whether the candidate’s profile is confidential in the ATS. source: type: - string - 'null' description: The hiring source of the candidate. If you're a job board or recruiting service, you can use this to validate which candidates applied through your service and ensure that the correct referral compensation is paid out. phone_numbers: type: - array - 'null' items: type: object properties: phone_number: type: string type: type: - string - 'null' description: Kombo exposes type information through this field. If we don't get any information from the tool, we will set this to `null`. required: - phone_number default: [] description: A list of phone numbers of the candidate. email_addresses: type: - array - 'null' items: type: object properties: email_address: type: - string - 'null' pattern: ^(?!\.)(?!.*\.\.)([\w'+-.]*)[\w+-]@([\da-z][\da-z-]*\.)+[a-z]{2,}$ type: type: - string - 'null' description: Kombo exposes type information through this field. If we don't get any information from the tool, we will set this to `null`. required: - type default: [] description: A list of email addresses of the candidate with an optional type. If an email address is invalid, it will be filtered out. social_media: type: - array - 'null' items: type: object properties: link: type: - string - 'null' type: type: - string - 'null' username: type: - string - 'null' default: [] description: List of social media accounts of the candidate. location: type: - object - 'null' properties: city: type: - string - 'null' country: type: - string - 'null' description: Contains the ISO2 country code if possible. If not, it contains the original value. raw: type: - string - 'null' description: If we have address data, this is filled with the raw address string. state: type: - string - 'null' street_1: type: - string - 'null' description: If we can parse the address data, this field contains the first part of the street information. street_2: type: - string - 'null' zip_code: type: - string - 'null' description: Location of the candidate. custom_fields: type: - object - 'null' additionalProperties: true description: A key-value store of fields not covered by the schema. [Read more](/custom-fields) integration_fields: type: array items: type: object properties: id: type: string description: The globally unique ID of this object. key: type: string description: The key of the field in the remote system. type: type: string enum: - DEFAULT - CUSTOM description: '- `DEFAULT`: static fields in the remote system. - `CUSTOM`: fields that are created/editable by the user.' value: type: 'null' description: The field's value. label: type: - string - 'null' description: The label of the field. (not always available) required: - id - key - type - label description: An array of selected passthrough integration fields. [Read more](/integration-fields) examples: - - id: 5NVFhMpB9Ah6by44tzNjZLyE key: firstName type: DEFAULT value: Frank label: First Name - id: 8nuajYpoRd5GnxEQaaWKUDYQ key: customTshirtSize type: CUSTOM value: XL label: T-Shirt Size remote_url: type: - string - 'null' format: uri description: URL to the candidate profile in the source ATS system. When embedding this in your system, please consider that not for all ATS a dedicated candidate profile URL is available, so you might need to fall back to the application URL. remote_created_at: description: The date and time the object was created in the remote system. type: - string - 'null' format: date-time externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString remote_updated_at: description: A timestamp retrieved from the remote system, describing when the resource was last updated. type: - string - 'null' format: date-time externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString remote_data: type: - object - 'null' additionalProperties: true description: 'Includes the data fetched from the remote system. Please be aware that including this in you scope config might violate other scopes that are set. Remote data always has the endpoint path that we got the data from as the top level key. For example, it could look like: `{ "/companies": { ... }}` This is not available on all plans. Reach out to Kombo if you need it.' changed_at: description: The timestamp when this specific record was last modified. This field only updates when properties directly on this record change, NOT when related or nested models change. For filtering that considers nested data changes, use the `updated_after` parameter which will return records when either the record itself OR its related models have been updated. type: string format: date-time externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString remote_deleted_at: description: The date and time the object was deleted in the remote system. Objects are automatically marked as deleted when Kombo can't retrieve them from the remote system anymore. Kombo will also anonymize entries 14 days after they disappear. type: - string - 'null' format: date-time externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString tags: type: array items: type: object properties: id: type: string description: The globally unique ID of this object generated by Kombo. We recommend using this as a stable primary key for syncing. name: type: - string - 'null' remote_id: type: - string - 'null' description: The raw ID of the object in the remote system. We don't recommend using this as a primary key on your side as it might sometimes be compromised of multiple identifiers if a system doesn't provide a clear primary key. required: - id - name - remote_id examples: - id: 26vafvWSRmbhNcxJYqjCzuJg name: High Potential remote_id: '32' required: - id - remote_id - first_name - last_name - company - title - confidential - source - custom_fields - integration_fields - remote_url - remote_created_at - remote_updated_at - remote_data - changed_at - remote_deleted_at - tags required: - id - remote_id - outcome - rejection_reason_name - rejected_at - current_stage_id - job_id - candidate_id - custom_fields - integration_fields - remote_url - changed_at - remote_deleted_at - remote_created_at - remote_updated_at - remote_data - current_stage - job - candidate examples: - id: H77fDF8uvEzGNPRubiz5DvQ7 remote_id: '32' outcome: PENDING rejection_reason_name: null rejected_at: null current_stage_id: 5J7L4b48wBfffYwek9Az9pkM job_id: H5daSm8e85Dmvmne3wLeCPhX candidate_id: 26vafvWSRmbhNcxJYqjCzuJg screening_question_answers: [] custom_fields: {} integration_fields: [] remote_url: https://example.com/applications/32 changed_at: '2022-08-07T14:01:29.196Z' remote_deleted_at: null remote_created_at: '2022-04-02T00:00:00.000Z' remote_updated_at: '2022-04-04T00:00:00.000Z' remote_data: null current_stage: id: 5J7L4b48wBfffYwek9Az9pkM name: Interview remote_id: '5' index: 2 job: id: H5daSm8e85Dmvmne3wLeCPhX name: Head of Integrations remote_id: '1' candidate: id: 26vafvWSRmbhNcxJYqjCzuJg remote_id: '32' first_name: John last_name: Doe company: Acme, Inc. title: Head of Marketing confidential: false source: Employee Referral phone_numbers: - phone_number: +1-541-754-3010 type: HOME email_addresses: - email_address: john.doe@example.com type: PRIVATE social_media: - link: https://www.youtube.com/watch?v=dQw4w9WgXcQ type: YOUTUBE username: null location: city: Berlin country: DE raw: Berlin, Germany state: Berlin street_1: Lohmühlenstraße 65 street_2: null zip_code: '12435' custom_fields: {} integration_fields: [] remote_url: https://example.com/candidates/32 remote_created_at: '2022-04-02T00:00:00.000Z' remote_updated_at: '2022-04-04T00:00:00.000Z' remote_data: null changed_at: '2022-04-04T00:00:00.000Z' remote_deleted_at: null tags: - id: 7DHDky9zk4qnWkycuuQjFXNh name: Fast Learner remote_id: '1' warnings: type: array items: type: object properties: message: type: string required: - message description: These are the interaction warnings that are shown in the dashboard. They are meant to provide debug information to you. We recommend logging them to the console. required: - status - data - warnings GetAtsTagsParameterUpdatedAfter: description: 'Filter the entries based on the modification date in format `YYYY-MM-DDTHH:mm:ss.sssZ`. Returns records where either the record itself **OR** its nested data has been updated since this timestamp, even if the record''s own `changed_at` field remains unchanged. If you want to track entry deletion, also set the `include_deleted=true` query parameter, because otherwise, deleted entries will be hidden. For more details, see [Understanding changed_at vs updated_after Behavior](https://docs.kombo.dev/ats/getting-started/fetching-data#understanding-changed_at-vs-updated_after-behavior). For this endpoint, only changes to the returned record itself are considered.' type: string format: date-time pattern: ^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d+)?)?Z?$ externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString GetAtsOffersPositiveResponse: type: object properties: status: type: string const: success data: type: object properties: next: type: - string - 'null' description: Cursor string that can be passed to the `cursor` query parameter to get the next page. If this is `null`, then there are no more pages. results: type: array items: type: object properties: id: type: string description: The globally unique ID of this object generated by Kombo. We recommend using this as a stable primary key for syncing. remote_id: type: - string - 'null' description: The raw ID of the object in the remote system. We don't recommend using this as a primary key on your side as it might sometimes be compromised of multiple identifiers if a system doesn't provide a clear primary key. status: type: - string - 'null' enum: - ACCEPTED - DECLINED - SENT - APPROVED - DRAFT - ABANDONED description: 'The offer’s current status. The usual flow of statuses is as follows: `DRAFT` -> `APPROVED` -> `SENT` -> `ACCEPTED` or `DECLINED`. Please note that not all systems will expose all statuses. For example, most systems do not include the `APPROVED` status - `ACCEPTED`: The offer was accepted by the candidate. - `DECLINED`: The offer was declined by the candidate. - `SENT`: The offer was sent to the candidate. - `APPROVED`: The draft was approved. - `DRAFT`: The offer is a draft and has not yet been sent to the candidate. - `ABANDONED`: The offer has expired or is no longer valid and should not be considered. ' employment_start_date: description: The date when the employment described by the offer starts. Can be in the past or future. type: - string - 'null' format: date-time externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString application_id: type: - string - 'null' description: The Kombo ID of the application this interview belongs to. The ID can be used to retrieve the application from the `get applications` endpoint. custom_fields: type: - object - 'null' additionalProperties: true description: A key-value store of fields not covered by the schema. [Read more](/custom-fields) integration_fields: type: array items: type: object properties: id: type: string description: The globally unique ID of this object. key: type: string description: The key of the field in the remote system. type: type: string enum: - DEFAULT - CUSTOM description: '- `DEFAULT`: static fields in the remote system. - `CUSTOM`: fields that are created/editable by the user.' value: type: 'null' description: The field's value. label: type: - string - 'null' description: The label of the field. (not always available) required: - id - key - type - label description: An array of selected passthrough integration fields. [Read more](/integration-fields) examples: - - id: 5NVFhMpB9Ah6by44tzNjZLyE key: firstName type: DEFAULT value: Frank label: First Name - id: 8nuajYpoRd5GnxEQaaWKUDYQ key: customTshirtSize type: CUSTOM value: XL label: T-Shirt Size changed_at: description: The timestamp when this specific record was last modified. This field only updates when properties directly on this record change, NOT when related or nested models change. For filtering that considers nested data changes, use the `updated_after` parameter which will return records when either the record itself OR its related models have been updated. type: string format: date-time externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString remote_deleted_at: description: The date and time the object was deleted in the remote system. Objects are automatically marked as deleted when Kombo can't retrieve them from the remote system anymore. Kombo will also anonymize entries 14 days after they disappear. type: - string - 'null' format: date-time externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString remote_created_at: description: The date and time the object was created in the remote system. type: - string - 'null' format: date-time externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString remote_updated_at: description: A timestamp retrieved from the remote system, describing when the resource was last updated. type: - string - 'null' format: date-time externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString remote_data: type: - object - 'null' additionalProperties: true description: 'Includes the data fetched from the remote system. Please be aware that including this in you scope config might violate other scopes that are set. Remote data always has the endpoint path that we got the data from as the top level key. For example, it could look like: `{ "/companies": { ... }}` This is not available on all plans. Reach out to Kombo if you need it.' application: type: - object - 'null' properties: candidate: type: - object - 'null' properties: id: type: string description: The globally unique ID of this object generated by Kombo. We recommend using this as a stable primary key for syncing. remote_id: type: string description: The raw ID of the object in the remote system. We don't recommend using this as a primary key on your side as it might sometimes be compromised of multiple identifiers if a system doesn't provide a clear primary key. first_name: type: - string - 'null' description: First name of the candidate. last_name: type: - string - 'null' description: Last name of the candidate. email_addresses: type: - array - 'null' items: type: object properties: email_address: type: - string - 'null' pattern: ^(?!\.)(?!.*\.\.)([\w'+-.]*)[\w+-]@([\da-z][\da-z-]*\.)+[a-z]{2,}$ type: type: - string - 'null' description: Kombo exposes type information through this field. If we don't get any information from the tool, we will set this to `null`. required: - type default: [] description: A list of email addresses of the candidate with an optional type. If an email address is invalid, it will be filtered out. required: - id - remote_id - first_name - last_name examples: - id: 26vafvWSRmbhNcxJYqjCzuJg remote_id: '32' first_name: John last_name: Doe email_addresses: - email_address: john.doe@example.com type: PRIVATE job: type: - object - 'null' properties: id: type: string description: The globally unique ID of this object generated by Kombo. We recommend using this as a stable primary key for syncing. remote_id: type: string description: The raw ID of the object in the remote system. We don't recommend using this as a primary key on your side as it might sometimes be compromised of multiple identifiers if a system doesn't provide a clear primary key. name: type: - string - 'null' description: Title of the job. required: - id - remote_id - name examples: - id: H5daSm8e85Dmvmne3wLeCPhX remote_id: '32' name: Backend Engineer required: - candidate - job required: - id - remote_id - status - employment_start_date - application_id - custom_fields - integration_fields - changed_at - remote_deleted_at - remote_created_at - remote_updated_at - remote_data - application required: - next - results examples: - next: eyJwYWdlIjoxMiwibm90ZSI6InRoaXMgaXMganVzdCBhbiBleGFtcGxlIGFuZCBub3QgcmVwcmVzZW50YXRpdmUgZm9yIGEgcmVhbCBjdXJzb3IhIn0= results: - id: 76bab8LKuFtqpZ89mofCPMHX remote_id: '6' status: ACCEPTED employment_start_date: '2022-08-07T14:01:29.196Z' application_id: BAkbueBMBusj9Bg7L1Wps3AR custom_fields: {} integration_fields: [] changed_at: '2022-08-07T14:01:29.196Z' remote_deleted_at: null remote_created_at: '2022-08-07T14:01:29.196Z' remote_updated_at: '2022-08-07T14:01:29.196Z' remote_data: null application: candidate: id: 26vafvWSRmbhNcxJYqjCzuJg remote_id: '32' first_name: John last_name: Doe email_addresses: - email_address: john.doe@example.com type: PRIVATE job: id: H5daSm8e85Dmvmne3wLeCPhX remote_id: '32' name: Backend Engineer required: - status - data PatchAtsApplicationsApplicationIdInterviewsPositiveResponse: type: object properties: status: type: string const: success data: type: object required: - status - data GetAtsJobsParameterCursor: type: string description: An optional cursor string used for pagination. This can be retrieved from the `next` property of the previous page response. GetAtsCandidatesParameterLastName: type: string description: Filter candidates by last name. This filter is case-insensitive and matches the exact last name. Fuzzy matching might be enabled in the future, so consider this for your implementation. GetAtsJobsParameterIncludeDeleted: type: string enum: - 'true' - 'false' default: 'false' description: By default, deleted entries are not returned. Use the `include_deleted` query param to include deleted entries too. GetAtsApplicationsApplicationIdAttachmentsParameterApplicationId: type: string description: The Kombo ID of the application you want to obtain attachments for. GetAtsApplicationsParameterRemoteIds: type: string description: Filter by a comma-separated list of remote IDs. GetAtsInterviewsParameterIncludeDeleted: type: string enum: - 'true' - 'false' default: 'false' description: By default, deleted entries are not returned. Use the `include_deleted` query param to include deleted entries too. GetAtsUsersParameterUpdatedAfter: description: 'Filter the entries based on the modification date in format `YYYY-MM-DDTHH:mm:ss.sssZ`. Returns records where either the record itself **OR** its nested data has been updated since this timestamp, even if the record''s own `changed_at` field remains unchanged. If you want to track entry deletion, also set the `include_deleted=true` query parameter, because otherwise, deleted entries will be hidden. For more details, see [Understanding changed_at vs updated_after Behavior](https://docs.kombo.dev/ats/getting-started/fetching-data#understanding-changed_at-vs-updated_after-behavior). For this endpoint, `updated_after` matches when the returned record changed, or when related data changed as described below. | Path | Added/Removed | Linked Record | | --- | --- | --- | | `system_role_assignment` | ✓ Yes | ✓ Yes | _**Added/Removed**: Whether adding or removing entries from this list triggers an update (n/a for single records). **Linked Record**: Whether changes to the linked record itself trigger an update._' type: string format: date-time pattern: ^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d+)?)?Z?$ externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString PutAtsApplicationsApplicationIdStagePositiveResponse: type: object properties: status: type: string const: success data: type: object examples: - {} warnings: type: array items: type: object properties: message: type: string required: - message description: These are the interaction warnings that are shown in the dashboard. They are meant to provide debug information to you. We recommend logging them to the console. required: - status - data - warnings GetAtsApplicationsParameterRemoteCreatedAfter: description: Filter applications by the day they were created in the remote system. This allows you to get applications that were created on or after a certain day. type: string format: date-time pattern: ^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d+)?)?Z?$ externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString PutAtsApplicationsApplicationIdStageParameterApplicationId: type: string description: The Kombo ID of the application you want to move to a different stage. GetAtsRejectionReasonsParameterIds: type: string description: Filter by a comma-separated list of IDs such as `222k7eCGyUdgt2JWZDNnkDs3,B5DVmypWENfU6eMe6gYDyJG3`. GetAtsRejectionReasonsPositiveResponse: type: object properties: status: type: string const: success data: type: object properties: next: type: - string - 'null' description: Cursor string that can be passed to the `cursor` query parameter to get the next page. If this is `null`, then there are no more pages. results: type: array items: type: object properties: id: type: string description: The globally unique ID of this object generated by Kombo. We recommend using this as a stable primary key for syncing. remote_id: type: string description: The raw ID of the object in the remote system. We don't recommend using this as a primary key on your side as it might sometimes be compromised of multiple identifiers if a system doesn't provide a clear primary key. name: type: - string - 'null' description: The title of the rejection reason. changed_at: description: The timestamp when this specific record was last modified. This field only updates when properties directly on this record change, NOT when related or nested models change. For filtering that considers nested data changes, use the `updated_after` parameter which will return records when either the record itself OR its related models have been updated. type: string format: date-time externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString remote_deleted_at: description: The date and time the object was deleted in the remote system. Objects are automatically marked as deleted when Kombo can't retrieve them from the remote system anymore. Kombo will also anonymize entries 14 days after they disappear. type: - string - 'null' format: date-time externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString remote_data: type: - object - 'null' additionalProperties: true description: 'Includes the data fetched from the remote system. Please be aware that including this in you scope config might violate other scopes that are set. Remote data always has the endpoint path that we got the data from as the top level key. For example, it could look like: `{ "/companies": { ... }}` This is not available on all plans. Reach out to Kombo if you need it.' required: - id - remote_id - name - changed_at - remote_deleted_at - remote_data examples: - id: 76bab8LKuFtqpZ89mofCPMHX remote_id: '6' name: Not a fit changed_at: '2022-08-07T14:01:29.196Z' remote_deleted_at: null remote_data: null required: - next - results examples: - next: eyJwYWdlIjoxMiwibm90ZSI6InRoaXMgaXMganVzdCBhbiBleGFtcGxlIGFuZCBub3QgcmVwcmVzZW50YXRpdmUgZm9yIGEgcmVhbCBjdXJzb3IhIn0= results: - id: 76bab8LKuFtqpZ89mofCPMHX remote_id: '6' name: Not a fit changed_at: '2022-08-07T14:01:29.196Z' remote_deleted_at: null remote_data: null required: - status - data GetAtsInterviewsParameterRemoteIds: type: string description: Filter by a comma-separated list of remote IDs. PostAtsCandidatesRequestBody: type: object properties: candidate: type: object properties: first_name: type: string description: The first name of the candidate. last_name: type: string description: The last name of the candidate. email_address: type: string description: The primary email address this application will be created with. format: email additional_email_addresses: type: array items: type: object properties: type: type: string enum: - PERSONAL - WORK - OTHER email_address: type: string format: email required: - type - email_address company: type: string description: The company where the candidate is currently working. title: type: string description: The current job title of the candidate. phone_number: type: string description: The phone number of the candidate. additional_phone_numbers: type: array items: type: object properties: type: type: string enum: - PERSONAL - WORK - OTHER phone_number: type: string required: - type - phone_number location: type: object properties: city: type: string country: type: string pattern: ^[A-Z]{2}$ description: The uppercase two-letter ISO country (e.g., `DE`). For systems that use codes in formats other than `ISO 3166-1 alpha-2`, Kombo transforms the ISO Codes to the appropriate value. state: type: string street_1: type: string zip_code: type: string required: - country description: The location of the candidate. gender: type: string enum: - MALE - FEMALE - OTHER description: The gender of the candidate. Must be one of `MALE`, `FEMALE`, or `OTHER`. availability_date: description: The date the candidate is available to start working. type: string format: date-time pattern: ^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d+)?)?Z?$ externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString salary_expectations: type: object properties: period: type: string enum: - MONTH - YEAR description: The period of the salary expectations. Must be one of `MONTH` or `YEAR`. amount: type: number format: double minimum: -1.7976931348623157e+308 description: The amount of the salary expectations. required: - period - amount description: The salary expectations of the applicant. We will automatically convert the amount to a format that is suitable for the ATS you are using. For example, if you are using monthly salary expectations, we will convert the amount to a yearly salary if the ATS expects yearly salary expectations. social_links: type: array items: type: object properties: url: type: string format: uri required: - url default: [] description: A list of social media links of the candidate. The links must be valid URLs. required: - first_name - last_name - email_address application: type: object properties: job_id: type: string description: The Kombo ID or Remote ID of the Job this candidate should apply to. If you want to use the ID of the integrated system (remote_id) you need to prefix the ID with "remote:". You can use the remote ID if you do not want to sync jobs. stage_id: type: string description: Stage this candidate should be in. If left out, the default stage for this job will be used. required: - job_id description: Currently, every candidate has one application. If you are interested in talent pools, please contact Kombo. screening_question_answers: type: array items: type: object properties: question_id: type: string description: ID of the question returned by the Kombo API. We'll report a warning in the logs if the question can't be found on the job. answer: anyOf: - type: string description: Answer to a `TEXT` question or the option ID of the answer to a `SINGLE_SELECT` question. - type: boolean description: Answer to a `BOOLEAN` question. - type: number format: double minimum: -1.7976931348623157e+308 description: Answer to a `NUMBER` question. - type: array items: type: string description: Answer to a `MULTI_SELECT` question. The array elements are the IDs of the selected options. - description: Answer to a `DATE` question as an ISO 8601 date string. type: string format: date-time pattern: ^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d+)?)?Z?$ externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString - type: object properties: name: type: string description: File name of the file you want to upload. We recommend providing something human-readable with a valid file extension (like `Resume.pdf`), as this might be shown in your customer's system. content_type: type: string pattern: ^[\w.-]+\/[\w.-]+$ description: 'Content/MIME type of the file (e.g., `application/pdf`). If you provide `data`, this is required. If you provide `data_url`, this is optional and we''ll attempt to use the `Content-Type` header of the response. **Note:** Please validate that the content type you provide is actually meaningful (and not something generic like [`application/octet-stream`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/MIME_types#applicationoctet-stream)). Especially when using object storage (like AWS S3), it''s easy to accidentally discard the content types of user-provided files, so make sure to explicitly persist them when processing uploads from your users (see guides for [AWS](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingMetadata.html#SysMetadata), [Google Cloud](https://cloud.google.com/storage/docs/metadata#content-type), and [Azure](https://learn.microsoft.com/en-us/rest/api/storageservices/put-blob#request-headers-all-blob-types)).' data_url: type: string format: uri description: 'URL to the file you want to upload that can be accessed without authentication headers. We will download the content immediately when receiving the request, so the URL can be short-lived. If you''re using an object storage provider (like AWS S3), we strongly recommend providing a signed URL for secure access (see guides for [AWS](https://docs.aws.amazon.com/AmazonS3/latest/userguide/ShareObjectPreSignedURL.html), [Google Cloud](https://cloud.google.com/storage/docs/access-control/signed-urls), and [Azure](https://learn.microsoft.com/en-us/azure/storage/common/storage-sas-overview)). **Note:** You must provide either this or `data_url`. We recommend `data_url` over `data` for most cases.' data: type: string description: 'Base64-encoded contents of the file you want to upload. **Note:** You must provide either this or `data_url`. We recommend `data_url` over `data` for most cases.' required: - name description: Answer to a `FILE` question. description: 'Answer to a question. This will be validated based on the question format and throw an error if the answer is invalid. Here is a description of each question type and the required answer format: `TEXT` - Simply provide a "string" answer. `SINGLE_SELECT` - Provide the ID of the answer as a string. `MULTI_SELECT` - Provide a string array containing the question IDs of the selected options. `BOOLEAN` - Either `true` or `false`. `NUMBER` - A number. `DATE` - Provide the answer as an ISO 8601 date string. `FILE` - Please select Option 6 in the dropdown above to see the required format.' required: - question_id - answer description: 'Array of answers to screening questions. Currently, not all question types are supported, and unsupported ones will not be submitted. The available questions for a job can be retrieved from the get jobs endpoint. The answers will be validated based on the format of the questions. Make sure to follow this schema to avoid errors.' examples: - - question_id: D8yPrjXXvA2XeBksTmrVvKSn answer: 'Yes' attachments: type: array items: type: object properties: name: type: string description: File name of the file you want to upload. We recommend providing something human-readable with a valid file extension (like `Resume.pdf`), as this might be shown in your customer's system. content_type: type: string pattern: ^[\w.-]+\/[\w.-]+$ description: 'Content/MIME type of the file (e.g., `application/pdf`). If you provide `data`, this is required. If you provide `data_url`, this is optional and we''ll attempt to use the `Content-Type` header of the response. **Note:** Please validate that the content type you provide is actually meaningful (and not something generic like [`application/octet-stream`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/MIME_types#applicationoctet-stream)). Especially when using object storage (like AWS S3), it''s easy to accidentally discard the content types of user-provided files, so make sure to explicitly persist them when processing uploads from your users (see guides for [AWS](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingMetadata.html#SysMetadata), [Google Cloud](https://cloud.google.com/storage/docs/metadata#content-type), and [Azure](https://learn.microsoft.com/en-us/rest/api/storageservices/put-blob#request-headers-all-blob-types)).' data_url: type: string format: uri description: 'URL to the file you want to upload that can be accessed without authentication headers. We will download the content immediately when receiving the request, so the URL can be short-lived. If you''re using an object storage provider (like AWS S3), we strongly recommend providing a signed URL for secure access (see guides for [AWS](https://docs.aws.amazon.com/AmazonS3/latest/userguide/ShareObjectPreSignedURL.html), [Google Cloud](https://cloud.google.com/storage/docs/access-control/signed-urls), and [Azure](https://learn.microsoft.com/en-us/azure/storage/common/storage-sas-overview)). **Note:** You must provide either this or `data_url`. We recommend `data_url` over `data` for most cases.' data: type: string description: 'Base64-encoded contents of the file you want to upload. **Note:** You must provide either this or `data_url`. We recommend `data_url` over `data` for most cases.' type: type: string enum: - CV - COVER_LETTER - OTHER description: Type of the attachment in the ATS. This may affect where the uploaded file will be shown in your customer's system. required: - name - type default: [] description: An array of the attachments you would like upload. source: type: object properties: name: type: string description: Name of the source (e.g., `"Example Job Board"`). unified_key: type: string id: type: string description: '**(⚠️ Deprecated - Use [automatic source writing](/ats/features/application-attribution#automatic-attribution) instead)** Optional source information that will be attached to the candidate. If you''re a job board or recruiting service, you can use this to make sure your customers can see which candidates came from you. This is deprecated because writing sources requires users to do some setup in most ATSs.' sourced_by: type: object properties: user_id: type: string description: The Kombo ID or Remote ID of the User. Use the Kombo ID directly, or prefix the remote ID with "remote:" to reference the user by their ID in the remote system. required: - user_id description: 'Credit the recruiter or team member who sourced this candidate. While the `source` field tracks the channel/platform (e.g., "Awesome Jobboard"), the `sourced_by` field tracks the individual person responsible for finding the candidate.' gdpr_consent: type: object properties: expires_at: description: Until when the candidate has granted the company they're applying to permission to process their personal data. type: string format: date-time pattern: ^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d+)?)?Z?$ externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString given: type: boolean description: Whether the candidate has given consent. description: Optional GDPR consent information required in some jurisdictions (like the Czech Republic or Slovakia). remote_fields: allOf: - type: object properties: successfactors: type: object properties: Candidate: type: object additionalProperties: true description: Fields that we will pass through to SuccessFactor's `Candidate` object. JobApplication: type: object additionalProperties: true description: Fields that we will pass through to SuccessFactor's `JobApplication` object. copyJobApplicationAttachments: type: boolean description: If set to true, we will copy custom attachments from the JobApplication to the Candidate. update_existing_candidate: type: - boolean - 'null' description: When the candidate already exists, whether to update the Candidate with the remote fields found under the Candidate entity. description: Fields specific to SAP SuccessFactors. personio: type: object properties: application: type: object additionalProperties: true description: Fields that we will pass through to Personio's `application` object. description: Fields specific to Personio. talentsoft: type: object properties: applicant: type: object additionalProperties: true description: Fields that we will pass through to TalentSoft's `applicant` object. application: type: object additionalProperties: true description: Fields that we will pass through to TalentSoft's `application` object. description: Fields specific to TalentSoft. teamtailor: type: object properties: candidate: type: object additionalProperties: true description: Fields that we will pass through to Teamtailor's `Candidate` object. application: type: object properties: attributes: type: object additionalProperties: true description: Fields that we will pass through to Teamtailor's attributes section `Job application` object. greenhouse: type: object properties: candidate: type: object additionalProperties: true description: Fields that we will pass through to Greenhouse's `Candidate` object. application: type: object additionalProperties: true description: Fields that we will pass through to Greenhouse's `Application` object. description: Fields specific to Greenhouse. lever: type: object properties: candidate: type: object additionalProperties: true description: 'Fields that we will pass through to Lever''s `Candidate` object. Note: make sure to submit the keys and values in the correct form data format.' description: Fields specific to Lever. workable: type: object properties: candidate: type: object additionalProperties: true description: Fields that we will pass through to Workable's `Candidate` object. description: Fields specific to Workable. workday: type: object properties: Candidate_Data: type: object properties: Name_Detail_Data: type: object properties: Middle_Name: type: string description: The candidate's middle name Social_Suffix_Reference: type: object properties: Predefined_Name_Component_ID: type: string required: - Predefined_Name_Component_ID description: The WID of the social suffix reference for the candidate Language_Reference: type: object properties: WID: type: string required: - WID description: Used to set the candidate's primary language Job_Application_Data: type: object properties: Job_Applied_To_Data: type: object properties: Global_Personal_Information_Data: type: object properties: Date_of_Birth: type: string Resume_Data: type: object properties: Education_Data: type: array items: type: object properties: School_Name: type: string First_Year_Attended: type: number format: double minimum: -1.7976931348623157e+308 Last_Year_Attended: type: number format: double minimum: -1.7976931348623157e+308 Field_of_Study_Reference: type: object properties: WID: type: string required: - WID Degree_Reference: type: object properties: WID: type: string required: - WID Grade_Average: type: string Skill_Data: type: array items: type: object properties: Skill_Name: type: string Language_Data: type: array items: type: object properties: Language_Reference: type: object properties: WID: type: string Language: type: object properties: Native: type: boolean Language_Ability: type: array items: type: object properties: Language_Ability_Data: type: object properties: Language_Proficiency_Reference: type: object properties: WID: type: string required: - WID Language_Ability_Type_Reference: type: object properties: WID: type: string required: - WID required: - Language_Ability Experience_Data: type: array items: type: object properties: Company_Name: type: string Title: type: string Location: type: string Start_Date: description: YYYY-MM-DDTHH:mm:ss.sssZ type: string format: date-time pattern: ^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d+)?)?Z?$ externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString End_Date: description: YYYY-MM-DDTHH:mm:ss.sssZ type: string format: date-time pattern: ^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d+)?)?Z?$ externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString Currently_Work_Here: type: boolean Description: type: string required: - Company_Name - Title - Start_Date Contact_Data: type: object properties: Location_Data: type: object properties: Address_Line_1: type: string Address_Line_2: type: string Region_Subdivision_1: type: string Country_Region_Reference: type: object properties: Country_Region_ID: type: string required: - Country_Region_ID Country_City_Reference: type: object properties: WID: type: string required: - WID Worker_Reference: type: object properties: WID: type: string Employee_ID: type: string description: Reference to the Worker (employee) to link the candidate to. Provide either WID or Employee_ID. Override_Source_Reference_WID: type: string description: Used to override the automatic source WID. description: Fields specific to Workday. The remote fields schema follows the documentation at https://community.workday.com/sites/default/files/file-hosting/productionapi/Recruiting/v43.0/Put_Candidate.html. Only defined fields are supported, if you need additional field support please reach out to Kombo support. zohorecruit: type: object properties: candidate: type: object additionalProperties: true description: Fields that we will pass through to Zoho Recruit's `Candidate` object. description: Fields specific to Zoho Recruit. bullhorn: type: object properties: candidate: type: object additionalProperties: true description: Fields that we will pass through to Bullhorn's `Candidate` object. job_submission: type: object additionalProperties: true description: Fields that we will pass through to Bullhorn's `JobSubmission` object. description: Fields specific to Bullhorn. smartrecruiters: type: object properties: candidate_with_questions: type: object additionalProperties: true description: '**(⚠️ Deprecated - Use the `candidate` field instead.)** Fields that we will pass through to the SmartRecruiters''s `Candidate` object when created with screening question answers. This API is used: https://developers.smartrecruiters.com/reference/createcandidate-1' candidate_without_questions: type: object additionalProperties: true description: '**(⚠️ Deprecated - Use the `candidate` field instead.)** Fields that we will pass through to the SmartRecruiters''s `Candidate` object when created with screening question answers. This API is used: https://developers.smartrecruiters.com/reference/candidatesaddtojob-1' candidate: type: object additionalProperties: true description: 'Fields that we will pass through to the SmartRecruiters''s `Candidate` object. This API is used: https://developers.smartrecruiters.com/reference/createcandidate-1' consent_decisions: type: object properties: SINGLE: type: boolean SMART_RECRUIT: type: boolean SMART_CRM: type: boolean SMART_MESSAGE_SMS: type: boolean SMART_MESSAGE_WHATSAPP: type: boolean description: 'The consent decisions for the candidate. SmartRecruiters supports two consent models: ''Single'' (use the `SINGLE` key) and ''Separated'' (use `SMART_RECRUIT`, `SMART_CRM`, `SMART_MESSAGE_SMS`, and/or `SMART_MESSAGE_WHATSAPP` keys). When this field is provided, it takes precedence over the `gdpr_consent` field for the `consentDecisions` property. See: https://developers.smartrecruiters.com/docs/partners-post-an-application' description: Fields specific to SmartRecruiters. talentadore: type: object properties: applications: type: object additionalProperties: true description: Fields that we will pass through to the Talentadore's when creating applications. description: Fields specific to Talentadore. guidecom: type: object properties: candidate: type: object additionalProperties: true description: Fields that we will pass through to GuideCom's `Candidate` object. description: Fields specific to GuideCom. dvinci: type: object properties: application: type: object additionalProperties: true description: 'Fields that we will pass through to d.vinci''s application object. This API is used: https://static.dvinci-easy.com/files/d.vinci%20application-apply-api.html#jobs__id__applyApi_post' candidate: type: object additionalProperties: true description: Fields that we will pass through to d.vinci's candidate/application payload as top-level fields (e.g., dateOfBirth). description: Fields specific to d.vinci. hrworks: type: object properties: jobApplication: type: object additionalProperties: true description: 'Fields that we will pass through to HRWorks''s `Job Application` object. This API is used: https://developers.hrworks.de/docs/hrworks-api-v2/53021f035f62d-post-job-applications' description: Fields specific to GuideCom. jobylon: type: object properties: application: type: object properties: message: type: string description: The `message` field of Jobylon's create application endpoint's request body. description: Fields that we will pass through to Jobylon's create application [endpoint](https://developer.jobylon.com/push-api-and-webhooks#-xL0v)'s request body. description: Fields specific to Jobylon. avature: type: object properties: workflow: type: object properties: step: type: object properties: id: type: integer format: int64 description: The ID of the workflow step to assign to the candidate. required: - id description: Fields specific to Avature. recruitee: type: object properties: candidate: type: object properties: cover_letter_text: type: string description: The cover letter text as a string. This will be visible on the main candidate page. Can be provided together with the `cover_letter` attachment, which will end up in a separate `file` section. description: Fields specific to Recruitee. rexx: type: object properties: candidate: type: object additionalProperties: true description: Fields that we will pass through to Rexx's application form fields. description: Fields specific to Rexx. umantis: type: object properties: person: type: object additionalProperties: true description: Fields that we will pass through to Abacus Umantis's "Create a person" endpoint's `attributes` when creating a candidate. description: Fields specific to Abacus Umantis. piloga: type: object properties: candidate: type: object properties: street: type: string description: The street address of the candidate. description: Additional candidate fields for P&I Loga that will be mapped to the application form. description: Fields specific to P&I Loga. pinpoint: type: object properties: candidate: type: object additionalProperties: true description: Fields that we will pass through to Pinpoint's `Candidate` object. description: Fields specific to Pinpoint. covetorest: type: object properties: candidate: type: object properties: mandant: type: number format: double minimum: -1.7976931348623157e+308 description: The mandant field for the candidate in Coveto. description: Additional candidate fields that will be passed to the Coveto candidate creation. description: Fields specific to Coveto REST. description: Additional fields that we will pass through to specific ATS systems. - type: object properties: greenhouse: type: object properties: post_headers: type: object properties: On-Behalf-Of: type: - string - 'null' description: ID of the the user that will show up as having performed the action in Greenhouse. We already pass a value by default, but you can use this to override it. description: Headers we will pass with `POST` requests to Greenhouse. description: Fields specific to Greenhouse. workable: type: object properties: on_behalf_of_user_remote_id: type: string description: The remote ID of the user that will be displayed in the UI as the one that performed the action. description: Workable specific remote fields for ATS actions. description: Additional fields that we will pass through to specific ATS systems. description: Additional fields that we will pass through to specific ATS systems. required: - candidate - application GetAtsOffersParameterPageSize: type: integer format: int64 minimum: 1 maximum: 250 default: 100 description: The number of results to return per page. Maximum is 250. PostAtsApplicationsApplicationIdAttachmentsPositiveResponse: type: object properties: status: type: string const: success data: type: object examples: - {} warnings: type: array items: type: object properties: message: type: string required: - message description: These are the interaction warnings that are shown in the dashboard. They are meant to provide debug information to you. We recommend logging them to the console. required: - status - data - warnings PostAtsApplicationsApplicationIdNotesRequestBody: type: object properties: content: type: string description: UTF-8 content of the note. content_type: type: string enum: - PLAIN_TEXT description: Content type of the note. Currently only `PLAIN_TEXT` is supported. remote_fields: allOf: - type: object properties: teamtailor: type: object properties: user_id: type: string description: ID of the user that created the note. Defaults to the first admin user found. description: Teamtailor specific remote fields for the note. greenhouse: type: object properties: visibility: type: string enum: - admin_only - private - public description: Visibility of the created note. description: Greenhouse specific remote fields for the note. recruitee: type: object properties: visibility: description: Visibility of the created note. is_json: type: boolean description: Whether the note is in a stringified JSON format. If true, content should contain a valid JSON as per the [Recruitee API documentation](https://docs.recruitee.com/reference/candidatesidnotes) (body_json field). If false we add the note as a plain text. description: Recruitee specific remote fields for the note. bullhorn: type: object properties: action: type: string description: The action (or type) associated with a Note. You can find all available note actions in a Bullhorn instance under System Settings > commentActionList. The default action is `Note`. description: Bullhorn specific remote fields for the note. lever: type: object properties: perform_as: type: string description: ID of the Lever user that will show up as having created the note. If not provided, defaults to the user associated with the OAuth token. description: Lever specific remote fields for the note. description: Tool specific remote fields for the note. - type: object properties: greenhouse: type: object properties: post_headers: type: object properties: On-Behalf-Of: type: - string - 'null' description: ID of the the user that will show up as having performed the action in Greenhouse. We already pass a value by default, but you can use this to override it. description: Headers we will pass with `POST` requests to Greenhouse. description: Fields specific to Greenhouse. workable: type: object properties: on_behalf_of_user_remote_id: type: string description: The remote ID of the user that will be displayed in the UI as the one that performed the action. description: Workable specific remote fields for ATS actions. description: Additional fields that we will pass through to specific ATS systems. description: Tool specific remote fields for the note. required: - content - content_type GetAtsApplicationsParameterIncludeDeleted: type: string enum: - 'true' - 'false' default: 'false' description: By default, deleted entries are not returned. Use the `include_deleted` query param to include deleted entries too. PostAtsImportTrackedApplicationPositiveResponse: type: object properties: status: type: string const: success data: type: object properties: id: type: string minLength: 24 maxLength: 24 pattern: ^[1-9A-HJ-NP-Za-km-z]+$ tracked_at: description: YYYY-MM-DDTHH:mm:ss.sssZ type: - string - 'null' format: date-time externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString imported_id: type: object properties: erecruiter: discriminator: propertyName: id_type anyOf: - type: object properties: id_type: type: string const: application_and_job_remote_ids description: Uses the `Api/Applications/ByJob/{jobId}` endpoint to retrieve the relevant application based on the job ID. application_remote_id: type: string job_remote_id: type: string required: - id_type - application_remote_id - job_remote_id - type: object properties: id_type: type: string const: application_and_candidate_remote_ids description: Uses the `Api/Applications/{applicantId}` endpoint to retrieve the relevant application based on the candidate ID. candidate_remote_id: type: string application_remote_id: type: string required: - id_type - candidate_remote_id - application_remote_id successfactors: discriminator: propertyName: id_type oneOf: - type: object properties: id_type: type: string const: application_remote_id description: Uses the `/JobApplication` ODATA endpoint to retrieve the relevant application based on the application ID. application_remote_id: type: string required: - id_type - application_remote_id recruitee: discriminator: propertyName: id_type oneOf: - type: object properties: id_type: type: string const: placement_id description: Uses the `/candidates` endpoint to retrieve all candidates, to find the relevant application based on the placement ID. placement_id: type: string required: - id_type - placement_id greenhouse: discriminator: propertyName: id_type oneOf: - type: object properties: id_type: type: string const: application_id description: Uses the `/applications/{id}` endpoint to retrieve the application. application_id: type: string required: - id_type - application_id onlyfy: discriminator: propertyName: id_type oneOf: - type: object properties: id_type: type: string const: application_id description: Uses the `/v1/application/{id}` endpoint to retrieve the application. application_id: type: string required: - id_type - application_id smartrecruiters: discriminator: propertyName: id_type oneOf: - type: object properties: id_type: type: string const: candidate_and_job_remote_ids description: Uses the `/candidates/{candidateId}/jobs/{jobId}` endpoint to retrieve the application. candidate_remote_id: type: string job_remote_id: type: string required: - id_type - candidate_remote_id - job_remote_id required: - id - tracked_at - imported_id examples: - id: 5wdtQtJei2oVhJKya2V1KZLM tracked_at: '2025-02-11T15:37:37.000Z' imported_id: successfactors: id_type: application_remote_id application_remote_id: '1224042' warnings: type: array items: type: object properties: message: type: string required: - message description: These are the interaction warnings that are shown in the dashboard. They are meant to provide debug information to you. We recommend logging them to the console. required: - status - data - warnings GetAtsApplicationsApplicationIdAttachmentsPositiveResponse: type: object properties: status: type: string const: success data: type: object properties: results: type: array items: type: object properties: type: type: string enum: - CV - COVER_LETTER - OTHER id: type: string remote_id: type: string data_url: type: string file_name: type: string content_type: type: string remote_created_at: description: The date when the attachment was created. type: - string - 'null' format: date-time externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString remote_updated_at: description: The date when the attachment was last updated. type: - string - 'null' format: date-time externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString required: - type - id - remote_id - data_url - file_name - content_type - remote_created_at - remote_updated_at required: - results examples: - results: - type: CV id: EYJjhMQT3LtVKXnTbnRT8s6U remote_id: GUzE666zfyjeoCJX6A8n7wh6 data_url: https://resources.kombo.dev/7yZfKGzWigXxxRTygqAfHvyE file_name: Frank Doe CV.pdf content_type: application/x-pdf remote_created_at: null remote_updated_at: null warnings: type: array items: type: object properties: message: type: string required: - message description: These are the interaction warnings that are shown in the dashboard. They are meant to provide debug information to you. We recommend logging them to the console. required: - status - data - warnings GetAtsApplicationsParameterCurrentStageIds: type: string description: Filter by a comma-separated list of application stage IDs. We will only return applications that are currently in _any_ of the stages. PostAtsApplicationsApplicationIdNotesPositiveResponse: type: object properties: status: type: string const: success data: type: object examples: - {} warnings: type: array items: type: object properties: message: type: string required: - message description: These are the interaction warnings that are shown in the dashboard. They are meant to provide debug information to you. We recommend logging them to the console. required: - status - data - warnings GetAtsApplicationsParameterJobRemoteIds: type: string description: Filter by a comma-separated list of job remote IDs. We will only return applications that are related to _any_ of the jobs. GetAtsJobsParameterEmploymentTypes: type: string description: "Filter by a comma-separated list of `FULL_TIME`, `PART_TIME`, `CONTRACT`, `SEASONAL`, `INTERNSHIP` \n\nLeave this blank to get results matching all values." GetAtsInterviewsParameterCursor: type: string description: An optional cursor string used for pagination. This can be retrieved from the `next` property of the previous page response. GetAtsTagsPositiveResponse: type: object properties: status: type: string const: success data: type: object properties: next: type: - string - 'null' description: Cursor string that can be passed to the `cursor` query parameter to get the next page. If this is `null`, then there are no more pages. results: type: array items: type: object properties: id: type: string description: The globally unique ID of this object generated by Kombo. We recommend using this as a stable primary key for syncing. remote_id: type: - string - 'null' description: The raw ID of the object in the remote system. We don't recommend using this as a primary key on your side as it might sometimes be compromised of multiple identifiers if a system doesn't provide a clear primary key. name: type: - string - 'null' remote_data: type: - object - 'null' additionalProperties: true description: 'Includes the data fetched from the remote system. Please be aware that including this in you scope config might violate other scopes that are set. Remote data always has the endpoint path that we got the data from as the top level key. For example, it could look like: `{ "/companies": { ... }}` This is not available on all plans. Reach out to Kombo if you need it.' changed_at: description: The timestamp when this specific record was last modified. This field only updates when properties directly on this record change, NOT when related or nested models change. For filtering that considers nested data changes, use the `updated_after` parameter which will return records when either the record itself OR its related models have been updated. type: string format: date-time externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString remote_deleted_at: description: The date and time the object was deleted in the remote system. Objects are automatically marked as deleted when Kombo can't retrieve them from the remote system anymore. Kombo will also anonymize entries 14 days after they disappear. type: - string - 'null' format: date-time externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString required: - id - remote_id - name - remote_data - changed_at - remote_deleted_at examples: - id: 26vafvWSRmbhNcxJYqjCzuJg remote_id: '32' name: High Potential remote_data: null changed_at: '2022-08-07T14:01:29.196Z' remote_deleted_at: null required: - next - results examples: - next: eyJwYWdlIjoxMiwibm90ZSI6InRoaXMgaXMganVzdCBhbiBleGFtcGxlIGFuZCBub3QgcmVwcmVzZW50YXRpdmUgZm9yIGEgcmVhbCBjdXJzb3IhIn0= results: - id: 26vafvWSRmbhNcxJYqjCzuJg remote_id: '32' name: High Potential remote_data: null changed_at: '2022-08-07T14:01:29.196Z' remote_deleted_at: null required: - status - data GetAtsApplicationsParameterIgnoreUnsupportedFilters: type: string enum: - 'true' - 'false' default: 'false' description: When set to `true`, filters targeting fields not supported by this integration will be ignored instead of filtering out all results. GetAtsCandidatesCandidateIdAttachmentsParameterCandidateId: type: string description: The Kombo ID of the candidate you want to obtain attachments for. GetAtsApplicationStagesParameterRemoteIds: type: string description: Filter by a comma-separated list of remote IDs. GetAtsInterviewsParameterIgnoreUnsupportedFilters: type: string enum: - 'true' - 'false' default: 'false' description: When set to `true`, filters targeting fields not supported by this integration will be ignored instead of filtering out all results. GetAtsTagsParameterPageSize: type: integer format: int64 minimum: 1 maximum: 250 default: 100 description: The number of results to return per page. Maximum is 250. GetAtsCandidatesParameterRemoteIds: type: string description: Filter by a comma-separated list of remote IDs. GetAtsCandidatesParameterPageSize: type: integer format: int64 minimum: 1 maximum: 250 default: 100 description: The number of results to return per page. Maximum is 250. GetAtsTagsParameterIds: type: string description: Filter by a comma-separated list of IDs such as `222k7eCGyUdgt2JWZDNnkDs3,B5DVmypWENfU6eMe6gYDyJG3`. PostAtsCandidatesCandidateIdAttachmentsRequestBody: type: object properties: attachment: type: object properties: name: type: string description: File name of the file you want to upload. We recommend providing something human-readable with a valid file extension (like `Resume.pdf`), as this might be shown in your customer's system. content_type: type: string pattern: ^[\w.-]+\/[\w.-]+$ description: 'Content/MIME type of the file (e.g., `application/pdf`). If you provide `data`, this is required. If you provide `data_url`, this is optional and we''ll attempt to use the `Content-Type` header of the response. **Note:** Please validate that the content type you provide is actually meaningful (and not something generic like [`application/octet-stream`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/MIME_types#applicationoctet-stream)). Especially when using object storage (like AWS S3), it''s easy to accidentally discard the content types of user-provided files, so make sure to explicitly persist them when processing uploads from your users (see guides for [AWS](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingMetadata.html#SysMetadata), [Google Cloud](https://cloud.google.com/storage/docs/metadata#content-type), and [Azure](https://learn.microsoft.com/en-us/rest/api/storageservices/put-blob#request-headers-all-blob-types)).' data_url: type: string format: uri description: 'URL to the file you want to upload that can be accessed without authentication headers. We will download the content immediately when receiving the request, so the URL can be short-lived. If you''re using an object storage provider (like AWS S3), we strongly recommend providing a signed URL for secure access (see guides for [AWS](https://docs.aws.amazon.com/AmazonS3/latest/userguide/ShareObjectPreSignedURL.html), [Google Cloud](https://cloud.google.com/storage/docs/access-control/signed-urls), and [Azure](https://learn.microsoft.com/en-us/azure/storage/common/storage-sas-overview)). **Note:** You must provide either this or `data_url`. We recommend `data_url` over `data` for most cases.' data: type: string description: 'Base64-encoded contents of the file you want to upload. **Note:** You must provide either this or `data_url`. We recommend `data_url` over `data` for most cases.' type: type: string enum: - CV - COVER_LETTER - OTHER description: Type of the attachment in the ATS. This may affect where the uploaded file will be shown in your customer's system. required: - name - type remote_fields: type: object properties: greenhouse: type: object properties: post_headers: type: object properties: On-Behalf-Of: type: - string - 'null' description: ID of the the user that will show up as having performed the action in Greenhouse. We already pass a value by default, but you can use this to override it. description: Headers we will pass with `POST` requests to Greenhouse. description: Fields specific to Greenhouse. workable: type: object properties: on_behalf_of_user_remote_id: type: string description: The remote ID of the user that will be displayed in the UI as the one that performed the action. description: Workable specific remote fields for ATS actions. description: Additional fields that we will pass through to specific ATS systems. required: - attachment GetAtsJobsPositiveResponse: type: object properties: status: type: string const: success data: type: object properties: next: type: - string - 'null' description: Cursor string that can be passed to the `cursor` query parameter to get the next page. If this is `null`, then there are no more pages. results: type: array items: type: object properties: id: type: string description: The globally unique ID of this object generated by Kombo. We recommend using this as a stable primary key for syncing. remote_id: type: string description: The raw ID of the object in the remote system. We don't recommend using this as a primary key on your side as it might sometimes be compromised of multiple identifiers if a system doesn't provide a clear primary key. name: type: - string - 'null' description: Title of the job. job_code: type: - string - 'null' description: The human readable job code. Some systems expose this as the Requisition Code/ID. description: type: - string - 'null' description: Description of the job. This field is usually returned as HTML. confidential: type: - boolean - 'null' description: '**(⚠️ Deprecated)** It makes more sense to store the visibility of a job in an enum. Therefore, we introduced the `visibility` enum on jobs.' weekly_hours: type: - number - 'null' format: double minimum: -1.7976931348623157e+308 description: The number of hours per week an employee is expected to work. employment_type: anyOf: - type: string enum: - FULL_TIME - PART_TIME - CONTRACT - SEASONAL - INTERNSHIP - type: string description: 'If we can''t find a clear mapping: The original string passed through.' - type: 'null' description: The type of employment contract. In rare cases where can't find a clear mapping, the original string is passed through. status: anyOf: - type: string enum: - OPEN - CLOSED - DRAFT - ARCHIVED - type: string description: 'If we can''t find a clear mapping: The original string passed through.' - type: 'null' description: "The job's current status.\n\n*Note: For any checks (e.g., \"can we publish this job?\"), always evaluate both `status` and `visibility`. For example, a job can be `status=OPEN` with `visibility=INTERNAL`, meaning only existing employees can apply.*\n\n In rare cases where we can’t find a clear mapping, the original string is passed through." visibility: anyOf: - type: string enum: - PUBLIC - INTERNAL - UNLISTED - CONFIDENTIAL - type: string description: 'If we can''t find a clear mapping: The original string passed through.' - type: 'null' description: "Describes the visibility of the job:\n\n- `PUBLIC`: visible to everyone, published on a job board\n- `INTERNAL`: only visible to employees of the company itself\n- `UNLISTED`: anyone can apply but only if they have the link to it\n- `CONFIDENTIAL`: nobody can apply and it's only visible in the ATS to people who were invited to it\n\n*Note: For any checks (e.g., \"can we publish this job?\"), always evaluate both `status` and `visibility`.*\n\n In rare cases where we can’t find a clear mapping, the original string is passed through." category: type: - string - 'null' description: The category of the job (often the job industry). The original string is passed through, for example "Information Technology", "Quality Assurance", "Marketing". department: type: - string - 'null' description: The internal department or team the job belongs to. The original string is passed through, for example "IT/Operations", "Engineering - Platform", "Customer Success". post_url: type: - string - 'null' description: The public job posting URL of the ATS itself. This can be used by external job boards to redirect applicants. experience_level: type: - string - 'null' description: The role's seniority or experience level. The original string is passed through, for example "Mid-Senior Level", "5+ years", "Associate", "IC3". remote_work_status: anyOf: - type: string enum: - REMOTE - HYBRID - TEMPORARY - ON_SITE - type: string description: 'If we can''t find a clear mapping: The original string passed through.' - type: 'null' description: Defines if the job supports remote work and if so, to what extent. salary_amount: type: - number - 'null' format: double minimum: -1.7976931348623157e+308 description: The salary amount in the given currency. salary_amount_from: type: - number - 'null' format: double minimum: -1.7976931348623157e+308 description: The lower bound of the salary range. salary_amount_to: type: - number - 'null' format: double minimum: -1.7976931348623157e+308 description: The upper bound of the salary range. salary_currency: type: - string - 'null' description: Salary currency usually returned in [ISO 4217 currency codes](https://www.iso.org/iso-4217-currency-codes.html). salary_period: anyOf: - type: string enum: - YEAR - MONTH - TWO_WEEKS - WEEK - DAY - HOUR - type: string description: 'If we can''t find a clear mapping: The original string passed through.' - type: 'null' description: The period of time over which the salary amount is paid (not equal to the pay frequency). In rare cases where we can’t find a clear mapping, the original string is passed through. location: type: - object - 'null' properties: city: type: - string - 'null' country: type: - string - 'null' description: Contains the ISO2 country code if possible. If not, it contains the original value. raw: type: - string - 'null' description: If we have address data, this is filled with the raw address string. state: type: - string - 'null' street_1: type: - string - 'null' description: If we can parse the address data, this field contains the first part of the street information. street_2: type: - string - 'null' zip_code: type: - string - 'null' description: The location of the listed job. custom_fields: type: - object - 'null' additionalProperties: true description: A key-value store of fields not covered by the schema. [Read more](/custom-fields) integration_fields: type: array items: type: object properties: id: type: string description: The globally unique ID of this object. key: type: string description: The key of the field in the remote system. type: type: string enum: - DEFAULT - CUSTOM description: '- `DEFAULT`: static fields in the remote system. - `CUSTOM`: fields that are created/editable by the user.' value: type: 'null' description: The field's value. label: type: - string - 'null' description: The label of the field. (not always available) required: - id - key - type - label description: An array of selected passthrough integration fields. [Read more](/integration-fields) examples: - - id: 5NVFhMpB9Ah6by44tzNjZLyE key: firstName type: DEFAULT value: Frank label: First Name - id: 8nuajYpoRd5GnxEQaaWKUDYQ key: customTshirtSize type: CUSTOM value: XL label: T-Shirt Size remote_url: type: - string - 'null' format: uri description: URL to the job posting in the source ATS system. opened_at: description: YYYY-MM-DDTHH:mm:ss.sssZ type: - string - 'null' format: date-time externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString closed_at: description: 'The date the job closed or is scheduled to close. A future value typically indicates the job remains open for applications until that date. Please use the `status` and `visibility` fields to determine if a job can be published.' type: - string - 'null' format: date-time externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString remote_created_at: description: The date and time the object was created in the remote system. type: - string - 'null' format: date-time externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString remote_updated_at: description: A timestamp retrieved from the remote system, describing when the resource was last updated. type: - string - 'null' format: date-time externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString contact_id: type: - string - 'null' description: '**(⚠️ Deprecated)** The user ID of the contact person for this job. We strongly recommend using the new `hiring_team` property instead as it provides more complete and accurate information about the ATS users connected to a job.' remote_data: type: - object - 'null' additionalProperties: true description: 'Includes the data fetched from the remote system. Please be aware that including this in you scope config might violate other scopes that are set. Remote data always has the endpoint path that we got the data from as the top level key. For example, it could look like: `{ "/companies": { ... }}` This is not available on all plans. Reach out to Kombo if you need it.' changed_at: description: The timestamp when this specific record was last modified. This field only updates when properties directly on this record change, NOT when related or nested models change. For filtering that considers nested data changes, use the `updated_after` parameter which will return records when either the record itself OR its related models have been updated. type: string format: date-time externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString remote_deleted_at: description: The date and time the object was deleted in the remote system. Objects are automatically marked as deleted when Kombo can't retrieve them from the remote system anymore. Kombo will also anonymize entries 14 days after they disappear. type: - string - 'null' format: date-time externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString stages: type: array items: type: object properties: id: type: string description: The globally unique ID of this object generated by Kombo. We recommend using this as a stable primary key for syncing. remote_id: type: - string - 'null' description: The raw ID of the object in the remote system. We don't recommend using this as a primary key on your side as it might sometimes be compromised of multiple identifiers if a system doesn't provide a clear primary key. name: type: - string - 'null' description: The application stage name. For example, "Initial Screening". remote_data: type: - object - 'null' additionalProperties: true description: 'Includes the data fetched from the remote system. Please be aware that including this in you scope config might violate other scopes that are set. Remote data always has the endpoint path that we got the data from as the top level key. For example, it could look like: `{ "/companies": { ... }}` This is not available on all plans. Reach out to Kombo if you need it.' index: type: - integer - 'null' format: int64 description: Numeric index following the order of the stages if they are ordered in the underlying tool. required: - id - remote_id - name - remote_data examples: - id: 5J7L4b48wBfffYwek9Az9pkM remote_id: '32' name: Initial Screening remote_data: null index: 0 description: 'Application stages a candidate can be in for this particular job. ' screening_questions: type: array items: type: object properties: id: type: string description: The globally unique ID of this object generated by Kombo. We recommend using this as a stable primary key for syncing. remote_id: type: - string - 'null' description: The raw ID of the object in the remote system. We don't recommend using this as a primary key on your side as it might sometimes be compromised of multiple identifiers if a system doesn't provide a clear primary key. title: type: - string - 'null' description: type: - string - 'null' description: Additional instructions or context. Typically a short sentence, but sometimes a long detailed description (e.g., for EEO questions). May include HTML for extra formatting. format: anyOf: - type: object properties: display_type: type: - string - 'null' enum: - SINGLE_LINE - MULTI_LINE - EMAIL - URL description: If unavailable, we recommend displaying a single-line input. max_length: type: - integer - 'null' format: int64 type: type: string const: TEXT required: - type - type: object properties: display_type: type: - string - 'null' enum: - SLIDER - FIELD default: FIELD max: type: - number - 'null' format: double minimum: -1.7976931348623157e+308 min: type: - number - 'null' format: double minimum: -1.7976931348623157e+308 type: type: string const: NUMBER required: - type - type: object properties: accepted_mime_types: type: - array - 'null' items: type: string max_file_size_bytes: type: - integer - 'null' format: int64 type: type: string const: FILE required: - type - type: object properties: display_type: type: - string - 'null' enum: - DROPDOWN - RADIO options: type: array items: type: object properties: id: type: string description: The Kombo ID of this question option. Use this ID to specify the answer to this question. remote_id: type: - string - 'null' description: ID in the connected ATS. This might be null as some systems only use the name to identify the option. name: type: string description: Content of the question option. required: - id - name type: type: string const: SINGLE_SELECT required: - options - type - type: object properties: type: type: string const: BOOLEAN required: - type - type: object properties: type: type: string const: DATE required: - type - type: object properties: options: type: array items: type: object properties: id: type: string description: The Kombo ID of this question option. Use this ID to specify the answer to this question. remote_id: type: - string - 'null' description: ID in the connected ATS. This might be null as some systems only use the name to identify the option. name: type: string description: Content of the question option. required: - id - name type: type: string const: MULTI_SELECT required: - options - type - type: object properties: type: type: string const: INFORMATION description: This is just a text block. required: - type - type: object properties: raw_question: description: We pass the original question data along so you can handle it. type: type: string const: UNKNOWN description: When we're not able to map a specific question type yet, we will return this type. Every `UNKNOWN` question will also be parsed and unified by us at some point. required: - type - type: 'null' category: type: - string - 'null' enum: - EEO - DEMOGRAPHIC description: The category of the screening question (default `null`). "EEO" questions are related to Equal Employment Opportunity (e.g. "What is your veteran status?"), while "DEMOGRAPHIC" questions are for other diversity and demographic data collection. index: type: - integer - 'null' format: int64 required: type: - boolean - 'null' precondition_question_id: type: - string - 'null' minLength: 24 maxLength: 24 pattern: ^[1-9A-HJ-NP-Za-km-z]+$ description: The Kombo ID of another screening question. Only display this question if the specified "precondition question" is answered with one of the values in `precondition_options`. precondition_options: anyOf: - type: array items: type: string minLength: 24 maxLength: 24 pattern: ^[1-9A-HJ-NP-Za-km-z]+$ - type: array items: type: boolean - type: 'null' default: null description: Where the screening question specified by `precondition_question_id` is of type `MULTI_SELECT` or `SINGLE_SELECT`, this is an array of Kombo IDs describing the valid options. If the question is of type `BOOLEAN`, this is an array containing either `true` or `false`. required: - id - remote_id - title - description - category - required examples: - id: 26vafvWSRmbhNcxJYqjCzuJg remote_id: 48b4d36a-1d4b-4c50-ada7-9519078e65b4 title: Which is your primary programming language? description: Please enter the language you are most comfortable with. format: display_type: SINGLE_LINE max_length: null type: TEXT category: null index: 0 required: true precondition_question_id: 4ZVteCSSgDw3BdwGzcQqGEPk precondition_options: - 7qd5qjPwDHarsMLFMGzXYG1K job_postings: type: array items: type: object properties: id: type: string description: The globally unique ID of this object generated by Kombo. We recommend using this as a stable primary key for syncing. remote_id: type: - string - 'null' description: The raw ID of the object in the remote system. We don't recommend using this as a primary key on your side as it might sometimes be compromised of multiple identifiers if a system doesn't provide a clear primary key. title: type: - string - 'null' description: The job posting’s title. description_html: type: - string - 'null' description: The job posting’s description in HTML format. status: type: - string - 'null' enum: - ACTIVE - INACTIVE - DRAFT description: The job posting’s current status. visibility: type: - string - 'null' enum: - PUBLIC - INTERNAL - UNLISTED url: type: - string - 'null' description: The public URL to the job posting on the ATS platform. remote_data: type: - object - 'null' additionalProperties: true description: 'Includes the data fetched from the remote system. Please be aware that including this in you scope config might violate other scopes that are set. Remote data always has the endpoint path that we got the data from as the top level key. For example, it could look like: `{ "/companies": { ... }}` This is not available on all plans. Reach out to Kombo if you need it.' required: - id - remote_id - title - description_html - status - visibility - url - remote_data examples: - id: 26vafvWSRmbhNcxJYqjCzuJg remote_id: 48b4d36a-1d4b-4c50-ada7-9519078e65b4 title: Frontend Engineer description_html:

We are looking for a Frontend Engineer.

status: ACTIVE visibility: PUBLIC url: https://jobs.example.com/post/159829112 remote_data: null hiring_team: type: array items: type: object properties: id: type: string description: The globally unique ID of this object generated by Kombo. We recommend using this as a stable primary key for syncing. remote_id: type: - string - 'null' description: The raw ID of the object in the remote system. We don't recommend using this as a primary key on your side as it might sometimes be compromised of multiple identifiers if a system doesn't provide a clear primary key. first_name: type: - string - 'null' description: First name of the user. last_name: type: - string - 'null' description: Last name of the user. email: type: - string - 'null' pattern: ^(?!\.)(?!.*\.\.)([\w'+-.]*)[\w+-]@([\da-z][\da-z-]*\.)+[a-z]{2,}$ description: Email of the user. If the email address is invalid, it will be set to null. hiring_team_roles: type: array items: type: string enum: - RECRUITER - HIRING_MANAGER - COORDINATOR - SOURCER - INTERVIEWER examples: - RECRUITER description: '**(⚠️ Deprecated - Use `job_roles` to access the full list of job roles.)** Array of the roles of the user for this specific job. Currently only `RECRUITER` and `HIRING_MANAGER` are mapped into our unified schema.' job_roles: type: array items: type: object properties: remote_id: type: - string - 'null' description: The raw ID of the object in the remote system. We don't recommend using this as a primary key on your side as it might sometimes be compromised of multiple identifiers if a system doesn't provide a clear primary key. remote_label: type: - string - 'null' description: The label of the role. scope: type: - string - 'null' enum: - SYSTEM - JOB examples: - JOB description: Whether the role applies globally or is scoped to a specific job. unified_type: type: - string - 'null' enum: - HIRING_MANAGER - RECRUITER - COORDINATOR - SOURCER - INTERVIEWER - ADMIN description: Unified role type if Kombo can map it. required: - remote_id - remote_label - scope - unified_type examples: - remote_id: '32' remote_label: Hiring Manager scope: JOB unified_type: HIRING_MANAGER - remote_id: '32' remote_label: Hiring Manager scope: JOB unified_type: HIRING_MANAGER description: 'Roles assigned to this user for this job. Visit our in-depth guide about [roles](/ats/features/roles) to learn more. Use `system_roles` on the `/v1/ats/users` endpoint for system-wide roles.' required: - id - remote_id - first_name - last_name - hiring_team_roles - job_roles description: The hiring team allows you to sync users into your system who can access the job and its applications. required: - id - remote_id - name - job_code - description - confidential - weekly_hours - category - department - post_url - experience_level - salary_amount - salary_amount_from - salary_amount_to - salary_currency - custom_fields - integration_fields - remote_url - opened_at - closed_at - remote_created_at - remote_updated_at - contact_id - remote_data - changed_at - remote_deleted_at - stages - screening_questions - job_postings - hiring_team required: - next - results examples: - next: eyJwYWdlIjoxMiwibm90ZSI6InRoaXMgaXMganVzdCBhbiBleGFtcGxlIGFuZCBub3QgcmVwcmVzZW50YXRpdmUgZm9yIGEgcmVhbCBjdXJzb3IhIn0= results: - id: H5daSm8e85Dmvmne3wLeCPhX remote_id: '32' name: Backend Engineer job_code: BE-2021-01 description:

Kombo is hiring engineers! If you are reading this and you are located in Berlin, Germany, feel free to contact us about this position.

confidential: false weekly_hours: 37 employment_type: FULL_TIME status: OPEN visibility: PUBLIC category: Technical Job department: Engineering post_url: https://jobs.example.com/post/159829112 experience_level: Mid-Senior remote_work_status: HYBRID salary_amount: 4200 salary_amount_from: null salary_amount_to: null salary_currency: EUR salary_period: MONTH location: city: Berlin country: DE raw: Berlin, Germany state: Berlin street_1: Lohmühlenstraße 65 street_2: null zip_code: '12435' custom_fields: {} integration_fields: [] remote_url: https://app.greenhouse.io/jobs/32 opened_at: '2022-08-07T14:01:29.196Z' closed_at: null remote_created_at: '2022-08-07T14:01:29.196Z' remote_updated_at: '2022-08-07T14:01:29.196Z' contact_id: 6gT2yLMBEipd3zpezATv3Rhu remote_data: null changed_at: '2022-08-07T14:01:29.196Z' remote_deleted_at: null stages: - id: 5J7L4b48wBfffYwek9Az9pkM remote_id: '32' name: Initial Screening remote_data: null index: 0 screening_questions: - id: 26vafvWSRmbhNcxJYqjCzuJg remote_id: 48b4d36a-1d4b-4c50-ada7-9519078e65b4 title: Which is your primary programming language? description: Please enter the language you are most comfortable with. format: display_type: SINGLE_LINE max_length: null type: TEXT category: null index: 0 required: true precondition_question_id: 4ZVteCSSgDw3BdwGzcQqGEPk precondition_options: - 7qd5qjPwDHarsMLFMGzXYG1K job_postings: - id: 26vafvWSRmbhNcxJYqjCzuJg remote_id: 48b4d36a-1d4b-4c50-ada7-9519078e65b4 title: Frontend Engineer description_html:

We are looking for a Frontend Engineer.

status: ACTIVE visibility: PUBLIC url: https://jobs.example.com/post/159829112 remote_data: null hiring_team: - id: 26vafvWSRmbhNcxJYqjCzuJg remote_id: '32' first_name: John last_name: Doe email: john.doe@kombo.dev hiring_team_roles: - RECRUITER job_roles: - remote_id: '32' remote_label: Hiring Manager scope: JOB unified_type: HIRING_MANAGER required: - status - data PostAtsApplicationsApplicationIdResultLinksParameterApplicationId: type: string description: The Kombo ID of the application you want to create the link for. GetAtsUsersParameterRemoteIds: type: string description: Filter by a comma-separated list of remote IDs. GetAtsOffersParameterCursor: type: string description: An optional cursor string used for pagination. This can be retrieved from the `next` property of the previous page response. PostAtsApplicationsApplicationIdRejectParameterApplicationId: type: string description: The Kombo ID of the application you want to reject. GetAtsCandidatesParameterIncludeDeleted: type: string enum: - 'true' - 'false' default: 'false' description: By default, deleted entries are not returned. Use the `include_deleted` query param to include deleted entries too. GetAtsInterviewsParameterIds: type: string description: Filter by a comma-separated list of IDs such as `222k7eCGyUdgt2JWZDNnkDs3,B5DVmypWENfU6eMe6gYDyJG3`. GetAtsApplicationStagesParameterCursor: type: string description: An optional cursor string used for pagination. This can be retrieved from the `next` property of the previous page response. PostAtsApplicationsApplicationIdAttachmentsParameterApplicationId: type: string GetAtsRolesParameterIncludeDeleted: type: string enum: - 'true' - 'false' default: 'false' description: By default, deleted entries are not returned. Use the `include_deleted` query param to include deleted entries too. PostAtsCandidatesCandidateIdResultLinksParameterCandidateId: type: string description: The Kombo ID of the candidate you want to add the result link to. GetAtsRolesParameterPageSize: type: integer format: int64 minimum: 1 maximum: 250 default: 100 description: The number of results to return per page. Maximum is 250. GetAtsActionsAtsAddCandidateAttachmentPositiveResponse: type: object properties: status: type: string const: success data: type: object properties: attachment_restrictions: type: - object - 'null' properties: types: type: object properties: CV: anyOf: - type: object properties: is_supported: type: boolean const: true max_file_size_bytes: type: - number - 'null' format: double minimum: -1.7976931348623157e+308 description: The maximum file size in bytes. If null, we don't have information about the maximum file size. accepted_mime_types: type: - array - 'null' items: type: string description: The accepted mime types. If null, we don't have information about the accepted mime types. required: - is_supported - max_file_size_bytes - accepted_mime_types - type: object properties: is_supported: type: boolean const: false required: - is_supported description: Specific attachment type restrictions for CV. COVER_LETTER: anyOf: - type: object properties: is_supported: type: boolean const: true max_file_size_bytes: type: - number - 'null' format: double minimum: -1.7976931348623157e+308 description: The maximum file size in bytes. If null, we don't have information about the maximum file size. accepted_mime_types: type: - array - 'null' items: type: string description: The accepted mime types. If null, we don't have information about the accepted mime types. required: - is_supported - max_file_size_bytes - accepted_mime_types - type: object properties: is_supported: type: boolean const: false required: - is_supported description: Specific attachment type restrictions for COVER_LETTER. OTHER: anyOf: - type: object properties: is_supported: type: boolean const: true max_file_size_bytes: type: - number - 'null' format: double minimum: -1.7976931348623157e+308 description: The maximum file size in bytes. If null, we don't have information about the maximum file size. accepted_mime_types: type: - array - 'null' items: type: string description: The accepted mime types. If null, we don't have information about the accepted mime types. required: - is_supported - max_file_size_bytes - accepted_mime_types - type: object properties: is_supported: type: boolean const: false required: - is_supported description: Specific attachment type restrictions for OTHER. required: - CV - COVER_LETTER - OTHER required: - types description: Restrictions with attachment types that we know about. If this is null, we don't have information which types are supported. examples: - attachment_restrictions: types: CV: is_supported: false COVER_LETTER: is_supported: false OTHER: is_supported: true max_file_size_bytes: 10485760 accepted_mime_types: - application/pdf - application/msword required: - status - data GetAtsRolesPositiveResponse: type: object properties: status: type: string const: success data: type: object properties: next: type: - string - 'null' description: Cursor string that can be passed to the `cursor` query parameter to get the next page. If this is `null`, then there are no more pages. results: type: array items: type: object properties: id: type: string description: The globally unique ID of this object generated by Kombo. We recommend using this as a stable primary key for syncing. remote_id: type: - string - 'null' description: The raw ID of the object in the remote system. We don't recommend using this as a primary key on your side as it might sometimes be compromised of multiple identifiers if a system doesn't provide a clear primary key. remote_label: type: - string - 'null' description: The label of the role. scope: type: - string - 'null' enum: - SYSTEM - JOB examples: - JOB description: Whether the role applies globally or is scoped to a specific job. unified_type: type: - string - 'null' enum: - HIRING_MANAGER - RECRUITER - COORDINATOR - SOURCER - INTERVIEWER - ADMIN description: Unified role type if Kombo can map it. remote_data: type: - object - 'null' additionalProperties: true description: 'Includes the data fetched from the remote system. Please be aware that including this in you scope config might violate other scopes that are set. Remote data always has the endpoint path that we got the data from as the top level key. For example, it could look like: `{ "/companies": { ... }}` This is not available on all plans. Reach out to Kombo if you need it.' changed_at: description: The timestamp when this specific record was last modified. This field only updates when properties directly on this record change, NOT when related or nested models change. For filtering that considers nested data changes, use the `updated_after` parameter which will return records when either the record itself OR its related models have been updated. type: string format: date-time externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString remote_deleted_at: description: The date and time the object was deleted in the remote system. Objects are automatically marked as deleted when Kombo can't retrieve them from the remote system anymore. Kombo will also anonymize entries 14 days after they disappear. type: - string - 'null' format: date-time externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString required: - id - remote_id - remote_label - scope - unified_type - remote_data - changed_at - remote_deleted_at examples: - id: 26vafvWSRmbhNcxJYqjCzuJg remote_id: '32' remote_label: Hiring Manager scope: JOB unified_type: HIRING_MANAGER remote_data: null changed_at: '2022-08-07T14:01:29.196Z' remote_deleted_at: null required: - next - results examples: - next: eyJwYWdlIjoxMiwibm90ZSI6InRoaXMgaXMganVzdCBhbiBleGFtcGxlIGFuZCBub3QgcmVwcmVzZW50YXRpdmUgZm9yIGEgcmVhbCBjdXJzb3IhIn0= results: - id: 26vafvWSRmbhNcxJYqjCzuJg remote_id: '32' remote_label: Hiring Manager scope: JOB unified_type: HIRING_MANAGER remote_data: null changed_at: '2022-08-07T14:01:29.196Z' remote_deleted_at: null required: - status - data GetAtsRolesParameterCursor: type: string description: An optional cursor string used for pagination. This can be retrieved from the `next` property of the previous page response. GetAtsRejectionReasonsParameterIgnoreUnsupportedFilters: type: string enum: - 'true' - 'false' default: 'false' description: When set to `true`, filters targeting fields not supported by this integration will be ignored instead of filtering out all results. GetAtsJobsParameterStatuses: type: string description: "Filter by a comma-separated list of `OPEN`, `CLOSED`, `DRAFT`, `ARCHIVED` \n\nLeave this blank to get results matching all values." GetAtsRejectionReasonsParameterCursor: type: string description: An optional cursor string used for pagination. This can be retrieved from the `next` property of the previous page response. PatchAtsApplicationsApplicationIdInterviewsRequestBody: type: object properties: interview_id: type: string description: The ID of the interview title: type: string description: The title of the interview start_time: type: string description: The start time of the interview end_time: type: string description: The end time of the interview interviewer_user_ids: type: array items: type: string description: The IDs of the interviewers organizer_user_id: type: string description: The ID of the organizer location: type: object properties: type: type: string enum: - PHYSICAL - VIRTUAL address: type: string required: - type required: - interview_id - title - start_time - end_time - interviewer_user_ids - organizer_user_id - location PostAtsJobsJobIdApplicationsParameterJobId: type: string description: The Kombo ID or Remote ID of the Job this candidate should apply for. If you want to use the ID of the integrated system (remote_id) you need to prefix the id with "remote:". You can use the remote ID if you do not want to sync jobs. DeleteAtsCandidatesCandidateIdTagsPositiveResponse: type: object properties: status: type: string const: success data: type: object examples: - {} warnings: type: array items: type: object properties: message: type: string required: - message description: These are the interaction warnings that are shown in the dashboard. They are meant to provide debug information to you. We recommend logging them to the console. required: - status - data - warnings GetAtsJobsParameterRemoteCreatedAfter: description: Filter jobs by the day they were created in the remote system. This allows you to get jobs that were created on or after a certain day. type: string format: date-time pattern: ^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d+)?)?Z?$ externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString GetAtsInterviewsParameterJobIds: type: string description: Filter by a comma-separated list of job IDs. We will only return interviews for applications associated with any of these jobs. GetAtsOffersParameterUpdatedAfter: description: 'Filter the entries based on the modification date in format `YYYY-MM-DDTHH:mm:ss.sssZ`. Returns records where either the record itself **OR** its nested data has been updated since this timestamp, even if the record''s own `changed_at` field remains unchanged. If you want to track entry deletion, also set the `include_deleted=true` query parameter, because otherwise, deleted entries will be hidden. For more details, see [Understanding changed_at vs updated_after Behavior](https://docs.kombo.dev/ats/getting-started/fetching-data#understanding-changed_at-vs-updated_after-behavior). For this endpoint, `updated_after` matches when the returned record changed, or when related data changed as described below. | Path | Added/Removed | Linked Record | | --- | --- | --- | | `application` | n/a | ✓ Yes | | `application` → `candidate` | ✗ No | ✗ No | | `application` → `job` | ✗ No | ✗ No | _**Added/Removed**: Whether adding or removing entries from this list triggers an update (n/a for single records). **Linked Record**: Whether changes to the linked record itself trigger an update._' type: string format: date-time pattern: ^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d+)?)?Z?$ externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString GetAtsTagsParameterIgnoreUnsupportedFilters: type: string enum: - 'true' - 'false' default: 'false' description: When set to `true`, filters targeting fields not supported by this integration will be ignored instead of filtering out all results. PostAtsApplicationsApplicationIdInterviewsPositiveResponse: type: object properties: status: type: string const: success data: type: object required: - status - data GetAtsUsersPositiveResponse: type: object properties: status: type: string const: success data: type: object properties: next: type: - string - 'null' description: Cursor string that can be passed to the `cursor` query parameter to get the next page. If this is `null`, then there are no more pages. results: type: array items: type: object properties: id: type: string description: The globally unique ID of this object generated by Kombo. We recommend using this as a stable primary key for syncing. remote_id: type: - string - 'null' description: The raw ID of the object in the remote system. We don't recommend using this as a primary key on your side as it might sometimes be compromised of multiple identifiers if a system doesn't provide a clear primary key. first_name: type: - string - 'null' description: First name of the user. last_name: type: - string - 'null' description: Last name of the user. email: type: - string - 'null' pattern: ^(?!\.)(?!.*\.\.)([\w'+-.]*)[\w+-]@([\da-z][\da-z-]*\.)+[a-z]{2,}$ description: Email of the user. If the email address is invalid, it will be set to null. status: type: - string - 'null' enum: - ACTIVE - INACTIVE description: Whether the user is active or inactive. Consider this field when provisioning users from the ATS. remote_data: type: - object - 'null' additionalProperties: true description: 'Includes the data fetched from the remote system. Please be aware that including this in you scope config might violate other scopes that are set. Remote data always has the endpoint path that we got the data from as the top level key. For example, it could look like: `{ "/companies": { ... }}` This is not available on all plans. Reach out to Kombo if you need it.' changed_at: description: The timestamp when this specific record was last modified. This field only updates when properties directly on this record change, NOT when related or nested models change. For filtering that considers nested data changes, use the `updated_after` parameter which will return records when either the record itself OR its related models have been updated. type: string format: date-time externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString remote_deleted_at: description: The date and time the object was deleted in the remote system. Objects are automatically marked as deleted when Kombo can't retrieve them from the remote system anymore. Kombo will also anonymize entries 14 days after they disappear. type: - string - 'null' format: date-time externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString system_roles: type: array items: type: object properties: remote_id: type: - string - 'null' description: The raw ID of the object in the remote system. We don't recommend using this as a primary key on your side as it might sometimes be compromised of multiple identifiers if a system doesn't provide a clear primary key. remote_label: type: - string - 'null' description: The label of the role. scope: type: - string - 'null' enum: - SYSTEM - JOB examples: - JOB description: Whether the role applies globally or is scoped to a specific job. unified_type: type: - string - 'null' enum: - HIRING_MANAGER - RECRUITER - COORDINATOR - SOURCER - INTERVIEWER - ADMIN description: Unified role type if Kombo can map it. required: - remote_id - remote_label - scope - unified_type examples: - remote_id: '32' remote_label: Hiring Manager scope: JOB unified_type: HIRING_MANAGER - remote_id: '32' remote_label: Hiring Manager scope: JOB unified_type: HIRING_MANAGER - remote_id: '1' remote_label: Admin scope: SYSTEM unified_type: ADMIN description: 'System-wide roles assigned to this user in the ATS. Visit our in-depth guide about [roles](/ats/features/roles) to learn more. Note: Use `job_roles` on the `/v1/ats/jobs` endpoint for job-specific roles.' required: - id - remote_id - first_name - last_name - status - remote_data - changed_at - remote_deleted_at - system_roles required: - next - results examples: - next: eyJwYWdlIjoxMiwibm90ZSI6InRoaXMgaXMganVzdCBhbiBleGFtcGxlIGFuZCBub3QgcmVwcmVzZW50YXRpdmUgZm9yIGEgcmVhbCBjdXJzb3IhIn0= results: - id: 26vafvWSRmbhNcxJYqjCzuJg remote_id: '32' first_name: John last_name: Doe email: john.doe@kombo.dev status: ACTIVE remote_data: null changed_at: '2022-08-07T14:01:29.196Z' remote_deleted_at: null system_roles: - remote_id: '32' remote_label: Hiring Manager scope: JOB unified_type: HIRING_MANAGER required: - status - data GetAtsRolesParameterScopes: type: string description: "Filter by a comma-separated list of `SYSTEM`, `JOB` \n* `SYSTEM`: System-wide roles that apply globally (e.g., an \"Admin\" role). \n* `JOB`: Job-scoped roles that apply to specific jobs (e.g., a \"Hiring Manager\" role). \n \n\nLeave this blank to get results matching all values." DeleteAtsCandidatesCandidateIdTagsParameterCandidateId: type: string description: The Kombo ID of the candidate you want to remove the tag from. GetAtsCandidatesParameterJobIds: type: string description: Filter by a comma-separated list of job IDs. We will only return candidates that have applied to _any_ of the jobs. PostAtsApplicationsApplicationIdNotesParameterApplicationId: type: string description: The Kombo ID of the application you want to create the note for. GetAtsOffersParameterIncludeDeleted: type: string enum: - 'true' - 'false' default: 'false' description: By default, deleted entries are not returned. Use the `include_deleted` query param to include deleted entries too. GetAtsApplicationsParameterCursor: type: string description: An optional cursor string used for pagination. This can be retrieved from the `next` property of the previous page response. GetAtsRolesParameterIgnoreUnsupportedFilters: type: string enum: - 'true' - 'false' default: 'false' description: When set to `true`, filters targeting fields not supported by this integration will be ignored instead of filtering out all results. PostAtsCandidatesCandidateIdResultLinksPositiveResponse: type: object properties: status: type: string const: success data: type: object warnings: type: array items: type: object properties: message: type: string required: - message description: These are the interaction warnings that are shown in the dashboard. They are meant to provide debug information to you. We recommend logging them to the console. required: - status - data - warnings GetAtsOffersParameterIgnoreUnsupportedFilters: type: string enum: - 'true' - 'false' default: 'false' description: When set to `true`, filters targeting fields not supported by this integration will be ignored instead of filtering out all results. PostAtsJobsJobIdApplicationsRequestBody: type: object properties: stage_id: type: string description: Stage this candidate should be in. If left out, the default stage for this job will be used. You can obtain the possible `stage_id`s from the `get-jobs` endpoint. candidate: type: object properties: first_name: type: string description: The first name of the candidate. last_name: type: string description: The last name of the candidate. email_address: type: string description: The primary email address this application will be created with. format: email additional_email_addresses: type: array items: type: object properties: type: type: string enum: - PERSONAL - WORK - OTHER email_address: type: string format: email required: - type - email_address company: type: string description: The company where the candidate is currently working. title: type: string description: The current job title of the candidate. phone_number: type: string description: The phone number of the candidate. additional_phone_numbers: type: array items: type: object properties: type: type: string enum: - PERSONAL - WORK - OTHER phone_number: type: string required: - type - phone_number location: type: object properties: city: type: string country: type: string pattern: ^[A-Z]{2}$ description: The uppercase two-letter ISO country (e.g., `DE`). For systems that use codes in formats other than `ISO 3166-1 alpha-2`, Kombo transforms the ISO Codes to the appropriate value. state: type: string street_1: type: string zip_code: type: string required: - country description: The location of the candidate. gender: type: string enum: - MALE - FEMALE - OTHER description: The gender of the candidate. Must be one of `MALE`, `FEMALE`, or `OTHER`. availability_date: description: The date the candidate is available to start working. type: string format: date-time pattern: ^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d+)?)?Z?$ externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString salary_expectations: type: object properties: period: type: string enum: - MONTH - YEAR description: The period of the salary expectations. Must be one of `MONTH` or `YEAR`. amount: type: number format: double minimum: -1.7976931348623157e+308 description: The amount of the salary expectations. required: - period - amount description: The salary expectations of the applicant. We will automatically convert the amount to a format that is suitable for the ATS you are using. For example, if you are using monthly salary expectations, we will convert the amount to a yearly salary if the ATS expects yearly salary expectations. social_links: type: array items: type: object properties: url: type: string format: uri required: - url default: [] description: A list of social media links of the candidate. The links must be valid URLs. required: - first_name - last_name - email_address attachments: type: array items: type: object properties: name: type: string description: File name of the file you want to upload. We recommend providing something human-readable with a valid file extension (like `Resume.pdf`), as this might be shown in your customer's system. content_type: type: string pattern: ^[\w.-]+\/[\w.-]+$ description: 'Content/MIME type of the file (e.g., `application/pdf`). If you provide `data`, this is required. If you provide `data_url`, this is optional and we''ll attempt to use the `Content-Type` header of the response. **Note:** Please validate that the content type you provide is actually meaningful (and not something generic like [`application/octet-stream`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/MIME_types#applicationoctet-stream)). Especially when using object storage (like AWS S3), it''s easy to accidentally discard the content types of user-provided files, so make sure to explicitly persist them when processing uploads from your users (see guides for [AWS](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingMetadata.html#SysMetadata), [Google Cloud](https://cloud.google.com/storage/docs/metadata#content-type), and [Azure](https://learn.microsoft.com/en-us/rest/api/storageservices/put-blob#request-headers-all-blob-types)).' data_url: type: string format: uri description: 'URL to the file you want to upload that can be accessed without authentication headers. We will download the content immediately when receiving the request, so the URL can be short-lived. If you''re using an object storage provider (like AWS S3), we strongly recommend providing a signed URL for secure access (see guides for [AWS](https://docs.aws.amazon.com/AmazonS3/latest/userguide/ShareObjectPreSignedURL.html), [Google Cloud](https://cloud.google.com/storage/docs/access-control/signed-urls), and [Azure](https://learn.microsoft.com/en-us/azure/storage/common/storage-sas-overview)). **Note:** You must provide either this or `data_url`. We recommend `data_url` over `data` for most cases.' data: type: string description: 'Base64-encoded contents of the file you want to upload. **Note:** You must provide either this or `data_url`. We recommend `data_url` over `data` for most cases.' type: type: string enum: - CV - COVER_LETTER - OTHER description: Type of the attachment in the ATS. This may affect where the uploaded file will be shown in your customer's system. required: - name - type default: [] description: Array of the attachments you would like to upload. The first CV in the attachments will be treated as the resume of the candidate when the tool allows previewing a resume. source: type: object properties: name: type: string description: Name of the source (e.g., `"Example Job Board"`). unified_key: type: string id: type: string description: '**(⚠️ Deprecated - Use [automatic source writing](/ats/features/application-attribution#automatic-attribution) instead)** Optional source information that will be attached to the candidate. If you''re a job board or recruiting service, you can use this to make sure your customers can see which candidates came from you. This is deprecated because writing sources requires users to do some setup in most ATSs.' sourced_by: type: object properties: user_id: type: string description: The Kombo ID or Remote ID of the User. Use the Kombo ID directly, or prefix the remote ID with "remote:" to reference the user by their ID in the remote system. required: - user_id description: 'Credit the recruiter or team member who sourced this candidate. While the `source` field tracks the channel/platform (e.g., "Awesome Jobboard"), the `sourced_by` field tracks the individual person responsible for finding the candidate.' gdpr_consent: type: object properties: expires_at: description: Until when the candidate has granted the company they're applying to permission to process their personal data. type: string format: date-time pattern: ^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d+)?)?Z?$ externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString given: type: boolean description: Whether the candidate has given consent. description: Optional GDPR consent information required in some jurisdictions (like the Czech Republic or Slovakia). remote_fields: allOf: - type: object properties: successfactors: type: object properties: Candidate: type: object additionalProperties: true description: Fields that we will pass through to SuccessFactor's `Candidate` object. JobApplication: type: object additionalProperties: true description: Fields that we will pass through to SuccessFactor's `JobApplication` object. copyJobApplicationAttachments: type: boolean description: If set to true, we will copy custom attachments from the JobApplication to the Candidate. update_existing_candidate: type: - boolean - 'null' description: When the candidate already exists, whether to update the Candidate with the remote fields found under the Candidate entity. description: Fields specific to SAP SuccessFactors. personio: type: object properties: application: type: object additionalProperties: true description: Fields that we will pass through to Personio's `application` object. description: Fields specific to Personio. talentsoft: type: object properties: applicant: type: object additionalProperties: true description: Fields that we will pass through to TalentSoft's `applicant` object. application: type: object additionalProperties: true description: Fields that we will pass through to TalentSoft's `application` object. description: Fields specific to TalentSoft. teamtailor: type: object properties: candidate: type: object additionalProperties: true description: Fields that we will pass through to Teamtailor's `Candidate` object. application: type: object properties: attributes: type: object additionalProperties: true description: Fields that we will pass through to Teamtailor's attributes section `Job application` object. greenhouse: type: object properties: candidate: type: object additionalProperties: true description: Fields that we will pass through to Greenhouse's `Candidate` object. application: type: object additionalProperties: true description: Fields that we will pass through to Greenhouse's `Application` object. description: Fields specific to Greenhouse. lever: type: object properties: candidate: type: object additionalProperties: true description: 'Fields that we will pass through to Lever''s `Candidate` object. Note: make sure to submit the keys and values in the correct form data format.' description: Fields specific to Lever. workable: type: object properties: candidate: type: object additionalProperties: true description: Fields that we will pass through to Workable's `Candidate` object. description: Fields specific to Workable. workday: type: object properties: Candidate_Data: type: object properties: Name_Detail_Data: type: object properties: Middle_Name: type: string description: The candidate's middle name Social_Suffix_Reference: type: object properties: Predefined_Name_Component_ID: type: string required: - Predefined_Name_Component_ID description: The WID of the social suffix reference for the candidate Language_Reference: type: object properties: WID: type: string required: - WID description: Used to set the candidate's primary language Job_Application_Data: type: object properties: Job_Applied_To_Data: type: object properties: Global_Personal_Information_Data: type: object properties: Date_of_Birth: type: string Resume_Data: type: object properties: Education_Data: type: array items: type: object properties: School_Name: type: string First_Year_Attended: type: number format: double minimum: -1.7976931348623157e+308 Last_Year_Attended: type: number format: double minimum: -1.7976931348623157e+308 Field_of_Study_Reference: type: object properties: WID: type: string required: - WID Degree_Reference: type: object properties: WID: type: string required: - WID Grade_Average: type: string Skill_Data: type: array items: type: object properties: Skill_Name: type: string Language_Data: type: array items: type: object properties: Language_Reference: type: object properties: WID: type: string Language: type: object properties: Native: type: boolean Language_Ability: type: array items: type: object properties: Language_Ability_Data: type: object properties: Language_Proficiency_Reference: type: object properties: WID: type: string required: - WID Language_Ability_Type_Reference: type: object properties: WID: type: string required: - WID required: - Language_Ability Experience_Data: type: array items: type: object properties: Company_Name: type: string Title: type: string Location: type: string Start_Date: description: YYYY-MM-DDTHH:mm:ss.sssZ type: string format: date-time pattern: ^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d+)?)?Z?$ externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString End_Date: description: YYYY-MM-DDTHH:mm:ss.sssZ type: string format: date-time pattern: ^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d+)?)?Z?$ externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString Currently_Work_Here: type: boolean Description: type: string required: - Company_Name - Title - Start_Date Contact_Data: type: object properties: Location_Data: type: object properties: Address_Line_1: type: string Address_Line_2: type: string Region_Subdivision_1: type: string Country_Region_Reference: type: object properties: Country_Region_ID: type: string required: - Country_Region_ID Country_City_Reference: type: object properties: WID: type: string required: - WID Worker_Reference: type: object properties: WID: type: string Employee_ID: type: string description: Reference to the Worker (employee) to link the candidate to. Provide either WID or Employee_ID. Override_Source_Reference_WID: type: string description: Used to override the automatic source WID. description: Fields specific to Workday. The remote fields schema follows the documentation at https://community.workday.com/sites/default/files/file-hosting/productionapi/Recruiting/v43.0/Put_Candidate.html. Only defined fields are supported, if you need additional field support please reach out to Kombo support. zohorecruit: type: object properties: candidate: type: object additionalProperties: true description: Fields that we will pass through to Zoho Recruit's `Candidate` object. description: Fields specific to Zoho Recruit. bullhorn: type: object properties: candidate: type: object additionalProperties: true description: Fields that we will pass through to Bullhorn's `Candidate` object. job_submission: type: object additionalProperties: true description: Fields that we will pass through to Bullhorn's `JobSubmission` object. description: Fields specific to Bullhorn. smartrecruiters: type: object properties: candidate_with_questions: type: object additionalProperties: true description: '**(⚠️ Deprecated - Use the `candidate` field instead.)** Fields that we will pass through to the SmartRecruiters''s `Candidate` object when created with screening question answers. This API is used: https://developers.smartrecruiters.com/reference/createcandidate-1' candidate_without_questions: type: object additionalProperties: true description: '**(⚠️ Deprecated - Use the `candidate` field instead.)** Fields that we will pass through to the SmartRecruiters''s `Candidate` object when created with screening question answers. This API is used: https://developers.smartrecruiters.com/reference/candidatesaddtojob-1' candidate: type: object additionalProperties: true description: 'Fields that we will pass through to the SmartRecruiters''s `Candidate` object. This API is used: https://developers.smartrecruiters.com/reference/createcandidate-1' consent_decisions: type: object properties: SINGLE: type: boolean SMART_RECRUIT: type: boolean SMART_CRM: type: boolean SMART_MESSAGE_SMS: type: boolean SMART_MESSAGE_WHATSAPP: type: boolean description: 'The consent decisions for the candidate. SmartRecruiters supports two consent models: ''Single'' (use the `SINGLE` key) and ''Separated'' (use `SMART_RECRUIT`, `SMART_CRM`, `SMART_MESSAGE_SMS`, and/or `SMART_MESSAGE_WHATSAPP` keys). When this field is provided, it takes precedence over the `gdpr_consent` field for the `consentDecisions` property. See: https://developers.smartrecruiters.com/docs/partners-post-an-application' description: Fields specific to SmartRecruiters. talentadore: type: object properties: applications: type: object additionalProperties: true description: Fields that we will pass through to the Talentadore's when creating applications. description: Fields specific to Talentadore. guidecom: type: object properties: candidate: type: object additionalProperties: true description: Fields that we will pass through to GuideCom's `Candidate` object. description: Fields specific to GuideCom. dvinci: type: object properties: application: type: object additionalProperties: true description: 'Fields that we will pass through to d.vinci''s application object. This API is used: https://static.dvinci-easy.com/files/d.vinci%20application-apply-api.html#jobs__id__applyApi_post' candidate: type: object additionalProperties: true description: Fields that we will pass through to d.vinci's candidate/application payload as top-level fields (e.g., dateOfBirth). description: Fields specific to d.vinci. hrworks: type: object properties: jobApplication: type: object additionalProperties: true description: 'Fields that we will pass through to HRWorks''s `Job Application` object. This API is used: https://developers.hrworks.de/docs/hrworks-api-v2/53021f035f62d-post-job-applications' description: Fields specific to GuideCom. jobylon: type: object properties: application: type: object properties: message: type: string description: The `message` field of Jobylon's create application endpoint's request body. description: Fields that we will pass through to Jobylon's create application [endpoint](https://developer.jobylon.com/push-api-and-webhooks#-xL0v)'s request body. description: Fields specific to Jobylon. avature: type: object properties: workflow: type: object properties: step: type: object properties: id: type: integer format: int64 description: The ID of the workflow step to assign to the candidate. required: - id description: Fields specific to Avature. recruitee: type: object properties: candidate: type: object properties: cover_letter_text: type: string description: The cover letter text as a string. This will be visible on the main candidate page. Can be provided together with the `cover_letter` attachment, which will end up in a separate `file` section. description: Fields specific to Recruitee. rexx: type: object properties: candidate: type: object additionalProperties: true description: Fields that we will pass through to Rexx's application form fields. description: Fields specific to Rexx. umantis: type: object properties: person: type: object additionalProperties: true description: Fields that we will pass through to Abacus Umantis's "Create a person" endpoint's `attributes` when creating a candidate. description: Fields specific to Abacus Umantis. piloga: type: object properties: candidate: type: object properties: street: type: string description: The street address of the candidate. description: Additional candidate fields for P&I Loga that will be mapped to the application form. description: Fields specific to P&I Loga. pinpoint: type: object properties: candidate: type: object additionalProperties: true description: Fields that we will pass through to Pinpoint's `Candidate` object. description: Fields specific to Pinpoint. covetorest: type: object properties: candidate: type: object properties: mandant: type: number format: double minimum: -1.7976931348623157e+308 description: The mandant field for the candidate in Coveto. description: Additional candidate fields that will be passed to the Coveto candidate creation. description: Fields specific to Coveto REST. description: Additional fields that we will pass through to specific ATS systems. - type: object properties: greenhouse: type: object properties: post_headers: type: object properties: On-Behalf-Of: type: - string - 'null' description: ID of the the user that will show up as having performed the action in Greenhouse. We already pass a value by default, but you can use this to override it. description: Headers we will pass with `POST` requests to Greenhouse. description: Fields specific to Greenhouse. workable: type: object properties: on_behalf_of_user_remote_id: type: string description: The remote ID of the user that will be displayed in the UI as the one that performed the action. description: Workable specific remote fields for ATS actions. description: Additional fields that we will pass through to specific ATS systems. description: Additional fields that we will pass through to specific ATS systems. screening_question_answers: type: array items: type: object properties: question_id: type: string description: ID of the question returned by the Kombo API. We'll report a warning in the logs if the question can't be found on the job. answer: anyOf: - type: string description: Answer to a `TEXT` question or the option ID of the answer to a `SINGLE_SELECT` question. - type: boolean description: Answer to a `BOOLEAN` question. - type: number format: double minimum: -1.7976931348623157e+308 description: Answer to a `NUMBER` question. - type: array items: type: string description: Answer to a `MULTI_SELECT` question. The array elements are the IDs of the selected options. - description: Answer to a `DATE` question as an ISO 8601 date string. type: string format: date-time pattern: ^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d+)?)?Z?$ externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString - type: object properties: name: type: string description: File name of the file you want to upload. We recommend providing something human-readable with a valid file extension (like `Resume.pdf`), as this might be shown in your customer's system. content_type: type: string pattern: ^[\w.-]+\/[\w.-]+$ description: 'Content/MIME type of the file (e.g., `application/pdf`). If you provide `data`, this is required. If you provide `data_url`, this is optional and we''ll attempt to use the `Content-Type` header of the response. **Note:** Please validate that the content type you provide is actually meaningful (and not something generic like [`application/octet-stream`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/MIME_types#applicationoctet-stream)). Especially when using object storage (like AWS S3), it''s easy to accidentally discard the content types of user-provided files, so make sure to explicitly persist them when processing uploads from your users (see guides for [AWS](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingMetadata.html#SysMetadata), [Google Cloud](https://cloud.google.com/storage/docs/metadata#content-type), and [Azure](https://learn.microsoft.com/en-us/rest/api/storageservices/put-blob#request-headers-all-blob-types)).' data_url: type: string format: uri description: 'URL to the file you want to upload that can be accessed without authentication headers. We will download the content immediately when receiving the request, so the URL can be short-lived. If you''re using an object storage provider (like AWS S3), we strongly recommend providing a signed URL for secure access (see guides for [AWS](https://docs.aws.amazon.com/AmazonS3/latest/userguide/ShareObjectPreSignedURL.html), [Google Cloud](https://cloud.google.com/storage/docs/access-control/signed-urls), and [Azure](https://learn.microsoft.com/en-us/azure/storage/common/storage-sas-overview)). **Note:** You must provide either this or `data_url`. We recommend `data_url` over `data` for most cases.' data: type: string description: 'Base64-encoded contents of the file you want to upload. **Note:** You must provide either this or `data_url`. We recommend `data_url` over `data` for most cases.' required: - name description: Answer to a `FILE` question. description: 'Answer to a question. This will be validated based on the question format and throw an error if the answer is invalid. Here is a description of each question type and the required answer format: `TEXT` - Simply provide a "string" answer. `SINGLE_SELECT` - Provide the ID of the answer as a string. `MULTI_SELECT` - Provide a string array containing the question IDs of the selected options. `BOOLEAN` - Either `true` or `false`. `NUMBER` - A number. `DATE` - Provide the answer as an ISO 8601 date string. `FILE` - Please select Option 6 in the dropdown above to see the required format.' required: - question_id - answer description: 'Array of answers to screening questions. Currently, not all question types are supported, and unsupported ones will not be submitted. The available questions for a job can be retrieved from the get jobs endpoint. The answers will be validated based on the format of the questions. Make sure to follow this schema to avoid errors.' examples: - - question_id: D8yPrjXXvA2XeBksTmrVvKSn answer: 'Yes' required: - candidate GetAtsOffersParameterIds: type: string description: Filter by a comma-separated list of IDs such as `222k7eCGyUdgt2JWZDNnkDs3,B5DVmypWENfU6eMe6gYDyJG3`. GetAtsApplicationStagesParameterIds: type: string description: Filter by a comma-separated list of IDs such as `222k7eCGyUdgt2JWZDNnkDs3,B5DVmypWENfU6eMe6gYDyJG3`. GetAtsCandidatesPositiveResponse: type: object properties: status: type: string const: success data: type: object properties: next: type: - string - 'null' description: Cursor string that can be passed to the `cursor` query parameter to get the next page. If this is `null`, then there are no more pages. results: type: array items: type: object properties: id: type: string description: The globally unique ID of this object generated by Kombo. We recommend using this as a stable primary key for syncing. remote_id: type: string description: The raw ID of the object in the remote system. We don't recommend using this as a primary key on your side as it might sometimes be compromised of multiple identifiers if a system doesn't provide a clear primary key. first_name: type: - string - 'null' description: First name of the candidate. last_name: type: - string - 'null' description: Last name of the candidate. company: type: - string - 'null' description: The current company of the candidate. title: type: - string - 'null' description: The current job title of the candidate. confidential: type: - boolean - 'null' description: Whether the candidate’s profile is confidential in the ATS. source: type: - string - 'null' description: The hiring source of the candidate. If you're a job board or recruiting service, you can use this to validate which candidates applied through your service and ensure that the correct referral compensation is paid out. phone_numbers: type: - array - 'null' items: type: object properties: phone_number: type: string type: type: - string - 'null' description: Kombo exposes type information through this field. If we don't get any information from the tool, we will set this to `null`. required: - phone_number default: [] description: A list of phone numbers of the candidate. email_addresses: type: - array - 'null' items: type: object properties: email_address: type: - string - 'null' pattern: ^(?!\.)(?!.*\.\.)([\w'+-.]*)[\w+-]@([\da-z][\da-z-]*\.)+[a-z]{2,}$ type: type: - string - 'null' description: Kombo exposes type information through this field. If we don't get any information from the tool, we will set this to `null`. required: - type default: [] description: A list of email addresses of the candidate with an optional type. If an email address is invalid, it will be filtered out. social_media: type: - array - 'null' items: type: object properties: link: type: - string - 'null' type: type: - string - 'null' username: type: - string - 'null' default: [] description: List of social media accounts of the candidate. location: type: - object - 'null' properties: city: type: - string - 'null' country: type: - string - 'null' description: Contains the ISO2 country code if possible. If not, it contains the original value. raw: type: - string - 'null' description: If we have address data, this is filled with the raw address string. state: type: - string - 'null' street_1: type: - string - 'null' description: If we can parse the address data, this field contains the first part of the street information. street_2: type: - string - 'null' zip_code: type: - string - 'null' description: Location of the candidate. custom_fields: type: - object - 'null' additionalProperties: true description: A key-value store of fields not covered by the schema. [Read more](/custom-fields) integration_fields: type: array items: type: object properties: id: type: string description: The globally unique ID of this object. key: type: string description: The key of the field in the remote system. type: type: string enum: - DEFAULT - CUSTOM description: '- `DEFAULT`: static fields in the remote system. - `CUSTOM`: fields that are created/editable by the user.' value: type: 'null' description: The field's value. label: type: - string - 'null' description: The label of the field. (not always available) required: - id - key - type - label description: An array of selected passthrough integration fields. [Read more](/integration-fields) examples: - - id: 5NVFhMpB9Ah6by44tzNjZLyE key: firstName type: DEFAULT value: Frank label: First Name - id: 8nuajYpoRd5GnxEQaaWKUDYQ key: customTshirtSize type: CUSTOM value: XL label: T-Shirt Size remote_url: type: - string - 'null' format: uri description: URL to the candidate profile in the source ATS system. When embedding this in your system, please consider that not for all ATS a dedicated candidate profile URL is available, so you might need to fall back to the application URL. remote_created_at: description: The date and time the object was created in the remote system. type: - string - 'null' format: date-time externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString remote_updated_at: description: A timestamp retrieved from the remote system, describing when the resource was last updated. type: - string - 'null' format: date-time externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString remote_data: type: - object - 'null' additionalProperties: true description: 'Includes the data fetched from the remote system. Please be aware that including this in you scope config might violate other scopes that are set. Remote data always has the endpoint path that we got the data from as the top level key. For example, it could look like: `{ "/companies": { ... }}` This is not available on all plans. Reach out to Kombo if you need it.' changed_at: description: The timestamp when this specific record was last modified. This field only updates when properties directly on this record change, NOT when related or nested models change. For filtering that considers nested data changes, use the `updated_after` parameter which will return records when either the record itself OR its related models have been updated. type: string format: date-time externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString remote_deleted_at: description: The date and time the object was deleted in the remote system. Objects are automatically marked as deleted when Kombo can't retrieve them from the remote system anymore. Kombo will also anonymize entries 14 days after they disappear. type: - string - 'null' format: date-time externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString applications: type: array items: type: object properties: id: type: string description: The globally unique ID of this object generated by Kombo. We recommend using this as a stable primary key for syncing. remote_id: type: - string - 'null' description: The raw ID of the object in the remote system. We don't recommend using this as a primary key on your side as it might sometimes be compromised of multiple identifiers if a system doesn't provide a clear primary key. outcome: type: - string - 'null' enum: - PENDING - HIRED - DECLINED description: 'Parsed status of the application. If Kombo identifies that the application was accepted and the candidate hired, it will be `HIRED`. If the application was rejected or the candidate declined, it will be `DECLINED`. If the application is still in process, it will be `PENDING`. Kombo will always try to deliver this information as reliably as possible.' rejection_reason_name: type: - string - 'null' description: Reason for the rejection of the candidate. rejected_at: description: The time that the application was rejected. type: - string - 'null' format: date-time externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString remote_url: type: - string - 'null' format: uri description: URL to the application in the source ATS system. When embedding this in your system, please consider that not for all ATS a dedicated application URL is available, so you might need to fall back to the candidate URL. changed_at: description: The timestamp when this specific record was last modified. This field only updates when properties directly on this record change, NOT when related or nested models change. For filtering that considers nested data changes, use the `updated_after` parameter which will return records when either the record itself OR its related models have been updated. type: string format: date-time externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString remote_created_at: description: The date and time the object was created in the remote system. type: - string - 'null' format: date-time externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString remote_updated_at: description: A timestamp retrieved from the remote system, describing when the resource was last updated. type: - string - 'null' format: date-time externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString current_stage: type: - object - 'null' properties: id: type: string description: The globally unique ID of this object generated by Kombo. We recommend using this as a stable primary key for syncing. name: type: - string - 'null' description: The application stage name. For example, "Initial Screening". remote_id: type: - string - 'null' description: The raw ID of the object in the remote system. We don't recommend using this as a primary key on your side as it might sometimes be compromised of multiple identifiers if a system doesn't provide a clear primary key. index: type: - integer - 'null' format: int64 examples: - 2 required: - id - name - remote_id - index job: type: - object - 'null' properties: id: type: string description: The globally unique ID of this object generated by Kombo. We recommend using this as a stable primary key for syncing. name: type: - string - 'null' description: Title of the job. remote_id: type: string description: The raw ID of the object in the remote system. We don't recommend using this as a primary key on your side as it might sometimes be compromised of multiple identifiers if a system doesn't provide a clear primary key. required: - id - name - remote_id examples: - id: H5daSm8e85Dmvmne3wLeCPhX name: Backend Engineer remote_id: '32' required: - id - remote_id - outcome - rejection_reason_name - rejected_at - remote_url - changed_at - remote_created_at - remote_updated_at - current_stage - job tags: type: array items: type: object properties: id: type: string description: The globally unique ID of this object generated by Kombo. We recommend using this as a stable primary key for syncing. name: type: - string - 'null' remote_id: type: - string - 'null' description: The raw ID of the object in the remote system. We don't recommend using this as a primary key on your side as it might sometimes be compromised of multiple identifiers if a system doesn't provide a clear primary key. required: - id - name - remote_id examples: - id: 26vafvWSRmbhNcxJYqjCzuJg name: High Potential remote_id: '32' required: - id - remote_id - first_name - last_name - company - title - confidential - source - custom_fields - integration_fields - remote_url - remote_created_at - remote_updated_at - remote_data - changed_at - remote_deleted_at - applications - tags examples: - id: 26vafvWSRmbhNcxJYqjCzuJg remote_id: '32' first_name: John last_name: Doe company: Acme, Inc. title: Head of Marketing confidential: false source: Employee Referral phone_numbers: - phone_number: +1-541-754-3010 type: HOME email_addresses: - email_address: john.doe@example.com type: PRIVATE social_media: - link: https://www.youtube.com/watch?v=dQw4w9WgXcQ type: YOUTUBE username: null location: city: Berlin country: DE raw: Berlin, Germany state: Berlin street_1: Lohmühlenstraße 65 street_2: null zip_code: '12435' custom_fields: {} integration_fields: [] remote_url: https://app.greenhouse.io/people/32 remote_created_at: '2022-04-02T00:00:00.000Z' remote_updated_at: '2022-04-04T00:00:00.000Z' remote_data: null changed_at: '2022-04-04T00:00:00.000Z' remote_deleted_at: null applications: - id: H77fDF8uvEzGNPRubiz5DvQ7 remote_id: '32' outcome: HIRED rejection_reason_name: null rejected_at: null remote_url: https://app.greenhouse.io/applications/32 changed_at: '2022-04-04T00:00:00.000Z' remote_created_at: '2022-04-02T00:00:00.000Z' remote_updated_at: '2022-04-04T00:00:00.000Z' current_stage: id: 5J7L4b48wBfffYwek9Az9pkM name: Initial Screening remote_id: '32' index: 2 job: id: H5daSm8e85Dmvmne3wLeCPhX name: Backend Engineer remote_id: '32' tags: - id: 26vafvWSRmbhNcxJYqjCzuJg name: High Potential remote_id: '32' required: - next - results examples: - next: eyJwYWdlIjoxMiwibm90ZSI6InRoaXMgaXMganVzdCBhbiBleGFtcGxlIGFuZCBub3QgcmVwcmVzZW50YXRpdmUgZm9yIGEgcmVhbCBjdXJzb3IhIn0= results: - id: 26vafvWSRmbhNcxJYqjCzuJg remote_id: '32' first_name: John last_name: Doe company: Acme, Inc. title: Head of Marketing confidential: false source: Employee Referral phone_numbers: - phone_number: +1-541-754-3010 type: HOME email_addresses: - email_address: john.doe@example.com type: PRIVATE social_media: - link: https://www.youtube.com/watch?v=dQw4w9WgXcQ type: YOUTUBE username: null location: city: Berlin country: DE raw: Berlin, Germany state: Berlin street_1: Lohmühlenstraße 65 street_2: null zip_code: '12435' custom_fields: {} integration_fields: [] remote_url: https://app.greenhouse.io/people/32 remote_created_at: '2022-04-02T00:00:00.000Z' remote_updated_at: '2022-04-04T00:00:00.000Z' remote_data: null changed_at: '2022-04-04T00:00:00.000Z' remote_deleted_at: null applications: - id: H77fDF8uvEzGNPRubiz5DvQ7 remote_id: '32' outcome: HIRED rejection_reason_name: null rejected_at: null remote_url: https://app.greenhouse.io/applications/32 changed_at: '2022-08-07T14:01:29.196Z' remote_created_at: '2022-08-07T14:01:29.196Z' remote_updated_at: '2022-08-07T14:01:29.196Z' current_stage: id: 5J7L4b48wBfffYwek9Az9pkM name: Initial Screening remote_id: '32' index: 2 job: id: H5daSm8e85Dmvmne3wLeCPhX name: Backend Engineer remote_id: '32' tags: - id: 26vafvWSRmbhNcxJYqjCzuJg name: High Potential remote_id: '32' required: - status - data GetAtsUsersParameterIncludeDeleted: type: string enum: - 'true' - 'false' default: 'false' description: By default, deleted entries are not returned. Use the `include_deleted` query param to include deleted entries too. GetAtsApplicationsParameterJobIds: type: string description: Filter by a comma-separated list of job IDs. We will only return applications that are related to _any_ of the jobs. PostAtsImportTrackedApplicationRequestBody: type: object properties: erecruiter: discriminator: propertyName: id_type anyOf: - type: object properties: id_type: type: string const: application_and_job_remote_ids description: Uses the `Api/Applications/ByJob/{jobId}` endpoint to retrieve the relevant application based on the job ID. application_remote_id: type: string job_remote_id: type: string required: - id_type - application_remote_id - job_remote_id - type: object properties: id_type: type: string const: application_and_candidate_remote_ids description: Uses the `Api/Applications/{applicantId}` endpoint to retrieve the relevant application based on the candidate ID. candidate_remote_id: type: string application_remote_id: type: string required: - id_type - candidate_remote_id - application_remote_id successfactors: discriminator: propertyName: id_type oneOf: - type: object properties: id_type: type: string const: application_remote_id description: Uses the `/JobApplication` ODATA endpoint to retrieve the relevant application based on the application ID. application_remote_id: type: string required: - id_type - application_remote_id recruitee: discriminator: propertyName: id_type oneOf: - type: object properties: id_type: type: string const: placement_id description: Uses the `/candidates` endpoint to retrieve all candidates, to find the relevant application based on the placement ID. placement_id: type: string required: - id_type - placement_id greenhouse: discriminator: propertyName: id_type oneOf: - type: object properties: id_type: type: string const: application_id description: Uses the `/applications/{id}` endpoint to retrieve the application. application_id: type: string required: - id_type - application_id onlyfy: discriminator: propertyName: id_type oneOf: - type: object properties: id_type: type: string const: application_id description: Uses the `/v1/application/{id}` endpoint to retrieve the application. application_id: type: string required: - id_type - application_id smartrecruiters: discriminator: propertyName: id_type oneOf: - type: object properties: id_type: type: string const: candidate_and_job_remote_ids description: Uses the `/candidates/{candidateId}/jobs/{jobId}` endpoint to retrieve the application. candidate_remote_id: type: string job_remote_id: type: string required: - id_type - candidate_remote_id - job_remote_id tracked_at: description: YYYY-MM-DDTHH:mm:ss.sssZ type: - string - 'null' format: date-time pattern: ^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d+)?)?Z?$ externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString required: - tracked_at GetAtsActionsAtsAddApplicationAttachmentPositiveResponse: type: object properties: status: type: string const: success data: type: object properties: attachment_restrictions: type: - object - 'null' properties: types: type: object properties: CV: anyOf: - type: object properties: is_supported: type: boolean const: true max_file_size_bytes: type: - number - 'null' format: double minimum: -1.7976931348623157e+308 description: The maximum file size in bytes. If null, we don't have information about the maximum file size. accepted_mime_types: type: - array - 'null' items: type: string description: The accepted mime types. If null, we don't have information about the accepted mime types. required: - is_supported - max_file_size_bytes - accepted_mime_types - type: object properties: is_supported: type: boolean const: false required: - is_supported description: Specific attachment type restrictions for CV. COVER_LETTER: anyOf: - type: object properties: is_supported: type: boolean const: true max_file_size_bytes: type: - number - 'null' format: double minimum: -1.7976931348623157e+308 description: The maximum file size in bytes. If null, we don't have information about the maximum file size. accepted_mime_types: type: - array - 'null' items: type: string description: The accepted mime types. If null, we don't have information about the accepted mime types. required: - is_supported - max_file_size_bytes - accepted_mime_types - type: object properties: is_supported: type: boolean const: false required: - is_supported description: Specific attachment type restrictions for COVER_LETTER. OTHER: anyOf: - type: object properties: is_supported: type: boolean const: true max_file_size_bytes: type: - number - 'null' format: double minimum: -1.7976931348623157e+308 description: The maximum file size in bytes. If null, we don't have information about the maximum file size. accepted_mime_types: type: - array - 'null' items: type: string description: The accepted mime types. If null, we don't have information about the accepted mime types. required: - is_supported - max_file_size_bytes - accepted_mime_types - type: object properties: is_supported: type: boolean const: false required: - is_supported description: Specific attachment type restrictions for OTHER. required: - CV - COVER_LETTER - OTHER required: - types description: Restrictions with attachment types that we know about. If this is null, we don't have information which types are supported. examples: - attachment_restrictions: types: CV: is_supported: false COVER_LETTER: is_supported: false OTHER: is_supported: true max_file_size_bytes: 10485760 accepted_mime_types: - application/pdf - application/msword required: - status - data GetAtsCandidatesParameterFirstName: type: string description: Filter candidates by first name. This filter is case-insensitive and matches the exact first name. Fuzzy matching might be enabled in the future, so consider this for your implementation. PostAtsCandidatesCandidateIdTagsParameterCandidateId: type: string description: The Kombo ID of the candidate you want to add the tag to. PostAtsCandidatesCandidateIdAttachmentsPositiveResponse: type: object properties: status: type: string const: success data: type: object warnings: type: array items: type: object properties: message: type: string required: - message description: These are the interaction warnings that are shown in the dashboard. They are meant to provide debug information to you. We recommend logging them to the console. required: - status - data - warnings GetAtsCandidatesParameterCursor: type: string description: An optional cursor string used for pagination. This can be retrieved from the `next` property of the previous page response. GetAtsApplicationStagesParameterPageSize: type: integer format: int64 minimum: 1 maximum: 250 default: 100 description: The number of results to return per page. Maximum is 250. PostAtsCandidatesPositiveResponse: type: object properties: status: type: string const: success data: type: object properties: id: type: string description: The globally unique ID of this object generated by Kombo. We recommend using this as a stable primary key for syncing. remote_id: type: string description: The raw ID of the object in the remote system. We don't recommend using this as a primary key on your side as it might sometimes be compromised of multiple identifiers if a system doesn't provide a clear primary key. first_name: type: - string - 'null' description: First name of the candidate. last_name: type: - string - 'null' description: Last name of the candidate. company: type: - string - 'null' description: The current company of the candidate. title: type: - string - 'null' description: The current job title of the candidate. confidential: type: - boolean - 'null' description: Whether the candidate’s profile is confidential in the ATS. source: type: - string - 'null' description: The hiring source of the candidate. If you're a job board or recruiting service, you can use this to validate which candidates applied through your service and ensure that the correct referral compensation is paid out. phone_numbers: type: - array - 'null' items: type: object properties: phone_number: type: string type: type: - string - 'null' description: Kombo exposes type information through this field. If we don't get any information from the tool, we will set this to `null`. required: - phone_number default: [] description: A list of phone numbers of the candidate. email_addresses: type: - array - 'null' items: type: object properties: email_address: type: - string - 'null' pattern: ^(?!\.)(?!.*\.\.)([\w'+-.]*)[\w+-]@([\da-z][\da-z-]*\.)+[a-z]{2,}$ type: type: - string - 'null' description: Kombo exposes type information through this field. If we don't get any information from the tool, we will set this to `null`. required: - type default: [] description: A list of email addresses of the candidate with an optional type. If an email address is invalid, it will be filtered out. social_media: type: - array - 'null' items: type: object properties: link: type: - string - 'null' type: type: - string - 'null' username: type: - string - 'null' default: [] description: List of social media accounts of the candidate. location: type: - object - 'null' properties: city: type: - string - 'null' country: type: - string - 'null' description: Contains the ISO2 country code if possible. If not, it contains the original value. raw: type: - string - 'null' description: If we have address data, this is filled with the raw address string. state: type: - string - 'null' street_1: type: - string - 'null' description: If we can parse the address data, this field contains the first part of the street information. street_2: type: - string - 'null' zip_code: type: - string - 'null' description: Location of the candidate. custom_fields: type: - object - 'null' additionalProperties: true description: A key-value store of fields not covered by the schema. [Read more](/custom-fields) integration_fields: type: array items: type: object properties: id: type: string description: The globally unique ID of this object. key: type: string description: The key of the field in the remote system. type: type: string enum: - DEFAULT - CUSTOM description: '- `DEFAULT`: static fields in the remote system. - `CUSTOM`: fields that are created/editable by the user.' value: type: 'null' description: The field's value. label: type: - string - 'null' description: The label of the field. (not always available) required: - id - key - type - label description: An array of selected passthrough integration fields. [Read more](/integration-fields) examples: - - id: 5NVFhMpB9Ah6by44tzNjZLyE key: firstName type: DEFAULT value: Frank label: First Name - id: 8nuajYpoRd5GnxEQaaWKUDYQ key: customTshirtSize type: CUSTOM value: XL label: T-Shirt Size remote_url: type: - string - 'null' format: uri description: URL to the candidate profile in the source ATS system. When embedding this in your system, please consider that not for all ATS a dedicated candidate profile URL is available, so you might need to fall back to the application URL. remote_created_at: description: The date and time the object was created in the remote system. type: - string - 'null' format: date-time externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString remote_updated_at: description: A timestamp retrieved from the remote system, describing when the resource was last updated. type: - string - 'null' format: date-time externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString remote_data: type: - object - 'null' additionalProperties: true description: 'Includes the data fetched from the remote system. Please be aware that including this in you scope config might violate other scopes that are set. Remote data always has the endpoint path that we got the data from as the top level key. For example, it could look like: `{ "/companies": { ... }}` This is not available on all plans. Reach out to Kombo if you need it.' changed_at: description: The timestamp when this specific record was last modified. This field only updates when properties directly on this record change, NOT when related or nested models change. For filtering that considers nested data changes, use the `updated_after` parameter which will return records when either the record itself OR its related models have been updated. type: string format: date-time externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString remote_deleted_at: description: The date and time the object was deleted in the remote system. Objects are automatically marked as deleted when Kombo can't retrieve them from the remote system anymore. Kombo will also anonymize entries 14 days after they disappear. type: - string - 'null' format: date-time externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString applications: type: array items: type: object properties: id: type: string description: The globally unique ID of this object generated by Kombo. We recommend using this as a stable primary key for syncing. remote_id: type: - string - 'null' description: The raw ID of the object in the remote system. We don't recommend using this as a primary key on your side as it might sometimes be compromised of multiple identifiers if a system doesn't provide a clear primary key. outcome: type: - string - 'null' enum: - PENDING - HIRED - DECLINED description: 'Parsed status of the application. If Kombo identifies that the application was accepted and the candidate hired, it will be `HIRED`. If the application was rejected or the candidate declined, it will be `DECLINED`. If the application is still in process, it will be `PENDING`. Kombo will always try to deliver this information as reliably as possible.' rejection_reason_name: type: - string - 'null' description: Reason for the rejection of the candidate. rejected_at: description: The time that the application was rejected. type: - string - 'null' format: date-time externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString remote_url: type: - string - 'null' format: uri description: URL to the application in the source ATS system. When embedding this in your system, please consider that not for all ATS a dedicated application URL is available, so you might need to fall back to the candidate URL. changed_at: description: The timestamp when this specific record was last modified. This field only updates when properties directly on this record change, NOT when related or nested models change. For filtering that considers nested data changes, use the `updated_after` parameter which will return records when either the record itself OR its related models have been updated. type: string format: date-time externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString remote_created_at: description: The date and time the object was created in the remote system. type: - string - 'null' format: date-time externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString remote_updated_at: description: A timestamp retrieved from the remote system, describing when the resource was last updated. type: - string - 'null' format: date-time externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString current_stage: type: - object - 'null' properties: id: type: string description: The globally unique ID of this object generated by Kombo. We recommend using this as a stable primary key for syncing. name: type: - string - 'null' description: The application stage name. For example, "Initial Screening". remote_id: type: - string - 'null' description: The raw ID of the object in the remote system. We don't recommend using this as a primary key on your side as it might sometimes be compromised of multiple identifiers if a system doesn't provide a clear primary key. index: type: - integer - 'null' format: int64 examples: - 2 required: - id - name - remote_id - index job: type: - object - 'null' properties: id: type: string description: The globally unique ID of this object generated by Kombo. We recommend using this as a stable primary key for syncing. name: type: - string - 'null' description: Title of the job. remote_id: type: string description: The raw ID of the object in the remote system. We don't recommend using this as a primary key on your side as it might sometimes be compromised of multiple identifiers if a system doesn't provide a clear primary key. required: - id - name - remote_id examples: - id: H5daSm8e85Dmvmne3wLeCPhX name: Backend Engineer remote_id: '32' required: - id - remote_id - outcome - rejection_reason_name - rejected_at - remote_url - changed_at - remote_created_at - remote_updated_at - current_stage - job tags: type: array items: type: object properties: id: type: string description: The globally unique ID of this object generated by Kombo. We recommend using this as a stable primary key for syncing. name: type: - string - 'null' remote_id: type: - string - 'null' description: The raw ID of the object in the remote system. We don't recommend using this as a primary key on your side as it might sometimes be compromised of multiple identifiers if a system doesn't provide a clear primary key. required: - id - name - remote_id examples: - id: 26vafvWSRmbhNcxJYqjCzuJg name: High Potential remote_id: '32' required: - id - remote_id - first_name - last_name - company - title - confidential - source - custom_fields - integration_fields - remote_url - remote_created_at - remote_updated_at - remote_data - changed_at - remote_deleted_at - applications - tags examples: - id: 26vafvWSRmbhNcxJYqjCzuJg remote_id: '32' first_name: John last_name: Doe company: Acme, Inc. title: Head of Marketing confidential: false source: Employee Referral phone_numbers: - phone_number: +1-541-754-3010 type: HOME email_addresses: - email_address: john.doe@example.com type: PRIVATE social_media: - link: https://www.youtube.com/watch?v=dQw4w9WgXcQ type: YOUTUBE username: null location: city: Berlin country: DE raw: Berlin, Germany state: Berlin street_1: Lohmühlenstraße 65 street_2: null zip_code: '12435' custom_fields: {} integration_fields: [] remote_url: https://app.greenhouse.io/people/32 remote_created_at: '2022-04-02T00:00:00.000Z' remote_updated_at: '2022-04-04T00:00:00.000Z' remote_data: null changed_at: '2022-04-04T00:00:00.000Z' remote_deleted_at: null applications: - id: H77fDF8uvEzGNPRubiz5DvQ7 remote_id: '32' outcome: HIRED rejection_reason_name: null rejected_at: null remote_url: https://app.greenhouse.io/applications/32 changed_at: '2022-04-04T00:00:00.000Z' remote_created_at: '2022-04-02T00:00:00.000Z' remote_updated_at: '2022-04-04T00:00:00.000Z' current_stage: id: 5J7L4b48wBfffYwek9Az9pkM name: Initial Screening remote_id: '32' index: 2 job: id: H5daSm8e85Dmvmne3wLeCPhX name: Backend Engineer remote_id: '32' tags: - id: 26vafvWSRmbhNcxJYqjCzuJg name: High Potential remote_id: '32' warnings: type: array items: type: object properties: message: type: string required: - message description: These are the interaction warnings that are shown in the dashboard. They are meant to provide debug information to you. We recommend logging them to the console. required: - status - data - warnings GetAtsRejectionReasonsParameterUpdatedAfter: description: 'Filter the entries based on the modification date in format `YYYY-MM-DDTHH:mm:ss.sssZ`. Returns records where either the record itself **OR** its nested data has been updated since this timestamp, even if the record''s own `changed_at` field remains unchanged. If you want to track entry deletion, also set the `include_deleted=true` query parameter, because otherwise, deleted entries will be hidden. For more details, see [Understanding changed_at vs updated_after Behavior](https://docs.kombo.dev/ats/getting-started/fetching-data#understanding-changed_at-vs-updated_after-behavior). For this endpoint, only changes to the returned record itself are considered.' type: string format: date-time pattern: ^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d+)?)?Z?$ externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString GetAtsJobsParameterPostUrl: type: string description: Filter by the `post_url` field. Can be used to find a job based on its public posting URL. GetAtsCandidatesCandidateIdAttachmentsPositiveResponse: type: object properties: status: type: string const: success data: type: object properties: results: type: array items: type: object properties: id: type: string minLength: 24 maxLength: 24 pattern: ^[1-9A-HJ-NP-Za-km-z]+$ application_id: type: - string - 'null' minLength: 24 maxLength: 24 pattern: ^[1-9A-HJ-NP-Za-km-z]+$ description: The Kombo ID of the application this attachment belongs to. When this is null, the attachment is not specific to any application but the candidate. candidate_id: type: string minLength: 24 maxLength: 24 pattern: ^[1-9A-HJ-NP-Za-km-z]+$ description: The Kombo ID of the candidate this attachment belongs to. type: type: string enum: - CV - COVER_LETTER - OTHER remote_id: type: string data_url: type: string file_name: type: string content_type: type: string description: The MIME type of the attachment. remote_created_at: description: The date when the attachment was created. type: - string - 'null' format: date-time externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString remote_updated_at: description: The date when the attachment was last updated. type: - string - 'null' format: date-time externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString required: - id - application_id - candidate_id - type - remote_id - data_url - file_name - content_type - remote_created_at - remote_updated_at required: - results examples: - results: - id: EYJjhMQT3LtVKXnTbnRT8s6U application_id: null candidate_id: BTbkvY2w5ou3z3hdwuKcKzDh type: CV remote_id: GUzE666zfyjeoCJX6A8n7wh6 data_url: https://resources.kombo.dev/EYJjhMQT3LtVKXnTbnRT8s6U file_name: Frank Doe CV.pdf content_type: application/pdf remote_created_at: null remote_updated_at: null warnings: type: array items: type: object properties: message: type: string required: - message description: These are the interaction warnings that are shown in the dashboard. They are meant to provide debug information to you. We recommend logging them to the console. required: - status - data - warnings GetAtsJobsParameterVisibilities: type: string description: "Filter by a comma-separated list of `PUBLIC`, `INTERNAL`, `UNLISTED`, `CONFIDENTIAL` \n\nLeave this blank to get results matching all values." GetAtsJobsParameterNameContains: type: string description: Filter by the `name` field. Can be used to find a job by keywords present in the job name. GetAtsJobsParameterUpdatedAfter: description: 'Filter the entries based on the modification date in format `YYYY-MM-DDTHH:mm:ss.sssZ`. Returns records where either the record itself **OR** its nested data has been updated since this timestamp, even if the record''s own `changed_at` field remains unchanged. If you want to track entry deletion, also set the `include_deleted=true` query parameter, because otherwise, deleted entries will be hidden. For more details, see [Understanding changed_at vs updated_after Behavior](https://docs.kombo.dev/ats/getting-started/fetching-data#understanding-changed_at-vs-updated_after-behavior). For this endpoint, `updated_after` matches when the returned record changed, or when related data changed as described below. | Path | Added/Removed | Linked Record | | --- | --- | --- | | `stages` | ✓ Yes | ✗ No | | `screening_questions` | ✓ Yes | ✗ No | | `job_postings` | ✓ Yes | ✓ Yes | | `hiring_team` | ✓ Yes | ✗ No | _**Added/Removed**: Whether adding or removing entries from this list triggers an update (n/a for single records). **Linked Record**: Whether changes to the linked record itself trigger an update._' type: string format: date-time pattern: ^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d+)?)?Z?$ externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString GetAtsUsersParameterIds: type: string description: Filter by a comma-separated list of IDs such as `222k7eCGyUdgt2JWZDNnkDs3,B5DVmypWENfU6eMe6gYDyJG3`. GetAtsJobsParameterPageSize: type: integer format: int64 minimum: 1 maximum: 250 default: 100 description: The number of results to return per page. Maximum is 250. GetAtsJobsParameterIds: type: string description: Filter by a comma-separated list of IDs such as `222k7eCGyUdgt2JWZDNnkDs3,B5DVmypWENfU6eMe6gYDyJG3`. PostAtsApplicationsApplicationIdInterviewsRequestBody: type: object properties: title: type: string description: The title of the interview start_time: type: string description: The start time of the interview end_time: type: string description: The end time of the interview interviewer_user_ids: type: array items: type: string description: The IDs of the interviewers organizer_user_id: type: string description: The ID of the organizer location: type: object properties: type: type: string enum: - PHYSICAL - VIRTUAL address: type: string description: The address of the interview required: - type required: - title - start_time - end_time - interviewer_user_ids - organizer_user_id - location GetAtsCandidatesParameterEmail: type: string description: Filter the candidates based on an email address. When set, returns only the candidates where the given `email` is in `email_addresses`. This filter is case-insensitive. format: email GetAtsCandidatesParameterUpdatedAfter: description: 'Filter the entries based on the modification date in format `YYYY-MM-DDTHH:mm:ss.sssZ`. Returns records where either the record itself **OR** its nested data has been updated since this timestamp, even if the record''s own `changed_at` field remains unchanged. If you want to track entry deletion, also set the `include_deleted=true` query parameter, because otherwise, deleted entries will be hidden. For more details, see [Understanding changed_at vs updated_after Behavior](https://docs.kombo.dev/ats/getting-started/fetching-data#understanding-changed_at-vs-updated_after-behavior). For this endpoint, `updated_after` matches when the returned record changed, or when related data changed as described below. | Path | Added/Removed | Linked Record | | --- | --- | --- | | `applications` | ✓ Yes | ✓ Yes | | `applications` → `current_stage` | ✗ No | ✗ No | | `applications` → `job` | ✗ No | ✗ No | | `tags` | ✓ Yes | ✗ No | _**Added/Removed**: Whether adding or removing entries from this list triggers an update (n/a for single records). **Linked Record**: Whether changes to the linked record itself trigger an update._' type: string format: date-time pattern: ^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d+)?)?Z?$ externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString PostAtsCandidatesCandidateIdResultLinksRequestBody: type: object properties: label: type: string description: If the system allows us to display a display name for the link, we will use this label. url: type: string format: uri description: URL of the link. details: type: object properties: custom_field_name_prefix: type: string description: 'That will be added to the attribute labels if they are used for custom fields. If you specify `Acme:` as the prefix, the custom field will be named `Acme: Score`. Putting in the name of your company/product is a good idea.' attributes: type: array items: type: object properties: key: type: string description: The name of the attribute value: type: string description: The value of the attribute required: - key - value required: - custom_field_name_prefix - attributes description: 'Additional details with attributes that will be added to the result. This can be percentages, scores, or any text. We generally recommend using short attribute keys and a short custom_field_name_prefix to avoid overflowing the ATS UI.' remote_fields: allOf: - type: object properties: icims: type: object properties: assessment_package_id: type: string description: The package ID of the assessment that the result link will be added to. description: Fields specific to iCIMS. oracle: type: object properties: override_document_category: type: string enum: - IRC_CANDIDATE_RESUME - IRC_CANDIDATE_COVERLETTER - MISC - IRC_INTERNAL description: 'Allows you to override the document category for the url. (Default: MISC)' multi_post_to_all_current_applications: type: boolean description: If true, the result link will be posted to all current applications for the candidate. description: Fields specific to Oracle. description: Additional fields that we will pass through to specific ATS systems. - type: object properties: greenhouse: type: object properties: post_headers: type: object properties: On-Behalf-Of: type: - string - 'null' description: ID of the the user that will show up as having performed the action in Greenhouse. We already pass a value by default, but you can use this to override it. description: Headers we will pass with `POST` requests to Greenhouse. description: Fields specific to Greenhouse. workable: type: object properties: on_behalf_of_user_remote_id: type: string description: The remote ID of the user that will be displayed in the UI as the one that performed the action. description: Workable specific remote fields for ATS actions. description: Additional fields that we will pass through to specific ATS systems. description: Additional fields that we will pass through to specific ATS systems. required: - label - url GetAtsApplicationsParameterUpdatedAfter: description: 'Filter the entries based on the modification date in format `YYYY-MM-DDTHH:mm:ss.sssZ`. Returns records where either the record itself **OR** its nested data has been updated since this timestamp, even if the record''s own `changed_at` field remains unchanged. If you want to track entry deletion, also set the `include_deleted=true` query parameter, because otherwise, deleted entries will be hidden. For more details, see [Understanding changed_at vs updated_after Behavior](https://docs.kombo.dev/ats/getting-started/fetching-data#understanding-changed_at-vs-updated_after-behavior). For this endpoint, `updated_after` matches when the returned record changed, or when related data changed as described below. | Path | Added/Removed | Linked Record | | --- | --- | --- | | `candidate` | n/a | ✓ Yes | | `candidate` → `tags` | ✗ No | ✗ No | | `current_stage` | n/a | ✓ Yes | | `job` | ✗ No | ✗ No | | `interviews` | ✓ Yes | ✓ Yes | | `offers` | ✓ Yes | ✓ Yes | _**Added/Removed**: Whether adding or removing entries from this list triggers an update (n/a for single records). **Linked Record**: Whether changes to the linked record itself trigger an update._' type: string format: date-time pattern: ^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d+)?)?Z?$ externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString GetAtsUsersParameterEmails: type: string description: Filter by a comma-separated list of emails. We will only return users who have _any_ of the emails. The format of the emails is case-insensitive. PostAtsCandidatesCandidateIdTagsPositiveResponse: type: object properties: status: type: string const: success data: type: object examples: - {} warnings: type: array items: type: object properties: message: type: string required: - message description: These are the interaction warnings that are shown in the dashboard. They are meant to provide debug information to you. We recommend logging them to the console. required: - status - data - warnings GetAtsRejectionReasonsParameterIncludeDeleted: type: string enum: - 'true' - 'false' default: 'false' description: By default, deleted entries are not returned. Use the `include_deleted` query param to include deleted entries too. GetAtsCandidatesParameterIgnoreUnsupportedFilters: type: string enum: - 'true' - 'false' default: 'false' description: When set to `true`, filters targeting fields not supported by this integration will be ignored instead of filtering out all results. GetAtsApplicationStagesParameterUpdatedAfter: description: 'Filter the entries based on the modification date in format `YYYY-MM-DDTHH:mm:ss.sssZ`. Returns records where either the record itself **OR** its nested data has been updated since this timestamp, even if the record''s own `changed_at` field remains unchanged. If you want to track entry deletion, also set the `include_deleted=true` query parameter, because otherwise, deleted entries will be hidden. For more details, see [Understanding changed_at vs updated_after Behavior](https://docs.kombo.dev/ats/getting-started/fetching-data#understanding-changed_at-vs-updated_after-behavior). For this endpoint, only changes to the returned record itself are considered.' type: string format: date-time pattern: ^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d+)?)?Z?$ externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString GetAtsCandidatesParameterIds: type: string description: Filter by a comma-separated list of IDs such as `222k7eCGyUdgt2JWZDNnkDs3,B5DVmypWENfU6eMe6gYDyJG3`. GetAtsUsersParameterCursor: type: string description: An optional cursor string used for pagination. This can be retrieved from the `next` property of the previous page response. GetAtsTagsParameterRemoteIds: type: string description: Filter by a comma-separated list of remote IDs. GetAtsOffersParameterRemoteIds: type: string description: Filter by a comma-separated list of remote IDs. GetAtsApplicationsPositiveResponse: type: object properties: status: type: string const: success data: type: object properties: next: type: - string - 'null' description: Cursor string that can be passed to the `cursor` query parameter to get the next page. If this is `null`, then there are no more pages. results: type: array items: type: object properties: id: type: string description: The globally unique ID of this object generated by Kombo. We recommend using this as a stable primary key for syncing. remote_id: type: - string - 'null' description: The raw ID of the object in the remote system. We don't recommend using this as a primary key on your side as it might sometimes be compromised of multiple identifiers if a system doesn't provide a clear primary key. outcome: type: - string - 'null' enum: - PENDING - HIRED - DECLINED description: 'Parsed status of the application. If Kombo identifies that the application was accepted and the candidate hired, it will be `HIRED`. If the application was rejected or the candidate declined, it will be `DECLINED`. If the application is still in process, it will be `PENDING`. Kombo will always try to deliver this information as reliably as possible.' rejection_reason_name: type: - string - 'null' description: Reason for the rejection of the candidate. rejected_at: description: The time that the application was rejected. type: - string - 'null' format: date-time externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString current_stage_id: type: - string - 'null' description: ID of the current application stage job_id: type: - string - 'null' description: The Kombo ID of the job which the candidate applied to. The ID can be used to retrieve the job from the `get jobs` endpoint. candidate_id: type: - string - 'null' description: The Kombo ID of the candidate who applied to the job. The ID can be used to retrieve the candidate from the `get candidates` endpoint. screening_question_answers: type: - array - 'null' items: anyOf: - type: object properties: answer: type: object properties: content: type: - string - 'null' required: - content question: type: object properties: remote_id: type: - string - 'null' title: type: string type: type: string const: TEXT required: - remote_id - title - type required: - answer - question - type: object properties: answer: type: object properties: choice: type: - string - 'null' required: - choice question: type: object properties: remote_id: type: - string - 'null' title: type: string type: type: string const: SINGLE_SELECT required: - remote_id - title - type required: - answer - question - type: object properties: answer: type: object properties: choices: type: array items: type: string default: [] question: type: object properties: remote_id: type: - string - 'null' title: type: string type: type: string const: MULTI_SELECT required: - remote_id - title - type required: - answer - question - type: object properties: answer: type: object properties: checked: type: - boolean - 'null' required: - checked question: type: object properties: remote_id: type: - string - 'null' title: type: string type: type: string const: BOOLEAN required: - remote_id - title - type required: - answer - question - type: object properties: answer: type: object properties: number: type: - number - 'null' format: double minimum: -1.7976931348623157e+308 required: - number question: type: object properties: remote_id: type: - string - 'null' title: type: string type: type: string const: NUMBER required: - remote_id - title - type required: - answer - question - type: object properties: answer: type: object properties: date: type: - string - 'null' format: date-time pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?Z$ required: - date question: type: object properties: remote_id: type: - string - 'null' title: type: string type: type: string const: DATE required: - remote_id - title - type required: - answer - question - type: object properties: answer: type: object properties: raw: type: 'null' description: We pass the original question data along so you can handle it. question: type: object properties: remote_id: type: - string - 'null' title: type: string type: type: string const: UNKNOWN description: When we're not able to map a specific question type yet, we will return this type. Every `UNKNOWN` question will also be parsed and unified by us at some point. required: - remote_id - title - type required: - answer - question default: [] description: A list of answers to screening questions. The screening answer type `FILE` is currently unsupported. custom_fields: type: - object - 'null' additionalProperties: true description: A key-value store of fields not covered by the schema. [Read more](/custom-fields) integration_fields: type: array items: type: object properties: id: type: string description: The globally unique ID of this object. key: type: string description: The key of the field in the remote system. type: type: string enum: - DEFAULT - CUSTOM description: '- `DEFAULT`: static fields in the remote system. - `CUSTOM`: fields that are created/editable by the user.' value: type: 'null' description: The field's value. label: type: - string - 'null' description: The label of the field. (not always available) required: - id - key - type - label description: An array of selected passthrough integration fields. [Read more](/integration-fields) examples: - - id: 5NVFhMpB9Ah6by44tzNjZLyE key: firstName type: DEFAULT value: Frank label: First Name - id: 8nuajYpoRd5GnxEQaaWKUDYQ key: customTshirtSize type: CUSTOM value: XL label: T-Shirt Size remote_url: type: - string - 'null' format: uri description: URL to the application in the source ATS system. When embedding this in your system, please consider that not for all ATS a dedicated application URL is available, so you might need to fall back to the candidate URL. changed_at: description: The timestamp when this specific record was last modified. This field only updates when properties directly on this record change, NOT when related or nested models change. For filtering that considers nested data changes, use the `updated_after` parameter which will return records when either the record itself OR its related models have been updated. type: string format: date-time externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString remote_deleted_at: description: The date and time the object was deleted in the remote system. Objects are automatically marked as deleted when Kombo can't retrieve them from the remote system anymore. Kombo will also anonymize entries 14 days after they disappear. type: - string - 'null' format: date-time externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString remote_created_at: description: The date and time the object was created in the remote system. type: - string - 'null' format: date-time externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString remote_updated_at: description: A timestamp retrieved from the remote system, describing when the resource was last updated. type: - string - 'null' format: date-time externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString remote_data: type: - object - 'null' additionalProperties: true description: 'Includes the data fetched from the remote system. Please be aware that including this in you scope config might violate other scopes that are set. Remote data always has the endpoint path that we got the data from as the top level key. For example, it could look like: `{ "/companies": { ... }}` This is not available on all plans. Reach out to Kombo if you need it.' candidate: type: - object - 'null' properties: id: type: string description: The globally unique ID of this object generated by Kombo. We recommend using this as a stable primary key for syncing. remote_id: type: string description: The raw ID of the object in the remote system. We don't recommend using this as a primary key on your side as it might sometimes be compromised of multiple identifiers if a system doesn't provide a clear primary key. first_name: type: - string - 'null' description: First name of the candidate. last_name: type: - string - 'null' description: Last name of the candidate. email_addresses: type: - array - 'null' items: type: object properties: email_address: type: - string - 'null' pattern: ^(?!\.)(?!.*\.\.)([\w'+-.]*)[\w+-]@([\da-z][\da-z-]*\.)+[a-z]{2,}$ type: type: - string - 'null' description: Kombo exposes type information through this field. If we don't get any information from the tool, we will set this to `null`. required: - type default: [] description: A list of email addresses of the candidate with an optional type. If an email address is invalid, it will be filtered out. phone_numbers: type: - array - 'null' items: type: object properties: phone_number: type: string type: type: - string - 'null' description: Kombo exposes type information through this field. If we don't get any information from the tool, we will set this to `null`. required: - phone_number default: [] description: A list of phone numbers of the candidate. social_media: type: - array - 'null' items: type: object properties: link: type: - string - 'null' type: type: - string - 'null' username: type: - string - 'null' default: [] description: List of social media accounts of the candidate. source: type: - string - 'null' description: The hiring source of the candidate. If you're a job board or recruiting service, you can use this to validate which candidates applied through your service and ensure that the correct referral compensation is paid out. remote_url: type: - string - 'null' format: uri description: URL to the candidate profile in the source ATS system. When embedding this in your system, please consider that not for all ATS a dedicated candidate profile URL is available, so you might need to fall back to the application URL. tags: type: array items: type: object properties: id: type: string description: The globally unique ID of this object generated by Kombo. We recommend using this as a stable primary key for syncing. remote_id: type: - string - 'null' description: The raw ID of the object in the remote system. We don't recommend using this as a primary key on your side as it might sometimes be compromised of multiple identifiers if a system doesn't provide a clear primary key. name: type: - string - 'null' required: - id - remote_id - name examples: - id: 26vafvWSRmbhNcxJYqjCzuJg remote_id: '32' name: High Potential required: - id - remote_id - first_name - last_name - source - remote_url - tags current_stage: type: - object - 'null' properties: id: type: string description: The globally unique ID of this object generated by Kombo. We recommend using this as a stable primary key for syncing. remote_id: type: - string - 'null' description: The raw ID of the object in the remote system. We don't recommend using this as a primary key on your side as it might sometimes be compromised of multiple identifiers if a system doesn't provide a clear primary key. name: type: - string - 'null' description: The application stage name. For example, "Initial Screening". index: type: - integer - 'null' format: int64 examples: - 2 required: - id - remote_id - name - index job: type: - object - 'null' properties: id: type: string description: The globally unique ID of this object generated by Kombo. We recommend using this as a stable primary key for syncing. remote_id: type: string description: The raw ID of the object in the remote system. We don't recommend using this as a primary key on your side as it might sometimes be compromised of multiple identifiers if a system doesn't provide a clear primary key. name: type: - string - 'null' description: Title of the job. required: - id - remote_id - name examples: - id: H5daSm8e85Dmvmne3wLeCPhX remote_id: '32' name: Backend Engineer interviews: type: array items: type: object properties: id: type: string description: The globally unique ID of this object generated by Kombo. We recommend using this as a stable primary key for syncing. remote_id: type: - string - 'null' description: The raw ID of the object in the remote system. We don't recommend using this as a primary key on your side as it might sometimes be compromised of multiple identifiers if a system doesn't provide a clear primary key. title: type: - string - 'null' description: The title of the interview. starting_at: description: The start time of the interview. type: - string - 'null' format: date-time externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString ending_at: description: The end time of the interview. type: - string - 'null' format: date-time externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString location: type: - object - 'null' properties: city: type: - string - 'null' country: type: - string - 'null' description: Contains the ISO2 country code if possible. If not, it contains the original value. raw: type: - string - 'null' description: If we have address data, this is filled with the raw address string. state: type: - string - 'null' street_1: type: - string - 'null' description: If we can parse the address data, this field contains the first part of the street information. street_2: type: - string - 'null' zip_code: type: - string - 'null' description: Location of the interview. canceled: type: - boolean - 'null' description: Whether the interview was canceled or not. If we have no information, this field will be `null`. required: - id - remote_id - title - starting_at - ending_at - canceled examples: - id: 26vafvWSRmbhNcxJYqjCzuJg remote_id: '32' title: Interview with John Doe starting_at: '2023-06-26T14:30:00.000Z' ending_at: '2023-06-26T15:30:00.000Z' location: city: Berlin country: DE raw: Berlin, Germany state: Berlin street_1: Lohmühlenstraße 65 street_2: null zip_code: '12435' canceled: false offers: type: array items: type: object properties: id: type: string description: The globally unique ID of this object generated by Kombo. We recommend using this as a stable primary key for syncing. remote_id: type: - string - 'null' description: The raw ID of the object in the remote system. We don't recommend using this as a primary key on your side as it might sometimes be compromised of multiple identifiers if a system doesn't provide a clear primary key. status: type: - string - 'null' enum: - ACCEPTED - DECLINED - SENT - APPROVED - DRAFT - ABANDONED description: 'The offer’s current status. The usual flow of statuses is as follows: `DRAFT` -> `APPROVED` -> `SENT` -> `ACCEPTED` or `DECLINED`. Please note that not all systems will expose all statuses. For example, most systems do not include the `APPROVED` status - `ACCEPTED`: The offer was accepted by the candidate. - `DECLINED`: The offer was declined by the candidate. - `SENT`: The offer was sent to the candidate. - `APPROVED`: The draft was approved. - `DRAFT`: The offer is a draft and has not yet been sent to the candidate. - `ABANDONED`: The offer has expired or is no longer valid and should not be considered. ' required: - id - remote_id - status examples: - id: 76bab8LKuFtqpZ89mofCPMHX remote_id: '6' status: ACCEPTED required: - id - remote_id - outcome - rejection_reason_name - rejected_at - current_stage_id - job_id - candidate_id - custom_fields - integration_fields - remote_url - changed_at - remote_deleted_at - remote_created_at - remote_updated_at - remote_data - candidate - current_stage - job - interviews - offers required: - next - results examples: - next: eyJwYWdlIjoxMiwibm90ZSI6InRoaXMgaXMganVzdCBhbiBleGFtcGxlIGFuZCBub3QgcmVwcmVzZW50YXRpdmUgZm9yIGEgcmVhbCBjdXJzb3IhIn0= results: - id: H77fDF8uvEzGNPRubiz5DvQ7 remote_id: '32' outcome: HIRED rejection_reason_name: null rejected_at: null current_stage_id: 5J7L4b48wBfffYwek9Az9pkM job_id: H5daSm8e85Dmvmne3wLeCPhX candidate_id: 26vafvWSRmbhNcxJYqjCzuJg screening_question_answers: - answer: choice: TypeScript question: remote_id: 48b4d36a-1d4b-4c50-ada7-9519078e65b4 title: Which is your primary programming language type: SINGLE_SELECT custom_fields: {} integration_fields: [] remote_url: https://app.greenhouse.io/applications/32 changed_at: '2022-08-07T14:01:29.196Z' remote_deleted_at: null remote_created_at: '2022-08-07T14:01:29.196Z' remote_updated_at: '2022-08-07T14:01:29.196Z' remote_data: null candidate: id: 26vafvWSRmbhNcxJYqjCzuJg remote_id: '32' first_name: John last_name: Doe email_addresses: - email_address: john.doe@example.com type: PRIVATE phone_numbers: - phone_number: +1-541-754-3010 type: HOME social_media: - link: https://www.youtube.com/watch?v=dQw4w9WgXcQ type: YOUTUBE username: null source: Employee Referral remote_url: https://app.greenhouse.io/people/32 tags: - id: 26vafvWSRmbhNcxJYqjCzuJg remote_id: '32' name: High Potential current_stage: id: 5J7L4b48wBfffYwek9Az9pkM remote_id: '32' name: Initial Screening index: 2 job: id: H5daSm8e85Dmvmne3wLeCPhX remote_id: '32' name: Backend Engineer interviews: - id: 26vafvWSRmbhNcxJYqjCzuJg remote_id: '32' title: Interview with John Doe starting_at: '2023-06-26T14:30:00.000Z' ending_at: '2023-06-26T15:30:00.000Z' location: city: Berlin country: DE raw: Berlin, Germany state: Berlin street_1: Lohmühlenstraße 65 street_2: null zip_code: '12435' canceled: false offers: - id: 76bab8LKuFtqpZ89mofCPMHX remote_id: '6' status: ACCEPTED required: - status - data GetAtsJobsParameterRemoteIds: type: string description: Filter by a comma-separated list of remote IDs. GetAtsActionsAtsCreateCandidatePositiveResponse: type: object properties: status: type: string const: success data: type: object properties: attachment_restrictions: type: - object - 'null' properties: total_size_bytes: type: - number - 'null' format: double minimum: -1.7976931348623157e+308 description: The maximum total size of all attachments. If null, we don' have information about the total size of all attachments. Make sure to consider the total request size limits of Kombo. types: type: object properties: CV: anyOf: - type: object properties: is_supported: type: boolean const: true min_amount: type: - number - 'null' format: double minimum: -1.7976931348623157e+308 description: The minimum amount of attachments. If null, we don' have information about the minimum amount. max_amount: type: - number - 'null' format: double minimum: -1.7976931348623157e+308 description: The maximum amount of attachments. If null, we don' have information about the maximum amount. max_file_size_bytes: type: - number - 'null' format: double minimum: -1.7976931348623157e+308 description: The maximum file size in bytes. If null, we don't have information about the maximum file size. accepted_mime_types: type: - array - 'null' items: type: string description: The accepted mime types. If null, we don't have information about the accepted mime types. required: - is_supported - min_amount - max_amount - max_file_size_bytes - accepted_mime_types - type: object properties: is_supported: type: boolean const: false required: - is_supported description: Specific attachment type restrictions for CV. COVER_LETTER: anyOf: - type: object properties: is_supported: type: boolean const: true min_amount: type: - number - 'null' format: double minimum: -1.7976931348623157e+308 description: The minimum amount of attachments. If null, we don' have information about the minimum amount. max_amount: type: - number - 'null' format: double minimum: -1.7976931348623157e+308 description: The maximum amount of attachments. If null, we don' have information about the maximum amount. max_file_size_bytes: type: - number - 'null' format: double minimum: -1.7976931348623157e+308 description: The maximum file size in bytes. If null, we don't have information about the maximum file size. accepted_mime_types: type: - array - 'null' items: type: string description: The accepted mime types. If null, we don't have information about the accepted mime types. required: - is_supported - min_amount - max_amount - max_file_size_bytes - accepted_mime_types - type: object properties: is_supported: type: boolean const: false required: - is_supported description: Specific attachment type restrictions for COVER_LETTER. OTHER: anyOf: - type: object properties: is_supported: type: boolean const: true min_amount: type: - number - 'null' format: double minimum: -1.7976931348623157e+308 description: The minimum amount of attachments. If null, we don' have information about the minimum amount. max_amount: type: - number - 'null' format: double minimum: -1.7976931348623157e+308 description: The maximum amount of attachments. If null, we don' have information about the maximum amount. max_file_size_bytes: type: - number - 'null' format: double minimum: -1.7976931348623157e+308 description: The maximum file size in bytes. If null, we don't have information about the maximum file size. accepted_mime_types: type: - array - 'null' items: type: string description: The accepted mime types. If null, we don't have information about the accepted mime types. required: - is_supported - min_amount - max_amount - max_file_size_bytes - accepted_mime_types - type: object properties: is_supported: type: boolean const: false required: - is_supported description: Specific attachment type restrictions for OTHER. required: - CV - COVER_LETTER - OTHER description: Specific attachment type restrictions for each attachment type. If null, we don' have information about the attachment type restrictions. required: - total_size_bytes - types description: Restrictions with attachment types that we know about. If this is null, we don't have information about restrictions on attachments. examples: - attachment_restrictions: total_size_bytes: 20000000 types: CV: is_supported: true min_amount: 1 max_amount: 1 max_file_size_bytes: 10000000 accepted_mime_types: - application/pdf - application/msword COVER_LETTER: is_supported: true min_amount: 0 max_amount: null max_file_size_bytes: null accepted_mime_types: null OTHER: is_supported: false required: - status - data GetAtsRejectionReasonsParameterRemoteIds: type: string description: Filter by a comma-separated list of remote IDs. GetAtsInterviewsPositiveResponse: type: object properties: status: type: string const: success data: type: object properties: next: type: - string - 'null' description: Cursor string that can be passed to the `cursor` query parameter to get the next page. If this is `null`, then there are no more pages. results: type: array items: type: object properties: id: type: string description: The globally unique ID of this object generated by Kombo. We recommend using this as a stable primary key for syncing. remote_id: type: - string - 'null' description: The raw ID of the object in the remote system. We don't recommend using this as a primary key on your side as it might sometimes be compromised of multiple identifiers if a system doesn't provide a clear primary key. title: type: - string - 'null' description: The title of the interview. starting_at: description: The start time of the interview. type: - string - 'null' format: date-time externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString ending_at: description: The end time of the interview. type: - string - 'null' format: date-time externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString location: type: - object - 'null' properties: city: type: - string - 'null' country: type: - string - 'null' description: Contains the ISO2 country code if possible. If not, it contains the original value. raw: type: - string - 'null' description: If we have address data, this is filled with the raw address string. state: type: - string - 'null' street_1: type: - string - 'null' description: If we can parse the address data, this field contains the first part of the street information. street_2: type: - string - 'null' zip_code: type: - string - 'null' description: Location of the interview. video_conferencing_url: type: - string - 'null' description: The URL of the video conferencing platform used for the interview. application_id: type: - string - 'null' description: The Kombo ID of the application this interview belongs to. The ID can be used to retrieve the application from the `get applications` endpoint. stage_id: type: - string - 'null' description: If a system specifies to which stage this interview belongs to, this field will be the Kombo ID of the application stage. The ID can be used to retrieve the stage from the `get application stages` endpoint. canceled: type: - boolean - 'null' description: Whether the interview was canceled or not. If we have no information, this field will be `null`. remote_created_at: description: The date and time the object was created in the remote system. type: - string - 'null' format: date-time externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString remote_updated_at: description: A timestamp retrieved from the remote system, describing when the resource was last updated. type: - string - 'null' format: date-time externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString remote_data: type: - object - 'null' additionalProperties: true description: 'Includes the data fetched from the remote system. Please be aware that including this in you scope config might violate other scopes that are set. Remote data always has the endpoint path that we got the data from as the top level key. For example, it could look like: `{ "/companies": { ... }}` This is not available on all plans. Reach out to Kombo if you need it.' changed_at: description: The timestamp when this specific record was last modified. This field only updates when properties directly on this record change, NOT when related or nested models change. For filtering that considers nested data changes, use the `updated_after` parameter which will return records when either the record itself OR its related models have been updated. type: string format: date-time externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString remote_deleted_at: description: The date and time the object was deleted in the remote system. Objects are automatically marked as deleted when Kombo can't retrieve them from the remote system anymore. Kombo will also anonymize entries 14 days after they disappear. type: - string - 'null' format: date-time externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString users: type: array items: type: object properties: id: type: string description: The globally unique ID of this object generated by Kombo. We recommend using this as a stable primary key for syncing. remote_id: type: - string - 'null' description: The raw ID of the object in the remote system. We don't recommend using this as a primary key on your side as it might sometimes be compromised of multiple identifiers if a system doesn't provide a clear primary key. first_name: type: - string - 'null' description: First name of the user. last_name: type: - string - 'null' description: Last name of the user. email: type: - string - 'null' pattern: ^(?!\.)(?!.*\.\.)([\w'+-.]*)[\w+-]@([\da-z][\da-z-]*\.)+[a-z]{2,}$ description: Email of the user. If the email address is invalid, it will be set to null. required: - id - remote_id - first_name - last_name examples: - id: 26vafvWSRmbhNcxJYqjCzuJg remote_id: '32' first_name: John last_name: Doe email: john.doe@kombo.dev application: type: - object - 'null' properties: id: type: string description: The globally unique ID of this object generated by Kombo. We recommend using this as a stable primary key for syncing. remote_id: type: - string - 'null' description: The raw ID of the object in the remote system. We don't recommend using this as a primary key on your side as it might sometimes be compromised of multiple identifiers if a system doesn't provide a clear primary key. outcome: type: - string - 'null' enum: - PENDING - HIRED - DECLINED description: 'Parsed status of the application. If Kombo identifies that the application was accepted and the candidate hired, it will be `HIRED`. If the application was rejected or the candidate declined, it will be `DECLINED`. If the application is still in process, it will be `PENDING`. Kombo will always try to deliver this information as reliably as possible.' rejection_reason_name: type: - string - 'null' description: Reason for the rejection of the candidate. candidate: type: - object - 'null' properties: id: type: string description: The globally unique ID of this object generated by Kombo. We recommend using this as a stable primary key for syncing. remote_id: type: string description: The raw ID of the object in the remote system. We don't recommend using this as a primary key on your side as it might sometimes be compromised of multiple identifiers if a system doesn't provide a clear primary key. first_name: type: - string - 'null' description: First name of the candidate. last_name: type: - string - 'null' description: Last name of the candidate. email_addresses: type: - array - 'null' items: type: object properties: email_address: type: - string - 'null' pattern: ^(?!\.)(?!.*\.\.)([\w'+-.]*)[\w+-]@([\da-z][\da-z-]*\.)+[a-z]{2,}$ type: type: - string - 'null' description: Kombo exposes type information through this field. If we don't get any information from the tool, we will set this to `null`. required: - type default: [] description: A list of email addresses of the candidate with an optional type. If an email address is invalid, it will be filtered out. required: - id - remote_id - first_name - last_name examples: - id: 26vafvWSRmbhNcxJYqjCzuJg remote_id: '32' first_name: John last_name: Doe email_addresses: - email_address: john.doe@example.com type: PRIVATE job: type: - object - 'null' properties: id: type: string description: The globally unique ID of this object generated by Kombo. We recommend using this as a stable primary key for syncing. remote_id: type: string description: The raw ID of the object in the remote system. We don't recommend using this as a primary key on your side as it might sometimes be compromised of multiple identifiers if a system doesn't provide a clear primary key. name: type: - string - 'null' description: Title of the job. required: - id - remote_id - name examples: - id: H5daSm8e85Dmvmne3wLeCPhX remote_id: '32' name: Backend Engineer required: - id - remote_id - outcome - rejection_reason_name - candidate - job required: - id - remote_id - title - starting_at - ending_at - video_conferencing_url - application_id - stage_id - canceled - remote_created_at - remote_updated_at - remote_data - changed_at - remote_deleted_at - users - application required: - next - results examples: - next: eyJwYWdlIjoxMiwibm90ZSI6InRoaXMgaXMganVzdCBhbiBleGFtcGxlIGFuZCBub3QgcmVwcmVzZW50YXRpdmUgZm9yIGEgcmVhbCBjdXJzb3IhIn0= results: - id: 26vafvWSRmbhNcxJYqjCzuJg remote_id: '32' title: Interview with John Doe starting_at: '2023-06-26T14:30:00.000Z' ending_at: '2023-06-26T15:30:00.000Z' location: city: Berlin country: DE raw: Berlin, Germany state: Berlin street_1: Lohmühlenstraße 65 street_2: null zip_code: '12435' video_conferencing_url: https://meet.example.com/interview-abc123 application_id: H77fDF8uvEzGNPRubiz5DvQ7 stage_id: H5daSm8e85Dmvmne3wLeCPhX canceled: false remote_created_at: '2022-08-07T14:01:29.196Z' remote_updated_at: '2022-08-07T14:01:29.196Z' remote_data: null changed_at: '2022-08-07T14:01:29.196Z' remote_deleted_at: null users: - id: 26vafvWSRmbhNcxJYqjCzuJg remote_id: '32' first_name: John last_name: Doe email: john.doe@kombo.dev application: id: H77fDF8uvEzGNPRubiz5DvQ7 remote_id: '32' outcome: HIRED rejection_reason_name: null candidate: id: 26vafvWSRmbhNcxJYqjCzuJg remote_id: '32' first_name: John last_name: Doe email_addresses: - email_address: john.doe@example.com type: PRIVATE job: id: H5daSm8e85Dmvmne3wLeCPhX remote_id: '32' name: Backend Engineer required: - status - data PostAtsApplicationsApplicationIdInterviewsParameterApplicationId: type: string description: The ID of the application PostAtsApplicationsApplicationIdResultLinksRequestBody: type: object properties: label: type: string description: If we can display a display name for the link, we will use this label. url: type: string format: uri description: URL of the link. details: type: object properties: custom_field_name_prefix: type: string description: 'That will be added to the attribute labels if they are used for custom fields. If you specify `Acme:` as the prefix, the custom field will be named `Acme: Score`. Putting in the name of your company/product is a good idea.' attributes: type: array items: type: object properties: key: type: string description: The name of the attribute value: type: string description: The value of the attribute required: - key - value required: - custom_field_name_prefix - attributes description: 'Additional details with attributes that will be added to the result. This can be percentages, scores, or any text. We generally recommend using short attribute keys and a short custom_field_name_prefix to avoid overflowing the ATS UI.' remote_fields: allOf: - type: object properties: icims: type: object properties: assessment_package_id: type: string description: The package ID of the assessment that the result link will be added to. description: Fields specific to iCIMS. oracle: type: object properties: override_document_category: type: string enum: - IRC_CANDIDATE_RESUME - IRC_CANDIDATE_COVERLETTER - MISC - IRC_INTERNAL description: 'Allows you to override the document category for the url. (Default: MISC)' multi_post_to_all_current_applications: type: boolean description: If true, the result link will be posted to all current applications for the candidate. description: Fields specific to Oracle. description: Additional fields that we will pass through to specific ATS systems. - type: object properties: greenhouse: type: object properties: post_headers: type: object properties: On-Behalf-Of: type: - string - 'null' description: ID of the the user that will show up as having performed the action in Greenhouse. We already pass a value by default, but you can use this to override it. description: Headers we will pass with `POST` requests to Greenhouse. description: Fields specific to Greenhouse. workable: type: object properties: on_behalf_of_user_remote_id: type: string description: The remote ID of the user that will be displayed in the UI as the one that performed the action. description: Workable specific remote fields for ATS actions. description: Additional fields that we will pass through to specific ATS systems. description: Additional fields that we will pass through to specific ATS systems. required: - label - url PostAtsCandidatesCandidateIdAttachmentsParameterCandidateId: type: string description: The Kombo ID of the candidate you want to add the attachment to. GetAtsApplicationStagesParameterIncludeDeleted: type: string enum: - 'true' - 'false' default: 'false' description: By default, deleted entries are not returned. Use the `include_deleted` query param to include deleted entries too. GetAtsInterviewsParameterUpdatedAfter: description: 'Filter the entries based on the modification date in format `YYYY-MM-DDTHH:mm:ss.sssZ`. Returns records where either the record itself **OR** its nested data has been updated since this timestamp, even if the record''s own `changed_at` field remains unchanged. If you want to track entry deletion, also set the `include_deleted=true` query parameter, because otherwise, deleted entries will be hidden. For more details, see [Understanding changed_at vs updated_after Behavior](https://docs.kombo.dev/ats/getting-started/fetching-data#understanding-changed_at-vs-updated_after-behavior). For this endpoint, `updated_after` matches when the returned record changed, or when related data changed as described below. | Path | Added/Removed | Linked Record | | --- | --- | --- | | `interviewers` | ✓ Yes | ✗ No | | `application` | n/a | ✓ Yes | | `application` → `candidate` | ✗ No | ✗ No | | `application` → `job` | ✗ No | ✗ No | _**Added/Removed**: Whether adding or removing entries from this list triggers an update (n/a for single records). **Linked Record**: Whether changes to the linked record itself trigger an update._' type: string format: date-time pattern: ^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d+)?)?Z?$ externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString GetAtsInterviewsParameterPageSize: type: integer format: int64 minimum: 1 maximum: 250 default: 100 description: The number of results to return per page. Maximum is 250. GetAtsApplicationsParameterOutcome: type: string enum: - PENDING - HIRED - DECLINED description: '**(⚠️ Deprecated - Use the `outcomes` filter instead.)** Filter applications by outcome. This allows you to get applications that are for example `PENDING`, `HIRED`, or `DECLINED`.' DeleteAtsCandidatesCandidateIdTagsRequestBody: type: object properties: tag: type: object properties: name: type: string description: The name of the tag you would like to remove. required: - name remote_fields: type: object properties: greenhouse: type: object properties: post_headers: type: object properties: On-Behalf-Of: type: - string - 'null' description: ID of the the user that will show up as having performed the action in Greenhouse. We already pass a value by default, but you can use this to override it. description: Headers we will pass with `POST` requests to Greenhouse. description: Fields specific to Greenhouse. workable: type: object properties: on_behalf_of_user_remote_id: type: string description: The remote ID of the user that will be displayed in the UI as the one that performed the action. description: Workable specific remote fields for ATS actions. description: Additional fields that we will pass through to specific ATS systems. required: - tag GetAtsUsersParameterIgnoreUnsupportedFilters: type: string enum: - 'true' - 'false' default: 'false' description: When set to `true`, filters targeting fields not supported by this integration will be ignored instead of filtering out all results. GetAtsUsersParameterPageSize: type: integer format: int64 minimum: 1 maximum: 250 default: 100 description: The number of results to return per page. Maximum is 250. PostAtsApplicationsApplicationIdRejectPositiveResponse: type: object properties: status: type: string const: success data: type: object examples: - {} warnings: type: array items: type: object properties: message: type: string required: - message description: These are the interaction warnings that are shown in the dashboard. They are meant to provide debug information to you. We recommend logging them to the console. required: - status - data - warnings PostAtsApplicationsApplicationIdAttachmentsRequestBody: type: object properties: attachment: type: object properties: name: type: string description: File name of the file you want to upload. We recommend providing something human-readable with a valid file extension (like `Resume.pdf`), as this might be shown in your customer's system. content_type: type: string pattern: ^[\w.-]+\/[\w.-]+$ description: 'Content/MIME type of the file (e.g., `application/pdf`). If you provide `data`, this is required. If you provide `data_url`, this is optional and we''ll attempt to use the `Content-Type` header of the response. **Note:** Please validate that the content type you provide is actually meaningful (and not something generic like [`application/octet-stream`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/MIME_types#applicationoctet-stream)). Especially when using object storage (like AWS S3), it''s easy to accidentally discard the content types of user-provided files, so make sure to explicitly persist them when processing uploads from your users (see guides for [AWS](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingMetadata.html#SysMetadata), [Google Cloud](https://cloud.google.com/storage/docs/metadata#content-type), and [Azure](https://learn.microsoft.com/en-us/rest/api/storageservices/put-blob#request-headers-all-blob-types)).' data_url: type: string format: uri description: 'URL to the file you want to upload that can be accessed without authentication headers. We will download the content immediately when receiving the request, so the URL can be short-lived. If you''re using an object storage provider (like AWS S3), we strongly recommend providing a signed URL for secure access (see guides for [AWS](https://docs.aws.amazon.com/AmazonS3/latest/userguide/ShareObjectPreSignedURL.html), [Google Cloud](https://cloud.google.com/storage/docs/access-control/signed-urls), and [Azure](https://learn.microsoft.com/en-us/azure/storage/common/storage-sas-overview)). **Note:** You must provide either this or `data_url`. We recommend `data_url` over `data` for most cases.' data: type: string description: 'Base64-encoded contents of the file you want to upload. **Note:** You must provide either this or `data_url`. We recommend `data_url` over `data` for most cases.' type: type: string enum: - CV - COVER_LETTER - OTHER description: Type of the attachment in the ATS. This may affect where the uploaded file will be shown in your customer's system. required: - name - type remote_fields: allOf: - type: object properties: oracle: type: object properties: override_document_category: type: string enum: - IRC_CANDIDATE_RESUME - IRC_CANDIDATE_COVERLETTER - MISC - IRC_INTERNAL description: Allows you to override the document category for the attachment. multi_post_to_all_current_applications: type: boolean description: If true, the attachment will be posted to all current applications for the candidate. description: Oracle specific remote fields for the attachment. - type: object properties: greenhouse: type: object properties: post_headers: type: object properties: On-Behalf-Of: type: - string - 'null' description: ID of the the user that will show up as having performed the action in Greenhouse. We already pass a value by default, but you can use this to override it. description: Headers we will pass with `POST` requests to Greenhouse. description: Fields specific to Greenhouse. workable: type: object properties: on_behalf_of_user_remote_id: type: string description: The remote ID of the user that will be displayed in the UI as the one that performed the action. description: Workable specific remote fields for ATS actions. description: Additional fields that we will pass through to specific ATS systems. required: - attachment PutAtsApplicationsApplicationIdStageRequestBody: type: object properties: stage_id: type: string description: The Kombo ID of the stage to move the application to. This stage must be allowed for the job that the application is connected to. Get available stages from the `stages` property on the job, not from the deprecated application-stages endpoint. remote_fields: allOf: - type: object properties: workday: type: object properties: Workflow_Step_ID: type: string description: The Workflow_Step_ID to pass directly to the Move_Candidate request. When provided, the automatic workflow step matching logic is skipped. Step_Type: type: string enum: - Next_Step_Reference - Disposition_Step_Reference description: The type of step reference to use. Use "Next_Step_Reference" for regular stage moves and "Disposition_Step_Reference" for conclusion/disposition stages (e.g., rejected, declined). Defaults to "Next_Step_Reference". description: Fields specific to Workday. description: Additional fields that we will pass through to specific ATS systems. - type: object properties: greenhouse: type: object properties: post_headers: type: object properties: On-Behalf-Of: type: - string - 'null' description: ID of the the user that will show up as having performed the action in Greenhouse. We already pass a value by default, but you can use this to override it. description: Headers we will pass with `POST` requests to Greenhouse. description: Fields specific to Greenhouse. workable: type: object properties: on_behalf_of_user_remote_id: type: string description: The remote ID of the user that will be displayed in the UI as the one that performed the action. description: Workable specific remote fields for ATS actions. description: Additional fields that we will pass through to specific ATS systems. description: Additional fields that we will pass through to specific ATS systems. required: - stage_id GetAtsApplicationStagesPositiveResponse: type: object properties: status: type: string const: success data: type: object properties: next: type: - string - 'null' description: Cursor string that can be passed to the `cursor` query parameter to get the next page. If this is `null`, then there are no more pages. results: type: array items: type: object properties: id: type: string description: The globally unique ID of this object generated by Kombo. We recommend using this as a stable primary key for syncing. remote_id: type: - string - 'null' description: The raw ID of the object in the remote system. We don't recommend using this as a primary key on your side as it might sometimes be compromised of multiple identifiers if a system doesn't provide a clear primary key. name: type: - string - 'null' description: The application stage name. For example, "Initial Screening". remote_data: type: - object - 'null' additionalProperties: true description: 'Includes the data fetched from the remote system. Please be aware that including this in you scope config might violate other scopes that are set. Remote data always has the endpoint path that we got the data from as the top level key. For example, it could look like: `{ "/companies": { ... }}` This is not available on all plans. Reach out to Kombo if you need it.' changed_at: description: The timestamp when this specific record was last modified. This field only updates when properties directly on this record change, NOT when related or nested models change. For filtering that considers nested data changes, use the `updated_after` parameter which will return records when either the record itself OR its related models have been updated. type: string format: date-time externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString remote_deleted_at: description: The date and time the object was deleted in the remote system. Objects are automatically marked as deleted when Kombo can't retrieve them from the remote system anymore. Kombo will also anonymize entries 14 days after they disappear. type: - string - 'null' format: date-time externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString required: - id - remote_id - name - remote_data - changed_at - remote_deleted_at examples: - id: 5J7L4b48wBfffYwek9Az9pkM remote_id: '32' name: Initial Screening remote_data: null changed_at: '2022-08-07T14:01:29.196Z' remote_deleted_at: null required: - next - results examples: - next: eyJwYWdlIjoxMiwibm90ZSI6InRoaXMgaXMganVzdCBhbiBleGFtcGxlIGFuZCBub3QgcmVwcmVzZW50YXRpdmUgZm9yIGEgcmVhbCBjdXJzb3IhIn0= results: - id: 5J7L4b48wBfffYwek9Az9pkM remote_id: '32' name: Initial Screening remote_data: null changed_at: '2022-08-07T14:01:29.196Z' remote_deleted_at: null required: - status - data GetAtsRolesParameterUpdatedAfter: description: 'Filter the entries based on the modification date in format `YYYY-MM-DDTHH:mm:ss.sssZ`. Returns records where either the record itself **OR** its nested data has been updated since this timestamp, even if the record''s own `changed_at` field remains unchanged. If you want to track entry deletion, also set the `include_deleted=true` query parameter, because otherwise, deleted entries will be hidden. For more details, see [Understanding changed_at vs updated_after Behavior](https://docs.kombo.dev/ats/getting-started/fetching-data#understanding-changed_at-vs-updated_after-behavior). For this endpoint, only changes to the returned record itself are considered.' type: string format: date-time pattern: ^\d{4}-\d{2}-\d{2}(T\d{2}:\d{2}:\d{2}(\.\d+)?)?Z?$ externalDocs: url: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString GetAtsRolesParameterRemoteIds: type: string description: Filter by a comma-separated list of remote IDs. PostAtsApplicationsApplicationIdRejectRequestBody: type: object properties: rejection_reason_id: type: string description: The Kombo ID of the rejection reason. note: type: string description: A optional free text rejection note. Passed through if possible. remote_fields: allOf: - type: object properties: greenhouse: type: object properties: rejection_email: type: object additionalProperties: true description: Additional data fields that we will pass through to the `rejection_email` field of Greenhouse's [reject application](https://developers.greenhouse.io/harvest.html#post-reject-application) endpoint. description: Fields specific to Greenhouse. teamtailor: type: object properties: user_id: type: string description: The remote ID of the user that will be displayed in the UI as the one that performed the action. If not provided, the first admin user will be used. description: Fields specific to Teamtailor. description: Additional fields that we will pass through to specific ATS systems. - type: object properties: greenhouse: type: object properties: post_headers: type: object properties: On-Behalf-Of: type: - string - 'null' description: ID of the the user that will show up as having performed the action in Greenhouse. We already pass a value by default, but you can use this to override it. description: Headers we will pass with `POST` requests to Greenhouse. description: Fields specific to Greenhouse. workable: type: object properties: on_behalf_of_user_remote_id: type: string description: The remote ID of the user that will be displayed in the UI as the one that performed the action. description: Workable specific remote fields for ATS actions. description: Additional fields that we will pass through to specific ATS systems. description: Additional fields that we will pass through to specific ATS systems. required: - rejection_reason_id GetAtsApplicationStagesParameterIgnoreUnsupportedFilters: type: string enum: - 'true' - 'false' default: 'false' description: When set to `true`, filters targeting fields not supported by this integration will be ignored instead of filtering out all results. GetAtsActionsAtsCreateApplicationPositiveResponse: type: object properties: status: type: string const: success data: type: object properties: attachment_restrictions: type: - object - 'null' properties: total_size_bytes: type: - number - 'null' format: double minimum: -1.7976931348623157e+308 description: The maximum total size of all attachments. If null, we don' have information about the total size of all attachments. Make sure to consider the total request size limits of Kombo. types: type: object properties: CV: anyOf: - type: object properties: is_supported: type: boolean const: true min_amount: type: - number - 'null' format: double minimum: -1.7976931348623157e+308 description: The minimum amount of attachments. If null, we don' have information about the minimum amount. max_amount: type: - number - 'null' format: double minimum: -1.7976931348623157e+308 description: The maximum amount of attachments. If null, we don' have information about the maximum amount. max_file_size_bytes: type: - number - 'null' format: double minimum: -1.7976931348623157e+308 description: The maximum file size in bytes. If null, we don't have information about the maximum file size. accepted_mime_types: type: - array - 'null' items: type: string description: The accepted mime types. If null, we don't have information about the accepted mime types. required: - is_supported - min_amount - max_amount - max_file_size_bytes - accepted_mime_types - type: object properties: is_supported: type: boolean const: false required: - is_supported description: Specific attachment type restrictions for CV. COVER_LETTER: anyOf: - type: object properties: is_supported: type: boolean const: true min_amount: type: - number - 'null' format: double minimum: -1.7976931348623157e+308 description: The minimum amount of attachments. If null, we don' have information about the minimum amount. max_amount: type: - number - 'null' format: double minimum: -1.7976931348623157e+308 description: The maximum amount of attachments. If null, we don' have information about the maximum amount. max_file_size_bytes: type: - number - 'null' format: double minimum: -1.7976931348623157e+308 description: The maximum file size in bytes. If null, we don't have information about the maximum file size. accepted_mime_types: type: - array - 'null' items: type: string description: The accepted mime types. If null, we don't have information about the accepted mime types. required: - is_supported - min_amount - max_amount - max_file_size_bytes - accepted_mime_types - type: object properties: is_supported: type: boolean const: false required: - is_supported description: Specific attachment type restrictions for COVER_LETTER. OTHER: anyOf: - type: object properties: is_supported: type: boolean const: true min_amount: type: - number - 'null' format: double minimum: -1.7976931348623157e+308 description: The minimum amount of attachments. If null, we don' have information about the minimum amount. max_amount: type: - number - 'null' format: double minimum: -1.7976931348623157e+308 description: The maximum amount of attachments. If null, we don' have information about the maximum amount. max_file_size_bytes: type: - number - 'null' format: double minimum: -1.7976931348623157e+308 description: The maximum file size in bytes. If null, we don't have information about the maximum file size. accepted_mime_types: type: - array - 'null' items: type: string description: The accepted mime types. If null, we don't have information about the accepted mime types. required: - is_supported - min_amount - max_amount - max_file_size_bytes - accepted_mime_types - type: object properties: is_supported: type: boolean const: false required: - is_supported description: Specific attachment type restrictions for OTHER. required: - CV - COVER_LETTER - OTHER description: Specific attachment type restrictions for each attachment type. If null, we don' have information about the attachment type restrictions. required: - total_size_bytes - types description: Restrictions with attachment types that we know about. If this is null, we don't have information about restrictions on attachments. examples: - attachment_restrictions: total_size_bytes: 20000000 types: CV: is_supported: true min_amount: 1 max_amount: 1 max_file_size_bytes: 10000000 accepted_mime_types: - application/pdf - application/msword COVER_LETTER: is_supported: true min_amount: 0 max_amount: null max_file_size_bytes: null accepted_mime_types: null OTHER: is_supported: false required: - status - data GetAtsTagsParameterIncludeDeleted: type: string enum: - 'true' - 'false' default: 'false' description: By default, deleted entries are not returned. Use the `include_deleted` query param to include deleted entries too. responses: ErrorResponseATS: description: The standard error response with the error codes for the ATS use case. content: application/json: schema: type: object properties: status: type: string enum: - error error: type: object properties: code: type: - string - 'null' enum: - PLATFORM.RATE_LIMIT_EXCEEDED - PLATFORM.CONCURRENCY_LIMIT_EXCEEDED - PLATFORM.INTEGRATION_NOT_FOUND - PLATFORM.INPUT_INVALID - PLATFORM.UNKNOWN_ERROR - PLATFORM.IP_NOT_WHITELISTED - PLATFORM.AUTHENTICATION_INVALID - PLATFORM.TASK_TIMED_OUT - INTEGRATION.PERMISSION_MISSING - INTEGRATION.AUTHENTICATION_INVALID - INTEGRATION.QA_FAILED - INTEGRATION.SETUP_SYNC_PENDING - INTEGRATION.SETUP_INCOMPLETE - INTEGRATION.INACTIVE - INTEGRATION.MODEL_NOT_AVAILABLE - INTEGRATION.MODEL_DISABLED - INTEGRATION.ACTION_NOT_AVAILABLE - INTEGRATION.ACTION_DISABLED - REMOTE.SERVICE_UNAVAILABLE - REMOTE.RATE_LIMIT_EXCEEDED - REMOTE.INPUT_INVALID - REMOTE.UNKNOWN_HTTP_ERROR - ATS.JOB_CLOSED - ATS.APPLICATION_ALREADY_EXISTS example: ATS.JOB_CLOSED description: Some errors include an error code that can be used to identify their cause. See the [Error Handling Docs](https://docs.kombo.dev/guides/errors) for more information. For your error handling logic please use the error `code` instead of other properties (e.g. message, http status code, ...). title: type: - string - 'null' description: A static, human-readable label. message: type: string description: A dynamic, detailed description of what went wrong in this specific instance. log_url: type: - string - 'null' format: uri description: The log page in the Kombo UI lists every interaction with full details. If you need assistance, share that link with our support team. required: - code - title - message - log_url description: Error details with structured code for programmatic handling. required: - status - error examples: Error Response: description: When building error handling logic, always use the `code` field to identify specific error types programmatically. See the complete list of error codes in the [docs](https://docs.kombo.dev/guides/errors). value: status: error error: code: INTEGRATION.MODEL_NOT_AVAILABLE title: This data model isn't supported for the selected integration. message: The "employees" model is not yet available for Greenhouse. Please reach out to Kombo if you need this functionality. log_url: https://app.kombo.dev/my-prod/logs?interactionId=123456 Minimal Error Response: description: The "message" is always required while other fields can also be `null`. See the [docs](https://docs.kombo.dev/guides/errors) for more information. value: status: error error: code: null title: null message: The message is always in the response. log_url: null securitySchemes: ApiKey: type: http scheme: bearer description: Create an API key on the [Secrets](https://app.kombo.dev/secrets) page in the Kombo dashboard.