TeachersBonuses

Bonuses

Teachers · 10 operations

GET

Get teacher bonuses

/api/teacher/{id}/bonuses

Bonus rules of one teacher with their current balances. Amounts are present only when the role may see bonus amounts; a missing amount means no access, not zero.

get_teacher_bonuses

Path parameters · 1

idnumberrequired—

Response · 200

application/json

statusCodenumberrequiredexample 200
messagestringrequired—
dataobject[]—
Errors400401403429500
curl "https://your-school.rist.pro/api/teacher/1/bonuses" \
  -H "Authorization: Bearer $RIST_API_KEY"
Response example · 200
{
  "statusCode": 200,
  "message": "Operation completed successfully",
  "data": [
    {}
  ]
}
GET

Get bonus coverage of teachers

/api/teacher/bonus-coverage

All active teachers with their active bonus rules, to spot teachers without a bonus. Amounts are present only when the role may see bonus amounts.

get_teacher_bonus_coverage

Response · 200

application/json

statusCodenumberrequiredexample 200
messagestringrequired—
dataanyThe fields of data are not described yet.
Errors401403429500
curl "https://your-school.rist.pro/api/teacher/bonus-coverage" \
  -H "Authorization: Bearer $RIST_API_KEY"
Response example · 200
{
  "statusCode": 200,
  "message": "Operation completed successfully",
  "data": …
}
GET

List system bonuses

/api/bonus-template

System bonuses: shared bonus terms assigned to many teachers at once. Assigned teachers read the terms from it until they override them.

list_bonus_templates

Query parameters · 5

pagenumbermin 1 · default 1
pageSizenumber1–250 · default 20
nameOfBonusstring—
bonusTemplateIdsnumber[]—
isArchivalbooleandefault false

Response · 200

application/json

statusCodenumberrequiredexample 200
messagestringrequired—
dataobject3 fields
totalnumberrequired—
currentPagenumberrequired—
totalPagesnumberrequired—
Errors400401403429500
curl "https://your-school.rist.pro/api/bonus-template" \
  -H "Authorization: Bearer $RIST_API_KEY"
Response example · 200
{
  "statusCode": 200,
  "message": "Operation completed successfully",
  "data": {
    "total": 0,
    "currentPage": 0,
    "totalPages": 0
  }
}
GET

Get system bonus

/api/bonus-template/{id}

One system bonus with its terms.

get_bonus_template

Path parameters · 1

idnumberrequired—

Response · 200

application/json

statusCodenumberrequiredexample 200
messagestringrequired—
dataanyThe fields of data are not described yet.
Errors400401403429500
curl "https://your-school.rist.pro/api/bonus-template/1" \
  -H "Authorization: Bearer $RIST_API_KEY"
Response example · 200
{
  "statusCode": 200,
  "message": "Operation completed successfully",
  "data": …
}
POST

Create system bonus

/api/bonus-template

Add a system bonus to assign to teachers with POST /api/bonus/template. Terms: nameOfBonus; type (cannot be changed later): VOLUME = amountPerLesson for every lesson of a period, taken from the highest tier of minutes taught in it (tiers [{totalMinutes, amountPerLesson}], period DAY/WEEK/MONTH); VOLUME_ONCE = one-off sum per period by minutes reached (tiers, period); LESSON_COUNT = one-off sum by lessons per WEEK or MONTH (tiers, totalMinutes holds the lesson count); STUDENT_TENURE = one-off sum when a student reaches N lessons with the teacher (tiers, totalMinutes holds N); ON_TIME_CONDUCT = per-lesson sum from the first tier whose totalMinutes is not below the minutes from lesson end to conducting (values may be negative); CONVERSION = amountPerLesson per converted trial lesson; TIME_RANGE = amountPerLesson per lesson starting within timeRanges [{timeFrom, timeTo}] in minutes from midnight; STUDENT_CLASS = classAmounts [{classOfStudentId, amountPerLesson}]; TEACHING_PROGRAM = programAmounts [{teachingProgramId, amountPerLesson}]; SUBJECT = subjectAmounts [{subjectId, amountPerLesson}] instead of subjectIds; TYPE_OF_LESSON = typeOfLessonAmounts [{typeOfLessonId, amountPerLesson}] instead of typeOfLessonIds. Also typeOfLessonIds and subjectIds it applies to, durationOfLesson or null, presence PRESENT / ABSENT / PRESENT_OR_ABSENT / CANCELED for which lessons count (default any conducted).

