Diagnostics AutoPilot — analysis sessions, path monitoring, packet capture, and SIEM/SCP connectors. Auto-generated from the platform OpenAPI schema so it matches the running API.
REST API for this feature — 61 operations across 37 resource paths, auto-generated from the platform's live OpenAPI schema (drf-spectacular).
Base URL
https://<your-versus-host>/api· AuthAuthorization: Bearer <JWT>(fromPOST /api/auth/token/) · 📄 Download the OpenAPI spec for Postman/Insomnia/Swagger · see the API overview for pagination, filtering, and errors.
GET /api/diagnostics/feed/GET the live incident feed (recent incident sessions + status).
Responses: 200
POST /api/diagnostics/poll/POST — run one feed poll immediately (admin-only).
Responses: 200
GET /api/diagnostics/settings/GET / PUT the per-tenant Diagnostics settings (admin-only).
Responses: 200
POST /api/diagnostics/settings/GET / PUT the per-tenant Diagnostics settings (admin-only).
Responses: 200
PUT /api/diagnostics/settings/GET / PUT the per-tenant Diagnostics settings (admin-only).
Responses: 200
POST /api/diagnostics/simulate-incident/POST — inject sample incidents to exercise the feed (admin-only).
Responses: 200
POST /api/throughline/path-diagnose/Network Path Diagnostics — return the client→server hop path plus the
Responses: 200
GET /api/pathmon/check-catalog/GET /api/pathmon/check-catalog/ — the checks offered as checkboxes at monitor
Responses: 200
GET /api/pathmon/monitors/GET/POST /api/pathmon/monitors/ — list + create path monitors (tenant-scoped).
Responses: 200
POST /api/pathmon/monitors/GET/POST /api/pathmon/monitors/ — list + create path monitors (tenant-scoped).
Responses: 200
GET /api/pathmon/monitors/{id}/GET/DELETE /api/pathmon/monitors/<id>/
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | integer |
Responses: 200
DELETE /api/pathmon/monitors/{id}/GET/DELETE /api/pathmon/monitors/<id>/
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | integer |
Responses: 204
POST /api/pathmon/monitors/{id}/build/POST /api/pathmon/monitors/<id>/build/ — discover the path + seed default checks.
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | integer |
Responses: 200
GET /api/pathmon/monitors/{id}/dashboard/GET /api/pathmon/monitors/<id>/dashboard/ — per-hop health + recent events.
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | integer |
Responses: 200
POST /api/pathmon/monitors/{id}/run/POST /api/pathmon/monitors/<id>/run/ — run this monitor's checks now.
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | integer |
Responses: 200
POST /api/pathmon/probe-path/POST /api/pathmon/probe-path/ body {source_ip, dest_ip, hostname?}
Responses: 200
POST /api/pathmon/suggest/POST /api/pathmon/suggest/ {answers, monitor_id?} — questionnaire → suggested config.
Responses: 200
GET /api/pcap-analyses/Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
ordering | query | no | string | Which field to use when ordering the results. |
search | query | no | string | A search term. |
Responses: 200 → PcapAnalysis[]
POST /api/pcap-analyses/Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated
Request body (application/json): PcapAnalysisRequest
Responses: 201 → PcapAnalysis
GET /api/pcap-analyses/{id}/Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | integer | A unique integer value identifying this pcap analysis. |
Responses: 200 → PcapAnalysis
PUT /api/pcap-analyses/{id}/Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | integer | A unique integer value identifying this pcap analysis. |
Request body (application/json): PcapAnalysisRequest
Responses: 200 → PcapAnalysis
PATCH /api/pcap-analyses/{id}/Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | integer | A unique integer value identifying this pcap analysis. |
Request body (application/json): PatchedPcapAnalysisRequest
Responses: 200 → PcapAnalysis
DELETE /api/pcap-analyses/{id}/Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | integer | A unique integer value identifying this pcap analysis. |
Responses: 204
POST /api/pcap-analyses/{id}/add-capture/Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | integer | A unique integer value identifying this pcap analysis. |
Request body (application/json): PcapAnalysisRequest
Responses: 200 → PcapAnalysis
POST /api/pcap-analyses/{id}/analyze/Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | integer | A unique integer value identifying this pcap analysis. |
Request body (application/json): PcapAnalysisRequest
Responses: 200 → PcapAnalysis
DELETE /api/pcap-analyses/{id}/captures/{capture_id}/Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
capture_id | path | yes | string | |
id | path | yes | integer | A unique integer value identifying this pcap analysis. |
Responses: 204
POST /api/pcap-analyses/{id}/captures/{capture_id}/ask/Ask a natural-language question about one capture. The model is grounded in the flat stats, the findings, the deep-statistics digest and a packet sample (the rows matching filter when one is passed). When the question asks to show, find or isolate packets the answer includes a validated Wireshark display filter.
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
capture_id | path | yes | string | |
id | path | yes | integer | A unique integer value identifying this pcap analysis. |
Request body (application/json): {question, filter?}
Responses: 200 → {answer, filter: null | {type: "display", value} | {type: "clear"}}
GET /api/pcap-analyses/{id}/captures/{capture_id}/packets/Packet rows for the packet list. filter is a Wireshark display filter applied server-side (validated first — an invalid expression returns 400 with the parser message); offset / limit (max 5000) page through the result and total is the true match count when a filter is set.
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
capture_id | path | yes | string | |
id | path | yes | integer | A unique integer value identifying this pcap analysis. |
filter | query | no | string | Wireshark display filter, e.g. tcp.analysis.retransmission && ip.addr == 10.0.0.5 |
offset | query | no | integer | First row to return (default 0) |
limit | query | no | integer | Rows to return (default 2000, max 5000) |
Responses: 200 → {packets, count, offset, limit, total, truncated, filter}
GET /api/pcap-analyses/{id}/captures/{capture_id}/deep/The deep statistics computed in the background after upload (status is queued → analyzing → ready or error): capinfos, timeline, conversations, endpoints, rtt, tcp_health, transactions, expert, protocols, packet_lengths, http, dns, tls, icmp, security, and f5 / netscaler / decryption when the capture carries a vendor trailer. Also returns the merged findings.
Responses: 200 → {capture_id, status, error, analyzed_at, findings, deep}
POST /api/pcap-analyses/{id}/captures/{capture_id}/reanalyze/Re-run the flat and deep statistics for one capture (for example after an upgrade added new analyses). 409 if an analysis is already running.
Responses: 202 → PcapCapture
GET /api/pcap-analyses/{id}/captures/{capture_id}/stream/?stream=Ntcptrace-style series for one TCP stream (tcp.stream index): per direction, data segments (relative sequence), peer ACKs, receive window, RTT samples, bytes in flight, bucketed throughput and SYN/FIN/RST/zero-window events.
Responses: 200 → {stream, interval_s, duration_s, frames, directions}
GET /api/pcap-analyses/{id}/captures/{capture_id}/follow/?stream=NReassembled payload of one TCP stream as client/server turns (Wireshark's Follow TCP Stream); non-printable bytes are rendered as ..
Responses: 200 → {stream, client, server, turns, total_bytes, truncated}
GET /api/pcap-analyses/{id}/captures/{capture_id}/frame/?no=NFull dissection of one frame (the packet-details pane plus hex dump, as tshark -V -x prints it).
Responses: 200 → {frame, text, truncated}
GET /api/pcap-analyses/{id}/captures/{capture_id}/export/?filter=…Download the packets matching a display filter (or the whole capture) as a new pcapng. The response is the file (application/vnd.tcpdump.pcap, Content-Disposition: attachment); 400 if nothing matched or the filter is invalid.
Responses: 200 → pcapng bytes
POST /api/pcap-analyses/{id}/pull-scp/Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | integer | A unique integer value identifying this pcap analysis. |
Request body (application/json): PcapAnalysisRequest
Responses: 200 → PcapAnalysis
GET /api/pcap-taps/Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
ordering | query | no | string | Which field to use when ordering the results. |
search | query | no | string | A search term. |
Responses: 200 → PCAPTap[]
POST /api/pcap-taps/Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated
Request body (application/json): PCAPTapRequest
Responses: 201 → PCAPTap
GET /api/pcap-taps/{id}/Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | integer | A unique integer value identifying this pcap tap. |
Responses: 200 → PCAPTap
PUT /api/pcap-taps/{id}/Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | integer | A unique integer value identifying this pcap tap. |
Request body (application/json): PCAPTapRequest
Responses: 200 → PCAPTap
PATCH /api/pcap-taps/{id}/Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | integer | A unique integer value identifying this pcap tap. |
Request body (application/json): PatchedPCAPTapRequest
Responses: 200 → PCAPTap
DELETE /api/pcap-taps/{id}/Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | integer | A unique integer value identifying this pcap tap. |
Responses: 204
GET /api/scp-servers/Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
ordering | query | no | string | Which field to use when ordering the results. |
search | query | no | string | A search term. |
Responses: 200 → ScpServer[]
POST /api/scp-servers/Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated
Request body (application/json): ScpServerRequest
Responses: 201 → ScpServer
GET /api/scp-servers/{id}/Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | integer | A unique integer value identifying this scp server. |
Responses: 200 → ScpServer
PUT /api/scp-servers/{id}/Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | integer | A unique integer value identifying this scp server. |
Request body (application/json): ScpServerRequest
Responses: 200 → ScpServer
PATCH /api/scp-servers/{id}/Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | integer | A unique integer value identifying this scp server. |
Request body (application/json): PatchedScpServerRequest
Responses: 200 → ScpServer
DELETE /api/scp-servers/{id}/Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | integer | A unique integer value identifying this scp server. |
Responses: 204
GET /api/scp-servers/{id}/list_files/List PCAP files in the server's default_directory (or ?directory= override).
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | integer | A unique integer value identifying this scp server. |
Responses: 200 → ScpServer
GET /api/siem-connectors/Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
ordering | query | no | string | Which field to use when ordering the results. |
page | query | no | integer | A page number within the paginated result set. |
page_size | query | no | integer | Number of results to return per page. |
search | query | no | string | A search term. |
Responses: 200 → PaginatedSiemConnectorList
POST /api/siem-connectors/Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated
Request body (application/json): SiemConnectorRequest
Responses: 201 → SiemConnector
GET /api/siem-connectors/{id}/Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | integer | A unique integer value identifying this siem connector. |
Responses: 200 → SiemConnector
PUT /api/siem-connectors/{id}/Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | integer | A unique integer value identifying this siem connector. |
Request body (application/json): SiemConnectorRequest
Responses: 200 → SiemConnector
PATCH /api/siem-connectors/{id}/Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | integer | A unique integer value identifying this siem connector. |
Request body (application/json): PatchedSiemConnectorRequest
Responses: 200 → SiemConnector
DELETE /api/siem-connectors/{id}/Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | integer | A unique integer value identifying this siem connector. |
Responses: 204
GET /api/throughline/Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
ordering | query | no | string | Which field to use when ordering the results. |
page | query | no | integer | A page number within the paginated result set. |
page_size | query | no | integer | Number of results to return per page. |
search | query | no | string | A search term. |
Responses: 200 → PaginatedAnalysisSessionList
POST /api/throughline/Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated
Request body (application/json): AnalysisSessionRequest
Responses: 201 → AnalysisSession
GET /api/throughline/{id}/Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | integer | A unique integer value identifying this analysis session. |
Responses: 200 → AnalysisSession
PUT /api/throughline/{id}/Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | integer | A unique integer value identifying this analysis session. |
Request body (application/json): AnalysisSessionRequest
Responses: 200 → AnalysisSession
PATCH /api/throughline/{id}/Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | integer | A unique integer value identifying this analysis session. |
Request body (application/json): PatchedAnalysisSessionRequest
Responses: 200 → AnalysisSession
DELETE /api/throughline/{id}/Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | integer | A unique integer value identifying this analysis session. |
Responses: 204
POST /api/throughline/{id}/approve-remediation/Approve a held remediation workflow and start its run (human-in-loop).
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | integer | A unique integer value identifying this analysis session. |
Request body (application/json): AnalysisSessionRequest
Responses: 200 → AnalysisSession
POST /api/throughline/{id}/generate-workflow/Deprecated. This single-shot generator predates the AutoPilot expert-panel loop, which investigates with real probes and lets governance draft the remediation workflow from the diagnosis (see
POST /api/throughline/{id}/reanalyze/on an incident session). The endpoint remains for existing API callers but is no longer triggered by the UI or on session creation.
Kick off background AI workflow generation. Returns 202 immediately.
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | integer | A unique integer value identifying this analysis session. |
Request body (application/json): AnalysisSessionRequest
Responses: 200 → AnalysisSession
POST /api/throughline/{id}/pull-pcap-scp/Pull a PCAP file from a remote SCP/SFTP server and attach it to this session.
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | integer | A unique integer value identifying this analysis session. |
Request body (application/json): AnalysisSessionRequest
Responses: 200 → AnalysisSession
POST /api/throughline/{id}/reanalyze/Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | integer | A unique integer value identifying this analysis session. |
Request body (application/json): AnalysisSessionRequest
Responses: 200 → AnalysisSession
POST /api/throughline/{id}/reject-remediation/Reject a held remediation workflow (cancels the pending run).
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | integer | A unique integer value identifying this analysis session. |
Request body (application/json): AnalysisSessionRequest
Responses: 200 → AnalysisSession
POST /api/throughline/{id}/upload-pcap/Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | integer | A unique integer value identifying this analysis session. |
Request body (multipart/form-data): AnalysisSessionRequest
Responses: 200 → AnalysisSession
POST /api/throughline/{id}/verdict/Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated
| Parameter | In | Required | Type | Description |
|---|---|---|---|---|
id | path | yes | integer | A unique integer value identifying this analysis session. |
Request body (application/json): AnalysisSessionRequest
Responses: 200 → AnalysisSession
Auto-generated from drf-spectacular OpenAPI. Endpoint descriptions come from viewset docstrings/serializers; enriching those improves this page on the next generation.