Skip to main content

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.
All staff module endpoints are available only to schools in the corporate segment (Corporate). Requests from schools in other segments are rejected.

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.
The service user must be authenticated with a token and have the appropriate access rights to the specified school.
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 — StaffPositionNotInDepartment is 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.
If the school has an org-structure source app connected (for example, the Verifix integration), positions with an extId are managed by it: creating a position with an extId, changing the name or extId of such a position and deleting it via the API return the MiniappInstallationManagedEntity error. The links to departments and grades (departmentIds, gradeIds) can still be changed.

List positions

Requires authentication and the “Staff browsing” permission (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.
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

Requires authentication and the “Staff Management” permission (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

Requires authentication and the “Staff Management” permission (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

Requires authentication and the “Staff Management” permission (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

Requires authentication and the “Staff Management” permission (StaffManage).
A position cannot be deleted while it has active employees (including a scheduled hire with a future date): the method returns StaffPositionHasActiveEmployments. First change the employees’ position via promote or terminate them.

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

Requires authentication and the “Staff Management” permission (StaffManage).
A position cannot be deleted while it has active employees (including a scheduled hire with a future date): the method returns StaffPositionHasActiveEmployments. First change the employees’ position via promote or terminate them.
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