Finance operations
Finance · 4 operations
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
Query parameters · 27
pagemin 1 · default 1pageSize1–250 · default 20sortByOne of: financeOperationId typeOfOperation typeOfCategory account amount customer dateOfOperation createdAtsortOrderOne of: ASC DESCtypeOfOperationOne of: INCOME TRANSFER ADJUSTMENT EXPENSES REFUND ACCOUNT_TRANSFERtypesOfOperationOne of: INCOME TRANSFER ADJUSTMENT EXPENSES REFUND ACCOUNT_TRANSFERtypeOfCategoryOne of: SUBSCRIPTION WAGE OTHERtypesOfCategoryOne of: SUBSCRIPTION WAGE OTHERShow 19 more
accountId—accountIds—articleId—articleIds—typeOfPaymentId—typeOfPaymentIds—amount—amountFrom—amountTo—note—managerId—managerIds—studentIds—subscriptionIds—wageIds—leadId—dateStart—dateEnd—cf—Response · 200
application/json
statusCodeexample 200message—data4 fields
total—totalPages—currentPage—financeOperations27 fields
financeOperationId—typeOfOperationOne of: INCOME TRANSFER ADJUSTMENT EXPENSES REFUND ACCOUNT_TRANSFERtypeOfCategoryOne of: SUBSCRIPTION WAGE OTHERaccountId—accountToId—articleId—dateOfOperationformat YYYY-MM-DDTHH:mm:ssaccrualPeriodFromformat YYYY-MM-DDTHH:mm:ssaccrualPeriodToformat YYYY-MM-DDTHH:mm:sssubscriptionAllocations5 fields
amount—allocationId—studentSubscriptionId—typeOfPaymentId—leadId—wageAllocations4 fields
amount—allocationId—wageId—typeOfPaymentId—bonusAllocations4 fields
amount—allocationId—bonusId—typeOfPaymentId—otherAllocations2 fields
amount—allocationId—customerId—studentId—categoryId—counterpartyId—projectId—managerId—createdByUserId—isVerified—verifiedByUserId—file4 fields
storageFileId—key—name—mimeType—note—updatedAtformat YYYY-MM-DDTHH:mm:sscreatedAtformat YYYY-MM-DDTHH:mm:sscustomFieldsany keyscurl "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
Path parameters · 1
id—Response · 200
application/json
statusCodeexample 200message—data27 fields
financeOperationId—typeOfOperationOne of: INCOME TRANSFER ADJUSTMENT EXPENSES REFUND ACCOUNT_TRANSFERtypeOfCategoryOne of: SUBSCRIPTION WAGE OTHERaccountId—accountToId—articleId—dateOfOperationformat YYYY-MM-DDTHH:mm:ssaccrualPeriodFromformat YYYY-MM-DDTHH:mm:ssaccrualPeriodToformat YYYY-MM-DDTHH:mm:sssubscriptionAllocations5 fields
amount—allocationId—studentSubscriptionId—typeOfPaymentId—leadId—wageAllocations4 fields
amount—allocationId—wageId—typeOfPaymentId—bonusAllocations4 fields
amount—allocationId—bonusId—typeOfPaymentId—otherAllocations2 fields
amount—allocationId—customerId—studentId—categoryId—counterpartyId—projectId—managerId—createdByUserId—isVerified—verifiedByUserId—file4 fields
storageFileId—key—name—mimeType—note—updatedAtformat YYYY-MM-DDTHH:mm:sscreatedAtformat YYYY-MM-DDTHH:mm:sscustomFieldsany keyscurl "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
Request body
application/json · object
typeOfOperationOne of: INCOME TRANSFER ADJUSTMENT EXPENSES REFUND ACCOUNT_TRANSFERtypeOfCategoryOne of: SUBSCRIPTION WAGE OTHERaccountIdmin 1accountToIdmin 1articleIdmin 1dateOfOperation—accrualPeriodFrom—accrualPeriodTo—subscriptionAllocationsitems min 14 fields
studentSubscriptionIdmin 1amount—typeOfPaymentIdmin 1leadIdmin 1wageAllocationsitems min 13 fields
wageIdmin 1amount—typeOfPaymentIdmin 1bonusAllocationsitems min 13 fields
bonusIdmin 1amount—typeOfPaymentIdmin 1otherAllocationsitems min 11 field
amount—customerIdmin 1studentIdmin 1categoryIdmin 1counterpartyIdmin 1projectIdmin 1createdByUserIdmin 1managerIdmin 1notelength max 1500isVerified—verifiedByUserIdmin 1customFieldsany keysResponse · 201
application/json
statusCodeexample 201message—data27 fields
financeOperationId—typeOfOperationOne of: INCOME TRANSFER ADJUSTMENT EXPENSES REFUND ACCOUNT_TRANSFERtypeOfCategoryOne of: SUBSCRIPTION WAGE OTHERaccountId—accountToId—articleId—dateOfOperationformat YYYY-MM-DDTHH:mm:ssaccrualPeriodFromformat YYYY-MM-DDTHH:mm:ssaccrualPeriodToformat YYYY-MM-DDTHH:mm:sssubscriptionAllocations5 fields
amount—allocationId—studentSubscriptionId—typeOfPaymentId—leadId—wageAllocations4 fields
amount—allocationId—wageId—typeOfPaymentId—bonusAllocations4 fields
amount—allocationId—bonusId—typeOfPaymentId—otherAllocations2 fields
amount—allocationId—customerId—studentId—categoryId—counterpartyId—projectId—managerId—createdByUserId—isVerified—verifiedByUserId—file4 fields
storageFileId—key—name—mimeType—note—updatedAtformat YYYY-MM-DDTHH:mm:sscreatedAtformat YYYY-MM-DDTHH:mm:sscustomFieldsany keyscurl -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
Path parameters · 1
id—Request body
application/json · object
typeOfOperationOne of: INCOME TRANSFER ADJUSTMENT EXPENSES REFUND ACCOUNT_TRANSFERtypeOfCategoryOne of: SUBSCRIPTION WAGE OTHERaccountIdmin 1accountToIdmin 1articleIdmin 1dateOfOperation—accrualPeriodFrom—accrualPeriodTo—subscriptionAllocationsitems min 14 fields
studentSubscriptionIdmin 1amount—typeOfPaymentIdmin 1leadIdmin 1wageAllocationsitems min 13 fields
wageIdmin 1amount—typeOfPaymentIdmin 1bonusAllocationsitems min 13 fields
bonusIdmin 1amount—typeOfPaymentIdmin 1otherAllocationsitems min 11 field
amount—customerIdmin 1studentIdmin 1categoryIdmin 1counterpartyIdmin 1projectIdmin 1createdByUserIdmin 1managerIdmin 1notelength max 1500isVerified—verifiedByUserIdmin 1customFieldsany keysResponse · 200
application/json
statusCodeexample 200message—data27 fields
financeOperationId—typeOfOperationOne of: INCOME TRANSFER ADJUSTMENT EXPENSES REFUND ACCOUNT_TRANSFERtypeOfCategoryOne of: SUBSCRIPTION WAGE OTHERaccountId—accountToId—articleId—dateOfOperationformat YYYY-MM-DDTHH:mm:ssaccrualPeriodFromformat YYYY-MM-DDTHH:mm:ssaccrualPeriodToformat YYYY-MM-DDTHH:mm:sssubscriptionAllocations5 fields
amount—allocationId—studentSubscriptionId—typeOfPaymentId—leadId—wageAllocations4 fields
amount—allocationId—wageId—typeOfPaymentId—bonusAllocations4 fields
amount—allocationId—bonusId—typeOfPaymentId—otherAllocations2 fields
amount—allocationId—customerId—studentId—categoryId—counterpartyId—projectId—managerId—createdByUserId—isVerified—verifiedByUserId—file4 fields
storageFileId—key—name—mimeType—note—updatedAtformat YYYY-MM-DDTHH:mm:sscreatedAtformat YYYY-MM-DDTHH:mm:sscustomFieldsany keyscurl -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": {}
}
}