---
title: "Get status of “Upsert courses” task"
method: GET
path: "/lms/courses/bulk/{task_id}"
tags: ["Unified LMS API"]
---

# Get status of “Upsert courses” task

`GET /lms/courses/bulk/{task_id}`

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>

## Path parameters

- `task_id` string, required

## Headers

- `X-Integration-Id` string, required

## Response `200`

GET /lms/courses/bulk/:task_id Positive response

- GetLmsCoursesBulkTaskIdPositiveResponse
  - `status` 'success', required
  - `data` union, required
    - object
      - `task_id` string, required
      - `created_at` string, required — An ISO 8601 timestamp of when the task was created.
      - `status` 'PENDING', required — Indicates the task is still being processed.
      - `completed_at` unknown, required
    - object
      - `task_id` string, required
      - `created_at` string, required — An ISO 8601 timestamp of when the task was created.
      - `status` 'COMPLETED', required — Indicates the task has finished successfully.
      - `data` union[], required — The results of the completed task, containing one entry per item in the original request.
        - union
          - object
            - `origin_id` string, required — A unique identifier for this item in the batch, used to correlate results.
            - `status` 'SUCCEEDED', required
            - `data` object, required
              - …
          - object
            - `origin_id` string, required — A unique identifier for this item in the batch, used to correlate results.
            - `status` 'FAILED', required
            - `error` object, required
              - …
      - `completed_at` string, date-time, required — An ISO 8601 timestamp of when the task was completed.
    - object
      - `task_id` string, required
      - `created_at` string, required — An ISO 8601 timestamp of when the task was created.
      - `status` 'FAILED', required — Indicates the task failed before it could process all items.
      - `error` object, required — Details about why the task failed.
        - `code` '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', nullable, required
        - `title` string, nullable, required
        - `message` string, required
        - `log_url` string, nullable, required
      - `completed_at` string, date-time, required — An ISO 8601 timestamp of when the task failed.

## Other responses

- `default` — The standard error response with just the platform error codes.

---

[API](https://skmtc.net/kombo/apis/kombo-api.md) · [All operations](https://skmtc.net/kombo/apis/kombo-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/kombo/kombo-api/revisions/1e45035b96d3/schema)
