Create a study program
Creates a study program with an initial version. Returns the full program (same shape as GET /study-programs/{id}). 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.
/study-programsAuthorizationBasic auth · headerrequiredBasic Auth with clientId as username and clientSecret as password
Idempotency-Keystringrequiredapplication/jsonnamestringrequiredcodestringinitialVersionNamestringobjectivestringdefaultStudyTimeintegerhasCohortsbooleanWhether the program uses cohorts for enrollment. Defaults to true when omitted.
hasStatisticsbooleanWhether university statistics are collected for this program. Defaults to true when omitted.
curriculaIdsstring[]Optional curriculum IDs to connect.
Study program created
dataStudyProgramrequiredStudy program list, detail, create, and update response. Includes program versions, responsible users, connected curricula, and summary counts. Use GET /cohorts?studyProgramId={id} for cohort details.
Show propertiesHide properties
idstringrequirednamestringrequiredinstitutionIdstringrequiredobjectivestring | nullisArchivedbooleanrequiredcodestring | nullstatisticDataobject | nulldefaultStudyTimeintegerdefaultTuitionFeePlanIdstring | nullhasCohortsbooleanrequiredhasStatisticsbooleanrequiredtypestring | nullstudyProgramVersionStudyProgramVersion[]requiredProgram versions (cohorts are listed separately).
Show propertiesHide properties
StudyProgramVersionidstringrequirednamestringrequiredinstitutionIdstringrequiredstudyProgramIdstringrequiredisDefaultbooleanrequiredstatisticDataobject | nullresponsibleUsersSimpleUser[]requiredstudyProgramResponsibleUser[].user, sorted by name. The
Show propertiesHide properties
SimpleUseridstringrequirednamestringrequiredemailstring<email>requiredimagestring | nullrequiredconnectedCurriculaStudyProgramConnectedCurricula[]requiredFlattened curricula from studyProgramConnectedCurricula (see StudyProgramConnectedCurricula). The
Show propertiesHide properties
StudyProgramConnectedCurriculaidstringrequirednamestringrequiredinstitutionIdstringrequiredcreatedAtstring<date-time>requiredupdatedAtstring<date-time>requiredisCohortSpecificbooleanrequiredisArchivedbooleanrequiredcodestring | nullversionsCountintegerrequiredfirstVersionStudyProgramVersionrequiredThe first program version.
Show propertiesHide properties
idstringrequirednamestringrequiredinstitutionIdstringrequiredstudyProgramIdstringrequiredisDefaultbooleanrequiredstatisticDataobject | nulldefaultVersionStudyProgramVersion | nullThe default program version, if one is set.
Show propertiesHide properties
idstringrequirednamestringrequiredinstitutionIdstringrequiredstudyProgramIdstringrequiredisDefaultbooleanrequiredstatisticDataobject | nullnullversionsCountintegerrequiredTotal number of program versions.
cohortsCountintegerrequiredTotal cohort count across all versions.
studyProgramMetadataobject | nullrequiredAlways null on list and detail responses; use version-specific endpoints for metadata.
metaResponseMetarequiredShow propertiesHide properties
requestIdstringrequiredtimestampstring<date-time>requiredversionstringrequiredv4watermarkstring<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.
Bad Request
typestringrequirederrorcodestringrequiredbad_requestunauthorizedforbiddenresource_not_foundconflictvalidation_failedidempotency_key_reusedidempotency_key_in_progressservice_unavailableretryablerate_limit_exceededinternal_errortitlestringrequiredstatusintegerrequireddetailstringrequiredinstancestringerrorsobject[]Show propertiesHide properties
objectfieldstringmessagestringexistingUserIdstringPresent on 409 email or membership-code conflicts. The user id that already holds the email or code.
activeSessionobjectPresent on time-tracking start 409 when a session is already running. Stop this session, then retry start.
Show propertiesHide properties
idstringrequiredstartTimestring<date-time>requiredconflictingLogobjectPresent 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 propertiesHide properties
idstringrequiredstartTimestring<date-time>requiredendTimestring<date-time> | nullrequiredUnauthorized
typestringrequirederrorcodestringrequiredbad_requestunauthorizedforbiddenresource_not_foundconflictvalidation_failedidempotency_key_reusedidempotency_key_in_progressservice_unavailableretryablerate_limit_exceededinternal_errortitlestringrequiredstatusintegerrequireddetailstringrequiredinstancestringerrorsobject[]Show propertiesHide properties
objectfieldstringmessagestringexistingUserIdstringPresent on 409 email or membership-code conflicts. The user id that already holds the email or code.
activeSessionobjectPresent on time-tracking start 409 when a session is already running. Stop this session, then retry start.
Show propertiesHide properties
idstringrequiredstartTimestring<date-time>requiredconflictingLogobjectPresent 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 propertiesHide properties
idstringrequiredstartTimestring<date-time>requiredendTimestring<date-time> | nullrequiredConflict — 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)
typestringrequirederrorcodestringrequiredbad_requestunauthorizedforbiddenresource_not_foundconflictvalidation_failedidempotency_key_reusedidempotency_key_in_progressservice_unavailableretryablerate_limit_exceededinternal_errortitlestringrequiredstatusintegerrequireddetailstringrequiredinstancestringerrorsobject[]Show propertiesHide properties
objectfieldstringmessagestringexistingUserIdstringPresent on 409 email or membership-code conflicts. The user id that already holds the email or code.
activeSessionobjectPresent on time-tracking start 409 when a session is already running. Stop this session, then retry start.
Show propertiesHide properties
idstringrequiredstartTimestring<date-time>requiredconflictingLogobjectPresent 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 propertiesHide properties
idstringrequiredstartTimestring<date-time>requiredendTimestring<date-time> | nullrequiredToo Many Requests — 1000 requests per minute per institution. Includes X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset (ISO-8601), and Retry-After (seconds).
typestringrequirederrorcodestringrequiredbad_requestunauthorizedforbiddenresource_not_foundconflictvalidation_failedidempotency_key_reusedidempotency_key_in_progressservice_unavailableretryablerate_limit_exceededinternal_errortitlestringrequiredstatusintegerrequireddetailstringrequiredinstancestringerrorsobject[]Show propertiesHide properties
objectfieldstringmessagestringexistingUserIdstringPresent on 409 email or membership-code conflicts. The user id that already holds the email or code.
activeSessionobjectPresent on time-tracking start 409 when a session is already running. Stop this session, then retry start.
Show propertiesHide properties
idstringrequiredstartTimestring<date-time>requiredconflictingLogobjectPresent 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 propertiesHide properties
idstringrequiredstartTimestring<date-time>requiredendTimestring<date-time> | nullrequiredInternal Server Error
typestringrequirederrorcodestringrequiredbad_requestunauthorizedforbiddenresource_not_foundconflictvalidation_failedidempotency_key_reusedidempotency_key_in_progressservice_unavailableretryablerate_limit_exceededinternal_errortitlestringrequiredstatusintegerrequireddetailstringrequiredinstancestringerrorsobject[]Show propertiesHide properties
objectfieldstringmessagestringexistingUserIdstringPresent on 409 email or membership-code conflicts. The user id that already holds the email or code.
activeSessionobjectPresent on time-tracking start 409 when a session is already running. Stop this session, then retry start.
Show propertiesHide properties
idstringrequiredstartTimestring<date-time>requiredconflictingLogobjectPresent 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 propertiesHide properties
idstringrequiredstartTimestring<date-time>requiredendTimestring<date-time> | nullrequired