Appearance
staff.staff
11 methods on staff.staff. Each returns the answer's data and throws NoviqaError on a failed answer.
list
GET
/admin/v1/staffList staff users
One page of staff users (accounts in a staff group, a group beneath a managers or administrators folder), ordered by login. Limited to staff groups in the caller's group scope; group narrows further by mask. page is 1-based (default 1); limit defaults to 100 and is capped at 1000. total counts every match. Passwords are never returned.
More details
Rights: the staff member needs every one of: config.staff.
Parameters
groupstring · querystaff group mask, e.g. managers\*
logininteger · queryexact login; 0 = any
namestring · querypart of the name, any case
pageinteger · query1-based, default 1
limitinteger · querydefault 100, at most 1000
Returns
Promise<staffPage>The answer's
data.Errors
400
invalid_input: invalid input401
auth.session_expired: session expired, sign in again403
auth.invalid_terminal: this terminal cannot be used here403
auth.otp_enrol_required: your group requires one-time codes: set them up to continue403
auth.password_change_required: you must change your password first403
forbidden: you do not have access to this action500
internal: something went wrongts
import { staff } from "@/lib/noviqa"
const data = await staff.staff.list({
group: "string",
login: 1001,
name: "string"
})bash
curl -X GET "$NOVIQA_API_URL/admin/v1/staff?group=string&login=1001&name=string" \
-H "Authorization: Bearer $NOVIQA_TOKEN"json
{
"success": true,
"code": "ok",
"message": "done",
"data": {
"items": [
{
"active": true,
"created_at": "2026-09-25T10:15:00Z",
"email": "ann@example.com",
"group": "real\\standard",
"group_scope": [
"string"
],
"ip_allow": [
"string"
],
"last_access": "2026-09-25T10:15:00Z",
"last_ip": "string",
"login": 1001,
"logs_months": 1,
"mailbox_name": "string",
"name": "Ann Smith"
}
],
"page": 1,
"total": 1
},
"request_id": "5b7f2c1e"
}ts
staff.staff.list(query?: { group?, login?, name?, page?, limit? }, options?: RequestOptions): Promise<http.staffPage>create
POST
/admin/v1/staffAttach manager permissions to an existing account
Requires a positive existing trading-account login; this endpoint never creates a trading account. The account's stored group must contain a complete managers or administrators folder segment (case-insensitive, slash or backslash separators), at any depth, and be within the caller's scope. Ordinary groups and substring lookalikes such as fundmanager or managers-demo are refused with invalid_input and an explanatory message. Missing accounts return not_found; missing/nonpositive logins return invalid_input. The account identity and passwords are preserved. Duplicate profiles and concurrently changed accounts return conflict. Account version increments on attachment. logs_months and reports_months are each 0-120 (0 = all). At most 64 ip_allow prefixes and 64 group_scope masks; scope needs a positive mask. Nobody may grant rights, groups or history they do not hold. Writes a config journal line and refreshes sessions. Unknown fields (including group/name/email/password creation fields) are refused.
More details
Rights: the staff member needs every one of: config.staff.
Request body
group_scopestring[]ip_allowstring[]loginintegerRequired positive existing trading-account login. Login is the numeric identity of every account, trader or staff.
logs_monthsintegermailbox_namestringreports_monthsintegerrightsstring[]Staff rights by name.
Returns
Promise<Member>The answer's
data.Errors
400
invalid_input: invalid input401
auth.session_expired: session expired, sign in again403
auth.csrf_invalid: request refused: reload the page and try again403
auth.invalid_terminal: this terminal cannot be used here403
auth.otp_enrol_required: your group requires one-time codes: set them up to continue403
auth.password_change_required: you must change your password first403
forbidden: you do not have access to this action404
not_found: not found409
conflict: already exists500
internal: something went wrongts
import { staff } from "@/lib/noviqa"
const data = await staff.staff.create({
group_scope: [
"real\\*"
],
ip_allow: [
"203.0.113.0/24"
],
login: 1015,
logs_months: 12,
rights: [
"terminal.manager",
"accounts.view"
]
})bash
curl -X POST "$NOVIQA_API_URL/admin/v1/staff" \
-H "Authorization: Bearer $NOVIQA_TOKEN" \
-H "Content-Type: application/json" \
--data-raw '{
"group_scope": [
"real\\*"
],
"ip_allow": [
"203.0.113.0/24"
],
"login": 1015,
"logs_months": 12,
"rights": [
"terminal.manager",
"accounts.view"
]
}'json
{
"success": true,
"code": "ok",
"message": "done",
"data": {
"active": true,
"created_at": "2026-09-25T10:15:00Z",
"email": "ann@example.com",
"group": "real\\standard",
"group_scope": [
"string"
],
"ip_allow": [
"string"
],
"last_access": "2026-09-25T10:15:00Z",
"last_ip": "string",
"login": 1001,
"logs_months": 1,
"mailbox_name": "string",
"name": "Ann Smith"
},
"request_id": "5b7f2c1e"
}ts
staff.staff.create(body: staff.NewMember, options?: RequestOptions): Promise<staff.Member>retrieve
GET
/admin/v1/staff/{login}Get a staff user
One staff user; its group must be in the caller's group scope.
More details
Rights: the staff member needs every one of: config.staff.
Parameters
logininteger · pathrequiredStaff login.
Returns
Promise<Member>The answer's
data.Errors
400
invalid_input: invalid input401
auth.session_expired: session expired, sign in again403
auth.invalid_terminal: this terminal cannot be used here403
auth.otp_enrol_required: your group requires one-time codes: set them up to continue403
auth.password_change_required: you must change your password first403
forbidden: you do not have access to this action404
not_found: not found500
internal: something went wrongts
import { staff } from "@/lib/noviqa"
const data = await staff.staff.retrieve(1001)bash
curl -X GET "$NOVIQA_API_URL/admin/v1/staff/1001" \
-H "Authorization: Bearer $NOVIQA_TOKEN"json
{
"success": true,
"code": "ok",
"message": "done",
"data": {
"active": true,
"created_at": "2026-09-25T10:15:00Z",
"email": "ann@example.com",
"group": "real\\standard",
"group_scope": [
"string"
],
"ip_allow": [
"string"
],
"last_access": "2026-09-25T10:15:00Z",
"last_ip": "string",
"login": 1001,
"logs_months": 1,
"mailbox_name": "string",
"name": "Ann Smith"
},
"request_id": "5b7f2c1e"
}ts
staff.staff.retrieve(login: number, options?: RequestOptions): Promise<staff.Member>update
PATCH
/admin/v1/staff/{login}Change a staff user
Changes the fields sent. Editable: group, name, mailbox_name (shown to traders writing to this staff member instead of name; "" falls back to name), email, active, rights, group_scope, ip_allow, logs_months, reports_months; version (the one last read) is required, a stale one answers conflict. The target must be in the caller's scope and hold no right the caller lacks; a new group must be a staff group in scope. Same limits as create. Nobody may disable themselves. A new group or active false signs the user out everywhere; new rights, scope, addresses or journal depth reach their live sessions at once. Nothing changed = the user comes back as it was, with no journal line; otherwise one config journal line lists the changed fields.
More details
Rights: the staff member needs every one of: config.staff.
Parameters
logininteger · pathrequiredStaff login.
Request body
activebooleanfalse = may not sign in
created_atstringUTC time, RFC 3339.
emailstringgroupstringgroup_scopestring[]ip_allowstring[]empty = any address
last_accessstringUTC time, RFC 3339.
last_ipstringloginintegerLogin is the numeric identity of every account, trader or staff.
logs_monthsintegermailbox_namestringshown to traders instead of Name; "" = Name
namestringreports_monthsintegerhow far back reports reach (0 = all)
rightsstring[]Staff rights by name.
updated_atstringUTC time, RFC 3339.
versionintegerReturns
Promise<Member>The answer's
data.Errors
400
invalid_input: invalid input401
auth.session_expired: session expired, sign in again403
auth.csrf_invalid: request refused: reload the page and try again403
auth.invalid_terminal: this terminal cannot be used here403
auth.otp_enrol_required: your group requires one-time codes: set them up to continue403
auth.password_change_required: you must change your password first403
forbidden: you do not have access to this action404
not_found: not found409
conflict: already exists500
internal: something went wrongts
import { staff } from "@/lib/noviqa"
const data = await staff.staff.update(1001, {
logs_months: 6,
rights: [
"accounts.view",
"accounts.edit"
],
version: 3
})bash
curl -X PATCH "$NOVIQA_API_URL/admin/v1/staff/1001" \
-H "Authorization: Bearer $NOVIQA_TOKEN" \
-H "Content-Type: application/json" \
--data-raw '{
"logs_months": 6,
"rights": [
"accounts.view",
"accounts.edit"
],
"version": 3
}'json
{
"success": true,
"code": "ok",
"message": "done",
"data": {
"active": true,
"created_at": "2026-09-25T10:15:00Z",
"email": "ann@example.com",
"group": "real\\standard",
"group_scope": [
"string"
],
"ip_allow": [
"string"
],
"last_access": "2026-09-25T10:15:00Z",
"last_ip": "string",
"login": 1001,
"logs_months": 1,
"mailbox_name": "string",
"name": "Ann Smith"
},
"request_id": "5b7f2c1e"
}ts
staff.staff.update(login: number, body: staff.Member, options?: RequestOptions): Promise<staff.Member>delete
DELETE
/admin/v1/staff/{login}Delete a staff user
Removes the staff user for good and closes their sessions; nobody may delete themselves. The target must be in the caller's scope and hold no right the caller lacks. A user who made trades, dealing log lines or journal lines cannot be removed (conflict) — disable it instead. No body. Writes a config journal line.
More details
Rights: the staff member needs every one of: config.staff.
Parameters
logininteger · pathrequiredStaff login.
Returns
Promise<null>The answer's
data.Errors
400
invalid_input: invalid input401
auth.session_expired: session expired, sign in again403
auth.csrf_invalid: request refused: reload the page and try again403
auth.invalid_terminal: this terminal cannot be used here403
auth.otp_enrol_required: your group requires one-time codes: set them up to continue403
auth.password_change_required: you must change your password first403
forbidden: you do not have access to this action404
not_found: not found409
conflict: already exists500
internal: something went wrongts
import { staff } from "@/lib/noviqa"
const data = await staff.staff.delete(1001)bash
curl -X DELETE "$NOVIQA_API_URL/admin/v1/staff/1001" \
-H "Authorization: Bearer $NOVIQA_TOKEN"json
{
"success": true,
"code": "ok",
"message": "done",
"data": null,
"request_id": "5b7f2c1e"
}ts
staff.staff.delete(login: number, options?: RequestOptions): Promise<null>disable
POST
/admin/v1/staff/{login}/disableDisable a staff user
Stops the user from signing in and closes their sessions; answers the user. Already disabled = answered unchanged. Nobody may disable themselves; the target must be in the caller's scope and hold no right the caller lacks. No body. Writes a config journal line.
More details
Rights: the staff member needs every one of: config.staff.
Parameters
logininteger · pathrequiredStaff login.
Returns
Promise<Member>The answer's
data.Errors
400
invalid_input: invalid input401
auth.session_expired: session expired, sign in again403
auth.csrf_invalid: request refused: reload the page and try again403
auth.invalid_terminal: this terminal cannot be used here403
auth.otp_enrol_required: your group requires one-time codes: set them up to continue403
auth.password_change_required: you must change your password first403
forbidden: you do not have access to this action404
not_found: not found409
conflict: already exists500
internal: something went wrongts
import { staff } from "@/lib/noviqa"
const data = await staff.staff.disable(1001)bash
curl -X POST "$NOVIQA_API_URL/admin/v1/staff/1001/disable" \
-H "Authorization: Bearer $NOVIQA_TOKEN"json
{
"success": true,
"code": "ok",
"message": "done",
"data": {
"active": true,
"created_at": "2026-09-25T10:15:00Z",
"email": "ann@example.com",
"group": "real\\standard",
"group_scope": [
"string"
],
"ip_allow": [
"string"
],
"last_access": "2026-09-25T10:15:00Z",
"last_ip": "string",
"login": 1001,
"logs_months": 1,
"mailbox_name": "string",
"name": "Ann Smith"
},
"request_id": "5b7f2c1e"
}ts
staff.staff.disable(login: number, options?: RequestOptions): Promise<staff.Member>password
POST
/admin/v1/staff/{login}/passwordSet a staff user's password
Sets a new password and signs the user out of every session. The target must be in the caller's scope and hold no right the caller lacks. password is required. The password must be 8-16 characters (and at least the group's minimum length) with a lower case letter, an upper case letter, a digit and a symbol. Writes a config journal line (without the password).
More details
Rights: the staff member needs every one of: config.staff.
Parameters
logininteger · pathrequiredStaff login.
Request body
passwordstringthe new password
Returns
Promise<null>The answer's
data.Errors
400
auth.password_weak: password must be 8-16 characters with a lower, upper, digit and symbol400
invalid_input: invalid input401
auth.session_expired: session expired, sign in again403
auth.csrf_invalid: request refused: reload the page and try again403
auth.invalid_terminal: this terminal cannot be used here403
auth.otp_enrol_required: your group requires one-time codes: set them up to continue403
auth.password_change_required: you must change your password first403
forbidden: you do not have access to this action404
not_found: not found500
internal: something went wrongts
import { staff } from "@/lib/noviqa"
const data = await staff.staff.password(1001, {
password: "N3w#Passw0rd"
})bash
curl -X POST "$NOVIQA_API_URL/admin/v1/staff/1001/password" \
-H "Authorization: Bearer $NOVIQA_TOKEN" \
-H "Content-Type: application/json" \
--data-raw '{
"password": "N3w#Passw0rd"
}'json
{
"success": true,
"code": "ok",
"message": "done",
"data": null,
"request_id": "5b7f2c1e"
}ts
staff.staff.password(login: number, body: http.docStaffPassword, options?: RequestOptions): Promise<null>listReports
GET
/admin/v1/staff/{login}/reportsList a manager's report lines
The server report lines of a staff member: each opens the report configurations whose name matches path (a name or mask), whether the manager may see them at all (view), whether they may export them, and how many days back (0 = no limit). Ordered by path. A staff member outside the caller's group scope reads as not found.
More details
Rights: the staff member needs every one of: config.staff.
Parameters
logininteger · pathrequiredStaff login.
Returns
Promise<ManagerReport[]>The answer's
data.Errors
400
invalid_input: invalid input401
auth.session_expired: session expired, sign in again403
auth.invalid_terminal: this terminal cannot be used here403
auth.otp_enrol_required: your group requires one-time codes: set them up to continue403
auth.password_change_required: you must change your password first403
forbidden: you do not have access to this action404
not_found: not found500
internal: something went wrongts
import { staff } from "@/lib/noviqa"
const data = await staff.staff.listReports(1001)bash
curl -X GET "$NOVIQA_API_URL/admin/v1/staff/1001/reports" \
-H "Authorization: Bearer $NOVIQA_TOKEN"json
{
"success": true,
"code": "ok",
"message": "done",
"data": [
{
"can_export": true,
"depth_days": 1,
"id": 1,
"login": 1001,
"path": "real\\standard",
"updated_at": "2026-09-25T10:15:00Z",
"view": true
}
],
"request_id": "5b7f2c1e"
}ts
staff.staff.listReports(login: number, options?: RequestOptions): Promise<models.ManagerReport[]>createReports
POST
/admin/v1/staff/{login}/reportsAdd a manager report line
Opens reports to the staff member. path is required (1-255 characters, a report name or mask); depth_days is 0-36500 (0 = no limit); view defaults to true and can_export defaults to false. view false hides the report from the manager without dropping the line's can_export/depth_days settings. id and login in the body are ignored (the login comes from the URL). One line per path: a second one is a conflict. Writes a journal line. A staff member outside the caller's scope reads as not found.
More details
Rights: the staff member needs every one of: config.staff.
Parameters
logininteger · pathrequiredStaff login.
Request body
can_exportbooleandepth_daysinteger0 = no limit on how far back
idintegerloginintegerLogin is the numeric identity of every account, trader or staff.
pathstringname or mask
updated_atstringUTC time, RFC 3339.
viewbooleanmay see and run it at all; false hides it without dropping the line
Returns
Promise<ManagerReport>The answer's
data.Errors
400
invalid_input: invalid input401
auth.session_expired: session expired, sign in again403
auth.csrf_invalid: request refused: reload the page and try again403
auth.invalid_terminal: this terminal cannot be used here403
auth.otp_enrol_required: your group requires one-time codes: set them up to continue403
auth.password_change_required: you must change your password first403
forbidden: you do not have access to this action404
not_found: not found409
conflict: already exists500
internal: something went wrongts
import { staff } from "@/lib/noviqa"
const data = await staff.staff.createReports(1001, {
can_export: true,
depth_days: 90,
path: "Daily\\*",
view: true
})bash
curl -X POST "$NOVIQA_API_URL/admin/v1/staff/1001/reports" \
-H "Authorization: Bearer $NOVIQA_TOKEN" \
-H "Content-Type: application/json" \
--data-raw '{
"can_export": true,
"depth_days": 90,
"path": "Daily\\*",
"view": true
}'json
{
"success": true,
"code": "ok",
"message": "done",
"data": {
"can_export": true,
"depth_days": 1,
"id": 1,
"login": 1001,
"path": "real\\standard",
"updated_at": "2026-09-25T10:15:00Z",
"view": true
},
"request_id": "5b7f2c1e"
}ts
staff.staff.createReports(login: number, body: models.ManagerReport, options?: RequestOptions): Promise<models.ManagerReport>updateReports
PATCH
/admin/v1/staff/{login}/reports/{id}Change a manager report line
Changes only the fields sent (path, view, can_export, depth_days); the others keep their stored values. Same rules as adding. id and login in the body are ignored. A path another line of the member already has is a conflict. Writes a journal line.
More details
Rights: the staff member needs every one of: config.staff.
Parameters
logininteger · pathrequiredStaff login.
idinteger · pathrequiredReport line id.
Request body
can_exportbooleandepth_daysinteger0 = no limit on how far back
idintegerloginintegerLogin is the numeric identity of every account, trader or staff.
pathstringname or mask
updated_atstringUTC time, RFC 3339.
viewbooleanmay see and run it at all; false hides it without dropping the line
Returns
Promise<ManagerReport>The answer's
data.Errors
400
invalid_input: invalid input401
auth.session_expired: session expired, sign in again403
auth.csrf_invalid: request refused: reload the page and try again403
auth.invalid_terminal: this terminal cannot be used here403
auth.otp_enrol_required: your group requires one-time codes: set them up to continue403
auth.password_change_required: you must change your password first403
forbidden: you do not have access to this action404
not_found: not found409
conflict: already exists500
internal: something went wrongts
import { staff } from "@/lib/noviqa"
const data = await staff.staff.updateReports(1001, 1, {
can_export: false,
depth_days: 30,
path: "Daily\\Trades",
view: false
})bash
curl -X PATCH "$NOVIQA_API_URL/admin/v1/staff/1001/reports/1" \
-H "Authorization: Bearer $NOVIQA_TOKEN" \
-H "Content-Type: application/json" \
--data-raw '{
"can_export": false,
"depth_days": 30,
"path": "Daily\\Trades",
"view": false
}'json
{
"success": true,
"code": "ok",
"message": "done",
"data": {
"can_export": true,
"depth_days": 1,
"id": 1,
"login": 1001,
"path": "real\\standard",
"updated_at": "2026-09-25T10:15:00Z",
"view": true
},
"request_id": "5b7f2c1e"
}ts
staff.staff.updateReports(login: number, id: number, body: models.ManagerReport, options?: RequestOptions): Promise<models.ManagerReport>deleteReports
DELETE
/admin/v1/staff/{login}/reports/{id}Remove a manager report line
Removes one line of the staff member. Writes a journal line.
More details
Rights: the staff member needs every one of: config.staff.
Parameters
logininteger · pathrequiredStaff login.
idinteger · pathrequiredReport line id.
Returns
Promise<null>The answer's
data.Errors
400
invalid_input: invalid input401
auth.session_expired: session expired, sign in again403
auth.csrf_invalid: request refused: reload the page and try again403
auth.invalid_terminal: this terminal cannot be used here403
auth.otp_enrol_required: your group requires one-time codes: set them up to continue403
auth.password_change_required: you must change your password first403
forbidden: you do not have access to this action404
not_found: not found500
internal: something went wrongts
import { staff } from "@/lib/noviqa"
const data = await staff.staff.deleteReports(1001, 1)bash
curl -X DELETE "$NOVIQA_API_URL/admin/v1/staff/1001/reports/1" \
-H "Authorization: Bearer $NOVIQA_TOKEN"json
{
"success": true,
"code": "ok",
"message": "done",
"data": null,
"request_id": "5b7f2c1e"
}ts
staff.staff.deleteReports(login: number, id: number, options?: RequestOptions): Promise<null>