Wages
Teachers · 11 operations
/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
Path parameters · 1
id—Response · 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
Path parameters · 1
id—Query parameters · 2
dateStart—dateEnd—Response · 200
application/json
statusCodeexample 200message—data1 field
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
Response · 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
Query parameters · 5
pagemin 1 · default 1pageSize1–250 · default 20nameOfWage—wageTemplateIds—isArchivaldefault falseResponse · 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
Path parameters · 1
id—Response · 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
Request body
application/json · object
nameOfWagelength 1–150prices4 fields
presentPer student present at a conducted lesson.4 fields
amountmin 0amountTypeUnit of amount: fixed per lesson or percent of student charges. Defaults to fixed; tiers carry their own.One of: PERCENT FIXEDtiersStudent-count tiers; without them amount applies.3 fields
studentCountmin 1amountmin 0amountTypeTier unit: fixed amount per lesson or percent of what students were charged. Defaults to a fixed amount.One of: PERCENT FIXEDreasonIdsPresent-or-absent price only: absence reasons counted with present students; empty means any. Ignored for present.min 1absentPer student absent from a conducted lesson; each rule counts absences with its own reasons.1 field
rulesitems min 14 fields
studentCountApplies to lessons with this many students; omitted means any count.min 1amountmin 0amountTypeUnit: fixed amount per lesson or percent of student charges. Defaults to a fixed amount.One of: PERCENT FIXEDreasonIdsMissing reasons (absent) or cancellation reasons (canceled). An absent rule without reasons
means "any other reason"; a canceled rule requires at least one.min 1presentOrAbsentPresent and absent students together (absences limited by reasonIds, or any), priced like present.
Cannot be combined with separate present or absent prices.4 fields
amountmin 0amountTypeUnit of amount: fixed per lesson or percent of student charges. Defaults to fixed; tiers carry their own.One of: PERCENT FIXEDtiersStudent-count tiers; without them amount applies.3 fields
studentCountmin 1amountmin 0amountTypeTier unit: fixed amount per lesson or percent of what students were charged. Defaults to a fixed amount.One of: PERCENT FIXEDreasonIdsPresent-or-absent price only: absence reasons counted with present students; empty means any. Ignored for present.min 1canceledPer lesson canceled for a reason listed in one of the rules.1 field
rulesitems min 14 fields
studentCountApplies to lessons with this many students; omitted means any count.min 1amountmin 0amountTypeUnit: fixed amount per lesson or percent of student charges. Defaults to a fixed amount.One of: PERCENT FIXEDreasonIdsMissing reasons (absent) or cancellation reasons (canceled). An absent rule without reasons
means "any other reason"; a canceled rule requires at least one.min 1typeOfLessonIdsmin 1 · items min 1subjectIdsmin 1 · items min 1durationOfLessonmin 1increasePerStudent—increaseProportionDuration—notelength max 1500Response · 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
Request body
application/json · object
wageTemplateIdmin 1teacherIdsmin 1 · items min 1dateStart—dateEnd—notelength max 1500Response · 200
application/json
statusCodeexample 200message—data15 fields
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—dateStartformat YYYY-MM-DDTHH:mm:ssdateEndformat YYYY-MM-DDTHH:mm:ssnote—isArchival—updatedAtformat YYYY-MM-DDTHH:mm:sscreatedAtformat 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
Request body
application/json · object
teacherIdmin 1nameOfWagelength 1–150prices4 fields
presentPer student present at a conducted lesson.4 fields
amountmin 0amountTypeUnit of amount: fixed per lesson or percent of student charges. Defaults to fixed; tiers carry their own.One of: PERCENT FIXEDtiersStudent-count tiers; without them amount applies.3 fields
studentCountmin 1amountmin 0amountTypeTier unit: fixed amount per lesson or percent of what students were charged. Defaults to a fixed amount.One of: PERCENT FIXEDreasonIdsPresent-or-absent price only: absence reasons counted with present students; empty means any. Ignored for present.min 1absentPer student absent from a conducted lesson; each rule counts absences with its own reasons.1 field
rulesitems min 14 fields
studentCountApplies to lessons with this many students; omitted means any count.min 1amountmin 0amountTypeUnit: fixed amount per lesson or percent of student charges. Defaults to a fixed amount.One of: PERCENT FIXEDreasonIdsMissing reasons (absent) or cancellation reasons (canceled). An absent rule without reasons
means "any other reason"; a canceled rule requires at least one.min 1presentOrAbsentPresent and absent students together (absences limited by reasonIds, or any), priced like present.
Cannot be combined with separate present or absent prices.4 fields
amountmin 0amountTypeUnit of amount: fixed per lesson or percent of student charges. Defaults to fixed; tiers carry their own.One of: PERCENT FIXEDtiersStudent-count tiers; without them amount applies.3 fields
studentCountmin 1amountmin 0amountTypeTier unit: fixed amount per lesson or percent of what students were charged. Defaults to a fixed amount.One of: PERCENT FIXEDreasonIdsPresent-or-absent price only: absence reasons counted with present students; empty means any. Ignored for present.min 1canceledPer lesson canceled for a reason listed in one of the rules.1 field
rulesitems min 14 fields
studentCountApplies to lessons with this many students; omitted means any count.min 1amountmin 0amountTypeUnit: fixed amount per lesson or percent of student charges. Defaults to a fixed amount.One of: PERCENT FIXEDreasonIdsMissing reasons (absent) or cancellation reasons (canceled). An absent rule without reasons
means "any other reason"; a canceled rule requires at least one.min 1typeOfLessonIdsmin 1 · items min 1subjectIdsmin 1 · items min 1durationOfLessonmin 1increasePerStudent—increaseProportionDuration—dateStart—dateEnd—notelength max 1500Response · 201
application/json
statusCodeexample 201message—data15 fields
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—dateStartformat YYYY-MM-DDTHH:mm:ssdateEndformat YYYY-MM-DDTHH:mm:ssnote—isArchival—updatedAtformat YYYY-MM-DDTHH:mm:sscreatedAtformat 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
Path parameters · 1
id—Request body
application/json · object
nameOfWagelength 1–150prices4 fields
presentPer student present at a conducted lesson.4 fields
amountmin 0amountTypeUnit of amount: fixed per lesson or percent of student charges. Defaults to fixed; tiers carry their own.One of: PERCENT FIXEDtiersStudent-count tiers; without them amount applies.3 fields
studentCountmin 1amountmin 0amountTypeTier unit: fixed amount per lesson or percent of what students were charged. Defaults to a fixed amount.One of: PERCENT FIXEDreasonIdsPresent-or-absent price only: absence reasons counted with present students; empty means any. Ignored for present.min 1absentPer student absent from a conducted lesson; each rule counts absences with its own reasons.1 field
rulesitems min 14 fields
studentCountApplies to lessons with this many students; omitted means any count.min 1amountmin 0amountTypeUnit: fixed amount per lesson or percent of student charges. Defaults to a fixed amount.One of: PERCENT FIXEDreasonIdsMissing reasons (absent) or cancellation reasons (canceled). An absent rule without reasons
means "any other reason"; a canceled rule requires at least one.min 1presentOrAbsentPresent and absent students together (absences limited by reasonIds, or any), priced like present.
Cannot be combined with separate present or absent prices.4 fields
amountmin 0amountTypeUnit of amount: fixed per lesson or percent of student charges. Defaults to fixed; tiers carry their own.One of: PERCENT FIXEDtiersStudent-count tiers; without them amount applies.3 fields
studentCountmin 1amountmin 0amountTypeTier unit: fixed amount per lesson or percent of what students were charged. Defaults to a fixed amount.One of: PERCENT FIXEDreasonIdsPresent-or-absent price only: absence reasons counted with present students; empty means any. Ignored for present.min 1canceledPer lesson canceled for a reason listed in one of the rules.1 field
rulesitems min 14 fields
studentCountApplies to lessons with this many students; omitted means any count.min 1amountmin 0amountTypeUnit: fixed amount per lesson or percent of student charges. Defaults to a fixed amount.One of: PERCENT FIXEDreasonIdsMissing reasons (absent) or cancellation reasons (canceled). An absent rule without reasons
means "any other reason"; a canceled rule requires at least one.min 1typeOfLessonIdsmin 1 · items min 1subjectIdsmin 1 · items min 1durationOfLessonmin 1increasePerStudent—increaseProportionDuration—notelength max 1500Response · 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
Path parameters · 1
id—Request body
application/json · object
isArchival—Response · 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
Path parameters · 1
id—Request body
application/json · object
teacherIdmin 1nameOfWagelength 1–150prices4 fields
presentPer student present at a conducted lesson.4 fields
amountmin 0amountTypeUnit of amount: fixed per lesson or percent of student charges. Defaults to fixed; tiers carry their own.One of: PERCENT FIXEDtiersStudent-count tiers; without them amount applies.3 fields
studentCountmin 1amountmin 0amountTypeTier unit: fixed amount per lesson or percent of what students were charged. Defaults to a fixed amount.One of: PERCENT FIXEDreasonIdsPresent-or-absent price only: absence reasons counted with present students; empty means any. Ignored for present.min 1absentPer student absent from a conducted lesson; each rule counts absences with its own reasons.1 field
rulesitems min 14 fields
studentCountApplies to lessons with this many students; omitted means any count.min 1amountmin 0amountTypeUnit: fixed amount per lesson or percent of student charges. Defaults to a fixed amount.One of: PERCENT FIXEDreasonIdsMissing reasons (absent) or cancellation reasons (canceled). An absent rule without reasons
means "any other reason"; a canceled rule requires at least one.min 1presentOrAbsentPresent and absent students together (absences limited by reasonIds, or any), priced like present.
Cannot be combined with separate present or absent prices.4 fields
amountmin 0amountTypeUnit of amount: fixed per lesson or percent of student charges. Defaults to fixed; tiers carry their own.One of: PERCENT FIXEDtiersStudent-count tiers; without them amount applies.3 fields
studentCountmin 1amountmin 0amountTypeTier unit: fixed amount per lesson or percent of what students were charged. Defaults to a fixed amount.One of: PERCENT FIXEDreasonIdsPresent-or-absent price only: absence reasons counted with present students; empty means any. Ignored for present.min 1canceledPer lesson canceled for a reason listed in one of the rules.1 field
rulesitems min 14 fields
studentCountApplies to lessons with this many students; omitted means any count.min 1amountmin 0amountTypeUnit: fixed amount per lesson or percent of student charges. Defaults to a fixed amount.One of: PERCENT FIXEDreasonIdsMissing reasons (absent) or cancellation reasons (canceled). An absent rule without reasons
means "any other reason"; a canceled rule requires at least one.min 1typeOfLessonIdsmin 1 · items min 1subjectIdsmin 1 · items min 1durationOfLessonmin 1increasePerStudent—increaseProportionDuration—dateStart—dateEnd—notelength max 1500Response · 200
application/json
statusCodeexample 200message—data15 fields
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—dateStartformat YYYY-MM-DDTHH:mm:ssdateEndformat YYYY-MM-DDTHH:mm:ssnote—isArchival—updatedAtformat YYYY-MM-DDTHH:mm:sscreatedAtformat 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"
}
}