> ## 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.

# Get job postings

> Get all job postings. To get the application form and submit applications, use the POST /postings/:id/inquire endpoint.



## OpenAPI

````yaml GET /ai-apply/postings
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/postings:
    get:
      tags:
        - AI Apply
      summary: Get job postings
      description: >-
        Get all job postings. To get the application form and submit
        applications, use the POST /postings/:id/inquire endpoint.
      operationId: GetAiApplyPostings
      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'
        - name: updated_after
          in: query
          required: false
          description: >-
            Filter records whose `updated_at` is on or after this timestamp, in
            format `YYYY-MM-DDTHH:mm:ss.sssZ`. The comparison is inclusive
            (`updated_at >= updated_after`).


            `updated_at` only moves on customer-facing changes, so it is stable
            for incremental polling. For job postings that includes
            availability, archival, URL, job code, and the current form
            revision. For applications that includes status, candidate email,
            and the linked job posting.
          schema:
            $ref: '#/components/schemas/GetAiApplyPostingsParameterUpdatedAfter'
      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'
components:
  schemas:
    GetAiApplyPostingsParameterCursor:
      type: string
      description: >-
        An optional cursor string used for pagination. This can be retrieved
        from the `next` property of the previous page response.
    GetAiApplyPostingsParameterPageSize:
      type: integer
      format: int64
      minimum: 1
      maximum: 250
      default: 100
      description: The number of results to return per page. Maximum is 250.
    GetAiApplyPostingsParameterIds:
      type: string
      description: >-
        Filter by a comma-separated list of IDs such as
        `222k7eCGyUdgt2JWZDNnkDs3,B5DVmypWENfU6eMe6gYDyJG3`.
    GetAiApplyPostingsParameterCareerSiteIds:
      type: string
      description: >-
        Filter by a comma-separated list of career site IDs such as
        `A8m9k9RhjNokMfRTWtpQ99VtH,rCbkAA3pvcKjsFYwEeXtCQkc`.
    GetAiApplyPostingsParameterJobCodes:
      type: string
      description: Filter by a comma-separated list of job codes such as `ACME_13,ACME_14`.
    GetAiApplyPostingsParameterUpdatedAfter:
      description: >-
        Filter records whose `updated_at` is on or after this timestamp, in
        format `YYYY-MM-DDTHH:mm:ss.sssZ`. The comparison is inclusive
        (`updated_at >= updated_after`).


        `updated_at` only moves on customer-facing changes, so it is stable for
        incremental polling. For job postings that includes availability,
        archival, URL, job code, and the current form revision. For applications
        that includes status, candidate email, and the linked job posting.
      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
    GetAiApplyPostingsPositiveResponse:
      type: object
      properties:
        status:
          type: string
          const: success
        data:
          type: object
          properties:
            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.
                  career_site:
                    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.
                      label:
                        type: string
                    required:
                      - id
                      - label
                  url:
                    type: string
                  job_code:
                    type:
                      - string
                      - 'null'
                  created_at:
                    description: YYYY-MM-DDTHH:mm:ss.sssZ
                    type: string
                    format: date-time
                    externalDocs:
                      url: >-
                        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString
                  updated_at:
                    description: YYYY-MM-DDTHH:mm:ss.sssZ
                    type: string
                    format: date-time
                    externalDocs:
                      url: >-
                        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString
                  archived_at:
                    description: >-
                      The date and time the job posting was archived. You can
                      only send applications if the job posting is not archived.
                    type:
                      - string
                      - 'null'
                    format: date-time
                    externalDocs:
                      url: >-
                        https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString
                  archived_reason:
                    type:
                      - string
                      - 'null'
                    enum:
                      - JOB_POSTING_TAKEN_OFFLINE
                      - MANUAL_ARCHIVE
                      - REMOVED_FROM_JOB_FEED
                  availability:
                    type: string
                    enum:
                      - APPLYABLE
                      - PENDING
                      - ARCHIVED
                      - UNAVAILABLE
                    description: >-
                      The status of the job posting. You can only send
                      applications if the job posting is "APPLYABLE".
                required:
                  - id
                  - career_site
                  - url
                  - job_code
                  - created_at
                  - updated_at
                  - archived_at
                  - archived_reason
                  - availability
            next:
              type:
                - string
                - 'null'
          required:
            - results
            - next
          examples:
            - 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
      required:
        - status
        - data
  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.

````