Saltar al contenido
Esc
↑↓navegar↵abrir⌘Jvista previa

Create a module

Creates a Module or catalog Submodule with an initial active version. Omit kind or send kind=module to create a normal Module (isSubmodule=false). kind=submodule creates a reusable catalog Submodule (isSubmodule=true) and requires Module Hierarchy; otherwise the API returns 409 Conflict. This does not attach the Submodule to a parent version — use POST /modules/{id}/versions/{versionId}/submodules for connections. Returns defaultVersion, firstVersion, and courses count. Scoped to your integration’s institution via Basic Auth credentials.

POST/modules
Authorization
AuthorizationBasic auth · headerrequired

Basic Auth with clientId as username and clientSecret as password

Header parameters
Idempotency-Keystringrequired
Request body
requiredapplication/json
namestringrequired
codestring
descriptionstring
iconstring
bannerstring
ectsPointsnumber

ECTS credit points. Halves only (0, 0.5, 1, 1.5, …). Breaking change: previously integer-only.

min 0
requiredAttendancePercentageinteger
versionNamestring
kindstring

Optional catalog kind. Omit or use module to create a Module. Use submodule to create a reusable catalog Submodule.

Allowed:modulesubmodule
Responses
201

Module created

dataModuleCreateResultrequired

Module returned by POST /modules: created module with its initial version, plus defaultVersion, firstVersion, and courses count. Use GET /modules/{id} for examination requirements, files, and full version detail.

Show properties
idstringrequired
namestringrequired
institutionIdstringrequired
codestring | null
isArchivedboolean | null
nameTranslationsobject | null
courseModuleTagsModuleTag[]
Show properties
Array of ModuleTag
idstringrequired
courseModuleIdstringrequired
tagIdstringrequired
tagobjectrequired
Show properties
idstringrequired
namestringrequired
institutionIdstringrequired
colorstring | null
iconstring | null
versionsModuleVersion[]required
Show properties
Array of ModuleVersion
idstringrequired
versionstringrequired
namestringrequired
descriptionstring | nullrequired

May be an empty string when not set.

iconstring | nullrequired
iconTypestring | nullrequired
bannerstring | nullrequired
createdAtstring<date-time>required
updatedAtstring<date-time>required
requiredAttendancePercentageintegerrequired
ectsPointsnumberrequired

ECTS credit points. Halves only (0, 0.5, 1, 1.5, …). Breaking change: previously integer-only.

min 0
courseModuleIdstringrequired
statusstringrequired
Allowed:DRAFTACTIVEARCHIVED
timePlanIdstring | nullrequired
isDefaultbooleanrequired
earlyAssessmentEnabledbooleanrequired
isCurrentlyElectablebooleanrequired
capacityinteger | nullrequired
colorinteger | nullrequired
courseChatFileAttachmentsDefaultbooleanrequired
courseChatReadOnlyDefaultbooleanrequired
courseFeatureDefaultsobject | nullrequired
moduleNamestring | nullrequired
attemptRulesobject | nullrequired
defaultVersionModuleVersion | null

The default version for this module. On create, matches firstVersion.

Show properties
Any of:
ModuleVersion
idstringrequired
versionstringrequired
namestringrequired
descriptionstring | nullrequired

May be an empty string when not set.

iconstring | nullrequired
iconTypestring | nullrequired
bannerstring | nullrequired
createdAtstring<date-time>required
updatedAtstring<date-time>required
requiredAttendancePercentageintegerrequired
ectsPointsnumberrequired

ECTS credit points. Halves only (0, 0.5, 1, 1.5, …). Breaking change: previously integer-only.

min 0
courseModuleIdstringrequired
statusstringrequired
Allowed:DRAFTACTIVEARCHIVED
timePlanIdstring | nullrequired
isDefaultbooleanrequired
earlyAssessmentEnabledbooleanrequired
isCurrentlyElectablebooleanrequired
capacityinteger | nullrequired
colorinteger | nullrequired
courseChatFileAttachmentsDefaultbooleanrequired
courseChatReadOnlyDefaultbooleanrequired
courseFeatureDefaultsobject | nullrequired
moduleNamestring | nullrequired
attemptRulesobject | nullrequired
null
null
firstVersionModuleVersion | null

