---
search:
  tags:
    - Modules
    - POST
seo:
  description: >-
    Creates a new version for an existing module. Pass versionName in the body
    (e.g.… Reference for the POST /modules/{id}/versions endpoint in the Fuxam
    API v4.
sidebar:
  label: Create a module version
  badge: POST
title: Create a module version
type: openapi-operation
---
Creates a new version for an existing module. Pass `versionName` in the body (e.g. `1.0`, `2.0`). The default course title is copied from the parent module; optionally pass `moduleDisplayName` to override how the module is displayed for this version. Returns summary fields — use GET /modules/&#123;id&#125;/versions/&#123;versionId&#125; for full detail. Scoped to your integration's institution via Basic Auth credentials.

`POST /modules/{id}/versions`

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

- `versionName` (string, required) — Version label displayed in the UI (e.g. \`1.0\`, \`2.0\`). Stored in \`CourseModuleVersion.version\`.
- `description` (string) — Optional version description.
- `moduleDisplayName` (string) — Optional per-version module display name override (\`CourseModuleVersion.moduleName\`). When omitted, the parent module name is used.

Request body example:

```json
{
  "versionName": "2.0"
}
```

**Responses**

- `201` — Version created
- `400` — Bad Request
- `401` — Unauthorized
- `404` — Not Found
- `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": "cmqevazu005pb4pi9zp2zthd1",
    "version": "2.0",
    "name": "Economics",
    "description": null,
    "icon": null,
    "iconType": "emoji",
    "banner": null,
    "createdAt": "2026-06-15T07:04:18.408Z",
    "updatedAt": "2026-06-15T07:04:18.408Z",
    "requiredAttendancePercentage": 0,
    "ectsPoints": 0,
    "courseModuleId": "cmqevazrw05p34pi9wv9w3mks",
    "status": "DRAFT",
    "timePlanId": null,
    "isDefault": false,
    "earlyAssessmentEnabled": false,
    "isCurrentlyElectable": true,
    "capacity": null,
    "color": null,
    "courseChatFileAttachmentsDefault": true,
    "courseChatReadOnlyDefault": false,
    "courseFeatureDefaults": null,
    "moduleName": null,
    "attemptRules": null
  },
  "meta": {
    "requestId": "req_abc123",
    "timestamp": "2026-06-26T00:00:00.000Z",
    "version": "v4"
  }
}
```
