Kombo AI Apply API
Endpoints for AI-powered job application features.
Endpoints for AI-powered job application features.
openapi: 3.1.0
info:
title: Kombo AI Apply 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: AI Apply
description: Endpoints for AI-powered job application features.
paths:
/ai-apply/career-sites:
post:
operationId: PostAiApplyCareerSites
summary: Create a career site
description: Create a career site entry. Career sites are required to be specified when parsing job postings, grouping them under a single entity.
tags:
- AI Apply
requestBody:
description: POST /ai-apply/career-sites Request body
content:
application/json:
schema:
$ref: '#/components/schemas/PostAiApplyCareerSitesRequestBody'
examples:
example1:
value:
label: Acme Inc. California
responses:
'200':
description: POST /ai-apply/career-sites Positive response
content:
application/json:
schema:
$ref: '#/components/schemas/PostAiApplyCareerSitesPositiveResponse'
examples:
example1:
value:
status: success
data:
id: mK7pQw9xNvEr2LdY5sGh8TcZ
label: Acme Inc. California
default:
$ref: '#/components/responses/ErrorResponseAiApply'
get:
operationId: GetAiApplyCareerSites
summary: Get career sites
description: Get all career sites.
tags:
- AI Apply
parameters:
- 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/GetAiApplyCareerSitesParameterCursor'
- name: page_size
in: query
required: false
description: The number of results to return per page. Maximum is 250.
schema:
$ref: '#/components/schemas/GetAiApplyCareerSitesParameterPageSize'
- name: ids
in: query
required: false
description: Filter by a comma-separated list of IDs such as `222k7eCGyUdgt2JWZDNnkDs3,B5DVmypWENfU6eMe6gYDyJG3`.
schema:
$ref: '#/components/schemas/GetAiApplyCareerSitesParameterIds'
responses:
'200':
description: GET /ai-apply/career-sites Positive response
content:
application/json:
schema:
$ref: '#/components/schemas/GetAiApplyCareerSitesPositiveResponse'
examples:
example1:
value:
status: success
data:
results:
- id: mK7pQw9xNvEr2LdY5sGh8TcZ
label: Acme Inc. California
next: null
default:
$ref: '#/components/responses/ErrorResponseAiApply'
/ai-apply/postings:
get:
operationId: GetAiApplyPostings
summary: Get job postings
description: Get all job postings. To get the application form and submit applications, use the POST /postings/:id/inquire endpoint.
tags:
- AI Apply
parameters:
- 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/GetAiApplyPostingsParameterCursor'
- name: page_size
in: query
required: false
description: The number of results to return per page. Maximum is 250.
schema:
$ref: '#/components/schemas/GetAiApplyPostingsParameterPageSize'
- name: ids
in: query
required: false
description: Filter by a comma-separated list of IDs such as `222k7eCGyUdgt2JWZDNnkDs3,B5DVmypWENfU6eMe6gYDyJG3`.
schema:
$ref: '#/components/schemas/GetAiApplyPostingsParameterIds'
- name: career_site_ids
in: query
required: false
description: Filter by a comma-separated list of career site IDs such as `A8m9k9RhjNokMfRTWtpQ99VtH,rCbkAA3pvcKjsFYwEeXtCQkc`.
schema:
$ref: '#/components/schemas/GetAiApplyPostingsParameterCareerSiteIds'
- name: job_codes
in: query
required: false
description: Filter by a comma-separated list of job codes such as `ACME_13,ACME_14`.
schema:
$ref: '#/components/schemas/GetAiApplyPostingsParameterJobCodes'
responses:
'200':
description: GET /ai-apply/postings Positive response
content:
application/json:
schema:
$ref: '#/components/schemas/GetAiApplyPostingsPositiveResponse'
examples:
example1:
value:
status: success
data:
results:
- id: 9QGNv3B98kL3hyELE1qsZ86s
career_site:
id: Chc4dua5asAQ48KUERDVF1bs
label: Acme
url: https://careers.acme.com/jobs/fullstack-engineer-ai-infra-14102
job_code: ACME_13
created_at: '2025-01-01T00:00:00.000Z'
updated_at: '2025-03-02T23:12:32.000Z'
archived_at: null
archived_reason: null
availability: PENDING
next: null
default:
$ref: '#/components/responses/ErrorResponseAiApply'
post:
operationId: PostAiApplyPostings
summary: Parse a job posting
description: Submit a job posting URL to be parsed asynchronously. Returns ID to track progress.
tags:
- AI Apply
requestBody:
description: POST /ai-apply/postings Request body
content:
application/json:
schema:
$ref: '#/components/schemas/PostAiApplyPostingsRequestBody'
examples:
example1:
value:
url: https://careers.acme.com/jobs/fullstack-engineer-ai-infra-14102
job_code: ACME_13
location:
country: US
postal_code: '94115'
career_site_id: Chc4dua5asAQ48KUERDVF1bs
responses:
'200':
description: POST /ai-apply/postings Positive response
content:
application/json:
schema:
$ref: '#/components/schemas/PostAiApplyPostingsPositiveResponse'
examples:
example1:
value:
status: success
data:
id: 9QGNv3B98kL3hyELE1qsZ86s
career_site:
id: Chc4dua5asAQ48KUERDVF1bs
label: Acme
url: https://careers.acme.com/jobs/fullstack-engineer-ai-infra-14102
job_code: ACME_13
created_at: '2025-01-01T00:00:00.000Z'
updated_at: '2025-03-02T23:12:32.000Z'
archived_at: null
archived_reason: null
availability: PENDING
default:
$ref: '#/components/responses/ErrorResponseAiApply'
/ai-apply/postings/{posting_id}/inquire:
post:
operationId: PostAiApplyPostingsPostingIdInquire
summary: Inquire about a job posting and the application f…
description: Receive the application form (screening questions) for a job posting and a submission token. This endpoint must be called before submitting an application to ensure you have the latest questions and a valid submission token. The submission token is valid for 2 days and prevents duplicate submissions. The application form may contain conditional questions that are only shown based on answers to previous questions (check the display_when field).
tags:
- AI Apply
parameters:
- name: posting_id
in: path
required: true
description: The globally unique ID of this object generated by Kombo. We recommend using this as a stable primary key for syncing.
schema:
$ref: '#/components/schemas/PostAiApplyPostingsPostingIdInquireParameterPostingId'
examples:
example1:
value: 9QGNv3B98kL3hyELE1qsZ86s
requestBody:
description: POST /ai-apply/postings/:posting_id/inquire Request body
content:
application/json:
schema:
$ref: '#/components/schemas/PostAiApplyPostingsPostingIdInquireRequestBody'
examples:
example1:
value: {}
responses:
'200':
description: POST /ai-apply/postings/:posting_id/inquire Positive response
content:
application/json:
schema:
$ref: '#/components/schemas/PostAiApplyPostingsPostingIdInquirePositiveResponse'
examples:
example1:
value:
status: success
data:
application_form:
- block_type: SECTION
label: Personal Information
children:
- block_type: QUESTION
question_id: 6VrjehyBk685vubNydiR1hSn
label: First name
description: null
required: true
category: null
question_type: TEXT
unified_key: FIRST_NAME
options: null
display_when: null
- block_type: QUESTION
question_id: Hjsapofs69cx2iAu6MtTfhoh
label: Last name
description: null
required: true
category: null
question_type: TEXT
unified_key: LAST_NAME
options: null
display_when: null
- block_type: QUESTION
question_id: EKaumKPGjeA97cb8ystMmkCe
label: What is your desired working location?
description: Select your preferred work arrangement
required: true
category: null
question_type: SINGLE_SELECT
unified_key: null
options:
- id: BsnL4pAhNQc26uSc4JopTP3P
label: Remote
unified_key: null
- id: 8T4fcKgzLxbKFUo4saXaoMTG
label: On-site
unified_key: null
- id: 2cJDK3dq4WNjovohSG7dSpfd
label: Hybrid
unified_key: null
display_when: null
- block_type: QUESTION
question_id: 2H26BKTbDn2ygN2GfEcCsUP8
label: What timezone are you in?
description: This helps us schedule meetings at convenient times
required: true
category: null
question_type: TEXT
unified_key: null
options: null
display_when:
question_id: EKaumKPGjeA97cb8ystMmkCe
answer_equals: BsnL4pAhNQc26uSc4JopTP3P
- block_type: QUESTION
question_id: AdM1EuwBKE4pz94SSRHMgmba
label: Which office would you prefer?
description: null
required: true
category: null
question_type: SINGLE_SELECT
unified_key: null
options:
- id: EHCqUb5E6xzfjnfHT2LEgmM7
label: San Francisco
unified_key: null
- id: 5RbHT73StFM5tHdF3aVr4do1
label: New York
unified_key: null
- id: F4rRwGTNeLQZV5VLwstERpsT
label: London
unified_key: null
display_when:
question_id: EKaumKPGjeA97cb8ystMmkCe
answer_equals: 8T4fcKgzLxbKFUo4saXaoMTG
- block_type: QUESTION
question_id: FuVZvF26NueKcN46o5euHeGx
label: How many days per week would you like to work in the office?
description: null
required: true
category: null
question_type: NUMBER
unified_key: null
options: null
display_when:
question_id: EKaumKPGjeA97cb8ystMmkCe
answer_equals: 2cJDK3dq4WNjovohSG7dSpfd
submission_token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
default:
$ref: '#/components/responses/ErrorResponseAiApply'
/ai-apply/apply:
post:
operationId: PostAiApplyApply
summary: Submit job application
description: Submit a job application using a submission token. The application will be queued and processed asynchronously. Returns ID to track progress and match with webhooks.
tags:
- AI Apply
requestBody:
description: POST /ai-apply/apply Request body
content:
application/json:
schema:
$ref: '#/components/schemas/PostAiApplyApplyRequestBody'
examples:
example1:
value:
submission_token: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
candidate_email: john.doe@gmail.com
query_params:
source: acme
user_id: 8e05b4e5-c586-4d42-8606-b45febad3af3
screening_question_answers:
- question_id: A4zHtGQLF823sNmqy4WxoduFH
answer: John Doe
- question_id: CDEfHvMGSDnM6pq5HECdE2Kg
answer: EycufwZHfwcVDmE47X7QN8X2
- question_id: 3dT5df2PhyVp7Rze76S5NqrW
answer:
name: john_doe_resume.pdf
content_type: application/pdf
data: JVBERi0xLjQKJeLjz9MKMSAwIG9iago8PAovVHlwZSAvQ2F0YWxvZwovT3V0bGluZXMgMiAwIFIKL1BhZ2VzIDMgMCBSCj4+CmVuZG9iag==
additional_clicks: 10
additional_clicks_scatter_duration: 45
responses:
'200':
description: POST /ai-apply/apply Positive response
content:
application/json:
schema:
$ref: '#/components/schemas/PostAiApplyApplyPositiveResponse'
examples:
example1:
value:
status: success
data:
id: ADbmw5XSkeCSE1fAucoxEGnwZ
posting_id: JDn252PEYa4rMhKbJBjtn3ng
status: PENDING
created_at: '2025-01-01T00:00:00.000Z'
updated_at: '2025-03-02T23:12:32.000Z'
default:
$ref: '#/components/responses/ErrorResponseAiApply'
/ai-apply/applications:
get:
operationId: GetAiApplyApplications
summary: Get applications
description: Get all applications.
tags:
- AI Apply
parameters:
- 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/GetAiApplyApplicationsParameterCursor'
- name: page_size
in: query
required: false
description: The number of results to return per page. Maximum is 250.
schema:
$ref: '#/components/schemas/GetAiApplyApplicationsParameterPageSize'
- name: ids
in: query
required: false
description: Filter by a comma-separated list of IDs such as `222k7eCGyUdgt2JWZDNnkDs3,B5DVmypWENfU6eMe6gYDyJG3`.
schema:
$ref: '#/components/schemas/GetAiApplyApplicationsParameterIds'
- name: job_posting_ids
in: query
required: false
description: Filter by a comma-separated list of job posting IDs such as `89V6GEKpdZwqbxQz59n1ftFb,kcGHREEXCMF26Yhpuyh1gDVE`.
schema:
$ref: '#/components/schemas/GetAiApplyApplicationsParameterJobPostingIds'
responses:
'200':
description: GET /ai-apply/applications Positive response
content:
application/json:
schema:
$ref: '#/components/schemas/GetAiApplyApplicationsPositiveResponse'
examples:
example1:
value:
status: success
data:
results:
- id: ADbmw5XSkeCSE1fAucoxEGnwZ
job_posting_id: JDn252PEYa4rMhKbJBjtn3ng
status: PENDING
created_at: '2025-01-01T00:00:00.000Z'
updated_at: '2025-03-02T23:12:32.000Z'
next: null
default:
$ref: '#/components/responses/ErrorResponseAiApply'
/ai-apply/unified-api/jobs:
get:
operationId: GetAiApplyUnifiedApiJobs
summary: Get jobs
description: '**Deprecation Notice:** This endpoint is no longer actively supported. Please use the standard AI Apply API instead.
Get jobs in a backwards compatible way as you would [via Kombo''s unified API](https://docs.kombo.dev/ats/v1/get-jobs).'
tags:
- AI Apply
parameters:
- 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/GetAiApplyUnifiedApiJobsParameterCursor'
- name: page_size
in: query
required: false
description: The number of results to return per page. Maximum is 5.
schema:
$ref: '#/components/schemas/GetAiApplyUnifiedApiJobsParameterPageSize'
- name: ids
in: query
required: false
description: Filter by a comma-separated list of IDs such as `222k7eCGyUdgt2JWZDNnkDs3,B5DVmypWENfU6eMe6gYDyJG3`.
schema:
$ref: '#/components/schemas/GetAiApplyUnifiedApiJobsParameterIds'
- name: remote_ids
in: query
required: false
description: This parameter exists for backwards compatibility with Kombo's unified API. Supplying a comma-separated list of remote IDs such as `32,33` will return no jobs because AI Apply does not interface with a remote system that issues remote IDs.
schema:
$ref: '#/components/schemas/GetAiApplyUnifiedApiJobsParameterRemoteIds'
- name: job_codes
in: query
required: false
description: Filter by a comma-separated list of job codes such as `ACME_12,ACME_14`.
schema:
$ref: '#/components/schemas/GetAiApplyUnifiedApiJobsParameterJobCodes'
- name: career_site_ids
in: query
required: false
description: Filter by a comma-separated list of career site IDs such as `A8m9k9RhjNokMfRTWtpQ99VtH,rCbkAA3pvcKjsFYwEeXtCQkc`.
schema:
$ref: '#/components/schemas/GetAiApplyUnifiedApiJobsParameterCareerSiteIds'
responses:
'200':
description: GET /ai-apply/unified-api/jobs Positive response
content:
application/json:
schema:
$ref: '#/components/schemas/GetAiApplyUnifiedApiJobsPositiveResponse'
default:
$ref: '#/components/responses/ErrorResponseAiApply'
/ai-apply/unified-api/jobs/{job_id}/applications:
post:
operationId: PostAiApplyUnifiedApiJobsJobIdApplications
summary: Create application
description: '**Deprecation Notice:** This endpoint is no longer actively supported. Please use the standard AI Apply API instead.
Create applications in a backwards compatible way as you would [via Kombo''s unified API](https://docs.kombo.dev/ats/v1/post-jobs-job-id-applications).'
tags:
- AI Apply
parameters:
- 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/PostAiApplyUnifiedApiJobsJobIdApplicationsParameterJobId'
examples:
example1:
value: BDpgnpZ148nrGh4mYHNxJBgx
requestBody:
description: POST /ai-apply/unified-api/jobs/:job_id/applications Request body
content:
application/json:
schema:
$ref: '#/components/schemas/PostAiApplyUnifiedApiJobsJobIdApplicationsRequestBody'
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 /ai-apply/unified-api/jobs/:job_id/applications Positive response
content:
application/json:
schema:
$ref: '#/components/schemas/PostAiApplyUnifiedApiJobsJobIdApplicationsPositiveResponse'
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'
default:
$ref: '#/components/responses/ErrorResponseAiApply'
/ai-apply/job-feeds:
get:
operationId: GetAiApplyJobFeeds
summary: Get job feeds
description: Get all job feeds.
tags:
- AI Apply
parameters:
- 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/GetAiApplyJobFeedsParameterCursor'
- name: page_size
in: query
required: false
description: The number of results to return per page. Maximum is 250.
schema:
$ref: '#/components/schemas/GetAiApplyJobFeedsParameterPageSize'
- name: ids
in: query
required: false
description: Filter by a comma-separated list of IDs such as `222k7eCGyUdgt2JWZDNnkDs3,B5DVmypWENfU6eMe6gYDyJG3`.
schema:
$ref: '#/components/schemas/GetAiApplyJobFeedsParameterIds'
responses:
'200':
description: GET /ai-apply/job-feeds Positive response
content:
application/json:
schema:
$ref: '#/components/schemas/GetAiApplyJobFeedsPositiveResponse'
examples:
example1:
value:
status: success
data:
results:
- id: mK7pQw9xNvEr2LdY5sGh8TcZ
label: Standard Acquisition Services LLC
next: null
default:
$ref: '#/components/responses/ErrorResponseAiApply'
post:
operationId: PostAiApplyJobFeeds
summary: Create a job feed
description: Create a job feed. Jobs feeds are required when bulk importing job postings.
tags:
- AI Apply
requestBody:
description: POST /ai-apply/job-feeds Request body
content:
application/json:
schema:
$ref: '#/components/schemas/PostAiApplyJobFeedsRequestBody'
examples:
example1:
value:
label: Standard Acquisition Services LLC
responses:
'200':
description: POST /ai-apply/job-feeds Positive response
content:
application/json:
schema:
$ref: '#/components/schemas/PostAiApplyJobFeedsPositiveResponse'
examples:
example1:
value:
status: success
data:
id: mK7pQw9xNvEr2LdY5sGh8TcZ
label: Standard Acquisition Services LLC
default:
$ref: '#/components/responses/ErrorResponseAiApply'
/ai-apply/job-feeds/{job_feed_id}/bulk-import:
post:
operationId: postAiApplyJobFeedsBulkImport
summary: Bulk import job postings
description: 'Bulk import job postings into a job feed using NDJSON (newline-delimited JSON) format.
**Request Format:**
Send one JSON object per line. Each line represents a job posting to import.
**Example Request Body:**
```
{"url":"https://careers.acme.com/job/1","career_site_label":"ACME Corp"}
{"url":"https://careers.acme.com/job/2","career_site_label":"ACME Corp","job_code":"ENG-123"}
{"url":"https://careers.acme.com/job/3","career_site_label":"ACME Corp","location":{"country":"US","postal_code":"94115"}}
```
**Behavior:**
- Career sites are automatically created based on unique `career_site_label` values
- Job postings are identified by the combination of URL + career_site_label + job_code
- Existing job postings are updated; new ones are created and queued for parsing
- Job postings from previous imports that are not included in the current import are archived
**Constraints:**
- Maximum request size: 35 MB
- Timeout: 5 minutes
- One concurrent import per job feed'
tags:
- AI Apply
security:
- ApiKey: []
parameters:
- name: job_feed_id
in: path
required: true
schema:
type: string
description: The ID of the job feed to import into
example: mK7pQw9xNvEr2LdY5sGh8TcZ
requestBody:
required: true
description: NDJSON stream where each line is a JSON object matching the BulkImportJobPostingInput schema
content:
application/x-ndjson:
schema:
type: string
description: NDJSON stream - each line is a JSON object representing a job posting
example: '{"url":"https://careers.acme.com/job/1","career_site_label":"ACME Corp"}
{"url":"https://careers.acme.com/job/2","career_site_label":"ACME Corp","job_code":"ENG-123"}'
responses:
'200':
description: Import completed successfully
content:
application/json:
schema:
$ref: '#/components/schemas/BulkImportResponse'
default:
$ref: '#/components/responses/ErrorResponseAiApply'
components:
schemas:
GetAiApplyJobFeedsParameterPageSize:
type: integer
format: int64
minimum: 1
maximum: 250
default: 100
description: The number of results to return per page. Maximum is 250.
PostAiApply
# --- truncated at 32 KB (172 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/kombo/refs/heads/main/openapi/kombo-ai-apply-api-openapi.yml