create_bonus_template

Request body

application/json · object

nameOfBonusstringrequiredlength 1–150
typestringDefaults to VOLUME. Cannot be changed after creation.One of: VOLUME VOLUME_ONCE CONVERSION TIME_RANGE STUDENT_CLASS ON_TIME_CONDUCT LESSON_COUNT STUDENT_TENURE TEACHING_PROGRAM SUBJECT TYPE_OF_LESSON
periodstringrequirednullableOne of: DAY WEEK MONTH
presencestringnullableOne of: CANCELED PRESENT ABSENT PRESENT_OR_ABSENT
amountPerLessonnumbernullablemin 1
timeRangesobject[]nullableitems min 12 fields
timeFromnumberrequired0–1439
timeTonumberrequired0–1439
typeOfLessonIdsnumber[]requiredmin 1 · items min 1
subjectIdsnumber[]requiredmin 1 · items min 1
durationOfLessonnumberrequirednullablemin 1
tiersobject[]requireditems min 12 fields
totalMinutesnumberrequired—
amountPerLessonnumberrequired—
classAmountsobject[]nullableitems min 12 fields
classOfStudentIdnumberrequiredmin 1
amountPerLessonnumberrequiredmin 1
programAmountsobject[]nullableitems min 12 fields
teachingProgramIdnumberrequiredmin 1
amountPerLessonnumberrequiredmin 1
subjectAmountsobject[]nullableitems min 12 fields
subjectIdnumberrequiredmin 1
amountPerLessonnumberrequiredmin 1
typeOfLessonAmountsobject[]nullableitems min 12 fields
typeOfLessonIdnumberrequiredmin 1
amountPerLessonnumberrequiredmin 1
notestringrequirednullablelength max 1500

Response · 201

application/json

statusCodenumberrequiredexample 201
messagestringrequired—
dataanyThe fields of data are not described yet.
Errors400401403429500
curl -X POST "https://your-school.rist.pro/api/bonus-template" \
  -H "Authorization: Bearer $RIST_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "nameOfBonus": "string",
    "type": "VOLUME",
    "period": "DAY",
    "presence": "CANCELED",
    "amountPerLesson": 1,
    "timeRanges": [
      {
        "timeFrom": 0,
        "timeTo": 0
      }
    ],
    "typeOfLessonIds": [
      1
    ],
    "subjectIds": [
      1
    ],
    "durationOfLesson": 1,
    "tiers": [
      {
        "totalMinutes": 0,
        "amountPerLesson": 0
      }
    ],
    "classAmounts": [
      {
        "classOfStudentId": 1,
        "amountPerLesson": 1
      }
    ],
    "programAmounts": [
      {
        "teachingProgramId": 1,
        "amountPerLesson": 1
      }
    ],
    "subjectAmounts": [
      {
        "subjectId": 1,
        "amountPerLesson": 1
      }
    ],
    "typeOfLessonAmounts": [
      {
        "typeOfLessonId": 1,
        "amountPerLesson": 1
      }
    ],
    "note": "string"
  }'
Response example · 201
{
  "statusCode": 201,
  "message": "Operation completed successfully",
  "data": …
}
POST

Give a system bonus to several teachers at once (bonusTemplateId, teacherIds, optional dateStart and dateEnd as YYYY-MM-DD, note). Teachers who already have it are skipped.

assign_bonus_template

Request body

application/json · object

bonusTemplateIdnumberrequiredmin 1
teacherIdsnumber[]requiredmin 1 · items min 1
dateStartstringrequirednullable—
dateEndstringrequirednullable—
notestringrequirednullablelength max 1500

Response · 200

application/json

