API Reference

Observe API

Observability — dashboards, widgets, alerts, syslog, and report cards. Auto-generated from the platform OpenAPI schema so it matches the running API.

REST API for this feature — 107 operations across 62 resource paths, auto-generated from the platform's live OpenAPI schema (drf-spectacular).

Base URL https://<your-versus-host>/api · Auth Authorization: Bearer <JWT> (from POST /api/auth/token/) · 📄 Download the OpenAPI spec for Postman/Insomnia/Swagger · see the API overview for pagination, filtering, and errors.

Alerting

GET /api/observe/alerting/contact-points/

List contact points

ParameterInRequiredTypeDescription
orderingquerynostringWhich field to use when ordering the results.
searchquerynostringA search term.

Responses: 200 → ContactPoint[]

POST /api/observe/alerting/contact-points/

Create contact point

Request body (application/json): ContactPointRequest

Responses: 201 → ContactPoint

GET /api/observe/alerting/contact-points/{uid}/

Retrieve contact point

ParameterInRequiredTypeDescription
uidpathyesstring

Responses: 200 → ContactPoint

PUT /api/observe/alerting/contact-points/{uid}/

Update contact point

ParameterInRequiredTypeDescription
uidpathyesstring

Request body (application/json): ContactPointRequest

Responses: 200 → ContactPoint

PATCH /api/observe/alerting/contact-points/{uid}/

Update contact point

ParameterInRequiredTypeDescription
uidpathyesstring

Request body (application/json): PatchedContactPointRequest

Responses: 200 → ContactPoint

DELETE /api/observe/alerting/contact-points/{uid}/

Delete contact point

ParameterInRequiredTypeDescription
uidpathyesstring

Responses: 204

POST /api/observe/alerting/contact-points/{uid}/test/

Send a test notification to this contact point.

ParameterInRequiredTypeDescription
uidpathyesstring

Request body (application/json): ContactPointRequest

Responses: 200 → ContactPoint

GET /api/observe/alerting/eval-groups/

List eval groups

ParameterInRequiredTypeDescription
orderingquerynostringWhich field to use when ordering the results.
searchquerynostringA search term.

Responses: 200 → AlertEvalGroup[]

POST /api/observe/alerting/eval-groups/

Create eval group

Request body (application/json): AlertEvalGroupRequest

Responses: 201 → AlertEvalGroup

GET /api/observe/alerting/eval-groups/{uid}/

Retrieve eval group

ParameterInRequiredTypeDescription
uidpathyesstring

Responses: 200 → AlertEvalGroup

PUT /api/observe/alerting/eval-groups/{uid}/

Update eval group

ParameterInRequiredTypeDescription
uidpathyesstring

Request body (application/json): AlertEvalGroupRequest

Responses: 200 → AlertEvalGroup

PATCH /api/observe/alerting/eval-groups/{uid}/

Update eval group

ParameterInRequiredTypeDescription
uidpathyesstring

Request body (application/json): PatchedAlertEvalGroupRequest

Responses: 200 → AlertEvalGroup

DELETE /api/observe/alerting/eval-groups/{uid}/

Delete eval group

ParameterInRequiredTypeDescription
uidpathyesstring

Responses: 204

GET /api/observe/alerting/eval-groups/{uid}/rules/

Rules: eval group

ParameterInRequiredTypeDescription
uidpathyesstring

Responses: 200 → AlertEvalGroup

GET /api/observe/alerting/instances/

List instances

ParameterInRequiredTypeDescription
orderingquerynostringWhich field to use when ordering the results.
searchquerynostringA search term.

Responses: 200 → AlertInstance[]

GET /api/observe/alerting/instances/{id}/

Retrieve instance

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this alert instance.

Responses: 200 → AlertInstance

GET /api/observe/alerting/instances/{id}/history/

History: instance

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this alert instance.

Responses: 200 → AlertInstance

POST /api/observe/alerting/instances/{id}/silence/

Phase A silence: set state to Normal, record transition.

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this alert instance.

Responses: 200 → AlertInstance

GET /api/observe/alerting/rules/

List rules

ParameterInRequiredTypeDescription
orderingquerynostringWhich field to use when ordering the results.
searchquerynostringA search term.

Responses: 200 → AlertRule[]

POST /api/observe/alerting/rules/

Create rule

Request body (application/json): AlertRuleRequest

Responses: 201 → AlertRule

GET /api/observe/alerting/rules/{uid}/

Retrieve rule

ParameterInRequiredTypeDescription
uidpathyesstring

Responses: 200 → AlertRule

PUT /api/observe/alerting/rules/{uid}/

Update rule

ParameterInRequiredTypeDescription
uidpathyesstring

Request body (application/json): AlertRuleRequest

Responses: 200 → AlertRule

