own:course. Creates a course that is NOT tied to a rombel×mapel — the caller picks a grade (tingkat) and subjectId (mapel); the title is derived as "{grade} | {subject name}". Members can later be added only from that grade. ownerId (PIC) is optional and behaves by caller: when an admin (manage:course) sets ownerId, the class is assigned to that active teacher and starts ACTIVE; when an admin omits ownerId, the class is created OPEN (status DRAFT, no PIC) and becomes requestable by teachers; a teacher self-request omits ownerId, becomes the PIC, and the class starts REQUESTED pending admin approval. Used for cross-rombel groups such as minority-religion classes.core.session_token: ********************Authorization: Bearer ********************curl --location '/courses/custom' \
--header 'Content-Type: application/json' \
--data '{
"grade": 1,
"academicYear": "string",
"subjectId": "string",
"ownerId": "string"
}'{
"success": true,
"message": "string",
"meta": {
"page": 0,
"limit": 0,
"total": 0
},
"errors": [
{
"code": "CR-100001",
"field": "string",
"message": "string"
}
],
"result": {
"id": "string",
"title": "string",
"description": "string",
"status": "REQUESTED",
"coverImage": "string",
"grade": 0,
"academicYear": "string",
"subject": {
"id": "string",
"name": "string",
"code": "string"
},
"class": {
"id": "string",
"name": "string",
"grade": 0,
"academicYear": "string"
},
"owner": {
"id": "string",
"name": "string",
"image": "string"
},
"isOwned": true,
"isCoTeacher": true,
"counts": {
"students": 0,
"materials": 0,
"quizzes": 0,
"assignments": 0
},
"myProgress": {
"completed": 0,
"total": 0
},
"createdAt": "2019-08-24T14:15:22.123Z",
"updatedAt": "2019-08-24T14:15:22.123Z",
"archivedAt": "2019-08-24T14:15:22.123Z",
"requestNote": "string",
"rejectionReason": "string",
"reviewedAt": "2019-08-24T14:15:22.123Z",
"teachers": [
{
"teacherId": "string",
"name": "string",
"email": "string",
"image": "string",
"isOwner": true,
"addedAt": "2019-08-24T14:15:22.123Z"
}
]
}
}