---
search:
  tags:
    - Study programs
    - POST
seo:
  description: >-
    Creates a study program with an initial version. Returns the full program
    (same shape as… Reference for the POST /study-programs endpoint in the Fuxam
    API v4.
sidebar:
  label: Create a study program
  badge: POST
title: Create a study program
type: openapi-operation
---
Creates a study program with an initial version. Returns the full program (same shape as GET /study-programs/&#123;id&#125;). Optionally pass `curriculaIds` to connect curricula. Use `hasCohorts` and `hasStatistics` to control cohort-based enrollment and university statistics (both default to `true` when omitted). Scoped to your integration's institution via Basic Auth credentials.

`POST /study-programs`

**Request body** (`application/json`, required)

- `name` (string, required)
- `code` (string)
- `initialVersionName` (string)
- `objective` (string)
- `defaultStudyTime` (integer)
- `hasCohorts` (boolean) — Whether the program uses cohorts for enrollment. Defaults to \`true\` when omitted.
- `hasStatistics` (boolean) — Whether university statistics are collected for this program. Defaults to \`true\` when omitted.
- `curriculaIds` (string[]) — Optional curriculum IDs to connect.

Request body example:

```json
{
  "name": "Bachelor Computer Science",
  "code": "BSC-CS",
  "initialVersionName": "1.0",
  "objective": "Train software engineers with strong fundamentals.",
  "defaultStudyTime": 6,
  "hasCohorts": true,
  "hasStatistics": true,
  "curriculaIds": [
    "cur_abc123"
  ]
}
```

**Responses**

- `201` — Study program created
- `400` — Bad Request
- `401` — Unauthorized
- `409` — Conflict — duplicate email or membership code (body includes \`existingUserId\` when known), a time-tracking session that is already running (\`activeSession\`), a time-tracking interval that overlaps an existing log (\`conflictingLog\`), idempotency key reused with a different body (\`idempotency\_key\_reused\`), or concurrent request with the same key still in progress (\`idempotency\_key\_in\_progress\`)
- `429` — Too Many Requests — 1000 requests per minute per institution. Includes \`X-RateLimit-Limit\`, \`X-RateLimit-Remaining\`, \`X-RateLimit-Reset\` (ISO-8601), and \`Retry-After\` (seconds).
- `500` — Internal Server Error

Response example, 201:

```json
{
  "data": {
    "id": "sp_abc123",
    "name": "Bachelor of Science",
    "institutionId": "inst_123",
    "objective": "Graduate competent professionals.",
    "isArchived": false,
    "code": "BSC-001",
    "statisticData": null,
    "defaultStudyTime": 6,
    "defaultTuitionFeePlanId": null,
    "hasCohorts": true,
    "hasStatistics": false,
    "type": "BACHELOR",
    "studyProgramVersion": [
      {
        "id": "spv_001",
        "name": "2024 Intake",
        "institutionId": "inst_123",
        "studyProgramId": "sp_abc123",
        "isDefault": true,
        "statisticData": null
      }
    ],
    "responsibleUsers": [
      {
        "id": "user_abc123",
        "name": "Jane Doe",
        "email": "jane@example.com",
        "image": null
      }
    ],
    "connectedCurricula": [
      {
        "id": "cur_001",
        "name": "Bachelor CS 2024",
        "institutionId": "inst_123",
        "createdAt": "2026-01-01T00:00:00.000Z",
        "updatedAt": "2026-06-01T00:00:00.000Z",
        "isCohortSpecific": false,
        "isArchived": false,
        "code": "CS-2024",
        "versionsCount": 2
      }
    ],
    "firstVersion": {
      "id": "spv_001",
      "name": "2024 Intake",
      "institutionId": "inst_123",
      "studyProgramId": "sp_abc123",
      "isDefault": true,
      "statisticData": null
    },
    "defaultVersion": {
      "id": "spv_001",
      "name": "2024 Intake",
      "institutionId": "inst_123",
      "studyProgramId": "sp_abc123",
      "isDefault": true,
      "statisticData": null
    },
    "versionsCount": 1,
    "cohortsCount": 1,
    "studyProgramMetadata": null
  },
  "meta": {
    "requestId": "req_abc123",
    "timestamp": "2026-06-26T00:00:00.000Z",
    "version": "v4"
  }
}
```
