Download OpenAPI specification:Download
Unified API for F5 Insight monitoring and analytics platform including device management, system operations, and AI-powered insights
JWT ACCESS TOKEN for authenticated requests.
IMPORTANT:
Example: Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
| Security Scheme Type | HTTP |
|---|---|
| HTTP Authorization Scheme | bearer |
| Bearer format | "JWT" |
| username required | string Username for authentication |
| password required | string <password> User password |
Login successful
Invalid request
Invalid credentials
Internal server error
{- "username": "admin",
- "password": "password123"
}{- "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
- "token_type": "Bearer",
- "expires_in": 900
}Refreshes the access token using the refresh token stored in httpOnly cookie. No request body required - refresh token is read from cookie.
Token refreshed successfully
Invalid or expired refresh token
Internal server error
{- "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
- "token_type": "Bearer",
- "expires_in": 900
}Logs out the user by revoking the refresh token stored in httpOnly cookie. No request body required - refresh token is read from cookie.
Logout successful
Internal server error
{- "message": "Operation successful"
}Logged out from all devices successfully
Unauthorized
Internal server error
{- "message": "Operation successful"
}Change user password using username and password. Can be called either with or without Bearer token:
| username required | string Username |
| old_password required | string <password> Current password |
| new_password required | string <password> New password |
Password changed successfully
Invalid request
Invalid credentials or unauthorized
Internal server error
{- "username": "admin",
- "old_password": "oldpassword123",
- "new_password": "newpassword123"
}{- "message": "Operation successful"
}Starts the OIDC authorization code flow with PKCE. Returns a 302 redirect to the configured identity provider authorization endpoint.
Supports two content types for the optional idp_type field:
application/x-www-form-urlencoded (recommended for browser forms):
idp_type=ldap or idp_type=saml
application/json:
{"idp_type": "ldap"} or {"idp_type": "saml"}
When idp_type is ldap or saml, the organization-scoped external login policy is
applied so LDAP/SAML IDPs are shown on the login page.
Omitting idp_type (or sending an empty body) shows the instance-level login screen.
| idp_type | string Enum: "ldap" "saml" Set to 'ldap' or 'saml' to show organization-scoped identity providers on the login page. |
Redirect to configured identity provider authorization endpoint
Invalid idp_type value or malformed request body
Internal server error
OIDC not configured
idp_type=ldap{- "error": "string"
}The configured identity provider redirects the browser here after successful user authentication. Exchanges the authorization code for tokens, stores them in a server-side session, sets an HttpOnly session cookie, and redirects the browser to the React SPA.
| code required | string Authorization code returned by the identity provider |
| state required | string State parameter for CSRF protection |
Redirect to React SPA after successful token exchange
Missing or invalid parameters
Internal server error
OIDC not configured
{- "error": "string",
- "code": "string"
}Called by the React SPA after landing on /auth/callback. Reads the HttpOnly session cookie and returns the F5 Insight access token details needed by the SPA.
Session token retrieved successfully
No valid session cookie or session expired
Internal server error
OIDC not configured
{- "access_token": "string",
- "id_token": "string",
- "refresh_token": "string",
- "token_type": "Bearer",
- "expires_in": 0
}Provider group/resource attribute → Role mapping management (authZ). Admin-only APIs for configuring which LDAP/SAML group values map to which F5 Insight roles. Also includes the internal Zitadel webhook endpoint for runtime group resolution.
Returns the authenticated user's F5 Insight role and the permissions granted to that role. Used by the frontend to enable or hide role-based UI actions. Requires authentication.
Current user permissions retrieved successfully
Unauthorized – missing or invalid JWT
Forbidden – role information missing from JWT context
Role not found
Internal server error
{- "user_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
- "role_id": "550e8400-e29b-41d4-a716-446655440001",
- "role_name": "Operator",
- "permissions": [
- "deviceManagement.get",
- "deviceManagement.post",
- "dashboards.post",
- "telemetry.get"
], - "grouped_permissions": {
- "deviceManagement": [
- "get",
- "post"
], - "dashboards": [
- "post"
], - "telemetry": [
- "get"
]
}
}Returns all available system roles with user counts. Used to populate the role selector when creating or updating a group mapping. Requires authentication.
| include_permissions | boolean Default: false Include permission mappings when available. |
List of roles retrieved successfully
Unauthorized – missing or invalid JWT
Internal server error
{- "roles": [
- {
- "id": "550e8400-e29b-41d4-a716-446655440000",
- "name": "Admin",
- "description": "Full system access including user management",
- "is_builtin": true,
- "user_count": 2,
- "created_at": "2026-01-01T00:00:00Z"
}, - {
- "id": "550e8400-e29b-41d4-a716-446655440001",
- "name": "Operator",
- "description": "Device configuration and troubleshooting",
- "is_builtin": true,
- "user_count": 8,
- "created_at": "2026-01-01T00:00:00Z"
}
], - "total_count": 2
}Returns a single role by its UUID, including its full permission list. Requires authentication.
| role_id required | string <uuid> UUID of the role to retrieve |
Role retrieved successfully
Unauthorized – missing or invalid JWT
Role not found
Internal server error
{- "id": "550e8400-e29b-41d4-a716-446655440000",
- "name": "Admin",
- "description": "Full system access including user management",
- "is_builtin": true,
- "user_count": 2,
- "created_at": "2026-01-01T00:00:00Z",
- "permissions": [
- "deviceManagement.get",
- "deviceManagement.post"
]
}Returns configured mappings grouped by identity provider and role. Requires authentication.
List of group mappings retrieved successfully
Unauthorized
Internal server error
[- {
- "provider_id": "ldap-id-123",
- "role_id": "550e8400-e29b-41d4-a716-446655440000",
- "role": {
- "id": "550e8400-e29b-41d4-a716-446655440000",
- "role_name": "admin"
}, - "grouped_resource_attribute": [
- "bigip-admins",
- "network-operators"
], - "created_at": "2026-08-21T06:32:48Z",
- "updated_at": "2026-08-21T06:32:48Z",
- "created_by": "string",
- "updated_by": "string"
}
]Returns all provider-scoped grouped mappings for the given role_id. Requires authentication.
| role_id required | string <uuid> UUID of the F5 Insight role |
Group mappings retrieved successfully
Invalid role_id
Unauthorized
Internal server error
[- {
- "provider_id": "ldap-id-123",
- "role_id": "550e8400-e29b-41d4-a716-446655440000",
- "role": {
- "id": "550e8400-e29b-41d4-a716-446655440000",
- "role_name": "admin"
}, - "grouped_resource_attribute": [
- "bigip-admins",
- "network-operators"
], - "created_at": "2026-08-21T06:32:48Z",
- "updated_at": "2026-08-21T06:32:48Z",
- "created_by": "string",
- "updated_by": "string"
}
]Creates or fully replaces the grouped_resource_attribute list for the given provider_id and role_id. Sending an empty grouped_resource_attribute array clears mappings for that provider/role. Requires admin role.
| role_id required | string <uuid> UUID of the F5 Insight role |
| provider_id required | string non-empty Identity provider ID |
| grouped_resource_attribute required | Array of strings Group/resource attribute values to map to the role in the path |
Group mapping replaced successfully
Invalid request body or role_id not found
Unauthorized
Forbidden – admin role required
Internal server error
{- "provider_id": "ldap-id-123\"",
- "grouped_resource_attribute": [
- "bigip-admins",
- "network-operators"
]
}{- "provider_id": "ldap-id-123",
- "role_id": "550e8400-e29b-41d4-a716-446655440000",
- "role": {
- "id": "550e8400-e29b-41d4-a716-446655440000",
- "role_name": "admin"
}, - "grouped_resource_attribute": [
- "bigip-admins",
- "network-operators"
], - "created_at": "2026-08-21T06:32:48Z",
- "updated_at": "2026-08-21T06:32:48Z",
- "created_by": "string",
- "updated_by": "string"
}Adds or moves the provided grouped_resource_attribute values to the given provider_id and role_id without removing other values already mapped to that role. Requires admin role.
| role_id required | string <uuid> UUID of the F5 Insight role |
| provider_id required | string non-empty Identity provider ID |
| grouped_resource_attribute required | Array of strings Group/resource attribute values to map to the role in the path |
Group mapping patched successfully
Invalid request body or role_id not found
Unauthorized
Forbidden – admin role required
Internal server error
{- "provider_id": "ldap-id-123",
- "grouped_resource_attribute": [
- "bigip-admins"
]
}{- "provider_id": "ldap-id-123",
- "role_id": "550e8400-e29b-41d4-a716-446655440000",
- "role": {
- "id": "550e8400-e29b-41d4-a716-446655440000",
- "role_name": "admin"
}, - "grouped_resource_attribute": [
- "bigip-admins",
- "network-operators"
], - "created_at": "2026-08-21T06:32:48Z",
- "updated_at": "2026-08-21T06:32:48Z",
- "created_by": "string",
- "updated_by": "string"
}Deletes the grouped mapping for the given provider_id and role_id. This removes all grouped_resource_attribute values currently mapped to that provider/role pair. Requires admin role.
| role_id required | string <uuid> UUID of the F5 Insight role |
| provider_id required | string non-empty Identity provider ID |
Group mapping deleted successfully
Missing provider_id or invalid role_id
Unauthorized
Forbidden – admin role required
Group mapping not found
Internal server error
{- "provider_id": "ldap-id-123"
}{- "error": "string"
}Fetches security insights from AIDF including alerts, scoring, and device findings. Requires AIDF to be configured. Returns sample data if AIDF endpoint fails.
| start_time | string <date-time> |
| end_time | string <date-time> |
AIDF insights retrieved successfully (flattened feed items)
Bad request or AIDF not configured
Internal server error
[- {
- "id": "sec-001",
- "title": "Content Security Policy Missing",
- "message": "The Content-Security-Policy header is not configured for host legacy-app.corp.example.com",
- "severity": "medium",
- "category": "Header",
- "deviceName": "bigip-nyc-01.example.com",
- "host": "legacy-app.corp.example.com",
- "virtualServer": "/Common/vs_web_80",
- "firstDetected": "2026-02-02T08:09:00Z"
}
]Fetches workload classification insights from AIDF including application discovery, traffic analysis, and compliance indicators. Requires AIDF to be configured. Returns sample data if AIDF endpoint fails.
| start_time | string <date-time> |
| end_time | string <date-time> |
AIDF classifications retrieved successfully (flattened feed items)
Bad request or AIDF not configured
Internal server error
[- {
- "id": "app-001",
- "title": "E-Commerce Application - Payment Gateway",
- "description": "High-value e-commerce application with PCI-DSS compliance requirements",
- "severity": "high",
- "status": "open",
- "category": "Application Discovery",
- "deviceName": "bigip-nyc-01.example.com",
- "host": "checkout.retailstore.example.com",
- "virtualServer": "/Common/vs_ecommerce_443",
- "firstDetected": "2026-01-15T09:15:00Z",
- "confidence": 0.97,
- "appCategory": "E-Commerce",
- "appSubcategory": "Payment Processing",
- "matchedRule": "Payment Gateway with PCI Compliance Indicators"
}
]Returns a paginated, filterable list of AI assistant audit events from ClickHouse. Each row represents one agent action (user message, assistant response, tool call, tool result, error, data access, or PDF export). Requires the audit.read permission. PII fields (ip_address, user_agent, message, tool_arguments, tool_result) are masked unless the caller also holds the audit.view_sensitive permission and passes view_sensitive=true.
| page | integer >= 1 Default: 1 Page number (1-based). |
| size | integer [ 1 .. 100 ] Default: 20 Results per page (max 100). |
| username | string Case-insensitive substring match on the username field. |
| event_type | string Enum: "user_message" "assistant_response" "tool_call" "tool_result" "error" "data_access" "pdf_export" Exact match on event_type. |
| tool | string Case-insensitive substring match on tool_name. |
| keyword | string Case-insensitive substring match on message OR tool_name. |
| thread_id | string Exact match on thread_id (conversation ID). |
| interaction_id | string Exact match on interaction_id. |
| session_id | string Exact match on session_id. |
| date_from | string <date-time> Return events at or after this timestamp (RFC 3339). |
| date_to | string <date-time> Return events at or before this timestamp (RFC 3339). |
| view_sensitive | boolean Default: false When |
Paginated list of audit events
Unauthorized - authentication required or token invalid
Insufficient permissions (requires audit.read)
An unexpected error occurred.
Audit storage (ClickHouse) unavailable
{- "events": [
- {
- "event_id": "550e8400-e29b-41d4-a716-446655440000",
- "session_id": "sess-abc123",
- "thread_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
- "interaction_id": "interact-xyz",
- "user_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
- "username": "admin",
- "event_type": "user_message",
- "message": "string",
- "tool_name": "list_pools",
- "tool_arguments": "{\"device_name\":\"bigip-01\"}",
- "tool_result": "string",
- "error_message": "string",
- "provider": "openai",
- "model": "gpt-4o",
- "ip_address": "192.168.1.***",
- "user_agent": "string",
- "timestamp": "2026-06-01T10:30:00Z",
- "duration_ms": 342,
- "outcome": "success",
- "extra": "string"
}
], - "pagination": {
- "page": 1,
- "pageSize": 20,
- "totalEvents": 87,
- "totalPages": 5
}
}Generates a CSV export of audit events matching the supplied filters. For ≤10 000 matching rows the export is generated synchronously and the response includes a download_url. For >10 000 rows the job is queued asynchronously; the response is 202 Accepted with status: processing and a status_url to poll. Exports are cached on disk for 30 minutes and deleted after download. A per-user limit of 5 concurrent exports is enforced.
| view_sensitive | boolean Default: false Include unmasked PII in the CSV (requires audit.view_sensitive permission). |
| username | string |
| event_type | string Enum: "user_message" "assistant_response" "tool_call" "tool_result" "error" "data_access" "pdf_export" |
| tool | string |
| keyword | string |
| thread_id | string |
| session_id | string |
| date_from | string <date-time> |
| date_to | string <date-time> |
Export ready for download (synchronous path, ≤10 000 rows)
Export queued for background processing (>10 000 rows)
Unauthorized - authentication required or token invalid
Insufficient permissions (requires audit.export)
Export exceeds the maximum row limit (5 000 000 rows)
Per-user concurrent export limit reached (max 5)
An unexpected error occurred.
Audit storage unavailable
{- "username": "string",
- "event_type": "user_message",
- "tool": "string",
- "keyword": "string",
- "thread_id": "string",
- "session_id": "string",
- "date_from": "2026-08-21T06:32:48Z",
- "date_to": "2026-08-21T06:32:48Z"
}{- "export_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
- "status": "ready",
- "download_url": "/api/audit/export/3fa85f64-5717-4562-b3fc-2c963f66afa6",
- "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
- "row_count": 42
}Streams the CSV file for the given export ID. The file is deleted from the server after a successful download. If the export is still being processed, returns 202. If the export has expired (TTL 30 min), returns 410 Gone.
| id required | string <uuid> Export ID returned by POST /audit/export. |
CSV file download
Unauthorized - authentication required or token invalid
Export not found or already downloaded
Export has expired (TTL exceeded)
An unexpected error occurred.
{- "status": 401,
- "message": "Unauthorized"
}Returns a list of all backup and restore jobs
List of jobs
Failed to list backups
{- "success": true,
- "data": [
- {
- "id": "string",
- "name": "string",
- "operation": "backup",
- "backup_type": "full",
- "status": "pending",
- "phase": "string",
- "progress": 0,
- "message": "string",
- "file_name": "string",
- "file_size": 0,
- "storage_target_id": "string",
- "storage_target_name": "string",
- "encrypted": true,
- "error_message": "string",
- "started_at": "2026-08-21T06:32:48Z",
- "completed_at": "2026-08-21T06:32:48Z",
- "created_at": "2026-08-21T06:32:48Z"
}
]
}Triggers a backup operation. Returns a job ID to track progress.
| name | string Optional backup name. If omitted, auto-generated as backup-YYYYMMDD-HHMMSS. |
| backup_type | string Default: "full" Enum: "full" "config" Type of backup to create. Full backups require a remote storage target and are not supported on local storage; config backups may be stored locally. |
| passphrase required | string >= 12 characters Encryption passphrase. Must be at least 12 characters with uppercase, lowercase, digit, and special character. Max 2 consecutive identical characters. |
| storage_target | string Name of the storage target to associate with this backup. Required for full backups (must be a remote target). If omitted, a config backup is stored locally. |
Backup started
Invalid request. Includes SYSTEM-0003 when a full backup is requested without a remote storage target (full backups are not supported on local storage), an invalid backup name/passphrase, or an unknown storage target.
Another backup/restore is in progress
Failed to create the backup job
Platform manager is unavailable
{- "name": "string",
- "backup_type": "full",
- "passphrase": "stringstring",
- "storage_target": "string"
}{- "success": true,
- "data": {
- "id": "string",
- "name": "string",
- "operation": "backup",
- "backup_type": "full",
- "status": "pending",
- "phase": "string",
- "progress": 0,
- "message": "string",
- "file_name": "string",
- "file_size": 0,
- "storage_target_id": "string",
- "storage_target_name": "string",
- "encrypted": true,
- "error_message": "string",
- "started_at": "2026-08-21T06:32:48Z",
- "completed_at": "2026-08-21T06:32:48Z",
- "created_at": "2026-08-21T06:32:48Z"
}
}Compares the most recent completed backup size against the rolling average of the previous 3 completed backups. Returns is_anomalous=true when the latest backup is more than 30% smaller than the rolling average (pct_of_avg < 70).
Analysis result
Failed to calculate backup analysis
{- "success": true,
- "data": {
- "is_anomalous": false,
- "recent_size_bytes": 104857600,
- "rolling_avg_bytes": 99614720,
- "pct_of_avg": 105,
- "sample_size": 3
}
}Returns details of a specific backup job including live progress
| id required | string <uuid> |
Backup details
Backup not found
{- "success": true,
- "data": {
- "id": "string",
- "name": "string",
- "operation": "backup",
- "backup_type": "full",
- "status": "pending",
- "phase": "string",
- "progress": 0,
- "message": "string",
- "file_name": "string",
- "file_size": 0,
- "storage_target_id": "string",
- "storage_target_name": "string",
- "encrypted": true,
- "error_message": "string",
- "started_at": "2026-08-21T06:32:48Z",
- "completed_at": "2026-08-21T06:32:48Z",
- "created_at": "2026-08-21T06:32:48Z"
}
}Deletes a backup file and its job record
| id required | string <uuid> |
Backup deleted
Backup not found
Failed to delete the backup
{- "success": true,
- "data": {
- "message": "string"
}
}Downloads the backup archive file
| id required | string <uuid> |
Backup file stream
Backup not found
{- "success": false,
- "error": {
- "code": "SYSTEM-0002",
- "status": 409,
- "message": "An upgrade is already in progress",
- "help": "Wait for the current upgrade to complete or check status at /api/system/upgrade/status"
}
}Triggers a restore from the specified backup
| id required | string <uuid> |
| passphrase required | string Encryption passphrase used when backup was created |
| components | Array of strings Items Enum: "data" "config" "network" "dns" "hostname" "ntp" "proxy" "ssh" Components to restore. Valid values data, config, network, dns, hostname, ntp, proxy, ssh. 'data' covers databases, 'config' covers configuration; system settings (dns, ntp, proxy, ssh, network, hostname) must be selected individually. |
| force | boolean Skip pre-restore state preservation (no rollback possible) |
Restore started
Invalid request
Backup, backup file, or referenced storage target not found
Another operation is in progress
Failed to start the restore job
Platform manager is unavailable
{- "passphrase": "string",
- "components": [
- "data"
], - "force": true
}{- "success": true,
- "data": {
- "id": "string",
- "name": "string",
- "operation": "backup",
- "backup_type": "full",
- "status": "pending",
- "phase": "string",
- "progress": 0,
- "message": "string",
- "file_name": "string",
- "file_size": 0,
- "storage_target_id": "string",
- "storage_target_name": "string",
- "encrypted": true,
- "error_message": "string",
- "started_at": "2026-08-21T06:32:48Z",
- "completed_at": "2026-08-21T06:32:48Z",
- "created_at": "2026-08-21T06:32:48Z"
}
}Upload a backup .tar file from another system without restoring
| backup required | string <binary> Backup .tar file |
Backup uploaded
Invalid request
Failed to save the uploaded backup
{- "success": true,
- "data": {
- "id": "string",
- "name": "string",
- "operation": "backup",
- "backup_type": "full",
- "status": "pending",
- "phase": "string",
- "progress": 0,
- "message": "string",
- "file_name": "string",
- "file_size": 0,
- "storage_target_id": "string",
- "storage_target_name": "string",
- "encrypted": true,
- "error_message": "string",
- "started_at": "2026-08-21T06:32:48Z",
- "completed_at": "2026-08-21T06:32:48Z",
- "created_at": "2026-08-21T06:32:48Z"
}
}Import a backup file from a local path or remote storage target. Reads the manifest via platform-manager to validate and extract metadata. Creates a DB record referencing the file location without copying.
| storage_target | string Name of the storage target where the file resides. If omitted, looks in local backup directory. |
| file_path required | string Filename on the remote share, or filename in local backup directory. |
Backup imported
Invalid request or file not found
Backup already imported
Failed to import the backup
Storage target or platform manager unreachable
{- "storage_target": "string",
- "file_path": "string"
}{- "success": true,
- "data": {
- "id": "string",
- "name": "string",
- "operation": "backup",
- "backup_type": "full",
- "status": "pending",
- "phase": "string",
- "progress": 0,
- "message": "string",
- "file_name": "string",
- "file_size": 0,
- "storage_target_id": "string",
- "storage_target_name": "string",
- "encrypted": true,
- "error_message": "string",
- "started_at": "2026-08-21T06:32:48Z",
- "completed_at": "2026-08-21T06:32:48Z",
- "created_at": "2026-08-21T06:32:48Z"
}
}List all active (non-expired, non-deleted) conversations for the authenticated user, sorted by most recent message.
List of conversations
Unauthorized - authentication required or token invalid
An unexpected error occurred.
{- "conversations": [
- {
- "id": "550e8400-e29b-41d4-a716-446655440000",
- "user_id": "user-123",
- "title": "Deploy failure on prod-cluster-3",
- "created_at": "2026-08-21T06:32:48Z",
- "last_msg_at": "2026-08-21T06:32:48Z",
- "expires_at": "2026-08-21T06:32:48Z",
- "deleted_at": "2026-08-21T06:32:48Z",
- "message_count": 14
}
]
}Create a new conversation thread. Returns 429 if the user has reached the 50-thread cap.
| title | string <= 500 characters Optional conversation title |
Conversation created
Unauthorized - authentication required or token invalid
Maximum number of active conversations reached (50)
An unexpected error occurred.
{- "title": "Troubleshoot VIP latency"
}{- "id": "550e8400-e29b-41d4-a716-446655440000",
- "user_id": "user-123",
- "title": "Deploy failure on prod-cluster-3",
- "created_at": "2026-08-21T06:32:48Z",
- "last_msg_at": "2026-08-21T06:32:48Z",
- "expires_at": "2026-08-21T06:32:48Z",
- "deleted_at": "2026-08-21T06:32:48Z",
- "message_count": 14
}Get a conversation and its full message history. Returns 410 if the conversation has expired.
| id required | string <uuid> Conversation ID |
Conversation with messages
Unauthorized - authentication required or token invalid
Conversation not found
Conversation has expired
An unexpected error occurred.
{- "conversation": {
- "id": "550e8400-e29b-41d4-a716-446655440000",
- "user_id": "user-123",
- "title": "Deploy failure on prod-cluster-3",
- "created_at": "2026-08-21T06:32:48Z",
- "last_msg_at": "2026-08-21T06:32:48Z",
- "expires_at": "2026-08-21T06:32:48Z",
- "deleted_at": "2026-08-21T06:32:48Z",
- "message_count": 14
}, - "messages": [
- {
- "id": "string",
- "conversation_id": "string",
- "user_id": "string",
- "role": "user",
- "content": "What's the current pool status on prod-cluster-3?",
- "created_at": "2026-08-21T06:32:48Z",
- "is_summarized": false
}
], - "context_summarized": true
}Soft-delete a conversation. The conversation will be retained for 30 days for audit purposes before hard-deletion.
| id required | string <uuid> Conversation ID |
Conversation deleted
Unauthorized - authentication required or token invalid
Conversation not found
An unexpected error occurred.
{- "status": 401,
- "message": "Unauthorized"
}Add a message to a conversation. Resets the 24-hour TTL rolling window. Returns 410 if the conversation has expired.
| id required | string <uuid> Conversation ID |
| role required | string Enum: "user" "assistant" Message sender role |
| content required | string Message content |
Message added
Invalid request (missing role/content or invalid role)
Unauthorized - authentication required or token invalid
Conversation not found
Conversation has expired
An unexpected error occurred.
{- "role": "user",
- "content": "Can you check the pool member health?"
}{- "id": "string",
- "conversation_id": "string",
- "user_id": "string",
- "role": "user",
- "content": "What's the current pool status on prod-cluster-3?",
- "created_at": "2026-08-21T06:32:48Z",
- "is_summarized": false
}Generates and downloads a PDF of either an entire conversation (all turns) or a single assistant response (including its preceding user prompt). PDF is generated server-side using pure-Go rendering (go-pdf/fpdf). Conversations are capped at 200 live messages due to the summarization policy; the export reflects the live message window at time of request. User identity is resolved from the Bearer token — no user_id in the body. The conversation ownership is validated server-side; a conversation belonging to another user returns 404 (not 403) to avoid ID enumeration.
| type required | string Enum: "single" "conversation"
|
| conversation_id required | string <uuid> ID of the conversation to export |
| message_id | string <uuid> Required when |
| session_id | string Browser/session identifier from the chat session that triggered the export. Used to correlate the PDF export audit event with the originating chat session. |
PDF generated successfully — binary file download
Invalid request. Possible causes: - Missing or invalid type (must be single or conversation) - Missing conversation_id - type is single but message_id is absent
Unauthorized - authentication required or token invalid
Conversation not found, not owned by the authenticated user, or no messages matched for the given message_id.
Conversation has expired (past 24-hour TTL)
An unexpected error occurred.
{- "type": "conversation",
- "conversation_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
}{- "status": 400,
- "message": "message_id is required for single response export"
}List all VMware cloud environments for auto-scaling.
Cloud environment listed successfully
Internal server error
[- {
- "id": "string",
- "name": "string",
- "isVmwCluster": true,
- "vmwProperties": {
- "cluster": "string",
- "datacenter": "string",
- "user": "string",
- "password": "string",
- "vmImage": "string",
- "networkInterfaceMapping": [
- {
- "network": "string"
}
], - "ipPoolAliasMapping": [
- {
- "alias": "string",
- "ipPoolReference": "string"
}
]
}, - "validationStatus": "PENDING",
- "validationErrors": [
- "string"
], - "createdAt": "2026-08-21T06:32:48Z",
- "updatedAt": "2026-08-21T06:32:48Z"
}
]Creates a new VMware cloud environment for auto-scaling.
| name required | string [ 1 .. 255 ] characters Name of the cloud environment |
| providerReference required | object (Reference) |
| deviceTemplateReference required | object (Reference) |
| isVmwCluster | boolean Default: true Indicates if VMware cluster is being used |
| vmwProperties required | object (VMwareEnvironmentProperties) |
Cloud environment created successfully
Bad request - validation failed
Provider or device template not found
Conflict - environment with same name already exists
Internal server error
{- "name": "string",
- "isVmwCluster": true,
- "vmwProperties": {
- "cluster": "string",
- "datacenter": "string",
- "user": "string",
- "password": "pa$$word",
- "vmImage": "string",
- "networkInterfaceMapping": [
- {
- "network": "string"
}
], - "ipPoolAliasMapping": [
- {
- "alias": "string",
- "ipPoolReference": "string"
}
]
}
}{- "id": "string",
- "name": "string",
- "isVmwCluster": true,
- "vmwProperties": {
- "cluster": "string",
- "datacenter": "string",
- "user": "string",
- "password": "string",
- "vmImage": "string",
- "networkInterfaceMapping": [
- {
- "network": "string"
}
], - "ipPoolAliasMapping": [
- {
- "alias": "string",
- "ipPoolReference": "string"
}
]
}, - "validationStatus": "PENDING",
- "validationErrors": [
- "string"
], - "createdAt": "2026-08-21T06:32:48Z",
- "updatedAt": "2026-08-21T06:32:48Z"
}| environmentId required | string <uuid> UUID of the cloud environment |
Cloud environment returned successfully
Cloud environment not found
Internal server error
{- "id": "string",
- "name": "string",
- "isVmwCluster": true,
- "vmwProperties": {
- "cluster": "string",
- "datacenter": "string",
- "user": "string",
- "password": "string",
- "vmImage": "string",
- "networkInterfaceMapping": [
- {
- "network": "string"
}
], - "ipPoolAliasMapping": [
- {
- "alias": "string",
- "ipPoolReference": "string"
}
]
}, - "validationStatus": "PENDING",
- "validationErrors": [
- "string"
], - "createdAt": "2026-08-21T06:32:48Z",
- "updatedAt": "2026-08-21T06:32:48Z"
}| environmentId required | string <uuid> UUID of the cloud environment |
| name | string [ 1 .. 255 ] characters |
| isVmwCluster | boolean |
| vmwProperties | object (VMwareEnvironmentProperties) |
Cloud environment updated successfully
Bad request - validation failed
Cloud environment not found
Conflict - environment with same name already exists
Internal server error
{- "name": "string",
- "isVmwCluster": true,
- "vmwProperties": {
- "cluster": "string",
- "datacenter": "string",
- "user": "string",
- "password": "pa$$word",
- "vmImage": "string",
- "networkInterfaceMapping": [
- {
- "network": "string"
}
], - "ipPoolAliasMapping": [
- {
- "alias": "string",
- "ipPoolReference": "string"
}
]
}
}{- "id": "string",
- "name": "string",
- "isVmwCluster": true,
- "vmwProperties": {
- "cluster": "string",
- "datacenter": "string",
- "user": "string",
- "password": "string",
- "vmImage": "string",
- "networkInterfaceMapping": [
- {
- "network": "string"
}
], - "ipPoolAliasMapping": [
- {
- "alias": "string",
- "ipPoolReference": "string"
}
]
}, - "validationStatus": "PENDING",
- "validationErrors": [
- "string"
], - "createdAt": "2026-08-21T06:32:48Z",
- "updatedAt": "2026-08-21T06:32:48Z"
}Deletes an existing VMware cloud environment.
| environmentId required | string <uuid> UUID of the cloud environment |
Cloud environment deleted successfully
Bad request - environment is in use
Cloud environment not found
Internal server error
{- "error": "string",
- "code": "string"
}List of cloud providers retrieved successfully
An unexpected error occurred.
[- {
- "id": "string",
- "providerType": "VMware",
- "name": "string",
- "vmwProperties": {
- "vCenterHostname": "example.com"
}, - "createdAt": "2026-08-21T06:32:48Z",
- "updatedAt": "2026-08-21T06:32:48Z"
}
]| providerType required | string Value: "VMware" Type of cloud provider |
| name required | string [ 1 .. 255 ] characters Name of the cloud provider |
| vmwProperties | object (VMwareProviderProperties) |
Cloud provider created successfully
Invalid request
Conflict - provider with same name already exists
An unexpected error occurred.
{- "providerType": "VMware",
- "name": "string",
- "vmwProperties": {
- "vCenterHostname": "example.com"
}
}{- "id": "string",
- "providerType": "VMware",
- "name": "string",
- "vmwProperties": {
- "vCenterHostname": "example.com"
}, - "createdAt": "2026-08-21T06:32:48Z",
- "updatedAt": "2026-08-21T06:32:48Z"
}| providerId required | string <uuid> UUID of the cloud provider |
Cloud provider retrieved successfully
Invalid request
Resource not found
An unexpected error occurred.
{- "id": "string",
- "providerType": "VMware",
- "name": "string",
- "vmwProperties": {
- "vCenterHostname": "example.com"
}, - "createdAt": "2026-08-21T06:32:48Z",
- "updatedAt": "2026-08-21T06:32:48Z"
}| providerId required | string <uuid> UUID of the cloud provider |
| name | string [ 1 .. 255 ] characters Name of the cloud provider |
| vmwProperties | object (VMwareProviderProperties) |
Cloud provider updated successfully
Invalid request
Resource not found
Conflict - provider with same name already exists
An unexpected error occurred.
{- "name": "string",
- "vmwProperties": {
- "vCenterHostname": "example.com"
}
}{- "id": "string",
- "providerType": "VMware",
- "name": "string",
- "vmwProperties": {
- "vCenterHostname": "example.com"
}, - "createdAt": "2026-08-21T06:32:48Z",
- "updatedAt": "2026-08-21T06:32:48Z"
}| providerId required | string <uuid> UUID of the cloud provider |
Provider deleted successfully
Invalid request
Resource not found
An unexpected error occurred.
{- "code": "string",
- "message": "string",
- "details": [
- "string"
]
}Returns all rows in upgrade.bigip_upgrade_paths. Includes both YAML-seeded rows (is_operator_override=false) and operator-managed rows (is_operator_override=true).
List of upgrade path rules
Authentication required
{- "data": [
- {
- "id": "string",
- "target_major_version": "21",
- "min_source_version": "17.1.0",
- "max_source_version": "string",
- "notes": "string",
- "source_kbase": "K13845",
- "is_operator_override": true,
- "created_at": "2026-08-21T06:32:48Z",
- "updated_at": "2026-08-21T06:32:48Z"
}
], - "total": 0
}Inserts or updates a row in upgrade.bigip_upgrade_paths using the
natural key (target_major_version, min_source_version).
The row is always marked is_operator_override=true — the CompatSeeder
will never overwrite it on service restart.
Why upsert (not separate POST/PATCH)?
The natural business key is (target_major_version, min_source_version),
not the UUID. Operators think in terms of rules, not opaque IDs. The
upsert pattern lets operators:
Response codes:
201 Created — a new row was inserted (the natural key did not previously exist)200 OK — an existing row was updated (the natural key already existed)| target_major_version required | string non-empty Target BIG-IP major version, e.g. "17" or "21". |
| min_source_version required | string non-empty Minimum source version required (inclusive), e.g. "17.1.0". |
| max_source_version | string Nullable Maximum source version (inclusive). Omit or null for no upper bound. |
| notes | string Nullable Optional human-readable note. |
Existing row updated (natural key already existed)
New row created (natural key did not previously exist)
Invalid request
Authentication required
{- "target_major_version": "21",
- "min_source_version": "14.0.0",
- "max_source_version": "string",
- "notes": "string"
}{- "id": "string",
- "target_major_version": "21",
- "min_source_version": "17.1.0",
- "max_source_version": "string",
- "notes": "string",
- "source_kbase": "K13845",
- "is_operator_override": true,
- "created_at": "2026-08-21T06:32:48Z",
- "updated_at": "2026-08-21T06:32:48Z"
}Returns a single row from upgrade.bigip_upgrade_paths addressed by its UUID. Includes both YAML-seeded rows (is_operator_override=false) and operator-managed rows (is_operator_override=true).
| compatId required | string <uuid> Unique ID of a compatibility matrix row. |
Upgrade path rule
Authentication required
Resource not found
{- "id": "string",
- "target_major_version": "21",
- "min_source_version": "17.1.0",
- "max_source_version": "string",
- "notes": "string",
- "source_kbase": "K13845",
- "is_operator_override": true,
- "created_at": "2026-08-21T06:32:48Z",
- "updated_at": "2026-08-21T06:32:48Z"
}| compatId required | string <uuid> Unique ID of a compatibility matrix row. |
Row deleted
Authentication required
Resource not found
{- "error": "string",
- "code": "string"
}Current AI provider configuration
No configuration found
Internal server error
{- "provider_name": "string",
- "base_url": "string",
- "model": "string",
- "ca": "string",
- "skip_tls_verify": true
}| provider_name required | string AI provider name (e.g., openai, anthropic, local) |
| api_token | string API token for the provider. Required for 'openai' and 'claude' providers, optional for 'local' provider. |
| base_url | string Base URL for the provider. Required for 'local' provider, optional for 'openai' and 'claude'. |
| model | string Model name to use. Required for 'local' provider, optional for others. |
| ca | string <uuid> Optional CA certificate UUID from trust store for custom SSL/TLS connections |
| skip_tls_verify | boolean Indicates if TLS verification should be skipped for this provider |
Configuration saved successfully
Validation error
Internal server error
{- "provider_name": "string",
- "api_token": "string",
- "base_url": "string",
- "model": "string",
- "ca": "string",
- "skip_tls_verify": true
}{- "status": "validation_success"
}Configuration deleted successfully
Configuration not found
Internal server error
{- "status": "validation_success"
}Current AIDF configuration
No configuration found
Internal server error
{- "endpoint": "string",
- "tenant_id": "string",
- "data_types": [
- "logs"
]
}| endpoint required | string AIDF endpoint URL |
| tenant_id required | string Tenant ID |
| tenant_token required | string Tenant authentication token |
| data_types | Array of strings non-empty Default: ["logs","metrics"] Items Enum: "logs" "metrics" Data types to send to AIDF (logs, metrics, or both). Defaults to ["logs", "metrics"] if not specified. Cannot be an empty array. |
Configuration saved successfully
Validation error
Internal server error
{- "endpoint": "string",
- "tenant_id": "string",
- "tenant_token": "string",
- "data_types": [
- "logs",
- "metrics"
]
}{- "status": "validation_success"
}Configuration deleted successfully
Configuration not found
Internal server error
{- "status": "validation_success"
}Delete a specific data center by its ID.
| id required | string <uuid> Unique identifier of the data center to delete. |
Data center deleted successfully.
Validation error.
Data center not found.
Cannot delete data center with associated devices.
Internal server error.
{- "error": "string",
- "code": "string"
}Retrieve all data centers with their registered devices.
| deviceType | string Default: "all" Enum: "all" "bigip" "f5os" Filter by device kind. One of all, bigip, f5os. Defaults to all. |
List of all data centers with their devices.
Internal server error.
{- "data_centers": [
- {
- "id": "string",
- "name": "string",
- "devices": [
- {
- "retention": "string",
- "port": 0,
- "collection_interval": 1,
- "max_concurrent_connections": 1,
- "tls_enabled": false,
- "ca": "string",
- "modules": {
- "apm": false,
- "cgnat": false,
- "dns": false,
- "dos": false,
- "firewall": false,
- "gtm": false,
- "policy_api_protection": false,
- "policy_asm": false,
- "policy_firewall": false,
- "policy_ip_intelligence": false,
- "policy_nat": false,
- "profile_dos": false
}, - "id": "string",
- "alias_name": "string",
- "description": "string",
- "username": "string",
- "password": "string",
- "data_center": "string",
- "endpoint": "string",
- "deviceName": "string",
- "deviceVersion": "string",
- "devicePlatform": "string",
- "deviceType": "bigip",
- "schema": "http",
- "type": "string",
- "host": "string",
- "status": "string",
- "hardwareModel": "string",
- "serialNumber": "string",
- "osVersion": "string",
- "osBuild": "string",
- "lastSeenAt": "2026-08-21T06:32:48Z"
}
], - "device_count": 0
}
], - "total_data_centers": 0,
- "total_devices": 0
}Get the currently running or most recent migration task. Returns the active migration task if one is in progress, otherwise returns the most recent completed/failed task.
Migration task information retrieved successfully
No migration tasks found
Internal server error
{- "task_id": "123e4567-e89b-12d3-a456-426614174000",
- "status": "INIT",
- "message": "Migration task created successfully. Use the task_id to query status."
}Start an asynchronous migration task for BIG-IP devices from AST (Application Study Tool) configuration files. Returns a task ID that can be used to query migration status. Only one migration task can be running at a time - attempting to start a second task will return an error.
AST configuration files containing device information.
| defaults_file required | string <binary> ast_defaults.yaml file containing default settings (YAML format) |
| receivers_file required | string <binary> ast_receivers.yml file containing receiver configurations (YAML format) |
Migration task created successfully. Use the returned task_id to query status.
Validation error in uploaded files.
A migration task is already in progress.
Internal server error.
{- "task_id": "123e4567-e89b-12d3-a456-426614174000",
- "status": "INIT",
- "message": "Migration task created successfully. Use the task_id to query status."
}Get the status of a device migration task including overall progress and individual device status.
| task_id required | string <uuid> The task ID returned from the migration request |
| include_devices | boolean Default: true Include individual device status details |
| limit | integer [ 1 .. 1000 ] Default: 100 Maximum number of device details to return |
| offset | integer >= 0 Default: 0 Offset for pagination of device details |
| updated_since | string <date-time> Filter devices updated since this timestamp (ISO 8601 format, e.g., 2026-01-30T08:00:00Z) |
Migration status retrieved successfully
Task not found
Internal server error
{- "task_id": "123e4567-e89b-12d3-a456-426614174000",
- "task_type": "MIGRATION",
- "state": "IN_PROGRESS",
- "status": "RUNNING",
- "progress": 45,
- "total_devices": 100,
- "pending_devices": 55,
- "validated_devices": 40,
- "failed_devices": 5,
- "error_message": null,
- "created_at": "2026-01-29T10:30:00Z",
- "updated_at": "2026-01-29T10:35:00Z",
- "devices": [
- {
- "device_name": "bigip/prod-01",
- "validation_status": "SUCCESS",
- "error_message": null,
- "created_at": "2026-01-29T10:30:00Z",
- "updated_at": "2026-01-29T10:32:00Z"
}
]
}Get paginated device-level progress for a migration task with delta update support. Use this for live UI updates showing per-device status (Connected/Failed/In Progress). Supports polling with 'since' parameter to fetch only recently updated devices.
| task_id required | string <uuid> The task ID returned from the migration request |
| page | integer >= 1 Default: 1 |
| size | integer >= 1 Number of items per page. |
| since | string <date-time> Return only devices updated after this timestamp (ISO 8601 format). Use the lastSync value from previous response for delta updates. |
| search | string Search term to filter devices by name, alias, or endpoint |
| sort | string Sort order, e.g. 'name,-created_at' (prefix '-' for descending) |
Device progress retrieved successfully
Invalid request parameters
Task not found
Internal server error
{- "task_id": "550e8400-e29b-41d4-a716-446655440000",
- "task_status": "RUNNING",
- "task_progress": 45,
- "page": 1,
- "size": 20,
- "total": 45,
- "last_sync": "2026-01-30T12:12:30Z",
- "devices": [
- {
- "id": "660e8400-e29b-41d4-a716-446655440001",
- "device_name": "bigip-prod-01.example.com",
- "status": "SUCCESS",
- "error_message": "Invalid credentials",
- "last_modified": "2026-01-30T12:12:00Z"
}
]
}Retrieve all staging CA certificates associated with a migration task. Returns the list of CA bundles that were extracted during the migration process and are available for validation and commit operations.
| task_id required | string <uuid> The task ID returned from the migration request |
| page | integer >= 1 Default: 1 |
| size | integer >= 1 Number of items per page. |
CA bundle list retrieved successfully
Invalid request parameters
Task not found
Internal server error
{- "task_id": "550e8400-e29b-41d4-a716-446655440000",
- "page": 1,
- "size": 20,
- "total": 5,
- "ca_bundles": [
- {
- "id": "660e8400-e29b-41d4-a716-446655440000",
- "name": "Production Root CA",
- "description": "Root CA for production environment",
- "certificate_content": "-----BEGIN CERTIFICATE-----\nMIIDXTCCAkWgA...\n-----END CERTIFICATE-----",
- "created_at": "2026-01-30T10:00:00Z",
- "last_modified": "2026-01-30T12:00:00Z"
}
]
}Clean up all staging data associated with a migration task. This removes all staging devices and trust store entries that have not been committed. Successfully committed devices and trust stores remain intact.
| task_id required | string <uuid> The task ID to clean up |
| force | boolean Default: false Force cleanup even if task is still running. WARNING: Use with extreme caution - only when a task is stuck for a very long time. Forcing cleanup of a running task may lead to inconsistent state. |
Cleanup completed successfully
Task not found
Internal server error
{- "task_id": "123e4567-e89b-12d3-a456-426614174000",
- "deleted_devices": 10,
- "deleted_trust_stores": 5,
- "message": "Successfully cleaned up migration task staging data"
}Retry failed devices from an existing migration task. This endpoint reuses the same task ID and only retries devices with validation_status = 'FAILED'. Failed devices are reset to 'PENDING' and the task state is reset to 'IN_PROGRESS'.
Requirements:
The retry process:
| task_id required | string <uuid> The task ID to retry failed devices for |
Retry initiated successfully. Use the same task_id to query status.
No failed devices to retry
Task not found
A migration task is already running
Internal server error
{- "message": "Retry task initiated successfully",
- "task_id": "123e4567-e89b-12d3-a456-426614174000"
}Retrieve details of a specific staging device including its validation status, configuration, and error messages if any.
| staging_device_id required | string <uuid> UUID of the staging device to retrieve |
Staging device retrieved successfully
Staging device not found
Internal server error
{- "id": "660e8400-e29b-41d4-a716-446655440001",
- "task_id": "550e8400-e29b-41d4-a716-446655440000",
- "device_name": "bigip-prod-01.example.com",
- "username": "admin",
- "data_center": "US-EAST-1",
- "tls_enabled": true,
- "ca_bundle_id": "660e8400-e29b-41d4-a716-446655440002",
- "collection_interval": 60,
- "max_concurrent_connections": 5,
- "validation_status": "SUCCESS",
- "error_message": "Connection timeout",
- "created_at": "2026-01-30T10:00:00Z",
- "last_modified": "2026-01-30T12:00:00Z"
}Updates a single staging device with provided fields, validates connectivity, and commits the device to the main devices table. If a device with the same endpoint exists, it will be updated instead of creating a new one.
| staging_device_id required | string <uuid> UUID of the staging device to update |
| alias_name | string <= 100 characters |
| description | string <= 500 characters |
| username | string <= 255 characters |
| password | string <= 255 characters |
| endpoint | string |
| data_center | string <= 255 characters |
| retention | string (Retention) ^P(\d+Y)?(\d+M)?(\d+D)?(T(\d+H)?(\d+M)?(\d+S)?)?$ ISO 8601 duration (e.g., P1Y for 1 year, P30D for 30 days).Supported units are Y (years), M (months), D (days), H (hours), M (minutes), S (seconds). Internally converted and rounded up to whole days. Maximum allowed retention is 1 year (P1Y). |
| collection_interval | integer >= 1 |
| max_concurrent_connections | integer [ 1 .. 20 ] Maximum concurrent HTTP connections per device |
| tls_enabled | boolean |
| ca | string <uuid> |
| modules | object |
Staging device updated and committed successfully
Device validation failed or invalid request
Staging device not found
Internal server error
{- "alias_name": "string",
- "description": "string",
- "username": "string",
- "password": "string",
- "endpoint": "string",
- "data_center": "string",
- "retention": "string",
- "collection_interval": 1,
- "max_concurrent_connections": 1,
- "tls_enabled": true,
- "ca": "string",
- "modules": {
- "apm": true,
- "cgnat": true,
- "dns": true,
- "dos": true,
- "firewall": true,
- "gtm": true,
- "profile_dos": true,
- "policy_api_protection": true,
- "policy_asm": true,
- "policy_firewall": true,
- "policy_ip_intelligence": true,
- "policy_nat": true
}
}{- "message": "Staging device updated and committed successfully",
- "staging_device_id": "string"
}Updates a single staging CA bundle with provided fields, validates certificate format, and commits the certificate to the trust_store table. If a certificate with the same content already exists, it will be linked instead of creating a duplicate.
| staging_ca_id required | string <uuid> UUID of the staging CA bundle to update |
| name required | string <= 255 characters Name of the certificate |
| description | string Description of the certificate |
| certificate_content required | string PEM encoded certificate content |
Staging CA bundle updated and committed successfully
Invalid certificate data
Staging CA bundle not found
Internal server error
{- "name": "string",
- "description": "string",
- "certificate_content": "string"
}{- "message": "Staging CA bundle updated and committed successfully",
- "staging_ca_id": "string"
}Synchronous migration of BIG-IP devices from AST configuration files (legacy endpoint). For better experience with large migrations, use the async endpoint instead.
AST configuration files containing device information.
| defaults_file required | string <binary> ast_defaults.yaml file containing default settings (YAML format) |
| receivers_file required | string <binary> ast_receivers.yml file containing receiver configurations (YAML format) |
Migration completed with summary of results.
Validation error in uploaded files.
Internal server error.
{- "total": 10,
- "successful": 8,
- "failed": 2,
- "results": [
- {
- "device_name": "bigip-prod-01",
- "status": "success",
- "message": "Device imported successfully",
- "device_id": "123e4567-e89b-12d3-a456-426614174000"
}
]
}Import multiple devices (BIG-IP and/or F5OS) to F5 Insights in a single operation.
Array of devices to be imported (mixed BIG-IP and F5OS allowed).
| devices required | Array of any (AddDeviceRequest) non-empty List of devices to import (BIG-IP or F5OS per item) |
Bulk import completed with summary of results.
Validation error.
Internal server error.
{- "devices": [
- {
- "deviceType": "bigip",
- "retention": "string",
- "port": 1,
- "collection_interval": 1,
- "max_concurrent_connections": 1,
- "tls_enabled": false,
- "ca": "string",
- "modules": {
- "apm": false,
- "cgnat": false,
- "dns": false,
- "dos": false,
- "firewall": false,
- "gtm": false,
- "policy_api_protection": false,
- "policy_asm": false,
- "policy_firewall": false,
- "policy_ip_intelligence": false,
- "policy_nat": false,
- "profile_dos": false
}, - "id": "string",
- "alias_name": "string",
- "description": "string",
- "username": "string",
- "password": "string",
- "data_center": "string",
- "endpoint": "string"
}
]
}{- "total": 10,
- "successful": 8,
- "failed": 2,
- "results": [
- {
- "device_name": "bigip-prod-01",
- "status": "success",
- "message": "Device imported successfully",
- "device_id": "123e4567-e89b-12d3-a456-426614174000"
}
]
}Get the currently running or most recent import task. Returns the active import task if one is in progress, otherwise returns the most recent completed/failed task.
Import task state and per-device results.
No import tasks found.
Internal server error.
{- "task_id": "string",
- "state": "INIT",
- "status": "RUNNING",
- "progress": 0,
- "total": 0,
- "successful": 0,
- "failed": 0,
- "error_message": "string",
- "items": [
- {
- "device_type": "bigip",
- "alias_name": "string",
- "endpoint": "string",
- "status": "pending",
- "device_id": "string",
- "error_message": "string"
}
], - "created_at": "2026-08-21T06:32:48Z",
- "updated_at": "2026-08-21T06:32:48Z"
}Asynchronously import a batch of devices (BIG-IP and/or F5OS) and track the result as a task. Accepts the same devices[] body as bulk-import; in addition Content-Type: application/yaml is supported so a YAML file from disk can be POSTed directly. Returns a task id immediately; poll the status endpoint for per-device outcomes once items start completing.
Array of devices to import (mixed BIG-IP and F5OS allowed).
| devices required | Array of any (AddDeviceRequest) [ 1 .. 1000 ] items List of devices to import (BIG-IP or F5OS per item). |
Import task accepted. Poll the status endpoint with the returned task_id.
Validation error.
Internal server error.
{- "devices": [
- {
- "deviceType": "bigip",
- "retention": "string",
- "port": 1,
- "collection_interval": 1,
- "max_concurrent_connections": 1,
- "tls_enabled": false,
- "ca": "string",
- "modules": {
- "apm": false,
- "cgnat": false,
- "dns": false,
- "dos": false,
- "firewall": false,
- "gtm": false,
- "policy_api_protection": false,
- "policy_asm": false,
- "policy_firewall": false,
- "policy_ip_intelligence": false,
- "policy_nat": false,
- "profile_dos": false
}, - "id": "string",
- "alias_name": "string",
- "description": "string",
- "username": "string",
- "password": "string",
- "data_center": "string",
- "endpoint": "string"
}
]
}{- "task_id": "string",
- "message": "Import task accepted"
}Clean up an async import task and its tracked results. Removes the task record (including the per-device results stored in status_json). Devices that were successfully onboarded remain intact in the main tables.
| task_id required | string <uuid> The import task ID to clean up |
| force | boolean Default: false Force cleanup even if the task is still running. WARNING: Use with extreme caution - only when a task is stuck for a very long time. Forcing cleanup of a running task may lead to inconsistent state. |
Cleanup completed successfully
Task not found
Internal server error
{- "task_id": "123e4567-e89b-12d3-a456-426614174000",
- "message": "Successfully cleaned up import task"
}Returns the current state of an async import task plus the full per-device result list. items[] is updated as workers finish each device, so polling shows progress without a separate per-device endpoint.
| task_id required | string <uuid> Task id returned by POST /device-management/devices/import. |
Task state and per-device results.
Task not found.
Internal server error.
{- "task_id": "string",
- "state": "INIT",
- "status": "RUNNING",
- "progress": 0,
- "total": 0,
- "successful": 0,
- "failed": 0,
- "error_message": "string",
- "items": [
- {
- "device_type": "bigip",
- "alias_name": "string",
- "endpoint": "string",
- "status": "pending",
- "device_id": "string",
- "error_message": "string"
}
], - "created_at": "2026-08-21T06:32:48Z",
- "updated_at": "2026-08-21T06:32:48Z"
}Returns a paginated list of device templates.
Supports OData-style query parameters for filtering, sorting, pagination, field selection, and total count:
| Parameter | Example |
|---|---|
$filter |
state eq 'DEPLOYED' |
$orderby |
name asc |
$top |
10 |
$skip |
20 |
$select |
id,name,state |
$count |
true |
| $filter | string Example: $filter=state eq 'DEPLOYED' OData filter expression. Supported fields: |
| $orderby | string Example: $orderby=name asc OData ordering expression. Supported fields: |
| $top | integer [ 1 .. 100 ] Default: 20 Example: $top=10 Maximum number of items to return (page size). Default 20, max 100. |
| $skip | integer >= 0 Default: 0 Number of items to skip for pagination. Default 0. |
| $select | string Example: $select=id,name,state Comma-separated list of fields to include in the response.
Example: |
| $count | boolean Default: false Example: $count=true When |
Paginated list of device templates
Internal Server Error
{- "status": 200,
- "count": 2,
- "totalItems": 2,
- "items": [
- {
- "id": "550e8400-e29b-41d4-a716-446655440000",
- "name": "BIG-IP Standard Template",
- "provider": "VMware",
- "description": "Standard VMware configuration",
- "state": "DEPLOYED",
- "locked": false,
- "lockReason": "NONE",
- "createdAt": "2026-01-15T09:23:41Z",
- "updatedAt": "2026-03-22T14:45:10Z"
}, - {
- "id": "660e8400-e29b-41d4-a716-446655440001",
- "name": "BIG-IP HA Template",
- "provider": "AWS",
- "description": "High availability configuration",
- "state": "DRAFT",
- "locked": false,
- "lockReason": "NONE",
- "createdAt": "2026-02-10T11:00:00Z",
- "updatedAt": "2026-02-10T11:00:00Z"
}
], - "selfLink": "/api/device-templates"
}Creates a new device template.
The optional draft flag controls the initial state:
draft |
Initial state | Response |
|---|---|---|
true |
DRAFT |
201 Created |
false / omitted |
NEW |
200 OK |
To deploy a template, use the separate POST /device-templates/{id}/deploy endpoint.
| name required | string [ 1 .. 255 ] characters Human-readable name for the device template. Must be unique. |
| provider required | string [ 1 .. 255 ] characters Provider or vendor (e.g. VMware, AWS, Azure). |
| description | string <= 1000 characters Nullable Optional human-readable description. |
| draft | boolean Default: false When |
| definition required | object (DeviceTemplateDefinition) Template definition containing all BIG-IP device configuration parameters. |
OK — device template created in NEW state (draft=false or omitted)
Created — device template created in DRAFT state (draft=true)
Bad Request
Conflict — name already exists
Internal Server Error
{- "name": "BIG-IP Standard Template",
- "provider": "VMware",
- "description": "Standard VMware configuration for production workloads",
- "definition": {
- "rootPassword": "s3cur3P@ss!",
- "timeZone": "America/Los_Angeles",
- "defaultRoute": "10.0.0.1",
- "managementSslPort": 443,
- "hostnameComponents": [
- {
- "type": "STATIC_TEXT",
- "value": "bigip-"
}, - {
- "type": "SERIAL_NUMBER",
- "value": null
}
], - "lookupServerList": [
- "8.8.8.8",
- "8.8.4.4"
], - "ntpServerList": [
- "0.pool.ntp.org"
], - "userAccountList": [
- {
- "username": "admin",
- "password": "adminP@ss!",
- "role": "administrator",
- "shell": "bash"
}
], - "provisionedModuleList": [
- {
- "module": "LTM",
- "level": "NOMINAL"
}
], - "networkRouteList": [
- {
- "name": "default",
- "gatewayAddress": "10.0.0.1",
- "destination": "0.0.0.0/0"
}
], - "vlanList": [
- {
- "name": "external",
- "nic": "1.1",
- "mtu": 1500,
- "tag": 100
}
], - "selfIpList": [
- {
- "name": "external-self",
- "ipPoolReference": "c3d4e5f6-a7b8-4890-8bcd-ef1234567892",
- "vlanName": "external",
- "portLockdown": "default",
- "allowServices": null
}
]
}
}{- "id": "550e8400-e29b-41d4-a716-446655440000",
- "state": "NEW",
- "status": 200,
- "selfLink": "/api/device-templates/550e8400-e29b-41d4-a716-446655440000",
- "createdAt": "2026-01-15T09:23:41Z",
- "updatedAt": "2026-01-15T09:23:41Z"
}Returns a single device template identified by its ID.
Supports the OData $select parameter to return only specific fields:
GET /device-templates/{id}?$select=id,name,state
GET /device-templates/{id}?$select=id,name,locked,lockReason,definition| id required | string <uuid> Example: 550e8400-e29b-41d4-a716-446655440000 UUID of the device template. |
| $select | string Example: $select=id,name,state Comma-separated list of fields to include in the response.
Example: |
Device template returned successfully
Not Found
Internal Server Error
{- "status": 200,
- "id": "550e8400-e29b-41d4-a716-446655440000",
- "name": "BIG-IP Standard Template",
- "provider": "VMware",
- "description": "Standard VMware configuration for production workloads",
- "state": "DEPLOYED",
- "locked": true,
- "lockReason": "READ_ONLY",
- "definition": {
- "rootPassword": "s3cur3P@ss!",
- "timeZone": "America/Los_Angeles",
- "defaultRoute": "10.0.0.1",
- "managementSslPort": 443,
- "hostnameComponents": [
- {
- "type": "STATIC_TEXT",
- "value": "bigip-"
}, - {
- "type": "SERIAL_NUMBER",
- "value": null
}
], - "lookupServerList": [
- "8.8.8.8",
- "8.8.4.4"
], - "ntpServerList": [
- "0.pool.ntp.org"
], - "userAccountList": [
- {
- "username": "admin",
- "password": "adminP@ss!",
- "role": "administrator",
- "shell": "bash"
}
], - "provisionedModuleList": [
- {
- "module": "LTM",
- "level": "NOMINAL"
}
], - "networkRouteList": [
- {
- "name": "default",
- "gatewayAddress": "10.0.0.1",
- "destination": "0.0.0.0/0"
}
], - "vlanList": [
- {
- "name": "external",
- "nic": "1.1",
- "mtu": 1500,
- "tag": 100
}
], - "selfIpList": [
- {
- "name": "external-self",
- "ipPoolReference": "c3d4e5f6-a7b8-4890-8bcd-ef1234567892",
- "vlanName": "external",
- "portLockdown": "default",
- "allowServices": null
}
]
}, - "lastValidatedAt": "2026-03-10T08:00:00Z",
- "validatedAgainstLiveVm": false,
- "lastDeployedVersion": null,
- "selfLink": "/api/device-templates/550e8400-e29b-41d4-a716-446655440000",
- "createdAt": "2026-01-15T09:23:41Z",
- "updatedAt": "2026-04-01T14:30:00Z"
}Replaces all fields of an existing device template.
Precondition: The device template must not be locked (locked=true → 409).
Templates in DEPLOYING state are system-locked and cannot be modified.
The optional draft flag controls state transitions:
| Current state | draft |
New state | Response |
|---|---|---|---|
DRAFT |
true |
DRAFT |
200 OK |
DRAFT |
false / omitted |
NEW |
200 OK |
NEW |
— | NEW |
200 OK |
DEPLOYED |
— | DEPLOYED |
200 OK |
DEPLOYING |
any | — | 409 Conflict |
| Any (locked) | any | — | 409 Conflict |
To deploy a template, use the separate POST /device-templates/{id}/deploy endpoint.
| id required | string <uuid> Example: 550e8400-e29b-41d4-a716-446655440000 UUID of the device template. |
| name required | string [ 1 .. 255 ] characters Human-readable name for the device template. Must be unique. |
| provider required | string [ 1 .. 255 ] characters Provider or vendor (e.g. VMware, AWS, Azure). |
| description | string <= 1000 characters Nullable Optional human-readable description. |
| draft | boolean Default: false When |
| definition required | object (DeviceTemplateDefinition) Template definition containing all BIG-IP device configuration parameters. |
OK — device template updated successfully
Bad Request
Not Found
Conflict — locked, deploying, or name collision
Internal Server Error
{- "name": "BIG-IP Standard Template v2",
- "provider": "VMware",
- "description": "Updated VMware configuration with HA support",
- "definition": {
- "rootPassword": "n3wS3cur3P@ss!",
- "timeZone": "America/Los_Angeles",
- "defaultRoute": "10.0.0.1",
- "managementSslPort": 443,
- "hostnameComponents": [
- {
- "type": "STATIC_TEXT",
- "value": "bigip-"
}, - {
- "type": "SERIAL_NUMBER",
- "value": null
}
], - "lookupServerList": [
- "8.8.8.8",
- "8.8.4.4"
], - "ntpServerList": [
- "0.pool.ntp.org"
], - "userAccountList": [
- {
- "username": "admin",
- "password": "adminP@ss!",
- "role": "administrator",
- "shell": "bash"
}
], - "provisionedModuleList": [
- {
- "module": "LTM",
- "level": "NOMINAL"
}, - {
- "module": "ASM",
- "level": "NOMINAL"
}
], - "networkRouteList": [
- {
- "name": "default",
- "gatewayAddress": "10.0.0.1",
- "destination": "0.0.0.0/0"
}
], - "vlanList": [
- {
- "name": "external",
- "nic": "1.1",
- "mtu": 1500,
- "tag": 100
}, - {
- "name": "internal",
- "nic": "1.2",
- "mtu": 1500,
- "tag": 200
}
], - "selfIpList": [
- {
- "name": "external-self",
- "ipPoolReference": "c3d4e5f6-a7b8-4890-8bcd-ef1234567892",
- "vlanName": "external",
- "portLockdown": "default",
- "allowServices": null
}, - {
- "name": "internal-self",
- "ipPoolReference": "d4e5f6a7-b8c9-4890-8bcd-ef1234567893",
- "vlanName": "internal",
- "portLockdown": "none",
- "allowServices": null
}
]
}
}{- "id": "550e8400-e29b-41d4-a716-446655440000",
- "state": "NEW",
- "status": 200,
- "selfLink": "/api/device-templates/550e8400-e29b-41d4-a716-446655440000",
- "createdAt": "2026-01-15T09:23:41Z",
- "updatedAt": "2026-03-22T14:45:10Z"
}Partially updates an existing device template. Only the provided fields are modified; omitted fields retain their current values.
Precondition: The device template must not be locked.
Templates in DEPLOYING state cannot be patched.
For the definition object, merge-patch semantics apply:
null are cleared.vlanList, selfIpList) are replaced wholesale.| id required | string <uuid> Example: 550e8400-e29b-41d4-a716-446655440000 UUID of the device template. |
| name | string [ 1 .. 255 ] characters Human-readable name. Must be unique. |
| provider | string [ 1 .. 255 ] characters Provider or vendor. |
| description | string <= 1000 characters Nullable Optional description. Set to |
| draft | boolean Controls DRAFT state on partial update. |
| definition | object (PatchDeviceTemplateDefinition) Partial template definition for merge-patching (used by PATCH).
All fields are optional — only provided fields are updated.
Omitted fields retain their current values.
To explicitly clear a nullable field, set it to |
OK — device template patched successfully
Bad Request
Not Found
Conflict — locked or deploying
Internal Server Error
{- "description": "Updated description with HA failover notes",
- "definition": {
- "managementSslPort": 8443
}
}{- "id": "550e8400-e29b-41d4-a716-446655440000",
- "state": "NEW",
- "status": 200,
- "selfLink": "/api/device-templates/550e8400-e29b-41d4-a716-446655440000",
- "createdAt": "2026-01-15T09:23:41Z",
- "updatedAt": "2026-04-01T16:20:00Z"
}Deletes a device template by ID.
Precondition: The device template must not be locked.
Templates in DEPLOYING state cannot be deleted.
| id required | string <uuid> Example: 550e8400-e29b-41d4-a716-446655440000 UUID of the device template. |
OK — device template deleted
Not Found
Conflict — locked or deploying
Internal Server Error
{- "id": "550e8400-e29b-41d4-a716-446655440000",
- "status": 200,
- "deletedAt": "2026-04-10T16:00:00Z"
}Locks a device template to prevent modifications.
Sets locked=true and lockReason=READ_ONLY.
Precondition: Template must not already be locked.
| id required | string <uuid> Example: 550e8400-e29b-41d4-a716-446655440000 UUID of the device template. |
OK — device template locked
Not Found
Conflict — already locked
Internal Server Error
{- "id": "550e8400-e29b-41d4-a716-446655440000",
- "locked": true,
- "lockReason": "READ_ONLY",
- "status": 200,
- "selfLink": "/api/device-templates/550e8400-e29b-41d4-a716-446655440000",
- "updatedAt": "2026-04-15T08:20:00Z"
}Unlocks a device template to allow modifications.
Sets locked=false and lockReason=NONE.
Precondition: Template must be locked with lockReason=READ_ONLY.
System locks (DEPLOYMENT) cannot be manually unlocked.
| id required | string <uuid> Example: 550e8400-e29b-41d4-a716-446655440000 UUID of the device template. |
OK — device template unlocked
Not Found
Conflict — not locked or system-locked
Internal Server Error
{- "id": "550e8400-e29b-41d4-a716-446655440000",
- "locked": false,
- "lockReason": "NONE",
- "status": 200,
- "selfLink": "/api/device-templates/550e8400-e29b-41d4-a716-446655440000",
- "updatedAt": "2026-04-15T09:00:00Z"
}Runs multi-tier validation on a device template:
Always returns HTTP 200. Inspect valid and each tier's result for pass/fail.
| id required | string <uuid> Example: 550e8400-e29b-41d4-a716-446655440000 UUID of the device template. |
Validation completed
Not Found
Internal Server Error
{- "id": "550e8400-e29b-41d4-a716-446655440000",
- "status": 200,
- "valid": false,
- "validatedAt": "2026-04-15T10:30:00Z",
- "dataSanity": {
- "valid": true,
- "errors": [ ],
- "warnings": [ ]
}, - "templateSchema": {
- "valid": false,
- "errors": [
- {
- "field": "definition.managementSslPort",
- "message": "Value must be between 1 and 65535"
}
], - "warnings": [ ]
}, - "selfLink": "/api/device-templates/550e8400-e29b-41d4-a716-446655440000"
}Triggers deployment of a device template to target infrastructure.
Preconditions:
NEW or DEPLOYED stateReturns 202 Accepted with a task object for tracking deployment progress.
| id required | string <uuid> Example: 550e8400-e29b-41d4-a716-446655440000 UUID of the device template. |
| mgmtIp required | string <ipv4> Management IP address of the target BIG-IP device. |
| username | string [ 1 .. 255 ] characters Username for the BIG-IP device (optional, for display/logging purposes). |
| encodedBasicAuth required | string non-empty Base64-encoded basic authentication credentials (username:password). |
Accepted — deployment task queued
Bad Request — invalid request payload
Not Found
Conflict — locked or already deploying
Unprocessable Entity — template not in deployable state or validation failed
Internal Server Error
{- "mgmtIp": "192.168.1.100",
- "username": "admin",
- "encodedBasicAuth": "YWRtaW46YWRtaW5QYXNzd29yZDEyMw=="
}{- "status": 202,
- "deviceTemplateId": "550e8400-e29b-41d4-a716-446655440000",
- "deploymentTaskId": "c3d4e5f6-a7b8-4012-8def-123456789012",
- "selfLink": "/api/device-templates/tasks/c3d4e5f6-a7b8-4012-8def-123456789012"
}Creates a deep copy of an existing device template with a new name.
The clone is always created in DRAFT state, unlocked.
| id required | string <uuid> Example: 550e8400-e29b-41d4-a716-446655440000 UUID of the device template. |
| name required | string [ 1 .. 255 ] characters Name for the cloned template. Must be unique. |
Created — clone created in DRAFT state
Bad Request
Not Found — source template not found
Conflict — clone name already exists
Internal Server Error
{- "name": "BIG-IP Standard Template (Copy)"
}{- "id": "770e8400-e29b-41d4-a716-446655440002",
- "state": "DRAFT",
- "status": 201,
- "selfLink": "/api/device-templates/770e8400-e29b-41d4-a716-446655440002",
- "createdAt": "2026-04-20T12:00:00Z",
- "updatedAt": "2026-04-20T12:00:00Z"
}Retrieves a specific task by its ID. For active tasks (PENDING, RUNNING), this endpoint polls the external service for the latest status before returning.
| taskId required | string <uuid> Example: 660e8400-e29b-41d4-a716-446655440001 UUID of the task. |
OK — task retrieved successfully
Bad Request — invalid UUID format
Not Found — task not found
Internal Server Error
{- "id": "660e8400-e29b-41d4-a716-446655440001",
- "deviceTemplateId": "550e8400-e29b-41d4-a716-446655440000",
- "externalTaskId": "ext-task-12345",
- "type": "DEPLOYMENT",
- "status": 200,
- "taskStatus": "RUNNING",
- "state": "onboarding",
- "createdAt": "2026-04-20T12:00:00Z",
- "updatedAt": "2026-04-20T12:05:00Z",
- "selfLink": "/api/device-templates/tasks/660e8400-e29b-41d4-a716-446655440001"
}Get the currently configured canonical external URL used by F5 Insight and ZITADEL.
Current FQDN configuration retrieved successfully
Internal server error
{- "configured": true,
}Configure the canonical external FQDN used by F5 Insight and ZITADEL. The operation runs asynchronously because it performs a Helm upgrade and reruns ZITADEL bootstrap to refresh the registered OIDC callback URL.
| target required | string External FQDN target. May include https scheme and port. |
FQDN configuration task submitted
Invalid FQDN target
Another FQDN configuration task is already running
Internal server error
{- "target": "f5insights.example.com"
}{- "task_id": "123e4567-e89b-12d3-a456-426614174000",
- "status": "submitted"
}Query the progress of an FQDN configuration task by task_id.
| task_id required | string <uuid> Example: 123e4567-e89b-12d3-a456-426614174000 UUID of the FQDN configuration task |
FQDN configuration status retrieved successfully
Invalid task_id format
Task not found
Internal server error
{- "task_id": "123e4567-e89b-12d3-a456-426614174000",
- "state": "APPLY",
- "status": "RUNNING",
- "progress": 60,
- "error_message": "FQDN configuration failed: helm upgrade failed"
}Configure the canonical external FQDN used by F5 Insight and Zitadel. The operation runs asynchronously because it performs a Helm upgrade and reruns Zitadel bootstrap to refresh the registered OIDC callback URL.
| target required | string External FQDN target. May include https scheme and port. |
FQDN configuration task submitted
Invalid FQDN target
Another FQDN configuration task is already running
Internal server error
{- "target": "f5insights.example.com"
}{- "task_id": "123e4567-e89b-12d3-a456-426614174000",
- "status": "submitted"
}Query the progress of an FQDN configuration task by task_id.
| task_id required | string <uuid> Example: 123e4567-e89b-12d3-a456-426614174000 UUID of the FQDN configuration task |
FQDN configuration status retrieved successfully
Invalid task_id format
Task not found
Internal server error
{- "task_id": "123e4567-e89b-12d3-a456-426614174000",
- "state": "APPLY",
- "status": "RUNNING",
- "progress": 60,
- "error_message": "FQDN configuration failed: helm upgrade failed"
}List of all feature flags
Internal server error
{- "property1": {
- "featureName": "perf_SSL_Mbps",
- "featureValue": "2000"
}, - "property2": {
- "featureName": "perf_SSL_Mbps",
- "featureValue": "2000"
}
}| name required | string |
| enabled required | boolean |
Feature flag updated successfully
Bad request
Internal server error
{- "name": "string",
- "enabled": true
}{ }Returns a paginated list of flight-check snapshots. Because a fleet
accumulates many snapshots over time, callers should scope the query with
the jobId, deviceId and/or phase filters (e.g. all snapshots for a
given installation job, or both phases for one device in one job).
| page | integer >= 1 Default: 1 |
| page_size | integer [ 1 .. 500 ] Default: 20 |
| jobId | string <uuid> Filter to snapshots captured under this installation job. |
| deviceId | string <uuid> Filter to snapshots captured from this device. |
| phase | string Enum: "PRE" "POST" Filter to a single phase (PRE or POST). |
Paginated list of flight-check snapshots
Authentication required
{- "data": [
- {
- "id": "string",
- "jobId": "string",
- "deviceId": "string",
- "phase": "PRE",
- "capturedAt": "2026-08-21T06:32:48Z",
- "trunkStatus": {
- "status": "OK",
- "details": { },
- "error": "string"
}, - "interfaceStatus": {
- "status": "OK",
- "details": { },
- "error": "string"
}, - "virtualServerState": {
- "status": "OK",
- "details": { },
- "error": "string"
}, - "poolHealth": {
- "status": "OK",
- "details": { },
- "error": "string"
}, - "poolMemberHealth": {
- "status": "OK",
- "details": { },
- "error": "string"
}, - "performanceAllStats": {
- "status": "OK",
- "details": { },
- "error": "string"
}, - "lagStatus": {
- "status": "OK",
- "details": { },
- "error": "string"
}, - "alarms": {
- "status": "OK",
- "details": { },
- "error": "string"
}, - "healthSummary": {
- "status": "OK",
- "details": { },
- "error": "string"
}, - "cluster": {
- "status": "OK",
- "details": { },
- "error": "string"
}, - "firmwareStatus": {
- "status": "OK",
- "details": { },
- "error": "string"
}, - "fpgaStatus": {
- "status": "OK",
- "details": { },
- "error": "string"
}, - "cores": {
- "status": "OK",
- "details": { },
- "error": "string"
}, - "tenantStatus": {
- "status": "OK",
- "details": { },
- "error": "string"
}, - "servicePods": {
- "status": "OK",
- "details": { },
- "error": "string"
}
}
], - "pagination": {
- "page": 0,
- "page_size": 0,
- "total": 0,
- "total_pages": 0
}
}Returns one PRE or POST flight-check snapshot, addressed by its own ID. The response includes the captured core-check results plus the snapshot's deviceId, jobId, phase (PRE/POST) and capturedAt timestamp.
| snapshotId required | string <uuid> Unique ID of a flight-check snapshot. |
Flight-check snapshot
Authentication required
Resource not found
{- "id": "string",
- "jobId": "string",
- "deviceId": "string",
- "phase": "PRE",
- "capturedAt": "2026-08-21T06:32:48Z",
- "trunkStatus": {
- "status": "OK",
- "details": { },
- "error": "string"
}, - "interfaceStatus": {
- "status": "OK",
- "details": { },
- "error": "string"
}, - "virtualServerState": {
- "status": "OK",
- "details": { },
- "error": "string"
}, - "poolHealth": {
- "status": "OK",
- "details": { },
- "error": "string"
}, - "poolMemberHealth": {
- "status": "OK",
- "details": { },
- "error": "string"
}, - "performanceAllStats": {
- "status": "OK",
- "details": { },
- "error": "string"
}, - "lagStatus": {
- "status": "OK",
- "details": { },
- "error": "string"
}, - "alarms": {
- "status": "OK",
- "details": { },
- "error": "string"
}, - "healthSummary": {
- "status": "OK",
- "details": { },
- "error": "string"
}, - "cluster": {
- "status": "OK",
- "details": { },
- "error": "string"
}, - "firmwareStatus": {
- "status": "OK",
- "details": { },
- "error": "string"
}, - "fpgaStatus": {
- "status": "OK",
- "details": { },
- "error": "string"
}, - "cores": {
- "status": "OK",
- "details": { },
- "error": "string"
}, - "tenantStatus": {
- "status": "OK",
- "details": { },
- "error": "string"
}, - "servicePods": {
- "status": "OK",
- "details": { },
- "error": "string"
}
}Returns a paginated list of PRE-vs-POST flight-check diffs. Because a fleet
accumulates many diffs over time, callers should scope the query with the
jobId and/or deviceId filters (e.g. all diffs for a given installation
job, or the diff history for one device).
| page | integer >= 1 Default: 1 |
| page_size | integer [ 1 .. 500 ] Default: 20 |
| jobId | string <uuid> Filter to diffs computed under this installation job. |
| deviceId | string <uuid> Filter to diffs computed for this device. |
Paginated list of flight-check diffs
Authentication required
{- "data": [
- {
- "id": "string",
- "jobId": "string",
- "deviceId": "string",
- "degraded": true,
- "preSnapshotUrl": "string",
- "postSnapshotUrl": "string",
- "computedAt": "2026-08-21T06:32:48Z",
- "entries": [
- {
- "check": "string",
- "outcome": "SAME",
- "before": { },
- "after": { },
- "details": "string"
}
]
}
], - "pagination": {
- "page": 0,
- "page_size": 0,
- "total": 0,
- "total_pages": 0
}
}Returns one PRE-vs-POST flight-check diff, addressed by its own ID. The response includes the per-check diff entries plus the diff's deviceId, jobId, computedAt timestamp, and back-links to the PRE and POST snapshots it was computed from (preSnapshotUrl / postSnapshotUrl — each resolvable via GET /api/v1/fleet/upgrade/flight-checks/snapshots/{snapshotId}).
| diffId required | string <uuid> Unique ID of a flight-check diff. |
Flight-check diff
Authentication required
Resource not found
{- "id": "string",
- "jobId": "string",
- "deviceId": "string",
- "degraded": true,
- "preSnapshotUrl": "string",
- "postSnapshotUrl": "string",
- "computedAt": "2026-08-21T06:32:48Z",
- "entries": [
- {
- "check": "string",
- "outcome": "SAME",
- "before": { },
- "after": { },
- "details": "string"
}
]
}Returns the health status of the system manager service
Service is healthy
{- "success": true,
- "data": {
- "status": "healthy",
- "platform_manager": "available"
}
}Returns the current F5 Insight version information
Version information retrieved successfully
{- "success": true,
- "data": {
- "version": "1.2.0",
- "build_date": "2025-01-14",
- "git_commit": "abc1234"
}
}Returns all configured providers (LDAP, SAML).
Authenticated callers receive the full provider configuration. Unauthenticated callers receive the public login-page shape, which intentionally omits provider configuration details.
Success
An unexpected error occurred.
{- "providers": [
- {
- "id": "string",
- "name": "string",
- "provider_type": "ldap",
- "enabled": true,
- "ldap_config": {
- "servers": [
- "ldaps://ldap.company.com:636"
], - "start_tls": false,
- "base_dn": "dc=company,dc=com",
- "bind_dn": "cn=readonly,dc=company,dc=com",
- "bind_password": "secret123",
- "user_base": "ou=people",
- "user_object_classes": [
- "inetOrgPerson"
], - "user_unique_attribute": "uid",
- "user_filters": [
- "uid",
- "objectClass=inetOrgPerson"
], - "attributes": {
- "id": "uid",
- "username": "uid",
- "email": "mail",
- "first_name": "givenName",
- "last_name": "sn",
- "display_name": "displayName"
}, - "timeout": 0,
- "ca_certificate_id": "string"
}, - "saml_config": {
- "metadata_xml": "string",
- "binding": "post",
- "with_signed_request": true,
}, - "created_at": "2026-08-21T06:32:48Z",
- "updated_at": "2026-08-21T06:32:48Z",
- "last_sync": "2026-08-21T06:32:48Z"
}
], - "local_login_enabled": true,
- "total_count": 0
}Creates a new LDAP identity provider.
Create only provisions the provider. It does not activate or deactivate any provider.
Use POST /auth/identity-providers/{id}/activate to enable a provider for login.
The enabled field in the request body is ignored.
| name required | string [ 1 .. 200 ] characters 1-200 characters. Must be unique. |
| enabled | boolean Ignored by the server. New LDAP providers are created inactive. Use the activate endpoint to enable a provider for login. |
| ldap_config required | object (LDAPConfig) |
LDAP provider created inactive.
Invalid request
Provider name already exists
An unexpected error occurred.
External identity provider management is not configured
{- "name": "Corporate LDAP",
- "enabled": true,
- "ldap_config": {
- "servers": [
- "ldaps://ldap.company.com:636"
], - "start_tls": false,
- "base_dn": "dc=company,dc=com",
- "bind_dn": "cn=readonly,dc=company,dc=com",
- "bind_password": "secret123",
- "user_base": "ou=people",
- "user_object_classes": [
- "inetOrgPerson"
], - "user_unique_attribute": "uid",
- "user_filters": [
- "uid",
- "objectClass=inetOrgPerson"
], - "attributes": {
- "id": "uid",
- "username": "uid",
- "email": "mail",
- "first_name": "givenName",
- "last_name": "sn",
- "display_name": "displayName"
}, - "timeout": 0,
- "ca_certificate_id": "string"
}
}{- "id": "string",
- "name": "string",
- "provider_type": "ldap",
- "enabled": true,
- "ldap_config": {
- "servers": [
- "ldaps://ldap.company.com:636"
], - "start_tls": false,
- "base_dn": "dc=company,dc=com",
- "bind_dn": "cn=readonly,dc=company,dc=com",
- "bind_password": "secret123",
- "user_base": "ou=people",
- "user_object_classes": [
- "inetOrgPerson"
], - "user_unique_attribute": "uid",
- "user_filters": [
- "uid",
- "objectClass=inetOrgPerson"
], - "attributes": {
- "id": "uid",
- "username": "uid",
- "email": "mail",
- "first_name": "givenName",
- "last_name": "sn",
- "display_name": "displayName"
}, - "timeout": 0,
- "ca_certificate_id": "string"
}, - "saml_config": {
- "metadata_xml": "string",
- "binding": "post",
- "with_signed_request": true,
}, - "created_at": "2026-08-21T06:32:48Z",
- "updated_at": "2026-08-21T06:32:48Z",
- "last_sync": "2026-08-21T06:32:48Z"
}| name required | string |
| enabled | boolean Default: true |
| saml_config required | object (SAMLConfig) |
SAML provider created
Invalid request
Provider name already exists
An unexpected error occurred.
{- "name": "string",
- "enabled": true,
- "saml_config": {
- "metadata_source": "url",
- "metadata_url": "string",
- "metadata_xml": "string",
- "binding": "post",
- "with_signed_request": true
}
}{- "id": "string",
- "name": "string",
- "provider_type": "ldap",
- "enabled": true,
- "ldap_config": {
- "servers": [
- "ldaps://ldap.company.com:636"
], - "start_tls": false,
- "base_dn": "dc=company,dc=com",
- "bind_dn": "cn=readonly,dc=company,dc=com",
- "bind_password": "secret123",
- "user_base": "ou=people",
- "user_object_classes": [
- "inetOrgPerson"
], - "user_unique_attribute": "uid",
- "user_filters": [
- "uid",
- "objectClass=inetOrgPerson"
], - "attributes": {
- "id": "uid",
- "username": "uid",
- "email": "mail",
- "first_name": "givenName",
- "last_name": "sn",
- "display_name": "displayName"
}, - "timeout": 0,
- "ca_certificate_id": "string"
}, - "saml_config": {
- "metadata_xml": "string",
- "binding": "post",
- "with_signed_request": true,
}, - "created_at": "2026-08-21T06:32:48Z",
- "updated_at": "2026-08-21T06:32:48Z",
- "last_sync": "2026-08-21T06:32:48Z"
}| id required | string |
| name required | string [ 1 .. 200 ] characters 1-200 characters. Must be unique. |
| enabled | boolean |
| ldap_config required | object (LDAPConfig) |
Success
Invalid request
Resource not found
An unexpected error occurred.
{- "name": "Corporate LDAP",
- "enabled": true,
- "ldap_config": {
- "servers": [
- "ldaps://ldap.company.com:636"
], - "start_tls": false,
- "base_dn": "dc=company,dc=com",
- "bind_dn": "cn=readonly,dc=company,dc=com",
- "bind_password": "secret123",
- "user_base": "ou=people",
- "user_object_classes": [
- "inetOrgPerson"
], - "user_unique_attribute": "uid",
- "user_filters": [
- "uid",
- "objectClass=inetOrgPerson"
], - "attributes": {
- "id": "uid",
- "username": "uid",
- "email": "mail",
- "first_name": "givenName",
- "last_name": "sn",
- "display_name": "displayName"
}, - "timeout": 0,
- "ca_certificate_id": "string"
}
}{- "id": "string",
- "name": "string",
- "provider_type": "ldap",
- "enabled": true,
- "ldap_config": {
- "servers": [
- "ldaps://ldap.company.com:636"
], - "start_tls": false,
- "base_dn": "dc=company,dc=com",
- "bind_dn": "cn=readonly,dc=company,dc=com",
- "bind_password": "secret123",
- "user_base": "ou=people",
- "user_object_classes": [
- "inetOrgPerson"
], - "user_unique_attribute": "uid",
- "user_filters": [
- "uid",
- "objectClass=inetOrgPerson"
], - "attributes": {
- "id": "uid",
- "username": "uid",
- "email": "mail",
- "first_name": "givenName",
- "last_name": "sn",
- "display_name": "displayName"
}, - "timeout": 0,
- "ca_certificate_id": "string"
}, - "saml_config": {
- "metadata_xml": "string",
- "binding": "post",
- "with_signed_request": true,
}, - "created_at": "2026-08-21T06:32:48Z",
- "updated_at": "2026-08-21T06:32:48Z",
- "last_sync": "2026-08-21T06:32:48Z"
}| id required | string |
| name required | string |
| enabled | boolean |
| saml_config required | object (SAMLConfig) |
Success
Invalid request
Resource not found
An unexpected error occurred.
{- "name": "string",
- "enabled": true,
- "saml_config": {
- "metadata_source": "url",
- "metadata_url": "string",
- "metadata_xml": "string",
- "binding": "post",
- "with_signed_request": true
}
}{- "id": "string",
- "name": "string",
- "provider_type": "ldap",
- "enabled": true,
- "ldap_config": {
- "servers": [
- "ldaps://ldap.company.com:636"
], - "start_tls": false,
- "base_dn": "dc=company,dc=com",
- "bind_dn": "cn=readonly,dc=company,dc=com",
- "bind_password": "secret123",
- "user_base": "ou=people",
- "user_object_classes": [
- "inetOrgPerson"
], - "user_unique_attribute": "uid",
- "user_filters": [
- "uid",
- "objectClass=inetOrgPerson"
], - "attributes": {
- "id": "uid",
- "username": "uid",
- "email": "mail",
- "first_name": "givenName",
- "last_name": "sn",
- "display_name": "displayName"
}, - "timeout": 0,
- "ca_certificate_id": "string"
}, - "saml_config": {
- "metadata_xml": "string",
- "binding": "post",
- "with_signed_request": true,
}, - "created_at": "2026-08-21T06:32:48Z",
- "updated_at": "2026-08-21T06:32:48Z",
- "last_sync": "2026-08-21T06:32:48Z"
}| provider_type required | string Enum: "ldap" "saml" |
| provider_id | string Optional. Set when validating an existing provider (edit / "Check Connection" flow). When provider_id is set and bind_password is omitted, the API returns a clear error because stored passwords are never returned; the user must re-enter bind_password. |
| ldap_config | object (LDAPConfig) |
Validation successful
Validation failed
An unexpected error occurred.
{- "provider_type": "ldap",
- "provider_id": "string",
- "ldap_config": {
- "servers": [
- "ldaps://ldap.company.com:636"
], - "start_tls": false,
- "base_dn": "dc=company,dc=com",
- "bind_dn": "cn=readonly,dc=company,dc=com",
- "bind_password": "secret123",
- "user_base": "ou=people",
- "user_object_classes": [
- "inetOrgPerson"
], - "user_unique_attribute": "uid",
- "user_filters": [
- "uid",
- "objectClass=inetOrgPerson"
], - "attributes": {
- "id": "uid",
- "username": "uid",
- "email": "mail",
- "first_name": "givenName",
- "last_name": "sn",
- "display_name": "displayName"
}, - "timeout": 0,
- "ca_certificate_id": "string"
}
}{- "status": "validation_success",
- "error": "string",
- "details": {
- "connection_successful": true,
- "bind_successful": true,
- "user_search_successful": true,
- "users_found": 0,
- "group_search_successful": true,
- "group_search_base": "string",
- "groups_found": 0,
- "groups": [
- "string"
]
}
}| id required | string |
Success
Resource not found
An unexpected error occurred.
{- "id": "string",
- "name": "string",
- "provider_type": "ldap",
- "enabled": true,
- "ldap_config": {
- "servers": [
- "ldaps://ldap.company.com:636"
], - "start_tls": false,
- "base_dn": "dc=company,dc=com",
- "bind_dn": "cn=readonly,dc=company,dc=com",
- "bind_password": "secret123",
- "user_base": "ou=people",
- "user_object_classes": [
- "inetOrgPerson"
], - "user_unique_attribute": "uid",
- "user_filters": [
- "uid",
- "objectClass=inetOrgPerson"
], - "attributes": {
- "id": "uid",
- "username": "uid",
- "email": "mail",
- "first_name": "givenName",
- "last_name": "sn",
- "display_name": "displayName"
}, - "timeout": 0,
- "ca_certificate_id": "string"
}, - "saml_config": {
- "metadata_xml": "string",
- "binding": "post",
- "with_signed_request": true,
}, - "created_at": "2026-08-21T06:32:48Z",
- "updated_at": "2026-08-21T06:32:48Z",
- "last_sync": "2026-08-21T06:32:48Z"
}Permanently deletes the identity provider.
Deletion is always allowed, including active providers and the last remaining provider. Deleting an active provider leaves the system with 0 active providers (local login still works).
| id required | string |
Provider deleted successfully
Resource not found
Provider is still referenced by role mappings
An unexpected error occurred.
Unable to validate provider role mapping usage
{- "status": "success",
- "message": "Identity provider 'corp-ldap' deleted successfully",
- "id": "string"
}Activates the provider so it appears on the login page.
If another LDAP provider is active, activation fails with 409 Conflict. Deactivate the currently active LDAP provider before activating a different one.
Idempotent: if the provider is already active, returns its current state without making any changes.
| id required | string |
Provider activated
Resource not found
Another LDAP provider is already active
An unexpected error occurred.
External identity provider management is not configured
{- "id": "string",
- "name": "string",
- "provider_type": "ldap",
- "enabled": true,
- "ldap_config": {
- "servers": [
- "ldaps://ldap.company.com:636"
], - "start_tls": false,
- "base_dn": "dc=company,dc=com",
- "bind_dn": "cn=readonly,dc=company,dc=com",
- "bind_password": "secret123",
- "user_base": "ou=people",
- "user_object_classes": [
- "inetOrgPerson"
], - "user_unique_attribute": "uid",
- "user_filters": [
- "uid",
- "objectClass=inetOrgPerson"
], - "attributes": {
- "id": "uid",
- "username": "uid",
- "email": "mail",
- "first_name": "givenName",
- "last_name": "sn",
- "display_name": "displayName"
}, - "timeout": 0,
- "ca_certificate_id": "string"
}, - "saml_config": {
- "metadata_xml": "string",
- "binding": "post",
- "with_signed_request": true,
}, - "created_at": "2026-08-21T06:32:48Z",
- "updated_at": "2026-08-21T06:32:48Z",
- "last_sync": "2026-08-21T06:32:48Z"
}Deactivates the provider for external login. It will no longer appear on the login page.
Deactivation is always allowed, including when this is the only active provider. Deactivating the last active provider leaves the system with 0 active providers, which is valid (local login still works; LDAP login becomes unavailable until a provider is re-activated).
Idempotent: if the provider is already inactive, returns its current state without changes.
| id required | string |
Provider deactivated successfully
Resource not found
An unexpected error occurred.
External identity provider management is not configured
{- "id": "string",
- "name": "string",
- "provider_type": "ldap",
- "enabled": true,
- "ldap_config": {
- "servers": [
- "ldaps://ldap.company.com:636"
], - "start_tls": false,
- "base_dn": "dc=company,dc=com",
- "bind_dn": "cn=readonly,dc=company,dc=com",
- "bind_password": "secret123",
- "user_base": "ou=people",
- "user_object_classes": [
- "inetOrgPerson"
], - "user_unique_attribute": "uid",
- "user_filters": [
- "uid",
- "objectClass=inetOrgPerson"
], - "attributes": {
- "id": "uid",
- "username": "uid",
- "email": "mail",
- "first_name": "givenName",
- "last_name": "sn",
- "display_name": "displayName"
}, - "timeout": 0,
- "ca_certificate_id": "string"
}, - "saml_config": {
- "metadata_xml": "string",
- "binding": "post",
- "with_signed_request": true,
}, - "created_at": "2026-08-21T06:32:49Z",
- "updated_at": "2026-08-21T06:32:49Z",
- "last_sync": "2026-08-21T06:32:49Z"
}| page | integer >= 1 Default: 1 |
| page_size | integer [ 1 .. 500 ] Default: 20 |
| product_family | string (ProductFamily) Enum: "BIG-IP" "F5OS-C" "F5OS-A" |
| sort_by | string (SortByImages) Value: "version" Field to sort images by |
| sort_order | string (SortOrder) Enum: "asc" "desc" Sort direction; only applied when sort_by is also provided. |
List of software images
Authentication required
{- "data": [
- {
- "id": "string",
- "file_name": "string",
- "product_family": "BIG-IP",
- "image_type": "FULL_ISO",
- "status": "UPLOADING",
- "version": "string",
- "build": "string",
- "base_build": "string",
- "file_size_bytes": 0,
- "storage_path": "string",
- "md5_checksum": "string",
- "md5_verified": true,
- "sig_pem_verified": true,
- "md5_expected": "string",
- "md5_actual": "string",
- "verification_output": "string",
- "verified_at": "2026-08-21T06:32:49Z",
- "uploaded_by": "string",
- "uploaded_at": "2026-08-21T06:32:49Z",
- "build_date": "2026-08-21T06:32:49Z",
- "created_at": "2026-08-21T06:32:49Z"
}
], - "pagination": {
- "page": 0,
- "page_size": 0,
- "total": 0,
- "total_pages": 0
}
}Accepts a single multipart file upload and offloads the file to shared storage for asynchronous ingestion.
Only the file form field is used by the active upload path. Metadata
such as product_family, image_type, version, and build is not
read from multipart form fields; it is derived later by the upgrade
feature from the uploaded filename and, where applicable, from
metadata.xml inside the image during verification.
The request is intercepted by the backend file-offload middleware, so
this operation returns 202 Accepted after the file is persisted and
the image record is reserved for background processing.
| file required | string <binary> Software image file (ISO, bin, etc.) |
Upload accepted for asynchronous processing
Invalid request
Authentication required
Duplicate filename
{- "success": true,
- "data": {
- "image_id": "string",
- "file_name": "string",
- "status": "UPLOADING",
- "message": "File upload received. Processing will continue in the background."
}
}| imageId required | string <uuid> |
Software image details
Resource not found
{- "id": "string",
- "file_name": "string",
- "product_family": "BIG-IP",
- "image_type": "FULL_ISO",
- "status": "UPLOADING",
- "version": "string",
- "build": "string",
- "base_build": "string",
- "file_size_bytes": 0,
- "storage_path": "string",
- "md5_checksum": "string",
- "md5_verified": true,
- "sig_pem_verified": true,
- "md5_expected": "string",
- "md5_actual": "string",
- "verification_output": "string",
- "verified_at": "2026-08-21T06:32:49Z",
- "uploaded_by": "string",
- "uploaded_at": "2026-08-21T06:32:49Z",
- "build_date": "2026-08-21T06:32:49Z",
- "created_at": "2026-08-21T06:32:49Z"
}| imageId required | string <uuid> |
Image deleted
Resource not found
Image is associated with one or more upgrade jobs and cannot be deleted. The error message lists the offending job types and names.
{- "code": "string",
- "message": "string",
- "details": [
- "string"
]
}| image_ids required | Array of strings <uuid> [ 1 .. 100 ] items |
Per-image deletion results
Invalid request
Authentication required
{- "image_ids": [
- "string"
]
}{- "results": [
- {
- "image_id": "string",
- "status": "DELETED",
- "error": {
- "error": "string",
- "code": "string"
}
}
]
}Establishes a connection to vSphere using provider credentials. Returns a connection ID that can be used for subsequent discovery API calls.
| username required | string vSphere username |
| password required | string vSphere password |
| providerName required | string Name of the provider (used to resolve vSphere hostname) |
Connection established successfully
Bad request - missing required parameters
Provider not found
Internal server error or connection failed
{- "username": "string",
- "password": "string",
- "providerName": "string"
}{- "connId": "string",
- "message": "string"
}Lists all available datacenters in the vSphere environment.
| connId required | string Connection ID from /cloud/connect endpoint |
List of datacenters
Bad request - missing required parameters
Environment not found
Internal server error
[- {
- "name": "string",
- "datacenter": "string"
}
]Lists all clusters in a datacenter.
| connId required | string Connection ID from /cloud/connect endpoint |
| datacenter required | string Name of the datacenter |
List of clusters
Bad request - missing required parameters
Environment or datacenter not found
Internal server error
[- {
- "name": "string",
- "cluster": "string"
}
]Lists hosts in a datacenter or cluster. If cluster is provided, lists only hosts in that cluster; otherwise lists all hosts in the datacenter.
| connId required | string Connection ID from /cloud/connect endpoint |
| datacenter required | string Name of the datacenter |
| cluster | string Name of the cluster (optional - if omitted, lists all hosts in datacenter) |
List of hosts
Bad request - missing required parameters
Environment, datacenter, or cluster not found
Internal server error
[- {
- "name": "string",
- "host": "string"
}
]Lists all networks in a datacenter.
| connId required | string Connection ID from /cloud/connect endpoint |
| datacenter required | string Name of the datacenter |
List of networks
Bad request - missing required parameters
Environment or datacenter not found
Internal server error
[- {
- "name": "string",
- "network": "string"
}
]Lists all datastores in a datacenter.
| connId required | string Connection ID from /cloud/connect endpoint |
| datacenter required | string Name of the datacenter |
List of datastores
Bad request - missing required parameters
Environment or datacenter not found
Internal server error
[- {
- "datastore": "string",
- "name": "string"
}
]Lists all VM images (templates) available in a datacenter.
| connId required | string Connection ID from /cloud/connect endpoint |
| datacenter required | string Name of the datacenter |
List of VM images
Bad request - missing required parameters
Environment or datacenter not found
Internal server error
[- {
- "vm": "string",
- "name": "string"
}
]Fleet summary
{- "total_devices": 0,
- "bigip_count": 0,
- "f5os_count": 0,
- "version_distribution": {
- "property1": 0,
- "property2": 0
}, - "status_distribution": {
- "property1": 0,
- "property2": 0
}
}| page | integer >= 1 Default: 1 |
| page_size | integer [ 1 .. 500 ] Default: 20 |
| type | string Enum: "BIGIP" "RSERIES" "VELOS" |
| search | string Search by hostname, IP, version |
| $filter | string OData-style filter expression. Supported fields and operators: endpoint eq 'https://10.145.135.45' hostname eq 'rseries-lab-01' device_type eq 'BIGIP' Combine with 'and': endpoint eq '...' and device_type eq 'BIGIP' |
| $orderby | string OData-style ordering expression.
Supported fields: hostname, endpoint, current_version, last_refresh_at, device_type
Format: ' |
Paginated fleet device list
{- "data": [
- {
- "id": "string",
- "device_type": "BIGIP",
- "name": "string",
- "device_name": "string",
- "endpoint": "string",
- "data_center_id": "string",
- "current_version": "17.1.2",
- "current_build": "0.0.13",
- "edition": "Final",
- "platform": "Z100",
- "marketing_name": "BIG-IP i5800",
- "chassis_serial": "string",
- "ha_pair_id": "string",
- "ha_peer_device_id": "string",
- "ha_state": "ACTIVE",
- "device_group": "string",
- "sync_status": "In Sync",
- "hosted_on_provider_id": "string",
- "active_volume": "HD1.1",
- "inactive_volumes": [
- {
- "name": "string",
- "version": "string",
- "build": "string",
- "status": "string"
}
], - "disk_available_gb": 42.5,
- "license_edition": "string",
- "license_check_date": "2026-08-21",
- "service_check_date": "2026-08-21",
- "last_seen_at": "2026-08-21T06:32:49Z",
- "last_refresh_at": "2026-08-21T06:32:49Z",
- "eligibility_status": "ELIGIBLE",
- "recommended_version": "17.1.3",
- "is_payg_license": true
}
], - "pagination": {
- "page": 0,
- "page_size": 0,
- "total": 0,
- "total_pages": 0
}
}| deviceId required | string <uuid> |
Fleet device details
Resource not found
{- "id": "string",
- "device_type": "BIGIP",
- "name": "string",
- "device_name": "string",
- "endpoint": "string",
- "data_center_id": "string",
- "current_version": "17.1.2",
- "current_build": "0.0.13",
- "edition": "Final",
- "platform": "Z100",
- "marketing_name": "BIG-IP i5800",
- "chassis_serial": "string",
- "ha_pair_id": "string",
- "ha_peer_device_id": "string",
- "ha_state": "ACTIVE",
- "device_group": "string",
- "sync_status": "In Sync",
- "hosted_on_provider_id": "string",
- "active_volume": "HD1.1",
- "inactive_volumes": [
- {
- "name": "string",
- "version": "string",
- "build": "string",
- "status": "string"
}
], - "disk_available_gb": 42.5,
- "license_edition": "string",
- "license_check_date": "2026-08-21",
- "service_check_date": "2026-08-21",
- "last_seen_at": "2026-08-21T06:32:49Z",
- "last_refresh_at": "2026-08-21T06:32:49Z",
- "eligibility_status": "ELIGIBLE",
- "recommended_version": "17.1.3",
- "is_payg_license": true
}| deviceId required | string <uuid> |
Device metadata refreshed
Resource not found
{- "id": "string",
- "device_type": "BIGIP",
- "name": "string",
- "device_name": "string",
- "endpoint": "string",
- "data_center_id": "string",
- "current_version": "17.1.2",
- "current_build": "0.0.13",
- "edition": "Final",
- "platform": "Z100",
- "marketing_name": "BIG-IP i5800",
- "chassis_serial": "string",
- "ha_pair_id": "string",
- "ha_peer_device_id": "string",
- "ha_state": "ACTIVE",
- "device_group": "string",
- "sync_status": "In Sync",
- "hosted_on_provider_id": "string",
- "active_volume": "HD1.1",
- "inactive_volumes": [
- {
- "name": "string",
- "version": "string",
- "build": "string",
- "status": "string"
}
], - "disk_available_gb": 42.5,
- "license_edition": "string",
- "license_check_date": "2026-08-21",
- "service_check_date": "2026-08-21",
- "last_seen_at": "2026-08-21T06:32:49Z",
- "last_refresh_at": "2026-08-21T06:32:49Z",
- "eligibility_status": "ELIGIBLE",
- "recommended_version": "17.1.3",
- "is_payg_license": true
}Starts a background task that checks available disk space on each device
and compares it against the requested required_size_bytes threshold.
BIG-IP devices — calls the iControl REST bash endpoint
(POST /mgmt/tm/util/bash) to run df -k /shared/images directly on
the device. The reported available_disk_bytes reflects free space on
the /shared/images filesystem, which is where software images are
staged before installation.
F5OS devices (RSERIES / VELOS) — queries the F5OS platform REST API for storage metrics.
Results are returned via GET /devices/disk-analysis/{taskId}.
| required_size_bytes required | integer <int64> >= 1 Required disk size per device, in bytes |
| devices required | Array of objects (DiskAnalysisBatchDeviceInput) non-empty |
Disk space analysis task accepted
Invalid request
{- "required_size_bytes": 1,
- "devices": [
- {
- "device_id": "string"
}
]
}{- "task_id": "string",
- "status": "QUEUED",
- "created_at": "2026-08-21T06:32:49Z"
}| taskId required | string <uuid> |
Disk analysis task details
Resource not found
{- "task_id": "string",
- "status": "QUEUED",
- "created_at": "2026-08-21T06:32:49Z",
- "started_at": "2026-08-21T06:32:49Z",
- "completed_at": "2026-08-21T06:32:49Z",
- "progress": {
- "total_devices": 0,
- "analyzed_devices": 0,
- "sufficient_count": 0,
- "insufficient_count": 0
}, - "result": {
- "required_size_bytes": 0,
- "data": [
- {
- "device_id": "string",
- "host": "string",
- "analysis_status": "SUFFICIENT",
- "available_disk_bytes": 0,
- "has_sufficient_space": true,
- "error_message": "string"
}
], - "summary": {
- "sufficient_count": 0,
- "insufficient_count": 0
}
}, - "error": {
- "error": "string",
- "code": "string"
}
}Delete multiple jobs in a single request. Each job is processed independently — partial success is possible. Jobs that are in an active lifecycle state (RUNNING, ACTIVE, PAUSING, PAUSED, CANCELLING) cannot be deleted and will be reported as FAILED in the response. The deletion propagates to feature-specific tables (software installation, software distribution) via the pg_notify mechanism.
| job_ids required | Array of strings <uuid> [ 1 .. 100 ] items List of job IDs to delete (1–100 items) |
Bulk delete results (partial success possible)
Invalid request
{- "job_ids": [
- "550e8400-e29b-41d4-a716-446655440001",
- "550e8400-e29b-41d4-a716-446655440002"
]
}{- "results": [
- {
- "job_id": "550e8400-e29b-41d4-a716-446655440001",
- "status": "DELETED"
}, - {
- "job_id": "550e8400-e29b-41d4-a716-446655440002",
- "status": "FAILED",
- "error": "job cannot be deleted while it has live work — abort the job first"
}
]
}Lists runtime Jobs created from a workflow template. Jobs represent environment- or tenant-specific instantiations of the template. Supports status filtering and pagination.
| workflowId required | string <uuid> |
| page | integer >= 1 Default: 1 |
| limit | integer [ 1 .. 200 ] Default: 50 |
| status | string Enum: "PENDING" "READY" "ACTIVE" "RUNNING" "PAUSED" "INACTIVE" "ERROR" "DELETING" |
List of jobs
Resource not found
{- "items": [
- {
- "id": "114ca9f9-88a3-49e1-92f2-757d7fedde98",
- "workflowId": "b7e6a4ae-4cf9-4ad4-b8f9-9b5347300d73",
- "name": "tenant-a-autoscale",
- "status": "ACTIVE",
- "createdAt": "2026-05-18T11:00:00.000Z",
- "updatedAt": "2026-05-18T11:00:00.000Z"
}
], - "total": 1,
- "page": 1,
- "limit": 50
}Creates a new runtime Job under a workflow template.
Job-level config overrides are merged with template defaultConfig
to produce effectiveConfig used during execution.
| workflowId required | string <uuid> |
| type required | string Enum: "AUTO_SCALE" "SOFTWARE_DISTRIBUTION" "SOFTWARE_INSTALLATION" "BACKUP" |
| name required | string |
| description | string Optional human-readable job description |
| status | string Enum: "PENDING" "READY" "ACTIVE" "RUNNING" "PAUSING" "PAUSED" "CANCELLING" "INACTIVE" "ERROR" "COMPLETED" "FAILED" "CANCELLED" "DELETING" |
| enabled | boolean Default: true Whether the job can be activated, paused, or resumed. Defaults to true when omitted. |
| config required | object (JobConfig) Job configuration (discriminated by workflow type - use AutoScaleConfig, UpgradeConfig, or BackupConfig) |
| schedule | object (Schedule) |
Job created
Invalid request
Resource not found
{- "type": "AUTO_SCALE",
- "name": "tenant-a-autoscale",
- "status": "READY",
- "config": {
- "configType": "AUTO_SCALE",
- "environmentReference": "550e8400-e29b-41d4-a716-446655440000",
- "templateReference": "550e8400-e29b-41d4-a716-446655440001",
- "licensePoolReference": "550e8400-e29b-41d4-a716-446655440003",
- "minSize": 2,
- "maxSize": 8,
- "desiredSize": 3,
- "evaluationPeriod": 300,
- "scaleInMethod": "NEWEST_FIRST",
- "scaleOutCooldownSeconds": 600,
- "scaleInCooldownSeconds": 900
}
}{- "id": "114ca9f9-88a3-49e1-92f2-757d7fedde98",
- "workflowId": "b7e6a4ae-4cf9-4ad4-b8f9-9b5347300d73",
- "name": "tenant-a-autoscale",
- "type": "AUTO_SCALE",
- "status": "READY",
- "version": "v1",
- "createdAt": "2026-05-18T11:00:00.000Z",
- "updatedAt": "2026-05-18T11:00:00.000Z"
}Returns one Job including resolved configuration (effectiveConfig),
lifecycle status, and runtime/schedule state when applicable.
| workflowId required | string <uuid> |
| jobId required | string <uuid> |
Job
Resource not found
{- "id": "114ca9f9-88a3-49e1-92f2-757d7fedde98",
- "workflowId": "b7e6a4ae-4cf9-4ad4-b8f9-9b5347300d73",
- "name": "tenant-a-autoscale",
- "type": "AUTO_SCALE",
- "status": "ACTIVE",
- "config": {
- "configType": "AUTO_SCALE",
- "minSize": 2,
- "maxSize": 8,
- "desiredSize": 4,
- "scaleOutCooldownSeconds": 600,
- "scaleInCooldownSeconds": 900
}, - "runtime": {
- "currentSize": 4,
- "lastEvaluatedAt": "2026-05-18T11:09:30.000Z"
}, - "createdAt": "2026-05-18T11:00:00.000Z",
- "updatedAt": "2026-05-18T11:10:00.000Z"
}Not allowed while a CONTINUOUS job is ACTIVE or an ON_DEMAND execution is RUNNING.
| workflowId required | string <uuid> |
| jobId required | string <uuid> |
| type | string Enum: "AUTO_SCALE" "SOFTWARE_DISTRIBUTION" "SOFTWARE_INSTALLATION" "BACKUP" |
| name | string |
| description | string Optional human-readable job description. Set to empty string to clear. |
| status | string Enum: "PENDING" "READY" "ACTIVE" "RUNNING" "PAUSING" "PAUSED" "CANCELLING" "INACTIVE" "ERROR" "COMPLETED" "FAILED" "CANCELLED" "DELETING" |
| enabled | boolean Whether the job can be activated, paused, or resumed. |
| config | object (JobConfig) Job configuration (discriminated by workflow type - use AutoScaleConfig, UpgradeConfig, or BackupConfig) |
| schedule | object (Schedule) |
Updated job
Invalid request
Resource not found
Conflict with current resource state
{- "name": "tenant-a-autoscale-prod"
}{- "id": "114ca9f9-88a3-49e1-92f2-757d7fedde98",
- "workflowId": "b7e6a4ae-4cf9-4ad4-b8f9-9b5347300d73",
- "name": "tenant-a-autoscale-prod",
- "type": "AUTO_SCALE",
- "status": "ACTIVE",
- "updatedAt": "2026-05-18T11:20:00.000Z"
}Terminates any running executions before deletion.
| workflowId required | string <uuid> |
| jobId required | string <uuid> |
Deleted
Resource not found
Conflict with current resource state
{- "code": "string",
- "message": "string",
- "details": [
- "string"
]
}Returns all autoscale device rows associated with the job.
| workflowId required | string <uuid> |
| jobId required | string <uuid> |
Devices for the job
Invalid request
Resource not found
{- "items": [
- {
- "id": "65b1c38e-44b9-48e3-9fd3-38ffab1b6da1",
- "workflowId": "b7e6a4ae-4cf9-4ad4-b8f9-9b5347300d73",
- "jobId": "114ca9f9-88a3-49e1-92f2-757d7fedde98",
- "hostname": "bigip-tenant-a-01",
- "ip": "10.145.134.204",
- "status": "READY",
- "managementAddr": "10.145.134.204",
- "providerGuestRef": "vm-stub-65b1c38e-44b9-48e3-9fd3-38ffab1b6da1",
- "createdAt": "2026-05-18T11:20:00.000Z",
- "updatedAt": "2026-05-18T11:20:00.000Z",
- "deletedAt": null
}
], - "totalItems": 1
}Returns the health status of the license service including activation status, storage metrics, and license information
License service is healthy
Service unavailable
{- "status": {
- "health": "green",
- "message": "Activation service healthy",
- "errors": [ ]
}, - "license": {
- "activation_timestamp": "2025-12-03T07:18:11Z",
- "license_sub_status": "Active",
- "status": "Active",
- "expiry_date": "2026-11-29T00:00:32Z",
- "telemetry_status": "Enabled",
- "telemetry_last_verified": "2025-12-10T05:12:45Z",
- "telemetry_error": "if any error while sending telemetry",
- "mode_of_operation": "connected"
}, - "storage": {
- "used_percent": 15.7,
- "used_gb": 500,
- "entitled_gb": 300
}
}Activates the license for the service and returns activation status, digital asset ID, entitlements, and subscription details
| jwt required | string JWT token for license activation |
| customId | string Optional custom identifier for the device |
| modeOfOperation required | string Enum: "connected" "disconnected" Mode of operation for license activation |
License activated successfully
Invalid activation request
Unauthorized activation attempt
Internal server error
Service unavailable - unable to connect to licensing server
{- "jwt": "your-jwt-token",
- "customId": "string",
- "modeOfOperation": "connected"
}{- "status": "success",
- "message": "License activated successfully",
- "digitalAssetId": "DA-12345-67890",
- "licenseStatus": "Active",
- "activatedAt": "2025-12-03T07:18:11Z",
- "hostLicense": {
- "licenseId": "LIC-12345-ABCDE",
- "subscriptionType": "trial",
- "orderType": "subscription",
- "expiryDate": "2026-11-29T00:00:32Z",
- "isActive": true
}, - "entitlements": [
- {
- "featureId": "FEAT-001",
- "featureName": "AI-Driven Forecasting",
- "featurePermitted": 1000,
- "featureRemain": 750,
- "featureUnlimited": false,
- "featureUsed": 250,
- "featureValueType": "integral",
- "uomCode": "GB",
- "uomTerm": "gigabytes",
- "uomTermStart": 0
}
], - "subscriptionType": "trial",
- "expiryDate": "2026-11-29T00:00:32Z"
}Deactivates the license for the service and returns deactivation status
License deactivated successfully
Invalid deactivation request
Unauthorized deactivation attempt
Internal server error
{- "status": "success",
- "message": "License deactivated successfully",
- "digitalAssetId": "string",
- "licenseStatus": "Terminated",
- "deactivatedAt": "2026-08-21T06:32:49Z"
}Downloads the license report in disconnected mode (base64 encoded)
License report downloaded successfully
Operation not allowed in connected mode
Internal server error
{- "report": "eyJyZXBvcnROYW1lIjoibXktcmVwb3J0IiwidGVsZW1ldHJ5UmVjb3JkcyI6W119"
}Verifies a signed license report acknowledgment from F5 TEEM in disconnected mode
| manifest required | string Base64 encoded signed report acknowledgment from F5 TEEM |
Report verification initiated successfully
Invalid request body
Operation not allowed in connected mode
Internal server error
{- "manifest": "eyJzaWduZWRBY2siOiJ0ZXN0In0="
}{- "message": "Operation successful"
}Retrieves license entitlements from llm sdk
License entitlements retrieved successfully
Internal server error
{- "entitlements": { },
- "status": "success"
}Assign a license from the pool to a specific BIG-IP device member
| poolId required | string <uuid> Example: 7dd7b971-6eb8-4b9e-995b-1dcb1287d65f UUID of the license pool |
| regKey required | string Example: U5939-99933-49705-74523-4841009 Registration key of the license offering |
| deviceAddress required | string <ipv4> IP address of the BIG-IP device |
| deviceUsername required | string Username for BIG-IP device authentication |
| devicePassword required | string Password for BIG-IP device authentication |
License assignment initiated (async operation)
Bad request - invalid parameters, no available licenses, or license already granted
Unauthorized
License pool or offering not found
Internal server error
{- "deviceAddress": "192.168.1.100",
- "deviceUsername": "admin",
- "devicePassword": "admin"
}Retrieves all members (BIG-IP devices) that have been assigned licenses from a specific offering
| poolId required | string <uuid> Example: 7dd7b971-6eb8-4b9e-995b-1dcb1287d65f UUID of the license pool |
| regKey required | string Example: U5939-99933-49705-74523-4841009 Registration key of the license offering |
List of license members retrieved successfully
Unauthorized
License pool or offering not found
Internal server error
{- "items": [
- {
- "id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
- "deviceAddress": "192.168.1.100",
- "deviceName": "bigip-ve-001.local",
- "deviceMacAddress": "00:1A:2B:3C:4D:5E",
- "deviceLicenseText": "string",
- "status": "LICENSED",
- "taskId": "d4e5f6a7-b8c9-0123-defg-456789abcdef",
- "assignedAt": "2026-08-21T06:32:49Z",
- "revokedAt": "2026-08-21T06:32:49Z"
}
], - "totalItems": 0
}Revokes a license assignment from a specific BIG-IP device member and returns the license to the pool. This is a synchronous operation that contacts the device to deactivate the license. If force=true is specified, the license will be revoked from the pool without contacting the device.
| poolId required | string <uuid> Example: 7dd7b971-6eb8-4b9e-995b-1dcb1287d65f UUID of the license pool |
| regKey required | string Example: U5939-99933-49705-74523-4841009 Registration key of the license offering |
| memberId required | string <uuid> Example: a1b2c3d4-e5f6-7890-abcd-ef1234567890 UUID of the license member |
| force | boolean Default: false Example: force=true If true, skip device reachability check and delete the license assignment from the pool without contacting the BIG-IP device. Useful when the device is unreachable or destroyed. |
| deviceUsername required | string Username for BIG-IP device authentication |
| devicePassword required | string Password for BIG-IP device authentication |
License successfully revoked from the device
Bad request - revocation failed
Unauthorized
License member not found
Internal server error
{- "deviceUsername": "admin",
- "devicePassword": "admin"
}{- "error": "string",
- "code": "string"
}Updates the details of a license member, such as device information. This can be used to correct device information or update the member record after a device change.
| poolId required | string <uuid> Example: 7dd7b971-6eb8-4b9e-995b-1dcb1287d65f UUID of the license pool |
| regKey required | string Example: U5939-99933-49705-74523-4841009 Registration key of the license offering |
| memberId required | string <uuid> Example: a1b2c3d4-e5f6-7890-abcd-ef1234567890 UUID of the license member to update |
| deviceUsername | string Username for BIG-IP device authentication |
| devicePassword | string Password for BIG-IP device authentication |
License member update initiated (async operation)
Bad request - invalid input or update failed
Unauthorized
License member not found
Internal server error
{- "deviceUsername": "admin",
- "devicePassword": "admin"
}Adds a license offering to an existing pool by activating a registration key. Steps - 1. Generate public/private keys and dossier. 2. Check the MODE of activation (AUTOMATIC, MANUAL, CCN) and trigger corresponding flow. 3. Contact F5 License Server at https://authem.f5net.com/license/services/. 4. F5 License server returns license_text if activation is successful.
| poolId required | string <uuid> Example: 7dd7b971-6eb8-4b9e-995b-1dcb1287d65f UUID of the license pool |
| regKey required | string F5 registration key |
| status required | string Enum: "ACTIVATING_AUTOMATIC" "ACTIVATING_MANUAL" Activation mode to use when adding the offering. ACTIVATING_AUTOMATIC - contacts F5 license server automatically. ACTIVATING_MANUAL - begins manual activation flow. |
| name | string Optional name for the license offering |
| description | string Optional description for the license offering |
License offering activation initiated (async operation)
Bad request - invalid registration key or activation failure
Unauthorized
License pool not found
Internal server error
{- "regKey": "U5939-99933-49705-74523-4841009",
- "status": "ACTIVATING_AUTOMATIC",
- "name": "",
- "description": ""
}Retrieves all license offerings associated with a specific license pool
| poolId required | string <uuid> Example: 7dd7b971-6eb8-4b9e-995b-1dcb1287d65f UUID of the license pool |
| $select | string Example: $select=selfLink Fields to select in the response |
| $filter | string OData filter expression to filter offerings. Supported fields: status, isAssigned, regKey Examples:
|
List of license offerings retrieved successfully
Unauthorized
License pool not found
Internal server error
{- "items": [
- {
- "id": "f1e2d3c4-b5a6-7890-cdef-123456789abc",
- "regKey": "U5939-99933-49705-74523-4841009",
- "name": "",
- "description": "",
- "status": "READY",
- "taskId": "d4e5f6a7-b8c9-0123-defg-456789abcdef",
- "licenseText": "string",
- "licenseState": {
- "usage": "F5 Internal Product Development",
- "vendor": "F5 Networks, Inc.",
- "dossier": "1a6806020f683204a3bbb8f3b0cf93c8f61be328908e76b0a570d2b992b0fb300e0c",
- "authVers": "5b",
- "generation": 0,
- "platformId": "Z100",
- "skipLicense": false,
- "featureFlags": [
- {
- "featureName": "perf_SSL_Mbps",
- "featureValue": "2000"
}
], - "activeModules": [
- "BIG-IP, LAB (LTM,APM,ASM,AM, GTM), VE|D826541-4208201|IPV6 Gateway|Rate Shaping",
- "CGN, VE (LAB)|T172156-2328256|Routing Bundle, VE",
- "DNSSEC|M275558-6506420"
], - "authorization": "string",
- "serviceStatus": "As of 2026-05-14 there is no active service contract.",
- "licensedVersion": "8.4.1",
- "optionalModules": [
- "App Mode (TMSH Only, No Root/Bash)",
- "BIG-IP VE, Multicast Routing",
- "PEM, VE",
- "Routing Bundle, VE"
], - "registrationKey": "W5778-33088-84412-26046-5913991",
- "lastUpdateMicros": 0,
- "licensedDateTime": "2026-08-21T06:32:49Z",
- "exclusivePlatform": [
- "Z100",
- "Z100A",
- "Z100H",
- "Z100K",
- "Z100x"
], - "licenseEndDateTime": "2026-08-21T06:32:49Z",
- "licenseStartDateTime": "2026-08-21T06:32:49Z",
- "serviceCheckDateTime": "2026-08-21T06:32:49Z",
- "evaluationEndDateTime": "2026-08-21T06:32:49Z",
- "evaluationStartDateTime": "2026-08-21T06:32:49Z"
}, - "dossier": "1ac56379204d679f59524f2e64300d03b91b4b9ff08225ce0087d91b6cf061227610",
- "publicKey": [
- 0
], - "encryptedPrivateKey": [
- 0
], - "message": "You must obtain license text and supply it here",
- "createdAt": "2026-08-21T06:32:49Z",
- "activatedAt": "2026-08-21T06:32:49Z",
- "isAssigned": false
}
], - "totalItems": 0
}Retrieves a specific license offering from the pool by its registration key. Returns the full offering details including activation status, license text, and license count information.
| poolId required | string <uuid> Example: 7dd7b971-6eb8-4b9e-995b-1dcb1287d65f UUID of the license pool |
| regKey required | string Example: U5939-99933-49705-74523-4841009 Registration key of the license offering |
License offering retrieved successfully
Unauthorized
License pool or offering not found
Internal server error
{- "id": "f1e2d3c4-b5a6-7890-cdef-123456789abc",
- "regKey": "U5939-99933-49705-74523-4841009",
- "name": "",
- "description": "",
- "status": "READY",
- "taskId": "d4e5f6a7-b8c9-0123-defg-456789abcdef",
- "licenseText": "string",
- "licenseState": {
- "usage": "F5 Internal Product Development",
- "vendor": "F5 Networks, Inc.",
- "dossier": "1a6806020f683204a3bbb8f3b0cf93c8f61be328908e76b0a570d2b992b0fb300e0c",
- "authVers": "5b",
- "generation": 0,
- "platformId": "Z100",
- "skipLicense": false,
- "featureFlags": [
- {
- "featureName": "perf_SSL_Mbps",
- "featureValue": "2000"
}
], - "activeModules": [
- "BIG-IP, LAB (LTM,APM,ASM,AM, GTM), VE|D826541-4208201|IPV6 Gateway|Rate Shaping",
- "CGN, VE (LAB)|T172156-2328256|Routing Bundle, VE",
- "DNSSEC|M275558-6506420"
], - "authorization": "string",
- "serviceStatus": "As of 2026-05-14 there is no active service contract.",
- "licensedVersion": "8.4.1",
- "optionalModules": [
- "App Mode (TMSH Only, No Root/Bash)",
- "BIG-IP VE, Multicast Routing",
- "PEM, VE",
- "Routing Bundle, VE"
], - "registrationKey": "W5778-33088-84412-26046-5913991",
- "lastUpdateMicros": 0,
- "licensedDateTime": "2026-08-21T06:32:49Z",
- "exclusivePlatform": [
- "Z100",
- "Z100A",
- "Z100H",
- "Z100K",
- "Z100x"
], - "licenseEndDateTime": "2026-08-21T06:32:49Z",
- "licenseStartDateTime": "2026-08-21T06:32:49Z",
- "serviceCheckDateTime": "2026-08-21T06:32:49Z",
- "evaluationEndDateTime": "2026-08-21T06:32:49Z",
- "evaluationStartDateTime": "2026-08-21T06:32:49Z"
}, - "dossier": "1ac56379204d679f59524f2e64300d03b91b4b9ff08225ce0087d91b6cf061227610",
- "publicKey": [
- 0
], - "encryptedPrivateKey": [
- 0
], - "message": "You must obtain license text and supply it here",
- "createdAt": "2026-08-21T06:32:49Z",
- "activatedAt": "2026-08-21T06:32:49Z",
- "isAssigned": false
}Updates an existing license offering in the pool. This endpoint supports three distinct operations
based on the status field in the request body:
Request: {"status": "ACTIVATING_AUTOMATIC"}
Response: 202 Accepted with TaskReference
Triggers automatic reactivation via F5 license server. This is an asynchronous operation.
Steps:
Poll the returned task link to check completion status.
Request: {"status": "ACTIVATING_MANUAL"}
Response: 200 OK with LicenseOffering (containing new dossier)
Triggers manual reactivation flow. This is a synchronous operation that returns immediately
with a new dossier. The offering status will be set to ACTIVATING_MANUAL_NEED_LICENSE_TEXT.
Steps:
User should then submit the dossier to F5 license server UI to obtain license text.
Request: {"status": "ACTIVATING_MANUAL_LICENSE_TEXT_PROVIDED", "licenseText": "..."}
Response: 200 OK with LicenseOffering
Completes manual activation by providing the license text. This is a synchronous operation.
The offering must be in ACTIVATING_MANUAL_NEED_LICENSE_TEXT status.
Steps:
| poolId required | string <uuid> Example: 7dd7b971-6eb8-4b9e-995b-1dcb1287d65f UUID of the license pool |
| regKey required | string Example: U5939-99933-49705-74523-4841009 Registration key of the license offering to update |
| status required | string Enum: "ACTIVATING_AUTOMATIC" "ACTIVATING_MANUAL" "ACTIVATING_MANUAL_LICENSE_TEXT_PROVIDED" The operation to perform:
|
| licenseText | string License text obtained from F5 license server.
Required when status is |
License offering updated successfully. Returned for synchronous operations:
ACTIVATING_MANUAL: Returns offering with new dossier (status: ACTIVATING_MANUAL_NEED_LICENSE_TEXT)ACTIVATING_MANUAL_LICENSE_TEXT_PROVIDED: Returns fully activated offering (status: READY)License offering reactivation initiated. Returned for asynchronous operation:
ACTIVATING_AUTOMATIC: Returns task reference for pollingPoll the taskLink to check the status of the reactivation operation.
Bad request - invalid status, missing license text, or operation not allowed
Unauthorized
License pool or offering not found
Internal server error
{- "status": "ACTIVATING_AUTOMATIC"
}{- "id": "f1e2d3c4-b5a6-7890-cdef-123456789abc",
- "regKey": "U5939-99933-49705-74523-4841009",
- "name": "",
- "status": "ACTIVATING_MANUAL_NEED_LICENSE_TEXT",
- "dossier": "1ac56379204d679f59524f2e64300d03b91b4b9ff08225ce0087d91b6cf061227610",
- "message": "Dossier generated. Submit this dossier to F5 license server to obtain license text, then call this endpoint with status ACTIVATING_MANUAL_LICENSE_TEXT_PROVIDED.",
- "createdAt": "2024-01-15T10:30:00Z"
}Deletes a specific license offering from the pool. If the license has already been granted to a member, returns 400 error.
| poolId required | string <uuid> Example: 7dd7b971-6eb8-4b9e-995b-1dcb1287d65f UUID of the license pool |
| regKey required | string Example: U5939-99933-49705-74523-4841009 Registration key of the license offering |
License offering deleted successfully
Bad request - license has been granted to a device
Unauthorized
License offering not found
Internal server error
{- "code": 400,
- "message": "The license U5939-99933-49705-74523-4841009 has been granted to a device"
}Fetches all available license pools in the system.
| $select | string Example: $select=id Fields to select in the response |
returns list of all License pools successfully
Bad request - invalid input
Unauthorized
Internal server error
[- {
- "id": "7dd7b971-6eb8-4b9e-995b-1dcb1287d65f",
- "name": "test",
- "description": "",
- "type": "Registration Key Pool",
- "createdAt": "2026-08-21T06:32:49Z",
- "updatedAt": "2026-08-21T06:32:49Z"
}
]Creates a new license pool that can hold multiple license offerings
| name required | string Name of the license pool |
| description | string Description of the license pool |
License pool created successfully
Bad request - invalid input
Unauthorized
Internal server error
{- "name": "test",
- "description": ""
}{- "id": "7dd7b971-6eb8-4b9e-995b-1dcb1287d65f",
- "name": "test",
- "description": "",
- "type": "Registration Key Pool",
- "createdAt": "2026-08-21T06:32:49Z",
- "updatedAt": "2026-08-21T06:32:49Z"
}Get license pool by given ID in the path parameter
| poolId required | string <uuid> Example: 7dd7b971-6eb8-4b9e-995b-1dcb1287d65f UUID of the license pool |
Returns the License pool successfully
Bad request - invalid input
Unauthorized
License pool not found
Internal server error
{- "id": "7dd7b971-6eb8-4b9e-995b-1dcb1287d65f",
- "name": "test",
- "description": "",
- "type": "Registration Key Pool",
- "createdAt": "2026-08-21T06:32:49Z",
- "updatedAt": "2026-08-21T06:32:49Z"
}Deletes a license pool. If licenses are added and activated but not assigned to any device, deleting the pool will invalidate all associated registration keys. If any license from the pool is already assigned to a member, returns 400 error.
| poolId required | string <uuid> Example: 7dd7b971-6eb8-4b9e-995b-1dcb1287d65f UUID of the license pool |
License pool deleted successfully
Bad request - pool has outstanding grants
Unauthorized
License pool not found
Internal server error
{- "code": 400,
- "message": "Found 1 outstanding grant(s). They must be removed before this license can be deleted."
}Automatically assigns an available license from the pool to the specified BIG-IP device.
This is a convenience endpoint that:
This is an asynchronous operation that returns a TaskReference for polling.
| poolId required | string <uuid> Example: 7dd7b971-6eb8-4b9e-995b-1dcb1287d65f UUID of the license pool |
| deviceAddress required | string <ipv4> IP address of the BIG-IP device |
| deviceUsername required | string Username for BIG-IP device authentication |
| devicePassword required | string Password for BIG-IP device authentication |
License assignment initiated (async operation)
Bad request - no available licenses or invalid parameters
Unauthorized
License pool not found
Internal server error
{- "deviceAddress": "192.168.1.100",
- "deviceUsername": "admin",
- "devicePassword": "admin"
}Revokes the license from a device that has a license assigned from this pool.
This is a convenience endpoint that:
If force=true, the license will be revoked from the pool without contacting the device.
This is useful when the device is unreachable or destroyed.
| poolId required | string <uuid> Example: 7dd7b971-6eb8-4b9e-995b-1dcb1287d65f UUID of the license pool |
| force | boolean Default: false Example: force=true If true, skip device communication and delete the license assignment from the pool without contacting the BIG-IP device. Useful when the device is unreachable or destroyed. |
| deviceAddress required | string <ipv4> IP address of the BIG-IP device |
| deviceUsername required | string Username for BIG-IP device authentication |
| devicePassword required | string Password for BIG-IP device authentication |
License successfully revoked from the device
Bad request - revocation failed
Unauthorized
License pool not found or device not found in pool
Internal server error
{- "deviceAddress": "192.168.1.100",
- "deviceUsername": "admin",
- "devicePassword": "admin"
}{- "error": "string",
- "code": "string"
}Transitions job from READY/PAUSED → ACTIVE. Only valid for jobs whose parent Workflow has executionMode=CONTINUOUS. Starts (or reuses) the long-lived continuous execution container for activity generation.
| workflowId required | string <uuid> |
| jobId required | string <uuid> |
Job activated
Invalid request
Resource not found
Conflict with current resource state
{- "id": "2f2f8b64-91d2-4d4f-9aa8-03b8a9238ea1",
- "jobId": "220f0b6b-87e7-4e5f-bcc2-9f2d26786ac6",
- "workflowId": "b7e6a4ae-4cf9-4ad4-b8f9-9b5347300d73",
- "status": "RUNNING",
- "startedAt": "2026-05-18T12:00:00.000Z"
}Halts automatic evaluation for CONTINUOUS execution. No new activities are triggered while paused. In-flight activity processing may complete before full pause takes effect.
| workflowId required | string <uuid> |
| jobId required | string <uuid> |
Job paused
Resource not found
Conflict with current resource state
{- "message": "job paused"
}Resumes automatic evaluation for a previously paused CONTINUOUS job. New activities can be generated again based on policy/signal conditions.
| workflowId required | string <uuid> |
| jobId required | string <uuid> |
Job resumed
Resource not found
Conflict with current resource state
{- "message": "job resumed"
}Switch F5 Insight between lite and full modes.
Mode Descriptions:
Constraints:
| target_mode required | string Enum: "lite" "full" Target mode to switch to |
Mode switch initiated successfully
Invalid request (same mode, full→lite not allowed, invalid mode)
License validation failed (lite→full requires valid license)
Internal server error
{- "target_mode": "full"
}{- "task_id": "123e4567-e89b-12d3-a456-426614174000",
- "target_mode": "full",
- "status": "submitted"
}Query the progress of a mode switch task by task_id.
FSM States:
| task_id required | string <uuid> Example: 123e4567-e89b-12d3-a456-426614174000 UUID of the mode switch task |
Mode switch status retrieved successfully
Invalid task_id format
Task not found
Internal server error
{- "task_id": "123e4567-e89b-12d3-a456-426614174000",
- "current_mode": "lite",
- "target_mode": "full",
- "state": "IN_PROGRESS",
- "status": "RUNNING",
- "progress": 60,
- "error_message": "Failed to scale deployment: timeout"
}Returns information about the current system mode (lite/full).
Mode capabilities retrieved successfully
Internal server error
{- "current_mode": "lite",
- "message": ""
}Returns the currently running (non-terminal) mode switch task. Returns 404 when no mode switch is in progress.
Active mode switch task found
No mode switch task in progress
Internal server error
{- "task_id": "123e4567-e89b-12d3-a456-426614174000",
- "state": "HELM_UPGRADE",
- "status": "running",
- "progress": 50,
- "error_message": "Helm upgrade failed"
}Global jobs listing endpoint across workflow templates. Useful for platform views, tenant operations dashboards, and central search.
| page | integer >= 1 Default: 1 |
| limit | integer [ 1 .. 200 ] Default: 50 |
| workflowId | string <uuid> |
| type | string Enum: "AUTO_SCALE" "SOFTWARE_DISTRIBUTION" "SOFTWARE_INSTALLATION" "BACKUP" |
| executionMode | string Enum: "CONTINUOUS" "ON_DEMAND" |
| status | string Enum: "PENDING" "READY" "ACTIVE" "RUNNING" "PAUSED" "INACTIVE" "ERROR" "DELETING" |
List of jobs
Invalid request
{- "items": [
- {
- "id": "220f0b6b-87e7-4e5f-bcc2-9f2d26786ac6",
- "workflowId": "b7e6a4ae-4cf9-4ad4-b8f9-9b5347300d73",
- "name": "tenant-a-autoscale",
- "status": "ACTIVE",
- "createdAt": "2026-05-18T12:00:00.000Z",
- "updatedAt": "2026-05-18T14:45:00.000Z"
}
], - "pagination": {
- "page": 1,
- "page_size": 50,
- "total": 1,
- "total_pages": 1
}
}Global execution timeline across the entire platform. Supports filtering by workflow, job, execution mode, trigger, and time window.
| page | integer >= 1 Default: 1 |
| limit | integer [ 1 .. 200 ] Default: 50 |
| workflowId | string <uuid> |
| jobId | string <uuid> |
| type | string Enum: "AUTO_SCALE" "SOFTWARE_DISTRIBUTION" "SOFTWARE_INSTALLATION" "BACKUP" |
| executionMode | string Enum: "CONTINUOUS" "ON_DEMAND" |
| status | string Enum: "RUNNING" "PAUSING" "PAUSED" "CANCELLING" "COMPLETED" "FAILED" "CANCELLED" "TIMEOUT" |
| trigger | string Enum: "USER" "ALERT" "SYSTEM" "SCHEDULE" |
| since | string <date-time> |
| until | string <date-time> |
List of executions
Invalid request
{- "items": [
- {
- "id": "2f2f8b64-91d2-4d4f-9aa8-03b8a9238ea1",
- "jobId": "220f0b6b-87e7-4e5f-bcc2-9f2d26786ac6",
- "trigger": "SYSTEM",
- "status": "RUNNING",
- "reason": "Continuous controller active",
- "startedAt": "2026-05-18T08:10:00.000Z",
- "activityCount": 37
}, - {
- "id": "7d8f5576-6414-410f-8f5a-0c34f95df3b0",
- "jobId": "114ca9f9-88a3-49e1-92f2-757d7fedde98",
- "trigger": "USER",
- "status": "COMPLETED",
- "reason": "Manual emergency run",
- "startedAt": "2026-05-18T12:10:00.000Z",
- "completedAt": "2026-05-18T12:17:00.000Z",
- "activityCount": 1
}
], - "total": 2,
- "page": 1,
- "limit": 50
}Execution cardinality depends on the parent workflow executionMode:
status, trigger, since, until) for timeline and troubleshooting use-cases.| workflowId required | string <uuid> |
| jobId required | string <uuid> |
| page | integer >= 1 Default: 1 |
| limit | integer [ 1 .. 200 ] Default: 50 |
| status | string Enum: "RUNNING" "PAUSING" "PAUSED" "CANCELLING" "COMPLETED" "FAILED" "CANCELLED" "TIMEOUT" |
| trigger | string Enum: "USER" "ALERT" "SYSTEM" "SCHEDULE" |
| since | string <date-time> |
| until | string <date-time> |
List of executions
Resource not found
{- "items": [
- {
- "id": "2f2f8b64-91d2-4d4f-9aa8-03b8a9238ea1",
- "jobId": "b4b9a9a0-4ecb-4f9a-b9ab-8a25fdca0db8",
- "trigger": "SYSTEM",
- "status": "RUNNING",
- "reason": "Continuous controller active",
- "startedAt": "2026-05-18T08:10:00.000Z",
- "activityCount": 37
}
], - "total": 1,
- "page": 1,
- "limit": 50
}Returns execution metadata and activity-level summary.
Use /executions/{executionId}/activities to page through activities.
This endpoint is summary-focused and avoids returning unbounded activity step payloads.
| workflowId required | string <uuid> |
| jobId required | string <uuid> |
| executionId required | string <uuid> |
Execution detail with activity summary
Resource not found
{- "id": "2f2f8b64-91d2-4d4f-9aa8-03b8a9238ea1",
- "jobId": "220f0b6b-87e7-4e5f-bcc2-9f2d26786ac6",
- "trigger": "SYSTEM",
- "status": "RUNNING",
- "reason": "Continuous controller active",
- "startedAt": "2026-05-18T08:10:00.000Z",
- "activityCount": 37,
- "activitySummary": {
- "total": 37,
- "running": 1,
- "completed": 35,
- "failed": 1
}, - "latestActivityId": "0c4208f9-f7bf-4891-a2a3-df08eb7720d8",
- "latestActivityType": "SCALE_OUT"
}Activities are action units inside an execution.
Examples: SCALE_OUT, SCALE_IN, UPGRADE, PRECHECK, POSTCHECK.
| workflowId required | string <uuid> |
| jobId required | string <uuid> |
| executionId required | string <uuid> |
| page | integer >= 1 Default: 1 |
| limit | integer [ 1 .. 200 ] Default: 50 |
| activityType | string |
| status | string Enum: "PENDING" "RUNNING" "COMPLETED" "FAILED" "SKIPPED" "CANCELLED" |
| since | string <date-time> |
List of activities
Resource not found
{- "items": [
- {
- "id": "0c4208f9-f7bf-4891-a2a3-df08eb7720d8",
- "executionId": "2f2f8b64-91d2-4d4f-9aa8-03b8a9238ea1",
- "activityType": "SCALE_OUT",
- "status": "COMPLETED",
- "trigger": "ALERT",
- "reason": "cpu_utilization > 90",
- "startedAt": "2026-05-18T12:20:00.000Z",
- "completedAt": "2026-05-18T12:21:15.000Z",
- "durationMs": 75000,
- "stepCount": 4
}, - {
- "id": "2729938f-ae9c-4d6b-8d93-2852fc7f4c8c",
- "executionId": "2f2f8b64-91d2-4d4f-9aa8-03b8a9238ea1",
- "activityType": "SCALE_IN",
- "status": "RUNNING",
- "trigger": "SYSTEM",
- "reason": "low utilization evaluation",
- "startedAt": "2026-05-18T12:30:00.000Z",
- "stepCount": 3
}
], - "total": 2,
- "page": 1,
- "limit": 50
}Returns one activity with full step breakdown, retries, timing, and error details. Use this as the primary endpoint for root-cause analysis of a failed activity.
| workflowId required | string <uuid> |
| jobId required | string <uuid> |
| executionId required | string <uuid> |
| activityId required | string <uuid> |
Activity with steps
Resource not found
{- "id": "0c4208f9-f7bf-4891-a2a3-df08eb7720d8",
- "executionId": "2f2f8b64-91d2-4d4f-9aa8-03b8a9238ea1",
- "activityType": "SCALE_OUT",
- "status": "COMPLETED",
- "trigger": "ALERT",
- "reason": "cpu_utilization > 90",
- "startedAt": "2026-05-18T12:20:00.000Z",
- "completedAt": "2026-05-18T12:21:15.000Z",
- "durationMs": 75000,
- "currentStep": "FINISHED",
- "stepCount": 4,
- "steps": [
- {
- "id": "67b5f8ad-a992-46da-af82-38f5d9a0a4ee",
- "activityId": "0c4208f9-f7bf-4891-a2a3-df08eb7720d8",
- "stepName": "validate-pools",
- "sequence": 1,
- "status": "COMPLETED",
- "startedAt": "2026-05-18T12:20:00.000Z",
- "completedAt": "2026-05-18T12:20:10.000Z",
- "durationMs": 10000
}, - {
- "id": "94aab872-52a5-4b8a-8a95-ffcb2ac5d41a",
- "activityId": "0c4208f9-f7bf-4891-a2a3-df08eb7720d8",
- "stepName": "provision-instance",
- "sequence": 2,
- "status": "COMPLETED",
- "startedAt": "2026-05-18T12:20:10.000Z",
- "completedAt": "2026-05-18T12:20:55.000Z",
- "durationMs": 45000
}, - {
- "id": "20f06e25-48ca-41a9-b6bd-ef517f4ca886",
- "activityId": "0c4208f9-f7bf-4891-a2a3-df08eb7720d8",
- "stepName": "register-instance",
- "sequence": 3,
- "status": "COMPLETED",
- "startedAt": "2026-05-18T12:20:55.000Z",
- "completedAt": "2026-05-18T12:21:05.000Z",
- "durationMs": 10000
}, - {
- "id": "2969654c-f790-4a60-8e0f-cfb75a97f6c8",
- "activityId": "0c4208f9-f7bf-4891-a2a3-df08eb7720d8",
- "stepName": "post-check",
- "sequence": 4,
- "status": "COMPLETED",
- "startedAt": "2026-05-18T12:21:05.000Z",
- "completedAt": "2026-05-18T12:21:15.000Z",
- "durationMs": 10000
}
]
}Returns audit/event stream entries related to the Job lifecycle and execution processing. Events are useful for timeline reconstruction and correlation across components.
| workflowId required | string <uuid> |
| jobId required | string <uuid> |
| page | integer >= 1 Default: 1 |
| limit | integer [ 1 .. 200 ] Default: 50 |
| source | string |
| eventType | string |
| correlationId | string <uuid> |
| since | string <date-time> |
List of events
Resource not found
{- "items": [
- {
- "id": "dfee47f7-5e66-4ff2-91ea-e7f7052d6d76",
- "jobId": "220f0b6b-87e7-4e5f-bcc2-9f2d26786ac6",
- "source": "autoscale-engine",
- "eventType": "SCALE_OUT_TRIGGERED",
- "message": "CPU threshold exceeded",
- "payload": {
- "metricName": "cpu_utilization",
- "metricValue": 91
}, - "eventTime": "2026-05-18T12:19:59.000Z",
- "correlationId": "9f7224ff-f108-4284-a80e-5f31135606fe"
}
], - "total": 1,
- "page": 1,
- "limit": 50
}Returns the status of components including license, AI integrations, and device onboarding
Onboarding status retrieved successfully
Internal server error
{- "license_status": "ACTIVE",
- "custom_llm_integration": "NOT_CONFIGURED",
- "f5_aidf_integration": "NOT_CONFIGURED",
- "devices_onboarded": "NOT_CONFIGURED"
}Update onboarding status fields. All fields are optional - only provided fields will be updated.
| license_status | string Enum: "ACTIVE" "INACTIVE" Current license status |
| custom_llm_integration | string Enum: "NOT_CONFIGURED" "CONFIGURED" "SKIPPED" Custom LLM integration status |
| f5_aidf_integration | string Enum: "NOT_CONFIGURED" "CONFIGURED" "SKIPPED" F5 AIDF integration status |
| devices_onboarded | string Enum: "NOT_CONFIGURED" "CONFIGURED" "SKIPPED" Device onboarding status |
Onboarding status updated successfully
Invalid request body
Internal server error
{- "license_status": "ACTIVE",
- "custom_llm_integration": "NOT_CONFIGURED",
- "f5_aidf_integration": "NOT_CONFIGURED",
- "devices_onboarded": "NOT_CONFIGURED"
}{- "license_status": "ACTIVE",
- "custom_llm_integration": "NOT_CONFIGURED",
- "f5_aidf_integration": "NOT_CONFIGURED",
- "devices_onboarded": "NOT_CONFIGURED"
}Returns a paginated list of readiness check runs with rollup summaries.
Each item contains the run status, device counts, and timestamps — but
not the full per-device results. Use GET /readiness/{runId} for the
detailed per-device breakdown.
| page | integer >= 1 Default: 1 |
| page_size | integer [ 1 .. 500 ] Default: 20 |
| status | string Enum: "PENDING" "RUNNING" "PASSED" "WARNING" "FAILED" "ERROR" Filter runs by rolled-up status. |
Paginated list of readiness runs
Authentication required
{- "data": [
- {
- "run_id": "string",
- "status": "PENDING",
- "device_count": 0,
- "pass_count": 0,
- "warn_count": 0,
- "fail_count": 0,
- "error_count": 0,
- "can_proceed": true,
- "triggered_at": "2026-08-21T06:32:49Z",
- "completed_at": "2026-08-21T06:32:49Z"
}
], - "pagination": {
- "page": 0,
- "page_size": 0,
- "total": 0,
- "total_pages": 0
}
}Runs the requested readiness checks against the specified target devices. This is a pre-distribution gate — call before distributing images to verify that target devices are ready to receive the distribution.
The request envelope holds shared context (device targets and image IDs) and a list of check types to run. Image metadata is resolved once and shared across all checks.
Returns 202 Accepted with a run_id. Poll GET /readiness/{runId}
until status is no longer PENDING or RUNNING.
| Type | What it checks | Severity |
|---|---|---|
base_image_presence |
For each hotfix image, verifies the required base OS image is present on the device's image catalog (or co-distributed). | SOFT/WARN |
disk_space |
Sums image file sizes and verifies the device has enough free space in its image filesystem. Also updates disk_available_gb in device metadata. |
SOFT/WARN |
image_compatibility |
Verifies each image's product family is compatible with the target device type (e.g. BIG-IP images cannot target F5OS devices and vice versa). | HARD/FAIL |
Check interface.ReadinessDescriptor in DefaultReadinessRegistry.No API envelope changes are required.
| context required | object (ReadinessContext) Shared context for all readiness checks in a single run. |
| checks required | Array of objects (ReadinessCheckEntry) non-empty List of readiness check types to run. |
Readiness checks triggered — poll GET /readiness/{runId} for results
Invalid request
Authentication required
{- "context": {
- "device_targets": [
- {
- "device_id": "string"
}
], - "image_ids": [
- "string"
]
}, - "checks": [
- {
- "type": "base_image_presence"
}
]
}{- "run_id": "string",
- "message": "readiness checks triggered"
}Returns persisted per-device readiness results for a run.
Poll until status is no longer PENDING or RUNNING.
can_proceed: true means no hard-blocking failures exist.
| runId required | string <uuid> The readiness run ID returned by POST /readiness |
Readiness check results
Authentication required
Resource not found
{- "run_id": "string",
- "status": "PENDING",
- "device_count": 0,
- "pass_count": 0,
- "warn_count": 0,
- "fail_count": 0,
- "error_count": 0,
- "can_proceed": true,
- "devices": [
- {
- "id": "string",
- "run_id": "string",
- "device_id": "string",
- "hostname": "string",
- "device_type": "string",
- "ha_state": "string",
- "ha_pair_id": "string",
- "ha_peer_device_id": "string",
- "current_step": "string",
- "status": "PENDING",
- "check_results": [
- {
- "check_name": "string",
- "severity": "SOFT",
- "status": "PASS",
- "message": "string",
- "detail": null
}
], - "started_at": "2026-08-21T06:32:49Z",
- "completed_at": "2026-08-21T06:32:49Z"
}
], - "triggered_at": "2026-08-21T06:32:49Z",
- "completed_at": "2026-08-21T06:32:49Z"
}Returns all configured backup schedules. Multiple schedules are allowed (one per backup type).
Configured schedules
Failed to list backup schedules
Scheduler is unavailable
{- "success": true,
- "data": [
- {
- "id": "string",
- "name": "string",
- "task_type": "string",
- "cron_expression": "string",
- "enabled": true,
- "last_run_at": "2026-08-21T06:32:49Z",
- "last_status": "success",
- "next_run_at": "2026-08-21T06:32:49Z",
- "created_at": "2026-08-21T06:32:49Z",
- "warning": "string"
}
]
}Create a named backup schedule. Multiple schedules allowed. Duplicate names rejected.
| name required | string Schedule name (e.g., "daily-config", "weekly-full") |
| cron required | string Standard 5-field cron expression |
| backup_type | string Default: "full" Enum: "full" "config" |
| storage_target | string |
| passphrase required | string >= 12 characters Encryption passphrase (stored in Vault). Must be at least 12 characters with uppercase, lowercase, digit, and special character. Max 2 consecutive identical characters. |
Schedule created
Invalid request, e.g. a full backup schedule without a remote storage target
Schedule already exists
Failed to create the backup schedule
Scheduler or Vault is unavailable
{- "name": "string",
- "cron": "0 2 * * *",
- "backup_type": "full",
- "storage_target": "string",
- "passphrase": "stringstring"
}{- "success": true,
- "data": {
- "id": "string",
- "name": "string",
- "task_type": "string",
- "cron_expression": "string",
- "enabled": true,
- "last_run_at": "2026-08-21T06:32:49Z",
- "last_status": "success",
- "next_run_at": "2026-08-21T06:32:49Z",
- "created_at": "2026-08-21T06:32:49Z",
- "warning": "string"
}
}| id required | string <uuid> |
Schedule details
Schedule not found
Scheduler is unavailable
{- "success": true,
- "data": {
- "id": "string",
- "name": "string",
- "task_type": "string",
- "cron_expression": "string",
- "enabled": true,
- "last_run_at": "2026-08-21T06:32:49Z",
- "last_status": "success",
- "next_run_at": "2026-08-21T06:32:49Z",
- "created_at": "2026-08-21T06:32:49Z",
- "warning": "string"
}
}| id required | string <uuid> |
Schedule updated
Invalid request
Schedule not found
Conflicting schedule for this backup type
Failed to update the backup schedule
Scheduler is unavailable
{ }{- "success": true,
- "data": {
- "id": "string",
- "name": "string",
- "task_type": "string",
- "cron_expression": "string",
- "enabled": true,
- "last_run_at": "2026-08-21T06:32:49Z",
- "last_status": "success",
- "next_run_at": "2026-08-21T06:32:49Z",
- "created_at": "2026-08-21T06:32:49Z",
- "warning": "string"
}
}| id required | string <uuid> |
Schedule deleted
Schedule not found
Scheduler is unavailable
{- "success": true,
- "data": {
- "message": "string"
}
}Returns current backup settings (retention count, default storage target)
Current settings
Failed to load backup settings
{- "success": true,
- "data": {
- "default_storage_target": "string",
- "retention_count": 0
}
}Update backup settings
| default_storage_target | string Name of the default storage target |
| retention_count | integer [ 1 .. 100 ] Maximum number of backups to retain |
Settings updated
Invalid request
Failed to update backup settings
{- "default_storage_target": "string",
- "retention_count": 1
}{- "success": true,
- "data": {
- "default_storage_target": "string",
- "retention_count": 0
}
}Generic signal endpoint for job-level signaling.
Examples:
| workflowId required | string <uuid> |
| jobId required | string <uuid> |
| signalId | string Unique external signal identifier (e.g. alert ID from monitoring system) |
| signalType required | string Signal category (METRIC_ALERT, POLICY_EVENT, EXTERNAL_EVENT, etc.) |
| source | string Signal producer component (e.g. monitoring-pipeline, slack-bot, event-engine) |
| reason | string Human-readable explanation for the signal |
| labels | object Key-value pairs for signal categorization and filtering |
| payload | object Signal-specific data structure (interpreted by workflow type handler) |
Signal accepted and processing enqueued
Invalid request
Resource not found
Conflict with current resource state
{- "signalId": "sig-20260518-001",
- "signalType": "METRIC_ALERT",
- "source": "monitoring-pipeline",
- "reason": "CPU threshold exceeded",
- "labels": {
- "cluster": "prod-a",
- "environment": "production"
}, - "payload": {
- "metricName": "cpu_utilization",
- "metricValue": 91,
- "threshold": 80,
- "timestamp": "2026-05-18T14:30:00.000Z"
}
}{- "accepted": true,
- "correlationId": "9f7224ff-f108-4284-a80e-5f31135606fe",
- "message": "desired size updated from 3 to 4 based on metric cpu_utilization=91.00",
- "executionId": "2f2f8b64-91d2-4d4f-9aa8-03b8a9238ea1"
}| page | integer >= 1 Default: 1 |
| page_size | integer [ 1 .. 500 ] Default: 20 |
| status | string (UpgradeJobStatus) Enum: "DRAFT" "READY" "RUNNING" "PAUSING" "PAUSED" "CANCELLING" "COMPLETED" "FAILED" Filter by job lifecycle status |
Paginated list of software distribution jobs
Authentication required
{- "data": [
- {
- "id": "a1b2c3d4-0000-0000-0000-000000000001",
- "workflowId": "wf-0000-0000-0000-000000000001",
- "name": "distribute-bigip-17.1.2-to-prod",
- "status": "COMPLETED",
- "deviceCount": 3,
- "createdAt": "2026-05-29T09:00:00Z",
- "updatedAt": "2026-05-29T09:30:00Z"
}
], - "pagination": {
- "page": 1,
- "page_size": 20,
- "total": 1,
- "total_pages": 1
}
}Creates a new software distribution job. The job starts in DRAFT state and can be edited before activation.
Copies a software image to one or more target devices in parallel batches.
Config requires: imageId, deviceTargets
Config optional: batchSize (default 10)
Once created, activate the job with POST /jobs/{jobId}/activate.
| name required | string [ 1 .. 255 ] characters Unique name for this distribution job. |
| description | string Optional human-readable description. |
| enabled | boolean Whether this job is enabled. Set to false to disable the job. A disabled job cannot be activated, paused, or resumed. Omit on create to default to true. |
| config | object (SoftwareDistributionConfig) |
Software distribution job created (in DRAFT state)
Invalid request
Authentication required
Job name already exists
{- "name": "distribute-bigip-17.1.2-to-prod",
- "description": "Push BIGIP-17.1.2-0.0.13.iso to 3 production devices before install",
- "config": {
- "images": [
- {
- "imageId": "11111111-1111-1111-1111-111111111111",
- "imageFileName": "BIGIP-17.1.2-0.0.13.iso"
}
], - "batchSize": 10,
- "deviceTargets": [
- {
- "deviceId": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
}, - {
- "deviceId": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb"
}, - {
- "deviceId": "cccccccc-cccc-cccc-cccc-cccccccccccc"
}
]
}
}{- "id": "string",
- "workflowId": "string",
- "name": "string",
- "description": "string",
- "status": "DRAFT",
- "enabled": true,
- "config": {
- "configType": "SOFTWARE_DISTRIBUTION"
}, - "execution": {
- "executionId": "string",
- "status": "RUNNING",
- "startedAt": "2026-08-21T06:32:49Z",
- "endedAt": "2026-08-21T06:32:49Z",
- "currentBatch": 0,
- "totalBatches": 0,
- "batches": [
- {
- "batchNumber": 0,
- "status": "PENDING",
- "currentStep": "PENDING",
- "deviceIds": [
- "string"
], - "startedAt": "2026-08-21T06:32:49Z",
- "endedAt": "2026-08-21T06:32:49Z"
}
]
}, - "createdBy": "string",
- "modifiedBy": "string",
- "createdAt": "2026-08-21T06:32:49Z",
- "updatedAt": "2026-08-21T06:32:49Z"
}Returns full job details including configuration, current lifecycle status, and execution state.
| jobId required | string <uuid> |
Software distribution job details
Authentication required
Resource not found
{- "id": "a1b2c3d4-0000-0000-0000-000000000001",
- "workflowId": "wf-0000-0000-0000-000000000001",
- "name": "distribute-bigip-17.1.2-to-prod",
- "description": "Push image to prod devices",
- "status": "COMPLETED",
- "config": {
- "images": [
- {
- "imageId": "11111111-1111-1111-1111-111111111111",
- "imageFileName": "BIGIP-17.1.2-0.0.13.iso"
}
], - "batchSize": 10,
- "deviceTargets": [
- {
- "deviceId": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
}, - {
- "deviceId": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb"
}, - {
- "deviceId": "cccccccc-cccc-cccc-cccc-cccccccccccc"
}
]
}, - "execution": {
- "executionId": "exec-0000-0000-0000-000000000001",
- "status": "COMPLETED",
- "startedAt": "2026-05-29T09:00:00Z",
- "endedAt": "2026-05-29T09:28:00Z",
- "currentBatch": 1,
- "totalBatches": 1,
- "batches": [
- {
- "batchNumber": 1,
- "status": "COMPLETED",
- "currentStep": "COMPLETE",
- "deviceIds": [
- "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa",
- "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb",
- "cccccccc-cccc-cccc-cccc-cccccccccccc"
]
}
]
}, - "createdAt": "2026-05-29T08:55:00Z",
- "updatedAt": "2026-05-29T09:28:00Z"
}Replaces the job configuration. Only allowed when the job is in DRAFT or READY state.
| jobId required | string <uuid> |
| name | string [ 1 .. 255 ] characters Unique name for this distribution job. |
| description | string Optional human-readable description. |
| enabled | boolean Whether this job is enabled. Set to false to disable the job. A disabled job cannot be activated, paused, or resumed. Omit on create to default to true. |
| config | object (SoftwareDistributionConfig) |
Job updated
Invalid request
Authentication required
Resource not found
Job cannot be updated in its current state
{- "name": "distribute-bigip-17.1.2-to-prod-v2",
- "description": "Updated device list",
- "config": {
- "images": [
- {
- "imageId": "11111111-1111-1111-1111-111111111111",
- "imageFileName": "BIGIP-17.1.2-0.0.13.iso"
}
], - "batchSize": 5,
- "deviceTargets": [
- {
- "deviceId": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
}, - {
- "deviceId": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb"
}
]
}
}{- "id": "string",
- "workflowId": "string",
- "name": "string",
- "description": "string",
- "status": "DRAFT",
- "enabled": true,
- "config": {
- "configType": "SOFTWARE_DISTRIBUTION"
}, - "execution": {
- "executionId": "string",
- "status": "RUNNING",
- "startedAt": "2026-08-21T06:32:49Z",
- "endedAt": "2026-08-21T06:32:49Z",
- "currentBatch": 0,
- "totalBatches": 0,
- "batches": [
- {
- "batchNumber": 0,
- "status": "PENDING",
- "currentStep": "PENDING",
- "deviceIds": [
- "string"
], - "startedAt": "2026-08-21T06:32:49Z",
- "endedAt": "2026-08-21T06:32:49Z"
}
]
}, - "createdBy": "string",
- "modifiedBy": "string",
- "createdAt": "2026-08-21T06:32:49Z",
- "updatedAt": "2026-08-21T06:32:49Z"
}Permanently deletes a software distribution job. Only allowed when the job is not in RUNNING state. Terminates any in-progress execution before deletion.
| jobId required | string <uuid> |
Job deleted
Authentication required
Resource not found
Job cannot be deleted in its current state (e.g. RUNNING)
{- "error": "string",
- "code": "string"
}Transitions a software distribution job from DRAFT/READY → RUNNING and begins distributing the image to target devices in batches.
Pre-execution checks:
| jobId required | string <uuid> |
| changeRequest | string <= 255 characters Nullable Optional change-request identifier (e.g. "CHG0012345") associated with this specific activation/run. Persisted on the execution record so the UI can display it in the execution drawer. Each activation of the same job may carry a different change request. |
Job activated and distribution started
Invalid request
Authentication required
Resource not found
Job cannot be activated (wrong state or image not accessible)
{- "changeRequest": "string"
}{- "id": "string",
- "workflowId": "string",
- "name": "string",
- "jobType": "SOFTWARE_DISTRIBUTION",
- "status": "DRAFT",
- "updatedAt": "2026-08-21T06:32:49Z"
}Pauses the distribution job at the queue level. The worker pool stops claiming new PENDING devices; devices already TRANSFERRING or VERIFYING run to completion (chunked uploads cannot be safely interrupted mid-stream). Job transitions to PAUSING immediately; once all in-flight devices finish, the service flips to PAUSED. Operator then calls /resume or /cancel.
| jobId required | string <uuid> |
Pause accepted — job is PAUSING (draining in-flight)
Authentication required
Resource not found
Job is not in a pausable state
{- "error": "string",
- "code": "string"
}Resumes a PAUSED distribution job. Job transitions back to RUNNING; a fresh worker pool is spawned to pick up the PENDING devices that were held back during the pause. Devices already COMPLETED stay COMPLETED — no rework. Returns 409 if the job is still PAUSING (drain in progress); wait for PAUSED first.
| jobId required | string <uuid> |
Resume accepted — job is back to RUNNING
Authentication required
Resource not found
Job is not in a resumable state
{- "error": "string",
- "code": "string"
}Durably signals job cancellation by transitioning to CANCELLING.
| jobId required | string <uuid> |
Cancel accepted — job is CANCELLING; converges to READY at the job level (CANCELLED on the execution row)
Authentication required
Resource not found
Job is not in a cancellable state (e.g. already COMPLETED or in a non-cancellable lifecycle state)
{- "error": "string",
- "code": "string"
}Returns the per-device runtime status of a software distribution job
plus a rolled-up summary (counts per status + overall transfer percent).
Distinct from GET /jobs/software-distribution/{jobId}, which returns
the saved job record only.
| jobId required | string <uuid> |
Per-device + roll-up status
Authentication required
Resource not found
{- "jobId": "string",
- "status": "RUNNING",
- "totalDevices": 0,
- "pending": 0,
- "transferring": 0,
- "verifying": 0,
- "completed": 0,
- "failed": 0,
- "cancelled": 0,
- "skipped": 0,
- "overallPercent": 0,
- "devices": [
- {
- "deviceId": "string",
- "deviceName": "string",
- "deviceKind": "BIGIP",
- "status": "PENDING",
- "transferProgress": 0,
- "retryCount": 0,
- "checksumVerified": true,
- "errorMessage": "string",
- "startedAt": "2026-08-21T06:32:49Z",
- "completedAt": "2026-08-21T06:32:49Z"
}
]
}Returns all executions of a job ordered by startedAt descending
(newest first). Same item shape as the generic workflow executions
list (GET /workflows/{wfId}/jobs/{jobId}/executions) so the
cross-feature UI can render distribution + autoscale + installation
execution lists with the same component.
| jobId required | string <uuid> |
List of executions
Authentication required
Resource not found
{- "items": [
- {
- "id": "string",
- "jobId": "string",
- "jobName": "string",
- "jobDescription": "string",
- "trigger": "USER",
- "status": "RUNNING",
- "reason": "string",
- "startedAt": "2026-08-21T06:32:49Z",
- "completedAt": "2026-08-21T06:32:49Z",
- "durationMs": 0,
- "activityCount": 0,
- "retryCount": 0,
- "currentStep": "string",
- "lastError": "string",
- "changeRequest": "string",
- "correlationId": "string",
- "createdBy": "string",
- "modifiedBy": "string",
- "instanceProgress": {
- "totalDevices": 0,
- "pending": 0,
- "transferring": 0,
- "verifying": 0,
- "completed": 0,
- "failed": 0,
- "cancelled": 0,
- "skipped": 0,
- "overallPercent": 0,
- "devices": [
- {
- "deviceId": "string",
- "deviceName": "string",
- "deviceKind": "BIGIP",
- "status": "PENDING",
- "transferProgress": 0,
- "retryCount": 0,
- "checksumVerified": true,
- "errorMessage": "string",
- "startedAt": "2026-08-21T06:32:49Z",
- "completedAt": "2026-08-21T06:32:49Z"
}
]
}
}
], - "totalItems": 0
}Returns the execution record in the same shape as the generic
workflows API (GET /workflows/{wfId}/jobs/{jobId}/executions/{execId})
so the cross-feature UI can render distribution executions with the
same panel it uses for autoscale / installation. Per-device runtime
progress is embedded inline via the instanceProgress field — only
on this single-execution GET, not on the executions LIST.
| jobId required | string <uuid> |
| executionId required | string <uuid> |
Execution detail
Authentication required
Resource not found
{- "id": "string",
- "jobId": "string",
- "jobName": "string",
- "jobDescription": "string",
- "trigger": "USER",
- "status": "RUNNING",
- "reason": "string",
- "startedAt": "2026-08-21T06:32:49Z",
- "completedAt": "2026-08-21T06:32:49Z",
- "durationMs": 0,
- "activityCount": 0,
- "retryCount": 0,
- "currentStep": "string",
- "lastError": "string",
- "changeRequest": "string",
- "correlationId": "string",
- "createdBy": "string",
- "modifiedBy": "string",
- "instanceProgress": {
- "totalDevices": 0,
- "pending": 0,
- "transferring": 0,
- "verifying": 0,
- "completed": 0,
- "failed": 0,
- "cancelled": 0,
- "skipped": 0,
- "overallPercent": 0,
- "devices": [
- {
- "deviceId": "string",
- "deviceName": "string",
- "deviceKind": "BIGIP",
- "status": "PENDING",
- "transferProgress": 0,
- "retryCount": 0,
- "checksumVerified": true,
- "errorMessage": "string",
- "startedAt": "2026-08-21T06:32:49Z",
- "completedAt": "2026-08-21T06:32:49Z"
}
]
}
}Cancels in-flight distribution for a single device within a running job. Orthogonal to the job-level cancel — the rest of the job continues.
| jobId required | string <uuid> |
| deviceId required | string <uuid> |
Per-target cancel accepted
Authentication required
Resource not found
Device is already in a terminal state for this job (COMPLETED / FAILED / CANCELLED / SKIPPED)
{- "error": "string",
- "code": "string"
}| page | integer >= 1 Default: 1 |
| page_size | integer [ 1 .. 500 ] Default: 20 |
| status | string (UpgradeJobStatus) Enum: "DRAFT" "READY" "RUNNING" "PAUSING" "PAUSED" "CANCELLING" "COMPLETED" "FAILED" Filter by job lifecycle status |
| installationType | string (InstallationType) Enum: "STANDALONE" "HA" Filter by installation type |
Paginated list of software installation jobs
Authentication required
{- "data": [
- {
- "id": "b2c3d4e5-0000-0000-0000-000000000002",
- "workflowId": "wf-0000-0000-0000-000000000001",
- "name": "install-bigip-17.1.2-standalone-batch",
- "status": "RUNNING",
- "installationType": "STANDALONE",
- "batchSize": 10,
- "deviceCount": 5,
- "createdAt": "2026-05-29T10:00:00Z",
- "updatedAt": "2026-05-29T10:45:00Z"
}
], - "pagination": {
- "page": 1,
- "page_size": 20,
- "total": 1,
- "total_pages": 1
}
}Creates a new software installation job. The job starts in DRAFT state and can be edited before activation.
installationType controls device targeting mode:
STANDALONE — upgrades independent BIG-IP or F5OS devicesHA — upgrades HA pairs, maintaining service continuitybatchSize controls serial vs batch execution:
batchSize=1 — serial: upgrades one device (or HA pair) at a timebatchSize>1 — batch: upgrades multiple devices (or HA pairs) in parallelConfig requires: imageId, installationType, deviceTargets
Config optional: batchSize (default 10), execution controls (default true)
Volume selection is job-level via volumeStrategy; a per-device volumeOverride
on a device target takes precedence for that device only.
At most 5 installation jobs may be in RUNNING state simultaneously.
| name required | string [ 1 .. 255 ] characters Unique name for this installation job. |
| description | string Optional human-readable description. |
| enabled | boolean Whether this job is enabled. Set to false to disable the job. A disabled job cannot be activated, paused, or resumed. Omit on create to default to true. |
| config | object (SoftwareInstallationConfig) |
Software installation job created (in DRAFT state)
Invalid request
Authentication required
Job name already exists
{- "name": "install-bigip-17.1.2-standalone-serial",
- "description": "Upgrade 3 devices one at a time",
- "config": {
- "imageId": "11111111-1111-1111-1111-111111111111",
- "imageFileName": "BIGIP-17.1.2-0.0.13.iso",
- "installationType": "STANDALONE",
- "batchSize": 1,
- "volumeStrategy": "NEXT_SEQUENTIAL_NEW",
- "execution": {
- "hitlPauseBetweenBatches": true,
- "hitlPauseBeforeReboot": true,
- "reboot": true
}, - "flightChecks": {
- "enabled": true
}, - "deviceTargets": [
- {
- "deviceId": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
}, - {
- "deviceId": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb"
}, - {
- "deviceId": "cccccccc-cccc-cccc-cccc-cccccccccccc",
- "volumeOverride": "HD1.3"
}
]
}
}{- "id": "string",
- "workflowId": "string",
- "name": "string",
- "description": "string",
- "status": "DRAFT",
- "enabled": true,
- "config": {
- "configType": "SOFTWARE_INSTALLATION"
}, - "execution": {
- "executionId": "string",
- "status": "RUNNING",
- "startedAt": "2026-08-21T06:32:49Z",
- "endedAt": "2026-08-21T06:32:49Z",
- "currentBatch": 0,
- "totalBatches": 0,
- "batches": [
- {
- "batchNumber": 0,
- "status": "PENDING",
- "currentStep": "PENDING",
- "deviceIds": [
- "string"
], - "startedAt": "2026-08-21T06:32:49Z",
- "endedAt": "2026-08-21T06:32:49Z"
}
]
}, - "deviceInstallStates": [
- {
- "deviceId": "string",
- "device_name": "string",
- "currentVersion": "string",
- "targetVersion": "string",
- "plannedVolume": "string",
- "haRole": "ACTIVE",
- "currentStep": "PENDING",
- "status": "PENDING",
- "errorMessage": "string",
- "errorCategory": "CONNECTIVITY",
- "preSnapshotUrl": "string",
- "postSnapshotUrl": "string",
- "diffUrl": "string",
- "startedAt": "2026-08-21T06:32:49Z",
- "completedAt": "2026-08-21T06:32:49Z"
}
], - "createdBy": "string",
- "modifiedBy": "string",
- "createdAt": "2026-08-21T06:32:49Z",
- "updatedAt": "2026-08-21T06:32:49Z",
- "warnings": [
- {
- "code": "HA_DEVICES_IN_STANDALONE_JOB",
- "message": "Device bigip/10.0.0.1.bigip is the active node of an HA pair but will be installed independently without automatic failover sequencing.",
- "severity": "INFO"
}
]
}Returns full job details including configuration, current lifecycle status, and per-device install state for any devices that have started execution.
| jobId required | string <uuid> |
Software installation job details
Authentication required
Resource not found
{- "id": "b2c3d4e5-0000-0000-0000-000000000002",
- "workflowId": "wf-0000-0000-0000-000000000001",
- "name": "install-bigip-17.1.2-standalone-batch",
- "description": "Upgrade 5 production BIG-IPs in parallel batches of 2",
- "status": "RUNNING",
- "config": {
- "imageId": "11111111-1111-1111-1111-111111111111",
- "imageFileName": "BIGIP-17.1.2-0.0.13.iso",
- "installationType": "STANDALONE",
- "batchSize": 10,
- "volumeStrategy": "NEXT_SEQUENTIAL_NEW",
- "execution": {
- "hitlPauseBetweenBatches": true,
- "hitlPauseBeforeReboot": true,
- "reboot": true
}, - "deviceTargets": [
- {
- "deviceId": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
}, - {
- "deviceId": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb"
}, - {
- "deviceId": "cccccccc-cccc-cccc-cccc-cccccccccccc",
- "volumeOverride": "HD1.3"
}
]
}, - "execution": {
- "executionId": "exec-0000-0000-0000-000000000002",
- "status": "RUNNING",
- "startedAt": "2026-05-29T10:00:00Z",
- "currentBatch": 2,
- "totalBatches": 3,
- "batches": [
- {
- "batchNumber": 1,
- "status": "COMPLETED",
- "currentStep": "COMPLETE",
- "deviceIds": [
- "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa",
- "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb"
]
}
]
}, - "deviceInstallStates": [
- {
- "deviceId": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa",
- "hostname": "bigip-prod-01",
- "currentVersion": "17.1.1",
- "targetVersion": "17.1.2",
- "plannedVolume": "HD1.2",
- "status": "COMPLETED",
- "currentStep": "COMPLETE",
- "startedAt": "2026-05-29T10:00:00Z",
- "completedAt": "2026-05-29T10:44:30Z"
}
], - "createdAt": "2026-05-29T09:55:00Z",
- "updatedAt": "2026-05-29T10:45:00Z"
}Replaces the job configuration. Only allowed when the job is in DRAFT or READY state.
| jobId required | string <uuid> |
| name | string [ 1 .. 255 ] characters Unique name for this installation job. |
| description | string Optional human-readable description. |
| enabled | boolean Whether this job is enabled. Set to false to disable the job. A disabled job cannot be activated, paused, or resumed. Omit on create to default to true. |
| config | object (SoftwareInstallationConfig) |
Job updated
Invalid request
Authentication required
Resource not found
Job cannot be updated in its current state
{- "name": "install-bigip-17.1.2-batch-v2",
- "description": "Updated batch size",
- "config": {
- "imageId": "11111111-1111-1111-1111-111111111111",
- "imageFileName": "BIGIP-17.1.2-0.0.13.iso",
- "installationType": "STANDALONE",
- "batchSize": 10,
- "volumeStrategy": "NEXT_SEQUENTIAL_NEW",
- "execution": {
- "hitlPauseBetweenBatches": false,
- "hitlPauseBeforeReboot": false,
- "reboot": true
}, - "flightChecks": {
- "enabled": true,
- "coreChecks": {
- "trunkStatus": true,
- "interfaceStatus": true,
- "virtualServerState": true,
- "poolHealth": true,
- "poolMemberHealth": false
}
}, - "deviceTargets": [
- {
- "deviceId": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
}, - {
- "deviceId": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb",
- "volumeOverride": "HD1.2"
}
]
}
}{- "id": "string",
- "workflowId": "string",
- "name": "string",
- "description": "string",
- "status": "DRAFT",
- "enabled": true,
- "config": {
- "configType": "SOFTWARE_INSTALLATION"
}, - "execution": {
- "executionId": "string",
- "status": "RUNNING",
- "startedAt": "2026-08-21T06:32:49Z",
- "endedAt": "2026-08-21T06:32:49Z",
- "currentBatch": 0,
- "totalBatches": 0,
- "batches": [
- {
- "batchNumber": 0,
- "status": "PENDING",
- "currentStep": "PENDING",
- "deviceIds": [
- "string"
], - "startedAt": "2026-08-21T06:32:49Z",
- "endedAt": "2026-08-21T06:32:49Z"
}
]
}, - "deviceInstallStates": [
- {
- "deviceId": "string",
- "device_name": "string",
- "currentVersion": "string",
- "targetVersion": "string",
- "plannedVolume": "string",
- "haRole": "ACTIVE",
- "currentStep": "PENDING",
- "status": "PENDING",
- "errorMessage": "string",
- "errorCategory": "CONNECTIVITY",
- "preSnapshotUrl": "string",
- "postSnapshotUrl": "string",
- "diffUrl": "string",
- "startedAt": "2026-08-21T06:32:49Z",
- "completedAt": "2026-08-21T06:32:49Z"
}
], - "createdBy": "string",
- "modifiedBy": "string",
- "createdAt": "2026-08-21T06:32:49Z",
- "updatedAt": "2026-08-21T06:32:49Z",
- "warnings": [
- {
- "code": "HA_DEVICES_IN_STANDALONE_JOB",
- "message": "Device bigip/10.0.0.1.bigip is the active node of an HA pair but will be installed independently without automatic failover sequencing.",
- "severity": "INFO"
}
]
}Permanently deletes a software installation job. Only allowed when the job is not in RUNNING state. Terminates any in-progress execution before deletion.
| jobId required | string <uuid> |
Job deleted
Authentication required
Resource not found
Job cannot be deleted in its current state (e.g. RUNNING)
{- "error": "string",
- "code": "string"
}Transitions a software installation job from DRAFT/READY → RUNNING and begins the installation pipeline.
Pre-execution checks:
Execution creates batches based on batchSize and processes devices one
batch at a time. If hitlPauseBetweenBatches is true, execution pauses
between batches for operator confirmation.
| jobId required | string <uuid> |
| changeRequest | string <= 255 characters Nullable Optional change-request identifier (e.g. "CHG0012345") associated with this specific activation/run. Persisted on the execution record so the UI can display it in the execution drawer. Each activation of the same job may carry a different change request. |
Job activated and installation started
Invalid request
Authentication required
Resource not found
Job cannot be activated (wrong state, image not verified, device locked, or max concurrent jobs reached)
{- "changeRequest": "string"
}{- "id": "string",
- "workflowId": "string",
- "name": "string",
- "jobType": "SOFTWARE_DISTRIBUTION",
- "status": "DRAFT",
- "updatedAt": "2026-08-21T06:32:49Z"
}Pauses the installation job at the next available HITL checkpoint (between batches). The current batch in progress will complete before the pause takes effect. Job transitions to PAUSED state and waits for operator to call /resume or /cancel. Only applicable to software installation jobs with hitlPauseBetweenBatches=true.
| jobId required | string <uuid> |
Pause requested — job will pause at the next batch boundary
Authentication required
Resource not found
Job is not in a pausable state
{- "id": "string",
- "workflowId": "string",
- "name": "string",
- "jobType": "SOFTWARE_DISTRIBUTION",
- "status": "DRAFT",
- "updatedAt": "2026-08-21T06:32:49Z"
}Resumes a PAUSED software installation job. Execution continues with the next pending batch. Job transitions back to RUNNING state.
| jobId required | string <uuid> |
Job resumed
Authentication required
Resource not found
Job is not in a resumable state
{- "id": "string",
- "workflowId": "string",
- "name": "string",
- "jobType": "SOFTWARE_DISTRIBUTION",
- "status": "DRAFT",
- "updatedAt": "2026-08-21T06:32:49Z"
}Returns all executions of a job ordered by startedAt descending
(newest first). Same item shape as the generic workflow executions
list (GET /workflows/{wfId}/jobs/{jobId}/executions) so the
cross-feature UI can render distribution + autoscale + installation
execution lists with the same component.
| jobId required | string <uuid> |
List of executions
Authentication required
Resource not found
{- "items": [
- {
- "id": "string",
- "jobId": "string",
- "jobName": "string",
- "jobDescription": "string",
- "trigger": "USER",
- "status": "RUNNING",
- "reason": "string",
- "startedAt": "2026-08-21T06:32:49Z",
- "completedAt": "2026-08-21T06:32:49Z",
- "durationMs": 0,
- "activityCount": 0,
- "retryCount": 0,
- "currentStep": "string",
- "lastError": "string",
- "changeRequest": "string",
- "correlationId": "string",
- "createdBy": "string",
- "modifiedBy": "string",
- "instanceProgress": {
- "totalDevices": 0,
- "pending": 0,
- "running": 0,
- "completed": 0,
- "failed": 0,
- "cancelled": 0,
- "devices": [
- {
- "deviceId": "string",
- "deviceName": "string",
- "deviceKind": "BIGIP",
- "haRole": "ACTIVE",
- "haPeerId": "string",
- "status": "PENDING",
- "currentStep": "PENDING",
- "steps": [
- {
- "step": "PENDING",
- "status": "PENDING",
- "sequence": 0,
- "startedAt": "2026-08-21T06:32:49Z",
- "completedAt": "2026-08-21T06:32:49Z",
- "durationMs": 0,
- "retryCount": 0,
- "errorCode": "string",
- "errorMessage": "string"
}
], - "retryCount": 0,
- "progressPct": 0,
- "lastError": "string",
- "startedAt": "2026-08-21T06:32:49Z",
- "completedAt": "2026-08-21T06:32:49Z",
- "preSnapshotUrl": "string",
- "postSnapshotUrl": "string",
- "diffUrl": "string",
- "readinessWarnings": [
- {
- "check": "string",
- "level": "INFO",
- "message": "string"
}
]
}
]
}, - "configSnapshot": {
- "configType": "SOFTWARE_INSTALLATION"
}, - "readinessWarnDeviceCount": 0,
- "readinessCriticalDeviceCount": 0,
- "haCoordination": {
- "pairs": [
- {
- "pairId": "string",
- "standbyDeviceId": "string",
- "standbyDeviceName": "string",
- "activeDeviceId": "string",
- "activeDeviceName": "string",
- "currentPhase": "VALIDATE_PAIR",
- "lastError": "string",
- "phases": [
- {
- "phase": "VALIDATE_PAIR",
- "status": "PENDING",
- "sequence": 0
}
]
}
]
}
}
], - "totalItems": 0
}Returns the execution record in the same shape as the generic
workflows API (GET /workflows/{wfId}/jobs/{jobId}/executions/{execId})
so the cross-feature UI can render installation executions with the
same panel it uses for distribution / autoscale. Per-device runtime
progress is embedded inline via the instanceProgress field — only
on this single-execution GET, not on the executions LIST.
| jobId required | string <uuid> |
| executionId required | string <uuid> |
Execution detail
Authentication required
Resource not found
{- "id": "string",
- "jobId": "string",
- "jobName": "string",
- "jobDescription": "string",
- "trigger": "USER",
- "status": "RUNNING",
- "reason": "string",
- "startedAt": "2026-08-21T06:32:49Z",
- "completedAt": "2026-08-21T06:32:49Z",
- "durationMs": 0,
- "activityCount": 0,
- "retryCount": 0,
- "currentStep": "string",
- "lastError": "string",
- "changeRequest": "string",
- "correlationId": "string",
- "createdBy": "string",
- "modifiedBy": "string",
- "instanceProgress": {
- "totalDevices": 0,
- "pending": 0,
- "running": 0,
- "completed": 0,
- "failed": 0,
- "cancelled": 0,
- "devices": [
- {
- "deviceId": "string",
- "deviceName": "string",
- "deviceKind": "BIGIP",
- "haRole": "ACTIVE",
- "haPeerId": "string",
- "status": "PENDING",
- "currentStep": "PENDING",
- "steps": [
- {
- "step": "PENDING",
- "status": "PENDING",
- "sequence": 0,
- "startedAt": "2026-08-21T06:32:49Z",
- "completedAt": "2026-08-21T06:32:49Z",
- "durationMs": 0,
- "retryCount": 0,
- "errorCode": "string",
- "errorMessage": "string"
}
], - "retryCount": 0,
- "progressPct": 0,
- "lastError": "string",
- "startedAt": "2026-08-21T06:32:49Z",
- "completedAt": "2026-08-21T06:32:49Z",
- "preSnapshotUrl": "string",
- "postSnapshotUrl": "string",
- "diffUrl": "string",
- "readinessWarnings": [
- {
- "check": "string",
- "level": "INFO",
- "message": "string"
}
]
}
]
}, - "configSnapshot": {
- "configType": "SOFTWARE_INSTALLATION"
}, - "readinessWarnDeviceCount": 0,
- "readinessCriticalDeviceCount": 0,
- "haCoordination": {
- "pairs": [
- {
- "pairId": "string",
- "standbyDeviceId": "string",
- "standbyDeviceName": "string",
- "activeDeviceId": "string",
- "activeDeviceName": "string",
- "currentPhase": "VALIDATE_PAIR",
- "lastError": "string",
- "phases": [
- {
- "phase": "VALIDATE_PAIR",
- "status": "PENDING",
- "sequence": 0
}
]
}
]
}
}Cancels the installation job gracefully.
| jobId required | string <uuid> |
Job cancelled
Authentication required
Resource not found
Job is not in a cancellable state (e.g. already COMPLETED or in a non-cancellable lifecycle state)
{- "id": "string",
- "workflowId": "string",
- "name": "string",
- "jobType": "SOFTWARE_DISTRIBUTION",
- "status": "DRAFT",
- "updatedAt": "2026-08-21T06:32:49Z"
}Retrieve the current storage allocation configuration including percentages, TTL settings, and cleanup thresholds
Storage configuration retrieved successfully
Internal server error
{- "id": "string",
- "clickhouse_allocation_percent": 70.5,
- "victoriametrics_allocation_percent": 29.5,
- "cleanup_threshold_percent": 80,
- "cleanup_data_percent": 70,
- "sslo_logs_ttl_days": 7,
- "irule_logs_ttl_days": 7,
- "victoriametrics_retention": "12M",
- "created_at": "2026-08-21T06:32:49Z",
- "updated_at": "2026-08-21T06:32:49Z"
}Update storage allocation percentages, TTL settings, and cleanup thresholds
| clickhouse_allocation_percent required | number <double> [ 0 .. 100 ] Percentage of total storage allocated to ClickHouse (mandatory, must sum to 100 with victoriametrics_allocation_percent). Supports up to 2 decimal places. |
| victoriametrics_allocation_percent required | number <double> [ 0 .. 100 ] Percentage of total storage allocated to VictoriaMetrics (mandatory, must sum to 100 with clickhouse_allocation_percent). Supports up to 2 decimal places. |
| cleanup_threshold_percent | number <double> [ 0 .. 100 ] Threshold percentage at which cleanup is triggered (optional). Supports up to 2 decimal places. |
| cleanup_data_percent | number <double> [ 0 .. 100 ] Percentage of data to delete during cleanup (optional). Supports up to 2 decimal places. |
Storage configuration updated successfully
Invalid request
Internal server error
{- "clickhouse_allocation_percent": 70.5,
- "victoriametrics_allocation_percent": 29.5,
- "cleanup_threshold_percent": 80,
- "cleanup_data_percent": 70
}{- "id": "string",
- "clickhouse_allocation_percent": 70.5,
- "victoriametrics_allocation_percent": 29.5,
- "cleanup_threshold_percent": 80,
- "cleanup_data_percent": 70,
- "sslo_logs_ttl_days": 7,
- "irule_logs_ttl_days": 7,
- "victoriametrics_retention": "12M",
- "created_at": "2026-08-21T06:32:49Z",
- "updated_at": "2026-08-21T06:32:49Z"
}Returns all configured storage targets
List of storage targets
Failed to list storage targets
{- "success": true,
- "data": [
- {
- "id": "string",
- "name": "string",
- "storage_type": "local",
- "server": "string",
- "share_path": "string",
- "mount_options": "string",
- "username": "string",
- "is_default": true,
- "status": "active",
- "last_checked_at": "2026-08-21T06:32:49Z",
- "latency": "string",
- "created_at": "2026-08-21T06:32:49Z",
- "last_modified": "2026-08-21T06:32:49Z"
}
]
}Create a new NFS or SMB storage target
| name required | string |
| storage_type required | string Enum: "nfs" "smb" |
| server | string |
| share_path | string |
| mount_options | string |
| username | string |
| password | string SMB password (stored securely in Vault, never in DB) |
Storage target created
Invalid request
Failed to create the storage target
Vault is unavailable and the credential could not be stored
{- "name": "string",
- "storage_type": "nfs",
- "server": "string",
- "share_path": "string",
- "mount_options": "string",
- "username": "string",
- "password": "string"
}{- "success": true,
- "data": {
- "id": "string",
- "name": "string",
- "storage_type": "local",
- "server": "string",
- "share_path": "string",
- "mount_options": "string",
- "username": "string",
- "is_default": true,
- "status": "active",
- "last_checked_at": "2026-08-21T06:32:49Z",
- "latency": "string",
- "created_at": "2026-08-21T06:32:49Z",
- "last_modified": "2026-08-21T06:32:49Z"
}
}| id required | string <uuid> |
Storage target details
Not found
{- "success": true,
- "data": {
- "id": "string",
- "name": "string",
- "storage_type": "local",
- "server": "string",
- "share_path": "string",
- "mount_options": "string",
- "username": "string",
- "is_default": true,
- "status": "active",
- "last_checked_at": "2026-08-21T06:32:49Z",
- "latency": "string",
- "created_at": "2026-08-21T06:32:49Z",
- "last_modified": "2026-08-21T06:32:49Z"
}
}| id required | string <uuid> |
| name | string |
| storage_type | string Enum: "nfs" "smb" |
| server | string |
| share_path | string |
| mount_options | string |
| username | string |
| password | string SMB password (stored securely in Vault, never in DB) |
| is_default | boolean When true, marks this target as the default for new backups. |
Storage target updated
Invalid request
Storage target not found
Failed to update the storage target
Vault is unavailable and the credential could not be updated
{- "name": "string",
- "storage_type": "nfs",
- "server": "string",
- "share_path": "string",
- "mount_options": "string",
- "username": "string",
- "password": "string",
- "is_default": true
}{- "success": true,
- "data": {
- "id": "string",
- "name": "string",
- "storage_type": "local",
- "server": "string",
- "share_path": "string",
- "mount_options": "string",
- "username": "string",
- "is_default": true,
- "status": "active",
- "last_checked_at": "2026-08-21T06:32:49Z",
- "latency": "string",
- "created_at": "2026-08-21T06:32:49Z",
- "last_modified": "2026-08-21T06:32:49Z"
}
}| id required | string <uuid> |
Storage target deleted
Cannot delete default local target
Storage target not found
Failed to delete the storage target
{- "success": true,
- "data": {
- "message": "string"
}
}Mount, write test file, unmount. Returns success with latency.
| id required | string <uuid> |
Test result
Storage target not found
Platform manager is unavailable
{- "success": true,
- "data": {
- "success": true,
- "message": "string",
- "latency": "string"
}
}Tests connectivity to a storage target using the provided config. Does not save anything.
| storage_type required | string Enum: "local" "nfs" "smb" |
| server | string |
| share_path | string |
| mount_options | string |
| username | string |
| password | string SMB password (used only for the test, never persisted) |
Test result
Invalid request
Platform manager is unavailable
{- "storage_type": "local",
- "server": "string",
- "share_path": "string",
- "mount_options": "string",
- "username": "string",
- "password": "string"
}{- "success": true,
- "data": {
- "success": true,
- "message": "string",
- "latency": "string"
}
}Returns whether the current device is running in primary or standby mode based on environment variables
System role information retrieved successfully
Internal server error
{- "node_id": "standby-node-uuid",
- "node_name": "node-2",
- "status": "active",
- "role": "primary"
}Retrieves a paginated list of all async tasks with optional filtering. Useful for monitoring and debugging async operations.
| status | string Enum: "PENDING" "IN_PROGRESS" "COMPLETED" "FAILED" Example: status=IN_PROGRESS Filter tasks by status |
| type | string Enum: "ADD_OFFERING" "REACTIVATE_OFFERING" "ASSIGN_LICENSE" "REVOKE_LICENSE" Example: type=ASSIGN_LICENSE Filter tasks by type |
| resourceType | string Enum: "LicenseOffering" "LicenseMember" Example: resourceType=LicenseMember Filter tasks by resource type |
| resourceId | string <uuid> Example: resourceId=a1b2c3d4-e5f6-7890-abcd-ef1234567890 Filter tasks by resource ID |
| page | integer >= 1 Default: 1 Example: page=1 Page number for pagination (1-based) |
| size | integer [ 1 .. 100 ] Default: 20 Example: size=20 Number of items per page |
| sort | string Default: "createdAt:desc" Example: sort=createdAt:desc Sort order for results. Format: field:direction Supported fields: createdAt, startedAt, completedAt, status Direction: asc or desc |
List of tasks retrieved successfully
Bad request - invalid filter parameters
Unauthorized
Internal server error
{- "items": [
- {
- "id": "d4e5f6a7-b8c9-0123-defg-456789abcdef",
- "type": "ASSIGN_LICENSE",
- "status": "IN_PROGRESS",
- "progress": 50,
- "resourceType": "LicenseMember",
- "resourceId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
- "error": {
- "error": "string",
- "code": "string"
}, - "createdAt": "2026-08-21T06:32:49Z",
- "startedAt": "2026-08-21T06:32:49Z",
- "completedAt": "2026-08-21T06:32:49Z"
}
], - "totalItems": 42,
- "page": 1,
- "size": 20,
- "totalPages": 3
}Retrieves the current status and details of an async task. Use this endpoint to poll for task completion after initiating async operations like license activation, assignment, or revocation.
| taskId required | string <uuid> Example: d4e5f6a7-b8c9-0123-defg-456789abcdef UUID of the task to retrieve |
Task status retrieved successfully
Unauthorized
Task not found
Internal server error
{- "id": "d4e5f6a7-b8c9-0123-defg-456789abcdef",
- "type": "ASSIGN_LICENSE",
- "status": "PENDING",
- "progress": 0,
- "resourceType": "LicenseMember",
- "resourceId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
- "createdAt": "2024-01-15T10:30:00Z"
}Get all available telemetry types and their enabled status for AIDF forwarding
List of all telemetry types with their configuration
Internal server error
{- "types": [
- {
- "name": "API_Discovery",
- "enabled": true,
- "description": "API discovery telemetry from iRule",
- "updated_at": "2026-05-13T10:30:00Z"
}
]
}Bulk update which telemetry types are enabled for AIDF forwarding. Triggers OTEL configuration reload.
| enabled_types required | Array of strings >= 0 items Items Enum: "API_Discovery" "Application_Telemetry" List of telemetry types to enable (all others will be disabled) |
Telemetry types updated successfully
Validation error - invalid telemetry type names
Internal server error
{- "enabled_types": [
- "API_Discovery",
- "Application_Telemetry"
]
}{- "status": "validation_success"
}Get the configuration for a specific telemetry type
| type required | string Enum: "API_Discovery" "Application_Telemetry" Telemetry type name (API_Discovery or Application_Telemetry) |
Telemetry type configuration
Invalid telemetry type name
Telemetry type not found
Internal server error
{- "name": "API_Discovery",
- "enabled": true,
- "description": "API discovery telemetry from iRule",
- "updated_at": "2026-05-13T10:30:00Z"
}Returns information about the currently uploaded bundle, if any
Bundle info retrieved successfully
{- "data": {
- "available": true,
- "name": "f5insight-1.1.0-11-bundle.tar.gz",
- "version": "1.1.0-11",
- "size": 1073741824,
- "message": "Bundle ready for upgrade"
}
}Deletes uploaded offline upgrade bundles from local bundle storage. When version and/or kind are provided, only matching bundles are removed. When no filters are provided, all uploaded offline bundles are removed.
| version | string Example: version=1.2.1-3 Uploaded bundle version to delete |
| kind | string Enum: "patch" "full_upgrade" Example: kind=patch Uploaded bundle kind to delete |
Uploaded bundle deleted
No matching uploaded bundle found
Upgrade operation already in progress
Failed to delete uploaded bundle
{- "success": true,
- "data": {
- "message": "string"
}
}Upload an offline patch or full_upgrade bundle for offline / air-gapped deployments.
Accepts a multipart/form-data upload with field name bundle.
The archive must be a .tar.gz file up to 8 GB.
The upgrade version and kind are auto-detected from manifest.yml/manifest.json, with legacy top-level directory detection as a fallback.
After upload, the bundle appears in GET /api/system/upgrade/catalog and can be applied with POST /api/system/upgrade/apply.
| bundle required | string <binary> Upgrade bundle .tar.gz file (max 8 GB) |
Bundle uploaded and validated
Invalid request or bundle
Another operation is in progress
File exceeds 8 GB limit
Invalid archive format or missing required structure
{- "status": "201",
- "data": {
- "version": "f5-insight-patch-3.20",
- "size_bytes": 41943040
}
}Not supported since F5 Insight 1.2.0. Use POST /api/system/upgrade/apply instead.
Endpoint is not supported
{- "success": false,
- "error": {
- "code": "SYSTEM-0002",
- "status": 409,
- "message": "An upgrade is already in progress",
- "help": "Wait for the current upgrade to complete or check status at /api/system/upgrade/status"
}
}Returns the current status of the upgrade operation
Status retrieved successfully
{- "success": true,
- "data": {
- "status": "idle",
- "message": "no action in progress"
}
}Returns only the latest available patch and latest available full upgrade for the selected source. Use mode=online to return only F5 Downloads entries, or mode=offline to return only offline local/uploaded bundle entries. The mode query parameter is required.
| mode required | string Enum: "online" "offline" Catalog source filter. |
Catalog retrieved successfully
Missing or invalid mode query parameter
{- "status": "200",
- "data": {
- "latest_patch": "f5insight-1.1.2-62",
- "latest_full_upgrade": "f5insight-1.2.0-1",
- "patches": [
- {
- "version": "f5-insight-patch-1.2.1",
- "base_version": "f5-insight-1.2.0",
- "minimum_supported_version": "1.1.0",
- "kind": "patch",
- "is_latest": true,
- "built_at": "2026-05-15T10:30:00Z",
- "release_date": "2026-05-15",
- "services": [
- "backend",
- "frontend",
- "auth-service"
], - "filename": "f5insight-patch-1.2.1.tar.gz",
- "size_bytes": 41943040,
- "sha256": "abc123def456...",
- "cosign_signature": "MEUCIQD...",
- "download_url": "",
- "security_fix": true,
- "severity": "high",
- "mrs": [
- {
- "id": "!847",
- "title": "Fix authentication timeout issue"
}
], - "cumulative_mrs": [
- {
- "id": "!847",
- "title": "Fix authentication timeout issue"
}
]
}
], - "full_upgrades": [
- {
- "version": "f5-insight-patch-1.2.1",
- "base_version": "f5-insight-1.2.0",
- "minimum_supported_version": "1.1.0",
- "kind": "patch",
- "is_latest": true,
- "built_at": "2026-05-15T10:30:00Z",
- "release_date": "2026-05-15",
- "services": [
- "backend",
- "frontend",
- "auth-service"
], - "filename": "f5insight-patch-1.2.1.tar.gz",
- "size_bytes": 41943040,
- "sha256": "abc123def456...",
- "cosign_signature": "MEUCIQD...",
- "download_url": "",
- "security_fix": true,
- "severity": "high",
- "mrs": [
- {
- "id": "!847",
- "title": "Fix authentication timeout issue"
}
], - "cumulative_mrs": [
- {
- "id": "!847",
- "title": "Fix authentication timeout issue"
}
]
}
]
}
}Returns the APP_VERSION environment variable from the running system-manager pod.
Current version returned
{- "status": "200",
- "data": {
- "version": "f5-insight-patch-3.19"
}
}Runs preflight checks before a patch or full_upgrade can be applied. Checks include no_active_job, disk_space, pod_health, dr_pair, version_compatibility, and bundle_signature for online upgrades.
| kind required | string Enum: "patch" "full_upgrade" Example: kind=patch Upgrade kind to validate preflight for |
| version required | string Example: version=f5-insight-patch-1.2.3 Target version to validate (e.g., f5-insight-patch-1.2.3) |
Preflight checks completed
Invalid version parameter
Version not found in catalog
{- "status": "200",
- "data": {
- "can_proceed": true,
- "checks": [
- {
- "name": "no_active_job",
- "status": "pass",
- "message": "No active patch job running",
- "bypass_allowed": false
}
]
}
}Starts an upgrade job for an uploaded/local bundle or an online F5 Downloads catalog entry. Runs backend preflight validation before creating the upgrade job so direct API callers cannot bypass failed checks. The request is persisted in upgrade_history and handed to platform-manager over the Unix domain socket. For online entries, system-manager downloads the selected bundle to disk, verifies SHA256 and any provided signature, then applies the same local bundle path.
| version required | string Target version to upgrade to |
| kind required | string Enum: "patch" "full_upgrade" Upgrade kind to apply |
| skip_backup | boolean Default: false |
| backup_passphrase | string <password> Required when skip_backup is false. Used only to create the pre-upgrade backup and never persisted in plaintext. |
| backup_type | string Enum: "full" "config" Required when skip_backup is false. Determines whether the pre-upgrade backup captures all components or config-only. |
| storage_target | string Required when skip_backup is false. Use "local" for local appliance storage or a configured storage target name. |
| bypass_preflight_checks | boolean Default: false Explicit user override for failed preflight checks that have bypass_allowed=true. no_active_job, disk_space, and version_compatibility failures always block apply. |
Upgrade initiated successfully
Invalid request or validation failed
Upgrade already in progress or preflight checks failed
Platform manager unavailable
{- "version": "3.2.1",
- "kind": "patch",
- "skip_backup": false,
- "backup_passphrase": "MyStr0ng!Pass",
- "backup_type": "full",
- "storage_target": "local",
- "bypass_preflight_checks": false
}{- "status": "202",
- "data": {
- "id": "d4e5f6a7-b8c9-4000-8000-000000000001",
- "status": "pending"
}
}Unified polling endpoint for upgrade status, rollback state, rollback job status, and postflight checks.
| job_id required | string <uuid> Example: 550e8400-e29b-41d4-a716-446655440000 Upgrade history record ID |
Job status retrieved successfully
Job not found
Internal server error
{- "status": "200",
- "data": {
- "id": "d4e5f6a7-0000-4000-8000-000000000001",
- "version": "3.2.1",
- "kind": "patch",
- "status": "done",
- "progress": 100,
- "rollback_available": true,
- "current_step": "deployments_ready",
- "started_at": "2026-08-21T06:32:49Z",
- "started_by": "admin@f5.com",
- "finished_at": "2026-08-21T06:32:49Z",
- "platform_job_id": "string",
- "download": {
- "bytes": 26214400,
- "total": 41943040,
- "pct": 62,
- "speed_bps": 5242880,
- "eta_sec": 3
}, - "error_message": "string",
- "log": [
- {
- "ts": "2026-08-21T06:32:49Z",
- "level": "info",
- "message": "Starting patch job for f5-insight-patch-3.20"
}
]
}
}Cancels a pending/running patch job. Full upgrade jobs cannot be cancelled. If patch deployment has already started, automatic rollback is triggered; jobs cancelled before deployment are marked clean.
| job_id required | string <uuid> Upgrade history record ID |
Cancel accepted
Cancel is only supported for patch upgrade jobs
Job not found
No active job to cancel
{- "success": false,
- "error": {
- "code": "SYSTEM-0002",
- "status": 409,
- "message": "An upgrade is already in progress",
- "help": "Wait for the current upgrade to complete or check status at /api/system/upgrade/status"
}
}Runs post-deployment health checks for a completed upgrade job.
| job_id required | string <uuid> Upgrade history record ID |
Post-flight results
Job not found
{- "status": "200",
- "data": {
- "checks": [
- {
- "name": "deployments_ready",
- "status": "pass",
- "message": "All deployments are Ready"
}
]
}
}Manually starts rollback for the latest successful patch job within 72 hours of completion. Failed patch jobs trigger automatic rollback when deployment has started.
| job_id required | string <uuid> Upgrade history record ID |
Rollback started
Rollback is not available for this job
Job not found
Another operation is already in progress
{- "status": "202",
- "data": {
- "rollback_id": "770e8400-e29b-41d4-a716-446655440007"
}
}Returns whether manual rollback is currently available for this job. Manual rollback is available for the latest successful patch job within 72 hours of completion; failed patch jobs use automatic rollback.
| job_id required | string <uuid> Upgrade history record ID |
Rollback state checked
Job not found
{- "status": "200",
- "data": {
- "available": true,
- "prev_images": {
- "backend": "f5-insight-patch/backend:3.19",
- "system-manager": "f5-insight-patch/system-manager:3.19",
- "frontend": "f5-insight-patch/frontend:3.19"
}
}
}Returns rollback status, progress, and structured log lines.
| rollback_id required | string <uuid> Rollback history record ID |
Rollback status
Rollback job not found
{- "status": "200",
- "data": {
- "id": "770e8400-e29b-41d4-a716-446655440007",
- "status": "done",
- "progress": 100,
- "log": [
- {
- "ts": "2026-05-11T14:30:00Z",
- "level": "success",
- "message": "Rolled back backend to f5-insight-patch/backend:3.19"
}
]
}
}Admin-only override that clears unresolved dirty-state for a failed upgrade after admin review and records rollback_history status admin_confirmed. Only available when the job is failed and dirty_state is true.
| job_id required | string <uuid> Upgrade history record ID |
Dirty state cleared
Admin role required
Job not found
Job is already clean or is not an unresolved failed upgrade
{- "success": false,
- "error": {
- "code": "SYSTEM-0002",
- "status": 409,
- "message": "An upgrade is already in progress",
- "help": "Wait for the current upgrade to complete or check status at /api/system/upgrade/status"
}
}Returns the single pending/running job. When no active job exists, returns 200 with data set to null. Failed dirty-state jobs are available through history; patch deployment failures trigger automatic rollback.
Active job result
{- "status": "200",
- "dirty_state": false,
- "data": {
- "id": "string",
- "status": "pending",
- "progress": 0
}
}Returns the last 50 upgrade jobs, newest first, with top-level dirty_state.
Patch history
{- "status": "200",
- "dirty_state": false,
- "data": [
- {
- "job_id": "d4e5f6a7-b8c9-4000-8000-000000000001",
- "version": "f5-insight-patch-3.19",
- "kind": "patch",
- "status": "done",
- "started_by": "admin@f5.com",
- "started_at": "2026-08-21T06:32:49Z",
- "finished_at": "2026-08-21T06:32:49Z",
- "services": [
- "string"
], - "security_fix": false,
- "rollback_available": true
}
]
}Returns aggregate statistics across all historical upgrade jobs.
Aggregate stats
{- "status": "200",
- "data": {
- "total_applied": 19,
- "total_failed": 2,
- "total_rollbacks": 2,
- "avg_duration_sec": 514,
- "security_patches": 3
}
}Returns all scheduled upgrade jobs with status pending.
Scheduled jobs list
{- "status": "200",
- "data": [
- {
- "id": "770e8400-e29b-41d4-a716-446655440010",
- "version": "f5-insight-patch-3.20",
- "kind": "patch",
- "scheduled_at": "2026-05-12T02:00:00Z",
- "skip_backup": false,
- "status": "pending",
- "upgrade_job_id": "string"
}
]
}Schedules a patch or full_upgrade to run at a future UTC timestamp.
| kind required | string Enum: "patch" "full_upgrade" |
| version required | string |
| scheduled_at required | string <date-time> Future UTC timestamp when the upgrade should run |
| skip_backup | boolean Default: false |
| backup_passphrase | string <password> Required when skip_backup is false. Stored securely and used when the scheduled upgrade creates its pre-upgrade backup. |
| backup_type | string Enum: "full" "config" Required when skip_backup is false. Determines whether the scheduled pre-upgrade backup captures all components or config-only. |
| storage_target | string Required when skip_backup is false. Use "local" for local appliance storage or a configured storage target name. |
| bypass_preflight_checks | boolean Default: false Explicit user override for failed preflight checks that have bypass_allowed=true. no_active_job, disk_space, and version_compatibility failures always block scheduled apply. |
Schedule created
scheduled_at must be a future timestamp
{- "kind": "patch",
- "version": "f5-insight-patch-3.20",
- "scheduled_at": "2026-05-12T02:00:00Z",
- "skip_backup": false,
- "backup_passphrase": "MyStr0ng!Pass",
- "backup_type": "full",
- "storage_target": "local",
- "bypass_preflight_checks": false
}{- "status": "201",
- "data": {
- "id": "770e8400-e29b-41d4-a716-446655440010",
- "status": "pending",
- "scheduled_at": "2026-05-12T02:00:00Z"
}
}Cancels a pending scheduled job. Has no effect on jobs already triggered.
| sched_id required | string <uuid> Scheduled upgrade job ID |
Scheduled job cancelled
Scheduled job not found
{- "success": false,
- "error": {
- "code": "SYSTEM-0002",
- "status": 409,
- "message": "An upgrade is already in progress",
- "help": "Wait for the current upgrade to complete or check status at /api/system/upgrade/status"
}
}Returns scheduled jobs in terminal states done, failed, and cancelled. Pending jobs are excluded.
Scheduled job history
{- "status": "200",
- "data": [
- {
- "id": "770e8400-e29b-41d4-a716-446655440010",
- "version": "f5-insight-patch-3.20",
- "kind": "patch",
- "scheduled_at": "2026-05-12T02:00:00Z",
- "skip_backup": false,
- "status": "pending",
- "upgrade_job_id": "string"
}
]
}Analyses upgrade history to find the best 2-hour UTC scheduling window.
Recommendation
{- "status": "200",
- "data": {
- "has_data": true,
- "best_dow": "Sunday",
- "best_hour": 2,
- "best_hour_end": 4,
- "window_label": "Sunday 02:00-04:00 UTC",
- "avg_duration_sec": 487,
- "sample_size": 7,
- "message": "Lowest failure rate (0%) across 7 historical patches."
}
}Kicks off an asynchronous VM creation task in the referenced cloud environment. Returns 202 Accepted with task tracking info.
| envReference required | string ID (UUID) or name of the cloud environment to use for this VM task. |
| vmName | string For create-vm only: optional name for the created VM. If omitted, a name is generated automatically using the configured naming prefix (default: "autoscale-bigip-"). Ignored by delete-vm. |
| vmIP | string IP address of the VM. For delete-vm, either vmIP or vmUuid must be supplied; vmIP takes precedence when both are present. |
| vmUuid | string vCenter Managed Object Reference (MoRef) of the VM. For delete-vm, either vmIP or vmUuid must be supplied. Recommended for cleaning up orphaned clones that never acquired an IP — the create-vm response returns vmUuid as soon as the clone succeeds. |
VM creation task accepted
Bad request - validation failed
Referenced environment not found
Internal server error
{- "envReference": "string",
- "vmName": "string",
- "vmIP": "string",
- "vmUuid": "string"
}{- "taskId": "string",
- "status": "PENDING",
- "envReference": "string",
- "taskType": "CREATE_VM",
- "message": "string",
- "vmName": "string",
- "vmUuid": "string",
- "vmIP": "string",
- "createdAt": "2026-08-21T06:32:49Z",
- "updatedAt": "2026-08-21T06:32:49Z"
}Kicks off an asynchronous VM deletion task in the referenced cloud environment. Returns 202 Accepted with task tracking info.
| envReference required | string ID (UUID) or name of the cloud environment to use for this VM task. |
| vmName | string For create-vm only: optional name for the created VM. If omitted, a name is generated automatically using the configured naming prefix (default: "autoscale-bigip-"). Ignored by delete-vm. |
| vmIP | string IP address of the VM. For delete-vm, either vmIP or vmUuid must be supplied; vmIP takes precedence when both are present. |
| vmUuid | string vCenter Managed Object Reference (MoRef) of the VM. For delete-vm, either vmIP or vmUuid must be supplied. Recommended for cleaning up orphaned clones that never acquired an IP — the create-vm response returns vmUuid as soon as the clone succeeds. |
VM deletion task accepted
Bad request - validation failed
Referenced environment not found
Internal server error
{- "envReference": "string",
- "vmName": "string",
- "vmIP": "string",
- "vmUuid": "string"
}{- "taskId": "string",
- "status": "PENDING",
- "envReference": "string",
- "taskType": "CREATE_VM",
- "message": "string",
- "vmName": "string",
- "vmUuid": "string",
- "vmIP": "string",
- "createdAt": "2026-08-21T06:32:49Z",
- "updatedAt": "2026-08-21T06:32:49Z"
}| taskId required | string <uuid> UUID of the VM task |
Task status returned
Task not found
Internal server error
{- "taskId": "string",
- "status": "PENDING",
- "envReference": "string",
- "taskType": "CREATE_VM",
- "message": "string",
- "vmName": "string",
- "vmUuid": "string",
- "vmIP": "string",
- "createdAt": "2026-08-21T06:32:49Z",
- "updatedAt": "2026-08-21T06:32:49Z"
}| taskId required | string <uuid> UUID of the VM task |
Task status returned
Task not found
Internal server error
{- "taskId": "string",
- "status": "PENDING",
- "envReference": "string",
- "taskType": "CREATE_VM",
- "message": "string",
- "vmName": "string",
- "vmUuid": "string",
- "vmIP": "string",
- "createdAt": "2026-08-21T06:32:49Z",
- "updatedAt": "2026-08-21T06:32:49Z"
}Starts the pluggable validation engine for the supplied devices against the given target image. No job needs to exist — this endpoint is called before job creation to confirm all selected devices are eligible for the upgrade.
Returns 202 Accepted immediately with a validation_run_id.
Poll GET /validate/{validationRunId} until status is no longer PENDING or RUNNING.
Before the validation checks run, the engine performs a live metadata refresh for each device so that all checks operate on up-to-date data (current version, service check date, license check date, available disk, etc.). The refresh result is best-effort — a refresh failure logs a warning but does not abort validation.
can_proceed: true)| Check | Source | Threshold |
|---|---|---|
disk_space |
Cached disk_available_gb from last device refresh |
< 15 GB for new volume slot; < 2 GB for existing slot |
cpu_utilization |
Stage 1: always SKIP — Stage 2: 5-min avg via iControl REST | > 80% |
memory_utilization |
Stage 1: always SKIP — Stage 2: 5-min avg via iControl REST | > 90% |
license_date |
service_check_date (from bigip.license) vs license_check_date (from /etc/version_date on device, falls back to K7727 static table) |
Service check date must be ≥ license check date of the target version |
can_proceed: false)| Check | Source | Rule |
|---|---|---|
upgrade_path |
upgrade.bigip_upgrade_paths table (seeded from F5 KB K13845) |
Current version must satisfy the minimum-source-version rule for the target major version (BIG-IP only) |
license_compatibility |
bigip.license active-modules (fetched live or cached) |
License edition must not have an "Exclusive Version" ceiling below the target version (BIG-IP only) |
f5os_version_support |
upgrade.f5os_supported_versions table (seeded from F5 KB K86001294) |
Target F5OS version must be explicitly listed as supported for the device's hardware platform (F5OS only) |
license_date)BIG-IP will refuse to load its configuration after booting into a newly-upgraded
volume if the service check date in bigip.license predates the
license check date (LCD) baked into that version's build
(published in F5 KB K7727, stored in /etc/version_date on the device).
The engine reads the LCD in the following order:
/etc/version_date via the iControl REST bash endpoint
(POST /mgmt/tm/util/bash), populated into device_upgrade_metadata.license_check_date
during the pre-validation refresh.major.minor of the
target image version, when the live read is unavailable.A WARN result means the device's service contract should be re-activated before
upgrading (see F5 KB K7727: License activation may be required before a software
upgrade for BIG-IP). The check is SOFT — the operator can proceed, but F5
strongly recommends reactivating the license first.
Re-triggering with the same inputs creates a fresh validation run (a new
validation_run_id is returned each time).
| device_targets required | Array of objects (ValidationDeviceTarget) non-empty List of device targets (with optional per-device volume_override) to validate against the target image. |
| image_id required | string <uuid> UUID of the target software image to validate against. |
| volume_strategy | string (VolumeStrategy) Enum: "NEXT_INACTIVE" "LAST_INACTIVE" "NEXT_SEQUENTIAL_NEW" Determines which boot volume to install the new software on. This is a job-level setting applied to all devices. A per-device volumeOverride takes precedence over this field for that specific device.
|
| install_config | boolean Default: true Controls config carry-forward (BIG-IP cpcfg) for all devices in this validation request. Mirrors SoftwareInstallationConfig.installConfig. When true (or omitted), the install_config readiness check warns if the target version is older than the active version (a downgrade causes cpcfg to skip config copy). When false, the install_config check is skipped. |
Validation triggered — poll GET /validate/{validationRunId} for results
Invalid request
Authentication required
{- "device_targets": [
- {
- "device_id": "string",
- "volume_override": "string"
}
], - "image_id": "string",
- "volume_strategy": "NEXT_INACTIVE",
- "install_config": true
}{- "validation_run_id": "string",
- "message": "validation triggered"
}Returns persisted per-device validation results for a run.
Poll until status is no longer PENDING or RUNNING.
can_proceed: true means no HARD check failures exist across any device.
| validationRunId required | string <uuid> The validation run ID returned by POST /validate |
Validation results
Authentication required
Resource not found
{- "validation_run_id": "a1b2c3d4-0000-0000-0000-000000000001",
- "image_id": "img-uuid-0000-0000-0000-000000000001",
- "status": "WARNING",
- "device_count": 3,
- "pass_count": 2,
- "warn_count": 1,
- "fail_count": 0,
- "error_count": 0,
- "can_proceed": true,
- "triggered_at": "2026-08-06T10:00:00Z",
- "completed_at": "2026-08-06T10:00:05Z",
- "devices": [
- {
- "device_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa",
- "hostname": "bigip-prod-01",
- "status": "PASSED",
- "current_step": "COMPLETE",
- "blocking_check": "",
- "check_results": [
- {
- "check_name": "disk_space",
- "severity": "SOFT",
- "status": "PASS"
}, - {
- "check_name": "cpu_utilization",
- "severity": "SOFT",
- "status": "SKIP",
- "message": "CPU check not yet implemented (Stage 2)"
}, - {
- "check_name": "memory_utilization",
- "severity": "SOFT",
- "status": "SKIP",
- "message": "Memory check not yet implemented (Stage 2)"
}, - {
- "check_name": "upgrade_path",
- "severity": "HARD",
- "status": "PASS"
}, - {
- "check_name": "license_compatibility",
- "severity": "HARD",
- "status": "PASS"
}, - {
- "check_name": "license_date",
- "severity": "SOFT",
- "status": "PASS"
}
]
}, - {
- "device_id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb",
- "hostname": "bigip-prod-02",
- "status": "WARNING",
- "current_step": "COMPLETE",
- "blocking_check": "",
- "check_results": [
- {
- "check_name": "disk_space",
- "severity": "SOFT",
- "status": "WARN",
- "message": "disk space 8.2 GB is below recommended 15 GB threshold",
- "detail": {
- "available_gb": 8.2,
- "threshold_gb": 15
}
}, - {
- "check_name": "upgrade_path",
- "severity": "HARD",
- "status": "PASS"
}, - {
- "check_name": "license_compatibility",
- "severity": "HARD",
- "status": "PASS"
}, - {
- "check_name": "license_date",
- "severity": "SOFT",
- "status": "PASS"
}
]
}, - {
- "device_id": "cccccccc-cccc-cccc-cccc-cccccccccccc",
- "hostname": "bigip-prod-03",
- "status": "FAILED",
- "current_step": "COMPLETE",
- "blocking_check": "upgrade_path",
- "check_results": [
- {
- "check_name": "disk_space",
- "severity": "SOFT",
- "status": "PASS"
}, - {
- "check_name": "upgrade_path",
- "severity": "HARD",
- "status": "FAIL",
- "message": "Current version 15.1.2 is not compatible with target image BIGIP-17.1.5. Minimum source version required: 16.1.0",
- "detail": {
- "current_version": "15.1.2",
- "target_version": "17.1.5",
- "min_source_version": "16.1.0"
}
}
]
}
]
}| provider_name required | string AI provider name (e.g., openai, claude, local) |
| api_token | string API token for the provider. Required for 'openai' and 'claude' providers, optional for 'local' provider. |
| base_url | string Base URL for the provider. Required for 'local' provider, optional for 'openai' and 'claude'. |
| model | string Model name to use. Required for 'local' provider, optional for others. |
| ca | string <uuid> Optional CA certificate UUID from trust store |
| skip_tls_verify | boolean Indicates if TLS verification should be skipped for this provider |
Validation successful
Validation failed
Internal server error
{- "provider_name": "string",
- "api_token": "string",
- "base_url": "string",
- "model": "string",
- "ca": "string",
- "skip_tls_verify": true
}{- "status": "validation_success",
- "error": "string"
}| endpoint required | string |
| tenant_id required | string |
| tenant_token required | string |
Validation successful
Validation failed
Internal server error
{- "endpoint": "string",
- "tenant_id": "string",
- "tenant_token": "string"
}{- "status": "validation_success",
- "error": "string"
}Returns workflow templates that define reusable workflow behavior. Supports filtering by workflow type, execution mode, and template lifecycle status. Use this endpoint for catalog/discovery before creating Jobs.
| page | integer >= 1 Default: 1 |
| limit | integer [ 1 .. 200 ] Default: 50 |
| type | string Enum: "AUTO_SCALE" "SOFTWARE_DISTRIBUTION" "SOFTWARE_INSTALLATION" "BACKUP" |
| executionMode | string Enum: "CONTINUOUS" "ON_DEMAND" |
| status | string Enum: "DRAFT" "ACTIVE" "DEPRECATED" |
List of workflow templates
Invalid request
{- "items": [
- {
- "id": "b7e6a4ae-4cf9-4ad4-b8f9-9b5347300d73",
- "name": "autoscale-default",
- "description": "Autoscale default template",
- "type": "AUTO_SCALE",
- "executionMode": "CONTINUOUS",
- "createdAt": "2026-05-18T10:00:00.000Z"
}
], - "total": 1,
- "page": 1,
- "limit": 50
}Returns a single workflow template by ID including type, execution mode, versioning metadata, and default configuration.
| workflowId required | string <uuid> |
Workflow template
Resource not found
{- "id": "b7e6a4ae-4cf9-4ad4-b8f9-9b5347300d73",
- "name": "autoscale-template-prod",
- "description": "Production autoscale template for monitoring and scaling",
- "type": "AUTO_SCALE",
- "executionMode": "CONTINUOUS",
- "createdAt": "2026-05-18T10:10:00.000Z"
}Add a new data center to F5 Insights fleet.
Details of the data center to be added.
| id | string <uuid> Unique identifier for the data center |
| name required | string <= 255 characters Name of the Data Center. |
Data center added successfully.
Validation error.
Internal server error.
{- "id": "string",
- "name": "string"
}{- "message": "Data center added successfully",
- "id": "string"
}Retrieve all Data Centers.
List of all data centers.
Validation error.
Internal server error.
{- "data_centers": [
- {
- "id": "string",
- "name": "string"
}
]
}certificate for TLS connections.
Certificate details and content.
| name required | string <= 255 characters Name of the certificate |
| description | string Description of the certificate |
| certificate_content required | string PEM encoded certificate content |
Certificate uploaded successfully.
Validation error.
Internal server error.
{- "name": "string",
- "description": "string",
- "certificate_content": "string"
}{- "id": "string",
- "name": "string",
- "description": "string",
- "created_at": "2026-08-21T06:32:49Z"
}Retrieve all certificates from trust store.
List of certificates.
Internal server error.
{- "trust_stores": [
- {
- "id": "string",
- "name": "string",
- "description": "string",
- "certificate_content": "string",
- "created_at": "2026-08-21T06:32:49Z",
- "last_modified": "2026-08-21T06:32:49Z"
}
]
}Retrieve a specific certificate by ID from trust store.
| id required | string <uuid> Certificate ID |
Certificate details.
Certificate not found.
Internal server error.
{- "id": "string",
- "name": "string",
- "description": "string",
- "certificate_content": "string",
- "created_at": "2026-08-21T06:32:49Z",
- "last_modified": "2026-08-21T06:32:49Z"
}Delete a certificate from trust store.
| id required | string <uuid> Certificate ID |
Certificate deleted successfully.
Certificate not found.
Certificate is in use by devices.
Internal server error.
{- "message": "Operation successful"
}Onboard a device (BIG-IP or F5OS) to F5 Insights fleet. The deviceType field selects the kind; defaults to bigip.
Details of the device to be added (BIG-IP or F5OS).
| deviceType required | string Default: "bigip" bigip |
| retention | string (Retention) ^P(\d+Y)?(\d+M)?(\d+D)?(T(\d+H)?(\d+M)?(\d+S)?)?$ ISO 8601 duration (e.g., P1Y for 1 year, P30D for 30 days).Supported units are Y (years), M (months), D (days), H (hours), M (minutes), S (seconds). Internally converted and rounded up to whole days. Maximum allowed retention is 1 year (P1Y). |
| port | integer [ 1 .. 65535 ] |
| collection_interval | integer >= 1 Collection interval in seconds |
| max_concurrent_connections | integer [ 1 .. 20 ] Maximum concurrent HTTP connections per device |
| tls_enabled | boolean Default: false |
| ca | string <uuid> CA certificate UUID from trust store |
| modules | object |
| id | string <uuid> Unique identifier for the device |
| alias_name | string <= 100 characters |
| description | string <= 500 characters |
| username required | string <= 255 characters |
| password required | string <= 255 characters |
| data_center required | string <= 255 characters |
| endpoint required | string Device endpoint in format ip:port or hostname:port (e.g., 192.168.1.100:443, bigip.example.com:8443). |
Device added successfully.
Validation error.
Internal server error.
{- "deviceType": "bigip",
- "retention": "string",
- "port": 1,
- "collection_interval": 1,
- "max_concurrent_connections": 1,
- "tls_enabled": false,
- "ca": "string",
- "modules": {
- "apm": false,
- "cgnat": false,
- "dns": false,
- "dos": false,
- "firewall": false,
- "gtm": false,
- "policy_api_protection": false,
- "policy_asm": false,
- "policy_firewall": false,
- "policy_ip_intelligence": false,
- "policy_nat": false,
- "profile_dos": false
}, - "id": "string",
- "alias_name": "string",
- "description": "string",
- "username": "string",
- "password": "string",
- "data_center": "string",
- "endpoint": "string"
}{- "message": "Device added successfully",
- "id": "string"
}Retrieve all devices (BIG-IP and F5OS) onboarded to F5 Insights with pagination and filtering support. Use deviceType to filter by kind.
| page | integer >= 1 Default: 1 |
| size | integer >= 1 Number of items per page. |
| since | string <date-time> Return only devices updated after this timestamp (ISO 8601 format). Use the lastSync value from previous response for delta updates. |
| search | string Search term to filter devices by name, alias, or endpoint |
| sort | string Sort order, e.g. 'name,-created_at' (prefix '-' for descending) |
| deviceType | string Default: "all" Enum: "all" "bigip" "f5os" Filter by device kind. One of all, bigip, f5os. Defaults to all. |
List of devices (BIG-IP and F5OS) with pagination metadata.
Validation error.
Internal server error.
{- "devices": [
- {
- "retention": "string",
- "port": 0,
- "collection_interval": 1,
- "max_concurrent_connections": 1,
- "tls_enabled": false,
- "ca": "string",
- "modules": {
- "apm": false,
- "cgnat": false,
- "dns": false,
- "dos": false,
- "firewall": false,
- "gtm": false,
- "policy_api_protection": false,
- "policy_asm": false,
- "policy_firewall": false,
- "policy_ip_intelligence": false,
- "policy_nat": false,
- "profile_dos": false
}, - "id": "string",
- "alias_name": "string",
- "description": "string",
- "username": "string",
- "password": "string",
- "data_center": "string",
- "endpoint": "string",
- "deviceName": "string",
- "deviceVersion": "string",
- "devicePlatform": "string",
- "deviceType": "bigip",
- "schema": "http",
- "type": "string",
- "host": "string",
- "status": "string",
- "hardwareModel": "string",
- "serialNumber": "string",
- "osVersion": "string",
- "osBuild": "string",
- "lastSeenAt": "2026-08-21T06:32:49Z"
}
], - "pagination": {
- "page": 1,
- "pageSize": 1,
- "totalDevices": 0,
- "totalPages": 0
}
}Updates configuration of a device (BIG-IP or F5OS). The device kind is auto-detected from the id.
| id required | string Unique identifier of the device to update (BIG-IP or F5OS). |
Updated details of the device.
| retention | string (Retention) ^P(\d+Y)?(\d+M)?(\d+D)?(T(\d+H)?(\d+M)?(\d+S)?)?$ ISO 8601 duration (e.g., P1Y for 1 year, P30D for 30 days).Supported units are Y (years), M (months), D (days), H (hours), M (minutes), S (seconds). Internally converted and rounded up to whole days. Maximum allowed retention is 1 year (P1Y). |
| port | integer [ 1 .. 65535 ] |
| collection_interval | integer >= 1 Collection interval in seconds |
| max_concurrent_connections | integer [ 1 .. 20 ] Maximum concurrent HTTP connections per device |
| tls_enabled | boolean Default: false |
| ca | string <uuid> CA certificate UUID from trust store |
| modules | object |
| id | string <uuid> Unique identifier for the device |
| alias_name | string <= 100 characters |
| description | string <= 500 characters |
| username required | string <= 255 characters |
| password required | string <= 255 characters |
| data_center required | string <= 255 characters |
| endpoint required | string Device endpoint in format ip:port or hostname:port (e.g., 192.168.1.100:443, bigip.example.com:8443). |
Device updated successfully.
Validation error.
Internal server error.
{- "retention": "string",
- "port": 1,
- "collection_interval": 1,
- "max_concurrent_connections": 1,
- "tls_enabled": false,
- "ca": "string",
- "modules": {
- "apm": false,
- "cgnat": false,
- "dns": false,
- "dos": false,
- "firewall": false,
- "gtm": false,
- "policy_api_protection": false,
- "policy_asm": false,
- "policy_firewall": false,
- "policy_ip_intelligence": false,
- "policy_nat": false,
- "profile_dos": false
}, - "id": "string",
- "alias_name": "string",
- "description": "string",
- "username": "string",
- "password": "string",
- "data_center": "string",
- "endpoint": "string"
}{- "message": "Device updated successfully",
- "id": "string"
}Partially updates configuration of a device (BIG-IP or F5OS). Only provided fields are updated. The device kind is auto-detected from the id.
| id required | string Unique identifier of the device to update (BIG-IP or F5OS). |
Partial device update. Only include fields that should be updated.
| alias_name | string <= 100 characters |
| description | string <= 500 characters |
| username | string <= 255 characters |
| password | string <= 255 characters |
| endpoint | string |
| data_center | string <= 255 characters |
| retention | string (Retention) ^P(\d+Y)?(\d+M)?(\d+D)?(T(\d+H)?(\d+M)?(\d+S)?)?$ ISO 8601 duration (e.g., P1Y for 1 year, P30D for 30 days).Supported units are Y (years), M (months), D (days), H (hours), M (minutes), S (seconds). Internally converted and rounded up to whole days. Maximum allowed retention is 1 year (P1Y). |
| collection_interval | integer >= 1 |
| max_concurrent_connections | integer [ 1 .. 20 ] Maximum concurrent HTTP connections per device |
| tls_enabled | boolean |
| ca | string <uuid> |
| modules | object |
Device partially updated successfully.
Validation error.
Device not found.
Internal server error.
{- "alias_name": "string",
- "description": "string",
- "username": "string",
- "password": "string",
- "endpoint": "string",
- "data_center": "string",
- "retention": "string",
- "collection_interval": 1,
- "max_concurrent_connections": 1,
- "tls_enabled": true,
- "ca": "string",
- "modules": {
- "apm": true,
- "cgnat": true,
- "dns": true,
- "dos": true,
- "firewall": true,
- "gtm": true,
- "profile_dos": true,
- "policy_api_protection": true,
- "policy_asm": true,
- "policy_firewall": true,
- "policy_ip_intelligence": true,
- "policy_nat": true
}
}{- "retention": "string",
- "port": 0,
- "collection_interval": 1,
- "max_concurrent_connections": 1,
- "tls_enabled": false,
- "ca": "string",
- "modules": {
- "apm": false,
- "cgnat": false,
- "dns": false,
- "dos": false,
- "firewall": false,
- "gtm": false,
- "policy_api_protection": false,
- "policy_asm": false,
- "policy_firewall": false,
- "policy_ip_intelligence": false,
- "policy_nat": false,
- "profile_dos": false
}, - "id": "string",
- "alias_name": "string",
- "description": "string",
- "username": "string",
- "password": "string",
- "data_center": "string",
- "endpoint": "string",
- "deviceName": "string",
- "deviceVersion": "string",
- "devicePlatform": "string",
- "deviceType": "bigip",
- "schema": "http",
- "type": "string",
- "host": "string",
- "status": "string",
- "hardwareModel": "string",
- "serialNumber": "string",
- "osVersion": "string",
- "osBuild": "string",
- "lastSeenAt": "2026-08-21T06:32:49Z"
}Fetch details of a specific device (BIG-IP or F5OS). The device kind is auto-detected from the id.
| id required | string Unique identifier of the device (BIG-IP or F5OS). |
Device fetched successfully.
Validation error.
Internal server error.
{- "retention": "string",
- "port": 0,
- "collection_interval": 1,
- "max_concurrent_connections": 1,
- "tls_enabled": false,
- "ca": "string",
- "modules": {
- "apm": false,
- "cgnat": false,
- "dns": false,
- "dos": false,
- "firewall": false,
- "gtm": false,
- "policy_api_protection": false,
- "policy_asm": false,
- "policy_firewall": false,
- "policy_ip_intelligence": false,
- "policy_nat": false,
- "profile_dos": false
}, - "id": "string",
- "alias_name": "string",
- "description": "string",
- "username": "string",
- "password": "string",
- "data_center": "string",
- "endpoint": "string",
- "deviceName": "string",
- "deviceVersion": "string",
- "devicePlatform": "string",
- "deviceType": "bigip",
- "schema": "http",
- "type": "string",
- "host": "string",
- "status": "string",
- "hardwareModel": "string",
- "serialNumber": "string",
- "osVersion": "string",
- "osBuild": "string",
- "lastSeenAt": "2026-08-21T06:32:49Z"
}Delete a specific device (BIG-IP or F5OS). The device kind is auto-detected from the id.
| id required | string Unique identifier of the device (BIG-IP or F5OS). |
Device deleted successfully.
Validation error.
Internal server error.
{- "retention": "string",
- "port": 1,
- "collection_interval": 1,
- "max_concurrent_connections": 1,
- "tls_enabled": false,
- "ca": "string",
- "modules": {
- "apm": false,
- "cgnat": false,
- "dns": false,
- "dos": false,
- "firewall": false,
- "gtm": false,
- "policy_api_protection": false,
- "policy_asm": false,
- "policy_firewall": false,
- "policy_ip_intelligence": false,
- "policy_nat": false,
- "profile_dos": false
}, - "id": "string",
- "alias_name": "string",
- "description": "string",
- "username": "string",
- "password": "string",
- "data_center": "string",
- "endpoint": "string"
}Re-discover a device and refresh its inventory details (hardware model, serial number, OS version/build, status, last-seen). Supported for F5OS devices only; returns 400 for BIG-IP. The device kind is auto-detected from the id. This operation is synchronous.
| id required | string Unique identifier of the device to refresh (F5OS). |
Device refreshed successfully.
Validation error (e.g. refresh not supported for BIG-IP devices).
Device not found.
Internal server error.
{- "retention": "string",
- "port": 0,
- "collection_interval": 1,
- "max_concurrent_connections": 1,
- "tls_enabled": false,
- "ca": "string",
- "modules": {
- "apm": false,
- "cgnat": false,
- "dns": false,
- "dos": false,
- "firewall": false,
- "gtm": false,
- "policy_api_protection": false,
- "policy_asm": false,
- "policy_firewall": false,
- "policy_ip_intelligence": false,
- "policy_nat": false,
- "profile_dos": false
}, - "id": "string",
- "alias_name": "string",
- "description": "string",
- "username": "string",
- "password": "string",
- "data_center": "string",
- "endpoint": "string",
- "deviceName": "string",
- "deviceVersion": "string",
- "devicePlatform": "string",
- "deviceType": "bigip",
- "schema": "http",
- "type": "string",
- "host": "string",
- "status": "string",
- "hardwareModel": "string",
- "serialNumber": "string",
- "osVersion": "string",
- "osBuild": "string",
- "lastSeenAt": "2026-08-21T06:32:49Z"
}Retrieve all the devices that belong to a specific auto-scale group.
| autoScaleGroupId required | string <uuid> Unique identifier of the auto-scale group. |
| page | integer >= 1 Default: 1 |
| size | integer >= 1 Number of items per page. |
| since | string <date-time> Return only devices updated after this timestamp (ISO 8601 format). Use the lastSync value from previous response for delta updates. |
| sort | string Sort order, e.g. 'name,-created_at' (prefix '-' for descending) |
List of devices belonging to the specified auto-scale group.
Validation error.
Auto-scale group not found.
Internal server error.
{- "devices": [
- {
- "id": "123e4567-e89b-12d3-a456-426614174000",
- "alias_name": "bigip-prod-01",
- "description": "Production BIG-IP device",
- "username": "admin",
- "data_center": "US-EAST-1",
- "endpoint": "192.168.1.100:443",
- "tls_enabled": true,
- "collection_interval": 60,
- "max_concurrent_connections": 5,
- "deviceName": "bigip1.example.com",
- "retention": "30D",
- "modules": {
- "apm": false,
- "cgnat": false,
- "dns": false,
- "dos": false,
- "firewall": false,
- "gtm": false,
- "policy_api_protection": false,
- "policy_asm": false,
- "policy_firewall": false,
- "policy_ip_intelligence": false,
- "policy_nat": false,
- "profile_dos": false
}
}, - {
- "id": "223e4567-e89b-12d3-a456-426614174001",
- "alias_name": "bigip-prod-02",
- "description": "Production BIG-IP device 2",
- "username": "admin",
- "data_center": "US-EAST-1",
- "endpoint": "192.168.1.101:443",
- "tls_enabled": true,
- "collection_interval": 60,
- "max_concurrent_connections": 5,
- "deviceName": "bigip2.example.com",
- "retention": "30D",
- "modules": {
- "apm": false,
- "cgnat": false,
- "dns": false,
- "dos": false,
- "firewall": false,
- "gtm": false,
- "policy_api_protection": false,
- "policy_asm": false,
- "policy_firewall": false,
- "policy_ip_intelligence": false,
- "policy_nat": false,
- "profile_dos": false
}
}
], - "pagination": {
- "page": 1,
- "pageSize": 20,
- "totalDevices": 2,
- "totalPages": 1
}
}Validate connectivity from F5 Insights to a BIG-IP device using provided credentials.
Device details required for connection validation.
| retention | string (Retention) ^P(\d+Y)?(\d+M)?(\d+D)?(T(\d+H)?(\d+M)?(\d+S)?)?$ ISO 8601 duration (e.g., P1Y for 1 year, P30D for 30 days).Supported units are Y (years), M (months), D (days), H (hours), M (minutes), S (seconds). Internally converted and rounded up to whole days. Maximum allowed retention is 1 year (P1Y). |
| port | integer [ 1 .. 65535 ] |
| collection_interval | integer >= 1 Collection interval in seconds |
| max_concurrent_connections | integer [ 1 .. 20 ] Maximum concurrent HTTP connections per device |
| tls_enabled | boolean Default: false |
| ca | string <uuid> CA certificate UUID from trust store |
| modules | object |
| id | string <uuid> Unique identifier for the device |
| alias_name | string <= 100 characters |
| description | string <= 500 characters |
| username required | string <= 255 characters |
| password required | string <= 255 characters |
| data_center required | string <= 255 characters |
| endpoint required | string Device endpoint in format ip:port or hostname:port (e.g., 192.168.1.100:443, bigip.example.com:8443). |
Connection validation result.
Validation error.
Internal server error.
{- "retention": "string",
- "port": 1,
- "collection_interval": 1,
- "max_concurrent_connections": 1,
- "tls_enabled": false,
- "ca": "string",
- "modules": {
- "apm": false,
- "cgnat": false,
- "dns": false,
- "dos": false,
- "firewall": false,
- "gtm": false,
- "policy_api_protection": false,
- "policy_asm": false,
- "policy_firewall": false,
- "policy_ip_intelligence": false,
- "policy_nat": false,
- "profile_dos": false
}, - "id": "string",
- "alias_name": "string",
- "description": "string",
- "username": "string",
- "password": "string",
- "data_center": "string",
- "endpoint": "string"
}{- "reachable": true,
- "authenticated": true,
- "message": "string"
}Retrieve IP pools with optional pagination.
| $top | integer >= 1 Maximum number of records to return. |
| $skip | integer >= 0 Number of records to skip before returning results. |
A paginated collection of IP pools.
An unexpected error occurred.
{- "items": [
- {
- "id": "string",
- "name": "string",
- "description": "string",
- "addressFamily": "IPv4",
- "address": "10.0.0.0/24",
- "gateway": "10.0.0.1",
- "addressRanges": [
- {
- "firstAddress": "10.0.0.10",
- "lastAddress": "10.0.0.100"
}
], - "totalAddressCount": 0,
- "createdAt": "2026-08-21T06:32:49Z",
- "updatedAt": "2026-08-21T06:32:49Z",
- "deletedAt": "2026-08-21T06:32:49Z"
}
], - "totalItems": 0
}Create a new IP pool with CIDR definition and address ranges.
| name required | string [ 1 .. 255 ] characters ^[a-zA-Z_][a-zA-Z0-9_.\-]*$ Pool name. Rules:
|
| description | string |
| addressFamily | string Enum: "IPv4" "IPv6" Address family of the pool. When omitted, it is inferred from the CIDR (IPv4 or IPv6). |
| address required | string |
| gateway | string Nullable |
| addressRanges required | Array of objects (AddressRange) non-empty |
IP pool created successfully.
Invalid request
An unexpected error occurred.
{- "name": "string",
- "description": "string",
- "addressFamily": "IPv4",
- "address": "10.0.0.0/24",
- "gateway": "string",
- "addressRanges": [
- {
- "firstAddress": "10.0.0.10",
- "lastAddress": "10.0.0.100"
}
]
}{- "id": "string",
- "name": "string",
- "description": "string",
- "addressFamily": "IPv4",
- "address": "10.0.0.0/24",
- "gateway": "10.0.0.1",
- "addressRanges": [
- {
- "firstAddress": "10.0.0.10",
- "lastAddress": "10.0.0.100"
}
], - "totalAddressCount": 0,
- "createdAt": "2026-08-21T06:32:49Z",
- "updatedAt": "2026-08-21T06:32:49Z",
- "deletedAt": "2026-08-21T06:32:49Z"
}Fetch an IP pool by its identifier.
| poolId required | string <uuid> UUID of the IP pool. |
IP pool details.
Invalid request
Resource not found
An unexpected error occurred.
{- "id": "string",
- "name": "string",
- "description": "string",
- "addressFamily": "IPv4",
- "address": "10.0.0.0/24",
- "gateway": "10.0.0.1",
- "addressRanges": [
- {
- "firstAddress": "10.0.0.10",
- "lastAddress": "10.0.0.100"
}
], - "totalAddressCount": 0,
- "createdAt": "2026-08-21T06:32:49Z",
- "updatedAt": "2026-08-21T06:32:49Z",
- "deletedAt": "2026-08-21T06:32:49Z"
}Replace the configuration of an existing IP pool.
| poolId required | string <uuid> UUID of the IP pool. |
| id | string <uuid> Should match the path parameter; the server overwrites mismatched values. |
| name required | string [ 1 .. 255 ] characters ^[a-zA-Z_][a-zA-Z0-9_.\-]*$ Pool name. Rules:
|
| description | string |
| addressFamily | string Enum: "IPv4" "IPv6" Address family of the pool. When omitted, it is inferred from the CIDR (IPv4 or IPv6). |
| address required | string |
| gateway | string Nullable |
| addressRanges required | Array of objects (AddressRange) non-empty |
Updated IP pool.
Invalid request
Resource not found
An unexpected error occurred.
{- "id": "string",
- "name": "string",
- "description": "string",
- "addressFamily": "IPv4",
- "address": "10.0.0.0/24",
- "gateway": "string",
- "addressRanges": [
- {
- "firstAddress": "10.0.0.10",
- "lastAddress": "10.0.0.100"
}
]
}{- "id": "string",
- "name": "string",
- "description": "string",
- "addressFamily": "IPv4",
- "address": "10.0.0.0/24",
- "gateway": "10.0.0.1",
- "addressRanges": [
- {
- "firstAddress": "10.0.0.10",
- "lastAddress": "10.0.0.100"
}
], - "totalAddressCount": 0,
- "createdAt": "2026-08-21T06:32:49Z",
- "updatedAt": "2026-08-21T06:32:49Z",
- "deletedAt": "2026-08-21T06:32:49Z"
}Permanently remove an IP pool. The operation fails if the pool still has active leases.
| poolId required | string <uuid> UUID of the IP pool. |
Pool deleted successfully.
Invalid request
Pool cannot be deleted because of active leases or validation errors.
An unexpected error occurred.
{- "code": "string",
- "message": "string",
- "details": [
- "string"
]
}Allocate an IP address from the specified pool. The request is idempotent on allocationId.
| poolId required | string <uuid> UUID of the IP pool. |
| allocationId required | string Identifier used to make allocation idempotent. |
| leaseTags | Array of objects (Tag) Optional labels applied to the resulting lease. |
Allocation succeeded and returns the resulting lease.
Invalid request
Allocation failed due to conflicts such as exhausted address space.
An unexpected error occurred.
{- "allocationId": "string",
- "leaseTags": [
- {
- "name": "string",
- "value": "string"
}
]
}{- "lease": {
- "id": "string",
- "poolId": "string",
- "address": "10.0.0.10",
- "gateway": "string",
- "allocationId": "string",
- "deviceId": "string",
- "leaseTags": [
- {
- "name": "string",
- "value": "string"
}
], - "metadata": { },
- "createdAt": "2026-08-21T06:32:49Z",
- "updatedAt": "2026-08-21T06:32:49Z",
- "deletedAt": "2026-08-21T06:32:49Z"
}, - "poolId": "string",
- "allocationId": "string"
}Release one or more leases that match the provided criteria (allocation ID, address, or tags).
| poolId required | string <uuid> UUID of the IP pool. |
| allocationId required | string Nullable |
| address | string Nullable |
| leaseTags | Array of objects (Tag) |
Leases successfully released (if any matched the filters).
Invalid request
An unexpected error occurred.
{- "allocationId": "string",
- "address": "10.0.0.10",
- "leaseTags": [
- {
- "name": "string",
- "value": "string"
}
]
}{- "items": [
- {
- "id": "string",
- "poolId": "string",
- "address": "10.0.0.10",
- "gateway": "string",
- "allocationId": "string",
- "deviceId": "string",
- "leaseTags": [
- {
- "name": "string",
- "value": "string"
}
], - "metadata": { },
- "createdAt": "2026-08-21T06:32:49Z",
- "updatedAt": "2026-08-21T06:32:49Z",
- "deletedAt": "2026-08-21T06:32:49Z"
}
], - "totalItems": 0
}Retrieve all active leases belonging to the specified pool.
| poolId required | string <uuid> UUID of the IP pool. |
Collection of leases for the pool.
Invalid request
An unexpected error occurred.
{- "items": [
- {
- "id": "string",
- "poolId": "string",
- "address": "10.0.0.10",
- "gateway": "string",
- "allocationId": "string",
- "deviceId": "string",
- "leaseTags": [
- {
- "name": "string",
- "value": "string"
}
], - "metadata": { },
- "createdAt": "2026-08-21T06:32:49Z",
- "updatedAt": "2026-08-21T06:32:49Z",
- "deletedAt": "2026-08-21T06:32:49Z"
}
], - "totalItems": 0
}Retrieve a specific lease by its identifier.
| poolId required | string <uuid> UUID of the IP pool. |
| leaseId required | string <uuid> UUID of the IP lease. |
Lease details.
Invalid request
Resource not found
An unexpected error occurred.
{- "id": "string",
- "poolId": "string",
- "address": "10.0.0.10",
- "gateway": "string",
- "allocationId": "string",
- "deviceId": "string",
- "leaseTags": [
- {
- "name": "string",
- "value": "string"
}
], - "metadata": { },
- "createdAt": "2026-08-21T06:32:49Z",
- "updatedAt": "2026-08-21T06:32:49Z",
- "deletedAt": "2026-08-21T06:32:49Z"
}Release one or more leases across all IP pools that match the provided allocation ID and optional lease tags.
| allocationId required | string Identifier of the allocation to release. This field is required and used to search across all pools. |
| leaseTags | Array of objects (Tag) Optional labels to further filter leases. When provided, all tags must match (AND logic) for a lease to be released. |
Leases successfully released (if any matched the criteria).
Invalid request
An unexpected error occurred.
{- "allocationId": "string",
- "leaseTags": [
- {
- "name": "string",
- "value": "string"
}
]
}{- "items": [
- {
- "id": "string",
- "poolId": "string",
- "address": "10.0.0.10",
- "gateway": "string",
- "allocationId": "string",
- "deviceId": "string",
- "leaseTags": [
- {
- "name": "string",
- "value": "string"
}
], - "metadata": { },
- "createdAt": "2026-08-21T06:32:49Z",
- "updatedAt": "2026-08-21T06:32:49Z",
- "deletedAt": "2026-08-21T06:32:49Z"
}
], - "totalItems": 0
}Manually create a lease for a specific address in a pool. Validates address belongs to pool ranges and enforces uniqueness.
| id required | string <uuid> |
| poolId required | string <uuid> |
| address required | string |
| gateway | string Nullable |
| allocationId | string Nullable |
| deviceId | string <uuid> Nullable |
| leaseTags | Array of objects (Tag) |
| metadata | object |
| createdAt required | string <date-time> |
| updatedAt required | string <date-time> |
| deletedAt | string <date-time> Nullable |
Lease created successfully.
Invalid request
Lease creation failed due to conflicts (address already allocated or allocationId in use).
An unexpected error occurred.
{- "id": "string",
- "poolId": "string",
- "address": "10.0.0.10",
- "gateway": "string",
- "allocationId": "string",
- "deviceId": "string",
- "leaseTags": [
- {
- "name": "string",
- "value": "string"
}
], - "metadata": { },
- "createdAt": "2026-08-21T06:32:49Z",
- "updatedAt": "2026-08-21T06:32:49Z",
- "deletedAt": "2026-08-21T06:32:49Z"
}{- "id": "string",
- "poolId": "string",
- "address": "10.0.0.10",
- "gateway": "string",
- "allocationId": "string",
- "deviceId": "string",
- "leaseTags": [
- {
- "name": "string",
- "value": "string"
}
], - "metadata": { },
- "createdAt": "2026-08-21T06:32:49Z",
- "updatedAt": "2026-08-21T06:32:49Z",
- "deletedAt": "2026-08-21T06:32:49Z"
}