Finance operations
Finance · 4 операції
List finance operations
/api/finance-operationIncome and expense operations with filters: date range, type, account, article, payment type, amount range, students, manager. Paginated.
list_finance_operations
Параметри запиту · 27
pageмін. 1 · за замовчуванням 1pageSize1–250 · за замовчуванням 20sortByОдне з: financeOperationId typeOfOperation typeOfCategory account amount customer dateOfOperation createdAtsortOrderОдне з: ASC DESCtypeOfOperationОдне з: INCOME TRANSFER ADJUSTMENT EXPENSES REFUND ACCOUNT_TRANSFERtypesOfOperationОдне з: INCOME TRANSFER ADJUSTMENT EXPENSES REFUND ACCOUNT_TRANSFERtypeOfCategoryОдне з: SUBSCRIPTION WAGE OTHERtypesOfCategoryОдне з: SUBSCRIPTION WAGE OTHERПоказати ще 19
accountId—accountIds—articleId—articleIds—typeOfPaymentId—typeOfPaymentIds—amount—amountFrom—amountTo—note—managerId—managerIds—studentIds—subscriptionIds—wageIds—leadId—dateStart—dateEnd—cf—Відповідь · 200
application/json
statusCodeприклад 200message—data4 поля
total—totalPages—currentPage—financeOperations27 полів
financeOperationId—typeOfOperationОдне з: INCOME TRANSFER ADJUSTMENT EXPENSES REFUND ACCOUNT_TRANSFERtypeOfCategoryОдне з: SUBSCRIPTION WAGE OTHERaccountId—accountToId—articleId—dateOfOperationформат YYYY-MM-DDTHH:mm:ssaccrualPeriodFromформат YYYY-MM-DDTHH:mm:ssaccrualPeriodToформат YYYY-MM-DDTHH:mm:sssubscriptionAllocations5 полів
amount—allocationId—studentSubscriptionId—typeOfPaymentId—leadId—wageAllocations4 поля
amount—allocationId—wageId—typeOfPaymentId—bonusAllocations4 поля
amount—allocationId—bonusId—typeOfPaymentId—otherAllocations2 поля
amount—allocationId—customerId—studentId—categoryId—counterpartyId—projectId—managerId—createdByUserId—isVerified—verifiedByUserId—file4 поля
storageFileId—key—name—mimeType—note—updatedAtформат YYYY-MM-DDTHH:mm:sscreatedAtформат YYYY-MM-DDTHH:mm:sscustomFieldsдовільні ключіcurl "https://your-school.rist.pro/api/finance-operation" \
-H "Authorization: Bearer $RIST_API_KEY"const response = await fetch("https://your-school.rist.pro/api/finance-operation", {
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/finance-operation",
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,
"financeOperations": [
{
"financeOperationId": 1,
"typeOfOperation": "INCOME",
"typeOfCategory": "SUBSCRIPTION",
"accountId": 1,
"accountToId": 1,
"articleId": 1,
"dateOfOperation": "2026-11-09T14:30:00",
"accrualPeriodFrom": "2026-11-09T14:30:00",
"accrualPeriodTo": "2026-11-09T14:30:00",
"subscriptionAllocations": [
{
"amount": 0,
"allocationId": 1,
"studentSubscriptionId": 1,
"typeOfPaymentId": 1,
"leadId": 1
}
],
"wageAllocations": [
{
"amount": 0,
"allocationId": 1,
"wageId": 1,
"typeOfPaymentId": 1
}
],
"bonusAllocations": [
{
"amount": 0,
"allocationId": 1,
"bonusId": 1,
"typeOfPaymentId": 1
}
],
"otherAllocations": [
{
"amount": 0,
"allocationId": 1
}
],
"customerId": 1,
"studentId": 1,
"categoryId": 1,
"counterpartyId": 1,
"projectId": 1,
"managerId": 1,
"createdByUserId": 1,
"isVerified": false,
"verifiedByUserId": 1,
"file": {
"storageFileId": 1,
"key": "string",
"name": "string",
"mimeType": "string"
},
"note": "string",
"updatedAt": "2026-11-09T14:30:00",
"createdAt": "2026-11-09T14:30:00",
"customFields": {}
}
]
}
}Get finance operation
/api/finance-operation/{id}One finance operation with its account, article, payer and allocations.
get_finance_operation
Параметри шляху · 1
id—Відповідь · 200
application/json
statusCodeприклад 200message—data27 полів
financeOperationId—typeOfOperationОдне з: INCOME TRANSFER ADJUSTMENT EXPENSES REFUND ACCOUNT_TRANSFERtypeOfCategoryОдне з: SUBSCRIPTION WAGE OTHERaccountId—accountToId—articleId—dateOfOperationформат YYYY-MM-DDTHH:mm:ssaccrualPeriodFromформат YYYY-MM-DDTHH:mm:ssaccrualPeriodToформат YYYY-MM-DDTHH:mm:sssubscriptionAllocations5 полів
amount—allocationId—studentSubscriptionId—typeOfPaymentId—leadId—wageAllocations4 поля
amount—allocationId—wageId—typeOfPaymentId—bonusAllocations4 поля
amount—allocationId—bonusId—typeOfPaymentId—otherAllocations2 поля
amount—allocationId—customerId—studentId—categoryId—counterpartyId—projectId—managerId—createdByUserId—isVerified—verifiedByUserId—file4 поля
storageFileId—key—name—mimeType—note—updatedAtформат YYYY-MM-DDTHH:mm:sscreatedAtформат YYYY-MM-DDTHH:mm:sscustomFieldsдовільні ключіcurl "https://your-school.rist.pro/api/finance-operation/1" \
-H "Authorization: Bearer $RIST_API_KEY"const response = await fetch("https://your-school.rist.pro/api/finance-operation/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/finance-operation/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": {
"financeOperationId": 1,
"typeOfOperation": "INCOME",
"typeOfCategory": "SUBSCRIPTION",
"accountId": 1,
"accountToId": 1,
"articleId": 1,
"dateOfOperation": "2026-11-09T14:30:00",
"accrualPeriodFrom": "2026-11-09T14:30:00",
"accrualPeriodTo": "2026-11-09T14:30:00",
"subscriptionAllocations": [
{
"amount": 0,
"allocationId": 1,
"studentSubscriptionId": 1,
"typeOfPaymentId": 1,
"leadId": 1
}
],
"wageAllocations": [
{
"amount": 0,
"allocationId": 1,
"wageId": 1,
"typeOfPaymentId": 1
}
],
"bonusAllocations": [
{
"amount": 0,
"allocationId": 1,
"bonusId": 1,
"typeOfPaymentId": 1
}
],
"otherAllocations": [
{
"amount": 0,
"allocationId": 1
}
],
"customerId": 1,
"studentId": 1,
"categoryId": 1,
"counterpartyId": 1,
"projectId": 1,
"managerId": 1,
"createdByUserId": 1,
"isVerified": false,
"verifiedByUserId": 1,
"file": {
"storageFileId": 1,
"key": "string",
"name": "string",
"mimeType": "string"
},
"note": "string",
"updatedAt": "2026-11-09T14:30:00",
"createdAt": "2026-11-09T14:30:00",
"customFields": {}
}
}Record payment or expense
/api/finance-operationRecord an income (e.g. a student payment that tops up a subscription) or an expense. Moves real money balances; confirm amount, payer and account with the user first.
create_finance_operation
Тіло запиту
application/json · object
typeOfOperationОдне з: INCOME TRANSFER ADJUSTMENT EXPENSES REFUND ACCOUNT_TRANSFERtypeOfCategoryОдне з: SUBSCRIPTION WAGE OTHERaccountIdмін. 1accountToIdмін. 1articleIdмін. 1dateOfOperation—accrualPeriodFrom—accrualPeriodTo—subscriptionAllocationsелементів мін. 14 поля
studentSubscriptionIdмін. 1amount—typeOfPaymentIdмін. 1leadIdмін. 1wageAllocationsелементів мін. 13 поля
wageIdмін. 1amount—typeOfPaymentIdмін. 1bonusAllocationsелементів мін. 13 поля
bonusIdмін. 1amount—typeOfPaymentIdмін. 1otherAllocationsелементів мін. 11 поле
amount—customerIdмін. 1studentIdмін. 1categoryIdмін. 1counterpartyIdмін. 1projectIdмін. 1createdByUserIdмін. 1managerIdмін. 1noteдовжина макс. 1500isVerified—verifiedByUserIdмін. 1customFieldsдовільні ключіВідповідь · 201
application/json
statusCodeприклад 201message—data27 полів
financeOperationId—typeOfOperationОдне з: INCOME TRANSFER ADJUSTMENT EXPENSES REFUND ACCOUNT_TRANSFERtypeOfCategoryОдне з: SUBSCRIPTION WAGE OTHERaccountId—accountToId—articleId—dateOfOperationформат YYYY-MM-DDTHH:mm:ssaccrualPeriodFromформат YYYY-MM-DDTHH:mm:ssaccrualPeriodToформат YYYY-MM-DDTHH:mm:sssubscriptionAllocations5 полів
amount—allocationId—studentSubscriptionId—typeOfPaymentId—leadId—wageAllocations4 поля
amount—allocationId—wageId—typeOfPaymentId—bonusAllocations4 поля
amount—allocationId—bonusId—typeOfPaymentId—otherAllocations2 поля
amount—allocationId—customerId—studentId—categoryId—counterpartyId—projectId—managerId—createdByUserId—isVerified—verifiedByUserId—file4 поля
storageFileId—key—name—mimeType—note—updatedAtформат YYYY-MM-DDTHH:mm:sscreatedAtформат YYYY-MM-DDTHH:mm:sscustomFieldsдовільні ключіcurl -X POST "https://your-school.rist.pro/api/finance-operation" \
-H "Authorization: Bearer $RIST_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"typeOfOperation": "INCOME",
"typeOfCategory": "SUBSCRIPTION",
"accountId": 1,
"accountToId": 1,
"articleId": 1,
"dateOfOperation": "string",
"accrualPeriodFrom": "string",
"accrualPeriodTo": "string",
"subscriptionAllocations": [
{
"studentSubscriptionId": 1,
"amount": 0,
"typeOfPaymentId": 1,
"leadId": 1
}
],
"wageAllocations": [
{
"wageId": 1,
"amount": 0,
"typeOfPaymentId": 1
}
],
"bonusAllocations": [
{
"bonusId": 1,
"amount": 0,
"typeOfPaymentId": 1
}
],
"otherAllocations": [
{
"amount": 0
}
],
"customerId": 1,
"studentId": 1,
"categoryId": 1,
"counterpartyId": 1,
"projectId": 1,
"createdByUserId": 1,
"managerId": 1,
"note": "string",
"isVerified": false,
"verifiedByUserId": 1,
"customFields": {}
}'const response = await fetch("https://your-school.rist.pro/api/finance-operation", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.RIST_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"typeOfOperation": "INCOME",
"typeOfCategory": "SUBSCRIPTION",
"accountId": 1,
"accountToId": 1,
"articleId": 1,
"dateOfOperation": "string",
"accrualPeriodFrom": "string",
"accrualPeriodTo": "string",
"subscriptionAllocations": [
{
"studentSubscriptionId": 1,
"amount": 0,
"typeOfPaymentId": 1,
"leadId": 1
}
],
"wageAllocations": [
{
"wageId": 1,
"amount": 0,
"typeOfPaymentId": 1
}
],
"bonusAllocations": [
{
"bonusId": 1,
"amount": 0,
"typeOfPaymentId": 1
}
],
"otherAllocations": [
{
"amount": 0
}
],
"customerId": 1,
"studentId": 1,
"categoryId": 1,
"counterpartyId": 1,
"projectId": 1,
"createdByUserId": 1,
"managerId": 1,
"note": "string",
"isVerified": false,
"verifiedByUserId": 1,
"customFields": {}
}),
});
const { data } = await response.json();import os
import requests
response = requests.post(
"https://your-school.rist.pro/api/finance-operation",
headers={"Authorization": f"Bearer {os.environ['RIST_API_KEY']}"},
json={
"typeOfOperation": "INCOME",
"typeOfCategory": "SUBSCRIPTION",
"accountId": 1,
"accountToId": 1,
"articleId": 1,
"dateOfOperation": "string",
"accrualPeriodFrom": "string",
"accrualPeriodTo": "string",
"subscriptionAllocations": [
{
"studentSubscriptionId": 1,
"amount": 0,
"typeOfPaymentId": 1,
"leadId": 1
}
],
"wageAllocations": [
{
"wageId": 1,
"amount": 0,
"typeOfPaymentId": 1
}
],
"bonusAllocations": [
{
"bonusId": 1,
"amount": 0,
"typeOfPaymentId": 1
}
],
"otherAllocations": [
{
"amount": 0
}
],
"customerId": 1,
"studentId": 1,
"categoryId": 1,
"counterpartyId": 1,
"projectId": 1,
"createdByUserId": 1,
"managerId": 1,
"note": "string",
"isVerified": False,
"verifiedByUserId": 1,
"customFields": {}
},
)
response.raise_for_status()
data = response.json()["data"]{
"statusCode": 201,
"message": "Operation completed successfully",
"data": {
"financeOperationId": 1,
"typeOfOperation": "INCOME",
"typeOfCategory": "SUBSCRIPTION",
"accountId": 1,
"accountToId": 1,
"articleId": 1,
"dateOfOperation": "2026-11-09T14:30:00",
"accrualPeriodFrom": "2026-11-09T14:30:00",
"accrualPeriodTo": "2026-11-09T14:30:00",
"subscriptionAllocations": [
{
"amount": 0,
"allocationId": 1,
"studentSubscriptionId": 1,
"typeOfPaymentId": 1,
"leadId": 1
}
],
"wageAllocations": [
{
"amount": 0,
"allocationId": 1,
"wageId": 1,
"typeOfPaymentId": 1
}
],
"bonusAllocations": [
{
"amount": 0,
"allocationId": 1,
"bonusId": 1,
"typeOfPaymentId": 1
}
],
"otherAllocations": [
{
"amount": 0,
"allocationId": 1
}
],
"customerId": 1,
"studentId": 1,
"categoryId": 1,
"counterpartyId": 1,
"projectId": 1,
"managerId": 1,
"createdByUserId": 1,
"isVerified": false,
"verifiedByUserId": 1,
"file": {
"storageFileId": 1,
"key": "string",
"name": "string",
"mimeType": "string"
},
"note": "string",
"updatedAt": "2026-11-09T14:30:00",
"createdAt": "2026-11-09T14:30:00",
"customFields": {}
}
}Edit finance operation
/api/finance-operation/{id}Rewrite a finance operation. Send the full operation as in POST /api/finance-operation, not only changed fields: allocations sent replace the old ones and balances are recalculated. Confirm with the user first.
update_finance_operation
Параметри шляху · 1
id—Тіло запиту
application/json · object
typeOfOperationОдне з: INCOME TRANSFER ADJUSTMENT EXPENSES REFUND ACCOUNT_TRANSFERtypeOfCategoryОдне з: SUBSCRIPTION WAGE OTHERaccountIdмін. 1accountToIdмін. 1articleIdмін. 1dateOfOperation—accrualPeriodFrom—accrualPeriodTo—subscriptionAllocationsелементів мін. 14 поля
studentSubscriptionIdмін. 1amount—typeOfPaymentIdмін. 1leadIdмін. 1wageAllocationsелементів мін. 13 поля
wageIdмін. 1amount—typeOfPaymentIdмін. 1bonusAllocationsелементів мін. 13 поля
bonusIdмін. 1amount—typeOfPaymentIdмін. 1otherAllocationsелементів мін. 11 поле
amount—customerIdмін. 1studentIdмін. 1categoryIdмін. 1counterpartyIdмін. 1projectIdмін. 1createdByUserIdмін. 1managerIdмін. 1noteдовжина макс. 1500isVerified—verifiedByUserIdмін. 1customFieldsдовільні ключіВідповідь · 200
application/json
statusCodeприклад 200message—data27 полів
financeOperationId—typeOfOperationОдне з: INCOME TRANSFER ADJUSTMENT EXPENSES REFUND ACCOUNT_TRANSFERtypeOfCategoryОдне з: SUBSCRIPTION WAGE OTHERaccountId—accountToId—articleId—dateOfOperationформат YYYY-MM-DDTHH:mm:ssaccrualPeriodFromформат YYYY-MM-DDTHH:mm:ssaccrualPeriodToформат YYYY-MM-DDTHH:mm:sssubscriptionAllocations5 полів
amount—allocationId—studentSubscriptionId—typeOfPaymentId—leadId—wageAllocations4 поля
amount—allocationId—wageId—typeOfPaymentId—bonusAllocations4 поля
amount—allocationId—bonusId—typeOfPaymentId—otherAllocations2 поля
amount—allocationId—customerId—studentId—categoryId—counterpartyId—projectId—managerId—createdByUserId—isVerified—verifiedByUserId—file4 поля
storageFileId—key—name—mimeType—note—updatedAtформат YYYY-MM-DDTHH:mm:sscreatedAtформат YYYY-MM-DDTHH:mm:sscustomFieldsдовільні ключіcurl -X PATCH "https://your-school.rist.pro/api/finance-operation/1" \
-H "Authorization: Bearer $RIST_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"typeOfOperation": "INCOME",
"typeOfCategory": "SUBSCRIPTION",
"accountId": 1,
"accountToId": 1,
"articleId": 1,
"dateOfOperation": "string",
"accrualPeriodFrom": "string",
"accrualPeriodTo": "string",
"subscriptionAllocations": [
{
"studentSubscriptionId": 1,
"amount": 0,
"typeOfPaymentId": 1,
"leadId": 1
}
],
"wageAllocations": [
{
"wageId": 1,
"amount": 0,
"typeOfPaymentId": 1
}
],
"bonusAllocations": [
{
"bonusId": 1,
"amount": 0,
"typeOfPaymentId": 1
}
],
"otherAllocations": [
{
"amount": 0
}
],
"customerId": 1,
"studentId": 1,
"categoryId": 1,
"counterpartyId": 1,
"projectId": 1,
"createdByUserId": 1,
"managerId": 1,
"note": "string",
"isVerified": false,
"verifiedByUserId": 1,
"customFields": {}
}'const response = await fetch("https://your-school.rist.pro/api/finance-operation/1", {
method: "PATCH",
headers: {
Authorization: `Bearer ${process.env.RIST_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"typeOfOperation": "INCOME",
"typeOfCategory": "SUBSCRIPTION",
"accountId": 1,
"accountToId": 1,
"articleId": 1,
"dateOfOperation": "string",
"accrualPeriodFrom": "string",
"accrualPeriodTo": "string",
"subscriptionAllocations": [
{
"studentSubscriptionId": 1,
"amount": 0,
"typeOfPaymentId": 1,
"leadId": 1
}
],
"wageAllocations": [
{
"wageId": 1,
"amount": 0,
"typeOfPaymentId": 1
}
],
"bonusAllocations": [
{
"bonusId": 1,
"amount": 0,
"typeOfPaymentId": 1
}
],
"otherAllocations": [
{
"amount": 0
}
],
"customerId": 1,
"studentId": 1,
"categoryId": 1,
"counterpartyId": 1,
"projectId": 1,
"createdByUserId": 1,
"managerId": 1,
"note": "string",
"isVerified": false,
"verifiedByUserId": 1,
"customFields": {}
}),
});
const { data } = await response.json();import os
import requests
response = requests.patch(
"https://your-school.rist.pro/api/finance-operation/1",
headers={"Authorization": f"Bearer {os.environ['RIST_API_KEY']}"},
json={
"typeOfOperation": "INCOME",
"typeOfCategory": "SUBSCRIPTION",
"accountId": 1,
"accountToId": 1,
"articleId": 1,
"dateOfOperation": "string",
"accrualPeriodFrom": "string",
"accrualPeriodTo": "string",
"subscriptionAllocations": [
{
"studentSubscriptionId": 1,
"amount": 0,
"typeOfPaymentId": 1,
"leadId": 1
}
],
"wageAllocations": [
{
"wageId": 1,
"amount": 0,
"typeOfPaymentId": 1
}
],
"bonusAllocations": [
{
"bonusId": 1,
"amount": 0,
"typeOfPaymentId": 1
}
],
"otherAllocations": [
{
"amount": 0
}
],
"customerId": 1,
"studentId": 1,
"categoryId": 1,
"counterpartyId": 1,
"projectId": 1,
"createdByUserId": 1,
"managerId": 1,
"note": "string",
"isVerified": False,
"verifiedByUserId": 1,
"customFields": {}
},
)
response.raise_for_status()
data = response.json()["data"]{
"statusCode": 200,
"message": "Operation completed successfully",
"data": {
"financeOperationId": 1,
"typeOfOperation": "INCOME",
"typeOfCategory": "SUBSCRIPTION",
"accountId": 1,
"accountToId": 1,
"articleId": 1,
"dateOfOperation": "2026-11-09T14:30:00",
"accrualPeriodFrom": "2026-11-09T14:30:00",
"accrualPeriodTo": "2026-11-09T14:30:00",
"subscriptionAllocations": [
{
"amount": 0,
"allocationId": 1,
"studentSubscriptionId": 1,
"typeOfPaymentId": 1,
"leadId": 1
}
],
"wageAllocations": [
{
"amount": 0,
"allocationId": 1,
"wageId": 1,
"typeOfPaymentId": 1
}
],
"bonusAllocations": [
{
"amount": 0,
"allocationId": 1,
"bonusId": 1,
"typeOfPaymentId": 1
}
],
"otherAllocations": [
{
"amount": 0,
"allocationId": 1
}
],
"customerId": 1,
"studentId": 1,
"categoryId": 1,
"counterpartyId": 1,
"projectId": 1,
"managerId": 1,
"createdByUserId": 1,
"isVerified": false,
"verifiedByUserId": 1,
"file": {
"storageFileId": 1,
"key": "string",
"name": "string",
"mimeType": "string"
},
"note": "string",
"updatedAt": "2026-11-09T14:30:00",
"createdAt": "2026-11-09T14:30:00",
"customFields": {}
}
}