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

# Courses

> Create and manage academic programs. Courses are the central entity linking institutions, modules, cohorts, and certificates.

# Courses

A course represents an academic program — a degree, diploma, professional course, or training program. It connects modules into a structured curriculum and provides the academic context for certificates.

***

## The course object

```json theme={null}
{
  "uuid": "c3d4e5f6-a7b8-9012-cdef-123456789012",
  "code": "BCS-2024",
  "name": "Bachelor of Computer Science",
  "description": "A 4-year undergraduate program in computer science.",
  "workload_hours": 3200,
  "area": "Technology",
  "version": "2024.1",
  "status": "active",
  "institution": {
    "uuid": "550e8400-e29b-41d4-a716-446655440000",
    "name": "Federal University of Technology"
  },
  "organization": null,
  "created_at": "2024-01-15T10:00:00.000000Z"
}
```

| Field            | Type         | Description                               |
| ---------------- | ------------ | ----------------------------------------- |
| `uuid`           | string       | Unique identifier                         |
| `code`           | string       | Internal course code                      |
| `name`           | string       | Course name (max 255 chars)               |
| `description`    | string       | Description of the program                |
| `workload_hours` | integer      | Total program hours                       |
| `area`           | string       | Knowledge area (e.g., Technology, Health) |
| `version`        | string       | Curriculum version                        |
| `status`         | enum         | `draft`, `active`, `archived`             |
| `institution`    | object       | Parent institution                        |
| `organization`   | object\|null | Optional sub-unit (faculty/department)    |

***

## List courses

```http theme={null}
GET /courses
```

<CodeGroup>
  ```bash cURL theme={null}
  curl "https://api.dokstamp.com/courses?where[status]=active&sort[column]=name" \
    -H "Authorization: Bearer {TOKEN}" \
    -H "Accept: application/json" \
    -H "X-Tenant: {TENANT}"
  ```
</CodeGroup>

***

## Create a course

```http theme={null}
POST /courses
```

| Parameter           | Type    | Required | Description                             |
| ------------------- | ------- | -------- | --------------------------------------- |
| `name`              | string  | Yes      | Course name                             |
| `institution_uuid`  | string  | Yes      | Parent institution UUID                 |
| `code`              | string  | No       | Internal code                           |
| `description`       | string  | No       | Program description                     |
| `workload_hours`    | integer | No       | Total program hours                     |
| `area`              | string  | No       | Knowledge area                          |
| `version`           | string  | No       | Curriculum version                      |
| `status`            | enum    | No       | `draft` (default), `active`, `archived` |
| `organization_uuid` | string  | No       | Sub-unit (faculty/department) UUID      |

<CodeGroup>
  ```bash cURL theme={null}
  curl -X POST https://api.dokstamp.com/courses \
    -H "Authorization: Bearer {TOKEN}" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -H "X-Tenant: {TENANT}" \
    -d '{
      "name": "Bachelor of Computer Science",
      "code": "BCS-2024",
      "institution_uuid": "550e8400-e29b-41d4-a716-446655440000",
      "workload_hours": 3200,
      "area": "Technology",
      "version": "2024.1",
      "status": "active"
    }'
  ```
</CodeGroup>

**Response `201`:**

```json theme={null}
{
  "data": {
    "uuid": "c3d4e5f6-a7b8-9012-cdef-123456789012",
    "name": "Bachelor of Computer Science",
    "status": "active",
    ...
  }
}
```

***

## Get, update, delete

```http theme={null}
GET    /courses/{uuid}
PATCH  /courses/{uuid}
PUT    /courses/{uuid}
DELETE /courses/{uuid}
DELETE /courses/batch/destroy
```

***

## Status transitions

| Status     | Meaning                                                    |
| ---------- | ---------------------------------------------------------- |
| `draft`    | Course is being configured — not yet accepting enrollments |
| `active`   | Course is live — certificates can be issued                |
| `archived` | Course is no longer offered — historical records remain    |

***

## Next steps for courses

After creating a course:

1. **Attach modules** → [Course Modules](/en/api-reference/courses/modules)
2. **Create module groups** → [Module Groups](/en/api-reference/courses/module-groups)
3. **Create cohorts** → [Cohorts](/en/api-reference/courses/cohorts)
4. **Issue certificates** → [Certificates](/en/api-reference/certificates/overview)
