Appearance
staff.journal
4 methods on staff.journal. Each returns the answer's data and throws NoviqaError on a failed answer.
list
GET
/admin/v1/journalSearch the journal
Journal lines of every service, newest first (by id). Rows: platform-wide lines plus lines about groups in the caller's group scope, no older than the caller's history limit in months (an older from is moved forward). Filters, all optional and combined: from (inclusive) and to (exclusive), RFC3339 times; category auth, config, trade, account, system, network, history, api or notifications; level debug, info, warning or error; min_level uses the same values and defaults to info. Set min_level=debug for explicit diagnostic investigation (or exact level=debug). Successful configuration field changes are DEBUG, including read classification of historical INFO fields; stored audit records are never rewritten. service (up to 50 characters) and source (up to 100) exact; action exact event code, e.g. datafeed.updated; symbol exact symbol name the line is about; actor the login that acted; target the account acted on; login either of them; text (up to 200 characters) supports words, AND (&), OR (|), NOT (-/^), exact #ticket references. Structured filters: module, channel (web/mobile/desktop/service/unknown), terminal, platform, correlation_id, Channel and platform are observed client metadata, not security assertions. Browser Origin/Fetch hints label admin/manager browser events web; absent evidence stays unknown. request_id, reference_kind, reference_id, reason and outcome. Date searches include archived files automatically. Set trace=true with a request/correlation or lifecycle reference filter to follow related order, deal and position events. Trace expansion stays inside the requested date range and authorized groups; bounded expansion fails explicitly rather than returning a partial trace. Paging by cursor: before = the smallest id you have, for older lines; limit 1-500, default 100. Set projection=summary for compact pages without details/params, including lifecycle traces and WebSocket snapshot reads. All matching lines and their metadata/detail_ref remain; no history actions are coalesced. Omit projection or set full for the legacy full page. For an explicit immutable detail read, send line_id from detail_ref with from/to spanning that timestamp (at most one second). This exact detail lookup has no implicit severity minimum and returns at most one full authorized record, disallows trace expansion and summary projection, and has a five-second query deadline. No match or a line outside current group/history scope returns an empty list. search_message preserves masked original wording when the display message was humanized.
More details
Rights: the staff member needs every one of: server.logs.
Parameters
projectionstring · querysummary omits details/params; full or absent preserves legacy pages
line_idstring · querytraceboolean · querymodulestring · querychannelstring · queryplatformstring · queryterminalstring · querycorrelation_idstring · queryrequest_idstring · queryreference_kindstring · queryreference_idstring · queryreasonstring · queryoutcomestring · queryfromstring · querytostring · querycategorystring · querylevelstring · querymin_levelstring · queryservicestring · querysourcestring · queryactionstring · querysymbolstring · queryactorinteger · querytargetinteger · querylogininteger · queryactor or account acted on
textstring · querybeforeinteger · querylimitinteger · queryReturns
Promise<Entry[]>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.journal.list({
projection: "string",
line_id: "string",
trace: true
})bash
curl -X GET "$NOVIQA_API_URL/admin/v1/journal?projection=string&line_id=string&trace=true" \
-H "Authorization: Bearer $NOVIQA_TOKEN"json
{
"success": true,
"code": "ok",
"message": "done",
"data": [
{
"action": "string",
"actor_ip": "string",
"actor_login": 1,
"at": "2026-09-25T10:15:00Z",
"category": "auth",
"channel": "string",
"correlation_id": "string",
"detail_ref": {
"at": "2026-09-25T10:15:00Z",
"line_id": "3f2a9c1e-8b7d-4e6f-a5c4-1b2d3e4f5a6b"
},
"details": null,
"id": 1,
"level": "debug",
"line_id": "3f2a9c1e-8b7d-4e6f-a5c4-1b2d3e4f5a6b"
}
],
"request_id": "5b7f2c1e"
}ts
staff.journal.list(query?: { projection?, line_id?, trace?, module?, channel?, platform?, terminal?, correlation_id?, request_id?, reference_kind?, reference_id?, reason?, outcome?, from?, to?, category?, level?, min_level?, service?, source?, action?, symbol?, actor?, target?, login?, text?, before?, limit? }, options?: RequestOptions): Promise<journal.Entry[]>days
GET
/admin/v1/journal/daysJournal size per day
The matching row count and approximate stored size, grouped by day, oldest first. Uses the same structured filters, lifecycle trace and access scope as journal search across recent and archived files. Cursor and limit are ignored. to defaults to now and from to 30 days before to (or the caller's history limit if shorter).
More details
Rights: the staff member needs every one of: server.logs.
Parameters
projectionstring · querysummary omits details/params; full or absent preserves legacy pages
line_idstring · querytraceboolean · querymodulestring · querychannelstring · queryplatformstring · queryterminalstring · querycorrelation_idstring · queryrequest_idstring · queryreference_kindstring · queryreference_idstring · queryreasonstring · queryoutcomestring · queryfromstring · querytostring · querycategorystring · querylevelstring · querymin_levelstring · queryservicestring · querysourcestring · queryactionstring · querysymbolstring · queryactorinteger · querytargetinteger · querylogininteger · queryactor or account acted on
textstring · querybeforeinteger · querylimitinteger · queryReturns
Promise<DaySize[]>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.journal.days({
projection: "string",
line_id: "string",
trace: true
})bash
curl -X GET "$NOVIQA_API_URL/admin/v1/journal/days?projection=string&line_id=string&trace=true" \
-H "Authorization: Bearer $NOVIQA_TOKEN"json
{
"success": true,
"code": "ok",
"message": "done",
"data": [
{
"bytes": 1,
"day": "2026-09-25T10:15:00Z",
"rows": 1
}
],
"request_id": "5b7f2c1e"
}ts
staff.journal.days(query?: { projection?, line_id?, trace?, module?, channel?, platform?, terminal?, correlation_id?, request_id?, reference_kind?, reference_id?, reason?, outcome?, from?, to?, category?, level?, min_level?, service?, source?, action?, symbol?, actor?, target?, login?, text?, before?, limit? }, options?: RequestOptions): Promise<journal.DaySize[]>export
GET
/admin/v1/journal/exportExport the journal as CSV
Every line of the same search (the filters of the journal search; before starts the export below that id, limit is ignored), newest first, as a CSV attachment. More than 100 000 rows or 64 MiB returns an explicit error; narrow filters. journal-YYYYMMDD-HHMMSS.csv. Columns: id, time (UTC, 2006-01-02 15:04:05.000), service, source, category, level, login (the account acted on, else the actor), group, ip, message, module, channel, terminal, platform, correlation_id, request_id, reason, outcome, references. Cells starting with = + - @ are prefixed with ' so spreadsheets do not run them.
More details
Rights: the staff member needs every one of: server.logs, export.
Parameters
projectionstring · querysummary omits details/params; full or absent preserves legacy pages
line_idstring · querytraceboolean · querymodulestring · querychannelstring · queryplatformstring · queryterminalstring · querycorrelation_idstring · queryrequest_idstring · queryreference_kindstring · queryreference_idstring · queryreasonstring · queryoutcomestring · queryfromstring · querytostring · querycategorystring · querylevelstring · querymin_levelstring · queryservicestring · querysourcestring · queryactionstring · querysymbolstring · queryactorinteger · querytargetinteger · querylogininteger · queryactor or account acted on
textstring · querybeforeinteger · querylimitinteger · queryReturns
Promise<Response>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.journal.export({
projection: "string",
line_id: "string",
trace: true
})bash
curl -X GET "$NOVIQA_API_URL/admin/v1/journal/export?projection=string&line_id=string&trace=true" \
-H "Authorization: Bearer $NOVIQA_TOKEN"ts
// text/csv file: the SDK returns the raw Responsets
staff.journal.export(query?: { projection?, line_id?, trace?, module?, channel?, platform?, terminal?, correlation_id?, request_id?, reference_kind?, reference_id?, reason?, outcome?, from?, to?, category?, level?, min_level?, service?, source?, action?, symbol?, actor?, target?, login?, text?, before?, limit? }, options?: RequestOptions): Promise<Response>servers
GET
/admin/v1/journal/serversList journal servers
Every service that has written to the journal since from (RFC3339; empty = the last 30 days, or the caller's history limit if shorter), with lines written and last_at. A service here is one of the platform's own processes (gateway, execution, marketdata, …), not a client-facing brand.
More details
Rights: the staff member needs every one of: server.logs.
Parameters
fromstring · queryRFC3339 time; empty = 30 days back.
Returns
Promise<Server[]>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.journal.servers({
from: "string"
})bash
curl -X GET "$NOVIQA_API_URL/admin/v1/journal/servers?from=string" \
-H "Authorization: Bearer $NOVIQA_TOKEN"json
{
"success": true,
"code": "ok",
"message": "done",
"data": [
{
"last_at": "2026-09-25T10:15:00Z",
"lines": 1,
"service": "string"
}
],
"request_id": "5b7f2c1e"
}ts
staff.journal.servers(query?: { from? }, options?: RequestOptions): Promise<journal.Server[]>