The first version created for this module.

Show properties
Any of:
ModuleVersion
idstringrequired
versionstringrequired
namestringrequired
descriptionstring | nullrequired

May be an empty string when not set.

iconstring | nullrequired
iconTypestring | nullrequired
bannerstring | nullrequired
createdAtstring<date-time>required
updatedAtstring<date-time>required
requiredAttendancePercentageintegerrequired
ectsPointsnumberrequired

ECTS credit points. Halves only (0, 0.5, 1, 1.5, …). Breaking change: previously integer-only.

min 0
courseModuleIdstringrequired
statusstringrequired
Allowed:DRAFTACTIVEARCHIVED
timePlanIdstring | nullrequired
isDefaultbooleanrequired
earlyAssessmentEnabledbooleanrequired
isCurrentlyElectablebooleanrequired
capacityinteger | nullrequired
colorinteger | nullrequired
courseChatFileAttachmentsDefaultbooleanrequired
courseChatReadOnlyDefaultbooleanrequired
courseFeatureDefaultsobject | nullrequired
moduleNamestring | nullrequired
attemptRulesobject | nullrequired
null
null
coursesinteger

Total courses linked across all versions.

isSubmoduleboolean

Catalog classification. false is a Module; true is a reusable catalog Submodule. This is not a parent-version connection.

metaResponseMetarequired
Show properties
requestIdstringrequired
timestampstring<date-time>required
versionstringrequired
Allowed:v4
watermarkstring<date-time>

Present on GET /users?updatedSince= pages. Taken at the first page minus a 60s overlap. Bound into pagination.next_cursor. Use it as the next updatedSince after deduping by user id. Delivery is inclusive >= and at-least-once.

400

Bad Request

typestringrequired
Allowed:error
codestringrequired
Allowed:bad_requestunauthorizedforbiddenresource_not_foundconflictvalidation_failedidempotency_key_reusedidempotency_key_in_progressservice_unavailableretryablerate_limit_exceededinternal_error
titlestringrequired
statusintegerrequired
detailstringrequired
instancestring
errorsobject[]
Show properties
Array of object
fieldstring
messagestring
existingUserIdstring

Present on 409 email or membership-code conflicts. The user id that already holds the email or code.

activeSessionobject

Present on time-tracking start 409 when a session is already running. Stop this session, then retry start.

Show properties
idstringrequired
startTimestring<date-time>required
conflictingLogobject

Present on time-tracking 409 when the interval being written overlaps an existing log or open session. Start uses [punch, ∞). Stop uses [sessionStart, stop). endTime is null while that session is still open.

Show properties
idstringrequired
startTimestring<date-time>required
endTimestring<date-time> | nullrequired
401

Unauthorized

typestringrequired
Allowed:error
codestringrequired
Allowed:bad_requestunauthorizedforbiddenresource_not_foundconflictvalidation_failedidempotency_key_reusedidempotency_key_in_progressservice_unavailableretryablerate_limit_exceededinternal_error
titlestringrequired
statusintegerrequired
detailstringrequired
instancestring
errorsobject[]
Show properties
Array of object
fieldstring
messagestring
existingUserIdstring

Present on 409 email or membership-code conflicts. The user id that already holds the email or code.

activeSessionobject

Present on time-tracking start 409 when a session is already running. Stop this session, then retry start.

Show properties
idstringrequired
startTimestring<date-time>required
conflictingLogobject

Present on time-tracking 409 when the interval being written overlaps an existing log or open session. Start uses [punch, ∞). Stop uses [sessionStart, stop). endTime is null while that session is still open.

Show properties
idstringrequired
startTimestring<date-time>required
endTimestring<date-time> | nullrequired
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)

