Wages
Teachers · 11 операцій
/api/teacher/{id}/wagesGETGet rate accrual history/api/teacher/wage/{id}/historyGETGet rate coverage of teachers/api/teacher/wage-coverageGETList system rates/api/wage-templateGETGet system rate/api/wage-template/{id}POSTCreate system rate/api/wage-templatePOSTAssign system rate to teachers/api/teacher/wage/templatePOSTCreate teacher rate/api/teacher/wagePUTUpdate system rate/api/wage-template/{id}PATCHArchive system rate/api/wage-template/archive/{id}PATCHUpdate teacher rate/api/teacher/wage/{id}Get teacher rates
/api/teacher/{id}/wagesPay rates of one teacher (per lesson, percent, tiers, own or from a system rate). Amounts are present only when the role may see wage amounts; a missing amount means no access, not zero.
get_teacher_wages
Параметри шляху · 1
id—Відповідь · 200
application/json
curl "https://your-school.rist.pro/api/teacher/1/wages" \
-H "Authorization: Bearer $RIST_API_KEY"const response = await fetch("https://your-school.rist.pro/api/teacher/1/wages", {
headers: {
Authorization: `Bearer ${process.env.RIST_API_KEY}`,
},
});
const { data } = await response.json();import os
import requests
response = requests.get(
"https://your-school.rist.pro/api/teacher/1/wages",
headers={"Authorization": f"Bearer {os.environ['RIST_API_KEY']}"},
)
response.raise_for_status()
data = response.json()["data"]{
"statusCode": 200,
"message": "Operation completed successfully",
"data": [
{}
]
}Get rate accrual history
/api/teacher/wage/{id}/historyBalance journal of one rate (path id is the wageId from GET /api/teacher/{id}/wages): lesson accruals, payouts and adjustments between dateStart and dateEnd (YYYY-MM-DD, school days), with totals. Denied unless the role may see the rate balance.
get_teacher_wage_history
Параметри шляху · 1
id—Параметри запиту · 2
dateStart—dateEnd—Відповідь · 200
application/json
statusCodeприклад 200message—data1 поле
balanceCurrent wage balance, not limited to the period.curl "https://your-school.rist.pro/api/teacher/wage/1/history?dateStart=string&dateEnd=string" \
-H "Authorization: Bearer $RIST_API_KEY"const response = await fetch("https://your-school.rist.pro/api/teacher/wage/1/history?dateStart=string&dateEnd=string", {
headers: {
Authorization: `Bearer ${process.env.RIST_API_KEY}`,
},
});
const { data } = await response.json();import os
import requests
response = requests.get(
"https://your-school.rist.pro/api/teacher/wage/1/history",
headers={"Authorization": f"Bearer {os.environ['RIST_API_KEY']}"},
params={
"dateStart": "string",
"dateEnd": "string"
},
)
response.raise_for_status()
data = response.json()["data"]{
"statusCode": 200,
"message": "Operation completed successfully",
"data": {
"balance": 0
}
}Get rate coverage of teachers
/api/teacher/wage-coverageAll active teachers with their active pay rates, to spot teachers without a rate. Amounts are present only when the role may see wage amounts.
get_teacher_wage_coverage
Відповідь · 200
application/json
curl "https://your-school.rist.pro/api/teacher/wage-coverage" \
-H "Authorization: Bearer $RIST_API_KEY"const response = await fetch("https://your-school.rist.pro/api/teacher/wage-coverage", {
headers: {
Authorization: `Bearer ${process.env.RIST_API_KEY}`,
},
});
const { data } = await response.json();import os
import requests
response = requests.get(
"https://your-school.rist.pro/api/teacher/wage-coverage",
headers={"Authorization": f"Bearer {os.environ['RIST_API_KEY']}"},
)
response.raise_for_status()
data = response.json()["data"]{
"statusCode": 200,
"message": "Operation completed successfully",
"data": …
}List system rates
/api/wage-templateSystem pay rates: shared terms assigned to many teachers at once. Assigned teachers read the terms from the rate until they override them.
list_wage_templates
Параметри запиту · 5
pageмін. 1 · за замовчуванням 1pageSize1–250 · за замовчуванням 20nameOfWage—wageTemplateIds—isArchivalза замовчуванням falseВідповідь · 200
application/json
curl "https://your-school.rist.pro/api/wage-template" \
-H "Authorization: Bearer $RIST_API_KEY"const response = await fetch("https://your-school.rist.pro/api/wage-template", {
headers: {
Authorization: `Bearer ${process.env.RIST_API_KEY}`,
},
});
const { data } = await response.json();import os
import requests
response = requests.get(
"https://your-school.rist.pro/api/wage-template",
headers={"Authorization": f"Bearer {os.environ['RIST_API_KEY']}"},
)
response.raise_for_status()
data = response.json()["data"]{
"statusCode": 200,
"message": "Operation completed successfully",
"data": {
"total": 0,
"currentPage": 0,
"totalPages": 0
}
}Get system rate
/api/wage-template/{id}One system pay rate with its terms.
get_wage_template
Параметри шляху · 1
id—Відповідь · 200
application/json
curl "https://your-school.rist.pro/api/wage-template/1" \
-H "Authorization: Bearer $RIST_API_KEY"const response = await fetch("https://your-school.rist.pro/api/wage-template/1", {
headers: {
Authorization: `Bearer ${process.env.RIST_API_KEY}`,
},
});
const { data } = await response.json();import os
import requests
response = requests.get(
"https://your-school.rist.pro/api/wage-template/1",
headers={"Authorization": f"Bearer {os.environ['RIST_API_KEY']}"},
)
response.raise_for_status()
data = response.json()["data"]{
"statusCode": 200,
"message": "Operation completed successfully",
"data": {}
}Create system rate
/api/wage-templateAdd a system pay rate to assign to teachers with POST /api/teacher/wage/template. Terms: nameOfWage; typeOfLessonIds and subjectIds it applies to (both non-empty); durationOfLesson in minutes or null for any; prices with at least one of: present {amount, amountType FIXED or PERCENT, tiers [{studentCount, amount, amountType}] to vary by students present} paid per student present at a conducted lesson; absent {rules [{amount, amountType, studentCount?, reasonIds of GET /api/reason-of-missing, empty = any other reason}]} per absent student; presentOrAbsent priced like present, counting absences with its reasonIds, not combined with present or absent; canceled {rules [{amount, amountType, reasonIds of GET /api/reason-for-cancellation, at least one}]} per canceled lesson; null = not paid. PERCENT is a percent of what students were charged. With FIXED, increasePerStudent multiplies the amount by the students counted and increaseProportionDuration scales it by lesson minutes / durationOfLesson. Example, 300 per lesson: prices {present {amount 300, amountType FIXED}}, increasePerStudent false.
create_wage_template
Тіло запиту
application/json · object
nameOfWageдовжина 1–150prices4 поля
presentPer student present at a conducted lesson.4 поля
amountмін. 0amountTypeUnit of amount: fixed per lesson or percent of student charges. Defaults to fixed; tiers carry their own.Одне з: PERCENT FIXEDtiersStudent-count tiers; without them amount applies.3 поля
studentCountмін. 1amountмін. 0amountTypeTier unit: fixed amount per lesson or percent of what students were charged. Defaults to a fixed amount.Одне з: PERCENT FIXEDreasonIdsPresent-or-absent price only: absence reasons counted with present students; empty means any. Ignored for present.мін. 1absentPer student absent from a conducted lesson; each rule counts absences with its own reasons.1 поле
rulesелементів мін. 14 поля
studentCountApplies to lessons with this many students; omitted means any count.мін. 1amountмін. 0amountTypeUnit: fixed amount per lesson or percent of student charges. Defaults to a fixed amount.Одне з: PERCENT FIXEDreasonIdsMissing reasons (absent) or cancellation reasons (canceled). An absent rule without reasons
means "any other reason"; a canceled rule requires at least one.мін. 1presentOrAbsentPresent and absent students together (absences limited by reasonIds, or any), priced like present.
Cannot be combined with separate present or absent prices.4 поля
amountмін. 0amountTypeUnit of amount: fixed per lesson or percent of student charges. Defaults to fixed; tiers carry their own.Одне з: PERCENT FIXEDtiersStudent-count tiers; without them amount applies.3 поля
studentCountмін. 1amountмін. 0amountTypeTier unit: fixed amount per lesson or percent of what students were charged. Defaults to a fixed amount.Одне з: PERCENT FIXEDreasonIdsPresent-or-absent price only: absence reasons counted with present students; empty means any. Ignored for present.мін. 1canceledPer lesson canceled for a reason listed in one of the rules.1 поле
rulesелементів мін. 14 поля
studentCountApplies to lessons with this many students; omitted means any count.мін. 1amountмін. 0amountTypeUnit: fixed amount per lesson or percent of student charges. Defaults to a fixed amount.Одне з: PERCENT FIXEDreasonIdsMissing reasons (absent) or cancellation reasons (canceled). An absent rule without reasons
means "any other reason"; a canceled rule requires at least one.мін. 1typeOfLessonIdsмін. 1 · елементів мін. 1subjectIdsмін. 1 · елементів мін. 1durationOfLessonмін. 1increasePerStudent—increaseProportionDuration—noteдовжина макс. 1500Відповідь · 201
application/json
curl -X POST "https://your-school.rist.pro/api/wage-template" \
-H "Authorization: Bearer $RIST_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"nameOfWage": "string",
"prices": {
"present": {
"amount": 0,
"amountType": "PERCENT",
"tiers": [
{
"studentCount": 1,
"amount": 0,
"amountType": "PERCENT"
}
],
"reasonIds": [
1
]
},
"absent": {
"rules": [
{
"studentCount": 1,
"amount": 0,
"amountType": "PERCENT",
"reasonIds": [
1
]
}
]
},
"presentOrAbsent": {
"amount": 0,
"amountType": "PERCENT",
"tiers": [
{
"studentCount": 1,
"amount": 0,
"amountType": "PERCENT"
}
],
"reasonIds": [
1
]
},
"canceled": {
"rules": [
{
"studentCount": 1,
"amount": 0,
"amountType": "PERCENT",
"reasonIds": [
1
]
}
]
}
},
"typeOfLessonIds": [
1
],
"subjectIds": [
1
],
"durationOfLesson": 1,
"increasePerStudent": false,
"increaseProportionDuration": false,
"note": "string"
}'const response = await fetch("https://your-school.rist.pro/api/wage-template", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.RIST_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"nameOfWage": "string",
"prices": {
"present": {
"amount": 0,
"amountType": "PERCENT",
"tiers": [
{
"studentCount": 1,
"amount": 0,
"amountType": "PERCENT"
}
],
"reasonIds": [
1
]
},
"absent": {
"rules": [
{
"studentCount": 1,
"amount": 0,
"amountType": "PERCENT",
"reasonIds": [
1
]
}
]
},
"presentOrAbsent": {
"amount": 0,
"amountType": "PERCENT",
"tiers": [
{
"studentCount": 1,
"amount": 0,
"amountType": "PERCENT"
}
],
"reasonIds": [
1
]
},
"canceled": {
"rules": [
{
"studentCount": 1,
"amount": 0,
"amountType": "PERCENT",
"reasonIds": [
1
]
}
]
}
},
"typeOfLessonIds": [
1
],
"subjectIds": [
1
],
"durationOfLesson": 1,
"increasePerStudent": false,
"increaseProportionDuration": false,
"note": "string"
}),
});
const { data } = await response.json();import os
import requests
response = requests.post(
"https://your-school.rist.pro/api/wage-template",
headers={"Authorization": f"Bearer {os.environ['RIST_API_KEY']}"},
json={
"nameOfWage": "string",
"prices": {
"present": {
"amount": 0,
"amountType": "PERCENT",
"tiers": [
{
"studentCount": 1,
"amount": 0,
"amountType": "PERCENT"
}
],
"reasonIds": [
1
]
},
"absent": {
"rules": [
{
"studentCount": 1,
"amount": 0,
"amountType": "PERCENT",
"reasonIds": [
1
]
}
]
},
"presentOrAbsent": {
"amount": 0,
"amountType": "PERCENT",
"tiers": [
{
"studentCount": 1,
"amount": 0,
"amountType": "PERCENT"
}
],
"reasonIds": [
1
]
},
"canceled": {
"rules": [
{
"studentCount": 1,
"amount": 0,
"amountType": "PERCENT",
"reasonIds": [
1
]
}
]
}
},
"typeOfLessonIds": [
1
],
"subjectIds": [
1
],
"durationOfLesson": 1,
"increasePerStudent": False,
"increaseProportionDuration": False,
"note": "string"
},
)
response.raise_for_status()
data = response.json()["data"]{
"statusCode": 201,
"message": "Operation completed successfully",
"data": {}
}Assign system rate to teachers
/api/teacher/wage/templateGive a system pay rate to several teachers at once (wageTemplateId, teacherIds, optional dateStart and dateEnd as YYYY-MM-DD, note). Teachers who already have it are skipped. The usual way to set up rates of many teachers.
assign_wage_template
Тіло запиту
application/json · object
wageTemplateIdмін. 1teacherIdsмін. 1 · елементів мін. 1dateStart—dateEnd—noteдовжина макс. 1500Відповідь · 200
application/json
statusCodeприклад 200message—data15 полів
balance—wageId—teacherId—wageTemplateIdSystem wage template; the terms below are already resolved from it. null for a personal wage.overriddenTermsField names of template terms overridden for this teacher; empty for a personal wage.nameOfWage—durationOfLesson—increasePerStudent—increaseProportionDuration—dateStartформат YYYY-MM-DDTHH:mm:ssdateEndформат YYYY-MM-DDTHH:mm:ssnote—isArchival—updatedAtформат YYYY-MM-DDTHH:mm:sscreatedAtформат YYYY-MM-DDTHH:mm:sscurl -X POST "https://your-school.rist.pro/api/teacher/wage/template" \
-H "Authorization: Bearer $RIST_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"wageTemplateId": 1,
"teacherIds": [
1
],
"dateStart": "string",
"dateEnd": "string",
"note": "string"
}'const response = await fetch("https://your-school.rist.pro/api/teacher/wage/template", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.RIST_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"wageTemplateId": 1,
"teacherIds": [
1
],
"dateStart": "string",
"dateEnd": "string",
"note": "string"
}),
});
const { data } = await response.json();import os
import requests
response = requests.post(
"https://your-school.rist.pro/api/teacher/wage/template",
headers={"Authorization": f"Bearer {os.environ['RIST_API_KEY']}"},
json={
"wageTemplateId": 1,
"teacherIds": [
1
],
"dateStart": "string",
"dateEnd": "string",
"note": "string"
},
)
response.raise_for_status()
data = response.json()["data"]{
"statusCode": 200,
"message": "Operation completed successfully",
"data": [
{
"balance": 0,
"wageId": 1,
"teacherId": 1,
"wageTemplateId": 1,
"overriddenTerms": [
"string"
],
"nameOfWage": "string",
"durationOfLesson": 0,
"increasePerStudent": false,
"increaseProportionDuration": false,
"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"
}
]
}Create teacher rate
/api/teacher/wageAdd a personal pay rate to one teacher (teacherId, optional dateStart and dateEnd as YYYY-MM-DD, note). Prefer a system rate when several teachers share the terms. Terms: nameOfWage; typeOfLessonIds and subjectIds it applies to (both non-empty); durationOfLesson in minutes or null for any; prices with at least one of: present {amount, amountType FIXED or PERCENT, tiers [{studentCount, amount, amountType}] to vary by students present} paid per student present at a conducted lesson; absent {rules [{amount, amountType, studentCount?, reasonIds of GET /api/reason-of-missing, empty = any other reason}]} per absent student; presentOrAbsent priced like present, counting absences with its reasonIds, not combined with present or absent; canceled {rules [{amount, amountType, reasonIds of GET /api/reason-for-cancellation, at least one}]} per canceled lesson; null = not paid. PERCENT is a percent of what students were charged. With FIXED, increasePerStudent multiplies the amount by the students counted and increaseProportionDuration scales it by lesson minutes / durationOfLesson. Example, 300 per lesson: prices {present {amount 300, amountType FIXED}}, increasePerStudent false.
create_teacher_wage
Тіло запиту
application/json · object
teacherIdмін. 1nameOfWageдовжина 1–150prices4 поля
presentPer student present at a conducted lesson.4 поля
amountмін. 0amountTypeUnit of amount: fixed per lesson or percent of student charges. Defaults to fixed; tiers carry their own.Одне з: PERCENT FIXEDtiersStudent-count tiers; without them amount applies.3 поля
studentCountмін. 1amountмін. 0amountTypeTier unit: fixed amount per lesson or percent of what students were charged. Defaults to a fixed amount.Одне з: PERCENT FIXEDreasonIdsPresent-or-absent price only: absence reasons counted with present students; empty means any. Ignored for present.мін. 1absentPer student absent from a conducted lesson; each rule counts absences with its own reasons.1 поле
rulesелементів мін. 14 поля
studentCountApplies to lessons with this many students; omitted means any count.мін. 1amountмін. 0amountTypeUnit: fixed amount per lesson or percent of student charges. Defaults to a fixed amount.Одне з: PERCENT FIXEDreasonIdsMissing reasons (absent) or cancellation reasons (canceled). An absent rule without reasons
means "any other reason"; a canceled rule requires at least one.мін. 1presentOrAbsentPresent and absent students together (absences limited by reasonIds, or any), priced like present.
Cannot be combined with separate present or absent prices.4 поля
amountмін. 0amountTypeUnit of amount: fixed per lesson or percent of student charges. Defaults to fixed; tiers carry their own.Одне з: PERCENT FIXEDtiersStudent-count tiers; without them amount applies.3 поля
studentCountмін. 1amountмін. 0amountTypeTier unit: fixed amount per lesson or percent of what students were charged. Defaults to a fixed amount.Одне з: PERCENT FIXEDreasonIdsPresent-or-absent price only: absence reasons counted with present students; empty means any. Ignored for present.мін. 1canceledPer lesson canceled for a reason listed in one of the rules.1 поле
rulesелементів мін. 14 поля
studentCountApplies to lessons with this many students; omitted means any count.мін. 1amountмін. 0amountTypeUnit: fixed amount per lesson or percent of student charges. Defaults to a fixed amount.Одне з: PERCENT FIXEDreasonIdsMissing reasons (absent) or cancellation reasons (canceled). An absent rule without reasons
means "any other reason"; a canceled rule requires at least one.мін. 1typeOfLessonIdsмін. 1 · елементів мін. 1subjectIdsмін. 1 · елементів мін. 1durationOfLessonмін. 1increasePerStudent—increaseProportionDuration—dateStart—dateEnd—noteдовжина макс. 1500Відповідь · 201
application/json
statusCodeприклад 201message—data15 полів
balance—wageId—teacherId—wageTemplateIdSystem wage template; the terms below are already resolved from it. null for a personal wage.overriddenTermsField names of template terms overridden for this teacher; empty for a personal wage.nameOfWage—durationOfLesson—increasePerStudent—increaseProportionDuration—dateStartформат YYYY-MM-DDTHH:mm:ssdateEndформат YYYY-MM-DDTHH:mm:ssnote—isArchival—updatedAtформат YYYY-MM-DDTHH:mm:sscreatedAtформат YYYY-MM-DDTHH:mm:sscurl -X POST "https://your-school.rist.pro/api/teacher/wage" \
-H "Authorization: Bearer $RIST_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"teacherId": 1,
"nameOfWage": "string",
"prices": {
"present": {
"amount": 0,
"amountType": "PERCENT",
"tiers": [
{
"studentCount": 1,
"amount": 0,
"amountType": "PERCENT"
}
],
"reasonIds": [
1
]
},
"absent": {
"rules": [
{
"studentCount": 1,
"amount": 0,
"amountType": "PERCENT",
"reasonIds": [
1
]
}
]
},
"presentOrAbsent": {
"amount": 0,
"amountType": "PERCENT",
"tiers": [
{
"studentCount": 1,
"amount": 0,
"amountType": "PERCENT"
}
],
"reasonIds": [
1
]
},
"canceled": {
"rules": [
{
"studentCount": 1,
"amount": 0,
"amountType": "PERCENT",
"reasonIds": [
1
]
}
]
}
},
"typeOfLessonIds": [
1
],
"subjectIds": [
1
],
"durationOfLesson": 1,
"increasePerStudent": false,
"increaseProportionDuration": false,
"dateStart": "string",
"dateEnd": "string",
"note": "string"
}'const response = await fetch("https://your-school.rist.pro/api/teacher/wage", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.RIST_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"teacherId": 1,
"nameOfWage": "string",
"prices": {
"present": {
"amount": 0,
"amountType": "PERCENT",
"tiers": [
{
"studentCount": 1,
"amount": 0,
"amountType": "PERCENT"
}
],
"reasonIds": [
1
]
},
"absent": {
"rules": [
{
"studentCount": 1,
"amount": 0,
"amountType": "PERCENT",
"reasonIds": [
1
]
}
]
},
"presentOrAbsent": {
"amount": 0,
"amountType": "PERCENT",
"tiers": [
{
"studentCount": 1,
"amount": 0,
"amountType": "PERCENT"
}
],
"reasonIds": [
1
]
},
"canceled": {
"rules": [
{
"studentCount": 1,
"amount": 0,
"amountType": "PERCENT",
"reasonIds": [
1
]
}
]
}
},
"typeOfLessonIds": [
1
],
"subjectIds": [
1
],
"durationOfLesson": 1,
"increasePerStudent": false,
"increaseProportionDuration": false,
"dateStart": "string",
"dateEnd": "string",
"note": "string"
}),
});
const { data } = await response.json();import os
import requests
response = requests.post(
"https://your-school.rist.pro/api/teacher/wage",
headers={"Authorization": f"Bearer {os.environ['RIST_API_KEY']}"},
json={
"teacherId": 1,
"nameOfWage": "string",
"prices": {
"present": {
"amount": 0,
"amountType": "PERCENT",
"tiers": [
{
"studentCount": 1,
"amount": 0,
"amountType": "PERCENT"
}
],
"reasonIds": [
1
]
},
"absent": {
"rules": [
{
"studentCount": 1,
"amount": 0,
"amountType": "PERCENT",
"reasonIds": [
1
]
}
]
},
"presentOrAbsent": {
"amount": 0,
"amountType": "PERCENT",
"tiers": [
{
"studentCount": 1,
"amount": 0,
"amountType": "PERCENT"
}
],
"reasonIds": [
1
]
},
"canceled": {
"rules": [
{
"studentCount": 1,
"amount": 0,
"amountType": "PERCENT",
"reasonIds": [
1
]
}
]
}
},
"typeOfLessonIds": [
1
],
"subjectIds": [
1
],
"durationOfLesson": 1,
"increasePerStudent": False,
"increaseProportionDuration": False,
"dateStart": "string",
"dateEnd": "string",
"note": "string"
},
)
response.raise_for_status()
data = response.json()["data"]{
"statusCode": 201,
"message": "Operation completed successfully",
"data": {
"balance": 0,
"wageId": 1,
"teacherId": 1,
"wageTemplateId": 1,
"overriddenTerms": [
"string"
],
"nameOfWage": "string",
"durationOfLesson": 0,
"increasePerStudent": false,
"increaseProportionDuration": false,
"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"
}
}Update system rate
/api/wage-template/{id}Rewrite a system pay rate; send all terms as in POST /api/wage-template. It applies at once to every assigned teacher who has not overridden the terms, for lessons conducted from now on; past accruals change only on recalculation. Terms: nameOfWage; typeOfLessonIds and subjectIds it applies to (both non-empty); durationOfLesson in minutes or null for any; prices with at least one of: present {amount, amountType FIXED or PERCENT, tiers [{studentCount, amount, amountType}] to vary by students present} paid per student present at a conducted lesson; absent {rules [{amount, amountType, studentCount?, reasonIds of GET /api/reason-of-missing, empty = any other reason}]} per absent student; presentOrAbsent priced like present, counting absences with its reasonIds, not combined with present or absent; canceled {rules [{amount, amountType, reasonIds of GET /api/reason-for-cancellation, at least one}]} per canceled lesson; null = not paid. PERCENT is a percent of what students were charged. With FIXED, increasePerStudent multiplies the amount by the students counted and increaseProportionDuration scales it by lesson minutes / durationOfLesson. Example, 300 per lesson: prices {present {amount 300, amountType FIXED}}, increasePerStudent false.
update_wage_template
Параметри шляху · 1
id—Тіло запиту
application/json · object
nameOfWageдовжина 1–150prices4 поля
presentPer student present at a conducted lesson.4 поля
amountмін. 0amountTypeUnit of amount: fixed per lesson or percent of student charges. Defaults to fixed; tiers carry their own.Одне з: PERCENT FIXEDtiersStudent-count tiers; without them amount applies.3 поля
studentCountмін. 1amountмін. 0amountTypeTier unit: fixed amount per lesson or percent of what students were charged. Defaults to a fixed amount.Одне з: PERCENT FIXEDreasonIdsPresent-or-absent price only: absence reasons counted with present students; empty means any. Ignored for present.мін. 1absentPer student absent from a conducted lesson; each rule counts absences with its own reasons.1 поле
rulesелементів мін. 14 поля
studentCountApplies to lessons with this many students; omitted means any count.мін. 1amountмін. 0amountTypeUnit: fixed amount per lesson or percent of student charges. Defaults to a fixed amount.Одне з: PERCENT FIXEDreasonIdsMissing reasons (absent) or cancellation reasons (canceled). An absent rule without reasons
means "any other reason"; a canceled rule requires at least one.мін. 1presentOrAbsentPresent and absent students together (absences limited by reasonIds, or any), priced like present.
Cannot be combined with separate present or absent prices.4 поля
amountмін. 0amountTypeUnit of amount: fixed per lesson or percent of student charges. Defaults to fixed; tiers carry their own.Одне з: PERCENT FIXEDtiersStudent-count tiers; without them amount applies.3 поля
studentCountмін. 1amountмін. 0amountTypeTier unit: fixed amount per lesson or percent of what students were charged. Defaults to a fixed amount.Одне з: PERCENT FIXEDreasonIdsPresent-or-absent price only: absence reasons counted with present students; empty means any. Ignored for present.мін. 1canceledPer lesson canceled for a reason listed in one of the rules.1 поле
rulesелементів мін. 14 поля
studentCountApplies to lessons with this many students; omitted means any count.мін. 1amountмін. 0amountTypeUnit: fixed amount per lesson or percent of student charges. Defaults to a fixed amount.Одне з: PERCENT FIXEDreasonIdsMissing reasons (absent) or cancellation reasons (canceled). An absent rule without reasons
means "any other reason"; a canceled rule requires at least one.мін. 1typeOfLessonIdsмін. 1 · елементів мін. 1subjectIdsмін. 1 · елементів мін. 1durationOfLessonмін. 1increasePerStudent—increaseProportionDuration—noteдовжина макс. 1500Відповідь · 200
application/json
curl -X PUT "https://your-school.rist.pro/api/wage-template/1" \
-H "Authorization: Bearer $RIST_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"nameOfWage": "string",
"prices": {
"present": {
"amount": 0,
"amountType": "PERCENT",
"tiers": [
{
"studentCount": 1,
"amount": 0,
"amountType": "PERCENT"
}
],
"reasonIds": [
1
]
},
"absent": {
"rules": [
{
"studentCount": 1,
"amount": 0,
"amountType": "PERCENT",
"reasonIds": [
1
]
}
]
},
"presentOrAbsent": {
"amount": 0,
"amountType": "PERCENT",
"tiers": [
{
"studentCount": 1,
"amount": 0,
"amountType": "PERCENT"
}
],
"reasonIds": [
1
]
},
"canceled": {
"rules": [
{
"studentCount": 1,
"amount": 0,
"amountType": "PERCENT",
"reasonIds": [
1
]
}
]
}
},
"typeOfLessonIds": [
1
],
"subjectIds": [
1
],
"durationOfLesson": 1,
"increasePerStudent": false,
"increaseProportionDuration": false,
"note": "string"
}'const response = await fetch("https://your-school.rist.pro/api/wage-template/1", {
method: "PUT",
headers: {
Authorization: `Bearer ${process.env.RIST_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"nameOfWage": "string",
"prices": {
"present": {
"amount": 0,
"amountType": "PERCENT",
"tiers": [
{
"studentCount": 1,
"amount": 0,
"amountType": "PERCENT"
}
],
"reasonIds": [
1
]
},
"absent": {
"rules": [
{
"studentCount": 1,
"amount": 0,
"amountType": "PERCENT",
"reasonIds": [
1
]
}
]
},
"presentOrAbsent": {
"amount": 0,
"amountType": "PERCENT",
"tiers": [
{
"studentCount": 1,
"amount": 0,
"amountType": "PERCENT"
}
],
"reasonIds": [
1
]
},
"canceled": {
"rules": [
{
"studentCount": 1,
"amount": 0,
"amountType": "PERCENT",
"reasonIds": [
1
]
}
]
}
},
"typeOfLessonIds": [
1
],
"subjectIds": [
1
],
"durationOfLesson": 1,
"increasePerStudent": false,
"increaseProportionDuration": false,
"note": "string"
}),
});
const { data } = await response.json();import os
import requests
response = requests.put(
"https://your-school.rist.pro/api/wage-template/1",
headers={"Authorization": f"Bearer {os.environ['RIST_API_KEY']}"},
json={
"nameOfWage": "string",
"prices": {
"present": {
"amount": 0,
"amountType": "PERCENT",
"tiers": [
{
"studentCount": 1,
"amount": 0,
"amountType": "PERCENT"
}
],
"reasonIds": [
1
]
},
"absent": {
"rules": [
{
"studentCount": 1,
"amount": 0,
"amountType": "PERCENT",
"reasonIds": [
1
]
}
]
},
"presentOrAbsent": {
"amount": 0,
"amountType": "PERCENT",
"tiers": [
{
"studentCount": 1,
"amount": 0,
"amountType": "PERCENT"
}
],
"reasonIds": [
1
]
},
"canceled": {
"rules": [
{
"studentCount": 1,
"amount": 0,
"amountType": "PERCENT",
"reasonIds": [
1
]
}
]
}
},
"typeOfLessonIds": [
1
],
"subjectIds": [
1
],
"durationOfLesson": 1,
"increasePerStudent": False,
"increaseProportionDuration": False,
"note": "string"
},
)
response.raise_for_status()
data = response.json()["data"]{
"statusCode": 200,
"message": "Operation completed successfully",
"data": {}
}Archive system rate
/api/wage-template/archive/{id}Archive (isArchival=true) or restore (isArchival=false) a system pay rate. Archiving also ends today every active teacher rate assigned from it; restoring does not bring those back.
archive_wage_template
Параметри шляху · 1
id—Тіло запиту
application/json · object
isArchival—Відповідь · 200
application/json
curl -X PATCH "https://your-school.rist.pro/api/wage-template/archive/1" \
-H "Authorization: Bearer $RIST_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"isArchival": false
}'const response = await fetch("https://your-school.rist.pro/api/wage-template/archive/1", {
method: "PATCH",
headers: {
Authorization: `Bearer ${process.env.RIST_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"isArchival": false
}),
});
const { data } = await response.json();import os
import requests
response = requests.patch(
"https://your-school.rist.pro/api/wage-template/archive/1",
headers={"Authorization": f"Bearer {os.environ['RIST_API_KEY']}"},
json={
"isArchival": False
},
)
response.raise_for_status()
data = response.json()["data"]{
"statusCode": 200,
"message": "Operation completed successfully",
"data": {}
}Update teacher rate
/api/teacher/wage/{id}Change a teacher rate (path id is the wageId from GET /api/teacher/{id}/wages). Send only the fields to change; a sent price replaces that price, null stops paying it. Changing the terms of a rate from a system rate overrides them for this teacher only. Applies to lessons conducted from now on.
update_teacher_wage
Параметри шляху · 1
id—Тіло запиту
application/json · object
teacherIdмін. 1nameOfWageдовжина 1–150prices4 поля
presentPer student present at a conducted lesson.4 поля
amountмін. 0amountTypeUnit of amount: fixed per lesson or percent of student charges. Defaults to fixed; tiers carry their own.Одне з: PERCENT FIXEDtiersStudent-count tiers; without them amount applies.3 поля
studentCountмін. 1amountмін. 0amountTypeTier unit: fixed amount per lesson or percent of what students were charged. Defaults to a fixed amount.Одне з: PERCENT FIXEDreasonIdsPresent-or-absent price only: absence reasons counted with present students; empty means any. Ignored for present.мін. 1absentPer student absent from a conducted lesson; each rule counts absences with its own reasons.1 поле
rulesелементів мін. 14 поля
studentCountApplies to lessons with this many students; omitted means any count.мін. 1amountмін. 0amountTypeUnit: fixed amount per lesson or percent of student charges. Defaults to a fixed amount.Одне з: PERCENT FIXEDreasonIdsMissing reasons (absent) or cancellation reasons (canceled). An absent rule without reasons
means "any other reason"; a canceled rule requires at least one.мін. 1presentOrAbsentPresent and absent students together (absences limited by reasonIds, or any), priced like present.
Cannot be combined with separate present or absent prices.4 поля
amountмін. 0amountTypeUnit of amount: fixed per lesson or percent of student charges. Defaults to fixed; tiers carry their own.Одне з: PERCENT FIXEDtiersStudent-count tiers; without them amount applies.3 поля
studentCountмін. 1amountмін. 0amountTypeTier unit: fixed amount per lesson or percent of what students were charged. Defaults to a fixed amount.Одне з: PERCENT FIXEDreasonIdsPresent-or-absent price only: absence reasons counted with present students; empty means any. Ignored for present.мін. 1canceledPer lesson canceled for a reason listed in one of the rules.1 поле
rulesелементів мін. 14 поля
studentCountApplies to lessons with this many students; omitted means any count.мін. 1amountмін. 0amountTypeUnit: fixed amount per lesson or percent of student charges. Defaults to a fixed amount.Одне з: PERCENT FIXEDreasonIdsMissing reasons (absent) or cancellation reasons (canceled). An absent rule without reasons
means "any other reason"; a canceled rule requires at least one.мін. 1typeOfLessonIdsмін. 1 · елементів мін. 1subjectIdsмін. 1 · елементів мін. 1durationOfLessonмін. 1increasePerStudent—increaseProportionDuration—dateStart—dateEnd—noteдовжина макс. 1500Відповідь · 200
application/json
statusCodeприклад 200message—data15 полів
balance—wageId—teacherId—wageTemplateIdSystem wage template; the terms below are already resolved from it. null for a personal wage.overriddenTermsField names of template terms overridden for this teacher; empty for a personal wage.nameOfWage—durationOfLesson—increasePerStudent—increaseProportionDuration—dateStartформат YYYY-MM-DDTHH:mm:ssdateEndформат YYYY-MM-DDTHH:mm:ssnote—isArchival—updatedAtформат YYYY-MM-DDTHH:mm:sscreatedAtформат YYYY-MM-DDTHH:mm:sscurl -X PATCH "https://your-school.rist.pro/api/teacher/wage/1" \
-H "Authorization: Bearer $RIST_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"teacherId": 1,
"nameOfWage": "string",
"prices": {
"present": {
"amount": 0,
"amountType": "PERCENT",
"tiers": [
{
"studentCount": 1,
"amount": 0,
"amountType": "PERCENT"
}
],
"reasonIds": [
1
]
},
"absent": {
"rules": [
{
"studentCount": 1,
"amount": 0,
"amountType": "PERCENT",
"reasonIds": [
1
]
}
]
},
"presentOrAbsent": {
"amount": 0,
"amountType": "PERCENT",
"tiers": [
{
"studentCount": 1,
"amount": 0,
"amountType": "PERCENT"
}
],
"reasonIds": [
1
]
},
"canceled": {
"rules": [
{
"studentCount": 1,
"amount": 0,
"amountType": "PERCENT",
"reasonIds": [
1
]
}
]
}
},
"typeOfLessonIds": [
1
],
"subjectIds": [
1
],
"durationOfLesson": 1,
"increasePerStudent": false,
"increaseProportionDuration": false,
"dateStart": "string",
"dateEnd": "string",
"note": "string"
}'const response = await fetch("https://your-school.rist.pro/api/teacher/wage/1", {
method: "PATCH",
headers: {
Authorization: `Bearer ${process.env.RIST_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"teacherId": 1,
"nameOfWage": "string",
"prices": {
"present": {
"amount": 0,
"amountType": "PERCENT",
"tiers": [
{
"studentCount": 1,
"amount": 0,
"amountType": "PERCENT"
}
],
"reasonIds": [
1
]
},
"absent": {
"rules": [
{
"studentCount": 1,
"amount": 0,
"amountType": "PERCENT",
"reasonIds": [
1
]
}
]
},
"presentOrAbsent": {
"amount": 0,
"amountType": "PERCENT",
"tiers": [
{
"studentCount": 1,
"amount": 0,
"amountType": "PERCENT"
}
],
"reasonIds": [
1
]
},
"canceled": {
"rules": [
{
"studentCount": 1,
"amount": 0,
"amountType": "PERCENT",
"reasonIds": [
1
]
}
]
}
},
"typeOfLessonIds": [
1
],
"subjectIds": [
1
],
"durationOfLesson": 1,
"increasePerStudent": false,
"increaseProportionDuration": false,
"dateStart": "string",
"dateEnd": "string",
"note": "string"
}),
});
const { data } = await response.json();import os
import requests
response = requests.patch(
"https://your-school.rist.pro/api/teacher/wage/1",
headers={"Authorization": f"Bearer {os.environ['RIST_API_KEY']}"},
json={
"teacherId": 1,
"nameOfWage": "string",
"prices": {
"present": {
"amount": 0,
"amountType": "PERCENT",
"tiers": [
{
"studentCount": 1,
"amount": 0,
"amountType": "PERCENT"
}
],
"reasonIds": [
1
]
},
"absent": {
"rules": [
{
"studentCount": 1,
"amount": 0,
"amountType": "PERCENT",
"reasonIds": [
1
]
}
]
},
"presentOrAbsent": {
"amount": 0,
"amountType": "PERCENT",
"tiers": [
{
"studentCount": 1,
"amount": 0,
"amountType": "PERCENT"
}
],
"reasonIds": [
1
]
},
"canceled": {
"rules": [
{
"studentCount": 1,
"amount": 0,
"amountType": "PERCENT",
"reasonIds": [
1
]
}
]
}
},
"typeOfLessonIds": [
1
],
"subjectIds": [
1
],
"durationOfLesson": 1,
"increasePerStudent": False,
"increaseProportionDuration": False,
"dateStart": "string",
"dateEnd": "string",
"note": "string"
},
)
response.raise_for_status()
data = response.json()["data"]{
"statusCode": 200,
"message": "Operation completed successfully",
"data": {
"balance": 0,
"wageId": 1,
"teacherId": 1,
"wageTemplateId": 1,
"overriddenTerms": [
"string"
],
"nameOfWage": "string",
"durationOfLesson": 0,
"increasePerStudent": false,
"increaseProportionDuration": false,
"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"
}
}