PATCH /api/observe/alerting/rules/{uid}/

Update rule

ParameterInRequiredTypeDescription
uidpathyesstring

Request body (application/json): PatchedAlertRuleRequest

Responses: 200 → AlertRule

DELETE /api/observe/alerting/rules/{uid}/

Delete rule

ParameterInRequiredTypeDescription
uidpathyesstring

Responses: 204

GET /api/observe/alerting/rules/{uid}/instances/

Instances: rule

ParameterInRequiredTypeDescription
uidpathyesstring

Responses: 200 → AlertRule

POST /api/observe/alerting/rules/{uid}/pause/

Pause: rule

ParameterInRequiredTypeDescription
uidpathyesstring

Request body (application/json): AlertRuleRequest

Responses: 200 → AlertRule

POST /api/observe/alerting/rules/{uid}/test/

Dry-run: run queries + expression DAG, return condition frames without updating state.

ParameterInRequiredTypeDescription
uidpathyesstring

Request body (application/json): AlertRuleRequest

Responses: 200 → AlertRule


Alerts

GET /api/alerts/

List alerts

ParameterInRequiredTypeDescription
orderingquerynostringWhich field to use when ordering the results.
pagequerynointegerA page number within the paginated result set.
page_sizequerynointegerNumber of results to return per page.
searchquerynostringA search term.

Responses: 200 → PaginatedAlertList

POST /api/alerts/

Create alert

Request body (application/json): AlertRequest

Responses: 201 → Alert

POST /api/alerts/mark_all_read/

Create mark all read

Request body (application/json): AlertRequest

Responses: 200 → Alert

GET /api/alerts/unread_count/

List unread counts

Responses: 200 → Alert

GET /api/alerts/{id}/

Retrieve alert

ParameterInRequiredTypeDescription
idpathyesstring

Responses: 200 → Alert

PUT /api/alerts/{id}/

Update alert

ParameterInRequiredTypeDescription
idpathyesstring

Request body (application/json): AlertRequest

Responses: 200 → Alert

PATCH /api/alerts/{id}/

Update alert

ParameterInRequiredTypeDescription
idpathyesstring

Request body (application/json): PatchedAlertRequest

Responses: 200 → Alert

DELETE /api/alerts/{id}/

Delete alert

ParameterInRequiredTypeDescription
idpathyesstring

Responses: 204


Dashboard widgets

GET /api/dashboard-widgets/

List dashboard widgets

ParameterInRequiredTypeDescription
dashboardquerynointeger
orderingquerynostringWhich field to use when ordering the results.
pagequerynointegerA page number within the paginated result set.
page_sizequerynointegerNumber of results to return per page.
searchquerynostringA search term.
widget_typequerynostring* virtual_server - Virtual Server

Responses: 200 → PaginatedDashboardWidgetList

POST /api/dashboard-widgets/

Create dashboard widget

Request body (application/json): DashboardWidgetRequest

Responses: 201 → DashboardWidget

GET /api/dashboard-widgets/cert-expiry-data/

List cert expiry datas

Responses: 200 → DashboardWidget

GET /api/dashboard-widgets/config-drift-data/

List config drift datas

Responses: 200 → DashboardWidget

GET /api/dashboard-widgets/pool-health-data/

List pool health datas

Responses: 200 → DashboardWidget

GET /api/dashboard-widgets/route-delta-data/

List route delta datas

Responses: 200 → DashboardWidget

POST /api/dashboard-widgets/route-delta-snapshot/

Create route delta snapshot

Request body (application/json): DashboardWidgetRequest

Responses: 200 → DashboardWidget

GET /api/dashboard-widgets/unauthorized-changes-data/

List unauthorized changes datas

Responses: 200 → DashboardWidget

GET /api/dashboard-widgets/workflow-sla-data/

List workflow sla datas

Responses: 200 → DashboardWidget

GET /api/dashboard-widgets/{id}/

Retrieve dashboard widget

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this dashboard widget.

Responses: 200 → DashboardWidget

PUT /api/dashboard-widgets/{id}/

Update dashboard widget

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this dashboard widget.

Request body (application/json): DashboardWidgetRequest

Responses: 200 → DashboardWidget

PATCH /api/dashboard-widgets/{id}/

Update dashboard widget

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this dashboard widget.

Request body (application/json): PatchedDashboardWidgetRequest

Responses: 200 → DashboardWidget

DELETE /api/dashboard-widgets/{id}/

Delete dashboard widget

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this dashboard widget.

Responses: 204


Dashboards

GET /api/dashboards/

List dashboards

ParameterInRequiredTypeDescription
orderingquerynostringWhich field to use when ordering the results.
pagequerynointegerA page number within the paginated result set.
page_sizequerynointegerNumber of results to return per page.
searchquerynostringA search term.