statusCodenumberrequiredexample 200
messagestringrequired—
dataobject[]16 fields
amountPerLessonnumberrequirednullable—
bonusIdnumberrequired—
teacherIdnumberrequired—
bonusTemplateIdnumberrequirednullableTemplate the terms below are taken from; null for a personal bonus.
overriddenTermsstring[]requiredTemplate terms overridden for this teacher (field names); empty for a personal bonus.
nameOfBonusstringrequired—
typestringrequiredOne of: VOLUME VOLUME_ONCE CONVERSION TIME_RANGE STUDENT_CLASS ON_TIME_CONDUCT LESSON_COUNT STUDENT_TENURE TEACHING_PROGRAM SUBJECT TYPE_OF_LESSON
periodstringrequirednullableOne of: DAY WEEK MONTH
presencestringrequiredWhich lessons the bonus counts by student attendance.One of: CANCELED PRESENT ABSENT PRESENT_OR_ABSENT
durationOfLessonnumberrequirednullable—
dateStartstringrequirednullableformat YYYY-MM-DDTHH:mm:ss
dateEndstringrequirednullableformat YYYY-MM-DDTHH:mm:ss
notestringrequirednullable—
isArchivalbooleanrequired—
updatedAtstringrequiredformat YYYY-MM-DDTHH:mm:ss
createdAtstringrequiredformat YYYY-MM-DDTHH:mm:ss
Errors400401403429500
curl -X POST "https://your-school.rist.pro/api/bonus/template" \
  -H "Authorization: Bearer $RIST_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "bonusTemplateId": 1,
    "teacherIds": [
      1
    ],
    "dateStart": "string",
    "dateEnd": "string",
    "note": "string"
  }'
Response example · 200
{
  "statusCode": 200,
  "message": "Operation completed successfully",
  "data": [
    {
      "amountPerLesson": 0,
      "bonusId": 1,
      "teacherId": 1,
      "bonusTemplateId": 1,
      "overriddenTerms": [
        "string"
      ],
      "nameOfBonus": "string",
      "type": "VOLUME",
      "period": "DAY",
      "presence": "CANCELED",
      "durationOfLesson": 0,
      "dateStart": "2026-11-09T14:30:00",
      "dateEnd": "2026-11-09T14:30:00",
      "note": "string",
      "isArchival": false,
      "updatedAt": "2026-11-09T14:30:00",
      "createdAt": "2026-11-09T14:30:00"
    }
  ]
}
POST

Add a personal bonus to one teacher (teacherId, optional dateStart and dateEnd as YYYY-MM-DD, note). Prefer a system bonus when several teachers share the terms. Terms: nameOfBonus; type (cannot be changed later): VOLUME = amountPerLesson for every lesson of a period, taken from the highest tier of minutes taught in it (tiers [{totalMinutes, amountPerLesson}], period DAY/WEEK/MONTH); VOLUME_ONCE = one-off sum per period by minutes reached (tiers, period); LESSON_COUNT = one-off sum by lessons per WEEK or MONTH (tiers, totalMinutes holds the lesson count); STUDENT_TENURE = one-off sum when a student reaches N lessons with the teacher (tiers, totalMinutes holds N); ON_TIME_CONDUCT = per-lesson sum from the first tier whose totalMinutes is not below the minutes from lesson end to conducting (values may be negative); CONVERSION = amountPerLesson per converted trial lesson; TIME_RANGE = amountPerLesson per lesson starting within timeRanges [{timeFrom, timeTo}] in minutes from midnight; STUDENT_CLASS = classAmounts [{classOfStudentId, amountPerLesson}]; TEACHING_PROGRAM = programAmounts [{teachingProgramId, amountPerLesson}]; SUBJECT = subjectAmounts [{subjectId, amountPerLesson}] instead of subjectIds; TYPE_OF_LESSON = typeOfLessonAmounts [{typeOfLessonId, amountPerLesson}] instead of typeOfLessonIds. Also typeOfLessonIds and subjectIds it applies to, durationOfLesson or null, presence PRESENT / ABSENT / PRESENT_OR_ABSENT / CANCELED for which lessons count (default any conducted).

create_teacher_bonus

Request body

application/json · object

