Request headers
string
required
The service user’s API token in the
Bearer YOUR_TOKEN format. The school owner issues the token in the admin panel:
Manage → School → For developers → API keys — see the “Authentication” section for details.integer
required
The numeric ID of the seller — the account the school belongs to. Copy it on the API keys page, in
the Integration data → Identifiers card. The token’s permissions are checked against this ID.
integer
required
The numeric ID of the school, found in the same place as
Seller-Id. The value must match the seller’s school — otherwise
a 400 error with cause: "ForbiddenSchoolMismatch" is returned.Positions are a directory of job titles for school employees (for example, “Backend Engineer”). Positions
are assigned to employees on hiring and promotion and are used by the staff module to describe the employment
structure.
Permission requirements
Reading (
list) requires the “Staff browsing” permission (StaffView). Creating, updating and deleting require the “Staff Management” permission (StaffManage).
In all cases, token authentication is required and the school must belong to the Corporate segment.A position name is unique within the school, case-insensitive (“Manager” and “manager” are the same
name). Creating a position with, or renaming a position to, a name that already exists in the same school returns
the
StaffPositionNameIsNotUniq error.The
extId field is the position’s external ID from the client’s system (CRM/1C, for example a GUID). It is unique within the
school among non-deleted records (unique index school + extId). 1 to 50 characters, cannot contain
/ or whitespace characters, because the value is used in ext/{extId} paths.Linking to departments and grades
A position can be limited to a list of departments and a list of grades. Both links are optional: positions can be created without them, this affects nothing, and they can be linked later.departmentIds— the departments where the position is available. Not passed or an empty array — the position is common to the whole school (shown as “All departments” in the UI). When the link is set, an employee cannot be hired, promoted or transferred to this position in another department —StaffPositionNotInDepartmentis returned (see employments).gradeIds— the grades that can be given to an employee in this position. Not passed or an empty array — any grade of the school fits.
The array replaces the whole list: to add a department, pass the full new list.
[] removes the link, and a
field omitted on update keeps the link unchanged. Pass the internal IDs of departments and grades (not extId):
a department ID by its extId is available via
department/list?extIds=.... The links are not returned in the position
response — position/list?departmentId={id} returns the positions of a department.List positions
StaffView).
The endpoint returns a paginated list of positions. Pagination and filter parameters are passed as
query parameters.
Parameters
integer
Number of records to skip (offset pagination). Minimum
0.integer
Number of records to return per page. From
1 to 1000.integer
Page number (an alternative to
skip). Minimum 1.integer[]
Filter by position IDs. Up to 250 values.
string
Search by position name. Maximum 50 characters. The search is fuzzy (it also finds partial matches), so to
find a specific position by name, compare the
name of the returned records with your value case-insensitively,
or, more reliably, search by extIds.string[]
Filter by a list of external IDs (
extId). Up to 250 values, each up to 50 characters.integer
Positions available in the department: the ones linked to it and the ones common to the whole school (with no
department link).
enum
Sort direction by creation date. Possible values:
ASC, DESC. The id
and updatedAt parameters work the same way.Response
object
required
Paginated object:
items (array of positions), page, count, pages, isFirst, isLast, next,
prev.Create a position
StaffManage).
Request parameters
string
required
Position name. 1 to 100 characters. Leading and trailing spaces are trimmed automatically. Must be
unique within the school.
string
The position’s external ID from the client’s system (CRM/1C). 1 to 50 characters, cannot contain
/ or
whitespace characters. Must be unique within the school among non-deleted records.integer[]
IDs of the departments where the position is available. Up to 250 values. Not passed or
[] — the position is
common to the whole school. Every department must belong to the school, otherwise StaffDepartmentNotFound is
returned. See Linking to departments and grades.integer[]
IDs of the grades that can be given to an employee in this position. Up to 100
values. Not passed or
[] — any grade fits. Every grade must belong to the school, otherwise StaffGradeNotFound
is returned.Update a position
StaffManage).
Parameters
integer
required
ID of the position to update within the school.
string
New position name. 1 to 100 characters. Leading and trailing spaces are trimmed automatically. Must be
unique within the school.
string
The position’s external ID from the client’s system (CRM/1C). 1 to 50 characters, cannot contain
/ or
whitespace characters. Must be unique within the school among non-deleted records.integer[]
New list of IDs of the departments where the position is available (up to 250). Replaces the current list as a
whole;
[] makes the position common to the whole school; not passed — the link is kept. StaffDepartmentNotFound
if a department is not found in the school.integer[]
New list of grade IDs of the position (up to 100). Replaces the current list as a whole;
[] — any grade fits;
not passed — the list is kept. StaffGradeNotFound if a grade is not found in the school.Update a position by extId
StaffManage).
Equivalent of the update-by-ID endpoint: the position is looked up by the external ID
extId within the school.
The extId value in the path must be URL-encoded.Parameters
string
required
External ID (
extId) of the position to update within the school. Must be URL-encoded.string
New position name. 1 to 100 characters. Leading and trailing spaces are trimmed automatically. Must be
unique within the school.
string
New external ID of the position. 1 to 50 characters, cannot contain
/ or whitespace characters.
Must be unique within the school among non-deleted records.integer[]
New list of IDs of the departments where the position is available (up to 250). Works the same as
update by ID.
integer[]
New list of grade IDs of the position (up to 100). Works the same as update by ID.
Delete a position
StaffManage).
Parameters
integer
required
ID of the position to delete within the school.
Response
integer
required
Number of deleted records (
1 on successful deletion).Delete a position by extId
StaffManage).
Equivalent of the delete-by-ID endpoint: the position is looked up by the external ID
extId within the school.
The extId value in the path must be URL-encoded.Parameters
string
required
External ID (
extId) of the position to delete within the school. Must be URL-encoded.Response
integer
required
Number of deleted records (
1 on successful deletion).Updated: 2026-10-16 13:24 UTC