typestringrequired
Allowed:error
codestringrequired
Allowed:bad_requestunauthorizedforbiddenresource_not_foundconflictvalidation_failedidempotency_key_reusedidempotency_key_in_progressservice_unavailableretryablerate_limit_exceededinternal_error
titlestringrequired
statusintegerrequired
detailstringrequired
instancestring
errorsobject[]
Show properties
Array of object
fieldstring
messagestring
existingUserIdstring

Present on 409 email or membership-code conflicts. The user id that already holds the email or code.

activeSessionobject

Present on time-tracking start 409 when a session is already running. Stop this session, then retry start.

Show properties
idstringrequired
startTimestring<date-time>required
conflictingLogobject

Present on time-tracking 409 when the interval being written overlaps an existing log or open session. Start uses [punch, ∞). Stop uses [sessionStart, stop). endTime is null while that session is still open.

Show properties
idstringrequired
startTimestring<date-time>required
endTimestring<date-time> | nullrequired
422

Unprocessable Entity — validation or business rule error

typestringrequired
Allowed:error
codestringrequired
Allowed:bad_requestunauthorizedforbiddenresource_not_foundconflictvalidation_failedidempotency_key_reusedidempotency_key_in_progressservice_unavailableretryablerate_limit_exceededinternal_error
titlestringrequired
statusintegerrequired
detailstringrequired
instancestring
errorsobject[]
Show properties
Array of object
fieldstring
messagestring
existingUserIdstring

Present on 409 email or membership-code conflicts. The user id that already holds the email or code.

activeSessionobject

Present on time-tracking start 409 when a session is already running. Stop this session, then retry start.

Show properties
idstringrequired
startTimestring<date-time>required
conflictingLogobject

Present on time-tracking 409 when the interval being written overlaps an existing log or open session. Start uses [punch, ∞). Stop uses [sessionStart, stop). endTime is null while that session is still open.

Show properties
idstringrequired
startTimestring<date-time>required
endTimestring<date-time> | nullrequired
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).

typestringrequired
Allowed:error
codestringrequired
Allowed:bad_requestunauthorizedforbiddenresource_not_foundconflictvalidation_failedidempotency_key_reusedidempotency_key_in_progressservice_unavailableretryablerate_limit_exceededinternal_error
titlestringrequired
statusintegerrequired
detailstringrequired
instancestring
errorsobject[]
Show properties
Array of object
fieldstring
messagestring
existingUserIdstring

Present on 409 email or membership-code conflicts. The user id that already holds the email or code.

activeSessionobject

Present on time-tracking start 409 when a session is already running. Stop this session, then retry start.

Show properties
idstringrequired
startTimestring<date-time>required
conflictingLogobject

Present on time-tracking 409 when the interval being written overlaps an existing log or open session. Start uses [punch, ∞). Stop uses [sessionStart, stop). endTime is null while that session is still open.

Show properties
idstringrequired
startTimestring<date-time>required
endTimestring<date-time> | nullrequired
500

Internal Server Error

typestringrequired
Allowed:error
codestringrequired
Allowed:bad_requestunauthorizedforbiddenresource_not_foundconflictvalidation_failedidempotency_key_reusedidempotency_key_in_progressservice_unavailableretryablerate_limit_exceededinternal_error
titlestringrequired
statusintegerrequired
detailstringrequired
instancestring
errorsobject[]
Show properties
Array of object
fieldstring
messagestring
existingUserIdstring

Present on 409 email or membership-code conflicts. The user id that already holds the email or code.

activeSessionobject

Present on time-tracking start 409 when a session is already running. Stop this session, then retry start.

Show properties
idstringrequired
startTimestring<date-time>required
conflictingLogobject

Present on time-tracking 409 when the interval being written overlaps an existing log or open session. Start uses [punch, ∞). Stop uses [sessionStart, stop). endTime is null while that session is still open.

