Kombo AI Apply API

Endpoints for AI-powered job application features.

OpenAPI Specification

kombo-ai-apply-api-openapi.yml Raw ↑
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