API Reference

Devices & Inventory API

The device inventory shared across features — devices, groups, firmware, upgrades, and lifecycle. Auto-generated from the platform OpenAPI schema so it matches the running API.

REST API for this feature — 88 operations across 67 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.

Device groups

GET /api/device-groups/

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

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.
vendorquerynostring

Responses: 200 → PaginatedDeviceGroupList

POST /api/device-groups/

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

Request body (application/json): DeviceGroupRequest

Responses: 201 → DeviceGroup

GET /api/device-groups/{id}/

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

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this device group.

Responses: 200 → DeviceGroup

PUT /api/device-groups/{id}/

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

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this device group.

Request body (application/json): DeviceGroupRequest

Responses: 200 → DeviceGroup

PATCH /api/device-groups/{id}/

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

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this device group.

Request body (application/json): PatchedDeviceGroupRequest

Responses: 200 → DeviceGroup

DELETE /api/device-groups/{id}/

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

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this device group.

Responses: 204


Device lifecycle

GET /api/device-lifecycle/

List device lifecycles

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.
record_typequerynostring* hardware - Hardware Platform
searchquerynostringA search term.
vendorquerynostring* f5 - F5 Networks

Responses: 200 → PaginatedDeviceLifecycleList

POST /api/device-lifecycle/

Create device lifecycle

Request body (application/json): DeviceLifecycleRequest

Responses: 201 → DeviceLifecycle

GET /api/device-lifecycle/summary/

Return summary counts by status for the dashboard cards.

Responses: 200 → DeviceLifecycle

GET /api/device-lifecycle/{id}/

Retrieve device lifecycle

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this device lifecycle.

Responses: 200 → DeviceLifecycle

PUT /api/device-lifecycle/{id}/

Update device lifecycle

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this device lifecycle.

Request body (application/json): DeviceLifecycleRequest

Responses: 200 → DeviceLifecycle

PATCH /api/device-lifecycle/{id}/

Update device lifecycle

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this device lifecycle.

Request body (application/json): PatchedDeviceLifecycleRequest

Responses: 200 → DeviceLifecycle

DELETE /api/device-lifecycle/{id}/

Delete device lifecycle

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this device lifecycle.

Responses: 204

GET /api/device-lifecycle/{id}/devices/

Return the devices that match this lifecycle record's vendor.

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this device lifecycle.

Responses: 200 → DeviceLifecycle


Devices

GET /api/devices/

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

ParameterInRequiredTypeDescription
device_typequerynoarrayMultiple values may be separated by commas.
groupquerynointeger
locationquerynointeger
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.
statusquerynostring
vendorquerynostring

Responses: 200 → PaginatedDeviceListList

POST /api/devices/

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

Request body (application/json): DeviceListRequest

Responses: 201 → DeviceList

GET /api/devices/discover-status/{job_id}/

