Web API
AdaptixC2 Server exposes a REST API for managing the teamserver. The API runs over HTTPS and uses JSON for data transfer.
Base URL: https://{host}:{port}{endpoint}
{host}— server IP address or domain{port}— teamserver port{endpoint}— base path defined in the profile configuration
If authentication fails, the web server will respond with a 404 page by default.
Authentication
The API uses JWT (JSON Web Tokens) for authentication. To obtain tokens, log in via /login.
POST /login
Authenticate a user and obtain JWT tokens.
Request Body:
{
"username": "string",
"password": "string",
"version": "string"
}username
string
Yes
Operator name
password
string
Yes
Operator password
version
string
No
Client version
Response (200 OK):
{
"access_token": "string",
"refresh_token": "string",
"version": "v2.0"
}Errors:
Invalid credentials — returns 404 (configurable error page)
POST /refresh
Refresh the access token using the refresh token.
Request
Send the refresh token in the header:
Authorization: Bearer <refresh_token>Response (200 OK):
{
"access_token": "string"
}OTP
OTP (One-Time Password) — one-time tokens with a short TTL (60 sec). Used for:
Secure file transfers (upload/download)
Establishing WebSocket connections (
/connect)Creating WebSocket channels (
/channel)
Every OTP route reads the token from the query parameter ?otp=.
TTL: OTP token is valid for 60 seconds after generation
One-time use: Each token can be used only once
Type isolation: A
connecttoken cannot be used on/channeland vice versaSecurity: The token contains no data — just a random 256-bit identifier
POST /otp/generate
Generate a one-time token. Requires an Access Token.
Request (JSON)
Universal request format:
type
string
Yes
OTP type (see below)
data
object
Depends on type
Type-specific JSON data
Response (200 OK):
Response (error):
connect
Client WebSocket connection
client_type
uint8
1 (UI)
Client type: 1=UI, 2=WEB, 3=CLI
console_team_mode
bool
false
Team-console mode
subscriptions
string[]
[]
Subscription categories
channel_tunnel
WebSocket channel for a tunnel
tunnel_id
int64
Yes
Tunnel ID
channel_id
int64
Yes
Channel ID
mode
string
For SOCKS5
Mode: tcp or udp
host
string
For SOCKS
Target host
port
string
For SOCKS
Target port (1-65535)
channel_terminal
WebSocket channel for a terminal
agent_id
int64
Yes
Agent ID
terminal_id
int64
Yes
Terminal ID
program
string
Yes
Program to run
size_h
int
Yes
Terminal height (rows)
size_w
int
Yes
Terminal width (columns)
oem_cp
int
Yes
OEM Code Page
channel_agent_build
WebSocket channel for agent build
agent_name
string
Yes
Agent name to build
listeners_name
string[]
Yes
List of listener names
tmp_upload
Temporary file upload
id
int64
Id of a temporary upload already registered on the server
Full channel creation flow example (tunnel)
Make sure the client is connected via
/connectPOST
/otp/generate(Authorization: Bearer <access_token>) Body:{"type": "channel_tunnel", "data": {"tunnel_id": "...", "channel_id": "...", ...}}→ obtain otp_tokenGET
/channel?otp=<otp_token>→ WebSocket upgrade
POST /otp/upload/temp?otp=
Upload bytes into a temporary upload that was already registered. The token type must be tmp_upload, and its id must still be in the server's temporary-upload map.
Request
multipart/form-data
file
file
The file
Response (200 OK): an empty body.
A wrong token type, an unknown id, a missing file field, or a save error is a 404 text body with the error string. A bad or expired token is rejected by the OTP middleware before this handler runs.
GET /otp/download/sync?otp=
Download a finished file. The token type must be download. The server returns the file only when that download's state is finished.
Response (200 OK)
the file bytes, with:
Content-Disposition: attachment; filename="<on-disk name>"Content-Type: application/octet-streamContent-Length: <size>
The filename is the base name of the stored path, not a separate display name. If the id is unknown or the download is not finished, the response is 404 with a text error (File not found: … or Download not finished).
Client Management
POST /sync
Asks the server to push the current state to this operator's already open WebSocket. The handler does not read the body.
Request
Header Authorization: Bearer <access_token>
Response (200 OK):
POST /subscribe
Subscribe the client to event categories.
Request
Header Authorization: Bearer <access_token>
categories
string[]
Yes
List of categories to subscribe to
console_team_mode
boolean
No
Team-console mode
Response (200 OK):
GET /connect?otp=
Establish a WebSocket connection for real-time updates. Requires an OTP token of type connect.
Response: WebSocket upgrade
All connection parameters (client_type, subscriptions, etc.) are passed when generating the OTP, not when connecting.
GET /channel?otp=
Create a WebSocket channel. The token type must start with channel_ (channel_tunnel, channel_terminal, or channel_agent_build). A token whose type is exactly channel is rejected.
Response: WebSocket upgrade
The channel type and initialization data are passed when generating the OTP, not when connecting.
Listener
GET /listener/list
Get the list of all listeners.
Request
Header Authorization: Bearer <access_token>
Response (200 OK):
JSON array of ListenerData. An empty server returns null, not [], because the handler marshals a nil slice.
GET /listener/catalog
Registered listener types (not running instances).
Request
Header Authorization: Bearer <access_token>
Response (200 OK):
axs — the contents of ax_config.axs (the listener fields UI definition).
POST /listener/create
Create a new listener.
Request
Header Authorization: Bearer <access_token>
name
string
Unique listener name (a-zA-Z0-9_-)
type
string
Listener type (depends on the extender)
config
string
JSON listener configuration
tags
string
Tags (free-form, e.g. "prod,eu"); optional
Response:
POST /listener/edit
Edit a listener configuration.
Request
Header Authorization: Bearer <access_token>
name
string
Listener name
type
string
Listener type
config
string
JSON listener configuration
tags
string
New tags (empty string clears); optional
Response:
POST /listener/stop
Stop and delete listener.
Request
Header Authorization: Bearer <access_token>
Response:
POST /listener/tags
Set arbitrary tags on a listener.
Request
Header Authorization: Bearer <access_token>
Response:
Agent
GET /agent/list
Get the list of all agents.
Request
Header Authorization: Bearer <access_token>
Response (JSON)
GET /agent/catalog
Registered agent types (not live sessions).
Request
Header Authorization: Bearer <access_token>
Response (JSON)
GET /agent/generate
Generate an agent payload.
Request
Header Authorization: Bearer <access_token>
agent
string
Yes
Agent type name
listener_name
string[]
Yes
List of listener names
config
string
Yes
JSON agent configuration
save_to_store
boolean
No
Register the payload in the Payload Store (default true)
description
string
No
Description for the Payload Store entry
Response (JSON)
message format: file name and content are base64-encoded and separated by a colon.
The client generates payloads through this endpoint (REST + Bearer token, 180-second timeout) when the WebSocket build-channel OTP is unavailable.
POST /agent/command/execute
Execute a command on an agent.
Request
Header Authorization: Bearer <access_token>
id
int64
Agent ID
ui
boolean
Command from the UI
cmdline
string
Command line
data
string
JSON with command arguments
ax_hook_id
string
Hook ID (optional)
ax_handler_id
string
Handler ID (optional)
wait_answer
boolean
When true, the HTTP call waits until TsAgentCommand returns. The agent output is not included in this response
Response:
POST /agent/command/raw
Execute a raw command on an agent through the server-side AxScript engine. The command is parsed and executed on the server side without client-side hooks.
Request
Header Authorization: Bearer <access_token>
id
int64
Agent ID
cmdline
string
Command line to execute
Response
GET /agent/console/list
Cursor pagination of the console history for the specified agent. Returns messages with Id < after_id (newest first). When around_id > 0 — loads N messages around the given ID (used to jump to context from search results).
Request (JSON)
Header Authorization: Bearer <access_token>
Query Parameters:
agent_id
int64
(required)
Agent ID (decimal)
limit
int
200
Max entries (cap 2000)
after_id
int64
0
Cursor: return messages with Id < after_id. 0 = the newest ones.
around_id
int64
0
Load N messages around this ID (overrides after_id).
Response (200 OK):
total— total number of records in the DB for this agent.oldest_id— ID of the oldest message in the response (used as the cursor for the next request).has_more—trueif the DB has records older thanoldest_id.
Each items element is the original sync packet, stored as it was sent over WebSocket. The example is TYPE_AGENT_CONSOLE_OUT (type 105). Other stored packets are TYPE_AGENT_CONSOLE_TASK_SYNC (106) and TYPE_AGENT_CONSOLE_TASK_UPD (107); those add a_task_id, a_cmdline, a_client, and completion fields.
Errors (HTTP 400):
agent_id is required— parameter missing.agent_id must be an integer— invalid format.
GET /agent/console/search
Full-text search over the agent console history. Searches the a_cmdline, a_message, a_text, a_client fields of the JSON packets.
Request (JSON)
Header Authorization: Bearer <access_token>
Query Parameters:
agent_id
int64
(required)
Agent ID
q
string
(required)
Search string
limit
int
50
Max results (cap 200)
offset
int
0
Result pagination offset
Response (200 OK):
snippet— highlighted text fragment (up to 200 characters) around the match.packet— the original JSON sync packet (valid JSON; invalid packets are skipped).
POST /agent/set/mark
Set a mark on agents.
Request
Header Authorization: Bearer <access_token>
Response:
POST /agent/set/color
Set the color of agents.
Request
Header Authorization: Bearer <access_token>
agent_id_array
int64[]
Array of agent IDs
bc
string
Background color (hex or name)
fc
string
Foreground color (hex or name)
reset
boolean
Reset color to default
Response:
POST /agent/update/data
Update agent data.
Request
Header Authorization: Bearer <access_token>
All fields except agent_id are optional. Send only the fields you want to update.
agent_id
int64
Agent ID (required)
internal_ip
string
Internal IP
external_ip
string
External IP
gmt_offset
int
GMT offset
acp
int
ANSI Code Page
oemcp
int
OEM Code Page
pid
string
Process ID
tid
string
Thread ID
arch
string
Architecture (x86/x64)
elevated
boolean
Elevated privileges
process
string
Process name
os
int
OS code
os_desc
string
OS description
domain
string
Domain
computer
string
Computer name
username
string
User name
impersonated
string
Impersonated user
tags
string
Tags
mark
string
Mark
color
string
Color (format: "bg-fg")
Response:
GET /agent/command_group/list?agent_id=
Command groups of an agent with their state (enabled/disabled). Groups are registered by the agent type's AxScript via ax.create_commands_group; overrides are stored per agent.
Request
Header Authorization: Bearer <access_token>
Query Parameters:
agent_id
int64
(required)
Agent ID.
Response (200 OK):
message — array of groups {name, description, enabled} (per-agent overrides applied).
POST /agent/command_group/set
Enable/disable a command group for a specific agent. Disabled groups are hidden from the console autocomplete and filtered out by the Commander.
Request
Header Authorization: Bearer <access_token>
agent_id
int64
Agent ID.
group
string
Group name (required).
enabled
bool
New state.
Response:
Groups
GET /group/list
List of groups in the given scope.
Request
Header Authorization: Bearer <access_token>
Response
POST /group/create
Create a new group.
Request
Header Authorization: Bearer <access_token>
scope
string
"agents" or "tasks".
name
string
Group name.
parent_id
int64
Parent ID or 0 for a root group.
Response
POST /group/members
Change the membership of a group.
Request
Header Authorization: Bearer <access_token>
Response
POST /group/move_member
Move an agent between groups
Request
Header Authorization: Bearer <access_token>
Response
POST /group/reparent
Move a group under a new parent.
Request
Header Authorization: Bearer <access_token>
Response
Tasks
GET /agent/task/list
Paginated list of agent tasks (or all agents) with filtering and sorting. Includes both running and completed tasks (only those with Sync = true). For still-running JOB tasks, the output (Message / ClearText / MessageType) is overlaid with the accumulated live output from RunningJobs — progress is visible before the task finishes.
Request
Header Authorization: Bearer <access_token>
Query Parameters:
agent_id
int64
omitted (all)
Agent ID. Omit it, or leave it empty, to list every agent. A non-integer value is rejected
completed
string
omitted
1/true or 0/false. Omit it to return both running and finished tasks
limit
int
100
Max entries (cap 1000)
offset
int
0
Pagination offset
q
string
""
Filter expression (see below)
sort
string
"StartDate"
Sort column
order
string
"desc"
Direction: asc or desc
Sortable columns (sort): TaskId, TaskType, AgentId, Client, User, Computer, StartDate, FinishDate, CommandLine, Completed, Message. Unrecognized values are ignored (falls back to StartDate DESC).
Filter expression (q): mini-DSL for filtering by the fields TaskId, AgentId, Client, User, Computer, CommandLine, Message, ClearText (substring/LIKE):
Words — regular terms (
shell⇒LIKE '%shell%'against at least one column).&— AND (whitespace between terms also acts as AND).|— OR.^(expr)— NOT.(expr)— grouping.Nesting depth up to 16, string length up to 512 chars.
Examples: shell, shell & ^(failed), download | upload, (admin | system) & ^(test).
Response
a_task_type: 0 local, 1 task, 2 browser, 3 job, 4 tunnel, 5 proxy data.
Errors (HTTP 400):
invalid filter: ...— syntax error inq.agent <id> not found— the agent does not exist (only ifagent_idis non-empty).
POST /agent/task/cancel
Cancel tasks — both queued and already dispatched to the agent
Request
Header Authorization: Bearer <access_token>
agent_id
int64
Agent ID
tasks_array
int64[]
Array of task IDs to cancel
Response
POST /agent/task/delete
Remove task from Task Manager
Request
Header Authorization: Bearer <access_token>
Response
POST /agent/task/save
Save data to Task Manager
Request
Header Authorization: Bearer <access_token>
agent_id
int64
Agent ID
command_line
string
Command line
message_type
int
Message type
message
string
HTML message
clear_text
string
Text message
Response
POST /agent/task/hook
Send the result of a task hook
Request
Header Authorization: Bearer <access_token>
a_id
int64
Agent ID
a_task_id
int64
Task ID
a_hook_id
string
Hook ID
a_job_index
int
Job index
a_msg_type
int
Message type
a_message
string
HTML message
a_text
string
Text message
a_completed
boolean
Task is complete
Response
Chat
GET /chat/history
Paginated message history (newest first).
Request
Header Authorization: Bearer <access_token>
limit
int
50
Number of messages. A value outside 1..200 is replaced with 50.
before_id
int64
—
Load messages older than this ID (for pagination).
Response
GET /chat/search
Full-text search over messages.
Request
Header Authorization: Bearer <access_token>
q
string
—
Search string (LIKE match).
limit
int
50
Max results. A value outside 1..200 is replaced with 50.
before_id
int64
—
Pagination (older than this ID).
Response
POST /chat/clear
Hard-delete all messages from the chat.
Request
Header Authorization: Bearer <access_token>
Response
POST /chat/send
Send message to chat
Request
Header Authorization: Bearer <access_token>
message
string
Message text (Markdown supported).
reply_to_id
int64
ID of the message being replied to. 0 = no reply.
reply_to_name
string
Author name of the original message (for the preview). Empty when reply_to_id = 0.
Response
POST /chat/<id>/edit
Edit a message (only the author can edit)
Request
Header Authorization: Bearer <access_token>
Response
POST /chat/<id>/delete
Soft-delete a message (only the author can delete).
Request
Header Authorization: Bearer <access_token>
Response
POST /chat/<id>/react
Toggle the user's reaction on a message. Supported reactions: 👍 ❤️ 🔥 👀 🚀 😂 ✅ ✓ ❌ 💩
Request
Header Authorization: Bearer <access_token>
Response
GET /chat/todo
Get the current contents of the Shared ToDo.
Request
Header Authorization: Bearer <access_token>
Response
POST /chat/todo
Overwrite the contents of the Shared ToDo.
Request
Header Authorization: Bearer <access_token>
Response
Download
GET /download/list
Paginated list of downloads. Supports filtering and sorting
Request
Header Authorization: Bearer <access_token>
Query Parameters:
agent_id
int64
omitted (all)
Agent ID. Omit it to list every agent. A non-integer value is rejected
limit
int
100
Max entries (cap 1000)
offset
int
0
Pagination offset
q
string
""
Filter expression
sort
string
"Date"
Sort column
order
string
"desc"
Direction: asc or desc
Sortable columns (sort): FileId, AgentId, AgentName, User, Computer, RemotePath, TotalSize, RecvSize, Date, State.
Filter expression (q): mini-DSL with terms/&/|/^()/(...) (see /agent/task/list). Filter columns: FileId, AgentId, AgentName, User, Computer, RemotePath.
Response
POST /download/sync
Get the contents of a file.
Request
Header Authorization: Bearer <access_token>
Response
POST /download/set/tag
Bulk set/clear the tag of a group of downloads.
Request
Header Authorization: Bearer <access_token>
Response
Upload
GET /upload/list
Paginated list of uploads
Request
Header Authorization: Bearer <access_token>
Query Parameters:
agent_id
int64
0 (all)
Filter by agent; 0 or empty — all
offset
int
0
Offset from the start of the result set
limit
int
100
Max entries per page (cap 1000)
q
string
empty
Filter mini-DSL (term & term, ^(neg), (group), `
sort
string
Date
Sort column (see table below)
order
string
desc
asc or desc
Sortable columns: FileId, AgentId, AgentName, User, Computer, RemotePath, TotalSize, Progress, Date, State, Tag, Kind, ArtifactName, ArtifactType.
Filterable columns (q): FileId, AgentId, AgentName, User, Computer, RemotePath, Tag, ArtifactName, ArtifactType.
Response
POST /download/delete
Bulk cancel-and-remove uploads.
Request
Header Authorization: Bearer <access_token>
Response
Screenshot
GET /screen/list
Paginated list of screenshots with filtering and sorting.
Request
Header Authorization: Bearer <access_token>
Query Parameters:
limit
int
100
Max entries (cap 1000)
offset
int
0
Pagination offset
q
string
""
Filter expression
sort
string
"Date"
Sort column
order
string
"desc"
Direction: asc or desc
Sortable columns (sort): ScreenId, User, Computer, Note, Date.
Filter expression (q): Filter columns: ScreenId, User, Computer, Note.
Response
GET /screen/image?screen_id=
Raw PNG for one screenshot.
Request
Header Authorization: Bearer <access_token>
Response
body is image/png. An unknown id returns {"ok":false,"message":"..."}.
POST /screen/setnote
Set a note for a screenshot
Request
Header Authorization: Bearer <access_token>
Response
Creds
GET /creds/list
Paginated list of credentials with filtering and sorting.
Request
Header Authorization: Bearer <access_token>
Query Parameters:
agent_id
int64
omitted (all)
Source agent ID. Omit it to list every agent. A non-integer value is rejected
limit
int
100
Max entries (cap 1000)
offset
int
0
Pagination offset
q
string
""
Filter expression
sort
string
"Date"
Sort column
order
string
"desc"
Direction: asc or desc
Sortable columns (sort): CredId, Username, Password, Realm, Type, Tag, Date, Storage, AgentId, Host.
Filter expression (q): Filter columns: CredId, Username, Password, Realm, Type, Tag, Storage, AgentId, Host.
Response (200 OK):
POST /creds/add
Store credentials to Creds Manager
Request Body:
username
string
User name
password
string
Password / hash
realm
string
Domain / realm
type
string
Type (plaintext, ntlm, etc.)
tag
string
Tag
storage
string
Source
host
string
Host
Response:
Targets
GET /targets/list
Paginated list of targets with filtering and sorting.
Request
Header Authorization: Bearer <access_token>
Query Parameters:
limit
int
100
Max entries (cap 1000)
offset
int
0
Pagination offset
q
string
""
Filter expression
sort
string
"Date"
Sort column
order
string
"desc"
Direction: asc or desc
Sortable columns (sort): TargetId, Computer, Domain, Address, Tag, Os, OsDesk, Date, Info, Alive.
Filter expression (q): mini-DSL (see /agent/task/list). Filter columns: TargetId, Computer, Domain, Address, Tag, OsDesk, Info.
Response (200 OK):
t_os uses the same values as a_os: 0 unknown, 1 Windows, 2 Linux, 3 macOS.
POST /targets/add
Store targets to Targets Manager
Request:
computer
string
Computer name
domain
string
Domain
address
string
IP address
os
int
OS code
os_desk
string
OS description
tag
string
Tag
info
string
Additional information
alive
boolean
Alive status
Response:
Tunnel
GET /tunnel/list
Get a list of tunnels with full information
Request
Header Authorization: Bearer <access_token>
Response
POST /start/socks5
Start socks5 proxy
Request:
Header Authorization: Bearer <access_token>
agent_id
int64
Yes
Agent ID
listen
boolean
No
Listening mode
desc
string
No
Tunnel description
l_host
string
Yes
Local host to bind
l_port
int
Yes
Local port (1-65535)
use_auth
boolean
No
Use authentication
username
string
When use_auth=true
User name
password
string
When use_auth=true
Password
Response:
POST /start/socks4
Start socks4 proxy
Request:
Header Authorization: Bearer <access_token>
agent_id
int64
Yes
Agent ID
listen
boolean
No
Listening mode
desc
string
No
Tunnel description
l_host
string
Yes
Local host
l_port
int
Yes
Local port (1-65535)
Response:
POST /start/lportfwd
Start local port forwarding
Request
Header Authorization: Bearer <access_token>
agent_id
int64
Yes
Agent ID
listen
boolean
No
Listening mode
desc
string
No
Description
l_host
string
Yes
Local host
l_port
int
Yes
Local port (1-65535)
t_host
string
Yes
Target host
t_port
int
Yes
Target port (1-65535)
Response:
POST /start/rportfwd
Start reverse port forwarding
Request
Header Authorization: Bearer <access_token>
agent_id
int64
Yes
Agent ID
listen
boolean
No
true — server tunnel, false — client tunnel (target on the client side)
desc
string
No
Description
port
int
Yes
Port on the agent (1-65535)
t_host
string
Yes
Target host
t_port
int
Yes
Target port (1-65535)
Modes:
listen=true(server-side) — the agent's inbound connections are proxied by the server tot_host:t_port.listen=false(client-side) — thet_host:t_porttarget is dialed by the owning client: on an inbound connection the agent sendsTsTunnelConnectionAccept, the server creates a pending channel and delivers the sync packetTYPE_TUNNEL_ACCEPT (0x5a)to the owner; the client dials the target locally (15-second timeout) and attaches to the channel via channel-OTP (mode="reverse"), or rejects it viaPOST /tunnel/channel/nack. The owner has 45 seconds to attach (reverseAttachTimeout).
Response:
Payloads
GET /payload/list
Paginated payload list.
Request
Header Authorization: Bearer <access_token>
Query Parameters:
show_hidden
bool
false
Include hidden payloads.
q
string
—
Filter DSL (same as /agent/task/list).
sort
string
Created
Sort column.
order
string
desc
asc / desc.
limit
int
100
Max entries.
offset
int
0
Offset.
Response
POST /payload/set_color
Payload row colour.
Request
Header Authorization: Bearer <access_token>
Response:
POST /payload/remove
Remove payloads. hard=true — delete both the record and the on-disk file; hard=false — record only (the file stays).
Request
Header Authorization: Bearer <access_token>
POST /payload/import
Import an external file into the store.
Request
Header Authorization: Bearer <access_token>
name
string
Name (default imported).
agent_type
string
Agent type (default imported).
artifact
string
Artifact kind.
arch
string
Architecture.
listeners
[]string
Bound listeners.
content
string
Base64 file content (required).
config
string
Build-config JSON.
Response:
Services
GET /service/list
Get the list of loaded services.
Request
Header Authorization: Bearer <access_token>
Response
GET /service/catalog
Registered services with their AxScript command catalogs.
Request
Header Authorization: Bearer <access_token>
Response
POST /plugin/service/call
Call a service function.
Request
Header Authorization: Bearer <access_token>
Response:
POST /plugin/service/call_wait
Synchronous service function call (TsPluginServiceCallWait). Blocks until the CallRPC JSON result or timeout.
Request
Header Authorization: Bearer <access_token>
Response:
POST /plugin/agent/call
Asynchronous call of an agent-plugin function for a specific session (TsPluginAgentCall).
Request
Header Authorization: Bearer <access_token>
Response:
POST /plugin/listener/call
Asynchronous call of a listener-plugin function for a specific instance (TsPluginListenerCall).
Request
Header Authorization: Bearer <access_token>
Response:
Events
GET /events/handlers
Paginated handler list with filtering.
Request
Header Authorization: Bearer <access_token>
Query Parameters:
offset
int
0
Offset
limit
int
50
Max entries (cap 1000; 0 → 50)
q
string
—
Search over id/name/description/group/event/source/last_error
event
string
—
Exact event type (e.g. agent.new)
source
string
—
Source: handler (AxScript) / extender / core
group
string
—
Exact group name
enabled
string
—
true/1 — enabled only; false/0 — disabled only
Response
POST /events/handlers/register
Register a new handler (or update an existing one when id is passed). The script is dry-compiled: it must define function handler(event) (or onEvent(event)), otherwise the registration is rejected.
Request
Header Authorization: Bearer <access_token>
id
string
Optional. ID of an existing handler — to update it.
name
string
Required. Name (sanitised: letters/digits/-/_).
group
string
Optional. Grouping.
description
string
Optional. Description.
event
string
Required. Event type (see KnownEventTypes, e.g. agent.new).
script
string
Required. JS code with handler(event).
enabled
bool
Optional (default true).
filters
object
Optional. EventFilter (see below).
Response:
POST /events/handlers/get
Fetch a full handler (including the source script).
Request
Header Authorization: Bearer <access_token>
Response:
Errors:
id is required.event handler not found.
POST /events/handlers/enable
Enable a handler.
Request
Header Authorization: Bearer <access_token>
Response:
POST /events/handlers/disable
Disable a handler
Request
Header Authorization: Bearer <access_token>
Response:
POST /events/handlers/remove
Remove a handler.
Request
Header Authorization: Bearer <access_token>
Response:
POST /events/mute
Mute an event type: all hook dispatch for this type is suppressed (both AxScript handlers and extender hooks).
Request
Header Authorization: Bearer <access_token>
Response:
POST /events/mutes
List of muted event types.
Request
Header Authorization: Bearer <access_token>
Response:
POST /events/types
Sorted list of all valid event types — system (KnownEventTypes) plus the custom domain.action format.
Request
Header Authorization: Bearer <access_token>
Response:
Logs
GET /logs/list
Paginated reads from the server-side LogManager ring buffer
Request
Header Authorization: Bearer <access_token>
Query Parameters:
limit
int
200
Max entries in the response. Cap 2000.
offset
int
0
How many most-recent entries to skip (ignored when before_id is set).
before_id
int64
—
Return entries with Id < before_id (cursor pagination for "Load earlier").
source
string
—
Filter by the source field (server, listener, agent, axscript, service).
category
string
—
Filter by category.
q
string
—
Substring: matches source, category, the log-source key, and the entry text (message).
Response
Last updated