---
title: "Get async job status"
method: GET
path: "/api/jobs/{job_id}"
tags: ["Jobs"]
---

# Get async job status

`GET /api/jobs/{job_id}`

## Request

- Base URL: `https://courseprofiler.com`
- URL: `https://courseprofiler.com/api/jobs/{job_id}`
- Auth: one of:
  - API key in header `X-API-Key`
  - HTTP bearer
  - none

## Path parameters

- `job_id` string, required

## Response `200`

Job status

- Job
  - `request_id` string: Current HTTP request correlation ID, also X-Request-Id; not an idempotency key.
  - `job_persistence` 'not_persisted' | 'confirmed' | 'unknown': Latest job metadata write outcome, not a current retrievability guarantee. Do not blindly retry unknown writes.
  - `submission_request_id` string: Original allocation request ID; omitted in legacy job metadata.
  - `job_id` string, required
  - `status` 'queued' | 'running' | 'succeeded' | 'failed' | 'expired' | 'cancelled', required
  - `status_url` string, required
  - `created_at` string, date-time, required
  - `started_at` string, date-time
  - `completed_at` string, date-time
  - `expires_at` string, date-time, required
  - `result_artifacts` Artifact[], required
    - `request_id` string: Current HTTP request correlation ID, also X-Request-Id; not an idempotency key.
    - `artifact_id` string, required
    - `type` 'source_file' | 'crsprof' | 'usrprof' | 'pdf' | 'json' | 'diagnostics', required
    - `content_type` string, required
    - `file_name` string
    - `size_bytes` integer
    - `download_url` string, uri: Private pre-signed URL. May be omitted for expired artifacts.
    - `download_url_expires_at` string, date-time
    - `created_at` string, date-time, required
    - `expires_at` string, date-time, required
    - `metadata` object
    - `warnings` ApiProblem[]
      - `code` string, required
      - `message` string, required
      - `severity` 'info' | 'warning' | 'error', required
      - `field` string
      - `details` object
  - `warnings` ApiProblem[], required
    - `code` string, required
    - `message` string, required
    - `severity` 'info' | 'warning' | 'error', required
    - `field` string
    - `details` object
  - `errors` ApiProblem[], required
    - `code` string, required
    - `message` string, required
    - `severity` 'info' | 'warning' | 'error', required
    - `field` string
    - `details` object
  - `progress` object

## Other responses

- `404`: Resource not found
- `410`: job_expired or artifact_expired
- `500`: stored_metadata_invalid or artifact_body_missing; not evidence of resource absence.
- `503`: storage_unconfigured, storage_unavailable or storage_access_denied; service storage denial is not caller authorization denial.

---

[API](https://skmtc.dev/courseprofiler/apis/courseprofiler-public-api.md) · [All operations](https://skmtc.dev/courseprofiler/apis/courseprofiler-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/courseprofiler/apis/courseprofiler-public-api/revisions/e07403d7dba9?raw)
