> ## Documentation Index
> Fetch the complete documentation index at: https://docs.kombo.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Bulk import job postings

> 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


## OpenAPI

````yaml POST /ai-apply/job-feeds/{job_feed_id}/bulk-import
openapi: 3.1.0
info:
  title: Kombo API
  version: 1.0.0
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: General
  - name: Kombo Connect
    description: >-
      Endpoints for Kombo Connect, our end-user-facing flow for setting up new
      integrations.
  - name: Unified HRIS API
    description: Unified endpoints to access all the HR concepts you might need.
  - name: Unified ATS API
    description: Unified endpoints to access all the ATS concepts you might need.
  - name: Unified ATS (Assessment & Background Check) API
    description: >-
      Unified endpoints to operate Assessments and Background Checks for many
      applicant tracking systems.
  - name: Unified LMS API
    description: Unified endpoints to access all the LMS concepts you might need.
  - name: AI Apply
    description: Endpoints for AI-powered job application features.
  - name: Custom Endpoints
    description: Custom integration-specific endpoints.
paths:
  /ai-apply/job-feeds/{job_feed_id}/bulk-import:
    post:
      tags:
        - AI Apply
      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
      operationId: postAiApplyJobFeedsBulkImport
      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'
      security:
        - ApiKey: []
components:
  schemas:
    BulkImportResponse:
      type: object
      description: Response from the bulk import endpoint
      properties:
        status:
          type: string
          enum:
            - success
        data:
          type: object
          properties:
            created:
              type: integer
              description: Number of new job postings created
            processed:
              type: integer
              description: Number of job postings processed
            archived:
              type: integer
              description: Number of job postings archived (not included in this import)
          required:
            - created
            - processed
            - archived
      required:
        - status
        - data
      example:
        status: success
        data:
          created: 150
          processed: 197
          archived: 10
  responses:
    ErrorResponseAiApply:
      description: The standard error response with the error codes for AI Apply.
      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
                      - REMOTE.SERVICE_UNAVAILABLE
                      - REMOTE.RATE_LIMIT_EXCEEDED
                      - REMOTE.INPUT_INVALID
                      - REMOTE.UNKNOWN_HTTP_ERROR
                      - AI_APPLY.JOB_FEED_IMPORT_ALREADY_RUNNING
                      - AI_APPLY.JOB_FEED_IMPORT_TIMED_OUT
                      - AI_APPLY.JOB_POSTING_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.

````