Students
Students and customers · 9 операцій
/api/studentGETCount students by status, manager or teacher/api/student/breakdownGETStudents most likely to leave/api/student/churn-riskGETGet student card/api/student/{id}GETList groups of a student/api/student/{id}/groupsGETList leads of a student/api/student/{id}/leadsGETGet student churn risk/api/student/{id}/churn-riskPOSTCreate student/api/studentPATCHUpdate student/api/student/{id}List students
/api/studentList students with filters: search, teacher, manager, status, balance range, debtors (isDebtor=true), lessons left (lessonsLeftTo, hasOneLessonLeft, hasNoLessonsLeft), enrolled range (enrolledStart/End: new students), subscription ending in a period (subscriptionEndStart/End: active subscriptions by end date), upcoming lessons in subjects (subjectIds), no lessons in a period (noLessonsStart/End), hasNoCustomer, hasDiscount, archived. Paginated with page/pageSize (max 250); "total" is the full count. Returns only students the current user may see.
list_students
Параметри запиту · 56
pageмін. 1 · за замовчуванням 1pageSize1–250 · за замовчуванням 20sortByОдне з: status name teacher manager emails phones messengers linkssortOrderОдне з: ASC DESCstatusOfStudentId—statusOfStudentIdsAny of these statuses; broadcast audiences pick several.groupIdsActive membership in any of these groups.customerId—Показати ще 48
studentIds—search—firstName—lastName—middleName—isChild—genderОдне з: MALE FEMALEteacherId—teacherIds—managerId—managerIds—reasonForRefusalId—reasonForRefusalIds—teachingProgramIds—classOfStudentIds—subscriptionIds—balanceFrom—balanceTo—lessonsLeftFrom—lessonsLeftTo—note—typesOfMessengerChannels where the student has a connected chat; several are OR-ed.Одне з: TELEGRAM_BOT INSTAGRAM FACEBOOK IMESSAGEhasGroup—hasNoGroup—hasNoLessons—isDebtor—hasNoLessonsLeft—hasOneLessonLeft—hasFreeLessons—hasFreeTrialLessons—hasNoSubscription—hasExpiredSubscription—isDuplicate—isBirthdayToday—isArchivalза замовчуванням falseisEnrolledза замовчуванням trueenrolledStartEnrolled (became a paying student) from, a school-local calendar day: "new students this month".enrolledEndEnrolled until, inclusive: the end of that school-local day.createdStartCard created from, a school-local calendar day.createdEndCard created until, inclusive: the end of that school-local day.subscriptionEndStartAn active subscription ends from this school-local day: "subscriptions ending this month".subscriptionEndEndAn active subscription ends until this school-local day, inclusive.subjectIdsStudents with upcoming scheduled lessons in these subjects.hasNoCustomerNo paying customer (parent) linked.hasDiscountHas a discount in effect today.noLessonsStartNo lessons, except cancelled ones, from this school-local day; pair with noLessonsEnd.noLessonsEndNo lessons until this school-local day, inclusive.cf—Відповідь · 200
application/json
statusCodeприклад 200message—data4 поля
total—totalPages—currentPage—students23 поля
studentId—status3 поля
statusOfStudentId—nameOfStatus—isArchival—teachers—manager4 поля
id—firstName—lastName—isArchival—chats4 поля
chatParticipantId—chatId—createdAtформат YYYY-MM-DDTHH:mm:sschatAlways present at runtime; optional because card selects are built dynamically
and TS cannot prove the nested object exists.5 полів
chatId—contactName—avatar—lastMessageAtформат YYYY-MM-DDTHH:mm:ssmessenger4 поля
messengerId—nameOfMessenger—typeOfMessengerОдне з: TELEGRAM_BOT INSTAGRAM FACEBOOK IMESSAGEcapabilitiesWhat the channel supports; null when its adapter is not registered, so the chat is read-only.firstName—lastName—middleName—contacts3 поля
type—value—label—dateOfBirthформат YYYY-MM-DDTHH:mm:sstimeZoneStudent's own IANA time zone; null means the school time zone.isChild—genderОдне з: MALE FEMALEnote—archivalNote—avatarUrl—isArchival—updatedAtформат YYYY-MM-DDTHH:mm:sscreatedAtформат YYYY-MM-DDTHH:mm:sssubscriptions5 полів
balance—studentSubscriptionId—typeOfBillОдне з: BASE SEPARATE BURNED CASHBACKsubscription1 поле
nameOfSubscription—effectivePricePerLessonLesson price after the student's discounts; null for non-per-lesson subscriptions.currentMonthLessons3 поля
planned—conducted—cancelled—nextMonthLessons3 поля
planned—conducted—cancelled—customFieldsCustom field values for the columns selected in the table preset.довільні ключіcurl "https://your-school.rist.pro/api/student" \
-H "Authorization: Bearer $RIST_API_KEY"const response = await fetch("https://your-school.rist.pro/api/student", {
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/student",
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,
"totalPages": 0,
"currentPage": 0,
"students": [
{
"studentId": 1,
"status": {
"statusOfStudentId": 1,
"nameOfStatus": "string",
"isArchival": false
},
"teachers": [
{}
],
"manager": {
"id": 1,
"firstName": "string",
"lastName": "string",
"isArchival": false
},
"chats": [
{
"chatParticipantId": 1,
"chatId": 1,
"createdAt": "2026-11-09T14:30:00",
"chat": {
"chatId": 1,
"contactName": "string",
"avatar": "string",
"lastMessageAt": "2026-11-09T14:30:00",
"messenger": {
"messengerId": 1,
"nameOfMessenger": "string",
"typeOfMessenger": "TELEGRAM_BOT",
"capabilities": {}
}
}
}
],
"firstName": "string",
"lastName": "string",
"middleName": "string",
"contacts": [
{
"type": "string",
"value": "string",
"label": "string"
}
],
"dateOfBirth": "2026-11-09T14:30:00",
"timeZone": "string",
"isChild": false,
"gender": "MALE",
"note": "string",
"archivalNote": "string",
"avatarUrl": "string",
"isArchival": false,
"updatedAt": "2026-11-09T14:30:00",
"createdAt": "2026-11-09T14:30:00",
"subscriptions": [
{
"balance": 0,
"studentSubscriptionId": 1,
"typeOfBill": "BASE",
"subscription": {
"nameOfSubscription": "string"
},
"effectivePricePerLesson": 0
}
],
"currentMonthLessons": {
"planned": 0,
"conducted": 0,
"cancelled": 0
},
"nextMonthLessons": {
"planned": 0,
"conducted": 0,
"cancelled": 0
},
"customFields": {}
}
]
}
}Count students by status, manager or teacher
/api/student/breakdownHow many students match the GET /api/student filters, per status, manager, class or teacher (groupBy); e.g. subscriptionEndStart/End counts students whose subscription ends in a period. For students per subject use GET /api/lesson/breakdown with countBy=students.
count_students
Параметри запиту · 53
cf—statusOfStudentId—statusOfStudentIdsAny of these statuses; broadcast audiences pick several.groupIdsActive membership in any of these groups.customerId—studentIds—search—firstName—Показати ще 45
lastName—middleName—isChild—genderОдне з: MALE FEMALEteacherId—teacherIds—managerId—managerIds—reasonForRefusalId—reasonForRefusalIds—teachingProgramIds—classOfStudentIds—subscriptionIds—balanceFrom—balanceTo—lessonsLeftFrom—lessonsLeftTo—note—typesOfMessengerChannels where the student has a connected chat; several are OR-ed.Одне з: TELEGRAM_BOT INSTAGRAM FACEBOOK IMESSAGEhasGroup—hasNoGroup—hasNoLessons—isDebtor—hasNoLessonsLeft—hasOneLessonLeft—hasFreeLessons—hasFreeTrialLessons—hasNoSubscription—hasExpiredSubscription—isDuplicate—isBirthdayToday—isArchivalза замовчуванням falseisEnrolledза замовчуванням trueenrolledStartEnrolled (became a paying student) from, a school-local calendar day: "new students this month".enrolledEndEnrolled until, inclusive: the end of that school-local day.createdStartCard created from, a school-local calendar day.createdEndCard created until, inclusive: the end of that school-local day.subscriptionEndStartAn active subscription ends from this school-local day: "subscriptions ending this month".subscriptionEndEndAn active subscription ends until this school-local day, inclusive.subjectIdsStudents with upcoming scheduled lessons in these subjects.hasNoCustomerNo paying customer (parent) linked.hasDiscountHas a discount in effect today.noLessonsStartNo lessons, except cancelled ones, from this school-local day; pair with noLessonsEnd.noLessonsEndNo lessons until this school-local day, inclusive.groupByWhat to count students by; with teacher a student with two teachers counts in both rows.Одне з: status manager classOfStudent teacherВідповідь · 200
application/json
statusCodeприклад 200message—data3 поля
omittedRowsRows left out by the limittotalRecords matching the filters; a record counted in several rows (a student with two teachers) counts here once.rows3 поля
idId of the grouped value (teacher id, stage id, weekday 1-7) or its code (lesson status); null means "no value".name—count—curl "https://your-school.rist.pro/api/student/breakdown" \
-H "Authorization: Bearer $RIST_API_KEY"const response = await fetch("https://your-school.rist.pro/api/student/breakdown", {
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/student/breakdown",
headers={"Authorization": f"Bearer {os.environ['RIST_API_KEY']}"},
)
response.raise_for_status()
data = response.json()["data"]{
"statusCode": 200,
"message": "Operation completed successfully",
"data": {
"omittedRows": 0,
"total": 0,
"rows": [
{
"id": 1,
"name": "string",
"count": 0
}
]
}
}Students most likely to leave
/api/student/churn-riskActive students ranked by churn risk score (0-100, higher is riskier) with its factors: attendance, fewer lessons than before, lessons left, subscription ending, days since the last lesson, no regular schedule, late payment. limit and minScore narrow the list.
list_students_by_churn_risk
Параметри запиту · 2
limitHow many students to return, riskiest first.1–100 · за замовчуванням 20minScoreLowest risk score to include, 0-100.0–100 · за замовчуванням 0Відповідь · 200
application/json
curl "https://your-school.rist.pro/api/student/churn-risk?limit=20&minScore=0" \
-H "Authorization: Bearer $RIST_API_KEY"const response = await fetch("https://your-school.rist.pro/api/student/churn-risk?limit=20&minScore=0", {
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/student/churn-risk",
headers={"Authorization": f"Bearer {os.environ['RIST_API_KEY']}"},
params={
"limit": 20,
"minScore": 0
},
)
response.raise_for_status()
data = response.json()["data"]{
"statusCode": 200,
"message": "Operation completed successfully",
"data": [
{}
]
}Get student card
/api/student/{id}Full student card: contacts, teachers, manager, custom fields. Balances are in GET /api/student/subscription.
get_student
Параметри шляху · 1
id—Відповідь · 200
application/json
statusCodeприклад 200message—data19 полів
studentId—firstName—lastName—middleName—contacts3 поля
type—value—label—dateOfBirthформат YYYY-MM-DDTHH:mm:sstimeZoneStudent's own IANA time zone; null means the school time zone.isChild—genderОдне з: MALE FEMALEpayerОдне з: CUSTOMER STUDENTnote—archivalNote—customFieldsдовільні ключіavatarUrl—isArchival—updatedAtформат YYYY-MM-DDTHH:mm:sscreatedAtформат YYYY-MM-DDTHH:mm:ssteachers—chatsConnected chats, used for channel icons.4 поля
chatParticipantId—chatId—createdAtформат YYYY-MM-DDTHH:mm:sschatAlways present at runtime; optional because card selects are built dynamically
and TS cannot prove the nested object exists.5 полів
chatId—contactName—avatar—lastMessageAtформат YYYY-MM-DDTHH:mm:ssmessenger4 поля
messengerId—nameOfMessenger—typeOfMessengerОдне з: TELEGRAM_BOT INSTAGRAM FACEBOOK IMESSAGEcapabilitiesWhat the channel supports; null when its adapter is not registered, so the chat is read-only.curl "https://your-school.rist.pro/api/student/1" \
-H "Authorization: Bearer $RIST_API_KEY"const response = await fetch("https://your-school.rist.pro/api/student/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/student/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": {
"studentId": 1,
"firstName": "string",
"lastName": "string",
"middleName": "string",
"contacts": [
{
"type": "string",
"value": "string",
"label": "string"
}
],
"dateOfBirth": "2026-11-09T14:30:00",
"timeZone": "string",
"isChild": false,
"gender": "MALE",
"payer": "CUSTOMER",
"note": "string",
"archivalNote": "string",
"customFields": {},
"avatarUrl": "string",
"isArchival": false,
"updatedAt": "2026-11-09T14:30:00",
"createdAt": "2026-11-09T14:30:00",
"teachers": [
{}
],
"chats": [
{
"chatParticipantId": 1,
"chatId": 1,
"createdAt": "2026-11-09T14:30:00",
"chat": {
"chatId": 1,
"contactName": "string",
"avatar": "string",
"lastMessageAt": "2026-11-09T14:30:00",
"messenger": {
"messengerId": 1,
"nameOfMessenger": "string",
"typeOfMessenger": "TELEGRAM_BOT",
"capabilities": {}
}
}
}
]
}
}List groups of a student
/api/student/{id}/groupsStudy groups the student belongs to.
list_student_groups
Параметри шляху · 1
id—Відповідь · 200
application/json
curl "https://your-school.rist.pro/api/student/1/groups" \
-H "Authorization: Bearer $RIST_API_KEY"const response = await fetch("https://your-school.rist.pro/api/student/1/groups", {
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/student/1/groups",
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 leads of a student
/api/student/{id}/leadsSales leads linked to the student, with their pipeline stage.
list_student_leads
Параметри шляху · 1
id—Відповідь · 200
application/json
curl "https://your-school.rist.pro/api/student/1/leads" \
-H "Authorization: Bearer $RIST_API_KEY"const response = await fetch("https://your-school.rist.pro/api/student/1/leads", {
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/student/1/leads",
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 student churn risk
/api/student/{id}/churn-riskChurn risk score of a student with its factors (attendance, days since last lesson, lessons left). Returns null when the role has no access to churn risk or the student is not visible.
get_student_churn_risk
Параметри шляху · 1
id—Відповідь · 200
application/json
curl "https://your-school.rist.pro/api/student/1/churn-risk" \
-H "Authorization: Bearer $RIST_API_KEY"const response = await fetch("https://your-school.rist.pro/api/student/1/churn-risk", {
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/student/1/churn-risk",
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 student
/api/studentCreate a new student card. Look the student up with GET /api/student first to avoid duplicates.
create_student
Тіло запиту
application/json · object
statusOfStudentIdмін. 1classOfStudentIdмін. 1teacherIdsмін. 1managerIdмін. 1customerIdмін. 1firstNameдовжина 1–30lastNameдовжина макс. 30middleNameдовжина макс. 30contacts3 поля
typeОдне з: PHONE EMAIL MESSENGER URLvalueдовжина 1–255labelдовжина макс. 50dateOfBirthформат YYYY-MM-DDTHH:mm:sstimeZone—isChild—genderОдне з: MALE FEMALEpayerОдне з: STUDENT CUSTOMERnoteдовжина макс. 1500customFieldsдовільні ключіВідповідь · 201
application/json
statusCodeприклад 201message—data23 поля
studentId—status3 поля
statusOfStudentId—nameOfStatus—isArchival—teachers—manager4 поля
id—firstName—lastName—isArchival—chats4 поля
chatParticipantId—chatId—createdAtформат YYYY-MM-DDTHH:mm:sschatAlways present at runtime; optional because card selects are built dynamically
and TS cannot prove the nested object exists.5 полів
chatId—contactName—avatar—lastMessageAtформат YYYY-MM-DDTHH:mm:ssmessenger4 поля
messengerId—nameOfMessenger—typeOfMessengerОдне з: TELEGRAM_BOT INSTAGRAM FACEBOOK IMESSAGEcapabilitiesWhat the channel supports; null when its adapter is not registered, so the chat is read-only.firstName—lastName—middleName—contacts3 поля
type—value—label—dateOfBirthформат YYYY-MM-DDTHH:mm:sstimeZoneStudent's own IANA time zone; null means the school time zone.isChild—genderОдне з: MALE FEMALEnote—archivalNote—avatarUrl—isArchival—updatedAtформат YYYY-MM-DDTHH:mm:sscreatedAtформат YYYY-MM-DDTHH:mm:sssubscriptions5 полів
balance—studentSubscriptionId—typeOfBillОдне з: BASE SEPARATE BURNED CASHBACKsubscription1 поле
nameOfSubscription—effectivePricePerLessonLesson price after the student's discounts; null for non-per-lesson subscriptions.currentMonthLessons3 поля
planned—conducted—cancelled—nextMonthLessons3 поля
planned—conducted—cancelled—customFieldsCustom field values for the columns selected in the table preset.довільні ключіcurl -X POST "https://your-school.rist.pro/api/student" \
-H "Authorization: Bearer $RIST_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"statusOfStudentId": 1,
"classOfStudentId": 1,
"teacherIds": [
1
],
"managerId": 1,
"customerId": 1,
"firstName": "string",
"lastName": "string",
"middleName": "string",
"contacts": [
{
"type": "PHONE",
"value": "string",
"label": "string"
}
],
"dateOfBirth": "2026-11-09T14:30:00",
"timeZone": "string",
"isChild": false,
"gender": "MALE",
"payer": "STUDENT",
"note": "string",
"customFields": {}
}'const response = await fetch("https://your-school.rist.pro/api/student", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.RIST_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"statusOfStudentId": 1,
"classOfStudentId": 1,
"teacherIds": [
1
],
"managerId": 1,
"customerId": 1,
"firstName": "string",
"lastName": "string",
"middleName": "string",
"contacts": [
{
"type": "PHONE",
"value": "string",
"label": "string"
}
],
"dateOfBirth": "2026-11-09T14:30:00",
"timeZone": "string",
"isChild": false,
"gender": "MALE",
"payer": "STUDENT",
"note": "string",
"customFields": {}
}),
});
const { data } = await response.json();import os
import requests
response = requests.post(
"https://your-school.rist.pro/api/student",
headers={"Authorization": f"Bearer {os.environ['RIST_API_KEY']}"},
json={
"statusOfStudentId": 1,
"classOfStudentId": 1,
"teacherIds": [
1
],
"managerId": 1,
"customerId": 1,
"firstName": "string",
"lastName": "string",
"middleName": "string",
"contacts": [
{
"type": "PHONE",
"value": "string",
"label": "string"
}
],
"dateOfBirth": "2026-11-09T14:30:00",
"timeZone": "string",
"isChild": False,
"gender": "MALE",
"payer": "STUDENT",
"note": "string",
"customFields": {}
},
)
response.raise_for_status()
data = response.json()["data"]{
"statusCode": 201,
"message": "Operation completed successfully",
"data": {
"studentId": 1,
"status": {
"statusOfStudentId": 1,
"nameOfStatus": "string",
"isArchival": false
},
"teachers": [
{}
],
"manager": {
"id": 1,
"firstName": "string",
"lastName": "string",
"isArchival": false
},
"chats": [
{
"chatParticipantId": 1,
"chatId": 1,
"createdAt": "2026-11-09T14:30:00",
"chat": {
"chatId": 1,
"contactName": "string",
"avatar": "string",
"lastMessageAt": "2026-11-09T14:30:00",
"messenger": {
"messengerId": 1,
"nameOfMessenger": "string",
"typeOfMessenger": "TELEGRAM_BOT",
"capabilities": {}
}
}
}
],
"firstName": "string",
"lastName": "string",
"middleName": "string",
"contacts": [
{
"type": "string",
"value": "string",
"label": "string"
}
],
"dateOfBirth": "2026-11-09T14:30:00",
"timeZone": "string",
"isChild": false,
"gender": "MALE",
"note": "string",
"archivalNote": "string",
"avatarUrl": "string",
"isArchival": false,
"updatedAt": "2026-11-09T14:30:00",
"createdAt": "2026-11-09T14:30:00",
"subscriptions": [
{
"balance": 0,
"studentSubscriptionId": 1,
"typeOfBill": "BASE",
"subscription": {
"nameOfSubscription": "string"
},
"effectivePricePerLesson": 0
}
],
"currentMonthLessons": {
"planned": 0,
"conducted": 0,
"cancelled": 0
},
"nextMonthLessons": {
"planned": 0,
"conducted": 0,
"cancelled": 0
},
"customFields": {}
}
}Update student
/api/student/{id}Change fields of a student card. Send only the fields to change.
update_student
Параметри шляху · 1
id—Тіло запиту
application/json · object
statusOfStudentIdмін. 1classOfStudentIdмін. 1teacherIdsмін. 1managerIdмін. 1firstNameдовжина 1–30lastNameдовжина макс. 30middleNameдовжина макс. 30contacts3 поля
typeОдне з: PHONE EMAIL MESSENGER URLvalueдовжина 1–255labelдовжина макс. 50dateOfBirthформат YYYY-MM-DDTHH:mm:sstimeZone—isChild—genderОдне з: MALE FEMALEpayerОдне з: STUDENT CUSTOMERnoteдовжина макс. 1500archivedAtформат YYYY-MM-DDTHH:mm:ssisEnrolled—customFieldsдовільні ключіВідповідь · 200
application/json
statusCodeприклад 200message—data23 поля
studentId—status3 поля
statusOfStudentId—nameOfStatus—isArchival—teachers—manager4 поля
id—firstName—lastName—isArchival—chats4 поля
chatParticipantId—chatId—createdAtформат YYYY-MM-DDTHH:mm:sschatAlways present at runtime; optional because card selects are built dynamically
and TS cannot prove the nested object exists.5 полів
chatId—contactName—avatar—lastMessageAtформат YYYY-MM-DDTHH:mm:ssmessenger4 поля
messengerId—nameOfMessenger—typeOfMessengerОдне з: TELEGRAM_BOT INSTAGRAM FACEBOOK IMESSAGEcapabilitiesWhat the channel supports; null when its adapter is not registered, so the chat is read-only.firstName—lastName—middleName—contacts3 поля
type—value—label—dateOfBirthформат YYYY-MM-DDTHH:mm:sstimeZoneStudent's own IANA time zone; null means the school time zone.isChild—genderОдне з: MALE FEMALEnote—archivalNote—avatarUrl—isArchival—updatedAtформат YYYY-MM-DDTHH:mm:sscreatedAtформат YYYY-MM-DDTHH:mm:sssubscriptions5 полів
balance—studentSubscriptionId—typeOfBillОдне з: BASE SEPARATE BURNED CASHBACKsubscription1 поле
nameOfSubscription—effectivePricePerLessonLesson price after the student's discounts; null for non-per-lesson subscriptions.currentMonthLessons3 поля
planned—conducted—cancelled—nextMonthLessons3 поля
planned—conducted—cancelled—customFieldsCustom field values for the columns selected in the table preset.довільні ключіcurl -X PATCH "https://your-school.rist.pro/api/student/1" \
-H "Authorization: Bearer $RIST_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"statusOfStudentId": 1,
"classOfStudentId": 1,
"teacherIds": [
1
],
"managerId": 1,
"firstName": "string",
"lastName": "string",
"middleName": "string",
"contacts": [
{
"type": "PHONE",
"value": "string",
"label": "string"
}
],
"dateOfBirth": "2026-11-09T14:30:00",
"timeZone": "string",
"isChild": false,
"gender": "MALE",
"payer": "STUDENT",
"note": "string",
"archivedAt": "2026-11-09T14:30:00",
"isEnrolled": false,
"customFields": {}
}'const response = await fetch("https://your-school.rist.pro/api/student/1", {
method: "PATCH",
headers: {
Authorization: `Bearer ${process.env.RIST_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"statusOfStudentId": 1,
"classOfStudentId": 1,
"teacherIds": [
1
],
"managerId": 1,
"firstName": "string",
"lastName": "string",
"middleName": "string",
"contacts": [
{
"type": "PHONE",
"value": "string",
"label": "string"
}
],
"dateOfBirth": "2026-11-09T14:30:00",
"timeZone": "string",
"isChild": false,
"gender": "MALE",
"payer": "STUDENT",
"note": "string",
"archivedAt": "2026-11-09T14:30:00",
"isEnrolled": false,
"customFields": {}
}),
});
const { data } = await response.json();import os
import requests
response = requests.patch(
"https://your-school.rist.pro/api/student/1",
headers={"Authorization": f"Bearer {os.environ['RIST_API_KEY']}"},
json={
"statusOfStudentId": 1,
"classOfStudentId": 1,
"teacherIds": [
1
],
"managerId": 1,
"firstName": "string",
"lastName": "string",
"middleName": "string",
"contacts": [
{
"type": "PHONE",
"value": "string",
"label": "string"
}
],
"dateOfBirth": "2026-11-09T14:30:00",
"timeZone": "string",
"isChild": False,
"gender": "MALE",
"payer": "STUDENT",
"note": "string",
"archivedAt": "2026-11-09T14:30:00",
"isEnrolled": False,
"customFields": {}
},
)
response.raise_for_status()
data = response.json()["data"]{
"statusCode": 200,
"message": "Operation completed successfully",
"data": {
"studentId": 1,
"status": {
"statusOfStudentId": 1,
"nameOfStatus": "string",
"isArchival": false
},
"teachers": [
{}
],
"manager": {
"id": 1,
"firstName": "string",
"lastName": "string",
"isArchival": false
},
"chats": [
{
"chatParticipantId": 1,
"chatId": 1,
"createdAt": "2026-11-09T14:30:00",
"chat": {
"chatId": 1,
"contactName": "string",
"avatar": "string",
"lastMessageAt": "2026-11-09T14:30:00",
"messenger": {
"messengerId": 1,
"nameOfMessenger": "string",
"typeOfMessenger": "TELEGRAM_BOT",
"capabilities": {}
}
}
}
],
"firstName": "string",
"lastName": "string",
"middleName": "string",
"contacts": [
{
"type": "string",
"value": "string",
"label": "string"
}
],
"dateOfBirth": "2026-11-09T14:30:00",
"timeZone": "string",
"isChild": false,
"gender": "MALE",
"note": "string",
"archivalNote": "string",
"avatarUrl": "string",
"isArchival": false,
"updatedAt": "2026-11-09T14:30:00",
"createdAt": "2026-11-09T14:30:00",
"subscriptions": [
{
"balance": 0,
"studentSubscriptionId": 1,
"typeOfBill": "BASE",
"subscription": {
"nameOfSubscription": "string"
},
"effectivePricePerLesson": 0
}
],
"currentMonthLessons": {
"planned": 0,
"conducted": 0,
"cancelled": 0
},
"nextMonthLessons": {
"planned": 0,
"conducted": 0,
"cancelled": 0
},
"customFields": {}
}
}