> ## 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 status of “Upsert courses” task

> Poll for the status of an existing “Upsert courses” task.

<Info>
  This endpoint returns the current status of a task. Poll it at regular intervals until the task reaches a terminal status. Learn more in our [async endpoints guide](/lms/guides/async-endpoints). The possible statuses are:

  * `PENDING` – The task is still being processed.
  * `COMPLETED` – The task finished successfully. The `data` field contains the results.
  * `FAILED` – The task encountered an error. Check the `error` field for details.
</Info>


## OpenAPI

````yaml GET /lms/courses/bulk/{task_id}
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:
  /lms/courses/bulk/{task_id}:
    get:
      tags:
        - Unified LMS API
      summary: Get status of “Upsert courses” task
      description: >-
        Poll for the status of an existing “Upsert courses” task.


        <Info>

        This endpoint returns the current status of a task. Poll it at regular
        intervals until the task reaches a terminal status. Learn more in our
        [async endpoints guide](/lms/guides/async-endpoints). The possible
        statuses are:
          - `PENDING` – The task is still being processed.
          - `COMPLETED` – The task finished successfully. The `data` field contains the results.
          - `FAILED` – The task encountered an error. Check the `error` field for details.
        </Info>
      operationId: GetLmsCoursesBulkTaskId
      parameters:
        - in: header
          name: X-Integration-Id
          schema:
            type: string
          description: ID of the integration you want to interact with.
          example: bombohr:HWUTwvyx2wLoSUHphiWVrp28
          required: true
        - name: task_id
          in: path
          required: true
          description: GET /lms/courses/bulk/:task_id Parameter
          schema:
            $ref: '#/components/schemas/GetLmsCoursesBulkTaskIdParameterTaskId'
      responses:
        '200':
          description: GET /lms/courses/bulk/:task_id Positive response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetLmsCoursesBulkTaskIdPositiveResponse'
        default:
          $ref: '#/components/responses/ErrorResponseGeneral'
components:
  schemas:
    GetLmsCoursesBulkTaskIdParameterTaskId:
      type: string
    GetLmsCoursesBulkTaskIdPositiveResponse:
      type: object
      properties:
        status:
          type: string
          const: success
        data:
          discriminator:
            propertyName: status
          anyOf:
            - type: object
              properties:
                task_id:
                  type: string
                created_at:
                  type: string
                  description: An ISO 8601 timestamp of when the task was created.
                status:
                  type: string
                  const: PENDING
                  description: Indicates the task is still being processed.
                completed_at:
                  type: 'null'
                  description: Always `null` while the task is pending.
              required:
                - task_id
                - created_at
                - status
                - completed_at
            - type: object
              properties:
                task_id:
                  type: string
                created_at:
                  type: string
                  description: An ISO 8601 timestamp of when the task was created.
                status:
                  type: string
                  const: COMPLETED
                  description: Indicates the task has finished successfully.
                data:
                  type: array
                  items:
                    discriminator:
                      propertyName: status
                    anyOf:
                      - type: object
                        properties:
                          origin_id:
                            type: string
                            description: >-
                              A unique identifier for this item in the batch,
                              used to correlate results.
                          status:
                            type: string
                            const: SUCCEEDED
                          data:
                            type: object
                            properties:
                              id:
                                type: string
                                description: The Kombo ID of the course.
                            required:
                              - id
                        required:
                          - origin_id
                          - status
                          - data
                      - type: object
                        properties:
                          origin_id:
                            type: string
                            description: >-
                              A unique identifier for this item in the batch,
                              used to correlate results.
                          status:
                            type: string
                            const: FAILED
                          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
                                  - HRIS.STAFFING_ENTITY_CLOSED
                                  - HRIS.EMPLOYEE_ALREADY_EXISTS
                                  - ATS.JOB_CLOSED
                                  - ATS.APPLICATION_ALREADY_EXISTS
                                  - LMS.COURSE_UPDATE_NOT_SUPPORTED
                                  - AI_APPLY.JOB_FEED_IMPORT_ALREADY_RUNNING
                                  - AI_APPLY.JOB_FEED_IMPORT_TIMED_OUT
                              title:
                                type:
                                  - string
                                  - 'null'
                              message:
                                type: string
                              log_url:
                                type:
                                  - string
                                  - 'null'
                            required:
                              - code
                              - title
                              - message
                              - log_url
                        required:
                          - origin_id
                          - status
                          - error
                  description: >-
                    The results of the completed task, containing one entry per
                    item in the original request.
                completed_at:
                  description: An ISO 8601 timestamp of when the task was completed.
                  type: string
                  format: date-time
                  externalDocs:
                    url: >-
                      https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString
              required:
                - task_id
                - created_at
                - status
                - data
                - completed_at
            - type: object
              properties:
                task_id:
                  type: string
                created_at:
                  type: string
                  description: An ISO 8601 timestamp of when the task was created.
                status:
                  type: string
                  const: FAILED
                  description: Indicates the task failed before it could process all items.
                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
                        - HRIS.STAFFING_ENTITY_CLOSED
                        - HRIS.EMPLOYEE_ALREADY_EXISTS
                        - ATS.JOB_CLOSED
                        - ATS.APPLICATION_ALREADY_EXISTS
                        - LMS.COURSE_UPDATE_NOT_SUPPORTED
                        - AI_APPLY.JOB_FEED_IMPORT_ALREADY_RUNNING
                        - AI_APPLY.JOB_FEED_IMPORT_TIMED_OUT
                    title:
                      type:
                        - string
                        - 'null'
                    message:
                      type: string
                    log_url:
                      type:
                        - string
                        - 'null'
                  required:
                    - code
                    - title
                    - message
                    - log_url
                  description: Details about why the task failed.
                completed_at:
                  description: An ISO 8601 timestamp of when the task failed.
                  type: string
                  format: date-time
                  externalDocs:
                    url: >-
                      https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toISOString
              required:
                - task_id
                - created_at
                - status
                - error
                - completed_at
      required:
        - status
        - data
  responses:
    ErrorResponseGeneral:
      description: The standard error response with just the platform error codes.
      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
                    example: PLATFORM.RATE_LIMIT_EXCEEDED
                    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.

````