teacherIdnumberrequiredmin 1
nameOfBonusstringrequiredlength 1–150
typestringDefaults to VOLUME. Cannot be changed after creation.One of: VOLUME VOLUME_ONCE CONVERSION TIME_RANGE STUDENT_CLASS ON_TIME_CONDUCT LESSON_COUNT STUDENT_TENURE TEACHING_PROGRAM SUBJECT TYPE_OF_LESSON
periodstringrequirednullableOne of: DAY WEEK MONTH
presencestringnullableOne of: CANCELED PRESENT ABSENT PRESENT_OR_ABSENT
amountPerLessonnumbernullablemin 1
timeRangesobject[]nullableitems min 12 fields
timeFromnumberrequired0–1439
timeTonumberrequired0–1439
typeOfLessonIdsnumber[]requiredmin 1 · items min 1
subjectIdsnumber[]requiredmin 1 · items min 1
durationOfLessonnumberrequirednullablemin 1
dateStartstringrequirednullable—
dateEndstringrequirednullable—
notestringrequirednullablelength max 1500
tiersobject[]requireditems min 12 fields
totalMinutesnumberrequired—
amountPerLessonnumberrequired—
classAmountsobject[]nullableitems min 12 fields
classOfStudentIdnumberrequiredmin 1
amountPerLessonnumberrequiredmin 1
programAmountsobject[]nullableitems min 12 fields
teachingProgramIdnumberrequiredmin 1
amountPerLessonnumberrequiredmin 1
subjectAmountsobject[]nullableitems min 12 fields
subjectIdnumberrequiredmin 1
amountPerLessonnumberrequiredmin 1
typeOfLessonAmountsobject[]nullableitems min 12 fields
typeOfLessonIdnumberrequiredmin 1
amountPerLessonnumberrequiredmin 1

Response · 201

application/json

statusCodenumberrequiredexample 201
messagestringrequired—
dataobject16 fields
amountPerLessonnumberrequirednullable—
bonusIdnumberrequired—
teacherIdnumberrequired—
bonusTemplateIdnumberrequirednullableTemplate the terms below are taken from; null for a personal bonus.
overriddenTermsstring[]requiredTemplate terms overridden for this teacher (field names); empty for a personal bonus.
nameOfBonusstringrequired—
typestringrequiredOne of: VOLUME VOLUME_ONCE CONVERSION TIME_RANGE STUDENT_CLASS ON_TIME_CONDUCT LESSON_COUNT STUDENT_TENURE TEACHING_PROGRAM SUBJECT TYPE_OF_LESSON
periodstringrequirednullableOne of: DAY WEEK MONTH
presencestringrequiredWhich lessons the bonus counts by student attendance.One of: CANCELED PRESENT ABSENT PRESENT_OR_ABSENT
durationOfLessonnumberrequirednullable—
dateStartstringrequirednullableformat YYYY-MM-DDTHH:mm:ss
dateEndstringrequirednullableformat YYYY-MM-DDTHH:mm:ss
notestringrequirednullable—
isArchivalbooleanrequired—
updatedAtstringrequiredformat YYYY-MM-DDTHH:mm:ss
createdAtstringrequiredformat YYYY-MM-DDTHH:mm:ss
Errors400401403429500
curl -X POST "https://your-school.rist.pro/api/bonus" \
  -H "Authorization: Bearer $RIST_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "teacherId": 1,
    "nameOfBonus": "string",
    "type": "VOLUME",
    "period": "DAY",
    "presence": "CANCELED",
    "amountPerLesson": 1,
    "timeRanges": [
      {
        "timeFrom": 0,
        "timeTo": 0
      }
    ],
    "typeOfLessonIds": [
      1
    ],
    "subjectIds": [
      1
    ],
    "durationOfLesson": 1,
    "dateStart": "string",
    "dateEnd": "string",
    "note": "string",
    "tiers": [
      {
        "totalMinutes": 0,
        "amountPerLesson": 0
      }
    ],
    "classAmounts": [
      {
        "classOfStudentId": 1,
        "amountPerLesson": 1
      }
    ],
    "programAmounts": [
      {
        "teachingProgramId": 1,
        "amountPerLesson": 1
      }
    ],
    "subjectAmounts": [
      {
        "subjectId": 1,
        "amountPerLesson": 1
      }
    ],
    "typeOfLessonAmounts": [
      {
        "typeOfLessonId": 1,
        "amountPerLesson": 1
      }
    ]
  }'