Poll an async discover job (discover()'s async mode fires a collector

ParameterInRequiredTypeDescription
job_idpathyesstring

Responses: 200 → DeviceList

POST /api/devices/discover/

Quick probe: connect to a device and return hostname, version, HA status,

Request body (application/json): DeviceListRequest

Responses: 200 → DeviceList

GET /api/devices/ihealth_credential_status/

Whether a saved iHealth API credential exists and is still valid.

Responses: 200 → DeviceList

GET /api/devices/summary/

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

Responses: 200 → DeviceList

GET /api/devices/{id}/

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

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this device.

Responses: 200 → DeviceDetail

PUT /api/devices/{id}/

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

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this device.

Request body (application/json): DeviceListRequest

Responses: 200 → DeviceList

PATCH /api/devices/{id}/

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

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this device.

Request body (application/json): PatchedDeviceListRequest

Responses: 200 → DeviceList

DELETE /api/devices/{id}/

Delete a device, gracefully handling protected references. Some records

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this device.

Responses: 204

POST /api/devices/{id}/add_stats/

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

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this device.

Request body (application/json): DeviceListRequest

Responses: 200 → DeviceList

GET /api/devices/{id}/arp_table/

Live/dynamically-learned ARP via SSH tmsh, REST fallback if SSH fails.

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this device.

Responses: 200 → DeviceList

GET /api/devices/{id}/auth_mechanism/

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

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this device.

Responses: 200 → DeviceList

GET /api/devices/{id}/avi_clouds/

Return AVI cloud names and SE groups for this AVI controller device.

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this device.

Responses: 200 → DeviceList

GET /api/devices/{id}/avi_tier1_lrs/

Return NSX-T Tier-1 LRs from AVI cloud config (fallback path).

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this device.

Responses: 200 → DeviceList

GET /api/devices/{id}/backups/

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

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this device.

Responses: 200 → DeviceList

GET /api/devices/{id}/cf_credentials/

Return Cloudflare credentials stored on a cloudflare-vendor device.

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this device.

Responses: 200 → DeviceList

POST /api/devices/{id}/configure_syslog/

Adds Versus as a remote-syslog target on the device (UDP, via the

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this device.

Request body (application/json): DeviceListRequest

Responses: 200 → DeviceList

POST /api/devices/{id}/create_backup/

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

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this device.

Request body (application/json): DeviceListRequest

Responses: 200 → DeviceList

GET /api/devices/{id}/customer_edges/

Return F5 Distributed Cloud (XC) Customer Edge (CE) sites discovered

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this device.

Responses: 200 → DeviceList

POST /api/devices/{id}/discover_vs_fqdns/

Reverse-DNS (PTR) lookup of each Virtual Server's VIP address

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this device.

Request body (application/json): DeviceListRequest

Responses: 200 → DeviceList

POST /api/devices/{id}/discover_wideip_targets/

Forward DNS (A record) lookup of each GTM WideIP's name (the

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this device.

Request body (application/json): DeviceListRequest

Responses: 200 → DeviceList

GET /api/devices/{id}/dns_config/

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

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this device.

Responses: 200 → DeviceList

POST /api/devices/{id}/fetch_cert_keys/

SCP SSL cert and private key PEM files from an A10 device via SSH/SFTP.

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this device.

Request body (application/json): DeviceListRequest

Responses: 200 → DeviceList

POST /api/devices/{id}/generate_qkview/

Start a QKView generation + iHealth upload job for this device.

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this device.

Request body (application/json): DeviceListRequest

Responses: 200 → DeviceList

GET /api/devices/{id}/gtm_wideips/

Return GTM Wide IPs imported from this device (F5 GTM/LTM only).

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this device.

Responses: 200 → DeviceList

GET /api/devices/{id}/import_jobs/

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

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this device.

Responses: 200 → DeviceList

POST /api/devices/{id}/ipam_allocate/

Allocate the next available IP from a DNS/IPAM device.

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this device.

Request body (application/json): DeviceListRequest

Responses: 200 → DeviceList

GET /api/devices/{id}/ipam_networks/

Return the list of IP networks from a DNS/IPAM device.

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this device.

Responses: 200 → DeviceList

GET /api/devices/{id}/license_info/

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

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this device.

Responses: 200 → DeviceList

GET /api/devices/{id}/ntp_config/

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

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this device.

Responses: 200 → DeviceList

GET /api/devices/{id}/qkview_jobs/

List QKView jobs for this device.

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this device.

Responses: 200 → DeviceList

POST /api/devices/{id}/relicense/

Re-installs the device's registration key — this can reset

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this device.

Request body (application/json): DeviceListRequest

Responses: 200 → DeviceList

POST /api/devices/{id}/remove_syslog/

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

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this device.

Request body (application/json): DeviceListRequest

Responses: 200 → DeviceList

GET /api/devices/{id}/routing_table/

Live routing table via SSH tmsh, REST fallback if SSH fails.

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this device.

Responses: 200 → DeviceList

POST /api/devices/{id}/run_security_audit/

Run the F5 hardening audit against this single device synchronously

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this device.

Request body (application/json): DeviceListRequest

Responses: 200 → DeviceList

GET /api/devices/{id}/se_vip_subnets/

List or create Avi SE group VIP subnet entries for this device.

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this device.

Responses: 200 → DeviceList

POST /api/devices/{id}/se_vip_subnets/

List or create Avi SE group VIP subnet entries for this device.

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this device.

Request body (application/json): DeviceListRequest

Responses: 200 → DeviceList

DELETE /api/devices/{id}/se_vip_subnets/{entry_id}/

Delete a single Avi SE group VIP subnet entry.

ParameterInRequiredTypeDescription
entry_idpathyesstring
idpathyesintegerA unique integer value identifying this device.

Responses: 204

GET /api/devices/{id}/security_audit/

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

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this device.

Responses: 200 → DeviceList

GET /api/devices/{id}/self_ips/

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

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this device.

Responses: 200 → DeviceList

POST /api/devices/{id}/start_import/

Trigger a background inventory import for this device.

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this device.

Request body (application/json): DeviceListRequest

Responses: 200 → DeviceList

GET /api/devices/{id}/stats_history/

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

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this device.

Responses: 200 → DeviceList

GET /api/devices/{id}/sync_status/

Tries the cm/sync-status REST endpoint first, falls back to SSH

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this device.

Responses: 200 → DeviceList

GET /api/devices/{id}/syslog_config/

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

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this device.

Responses: 200 → DeviceList

POST /api/devices/{id}/test_dns/

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

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this device.

Request body (application/json): DeviceListRequest

Responses: 200 → DeviceList

POST /api/devices/{id}/test_ntp/

Re-runs 'ntpq -pn' live — this IS the refresh action, there's no

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this device.

Request body (application/json): DeviceListRequest

Responses: 200 → DeviceList

GET /api/devices/{id}/tier1_lrs/

Return NSX-T Tier-1 gateways directly from an NSX-T Manager device.

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this device.

Responses: 200 → DeviceList

GET /api/devices/{id}/virtual_servers/

Return the list of VirtualServer objects discovered from this device.

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this device.

Responses: 200 → DeviceList

GET /api/devices/{id}/vlans/

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

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this device.

Responses: 200 → DeviceList

GET /api/devices/{id}/xc_credentials/

Return F5 XC credentials stored on an f5_xc/f5_xc_waf-vendor device.

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this device.

Responses: 200 → DeviceList


Firmware images

GET /api/firmware-images/

List firmware images

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.
vendorquerynostring

Responses: 200 → PaginatedFirmwareImageList

POST /api/firmware-images/

Create firmware image

Request body (application/json): FirmwareImageRequest

Responses: 201 → FirmwareImage

GET /api/firmware-images/collector_files/

List firmware files collectors report having in their local firmware

Responses: 200 → FirmwareImage

POST /api/firmware-images/register_collector/

Register a collector-local firmware image (no upload): the file lives

Request body (application/json): FirmwareImageRequest

Responses: 200 → FirmwareImage

POST /api/firmware-images/upload/

Create upload

Request body (multipart/form-data): FirmwareImageRequest

Responses: 200 → FirmwareImage

GET /api/firmware-images/{id}/

Retrieve firmware image

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this firmware image.

Responses: 200 → FirmwareImage

PUT /api/firmware-images/{id}/

Update firmware image

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this firmware image.

Request body (application/json): FirmwareImageRequest

Responses: 200 → FirmwareImage

PATCH /api/firmware-images/{id}/

Update firmware image

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this firmware image.

Request body (application/json): PatchedFirmwareImageRequest

Responses: 200 → FirmwareImage

DELETE /api/firmware-images/{id}/

Delete firmware image

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this firmware image.

Responses: 204

GET /api/firmware-images/{id}/download/

Serve the firmware file for device-initiated downloads (e.g. Cisco copy http:// flash:).

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this firmware image.

Responses: 200 → FirmwareImage


Managed devices

GET /api/managed-devices/

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

ParameterInRequiredTypeDescription
controllerquerynointeger
orderingquerynostringWhich field to use when ordering the results.
pagequerynointegerA page number within the paginated result set.
page_sizequerynointegerNumber of results to return per page.
rolequerynostring* service_engine - Service Engine
searchquerynostringA search term.
statusquerynostring

Responses: 200 → PaginatedManagedDeviceList

GET /api/managed-devices/{id}/

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

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this managed device.

Responses: 200 → ManagedDevice


Panos versions

GET /api/panos-versions/

Detect internet access on a Palo Alto device and return available PAN-OS versions.

Responses: 200


Upgrades

GET /api/upgrades/

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

ParameterInRequiredTypeDescription
device_groupquerynointeger
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.
statusquerynostring* pending - Pending
vendorquerynostring* f5 - F5 BIG-IP

Responses: 200 → PaginatedUpgradeListList

POST /api/upgrades/

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

Request body (application/json): UpgradeRequest

Responses: 201 → Upgrade

GET /api/upgrades/{id}/

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

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this upgrade.

Responses: 200 → Upgrade

PUT /api/upgrades/{id}/

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

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this upgrade.

Request body (application/json): UpgradeRequest

Responses: 200 → Upgrade

PATCH /api/upgrades/{id}/

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

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this upgrade.

Request body (application/json): PatchedUpgradeRequest

Responses: 200 → Upgrade

DELETE /api/upgrades/{id}/

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

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this upgrade.

Responses: 204

POST /api/upgrades/{id}/execute_step/

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

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this upgrade.

Request body (application/json): UpgradeRequest

Responses: 200 → Upgrade

POST /api/upgrades/{id}/mark_step/

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

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this upgrade.

Request body (application/json): UpgradeRequest

Responses: 200 → Upgrade


Velos chassis

GET /api/velos-chassis/

List velos chassis

Responses: 200

GET /api/velos-chassis/{id}/

Retrieve velos chassi

ParameterInRequiredTypeDescription
idpathyesintegerA unique integer value identifying this velos chassis.

Responses: 200


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