Responses: 200 → PaginatedDashboardList

POST /api/dashboards/

Create dashboard

Request body (application/json): DashboardRequest

Responses: 201 → Dashboard

GET /api/dashboards/{id}/

Retrieve dashboard

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this dashboard.

Responses: 200 → Dashboard

PUT /api/dashboards/{id}/

Update dashboard

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this dashboard.

Request body (application/json): DashboardRequest

Responses: 200 → Dashboard

PATCH /api/dashboards/{id}/

Update dashboard

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this dashboard.

Request body (application/json): PatchedDashboardRequest

Responses: 200 → Dashboard

DELETE /api/dashboards/{id}/

Delete dashboard

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this dashboard.

Responses: 204

GET /api/observe/dashboards/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
orderingquerynostringWhich field to use when ordering the results.
searchquerynostringA search term.

Responses: 200 → ObserveDashboard[]

POST /api/observe/dashboards/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

Request body (application/json): ObserveDashboardRequest

Responses: 201 → ObserveDashboard

GET /api/observe/dashboards/{uid}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
uidpathyesstring

Responses: 200 → ObserveDashboard

PUT /api/observe/dashboards/{uid}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
uidpathyesstring

Request body (application/json): ObserveDashboardRequest

Responses: 200 → ObserveDashboard

PATCH /api/observe/dashboards/{uid}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
uidpathyesstring

Request body (application/json): PatchedObserveDashboardRequest

Responses: 200 → ObserveDashboard

DELETE /api/observe/dashboards/{uid}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
uidpathyesstring

Responses: 204

GET /api/observe/dashboards/{uid}/versions/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
uidpathyesstring

Responses: 200 → ObserveDashboard


Datasources

GET /api/observe/datasources/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
orderingquerynostringWhich field to use when ordering the results.
searchquerynostringA search term.

Responses: 200 → ObserveDatasource[]

POST /api/observe/datasources/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

Request body (application/json): ObserveDatasourceRequest

Responses: 201 → ObserveDatasource

GET /api/observe/datasources/types/

Return available provider types.

Responses: 200 → ObserveDatasource

GET /api/observe/datasources/{uid}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
uidpathyesstring

Responses: 200 → ObserveDatasource

PUT /api/observe/datasources/{uid}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
uidpathyesstring

Request body (application/json): ObserveDatasourceRequest

Responses: 200 → ObserveDatasource

PATCH /api/observe/datasources/{uid}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
uidpathyesstring

Request body (application/json): PatchedObserveDatasourceRequest

Responses: 200 → ObserveDatasource

DELETE /api/observe/datasources/{uid}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
uidpathyesstring

Responses: 204

POST /api/observe/datasources/{uid}/health/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
uidpathyesstring

Request body (application/json): ObserveDatasourceRequest

Responses: 200 → ObserveDatasource

GET /api/observe/datasources/{uid}/resource/{resource_path}/

Proxy label/metric autocomplete calls to the provider's callResource.

ParameterInRequiredTypeDescription
resource_pathpathyesstring
uidpathyesstring

Responses: 200 → ObserveDatasource

POST /api/observe/datasources/{uid}/resource/{resource_path}/

Proxy label/metric autocomplete calls to the provider's callResource.

ParameterInRequiredTypeDescription
resource_pathpathyesstring
uidpathyesstring

Request body (application/json): ObserveDatasourceRequest

Responses: 200 → ObserveDatasource


Folders

GET /api/observe/folders/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
orderingquerynostringWhich field to use when ordering the results.
searchquerynostringA search term.

Responses: 200 → ObserveFolder[]

POST /api/observe/folders/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

Request body (application/json): ObserveFolderRequest

Responses: 201 → ObserveFolder

GET /api/observe/folders/{uid}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
uidpathyesstring

Responses: 200 → ObserveFolder

PUT /api/observe/folders/{uid}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
uidpathyesstring

Request body (application/json): ObserveFolderRequest

Responses: 200 → ObserveFolder

PATCH /api/observe/folders/{uid}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
uidpathyesstring

Request body (application/json): PatchedObserveFolderRequest

Responses: 200 → ObserveFolder

DELETE /api/observe/folders/{uid}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
uidpathyesstring

Responses: 204


Provisioning

POST /api/observe/provisioning/import/grafana/

Minimal Grafana-compat import: convert Grafana provisioning shapes

Responses: 200

GET /api/observe/provisioning/sources/

List sources

ParameterInRequiredTypeDescription
orderingquerynostringWhich field to use when ordering the results.
searchquerynostringA search term.

Responses: 200 → ProvisioningSource[]

POST /api/observe/provisioning/sources/

Create source

Request body (application/json): ProvisioningSourceRequest

Responses: 201 → ProvisioningSource

