Tasks
Tasks · 7 operations
List tasks
/api/taskTasks with filters: deadlineBucket (OVERDUE, TODAY, TOMORROW, WEEK, LATER), deadline range, completed range (completedStart/completedEnd with isCompleted=true), type, assignee. For "my tasks" pass assigneeUserIds with the current user id (iAmResponsible means the manager of the linked student, not the assignee). Paginated; "total" is the full count.
list_tasks
Query parameters · 28
pagemin 1 · default 1pageSize1–250 · default 20sortByrelevance: open tasks by deadline (overdue first), then completed ones; used by card lists.One of: isCompleted deadline relevancesortOrderOne of: ASC DESCtaskIds—deadlineBucketBoard column; its bounds are computed in the school time zone.One of: OVERDUE TODAY TOMORROW WEEK LATERisCompleted—textOfTask—Show 20 more
deadlineStartPeriod start, a school-local calendar day.deadlineEndPeriod end, inclusive: the end of that school-local day.completedStartCompleted from, a school-local calendar day; pair with isCompleted=true.completedEndCompleted until, inclusive: the end of that school-local day.resultOfTask—typeId—subtypeId—assigneeUserId—assigneeUserIds—managerIdsManager of the linked student or lead, not the task assignee.iAmResponsibleTasks whose linked student or lead is managed by the current user (taken from the session).studentId—studentIds—withLeadTasksAlso include tasks of the student's leads, created before conversion.leadId—leadIds—groupId—groupIds—isArchivaldefault falsecf—Response · 200
application/json
statusCodeexample 200message—data4 fields
total—totalPages—currentPage—tasks13 fields
taskId—textOfTask—isCompleted—completedAtformat YYYY-MM-DDTHH:mm:ssdeadlineSchool-local wall time; a point in time only when hasTime is true.format YYYY-MM-DDTHH:mm:sshasTime—resultOfTask—note—isArchival—updatedAtformat YYYY-MM-DDTHH:mm:sscreatedAtformat YYYY-MM-DDTHH:mm:ssdeadlineBucketBoard column, derived on read.One of: OVERDUE TODAY TOMORROW WEEK LATERcustomFieldsany keyscurl "https://your-school.rist.pro/api/task?isArchival=false" \
-H "Authorization: Bearer $RIST_API_KEY"const response = await fetch("https://your-school.rist.pro/api/task?isArchival=false", {
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/task",
headers={"Authorization": f"Bearer {os.environ['RIST_API_KEY']}"},
params={
"isArchival": False
},
)
response.raise_for_status()
data = response.json()["data"]{
"statusCode": 200,
"message": "Operation completed successfully",
"data": {
"total": 0,
"totalPages": 0,
"currentPage": 0,
"tasks": [
{
"taskId": 1,
"textOfTask": "string",
"isCompleted": false,
"completedAt": "2026-11-09T14:30:00",
"deadline": "2026-11-09T14:30:00",
"hasTime": false,
"resultOfTask": "string",
"note": "string",
"isArchival": false,
"updatedAt": "2026-11-09T14:30:00",
"createdAt": "2026-11-09T14:30:00",
"deadlineBucket": "OVERDUE",
"customFields": {}
}
]
}
}Count tasks by assignee or type
/api/task/breakdownHow many tasks match the GET /api/task filters, per assignee, type or subtype (groupBy). E.g. overdue per manager: groupBy=assignee, deadlineBucket=OVERDUE. One call instead of paging through GET /api/task.
count_tasks
Query parameters · 25
cf—taskIds—deadlineBucketBoard column; its bounds are computed in the school time zone.One of: OVERDUE TODAY TOMORROW WEEK LATERisCompleted—textOfTask—deadlineStartPeriod start, a school-local calendar day.deadlineEndPeriod end, inclusive: the end of that school-local day.completedStartCompleted from, a school-local calendar day; pair with isCompleted=true.Show 17 more
completedEndCompleted until, inclusive: the end of that school-local day.resultOfTask—typeId—subtypeId—assigneeUserId—assigneeUserIds—managerIdsManager of the linked student or lead, not the task assignee.iAmResponsibleTasks whose linked student or lead is managed by the current user (taken from the session).studentId—studentIds—withLeadTasksAlso include tasks of the student's leads, created before conversion.leadId—leadIds—groupId—groupIds—isArchivaldefault falsegroupByWhat to count tasks byOne of: assignee type subtypeResponse · 200
application/json
statusCodeexample 200message—data3 fields
omittedRowsRows left out by the limittotalRecords matching the filters; a record counted in several rows (a student with two teachers) counts here once.rows3 fields
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/task/breakdown?isArchival=false&groupBy=assignee" \
-H "Authorization: Bearer $RIST_API_KEY"const response = await fetch("https://your-school.rist.pro/api/task/breakdown?isArchival=false&groupBy=assignee", {
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/task/breakdown",
headers={"Authorization": f"Bearer {os.environ['RIST_API_KEY']}"},
params={
"isArchival": False,
"groupBy": "assignee"
},
)
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
}
]
}
}Get task
/api/task/{id}One task with assignee, deadline and linked student, lead or group.
get_task
Path parameters · 1
id—Response · 200
application/json
statusCodeexample 200message—data13 fields
taskId—textOfTask—isCompleted—completedAtformat YYYY-MM-DDTHH:mm:ssdeadlineSchool-local wall time; a point in time only when hasTime is true.format YYYY-MM-DDTHH:mm:sshasTime—resultOfTask—note—isArchival—updatedAtformat YYYY-MM-DDTHH:mm:sscreatedAtformat YYYY-MM-DDTHH:mm:ssdeadlineBucketBoard column, derived on read.One of: OVERDUE TODAY TOMORROW WEEK LATERcustomFieldsany keyscurl "https://your-school.rist.pro/api/task/1" \
-H "Authorization: Bearer $RIST_API_KEY"const response = await fetch("https://your-school.rist.pro/api/task/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/task/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": {
"taskId": 1,
"textOfTask": "string",
"isCompleted": false,
"completedAt": "2026-11-09T14:30:00",
"deadline": "2026-11-09T14:30:00",
"hasTime": false,
"resultOfTask": "string",
"note": "string",
"isArchival": false,
"updatedAt": "2026-11-09T14:30:00",
"createdAt": "2026-11-09T14:30:00",
"deadlineBucket": "OVERDUE",
"customFields": {}
}
}Create task
/api/taskCreate a task for a staff member, optionally linked to a student, lead or group. Deadline is school local time.
create_task
Request body
application/json · object
textOfTasklength 1–3000typeIdTask type; defaults to the school's default type.min 1subtypeIdmin 1deadlineSchool-local wall time; defaults to the start of tomorrow. With hasTime false it means the whole day.hasTime—assigneeUserIdDefaults to the task author.min 1notelength max 1500studentIdsmin 1leadIdsmin 1groupIdsmin 1customFieldsany keysResponse · 201
application/json
statusCodeexample 201message—data13 fields
taskId—textOfTask—isCompleted—completedAtformat YYYY-MM-DDTHH:mm:ssdeadlineSchool-local wall time; a point in time only when hasTime is true.format YYYY-MM-DDTHH:mm:sshasTime—resultOfTask—note—isArchival—updatedAtformat YYYY-MM-DDTHH:mm:sscreatedAtformat YYYY-MM-DDTHH:mm:ssdeadlineBucketBoard column, derived on read.One of: OVERDUE TODAY TOMORROW WEEK LATERcustomFieldsany keyscurl -X POST "https://your-school.rist.pro/api/task" \
-H "Authorization: Bearer $RIST_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"textOfTask": "string",
"typeId": 1,
"subtypeId": 1,
"deadline": "string",
"hasTime": false,
"assigneeUserId": 1,
"note": "string",
"studentIds": [
1
],
"leadIds": [
1
],
"groupIds": [
1
],
"customFields": {}
}'const response = await fetch("https://your-school.rist.pro/api/task", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.RIST_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"textOfTask": "string",
"typeId": 1,
"subtypeId": 1,
"deadline": "string",
"hasTime": false,
"assigneeUserId": 1,
"note": "string",
"studentIds": [
1
],
"leadIds": [
1
],
"groupIds": [
1
],
"customFields": {}
}),
});
const { data } = await response.json();import os
import requests
response = requests.post(
"https://your-school.rist.pro/api/task",
headers={"Authorization": f"Bearer {os.environ['RIST_API_KEY']}"},
json={
"textOfTask": "string",
"typeId": 1,
"subtypeId": 1,
"deadline": "string",
"hasTime": False,
"assigneeUserId": 1,
"note": "string",
"studentIds": [
1
],
"leadIds": [
1
],
"groupIds": [
1
],
"customFields": {}
},
)
response.raise_for_status()
data = response.json()["data"]{
"statusCode": 201,
"message": "Operation completed successfully",
"data": {
"taskId": 1,
"textOfTask": "string",
"isCompleted": false,
"completedAt": "2026-11-09T14:30:00",
"deadline": "2026-11-09T14:30:00",
"hasTime": false,
"resultOfTask": "string",
"note": "string",
"isArchival": false,
"updatedAt": "2026-11-09T14:30:00",
"createdAt": "2026-11-09T14:30:00",
"deadlineBucket": "OVERDUE",
"customFields": {}
}
}Update task
/api/task/{id}Change fields of a task. Send only the fields to change.
update_task
Path parameters · 1
id—Request body
application/json · object
textOfTasklength 1–3000typeIdTask type; defaults to the school's default type.min 1subtypeIdmin 1deadlineSchool-local wall time; defaults to the start of tomorrow. With hasTime false it means the whole day.hasTime—assigneeUserIdDefaults to the task author.min 1notelength max 1500studentIdsmin 1leadIdsmin 1groupIdsmin 1customFieldsany keysresultOfTasklength max 3000deadlineBucketBoard column to move the task to; the server derives the deadline. Mutually exclusive with deadline.One of: OVERDUE TODAY TOMORROW WEEK LATERResponse · 200
application/json
statusCodeexample 200message—data13 fields
taskId—textOfTask—isCompleted—completedAtformat YYYY-MM-DDTHH:mm:ssdeadlineSchool-local wall time; a point in time only when hasTime is true.format YYYY-MM-DDTHH:mm:sshasTime—resultOfTask—note—isArchival—updatedAtformat YYYY-MM-DDTHH:mm:sscreatedAtformat YYYY-MM-DDTHH:mm:ssdeadlineBucketBoard column, derived on read.One of: OVERDUE TODAY TOMORROW WEEK LATERcustomFieldsany keyscurl -X PATCH "https://your-school.rist.pro/api/task/1" \
-H "Authorization: Bearer $RIST_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"textOfTask": "string",
"typeId": 1,
"subtypeId": 1,
"deadline": "string",
"hasTime": false,
"assigneeUserId": 1,
"note": "string",
"studentIds": [
1
],
"leadIds": [
1
],
"groupIds": [
1
],
"customFields": {},
"resultOfTask": "string",
"deadlineBucket": "OVERDUE"
}'const response = await fetch("https://your-school.rist.pro/api/task/1", {
method: "PATCH",
headers: {
Authorization: `Bearer ${process.env.RIST_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"textOfTask": "string",
"typeId": 1,
"subtypeId": 1,
"deadline": "string",
"hasTime": false,
"assigneeUserId": 1,
"note": "string",
"studentIds": [
1
],
"leadIds": [
1
],
"groupIds": [
1
],
"customFields": {},
"resultOfTask": "string",
"deadlineBucket": "OVERDUE"
}),
});
const { data } = await response.json();import os
import requests
response = requests.patch(
"https://your-school.rist.pro/api/task/1",
headers={"Authorization": f"Bearer {os.environ['RIST_API_KEY']}"},
json={
"textOfTask": "string",
"typeId": 1,
"subtypeId": 1,
"deadline": "string",
"hasTime": False,
"assigneeUserId": 1,
"note": "string",
"studentIds": [
1
],
"leadIds": [
1
],
"groupIds": [
1
],
"customFields": {},
"resultOfTask": "string",
"deadlineBucket": "OVERDUE"
},
)
response.raise_for_status()
data = response.json()["data"]{
"statusCode": 200,
"message": "Operation completed successfully",
"data": {
"taskId": 1,
"textOfTask": "string",
"isCompleted": false,
"completedAt": "2026-11-09T14:30:00",
"deadline": "2026-11-09T14:30:00",
"hasTime": false,
"resultOfTask": "string",
"note": "string",
"isArchival": false,
"updatedAt": "2026-11-09T14:30:00",
"createdAt": "2026-11-09T14:30:00",
"deadlineBucket": "OVERDUE",
"customFields": {}
}
}Complete task
/api/task/complete/{id}Mark a task as completed, optionally with a result (resultOfTask) and a follow-up task (next).
complete_task
Path parameters · 1
id—Request body
application/json · object
resultOfTasklength max 3000next11 fields
textOfTasklength 1–3000typeIdTask type; defaults to the school's default type.min 1subtypeIdmin 1deadlineSchool-local wall time; defaults to the start of tomorrow. With hasTime false it means the whole day.hasTime—assigneeUserIdDefaults to the task author.min 1notelength max 1500studentIdsmin 1leadIdsmin 1groupIdsmin 1customFieldsany keysResponse · 200
application/json
statusCodeexample 200message—data2 fields
completed13 fields
taskId—textOfTask—isCompleted—completedAtformat YYYY-MM-DDTHH:mm:ssdeadlineSchool-local wall time; a point in time only when hasTime is true.format YYYY-MM-DDTHH:mm:sshasTime—resultOfTask—note—isArchival—updatedAtformat YYYY-MM-DDTHH:mm:sscreatedAtformat YYYY-MM-DDTHH:mm:ssdeadlineBucketBoard column, derived on read.One of: OVERDUE TODAY TOMORROW WEEK LATERcustomFieldsany keysnextThe follow-up task created with the completion, if one was asked for.13 fields
taskId—textOfTask—isCompleted—completedAtformat YYYY-MM-DDTHH:mm:ssdeadlineSchool-local wall time; a point in time only when hasTime is true.format YYYY-MM-DDTHH:mm:sshasTime—resultOfTask—note—isArchival—updatedAtformat YYYY-MM-DDTHH:mm:sscreatedAtformat YYYY-MM-DDTHH:mm:ssdeadlineBucketBoard column, derived on read.One of: OVERDUE TODAY TOMORROW WEEK LATERcustomFieldsany keyscurl -X PATCH "https://your-school.rist.pro/api/task/complete/1" \
-H "Authorization: Bearer $RIST_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"resultOfTask": "string",
"next": {
"textOfTask": "string",
"typeId": 1,
"subtypeId": 1,
"deadline": "string",
"hasTime": false,
"assigneeUserId": 1,
"note": "string",
"studentIds": [
1
],
"leadIds": [
1
],
"groupIds": [
1
],
"customFields": {}
}
}'const response = await fetch("https://your-school.rist.pro/api/task/complete/1", {
method: "PATCH",
headers: {
Authorization: `Bearer ${process.env.RIST_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"resultOfTask": "string",
"next": {
"textOfTask": "string",
"typeId": 1,
"subtypeId": 1,
"deadline": "string",
"hasTime": false,
"assigneeUserId": 1,
"note": "string",
"studentIds": [
1
],
"leadIds": [
1
],
"groupIds": [
1
],
"customFields": {}
}
}),
});
const { data } = await response.json();import os
import requests
response = requests.patch(
"https://your-school.rist.pro/api/task/complete/1",
headers={"Authorization": f"Bearer {os.environ['RIST_API_KEY']}"},
json={
"resultOfTask": "string",
"next": {
"textOfTask": "string",
"typeId": 1,
"subtypeId": 1,
"deadline": "string",
"hasTime": False,
"assigneeUserId": 1,
"note": "string",
"studentIds": [
1
],
"leadIds": [
1
],
"groupIds": [
1
],
"customFields": {}
}
},
)
response.raise_for_status()
data = response.json()["data"]{
"statusCode": 200,
"message": "Operation completed successfully",
"data": {
"completed": {
"taskId": 1,
"textOfTask": "string",
"isCompleted": false,
"completedAt": "2026-11-09T14:30:00",
"deadline": "2026-11-09T14:30:00",
"hasTime": false,
"resultOfTask": "string",
"note": "string",
"isArchival": false,
"updatedAt": "2026-11-09T14:30:00",
"createdAt": "2026-11-09T14:30:00",
"deadlineBucket": "OVERDUE",
"customFields": {}
},
"next": {
"taskId": 1,
"textOfTask": "string",
"isCompleted": false,
"completedAt": "2026-11-09T14:30:00",
"deadline": "2026-11-09T14:30:00",
"hasTime": false,
"resultOfTask": "string",
"note": "string",
"isArchival": false,
"updatedAt": "2026-11-09T14:30:00",
"createdAt": "2026-11-09T14:30:00",
"deadlineBucket": "OVERDUE",
"customFields": {}
}
}
}Reopen task
/api/task/reopen/{id}Return a completed task to open. Fails if the task is not completed; may trigger automations.
reopen_task
Path parameters · 1
id—Response · 200
application/json
statusCodeexample 200message—data13 fields
taskId—textOfTask—isCompleted—completedAtformat YYYY-MM-DDTHH:mm:ssdeadlineSchool-local wall time; a point in time only when hasTime is true.format YYYY-MM-DDTHH:mm:sshasTime—resultOfTask—note—isArchival—updatedAtformat YYYY-MM-DDTHH:mm:sscreatedAtformat YYYY-MM-DDTHH:mm:ssdeadlineBucketBoard column, derived on read.One of: OVERDUE TODAY TOMORROW WEEK LATERcustomFieldsany keyscurl -X PATCH "https://your-school.rist.pro/api/task/reopen/1" \
-H "Authorization: Bearer $RIST_API_KEY"const response = await fetch("https://your-school.rist.pro/api/task/reopen/1", {
method: "PATCH",
headers: {
Authorization: `Bearer ${process.env.RIST_API_KEY}`,
},
});
const { data } = await response.json();import os
import requests
response = requests.patch(
"https://your-school.rist.pro/api/task/reopen/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": {
"taskId": 1,
"textOfTask": "string",
"isCompleted": false,
"completedAt": "2026-11-09T14:30:00",
"deadline": "2026-11-09T14:30:00",
"hasTime": false,
"resultOfTask": "string",
"note": "string",
"isArchival": false,
"updatedAt": "2026-11-09T14:30:00",
"createdAt": "2026-11-09T14:30:00",
"deadlineBucket": "OVERDUE",
"customFields": {}
}
}