Response example · 201
{
  "statusCode": 201,
  "message": "Operation completed successfully",
  "data": {
    "amountPerLesson": 0,
    "bonusId": 1,
    "teacherId": 1,
    "bonusTemplateId": 1,
    "overriddenTerms": [
      "string"
    ],
    "nameOfBonus": "string",
    "type": "VOLUME",
    "period": "DAY",
    "presence": "CANCELED",
    "durationOfLesson": 0,
    "dateStart": "2026-11-09T14:30:00",
    "dateEnd": "2026-11-09T14:30:00",
    "note": "string",
    "isArchival": false,
    "updatedAt": "2026-11-09T14:30:00",
    "createdAt": "2026-11-09T14:30:00"
  }
}
PUT

Update system bonus

/api/bonus-template/{id}

Rewrite a system bonus; send all terms as in POST /api/bonus-template, the type stays. It applies at once to every assigned teacher who has not overridden the terms. Terms: nameOfBonus; type (cannot be changed later): VOLUME = amountPerLesson for every lesson of a period, taken from the highest tier of minutes taught in it (tiers [{totalMinutes, amountPerLesson}], period DAY/WEEK/MONTH); VOLUME_ONCE = one-off sum per period by minutes reached (tiers, period); LESSON_COUNT = one-off sum by lessons per WEEK or MONTH (tiers, totalMinutes holds the lesson count); STUDENT_TENURE = one-off sum when a student reaches N lessons with the teacher (tiers, totalMinutes holds N); ON_TIME_CONDUCT = per-lesson sum from the first tier whose totalMinutes is not below the minutes from lesson end to conducting (values may be negative); CONVERSION = amountPerLesson per converted trial lesson; TIME_RANGE = amountPerLesson per lesson starting within timeRanges [{timeFrom, timeTo}] in minutes from midnight; STUDENT_CLASS = classAmounts [{classOfStudentId, amountPerLesson}]; TEACHING_PROGRAM = programAmounts [{teachingProgramId, amountPerLesson}]; SUBJECT = subjectAmounts [{subjectId, amountPerLesson}] instead of subjectIds; TYPE_OF_LESSON = typeOfLessonAmounts [{typeOfLessonId, amountPerLesson}] instead of typeOfLessonIds. Also typeOfLessonIds and subjectIds it applies to, durationOfLesson or null, presence PRESENT / ABSENT / PRESENT_OR_ABSENT / CANCELED for which lessons count (default any conducted).

update_bonus_template

Path parameters · 1

idnumberrequired—

Request body

application/json · object

nameOfBonusstringrequiredlength 1–150
typestringDefaults to VOLUME. Cannot be changed after creation.One of: VOLUME VOLUME_ONCE CONVERSION TIME_RANGE STUDENT_CLASS ON_TIME_CONDUCT LESSON_COUNT STUDENT_TENURE TEACHING_PROGRAM SUBJECT TYPE_OF_LESSON
periodstringrequirednullableOne of: DAY WEEK MONTH
presencestringnullableOne of: CANCELED PRESENT ABSENT PRESENT_OR_ABSENT
amountPerLessonnumbernullablemin 1
timeRangesobject[]nullableitems min 12 fields
timeFromnumberrequired0–1439
timeTonumberrequired0–1439
typeOfLessonIdsnumber[]requiredmin 1 · items min 1
subjectIdsnumber[]requiredmin 1 · items min 1
durationOfLessonnumberrequirednullablemin 1
tiersobject[]requireditems min 12 fields
totalMinutesnumberrequired—
amountPerLessonnumberrequired—
classAmountsobject[]nullableitems min 12 fields
classOfStudentIdnumberrequiredmin 1
amountPerLessonnumberrequiredmin 1
programAmountsobject[]nullableitems min 12 fields
teachingProgramIdnumberrequiredmin 1
amountPerLessonnumberrequiredmin 1
subjectAmountsobject[]nullableitems min 12 fields
subjectIdnumberrequiredmin 1
amountPerLessonnumberrequiredmin 1
typeOfLessonAmountsobject[]nullableitems min 12 fields
typeOfLessonIdnumberrequiredmin 1
amountPerLessonnumberrequiredmin 1
notestringrequirednullablelength max 1500