GET /api/observe/provisioning/sources/{uid}/

Retrieve source

ParameterInRequiredTypeDescription
uidpathyesstring

Responses: 200 → ProvisioningSource

PUT /api/observe/provisioning/sources/{uid}/

Update source

ParameterInRequiredTypeDescription
uidpathyesstring

Request body (application/json): ProvisioningSourceRequest

Responses: 200 → ProvisioningSource

PATCH /api/observe/provisioning/sources/{uid}/

Update source

ParameterInRequiredTypeDescription
uidpathyesstring

Request body (application/json): PatchedProvisioningSourceRequest

Responses: 200 → ProvisioningSource

DELETE /api/observe/provisioning/sources/{uid}/

Delete source

ParameterInRequiredTypeDescription
uidpathyesstring

Responses: 204

POST /api/observe/provisioning/sources/{uid}/apply/

Execute a plan.

ParameterInRequiredTypeDescription
uidpathyesstring

Request body (application/json): ProvisioningSourceRequest

Responses: 200 → ProvisioningSource

GET /api/observe/provisioning/sources/{uid}/logs/

Logs: source

ParameterInRequiredTypeDescription
uidpathyesstring

Responses: 200 → ProvisioningSource

POST /api/observe/provisioning/sources/{uid}/plan/

Compute a plan from a YAML manifest stream.

ParameterInRequiredTypeDescription
uidpathyesstring

Request body (application/json): ProvisioningSourceRequest

Responses: 200 → ProvisioningSource

GET /api/observe/provisioning/sources/{uid}/resources/

Resources: source

ParameterInRequiredTypeDescription
uidpathyesstring

Responses: 200 → ProvisioningSource

POST /api/observe/provisioning/sources/{uid}/resources/{res_kind}/{res_uid}/unlock/

Manually unlock a provisioned resource to allow UI edits.

ParameterInRequiredTypeDescription
res_kindpathyesstring
res_uidpathyesstring
uidpathyesstring

Request body (application/json): ProvisioningSourceRequest

Responses: 200 → ProvisioningSource


Query

POST /api/observe/query

POST /api/observe/query

Responses: 200


Reportcards

GET /api/reportcards/

GET /api/reportcards/?scope=fleet[&scope_ref_id=] — latest snapshot

Responses: 200

GET /api/reportcards/{card_type}/

GET /api/reportcards/<card_type>/ — latest snapshot for one card.

ParameterInRequiredTypeDescription
card_typepathyesstring

Responses: 200

GET /api/reportcards/{card_type}/checks/{check_key}/

GET /api/reportcards/<card_type>/checks/<check_key>/ — paginated

ParameterInRequiredTypeDescription
card_typepathyesstring
check_keypathyesstring

Responses: 200

GET /api/reportcards/{card_type}/history/

GET /api/reportcards/<card_type>/history/?window=7d — score time

ParameterInRequiredTypeDescription
card_typepathyesstring

Responses: 200


Reports

GET /api/reports/

Stateless report runner — no model, all results computed on demand.

Responses: 200

GET /api/reports/export/

Stateless report runner — no model, all results computed on demand.

Responses: 200

POST /api/reports/run/

Stateless report runner — no model, all results computed on demand.

Responses: 200


Syslog

GET /api/syslog/

Query stored syslog entries.

Responses: 200

GET /api/syslog/{id}/

Query stored syslog entries.

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this syslog entry.

Responses: 200


Syslog alert rules

GET /api/syslog-alert-rules/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
orderingquerynostringWhich field to use when ordering the results.
searchquerynostringA search term.

Responses: 200 → SyslogAlertRule[]

POST /api/syslog-alert-rules/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

Request body (application/json): SyslogAlertRuleRequest

Responses: 201 → SyslogAlertRule

GET /api/syslog-alert-rules/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this syslog alert rule.

Responses: 200 → SyslogAlertRule

PUT /api/syslog-alert-rules/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this syslog alert rule.

Request body (application/json): SyslogAlertRuleRequest

Responses: 200 → SyslogAlertRule

PATCH /api/syslog-alert-rules/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this syslog alert rule.

Request body (application/json): PatchedSyslogAlertRuleRequest

Responses: 200 → SyslogAlertRule

DELETE /api/syslog-alert-rules/{id}/

Deploy-safe base for making an existing DRF ModelViewSet tenant-isolated

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this syslog alert rule.

Responses: 204


Syslog ingest

POST /api/syslog-ingest/

Receives syslog lines from the lab relay agent and stores them in the DB.

Responses: 201


Widgets

GET /api/widgets/

List widgets

Responses: 200


Auto-generated from drf-spectacular OpenAPI. Endpoint descriptions come from viewset docstrings/serializers; enriching those improves this page on the next generation.