Show properties
idstringrequired
startTimestring<date-time>required
endTimestring<date-time> | nullrequired
Try it
Server
Authorization
Parameters
Bodyapplication/json
Request
curl -X POST 'https://fuxam.app/api/v4/modules' \
  -H 'Authorization: Basic YOUR_CREDENTIALS' \
  -H 'Idempotency-Key: string' \
  -H 'Accept: application/json' \
  -H 'Content-Type: application/json' \
  -d '{
  "name": "string",
  "code": "string",
  "description": "string",
  "icon": "string",
  "banner": "string",
  "ectsPoints": 5,
  "requiredAttendancePercentage": 0,
  "versionName": "string",
  "kind": "module"
}'
Response
{
  "data": {
    "id": "cm_xyz789",
    "name": "Economics",
    "institutionId": "inst_123",
    "code": "ECO-101",
    "isArchived": false,
    "nameTranslations": null,
    "courseModuleTags": [],
    "versions": [
      {
        "id": "cmqevazu005pb4pi9zp2zthd1",
        "version": "2.0.0",
        "name": "Business Administration Basics",
        "description": "",
        "icon": null,
        "iconType": "emoji",
        "banner": null,
        "createdAt": "2026-06-15T07:04:18.408Z",
        "updatedAt": "2026-06-15T07:04:18.408Z",
        "requiredAttendancePercentage": 80,
        "ectsPoints": 5,
        "courseModuleId": "cmqevazrw05p34pi9wv9w3mks",
        "status": "ACTIVE",
        "timePlanId": "cmqevazr905p14pi9st41ex1w",
        "isDefault": true,
        "earlyAssessmentEnabled": false,
        "isCurrentlyElectable": true,
        "capacity": null,
        "color": null,
        "courseChatFileAttachmentsDefault": true,
        "courseChatReadOnlyDefault": false,
        "courseFeatureDefaults": null,
        "moduleName": null,
        "attemptRules": null
      }
    ],
    "defaultVersion": {
      "id": "cmqevazu005pb4pi9zp2zthd1",
      "version": "2.0.0",
      "name": "Business Administration Basics",
      "description": "",
      "icon": null,
      "iconType": "emoji",
      "banner": null,
      "createdAt": "2026-06-15T07:04:18.408Z",
      "updatedAt": "2026-06-15T07:04:18.408Z",
      "requiredAttendancePercentage": 80,
      "ectsPoints": 5,
      "courseModuleId": "cmqevazrw05p34pi9wv9w3mks",
      "status": "ACTIVE",
      "timePlanId": "cmqevazr905p14pi9st41ex1w",
      "isDefault": true,
      "earlyAssessmentEnabled": false,
      "isCurrentlyElectable": true,
      "capacity": null,
      "color": null,
      "courseChatFileAttachmentsDefault": true,
      "courseChatReadOnlyDefault": false,
      "courseFeatureDefaults": null,
      "moduleName": null,
      "attemptRules": null
    },
    "firstVersion": {
      "id": "cmqevazu005pb4pi9zp2zthd1",
      "version": "2.0.0",
      "name": "Business Administration Basics",
      "description": "",
      "icon": null,
      "iconType": "emoji",
      "banner": null,
      "createdAt": "2026-06-15T07:04:18.408Z",
      "updatedAt": "2026-06-15T07:04:18.408Z",
      "requiredAttendancePercentage": 80,
      "ectsPoints": 5,
      "courseModuleId": "cmqevazrw05p34pi9wv9w3mks",
      "status": "ACTIVE",
      "timePlanId": "cmqevazr905p14pi9st41ex1w",
      "isDefault": true,
      "earlyAssessmentEnabled": false,
      "isCurrentlyElectable": true,
      "capacity": null,
      "color": null,
      "courseChatFileAttachmentsDefault": true,
      "courseChatReadOnlyDefault": false,
      "courseFeatureDefaults": null,
      "moduleName": null,
      "attemptRules": null
    },
    "courses": 0
  },
  "meta": {
    "requestId": "req_abc123",
    "timestamp": "2026-06-26T00:00:00.000Z",
    "version": "v4"
  }
}

¿Te ha resultado útil esta página?