Response · 200

application/json

statusCodenumberrequiredexample 200
messagestringrequired—
dataanyThe fields of data are not described yet.
Errors400401403429500
curl -X PUT "https://your-school.rist.pro/api/bonus-template/1" \
  -H "Authorization: Bearer $RIST_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "nameOfBonus": "string",
    "type": "VOLUME",
    "period": "DAY",
    "presence": "CANCELED",
    "amountPerLesson": 1,
    "timeRanges": [
      {
        "timeFrom": 0,
        "timeTo": 0
      }
    ],
    "typeOfLessonIds": [
      1
    ],
    "subjectIds": [
      1
    ],
    "durationOfLesson": 1,
    "tiers": [
      {
        "totalMinutes": 0,
        "amountPerLesson": 0
      }
    ],
    "classAmounts": [
      {
        "classOfStudentId": 1,
        "amountPerLesson": 1
      }
    ],
    "programAmounts": [
      {
        "teachingProgramId": 1,
        "amountPerLesson": 1
      }
    ],
    "subjectAmounts": [
      {
        "subjectId": 1,
        "amountPerLesson": 1
      }
    ],
    "typeOfLessonAmounts": [
      {
        "typeOfLessonId": 1,
        "amountPerLesson": 1
      }
    ],
    "note": "string"
  }'
Response example · 200
{
  "statusCode": 200,
  "message": "Operation completed successfully",
  "data": …
}
PATCH

Archive system bonus

/api/bonus-template/archive/{id}

Archive (isArchival=true) or restore (isArchival=false) a system bonus. Archiving also ends today every active teacher bonus assigned from it; restoring does not bring those back.

archive_bonus_template

Path parameters · 1

idnumberrequired—

Request body

application/json · object

isArchivalbooleanrequired—

Response · 200

application/json

statusCodenumberrequiredexample 200
messagestringrequired—
dataanyThe fields of data are not described yet.
Errors400401403429500
curl -X PATCH "https://your-school.rist.pro/api/bonus-template/archive/1" \
  -H "Authorization: Bearer $RIST_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "isArchival": false
  }'
Response example · 200
{
  "statusCode": 200,
  "message": "Operation completed successfully",
  "data": …
}
PATCH

Update teacher bonus

/api/bonus/{id}

Change a teacher bonus (path id is the bonusId from GET /api/teacher/{id}/bonuses). Send only the fields to change; the type cannot change. Changing the terms of a bonus from a system bonus overrides them for this teacher only.

update_teacher_bonus

Path parameters · 1

idnumberrequired—

Request body

application/json · object

teacherIdnumbermin 1
nameOfBonusstringlength 1–150
typestringDefaults to VOLUME. Cannot be changed after creation.One of: VOLUME VOLUME_ONCE CONVERSION TIME_RANGE STUDENT_CLASS ON_TIME_CONDUCT LESSON_COUNT STUDENT_TENURE TEACHING_PROGRAM SUBJECT TYPE_OF_LESSON
periodstringnullableOne of: DAY WEEK MONTH
presencestringnullableOne of: CANCELED PRESENT ABSENT PRESENT_OR_ABSENT
amountPerLessonnumbernullablemin 1
timeRangesobject[]nullableitems min 12 fields
timeFromnumberrequired0–1439
timeTonumberrequired0–1439
typeOfLessonIdsnumber[]min 1 · items min 1
subjectIdsnumber[]min 1 · items min 1
durationOfLessonnumbernullablemin 1
dateStartstringnullable—
dateEndstringnullable—
notestringnullablelength max 1500
tiersobject[]items min 12 fields
totalMinutesnumberrequired—
amountPerLessonnumberrequired—
classAmountsobject[]nullableitems min 12 fields
classOfStudentIdnumberrequiredmin 1
amountPerLessonnumberrequiredmin 1
programAmountsobject[]nullableitems min 12 fields
teachingProgramIdnumberrequiredmin 1
amountPerLessonnumberrequiredmin 1
subjectAmountsobject[]nullableitems min 12 fields
subjectIdnumberrequiredmin 1
amountPerLessonnumberrequiredmin 1
typeOfLessonAmountsobject[]nullableitems min 12 fields
typeOfLessonIdnumberrequiredmin 1
amountPerLessonnumberrequiredmin 1

Response · 200

application/json

statusCodenumberrequiredexample 200
messagestringrequired—
dataobject16 fields
amountPerLessonnumberrequirednullable—
bonusIdnumberrequired—
teacherIdnumberrequired—
bonusTemplateIdnumberrequirednullableTemplate the terms below are taken from; null for a personal bonus.
overriddenTermsstring[]requiredTemplate terms overridden for this teacher (field names); empty for a personal bonus.
nameOfBonusstringrequired—
typestringrequiredOne of: VOLUME VOLUME_ONCE CONVERSION TIME_RANGE STUDENT_CLASS ON_TIME_CONDUCT LESSON_COUNT STUDENT_TENURE TEACHING_PROGRAM SUBJECT TYPE_OF_LESSON
periodstringrequirednullableOne of: DAY WEEK MONTH
presencestringrequiredWhich lessons the bonus counts by student attendance.One of: CANCELED PRESENT ABSENT PRESENT_OR_ABSENT
durationOfLessonnumberrequirednullable—
dateStartstringrequirednullableformat YYYY-MM-DDTHH:mm:ss
dateEndstringrequirednullableformat YYYY-MM-DDTHH:mm:ss
notestringrequirednullable—
isArchivalbooleanrequired—
updatedAtstringrequiredformat YYYY-MM-DDTHH:mm:ss
createdAtstringrequiredformat YYYY-MM-DDTHH:mm:ss
Errors400401403429500
curl -X PATCH "https://your-school.rist.pro/api/bonus/1" \
  -H "Authorization: Bearer $RIST_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "teacherId": 1,
    "nameOfBonus": "string",
    "type": "VOLUME",
    "period": "DAY",
    "presence": "CANCELED",
    "amountPerLesson": 1,
    "timeRanges": [
      {
        "timeFrom": 0,
        "timeTo": 0
      }
    ],
    "typeOfLessonIds": [
      1
    ],
    "subjectIds": [
      1
    ],
    "durationOfLesson": 1,
    "dateStart": "string",
    "dateEnd": "string",
    "note": "string",
    "tiers": [
      {
        "totalMinutes": 0,
        "amountPerLesson": 0
      }
    ],
    "classAmounts": [
      {
        "classOfStudentId": 1,
        "amountPerLesson": 1
      }
    ],
    "programAmounts": [
      {
        "teachingProgramId": 1,
        "amountPerLesson": 1
      }
    ],
    "subjectAmounts": [
      {
        "subjectId": 1,
        "amountPerLesson": 1
      }
    ],
    "typeOfLessonAmounts": [
      {
        "typeOfLessonId": 1,
        "amountPerLesson": 1
      }
    ]
  }'
Response example · 200
{
  "statusCode": 200,
  "message": "Operation completed successfully",
  "data": {
    "amountPerLesson": 0,
    "bonusId": 1,
    "teacherId": 1,
    "bonusTemplateId": 1,
    "overriddenTerms": [
      "string"
    ],
    "nameOfBonus": "string",
    "type": "VOLUME",
    "period": "DAY",
    "presence": "CANCELED",
    "durationOfLesson": 0,
    "dateStart": "2026-11-09T14:30:00",
    "dateEnd": "2026-11-09T14:30:00",
    "note": "string",
    "isArchival": false,
    "updatedAt": "2026-11-09T14:30:00",
    "createdAt": "2026-11-09T14:30:00"
  }
}