F5 Insight API (v1.2.1)

Download OpenAPI specification:Download

Unified API for F5 Insight monitoring and analytics platform including device management, system operations, and AI-powered insights

Authentication

BearerAuth

JWT ACCESS TOKEN for authenticated requests.

IMPORTANT:

  • Use ACCESS TOKEN (short-lived, 5 min) in Authorization header: "Bearer "
  • Use REFRESH TOKEN (long-lived, 10 hrs) ONLY in request body for /auth/refresh endpoint
  • DO NOT use refresh token in Authorization header - it will fail!

Example: Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...

Security Scheme Type HTTP
HTTP Authorization Scheme bearer
Bearer format "JWT"

bearerAuth

JWT token-based authentication

Security Scheme Type HTTP
HTTP Authorization Scheme bearer
Bearer format "JWT"

basicAuth

Basic authentication

Security Scheme Type HTTP
HTTP Authorization Scheme basic

Authorization

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.

Get current user permissions

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.

Authorizations:

Responses

200

Current user permissions retrieved successfully

401

Unauthorized – missing or invalid JWT

403

Forbidden – role information missing from JWT context

404

Role not found

500

Internal server error

get/api/auth/me/permissions
/api/api/auth/me/permissions
/api/provisioning/v1/api/auth/me/permissions
/api/v1/fleet/upgrade/api/auth/me/permissions
/api/auth/me/permissions

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "user_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  • "role_id": "550e8400-e29b-41d4-a716-446655440001",
  • "role_name": "Operator",
  • "permissions":
    [
    ],
  • "grouped_permissions":
    {
    }
}

List all roles

Returns all available system roles with user counts. Used to populate the role selector when creating or updating a group mapping. Requires authentication.

Authorizations:
query Parameters
include_permissions
boolean
Default: false

Include permission mappings when available.

Responses

200

List of roles retrieved successfully

401

Unauthorized – missing or invalid JWT

500

Internal server error

get/api/auth/roles
/api/api/auth/roles
/api/provisioning/v1/api/auth/roles
/api/v1/fleet/upgrade/api/auth/roles
/api/auth/roles

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "roles":
    [
    ],
  • "total_count": 2
}

Get role by ID

Returns a single role by its UUID, including its full permission list. Requires authentication.

Authorizations:
path Parameters
role_id
required
string <uuid>

UUID of the role to retrieve

Responses

200

Role retrieved successfully

401

Unauthorized – missing or invalid JWT

404

Role not found

500

Internal server error

get/api/auth/roles/{role_id}
/api/api/auth/roles/{role_id}
/api/provisioning/v1/api/auth/roles/{role_id}
/api/v1/fleet/upgrade/api/auth/roles/{role_id}
/api/auth/roles/{role_id}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "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":
    [
    ]
}

List all provider group → role mappings

Returns configured mappings grouped by identity provider and role. Requires authentication.

Authorizations:

Responses

200

List of group mappings retrieved successfully

401

Unauthorized

500

Internal server error

get/api/auth/group-mappings
/api/api/auth/group-mappings
/api/provisioning/v1/api/auth/group-mappings
/api/v1/fleet/upgrade/api/auth/group-mappings
/api/auth/group-mappings

Response samples

Content type
application/json
Copy
Expand all Collapse all
[
  • {
    }
]

Get provider groups mapped to a role

Returns all provider-scoped grouped mappings for the given role_id. Requires authentication.

Authorizations:
path Parameters
role_id
required
string <uuid>

UUID of the F5 Insight role

Responses

200

Group mappings retrieved successfully

400

Invalid role_id

401

Unauthorized

500

Internal server error

get/api/auth/group-mappings/{role_id}
/api/api/auth/group-mappings/{role_id}
/api/provisioning/v1/api/auth/group-mappings/{role_id}
/api/v1/fleet/upgrade/api/auth/group-mappings/{role_id}
/api/auth/group-mappings/{role_id}

Response samples

Content type
application/json
Copy
Expand all Collapse all
[
  • {
    }
]

Replace provider groups mapped to a role

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.

Authorizations:
path Parameters
role_id
required
string <uuid>

UUID of the F5 Insight role

Request Body schema: application/json
provider_id
required
string non-empty

Zitadel identity provider ID

grouped_resource_attribute
required
Array of strings

Group/resource attribute values to map to the role in the path

Responses

200

Group mapping replaced successfully

400

Invalid request body or role_id not found

401

Unauthorized

403

Forbidden – admin role required

500

Internal server error

put/api/auth/group-mappings/{role_id}
/api/api/auth/group-mappings/{role_id}
/api/provisioning/v1/api/auth/group-mappings/{role_id}
/api/v1/fleet/upgrade/api/auth/group-mappings/{role_id}
/api/auth/group-mappings/{role_id}

Request samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "provider_id": "zitadel-ldap-id-123",
  • "grouped_resource_attribute":
    [
    ]
}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "provider_id": "zitadel-ldap-id-123",
  • "role_id": "550e8400-e29b-41d4-a716-446655440000",
  • "role":
    {
    },
  • "grouped_resource_attribute":
    [
    ],
  • "created_at": "2026-07-17T10:37:05Z",
  • "updated_at": "2026-07-17T10:37:05Z",
  • "created_by": "string",
  • "updated_by": "string"
}

Add provider groups to a role

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.

Authorizations:
path Parameters
role_id
required
string <uuid>

UUID of the F5 Insight role

Request Body schema: application/json
provider_id
required
string non-empty

Zitadel identity provider ID

grouped_resource_attribute
required
Array of strings

Group/resource attribute values to map to the role in the path

Responses

200

Group mapping patched successfully

400

Invalid request body or role_id not found

401

Unauthorized

403

Forbidden – admin role required

500

Internal server error

patch/api/auth/group-mappings/{role_id}
/api/api/auth/group-mappings/{role_id}
/api/provisioning/v1/api/auth/group-mappings/{role_id}
/api/v1/fleet/upgrade/api/auth/group-mappings/{role_id}
/api/auth/group-mappings/{role_id}

Request samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "provider_id": "zitadel-ldap-id-123",
  • "grouped_resource_attribute":
    [
    ]
}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "provider_id": "zitadel-ldap-id-123",
  • "role_id": "550e8400-e29b-41d4-a716-446655440000",
  • "role":
    {
    },
  • "grouped_resource_attribute":
    [
    ],
  • "created_at": "2026-07-17T10:37:05Z",
  • "updated_at": "2026-07-17T10:37:05Z",
  • "created_by": "string",
  • "updated_by": "string"
}

Delete provider groups mapped to a role

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.

Authorizations:
path Parameters
role_id
required
string <uuid>

UUID of the F5 Insight role

Request Body schema: application/json
provider_id
required
string non-empty

Zitadel identity provider ID

Responses

204

Group mapping deleted successfully

400

Missing provider_id or invalid role_id

401

Unauthorized

403

Forbidden – admin role required

404

Group mapping not found

500

Internal server error

delete/api/auth/group-mappings/{role_id}
/api/api/auth/group-mappings/{role_id}
/api/provisioning/v1/api/auth/group-mappings/{role_id}
/api/v1/fleet/upgrade/api/auth/group-mappings/{role_id}
/api/auth/group-mappings/{role_id}

Request samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "provider_id": "zitadel-ldap-id-123"
}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "error": "string"
}

LDAP group → role lookup (internal webhook)

Internal server-to-server endpoint called by the Zitadel action script during token enrichment. Receives the authenticating user's provider ID and group/resource attribute values, then returns the F5 Insight role names mapped to those values.

This endpoint is NOT protected by JWT bearer auth — it is called by Zitadel's action runtime (server-to-server). It is protected by the X-Webhook-Key header which must match the AUTHZ_WEBHOOK_SECRET environment variable configured on the backend.

Do not call this endpoint from browser clients.

header Parameters
X-Webhook-Key
string

Shared secret matching AUTHZ_WEBHOOK_SECRET env var. Required in production; optional when AUTHZ_WEBHOOK_SECRET is unset (dev only).

Request Body schema: application/json
user_id
required
string

Zitadel user ID of the authenticating user

provider_id
string

Zitadel identity provider ID that authenticated the user

groups
required
Array of strings

Group/resource attribute values for the user

Responses

200

Roles resolved for the given groups

400

Invalid request body

401

Invalid or missing X-Webhook-Key

500

Internal server error

post/api/auth/ldap-group-lookup
/api/api/auth/ldap-group-lookup
/api/provisioning/v1/api/auth/ldap-group-lookup
/api/v1/fleet/upgrade/api/auth/ldap-group-lookup
/api/auth/ldap-group-lookup

Request samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "user_id": "zitadel-user-id-abc123",
  • "provider_id": "zitadel-ldap-id-123",
  • "groups":
    [
    ]
}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "roles":
    [
    ]
}

Cloud Providers

Operations for managing cloud provider configurations

List all cloud providers

Authorizations:

Responses

200

List of cloud providers retrieved successfully

500

An unexpected error occurred.

get/api/provisioning/v1/cloud/providers
/api/api/provisioning/v1/cloud/providers
/api/provisioning/v1/api/provisioning/v1/cloud/providers
/api/v1/fleet/upgrade/api/provisioning/v1/cloud/providers
/api/provisioning/v1/cloud/providers

Response samples

Content type
application/json
Copy
Expand all Collapse all
[
  • {
    }
]

Create a cloud provider

Authorizations:
Request Body schema: application/json
providerType
required
string
Value: "VMware"

Type of cloud provider

name
required
string [ 1 .. 255 ] characters

Name of the cloud provider

vmwProperties
object (VMwareProviderProperties)

Responses

201

Cloud provider created successfully

400

Invalid request

409

Conflict - provider with same name already exists

500

An unexpected error occurred.

post/api/provisioning/v1/cloud/providers
/api/api/provisioning/v1/cloud/providers
/api/provisioning/v1/api/provisioning/v1/cloud/providers
/api/v1/fleet/upgrade/api/provisioning/v1/cloud/providers
/api/provisioning/v1/cloud/providers

Request samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "providerType": "VMware",
  • "name": "string",
  • "vmwProperties":
    {
    }
}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "id": "string",
  • "providerType": "VMware",
  • "name": "string",
  • "vmwProperties":
    {
    },
  • "selfLink": "http://example.com",
  • "createdAt": "2026-07-17T10:37:05Z",
  • "updatedAt": "2026-07-17T10:37:05Z"
}

Get cloud provider by ID

Authorizations:
path Parameters
providerId
required
string <uuid>

UUID of the cloud provider

Responses

200

Cloud provider retrieved successfully

400

Invalid request

404

Resource not found

500

An unexpected error occurred.

get/api/provisioning/v1/cloud/providers/{providerId}
/api/api/provisioning/v1/cloud/providers/{providerId}
/api/provisioning/v1/api/provisioning/v1/cloud/providers/{providerId}
/api/v1/fleet/upgrade/api/provisioning/v1/cloud/providers/{providerId}
/api/provisioning/v1/cloud/providers/{providerId}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "id": "string",
  • "providerType": "VMware",
  • "name": "string",
  • "vmwProperties":
    {
    },
  • "selfLink": "http://example.com",
  • "createdAt": "2026-07-17T10:37:05Z",
  • "updatedAt": "2026-07-17T10:37:05Z"
}

Edit cloud provider

Authorizations:
path Parameters
providerId
required
string <uuid>

UUID of the cloud provider

Request Body schema: application/json
name
string [ 1 .. 255 ] characters

Name of the cloud provider

vmwProperties
object (VMwareProviderProperties)

Responses

200

Cloud provider updated successfully

400

Invalid request

404

Resource not found

409

Conflict - provider with same name already exists

500

An unexpected error occurred.

patch/api/provisioning/v1/cloud/providers/{providerId}
/api/api/provisioning/v1/cloud/providers/{providerId}
/api/provisioning/v1/api/provisioning/v1/cloud/providers/{providerId}
/api/v1/fleet/upgrade/api/provisioning/v1/cloud/providers/{providerId}
/api/provisioning/v1/cloud/providers/{providerId}

Request samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "name": "string",
  • "vmwProperties":
    {
    }
}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "id": "string",
  • "providerType": "VMware",
  • "name": "string",
  • "vmwProperties":
    {
    },
  • "selfLink": "http://example.com",
  • "createdAt": "2026-07-17T10:37:05Z",
  • "updatedAt": "2026-07-17T10:37:05Z"
}

Delete cloud provider

Authorizations:
path Parameters
providerId
required
string <uuid>

UUID of the cloud provider

Responses

204

Provider deleted successfully

400

Invalid request

404

Resource not found

500

An unexpected error occurred.

delete/api/provisioning/v1/cloud/providers/{providerId}
/api/api/provisioning/v1/cloud/providers/{providerId}
/api/provisioning/v1/api/provisioning/v1/cloud/providers/{providerId}
/api/v1/fleet/upgrade/api/provisioning/v1/cloud/providers/{providerId}
/api/provisioning/v1/cloud/providers/{providerId}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "code": "string",
  • "message": "string",
  • "details":
    [
    ]
}

Device Templates

Operations on device template configurations.

List device templates

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
Authorizations:
query Parameters
$filter
string
Example: $filter=state eq 'DEPLOYED'

OData filter expression. Supported fields: name, provider, state, locked. Examples: state eq 'DEPLOYED', name eq 'BIG-IP Standard Template'

$orderby
string
Example: $orderby=name asc

OData ordering expression. Supported fields: name, provider, state, createdAt, updatedAt. Examples: name asc, createdAt desc

$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: id,name,state,definition

$count
boolean
Default: false
Example: $count=true

When true, includes totalItems in the response with the total count of matching records.

Responses

200

Paginated list of device templates

500

Internal Server Error

get/api/provisioning/v1/device-templates
/api/api/provisioning/v1/device-templates
/api/provisioning/v1/api/provisioning/v1/device-templates
/api/v1/fleet/upgrade/api/provisioning/v1/device-templates
/api/provisioning/v1/device-templates

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "status": 200,
  • "count": 2,
  • "totalItems": 2,
  • "items":
    [
    ],
  • "selfLink": "/api/device-templates"
}

Create a device template

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.

Authorizations:
Request Body schema: application/json
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 true, the template is created/kept in DRAFT state. When false or omitted, a DRAFT template is promoted to NEW.

definition
required
object (DeviceTemplateDefinition)

Template definition containing all BIG-IP device configuration parameters.

Responses

200

OK — device template created in NEW state (draft=false or omitted)

201

Created — device template created in DRAFT state (draft=true)

400

Bad Request

409

Conflict — name already exists

500

Internal Server Error

post/api/provisioning/v1/device-templates
/api/api/provisioning/v1/device-templates
/api/provisioning/v1/api/provisioning/v1/device-templates
/api/v1/fleet/upgrade/api/provisioning/v1/device-templates
/api/provisioning/v1/device-templates

Request samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "name": "BIG-IP Standard Template",
  • "provider": "VMware",
  • "description": "Standard VMware configuration for production workloads",
  • "definition":
    {
    }
}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "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"
}

Get a device template by ID

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
Authorizations:
path Parameters
id
required
string <uuid>
Example: 550e8400-e29b-41d4-a716-446655440000

UUID of the device template.

query Parameters
$select
string
Example: $select=id,name,state

Comma-separated list of fields to include in the response. Example: id,name,state,definition

Responses

200

Device template returned successfully

404

Not Found

500

Internal Server Error

get/api/provisioning/v1/device-templates/{id}
/api/api/provisioning/v1/device-templates/{id}
/api/provisioning/v1/api/provisioning/v1/device-templates/{id}
/api/v1/fleet/upgrade/api/provisioning/v1/device-templates/{id}
/api/provisioning/v1/device-templates/{id}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "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":
    {
    },
  • "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"
}

Update a device template (full replace)

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.

Authorizations:
path Parameters
id
required
string <uuid>
Example: 550e8400-e29b-41d4-a716-446655440000

UUID of the device template.

Request Body schema: application/json
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 true, the template is created/kept in DRAFT state. When false or omitted, a DRAFT template is promoted to NEW.

definition
required
object (DeviceTemplateDefinition)

Template definition containing all BIG-IP device configuration parameters.

Responses

200

OK — device template updated successfully

400

Bad Request

404

Not Found

409

Conflict — locked, deploying, or name collision

500

Internal Server Error

put/api/provisioning/v1/device-templates/{id}
/api/api/provisioning/v1/device-templates/{id}
/api/provisioning/v1/api/provisioning/v1/device-templates/{id}
/api/v1/fleet/upgrade/api/provisioning/v1/device-templates/{id}
/api/provisioning/v1/device-templates/{id}

Request samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "name": "BIG-IP Standard Template v2",
  • "provider": "VMware",
  • "description": "Updated VMware configuration with HA support",
  • "definition":
    {
    }
}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "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 update a device template

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:

  • Provided keys are updated.
  • Omitted keys are left unchanged.
  • Keys set to null are cleared.
  • Array fields (e.g. vlanList, selfIpList) are replaced wholesale.
Authorizations:
path Parameters
id
required
string <uuid>
Example: 550e8400-e29b-41d4-a716-446655440000

UUID of the device template.

Request Body schema: application/json
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 null to clear.

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

Responses

200

OK — device template patched successfully

400

Bad Request

404

Not Found

409

Conflict — locked or deploying

500

Internal Server Error

patch/api/provisioning/v1/device-templates/{id}
/api/api/provisioning/v1/device-templates/{id}
/api/provisioning/v1/api/provisioning/v1/device-templates/{id}
/api/v1/fleet/upgrade/api/provisioning/v1/device-templates/{id}
/api/provisioning/v1/device-templates/{id}

Request samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "description": "Updated description with HA failover notes",
  • "definition":
    {
    }
}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "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"
}

Delete a device template

Deletes a device template by ID.

Precondition: The device template must not be locked. Templates in DEPLOYING state cannot be deleted.

Authorizations:
path Parameters
id
required
string <uuid>
Example: 550e8400-e29b-41d4-a716-446655440000

UUID of the device template.

Responses

200

OK — device template deleted

404

Not Found

409

Conflict — locked or deploying

500

Internal Server Error

delete/api/provisioning/v1/device-templates/{id}
/api/api/provisioning/v1/device-templates/{id}
/api/provisioning/v1/api/provisioning/v1/device-templates/{id}
/api/v1/fleet/upgrade/api/provisioning/v1/device-templates/{id}
/api/provisioning/v1/device-templates/{id}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "id": "550e8400-e29b-41d4-a716-446655440000",
  • "status": 200,
  • "deletedAt": "2026-04-10T16:00:00Z"
}

Lock a device template

Locks a device template to prevent modifications. Sets locked=true and lockReason=READ_ONLY.

Precondition: Template must not already be locked.

Authorizations:
path Parameters
id
required
string <uuid>
Example: 550e8400-e29b-41d4-a716-446655440000

UUID of the device template.

Responses

200

OK — device template locked

404

Not Found

409

Conflict — already locked

500

Internal Server Error

post/api/provisioning/v1/device-templates/{id}/lock
/api/api/provisioning/v1/device-templates/{id}/lock
/api/provisioning/v1/api/provisioning/v1/device-templates/{id}/lock
/api/v1/fleet/upgrade/api/provisioning/v1/device-templates/{id}/lock
/api/provisioning/v1/device-templates/{id}/lock

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "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"
}

Unlock a device template

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.

Authorizations:
path Parameters
id
required
string <uuid>
Example: 550e8400-e29b-41d4-a716-446655440000

UUID of the device template.

Responses

200

OK — device template unlocked

404

Not Found

409

Conflict — not locked or system-locked

500

Internal Server Error

delete/api/provisioning/v1/device-templates/{id}/lock
/api/api/provisioning/v1/device-templates/{id}/lock
/api/provisioning/v1/api/provisioning/v1/device-templates/{id}/lock
/api/v1/fleet/upgrade/api/provisioning/v1/device-templates/{id}/lock
/api/provisioning/v1/device-templates/{id}/lock

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "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"
}

Validate a device template

Runs multi-tier validation on a device template:

  • Tier 1 — Data & Sanity: Required fields, value ranges, cross-field rules.
  • Tier 2 — Template / Schema: Validates the definition against the default template schema.
  • Tier 3 — Live VM (future): Validates against a live BIG-IP VM.

Always returns HTTP 200. Inspect valid and each tier's result for pass/fail.

Authorizations:
path Parameters
id
required
string <uuid>
Example: 550e8400-e29b-41d4-a716-446655440000

UUID of the device template.

Responses

200

Validation completed

404

Not Found

500

Internal Server Error

post/api/provisioning/v1/device-templates/{id}/validate
/api/api/provisioning/v1/device-templates/{id}/validate
/api/provisioning/v1/api/provisioning/v1/device-templates/{id}/validate
/api/v1/fleet/upgrade/api/provisioning/v1/device-templates/{id}/validate
/api/provisioning/v1/device-templates/{id}/validate

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "id": "550e8400-e29b-41d4-a716-446655440000",
  • "status": 200,
  • "valid": false,
  • "validatedAt": "2026-04-15T10:30:00Z",
  • "dataSanity":
    {
    },
  • "templateSchema":
    {
    },
  • "selfLink": "/api/device-templates/550e8400-e29b-41d4-a716-446655440000"
}

Deploy a device template

Triggers deployment of a device template to target infrastructure.

Preconditions:

  • Template must be in NEW or DEPLOYED state
  • Template must not be locked
  • Template must pass validation

Returns 202 Accepted with a task object for tracking deployment progress.

Authorizations:
path Parameters
id
required
string <uuid>
Example: 550e8400-e29b-41d4-a716-446655440000

UUID of the device template.

Request Body schema: application/json
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).

Responses

202

Accepted — deployment task queued

400

Bad Request — invalid request payload

404

Not Found

409

Conflict — locked or already deploying

422

Unprocessable Entity — template not in deployable state or validation failed

500

Internal Server Error

post/api/provisioning/v1/device-templates/{id}/deploy
/api/api/provisioning/v1/device-templates/{id}/deploy
/api/provisioning/v1/api/provisioning/v1/device-templates/{id}/deploy
/api/v1/fleet/upgrade/api/provisioning/v1/device-templates/{id}/deploy
/api/provisioning/v1/device-templates/{id}/deploy

Request samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "mgmtIp": "192.168.1.100",
  • "username": "admin",
  • "encodedBasicAuth": "YWRtaW46YWRtaW5QYXNzd29yZDEyMw=="
}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "status": 202,
  • "deviceTemplateId": "550e8400-e29b-41d4-a716-446655440000",
  • "deploymentTaskId": "c3d4e5f6-a7b8-4012-8def-123456789012",
  • "selfLink": "/api/device-templates/tasks/c3d4e5f6-a7b8-4012-8def-123456789012"
}

Clone a device template

Creates a deep copy of an existing device template with a new name. The clone is always created in DRAFT state, unlocked.

Authorizations:
path Parameters
id
required
string <uuid>
Example: 550e8400-e29b-41d4-a716-446655440000

UUID of the device template.

Request Body schema: application/json
name
required
string [ 1 .. 255 ] characters

Name for the cloned template. Must be unique.

Responses

201

Created — clone created in DRAFT state

400

Bad Request

404

Not Found — source template not found

409

Conflict — clone name already exists

500

Internal Server Error

post/api/provisioning/v1/device-templates/{id}/clone
/api/api/provisioning/v1/device-templates/{id}/clone
/api/provisioning/v1/api/provisioning/v1/device-templates/{id}/clone
/api/v1/fleet/upgrade/api/provisioning/v1/device-templates/{id}/clone
/api/provisioning/v1/device-templates/{id}/clone

Request samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "name": "BIG-IP Standard Template (Copy)"
}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "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"
}

Get a device template task by ID

Retrieves a specific task by its ID. For active tasks (PENDING, RUNNING), this endpoint polls the external service for the latest status before returning.

Authorizations:
path Parameters
taskId
required
string <uuid>
Example: 660e8400-e29b-41d4-a716-446655440001

UUID of the task.

Responses

200

OK — task retrieved successfully

400

Bad Request — invalid UUID format

404

Not Found — task not found

500

Internal Server Error

get/api/provisioning/v1/device-templates/tasks/{taskId}
/api/api/provisioning/v1/device-templates/tasks/{taskId}
/api/provisioning/v1/api/provisioning/v1/device-templates/tasks/{taskId}
/api/v1/fleet/upgrade/api/provisioning/v1/device-templates/tasks/{taskId}
/api/provisioning/v1/device-templates/tasks/{taskId}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "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"
}

License Pool

Operations for managing license pools

Fetches all available license pools

Fetches all available license pools in the system.

Authorizations:
query Parameters
$select
string
Example: $select=id

Fields to select in the response

Responses

200

returns list of all License pools successfully

400

Bad request - invalid input

401

Unauthorized

500

Internal server error

get/api/provisioning/v1/licensing/pool/regkey/licenses
/api/api/provisioning/v1/licensing/pool/regkey/licenses
/api/provisioning/v1/api/provisioning/v1/licensing/pool/regkey/licenses
/api/v1/fleet/upgrade/api/provisioning/v1/licensing/pool/regkey/licenses
/api/provisioning/v1/licensing/pool/regkey/licenses

Response samples

Content type
application/json
Copy
Expand all Collapse all
[]

Create a new license pool

Creates a new license pool that can hold multiple license offerings

Authorizations:
Request Body schema: application/json
name
required
string

Name of the license pool

description
string

Description of the license pool

Responses

201

License pool created successfully

400

Bad request - invalid input

401

Unauthorized

500

Internal server error

post/api/provisioning/v1/licensing/pool/regkey/licenses
/api/api/provisioning/v1/licensing/pool/regkey/licenses
/api/provisioning/v1/api/provisioning/v1/licensing/pool/regkey/licenses
/api/v1/fleet/upgrade/api/provisioning/v1/licensing/pool/regkey/licenses
/api/provisioning/v1/licensing/pool/regkey/licenses

Request samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "name": "test",
  • "description": ""
}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{}

Get license pool by ID

Get license pool by given ID in the path parameter

Authorizations:
path Parameters
poolId
required
string <uuid>
Example: 7dd7b971-6eb8-4b9e-995b-1dcb1287d65f

UUID of the license pool

Responses

200

Returns the License pool successfully

400

Bad request - invalid input

401

Unauthorized

404

License pool not found

500

Internal server error

get/api/provisioning/v1/licensing/pool/regkey/licenses/{poolId}
/api/api/provisioning/v1/licensing/pool/regkey/licenses/{poolId}
/api/provisioning/v1/api/provisioning/v1/licensing/pool/regkey/licenses/{poolId}
/api/v1/fleet/upgrade/api/provisioning/v1/licensing/pool/regkey/licenses/{poolId}
/api/provisioning/v1/licensing/pool/regkey/licenses/{poolId}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{}

Delete a license pool

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.

Authorizations:
path Parameters
poolId
required
string <uuid>
Example: 7dd7b971-6eb8-4b9e-995b-1dcb1287d65f

UUID of the license pool

Responses

204

License pool deleted successfully

400

Bad request - pool has outstanding grants

401

Unauthorized

404

License pool not found

500

Internal server error

delete/api/provisioning/v1/licensing/pool/regkey/licenses/{poolId}
/api/api/provisioning/v1/licensing/pool/regkey/licenses/{poolId}
/api/provisioning/v1/api/provisioning/v1/licensing/pool/regkey/licenses/{poolId}
/api/v1/fleet/upgrade/api/provisioning/v1/licensing/pool/regkey/licenses/{poolId}
/api/provisioning/v1/licensing/pool/regkey/licenses/{poolId}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "code": 400,
  • "message": "Found 1 outstanding grant(s). They must be removed before this license can be deleted."
}

Assign an available license from the pool to a device

Automatically assigns an available license from the pool to the specified BIG-IP device.

This is a convenience endpoint that:

  1. Finds all offerings in the pool that are READY and not already assigned to any member
  2. Picks the first available offering
  3. Assigns the license to the specified device

This is an asynchronous operation that returns a TaskReference for polling.

Authorizations:
path Parameters
poolId
required
string <uuid>
Example: 7dd7b971-6eb8-4b9e-995b-1dcb1287d65f

UUID of the license pool

Request Body schema: application/json
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

Responses

202

License assignment initiated (async operation)

400

Bad request - no available licenses or invalid parameters

401

Unauthorized

404

License pool not found

500

Internal server error

post/api/provisioning/v1/licensing/pool/regkey/licenses/{poolId}/assign
/api/api/provisioning/v1/licensing/pool/regkey/licenses/{poolId}/assign
/api/provisioning/v1/api/provisioning/v1/licensing/pool/regkey/licenses/{poolId}/assign
/api/v1/fleet/upgrade/api/provisioning/v1/licensing/pool/regkey/licenses/{poolId}/assign
/api/provisioning/v1/licensing/pool/regkey/licenses/{poolId}/assign

Request samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "deviceAddress": "192.168.1.100",
  • "deviceUsername": "admin",
  • "devicePassword": "admin"
}

Response samples

Content type
application/json

Revoke license from a device in the pool

Revokes the license from a device that has a license assigned from this pool.

This is a convenience endpoint that:

  1. Finds the member record by device address
  2. Revokes the license from the device (unless force=true)
  3. Removes the member record from the pool

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.

Authorizations:
path Parameters
poolId
required
string <uuid>
Example: 7dd7b971-6eb8-4b9e-995b-1dcb1287d65f

UUID of the license pool

query Parameters
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.

Request Body schema: application/json
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

Responses

204

License successfully revoked from the device

400

Bad request - revocation failed

401

Unauthorized

404

License pool not found or device not found in pool

500

Internal server error

delete/api/provisioning/v1/licensing/pool/regkey/licenses/{poolId}/revoke
/api/api/provisioning/v1/licensing/pool/regkey/licenses/{poolId}/revoke
/api/provisioning/v1/api/provisioning/v1/licensing/pool/regkey/licenses/{poolId}/revoke
/api/v1/fleet/upgrade/api/provisioning/v1/licensing/pool/regkey/licenses/{poolId}/revoke
/api/provisioning/v1/licensing/pool/regkey/licenses/{poolId}/revoke

Request samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "deviceAddress": "192.168.1.100",
  • "deviceUsername": "admin",
  • "devicePassword": "admin"
}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "error": "string",
  • "code": "string"
}

License Offering

Operations for managing license offerings within pools

Add license offering to the pool

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.

Authorizations:
path Parameters
poolId
required
string <uuid>
Example: 7dd7b971-6eb8-4b9e-995b-1dcb1287d65f

UUID of the license pool

Request Body schema: application/json
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

Responses

202

License offering activation initiated (async operation)

400

Bad request - invalid registration key or activation failure

401

Unauthorized

404

License pool not found

500

Internal server error

post/api/provisioning/v1/licensing/pool/regkey/licenses/{poolId}/offerings
/api/api/provisioning/v1/licensing/pool/regkey/licenses/{poolId}/offerings
/api/provisioning/v1/api/provisioning/v1/licensing/pool/regkey/licenses/{poolId}/offerings
/api/v1/fleet/upgrade/api/provisioning/v1/licensing/pool/regkey/licenses/{poolId}/offerings
/api/provisioning/v1/licensing/pool/regkey/licenses/{poolId}/offerings

Request samples

Content type
application/json
Example
Copy
Expand all Collapse all
{
  • "regKey": "U5939-99933-49705-74523-4841009",
  • "status": "ACTIVATING_AUTOMATIC",
  • "name": "",
  • "description": ""
}

Response samples

Content type
application/json

Get all license offerings in the pool

Retrieves all license offerings associated with a specific license pool

Authorizations:
path Parameters
poolId
required
string <uuid>
Example: 7dd7b971-6eb8-4b9e-995b-1dcb1287d65f

UUID of the license pool

query Parameters
$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:

  • isAssigned eq false - Get only available (unassigned) offerings
  • isAssigned eq true - Get only assigned offerings
  • status eq 'READY' - Get only offerings with READY status
  • status eq 'READY' and isAssigned eq false - Get available READY offerings

Responses

200

List of license offerings retrieved successfully

401

Unauthorized

404

License pool not found

500

Internal server error

get/api/provisioning/v1/licensing/pool/regkey/licenses/{poolId}/offerings
/api/api/provisioning/v1/licensing/pool/regkey/licenses/{poolId}/offerings
/api/provisioning/v1/api/provisioning/v1/licensing/pool/regkey/licenses/{poolId}/offerings
/api/v1/fleet/upgrade/api/provisioning/v1/licensing/pool/regkey/licenses/{poolId}/offerings
/api/provisioning/v1/licensing/pool/regkey/licenses/{poolId}/offerings

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "items":
    [
    ],
  • "totalItems": 0
}

Get license offering by registration key

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.

Authorizations:
path Parameters
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

Responses

200

License offering retrieved successfully

401

Unauthorized

404

License pool or offering not found

500

Internal server error

get/api/provisioning/v1/licensing/pool/regkey/licenses/{poolId}/offerings/{regKey}
/api/api/provisioning/v1/licensing/pool/regkey/licenses/{poolId}/offerings/{regKey}
/api/provisioning/v1/api/provisioning/v1/licensing/pool/regkey/licenses/{poolId}/offerings/{regKey}
/api/v1/fleet/upgrade/api/provisioning/v1/licensing/pool/regkey/licenses/{poolId}/offerings/{regKey}
/api/provisioning/v1/licensing/pool/regkey/licenses/{poolId}/offerings/{regKey}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "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":
    {
    },
  • "dossier": "1ac56379204d679f59524f2e64300d03b91b4b9ff08225ce0087d91b6cf061227610",
  • "publicKey":
    [
    ],
  • "encryptedPrivateKey":
    [
    ],
  • "message": "You must obtain license text and supply it here",
  • "createdAt": "2026-07-17T10:37:05Z",
  • "activatedAt": "2026-07-17T10:37:05Z",
  • "isAssigned": false
}

Update or reactivate a license offering

Updates an existing license offering in the pool. This endpoint supports three distinct operations based on the status field in the request body:


Operation 1: Automatic Reactivation (Async)

Request: {"status": "ACTIVATING_AUTOMATIC"} Response: 202 Accepted with TaskReference

Triggers automatic reactivation via F5 license server. This is an asynchronous operation.

Steps:

  1. Validate the offering exists and belongs to the specified pool.
  2. Generate a new dossier for the existing registration key.
  3. Contact F5 License Server at https://authem.f5net.com/license/services/ for reactivation.
  4. F5 License Server returns updated license_text if reactivation is successful.
  5. Update the offering status to READY upon successful reactivation.

Poll the returned task link to check completion status.


Operation 2: Manual Reactivation - Get New Dossier (Sync)

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:

  1. Validate the offering exists and belongs to the specified pool.
  2. Regenerate dossier (reuses existing keys).
  3. Return the updated offering with the new dossier.

User should then submit the dossier to F5 license server UI to obtain license text.


Operation 3: Complete Manual Activation with License Text (Sync)

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:

  1. Validate the offering exists and is in ACTIVATING_MANUAL_NEED_LICENSE_TEXT status.
  2. Validate the provided license text format.
  3. Store the license text and parse license state.
  4. Update the offering status to READY.
Authorizations:
path Parameters
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

Request Body schema: application/json
status
required
string
Enum: "ACTIVATING_AUTOMATIC" "ACTIVATING_MANUAL" "ACTIVATING_MANUAL_LICENSE_TEXT_PROVIDED"

The operation to perform:

  • ACTIVATING_AUTOMATIC: Trigger automatic reactivation via F5 license server (async)
  • ACTIVATING_MANUAL: Trigger manual reactivation, regenerates dossier (sync)
  • ACTIVATING_MANUAL_LICENSE_TEXT_PROVIDED: Complete manual activation with provided license text (sync)
licenseText
string

License text obtained from F5 license server. Required when status is ACTIVATING_MANUAL_LICENSE_TEXT_PROVIDED. The user obtains this by submitting the dossier to the F5 license server UI.

Responses

200

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)
202

License offering reactivation initiated. Returned for asynchronous operation:

  • ACTIVATING_AUTOMATIC: Returns task reference for polling

Poll the taskLink to check the status of the reactivation operation.

400

Bad request - invalid status, missing license text, or operation not allowed

401

Unauthorized

404

License pool or offering not found

500

Internal server error

patch/api/provisioning/v1/licensing/pool/regkey/licenses/{poolId}/offerings/{regKey}
/api/api/provisioning/v1/licensing/pool/regkey/licenses/{poolId}/offerings/{regKey}
/api/provisioning/v1/api/provisioning/v1/licensing/pool/regkey/licenses/{poolId}/offerings/{regKey}
/api/v1/fleet/upgrade/api/provisioning/v1/licensing/pool/regkey/licenses/{poolId}/offerings/{regKey}
/api/provisioning/v1/licensing/pool/regkey/licenses/{poolId}/offerings/{regKey}

Request samples

Content type
application/json
Example
Copy
Expand all Collapse all
{
  • "status": "ACTIVATING_AUTOMATIC"
}

Response samples

Content type
application/json
Example
Copy
Expand all Collapse all
{}

Delete license offering from the pool

Deletes a specific license offering from the pool. If the license has already been granted to a member, returns 400 error.

Authorizations:
path Parameters
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

Responses

204

License offering deleted successfully

400

Bad request - license has been granted to a device

401

Unauthorized

404

License offering not found

500

Internal server error

delete/api/provisioning/v1/licensing/pool/regkey/licenses/{poolId}/offerings/{regKey}
/api/api/provisioning/v1/licensing/pool/regkey/licenses/{poolId}/offerings/{regKey}
/api/provisioning/v1/api/provisioning/v1/licensing/pool/regkey/licenses/{poolId}/offerings/{regKey}
/api/v1/fleet/upgrade/api/provisioning/v1/licensing/pool/regkey/licenses/{poolId}/offerings/{regKey}
/api/provisioning/v1/licensing/pool/regkey/licenses/{poolId}/offerings/{regKey}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "code": 400,
  • "message": "The license U5939-99933-49705-74523-4841009 has been granted to a device"
}

License Members

Operations for managing license assignments to BIG-IP devices

Assign license offering to member

Assign a license from the pool to a specific BIG-IP device member

Authorizations:
path Parameters
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

Request Body schema: application/json
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

Responses

202

License assignment initiated (async operation)

400

Bad request - invalid parameters, no available licenses, or license already granted

401

Unauthorized

404

License pool or offering not found

500

Internal server error

post/api/provisioning/v1/licensing/pool/regkey/licenses/{poolId}/offerings/{regKey}/members
/api/api/provisioning/v1/licensing/pool/regkey/licenses/{poolId}/offerings/{regKey}/members
/api/provisioning/v1/api/provisioning/v1/licensing/pool/regkey/licenses/{poolId}/offerings/{regKey}/members
/api/v1/fleet/upgrade/api/provisioning/v1/licensing/pool/regkey/licenses/{poolId}/offerings/{regKey}/members
/api/provisioning/v1/licensing/pool/regkey/licenses/{poolId}/offerings/{regKey}/members

Request samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "deviceAddress": "192.168.1.100",
  • "deviceUsername": "admin",
  • "devicePassword": "admin"
}

Response samples

Content type
application/json

Get all license offering members

Retrieves all members (BIG-IP devices) that have been assigned licenses from a specific offering

Authorizations:
path Parameters
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

Responses

200

List of license members retrieved successfully

401

Unauthorized

404

License pool or offering not found

500

Internal server error

get/api/provisioning/v1/licensing/pool/regkey/licenses/{poolId}/offerings/{regKey}/members
/api/api/provisioning/v1/licensing/pool/regkey/licenses/{poolId}/offerings/{regKey}/members
/api/provisioning/v1/api/provisioning/v1/licensing/pool/regkey/licenses/{poolId}/offerings/{regKey}/members
/api/v1/fleet/upgrade/api/provisioning/v1/licensing/pool/regkey/licenses/{poolId}/offerings/{regKey}/members
/api/provisioning/v1/licensing/pool/regkey/licenses/{poolId}/offerings/{regKey}/members

Response samples

Content type
application/json
Copy
Expand all Collapse all
{}

Revoke license from member

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.

Authorizations:
path Parameters
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

query Parameters
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.

Request Body schema: application/json
deviceUsername
required
string

Username for BIG-IP device authentication

devicePassword
required
string

Password for BIG-IP device authentication

Responses

204

License successfully revoked from the device

400

Bad request - revocation failed

401

Unauthorized

404

License member not found

500

Internal server error

delete/api/provisioning/v1/licensing/pool/regkey/licenses/{poolId}/offerings/{regKey}/members/{memberId}
/api/api/provisioning/v1/licensing/pool/regkey/licenses/{poolId}/offerings/{regKey}/members/{memberId}
/api/provisioning/v1/api/provisioning/v1/licensing/pool/regkey/licenses/{poolId}/offerings/{regKey}/members/{memberId}
/api/v1/fleet/upgrade/api/provisioning/v1/licensing/pool/regkey/licenses/{poolId}/offerings/{regKey}/members/{memberId}
/api/provisioning/v1/licensing/pool/regkey/licenses/{poolId}/offerings/{regKey}/members/{memberId}

Request samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "deviceUsername": "admin",
  • "devicePassword": "admin"
}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "error": "string",
  • "code": "string"
}

Reactivating license key on member

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.

Authorizations:
path Parameters
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

Request Body schema: application/json
deviceUsername
string

Username for BIG-IP device authentication

devicePassword
string

Password for BIG-IP device authentication

Responses

202

License member update initiated (async operation)

400

Bad request - invalid input or update failed

401

Unauthorized

404

License member not found

500

Internal server error

patch/api/provisioning/v1/licensing/pool/regkey/licenses/{poolId}/offerings/{regKey}/members/{memberId}
/api/api/provisioning/v1/licensing/pool/regkey/licenses/{poolId}/offerings/{regKey}/members/{memberId}
/api/provisioning/v1/api/provisioning/v1/licensing/pool/regkey/licenses/{poolId}/offerings/{regKey}/members/{memberId}
/api/v1/fleet/upgrade/api/provisioning/v1/licensing/pool/regkey/licenses/{poolId}/offerings/{regKey}/members/{memberId}
/api/provisioning/v1/licensing/pool/regkey/licenses/{poolId}/offerings/{regKey}/members/{memberId}

Request samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "deviceUsername": "admin",
  • "devicePassword": "admin"
}

Response samples

Content type
application/json

Tasks

Operations for tracking async task status

List all tasks

Retrieves a paginated list of all async tasks with optional filtering. Useful for monitoring and debugging async operations.

Authorizations:
query Parameters
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

Responses

200

List of tasks retrieved successfully

400

Bad request - invalid filter parameters

401

Unauthorized

500

Internal server error

get/api/provisioning/v1/licensing/pool/tasks
/api/api/provisioning/v1/licensing/pool/tasks
/api/provisioning/v1/api/provisioning/v1/licensing/pool/tasks
/api/v1/fleet/upgrade/api/provisioning/v1/licensing/pool/tasks
/api/provisioning/v1/licensing/pool/tasks

Response samples

Content type
application/json
Copy
Expand all Collapse all
{}

Get task status by ID

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.

Authorizations:
path Parameters
taskId
required
string <uuid>
Example: d4e5f6a7-b8c9-0123-defg-456789abcdef

UUID of the task to retrieve

Responses

200

Task status retrieved successfully

401

Unauthorized

404

Task not found

500

Internal server error

get/api/provisioning/v1/licensing/pool/tasks/{taskId}
/api/api/provisioning/v1/licensing/pool/tasks/{taskId}
/api/provisioning/v1/api/provisioning/v1/licensing/pool/tasks/{taskId}
/api/v1/fleet/upgrade/api/provisioning/v1/licensing/pool/tasks/{taskId}
/api/provisioning/v1/licensing/pool/tasks/{taskId}

Response samples

Content type
application/json
Example
Copy
Expand all Collapse all
{}

Workflows

Workflow template definitions (type + executionMode + default config)

List workflow templates

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.

Authorizations:
query Parameters
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"

Responses

200

List of workflow templates

400

Invalid request

get/api/provisioning/v1/workflows
/api/api/provisioning/v1/workflows
/api/provisioning/v1/api/provisioning/v1/workflows
/api/v1/fleet/upgrade/api/provisioning/v1/workflows
/api/provisioning/v1/workflows

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "items":
    [
    ],
  • "total": 1,
  • "page": 1,
  • "limit": 50
}

Get a workflow template

Returns a single workflow template by ID including type, execution mode, versioning metadata, and default configuration.

Authorizations:
path Parameters
workflowId
required
string <uuid>

Responses

200

Workflow template

404

Resource not found

get/api/provisioning/v1/workflows/{workflowId}
/api/api/provisioning/v1/workflows/{workflowId}
/api/provisioning/v1/api/provisioning/v1/workflows/{workflowId}
/api/v1/fleet/upgrade/api/provisioning/v1/workflows/{workflowId}
/api/provisioning/v1/workflows/{workflowId}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "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"
}

Jobs

Configured runtime instances of a Workflow

Bulk delete jobs

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.

Authorizations:
Request Body schema: application/json
job_ids
required
Array of strings <uuid> [ 1 .. 100 ] items

List of job IDs to delete (1–100 items)

Responses

200

Bulk delete results (partial success possible)

400

Invalid request

post/api/provisioning/v1/jobs/bulk-delete
/api/api/provisioning/v1/jobs/bulk-delete
/api/provisioning/v1/api/provisioning/v1/jobs/bulk-delete
/api/v1/fleet/upgrade/api/provisioning/v1/jobs/bulk-delete
/api/provisioning/v1/jobs/bulk-delete

Request samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "job_ids":
    [
    ]
}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "results":
    [
    ]
}

List jobs for a workflow

Lists runtime Jobs created from a workflow template. Jobs represent environment- or tenant-specific instantiations of the template. Supports status filtering and pagination.

Authorizations:
path Parameters
workflowId
required
string <uuid>
query Parameters
page
integer >= 1
Default: 1
limit
integer [ 1 .. 200 ]
Default: 50
status
string
Enum: "PENDING" "READY" "ACTIVE" "RUNNING" "PAUSED" "INACTIVE" "ERROR" "DELETING"

Responses

200

List of jobs

404

Resource not found

get/api/provisioning/v1/workflows/{workflowId}/jobs
/api/api/provisioning/v1/workflows/{workflowId}/jobs
/api/provisioning/v1/api/provisioning/v1/workflows/{workflowId}/jobs
/api/v1/fleet/upgrade/api/provisioning/v1/workflows/{workflowId}/jobs
/api/provisioning/v1/workflows/{workflowId}/jobs

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "items":
    [
    ],
  • "total": 1,
  • "page": 1,
  • "limit": 50
}

Create a job (runtime instance of a workflow)

Creates a new runtime Job under a workflow template. Job-level config overrides are merged with template defaultConfig to produce effectiveConfig used during execution.

Authorizations:
path Parameters
workflowId
required
string <uuid>
Request Body schema: application/json
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)

Responses

201

Job created

400

Invalid request

404

Resource not found

post/api/provisioning/v1/workflows/{workflowId}/jobs
/api/api/provisioning/v1/workflows/{workflowId}/jobs
/api/provisioning/v1/api/provisioning/v1/workflows/{workflowId}/jobs
/api/v1/fleet/upgrade/api/provisioning/v1/workflows/{workflowId}/jobs
/api/provisioning/v1/workflows/{workflowId}/jobs

Request samples

Content type
application/json
Example
Copy
Expand all Collapse all
{
  • "type": "AUTO_SCALE",
  • "name": "tenant-a-autoscale",
  • "status": "READY",
  • "config":
    {
    }
}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "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"
}

Get a job

Returns one Job including resolved configuration (effectiveConfig), lifecycle status, and runtime/schedule state when applicable.

Authorizations:
path Parameters
workflowId
required
string <uuid>
jobId
required
string <uuid>

Responses

200

Job

404

Resource not found

get/api/provisioning/v1/workflows/{workflowId}/jobs/{jobId}
/api/api/provisioning/v1/workflows/{workflowId}/jobs/{jobId}
/api/provisioning/v1/api/provisioning/v1/workflows/{workflowId}/jobs/{jobId}
/api/v1/fleet/upgrade/api/provisioning/v1/workflows/{workflowId}/jobs/{jobId}
/api/provisioning/v1/workflows/{workflowId}/jobs/{jobId}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "id": "114ca9f9-88a3-49e1-92f2-757d7fedde98",
  • "workflowId": "b7e6a4ae-4cf9-4ad4-b8f9-9b5347300d73",
  • "name": "tenant-a-autoscale",
  • "type": "AUTO_SCALE",
  • "status": "ACTIVE",
  • "config":
    {
    },
  • "runtime":
    {
    },
  • "createdAt": "2026-05-18T11:00:00.000Z",
  • "updatedAt": "2026-05-18T11:10:00.000Z"
}

Partially update a job config

Not allowed while a CONTINUOUS job is ACTIVE or an ON_DEMAND execution is RUNNING.

Authorizations:
path Parameters
workflowId
required
string <uuid>
jobId
required
string <uuid>
Request Body schema: application/json
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)

Responses

200

Updated job

400

Invalid request

404

Resource not found

409

Conflict with current resource state

patch/api/provisioning/v1/workflows/{workflowId}/jobs/{jobId}
/api/api/provisioning/v1/workflows/{workflowId}/jobs/{jobId}
/api/provisioning/v1/api/provisioning/v1/workflows/{workflowId}/jobs/{jobId}
/api/v1/fleet/upgrade/api/provisioning/v1/workflows/{workflowId}/jobs/{jobId}
/api/provisioning/v1/workflows/{workflowId}/jobs/{jobId}

Request samples

Content type
application/json
Example
Copy
Expand all Collapse all
{
  • "name": "tenant-a-autoscale-prod"
}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "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"
}

Delete a job

Terminates any running executions before deletion.

Authorizations:
path Parameters
workflowId
required
string <uuid>
jobId
required
string <uuid>

Responses

204

Deleted

404

Resource not found

409

Conflict with current resource state

delete/api/provisioning/v1/workflows/{workflowId}/jobs/{jobId}
/api/api/provisioning/v1/workflows/{workflowId}/jobs/{jobId}
/api/provisioning/v1/api/provisioning/v1/workflows/{workflowId}/jobs/{jobId}
/api/v1/fleet/upgrade/api/provisioning/v1/workflows/{workflowId}/jobs/{jobId}
/api/provisioning/v1/workflows/{workflowId}/jobs/{jobId}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "code": "string",
  • "message": "string",
  • "details":
    [
    ]
}

List autoscale devices for a job

Returns all autoscale device rows associated with the job.

Authorizations:
path Parameters
workflowId
required
string <uuid>
jobId
required
string <uuid>

Responses

200

Devices for the job

400

Invalid request

404

Resource not found

get/api/provisioning/v1/workflows/{workflowId}/jobs/{jobId}/devices
/api/api/provisioning/v1/workflows/{workflowId}/jobs/{jobId}/devices
/api/provisioning/v1/api/provisioning/v1/workflows/{workflowId}/jobs/{jobId}/devices
/api/v1/fleet/upgrade/api/provisioning/v1/workflows/{workflowId}/jobs/{jobId}/devices
/api/provisioning/v1/workflows/{workflowId}/jobs/{jobId}/devices

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "items":
    [
    ],
  • "totalItems": 1
}

Lifecycle - Continuous

Lifecycle control for CONTINUOUS jobs (activate / pause / resume)

Activate a CONTINUOUS job

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.

Authorizations:
path Parameters
workflowId
required
string <uuid>
jobId
required
string <uuid>

Responses

200

Job activated

400

Invalid request

404

Resource not found

409

Conflict with current resource state

post/api/provisioning/v1/workflows/{workflowId}/jobs/{jobId}/activate
/api/api/provisioning/v1/workflows/{workflowId}/jobs/{jobId}/activate
/api/provisioning/v1/api/provisioning/v1/workflows/{workflowId}/jobs/{jobId}/activate
/api/v1/fleet/upgrade/api/provisioning/v1/workflows/{workflowId}/jobs/{jobId}/activate
/api/provisioning/v1/workflows/{workflowId}/jobs/{jobId}/activate

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "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"
}

Pause a CONTINUOUS job

Halts automatic evaluation for CONTINUOUS execution. No new activities are triggered while paused. In-flight activity processing may complete before full pause takes effect.

Authorizations:
path Parameters
workflowId
required
string <uuid>
jobId
required
string <uuid>

Responses

200

Job paused

404

Resource not found

409

Conflict with current resource state

post/api/provisioning/v1/workflows/{workflowId}/jobs/{jobId}/pause
/api/api/provisioning/v1/workflows/{workflowId}/jobs/{jobId}/pause
/api/provisioning/v1/api/provisioning/v1/workflows/{workflowId}/jobs/{jobId}/pause
/api/v1/fleet/upgrade/api/provisioning/v1/workflows/{workflowId}/jobs/{jobId}/pause
/api/provisioning/v1/workflows/{workflowId}/jobs/{jobId}/pause

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "message": "job paused"
}

Resume a paused CONTINUOUS job

Resumes automatic evaluation for a previously paused CONTINUOUS job. New activities can be generated again based on policy/signal conditions.

Authorizations:
path Parameters
workflowId
required
string <uuid>
jobId
required
string <uuid>

Responses

200

Job resumed

404

Resource not found

409

Conflict with current resource state

post/api/provisioning/v1/workflows/{workflowId}/jobs/{jobId}/resume
/api/api/provisioning/v1/workflows/{workflowId}/jobs/{jobId}/resume
/api/provisioning/v1/api/provisioning/v1/workflows/{workflowId}/jobs/{jobId}/resume
/api/v1/fleet/upgrade/api/provisioning/v1/workflows/{workflowId}/jobs/{jobId}/resume
/api/provisioning/v1/workflows/{workflowId}/jobs/{jobId}/resume

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "message": "job resumed"
}

Lifecycle - OnDemand

Lifecycle control for ON_DEMAND jobs (run / cancel / schedule)

Signals

External signals that trigger execution (alerts, desired-size overrides)

Send a generic signal to a job

Generic signal endpoint for job-level signaling.

Examples:

  • CONTINUOUS jobs: metric/policy signals that may trigger an activity.
  • ON_DEMAND jobs: external events that may trigger or annotate execution behavior. Signal interpretation is workflow-type specific and implemented by the corresponding handler.
Authorizations:
path Parameters
workflowId
required
string <uuid>
jobId
required
string <uuid>
Request Body schema: application/json
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)

Responses

202

Signal accepted and processing enqueued

400

Invalid request

404

Resource not found

409

Conflict with current resource state

post/api/provisioning/v1/workflows/{workflowId}/jobs/{jobId}/signal
/api/api/provisioning/v1/workflows/{workflowId}/jobs/{jobId}/signal
/api/provisioning/v1/api/provisioning/v1/workflows/{workflowId}/jobs/{jobId}/signal
/api/v1/fleet/upgrade/api/provisioning/v1/workflows/{workflowId}/jobs/{jobId}/signal
/api/provisioning/v1/workflows/{workflowId}/jobs/{jobId}/signal

Request samples

Content type
application/json
Example
Copy
Expand all Collapse all
{
  • "signalId": "sig-20260518-001",
  • "signalType": "METRIC_ALERT",
  • "source": "monitoring-pipeline",
  • "reason": "CPU threshold exceeded",
  • "labels":
    {
    },
  • "payload":
    {
    }
}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "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"
}

Observability

Executions, activities, activity steps, and audit events

List jobs across all workflows

Global jobs listing endpoint across workflow templates. Useful for platform views, tenant operations dashboards, and central search.

Authorizations:
query Parameters
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"

Responses

200

List of jobs

400

Invalid request

get/api/provisioning/v1/jobs
/api/api/provisioning/v1/jobs
/api/provisioning/v1/api/provisioning/v1/jobs
/api/v1/fleet/upgrade/api/provisioning/v1/jobs
/api/provisioning/v1/jobs

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "items":
    [
    ],
  • "pagination":
    {
    }
}

List executions across all workflows and jobs

Global execution timeline across the entire platform. Supports filtering by workflow, job, execution mode, trigger, and time window.

Authorizations:
query Parameters
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>

Responses

200

List of executions

400

Invalid request

get/api/provisioning/v1/executions
/api/api/provisioning/v1/executions
/api/provisioning/v1/api/provisioning/v1/executions
/api/v1/fleet/upgrade/api/provisioning/v1/executions
/api/provisioning/v1/executions

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "items":
    [
    ],
  • "total": 2,
  • "page": 1,
  • "limit": 50
}

List executions for a job

Execution cardinality depends on the parent workflow executionMode:

  • CONTINUOUS: at most one long-lived execution exists for a job.
  • ON_DEMAND: one execution per trigger (user/schedule/system), returned as history. Use filters (status, trigger, since, until) for timeline and troubleshooting use-cases.
Authorizations:
path Parameters
workflowId
required
string <uuid>
jobId
required
string <uuid>
query Parameters
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>

Responses

200

List of executions

404

Resource not found

get/api/provisioning/v1/workflows/{workflowId}/jobs/{jobId}/executions
/api/api/provisioning/v1/workflows/{workflowId}/jobs/{jobId}/executions
/api/provisioning/v1/api/provisioning/v1/workflows/{workflowId}/jobs/{jobId}/executions
/api/v1/fleet/upgrade/api/provisioning/v1/workflows/{workflowId}/jobs/{jobId}/executions
/api/provisioning/v1/workflows/{workflowId}/jobs/{jobId}/executions

Response samples

Content type
application/json
Example
Copy
Expand all Collapse all
{
  • "items":
    [
    ],
  • "total": 1,
  • "page": 1,
  • "limit": 50
}

Get execution detail including activity summary

Returns execution metadata and activity-level summary.

  • For CONTINUOUS jobs, this is the single long-lived execution that accumulates many activities.
  • For ON_DEMAND jobs, this is one triggered run.

Use /executions/{executionId}/activities to page through activities. This endpoint is summary-focused and avoids returning unbounded activity step payloads.

Authorizations:
path Parameters
workflowId
required
string <uuid>
jobId
required
string <uuid>
executionId
required
string <uuid>

Responses

200

Execution detail with activity summary

404

Resource not found

get/api/provisioning/v1/workflows/{workflowId}/jobs/{jobId}/executions/{executionId}
/api/api/provisioning/v1/workflows/{workflowId}/jobs/{jobId}/executions/{executionId}
/api/provisioning/v1/api/provisioning/v1/workflows/{workflowId}/jobs/{jobId}/executions/{executionId}
/api/v1/fleet/upgrade/api/provisioning/v1/workflows/{workflowId}/jobs/{jobId}/executions/{executionId}
/api/provisioning/v1/workflows/{workflowId}/jobs/{jobId}/executions/{executionId}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "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":
    {
    },
  • "latestActivityId": "0c4208f9-f7bf-4891-a2a3-df08eb7720d8",
  • "latestActivityType": "SCALE_OUT"
}

List activities for an execution

Activities are action units inside an execution. Examples: SCALE_OUT, SCALE_IN, UPGRADE, PRECHECK, POSTCHECK.

  • CONTINUOUS: this list grows over the life of the single execution.
  • ON_DEMAND: this list typically contains one or a small fixed set of activities. Use this endpoint to inspect action-level outcomes before drilling into step-level detail.
Authorizations:
path Parameters
workflowId
required
string <uuid>
jobId
required
string <uuid>
executionId
required
string <uuid>
query Parameters
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>

Responses

200

List of activities

404

Resource not found

get/api/provisioning/v1/workflows/{workflowId}/jobs/{jobId}/executions/{executionId}/activities
/api/api/provisioning/v1/workflows/{workflowId}/jobs/{jobId}/executions/{executionId}/activities
/api/provisioning/v1/api/provisioning/v1/workflows/{workflowId}/jobs/{jobId}/executions/{executionId}/activities
/api/v1/fleet/upgrade/api/provisioning/v1/workflows/{workflowId}/jobs/{jobId}/executions/{executionId}/activities
/api/provisioning/v1/workflows/{workflowId}/jobs/{jobId}/executions/{executionId}/activities

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "items":
    [
    ],
  • "total": 2,
  • "page": 1,
  • "limit": 50
}

Get activity detail including steps

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.

Authorizations:
path Parameters
workflowId
required
string <uuid>
jobId
required
string <uuid>
executionId
required
string <uuid>
activityId
required
string <uuid>

Responses

200

Activity with steps

404

Resource not found

get/api/provisioning/v1/workflows/{workflowId}/jobs/{jobId}/executions/{executionId}/activities/{activityId}
/api/api/provisioning/v1/workflows/{workflowId}/jobs/{jobId}/executions/{executionId}/activities/{activityId}
/api/provisioning/v1/api/provisioning/v1/workflows/{workflowId}/jobs/{jobId}/executions/{executionId}/activities/{activityId}
/api/v1/fleet/upgrade/api/provisioning/v1/workflows/{workflowId}/jobs/{jobId}/executions/{executionId}/activities/{activityId}
/api/provisioning/v1/workflows/{workflowId}/jobs/{jobId}/executions/{executionId}/activities/{activityId}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "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":
    [
    ]
}

List audit events for a job

Returns audit/event stream entries related to the Job lifecycle and execution processing. Events are useful for timeline reconstruction and correlation across components.

Authorizations:
path Parameters
workflowId
required
string <uuid>
jobId
required
string <uuid>
query Parameters
page
integer >= 1
Default: 1
limit
integer [ 1 .. 200 ]
Default: 50
source
string
eventType
string
correlationId
string <uuid>
since
string <date-time>

Responses

200

List of events

404

Resource not found

get/api/provisioning/v1/workflows/{workflowId}/jobs/{jobId}/events
/api/api/provisioning/v1/workflows/{workflowId}/jobs/{jobId}/events
/api/provisioning/v1/api/provisioning/v1/workflows/{workflowId}/jobs/{jobId}/events
/api/v1/fleet/upgrade/api/provisioning/v1/workflows/{workflowId}/jobs/{jobId}/events
/api/provisioning/v1/workflows/{workflowId}/jobs/{jobId}/events

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "items":
    [
    ],
  • "total": 1,
  • "page": 1,
  • "limit": 50
}

Authentication

User login

Authorizations:
Request Body schema: application/json
username
required
string

Username for authentication

password
required
string <password>

User password

Responses

200

Login successful

400

Invalid request

401

Invalid credentials

500

Internal server error

post/api/auth/login
/api/api/auth/login
/api/provisioning/v1/api/auth/login
/api/v1/fleet/upgrade/api/auth/login
/api/auth/login

Request samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "username": "admin",
  • "password": "password123"
}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
  • "token_type": "Bearer",
  • "expires_in": 900
}

Refresh access token

Refreshes the access token using the refresh token stored in httpOnly cookie. No request body required - refresh token is read from cookie.

Authorizations:

Responses

200

Token refreshed successfully

401

Invalid or expired refresh token

500

Internal server error

post/api/auth/refresh
/api/api/auth/refresh
/api/provisioning/v1/api/auth/refresh
/api/v1/fleet/upgrade/api/auth/refresh
/api/auth/refresh

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
  • "token_type": "Bearer",
  • "expires_in": 900
}

Logout user (revoke refresh token)

Logs out the user by revoking the refresh token stored in httpOnly cookie. No request body required - refresh token is read from cookie.

Authorizations:

Responses

200

Logout successful

500

Internal server error

post/api/auth/logout
/api/api/auth/logout
/api/provisioning/v1/api/auth/logout
/api/v1/fleet/upgrade/api/auth/logout
/api/auth/logout

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "message": "Operation successful"
}

Logout from all devices

Authorizations:

Responses

200

Logged out from all devices successfully

401

Unauthorized

500

Internal server error

post/api/auth/logout-all
/api/api/auth/logout-all
/api/provisioning/v1/api/auth/logout-all
/api/v1/fleet/upgrade/api/auth/logout-all
/api/auth/logout-all

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "message": "Operation successful"
}

Change user password

Change user password using username and password. Can be called either with or without Bearer token:

  • With token: User can change their own password
  • Without token: Authentication is done with username and password (for expired password scenarios)
Authorizations:
Request Body schema: application/json
username
required
string

Username

old_password
required
string <password>

Current password

new_password
required
string <password>

New password

Responses

200

Password changed successfully

400

Invalid request

401

Invalid credentials or unauthorized

500

Internal server error

post/api/auth/change-password
/api/api/auth/change-password
/api/provisioning/v1/api/auth/change-password
/api/v1/fleet/upgrade/api/auth/change-password
/api/auth/change-password

Request samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "username": "admin",
  • "old_password": "oldpassword123",
  • "new_password": "newpassword123"
}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "message": "Operation successful"
}

Initiate OIDC login

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.

Authorizations:
Request Body schema:
idp_type
string
Enum: "ldap" "saml"

Set to 'ldap' or 'saml' to show organization-scoped identity providers on the login page.

Responses

302

Redirect to configured identity provider authorization endpoint

400

Invalid idp_type value or malformed request body

500

Internal server error

501

OIDC not configured

post/api/auth/login/external
/api/api/auth/login/external
/api/provisioning/v1/api/auth/login/external
/api/v1/fleet/upgrade/api/auth/login/external
/api/auth/login/external

Request samples

Content type
Copy
idp_type=ldap

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "error": "string"
}

OIDC authorization callback

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.

Authorizations:
query Parameters
code
required
string

Authorization code returned by the identity provider

state
required
string

State parameter for CSRF protection

Responses

302

Redirect to React SPA after successful token exchange

400

Missing or invalid parameters

500

Internal server error

501

OIDC not configured

get/api/auth/callback
/api/api/auth/callback
/api/provisioning/v1/api/auth/callback
/api/v1/fleet/upgrade/api/auth/callback
/api/auth/callback

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "error": "string",
  • "code": "string"
}

Retrieve external login session token

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.

Authorizations:

Responses

200

Session token retrieved successfully

401

No valid session cookie or session expired

500

Internal server error

501

OIDC not configured

get/api/auth/session
/api/api/auth/session
/api/provisioning/v1/api/auth/session
/api/v1/fleet/upgrade/api/auth/session
/api/auth/session

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "access_token": "string",
  • "id_token": "string",
  • "refresh_token": "string",
  • "token_type": "Bearer",
  • "expires_in": 0
}

IdentityProviders

List identity providers

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.

Authorizations:

Responses

200

Success

500

An unexpected error occurred.

get/api/auth/identity-providers
/api/api/auth/identity-providers
/api/provisioning/v1/api/auth/identity-providers
/api/v1/fleet/upgrade/api/auth/identity-providers
/api/auth/identity-providers

Response samples

Content type
application/json
Example
Copy
Expand all Collapse all
{
  • "providers":
    [
    ],
  • "local_login_enabled": true,
  • "total_count": 0
}

Create LDAP provider

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.

Authorizations:
Request Body schema: application/json
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)

Responses

201

LDAP provider created inactive.

400

Invalid request

409

Provider name already exists

500

An unexpected error occurred.

503

External identity provider management is not configured

post/api/auth/identity-providers/ldap
/api/api/auth/identity-providers/ldap
/api/provisioning/v1/api/auth/identity-providers/ldap
/api/v1/fleet/upgrade/api/auth/identity-providers/ldap
/api/auth/identity-providers/ldap

Request samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "name": "Corporate LDAP",
  • "enabled": true,
  • "ldap_config":
    {
    }
}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "id": "string",
  • "name": "string",
  • "provider_type": "ldap",
  • "enabled": true,
  • "ldap_config":
    {
    },
  • "saml_config":
    {},
  • "created_at": "2026-07-17T10:37:05Z",
  • "updated_at": "2026-07-17T10:37:05Z",
  • "last_sync": "2026-07-17T10:37:05Z"
}

Create SAML provider

Authorizations:
Request Body schema: application/json
name
required
string
enabled
boolean
Default: true
saml_config
required
object (SAMLConfig)

Responses

201

SAML provider created

400

Invalid request

409

Provider name already exists

500

An unexpected error occurred.

post/api/auth/identity-providers/saml
/api/api/auth/identity-providers/saml
/api/provisioning/v1/api/auth/identity-providers/saml
/api/v1/fleet/upgrade/api/auth/identity-providers/saml
/api/auth/identity-providers/saml

Request samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "name": "string",
  • "enabled": true,
  • "saml_config":
    {
    }
}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "id": "string",
  • "name": "string",
  • "provider_type": "ldap",
  • "enabled": true,
  • "ldap_config":
    {
    },
  • "saml_config":
    {},
  • "created_at": "2026-07-17T10:37:05Z",
  • "updated_at": "2026-07-17T10:37:05Z",
  • "last_sync": "2026-07-17T10:37:05Z"
}

Update LDAP provider (full replace)

Authorizations:
path Parameters
id
required
string
Request Body schema: application/json
name
required
string [ 1 .. 200 ] characters

1-200 characters. Must be unique.

enabled
boolean
ldap_config
required
object (LDAPConfig)

Responses

200

Success

400

Invalid request

404

Resource not found

500

An unexpected error occurred.

put/api/auth/identity-providers/ldap/{id}
/api/api/auth/identity-providers/ldap/{id}
/api/provisioning/v1/api/auth/identity-providers/ldap/{id}
/api/v1/fleet/upgrade/api/auth/identity-providers/ldap/{id}
/api/auth/identity-providers/ldap/{id}

Request samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "name": "Corporate LDAP",
  • "enabled": true,
  • "ldap_config":
    {
    }
}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "id": "string",
  • "name": "string",
  • "provider_type": "ldap",
  • "enabled": true,
  • "ldap_config":
    {
    },
  • "saml_config":
    {},
  • "created_at": "2026-07-17T10:37:05Z",
  • "updated_at": "2026-07-17T10:37:05Z",
  • "last_sync": "2026-07-17T10:37:05Z"
}

Update SAML provider (full replace)

Authorizations:
path Parameters
id
required
string
Request Body schema: application/json
name
required
string
enabled
boolean
saml_config
required
object (SAMLConfig)

Responses

200

Success

400

Invalid request

404

Resource not found

500

An unexpected error occurred.

put/api/auth/identity-providers/saml/{id}
/api/api/auth/identity-providers/saml/{id}
/api/provisioning/v1/api/auth/identity-providers/saml/{id}
/api/v1/fleet/upgrade/api/auth/identity-providers/saml/{id}
/api/auth/identity-providers/saml/{id}

Request samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "name": "string",
  • "enabled": true,
  • "saml_config":
    {
    }
}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "id": "string",
  • "name": "string",
  • "provider_type": "ldap",
  • "enabled": true,
  • "ldap_config":
    {
    },
  • "saml_config":
    {},
  • "created_at": "2026-07-17T10:37:05Z",
  • "updated_at": "2026-07-17T10:37:05Z",
  • "last_sync": "2026-07-17T10:37:05Z"
}

Validate provider config (without saving)

Authorizations:
Request Body schema: application/json
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)

Responses

200

Validation successful

400

Validation failed

500

An unexpected error occurred.

post/api/auth/identity-providers/validate
/api/api/auth/identity-providers/validate
/api/provisioning/v1/api/auth/identity-providers/validate
/api/v1/fleet/upgrade/api/auth/identity-providers/validate
/api/auth/identity-providers/validate

Request samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "provider_type": "ldap",
  • "provider_id": "string",
  • "ldap_config":
    {
    }
}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "status": "validation_success",
  • "error": "string",
  • "details":
    {
    }
}

Get identity provider by ID

Authorizations:
path Parameters
id
required
string

Responses

200

Success

404

Resource not found

500

An unexpected error occurred.

get/api/auth/identity-providers/{id}
/api/api/auth/identity-providers/{id}
/api/provisioning/v1/api/auth/identity-providers/{id}
/api/v1/fleet/upgrade/api/auth/identity-providers/{id}
/api/auth/identity-providers/{id}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "id": "string",
  • "name": "string",
  • "provider_type": "ldap",
  • "enabled": true,
  • "ldap_config":
    {
    },
  • "saml_config":
    {},
  • "created_at": "2026-07-17T10:37:06Z",
  • "updated_at": "2026-07-17T10:37:06Z",
  • "last_sync": "2026-07-17T10:37:06Z"
}

Delete identity provider

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

Authorizations:
path Parameters
id
required
string

Responses

200

Provider deleted successfully

404

Resource not found

409

Provider is still referenced by role mappings

500

An unexpected error occurred.

503

Unable to validate provider role mapping usage

delete/api/auth/identity-providers/{id}
/api/api/auth/identity-providers/{id}
/api/provisioning/v1/api/auth/identity-providers/{id}
/api/v1/fleet/upgrade/api/auth/identity-providers/{id}
/api/auth/identity-providers/{id}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "status": "success",
  • "message": "Identity provider 'corp-ldap' deleted successfully",
  • "id": "string"
}

Activate identity provider

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.

Authorizations:
path Parameters
id
required
string

Responses

200

Provider activated

404

Resource not found

409

Another LDAP provider is already active

500

An unexpected error occurred.

503

External identity provider management is not configured

post/api/auth/identity-providers/{id}/activate
/api/api/auth/identity-providers/{id}/activate
/api/provisioning/v1/api/auth/identity-providers/{id}/activate
/api/v1/fleet/upgrade/api/auth/identity-providers/{id}/activate
/api/auth/identity-providers/{id}/activate

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "id": "string",
  • "name": "string",
  • "provider_type": "ldap",
  • "enabled": true,
  • "ldap_config":
    {
    },
  • "saml_config":
    {},
  • "created_at": "2026-07-17T10:37:06Z",
  • "updated_at": "2026-07-17T10:37:06Z",
  • "last_sync": "2026-07-17T10:37:06Z"
}

Deactivate identity provider

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.

Authorizations:
path Parameters
id
required
string

Responses

200

Provider deactivated successfully

404

Resource not found

500

An unexpected error occurred.

503

External identity provider management is not configured

post/api/auth/identity-providers/{id}/deactivate
/api/api/auth/identity-providers/{id}/deactivate
/api/provisioning/v1/api/auth/identity-providers/{id}/deactivate
/api/v1/fleet/upgrade/api/auth/identity-providers/{id}/deactivate
/api/auth/identity-providers/{id}/deactivate

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "id": "string",
  • "name": "string",
  • "provider_type": "ldap",
  • "enabled": true,
  • "ldap_config":
    {
    },
  • "saml_config":
    {},
  • "created_at": "2026-07-17T10:37:06Z",
  • "updated_at": "2026-07-17T10:37:06Z",
  • "last_sync": "2026-07-17T10:37:06Z"
}

Configuration

Get current AI provider configuration

Authorizations:

Responses

200

Current AI provider configuration

204

No configuration found

500

Internal server error

get/api/ai-integrations/llm-provider
/api/api/ai-integrations/llm-provider
/api/provisioning/v1/api/ai-integrations/llm-provider
/api/v1/fleet/upgrade/api/ai-integrations/llm-provider
/api/ai-integrations/llm-provider

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "provider_name": "string",
  • "base_url": "string",
  • "model": "string",
  • "ca": "string",
  • "skip_tls_verify": true
}

Save AI provider configuration

Authorizations:
Request Body schema: application/json
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

Responses

200

Configuration saved successfully

400

Validation error

500

Internal server error

post/api/ai-integrations/llm-provider
/api/api/ai-integrations/llm-provider
/api/provisioning/v1/api/ai-integrations/llm-provider
/api/v1/fleet/upgrade/api/ai-integrations/llm-provider
/api/ai-integrations/llm-provider

Request samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "provider_name": "string",
  • "api_token": "string",
  • "base_url": "string",
  • "model": "string",
  • "ca": "string",
  • "skip_tls_verify": true
}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "status": "validation_success"
}

Delete AI provider configuration

Authorizations:

Responses

200

Configuration deleted successfully

404

Configuration not found

500

Internal server error

delete/api/ai-integrations/llm-provider
/api/api/ai-integrations/llm-provider
/api/provisioning/v1/api/ai-integrations/llm-provider
/api/v1/fleet/upgrade/api/ai-integrations/llm-provider
/api/ai-integrations/llm-provider

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "status": "validation_success"
}

Get current AIDF configuration

Authorizations:

Responses

200

Current AIDF configuration

204

No configuration found

500

Internal server error

get/api/ai-integrations/aidf
/api/api/ai-integrations/aidf
/api/provisioning/v1/api/ai-integrations/aidf
/api/v1/fleet/upgrade/api/ai-integrations/aidf
/api/ai-integrations/aidf

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "endpoint": "string",
  • "tenant_id": "string",
  • "data_types":
    [
    ]
}

Save AIDF configuration

Authorizations:
Request Body schema: application/json
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.

Responses

200

Configuration saved successfully

400

Validation error

500

Internal server error

post/api/ai-integrations/aidf
/api/api/ai-integrations/aidf
/api/provisioning/v1/api/ai-integrations/aidf
/api/v1/fleet/upgrade/api/ai-integrations/aidf
/api/ai-integrations/aidf

Request samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "endpoint": "string",
  • "tenant_id": "string",
  • "tenant_token": "string",
  • "data_types":
    [
    ]
}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "status": "validation_success"
}

Delete AIDF configuration

Authorizations:

Responses

200

Configuration deleted successfully

404

Configuration not found

500

Internal server error

delete/api/ai-integrations/aidf
/api/api/ai-integrations/aidf
/api/provisioning/v1/api/ai-integrations/aidf
/api/v1/fleet/upgrade/api/ai-integrations/aidf
/api/ai-integrations/aidf

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "status": "validation_success"
}

AIDF Insights

Get AIDF security insights

Fetches security insights from AIDF including alerts, scoring, and device findings. Requires AIDF to be configured. Returns sample data if AIDF endpoint fails.

Authorizations:
query Parameters
start_time
string <date-time>
end_time
string <date-time>

Responses

200

AIDF insights retrieved successfully (flattened feed items)

400

Bad request or AIDF not configured

500

Internal server error

get/api/ai-integrations/aidf/insights
/api/api/ai-integrations/aidf/insights
/api/provisioning/v1/api/ai-integrations/aidf/insights
/api/v1/fleet/upgrade/api/ai-integrations/aidf/insights
/api/ai-integrations/aidf/insights

Response samples

Content type
application/json
Copy
Expand all Collapse all
[
  • {
    }
]

Get AIDF workload classifications

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.

Authorizations:
query Parameters
start_time
string <date-time>
end_time
string <date-time>

Responses

200

AIDF classifications retrieved successfully (flattened feed items)

400

Bad request or AIDF not configured

500

Internal server error

get/api/ai-integrations/aidf/classifications
/api/api/ai-integrations/aidf/classifications
/api/provisioning/v1/api/ai-integrations/aidf/classifications
/api/v1/fleet/upgrade/api/ai-integrations/aidf/classifications
/api/ai-integrations/aidf/classifications

Response samples

Content type
application/json
Copy
Expand all Collapse all
[
  • {
    }
]

Telemetry Configuration

List all telemetry types

Get all available telemetry types and their enabled status for AIDF forwarding

Authorizations:

Responses

200

List of all telemetry types with their configuration

500

Internal server error

get/api/telemetry/types
/api/api/telemetry/types
/api/provisioning/v1/api/telemetry/types
/api/v1/fleet/upgrade/api/telemetry/types
/api/telemetry/types

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "types":
    [
    ]
}

Update enabled telemetry types

Bulk update which telemetry types are enabled for AIDF forwarding. Triggers OTEL configuration reload.

Authorizations:
Request Body schema: application/json
enabled_types
required
Array of strings >= 0 items
Items Enum: "API_Discovery" "Application_Telemetry" "Anomaly_Detection"

List of telemetry types to enable (all others will be disabled)

Responses

200

Telemetry types updated successfully

400

Validation error - invalid telemetry type names

500

Internal server error

put/api/telemetry/types
/api/api/telemetry/types
/api/provisioning/v1/api/telemetry/types
/api/v1/fleet/upgrade/api/telemetry/types
/api/telemetry/types

Request samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "enabled_types":
    [
    ]
}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "status": "validation_success"
}

Get specific telemetry type configuration

Get the configuration for a specific telemetry type

Authorizations:
path Parameters
type
required
string
Enum: "API_Discovery" "Application_Telemetry" "Anomaly_Detection"

Telemetry type name (API_Discovery, Application_Telemetry, or Anomaly_Detection)

Responses

200

Telemetry type configuration

400

Invalid telemetry type name

404

Telemetry type not found

500

Internal server error

get/api/telemetry/types/{type}
/api/api/telemetry/types/{type}
/api/provisioning/v1/api/telemetry/types/{type}
/api/v1/fleet/upgrade/api/telemetry/types/{type}
/api/telemetry/types/{type}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "name": "API_Discovery",
  • "enabled": true,
  • "description": "API discovery telemetry from iRule",
  • "updated_at": "2026-05-13T10:30:00Z"
}

Feature Flags

Get all feature flags

Authorizations:

Responses

200

List of all feature flags

500

Internal server error

get/api/featureflags/list
/api/api/featureflags/list
/api/provisioning/v1/api/featureflags/list
/api/v1/fleet/upgrade/api/featureflags/list
/api/featureflags/list

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "property1":
    {
    },
  • "property2":
    {
    }
}

Update feature flag

Authorizations:
Request Body schema: application/json
name
required
string
enabled
required
boolean

Responses

200

Feature flag updated successfully

400

Bad request

500

Internal server error

post/api/featureflags/update
/api/api/featureflags/update
/api/provisioning/v1/api/featureflags/update
/api/v1/fleet/upgrade/api/featureflags/update
/api/featureflags/update

Request samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "name": "string",
  • "enabled": true
}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{ }

Onboarding

Get onboarding status

Returns the status of components including license, AI integrations, and device onboarding

Authorizations:

Responses

200

Onboarding status retrieved successfully

500

Internal server error

get/api/onboarding/status
/api/api/onboarding/status
/api/provisioning/v1/api/onboarding/status
/api/v1/fleet/upgrade/api/onboarding/status
/api/onboarding/status

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "license_status": "ACTIVE",
  • "custom_llm_integration": "NOT_CONFIGURED",
  • "f5_aidf_integration": "NOT_CONFIGURED",
  • "devices_onboarded": "NOT_CONFIGURED"
}

Update onboarding status

Update onboarding status fields. All fields are optional - only provided fields will be updated.

Authorizations:
Request Body schema: application/json
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

Responses

200

Onboarding status updated successfully

400

Invalid request body

500

Internal server error

patch/api/onboarding/status
/api/api/onboarding/status
/api/provisioning/v1/api/onboarding/status
/api/v1/fleet/upgrade/api/onboarding/status
/api/onboarding/status

Request samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "license_status": "ACTIVE",
  • "custom_llm_integration": "NOT_CONFIGURED",
  • "f5_aidf_integration": "NOT_CONFIGURED",
  • "devices_onboarded": "NOT_CONFIGURED"
}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "license_status": "ACTIVE",
  • "custom_llm_integration": "NOT_CONFIGURED",
  • "f5_aidf_integration": "NOT_CONFIGURED",
  • "devices_onboarded": "NOT_CONFIGURED"
}

System

Get system role and node information

Returns whether the current device is running in primary or standby mode based on environment variables

Authorizations:

Responses

200

System role information retrieved successfully

500

Internal server error

get/api/system/role
/api/api/system/role
/api/provisioning/v1/api/system/role
/api/v1/fleet/upgrade/api/system/role
/api/system/role

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "node_id": "standby-node-uuid",
  • "node_name": "node-2",
  • "status": "active",
  • "role": "primary"
}

Storage

Get storage allocation configuration

Retrieve the current storage allocation configuration including percentages, TTL settings, and cleanup thresholds

Authorizations:

Responses

200

Storage configuration retrieved successfully

500

Internal server error

get/api/storage/config
/api/api/storage/config
/api/provisioning/v1/api/storage/config
/api/v1/fleet/upgrade/api/storage/config
/api/storage/config

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "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-07-17T10:37:06Z",
  • "updated_at": "2026-07-17T10:37:06Z"
}

Update storage allocation configuration

Update storage allocation percentages, TTL settings, and cleanup thresholds

Authorizations:
Request Body schema: application/json
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.

Responses

200

Storage configuration updated successfully

400

Invalid request

500

Internal server error

post/api/storage/config
/api/api/storage/config
/api/provisioning/v1/api/storage/config
/api/v1/fleet/upgrade/api/storage/config
/api/storage/config

Request samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "clickhouse_allocation_percent": 70.5,
  • "victoriametrics_allocation_percent": 29.5,
  • "cleanup_threshold_percent": 80,
  • "cleanup_data_percent": 70
}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "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-07-17T10:37:06Z",
  • "updated_at": "2026-07-17T10:37:06Z"
}

List storage targets

Returns all configured storage targets

Authorizations:

Responses

200

List of storage targets

500

Failed to list storage targets

get/api/system/storage-targets
/api/api/system/storage-targets
/api/provisioning/v1/api/system/storage-targets
/api/v1/fleet/upgrade/api/system/storage-targets
/api/system/storage-targets

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "success": true,
  • "data":
    [
    ]
}

Create storage target

Create a new NFS or SMB storage target

Authorizations:
Request Body schema: application/json
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)

Responses

201

Storage target created

400

Invalid request

500

Failed to create the storage target

503

Vault is unavailable and the credential could not be stored

post/api/system/storage-targets
/api/api/system/storage-targets
/api/provisioning/v1/api/system/storage-targets
/api/v1/fleet/upgrade/api/system/storage-targets
/api/system/storage-targets

Request samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "name": "string",
  • "storage_type": "nfs",
  • "server": "string",
  • "share_path": "string",
  • "mount_options": "string",
  • "username": "string",
  • "password": "string"
}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "success": true,
  • "data":
    {
    }
}

Get storage target

Authorizations:
path Parameters
id
required
string <uuid>

Responses

200

Storage target details

404

Not found

get/api/system/storage-targets/{id}
/api/api/system/storage-targets/{id}
/api/provisioning/v1/api/system/storage-targets/{id}
/api/v1/fleet/upgrade/api/system/storage-targets/{id}
/api/system/storage-targets/{id}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "success": true,
  • "data":
    {
    }
}

Update storage target

Authorizations:
path Parameters
id
required
string <uuid>
Request Body schema: application/json
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.

Responses

200

Storage target updated

400

Invalid request

404

Storage target not found

500

Failed to update the storage target

503

Vault is unavailable and the credential could not be updated

put/api/system/storage-targets/{id}
/api/api/system/storage-targets/{id}
/api/provisioning/v1/api/system/storage-targets/{id}
/api/v1/fleet/upgrade/api/system/storage-targets/{id}
/api/system/storage-targets/{id}

Request samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "name": "string",
  • "storage_type": "nfs",
  • "server": "string",
  • "share_path": "string",
  • "mount_options": "string",
  • "username": "string",
  • "password": "string",
  • "is_default": true
}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "success": true,
  • "data":
    {
    }
}

Delete storage target

Authorizations:
path Parameters
id
required
string <uuid>

Responses

200

Storage target deleted

400

Cannot delete default local target

404

Storage target not found

500

Failed to delete the storage target

delete/api/system/storage-targets/{id}
/api/api/system/storage-targets/{id}
/api/provisioning/v1/api/system/storage-targets/{id}
/api/v1/fleet/upgrade/api/system/storage-targets/{id}
/api/system/storage-targets/{id}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "success": true,
  • "data":
    {
    }
}

Test storage connectivity

Mount, write test file, unmount. Returns success with latency.

Authorizations:
path Parameters
id
required
string <uuid>

Responses

200

Test result

404

Storage target not found

503

Platform manager is unavailable

post/api/system/storage-targets/{id}/test
/api/api/system/storage-targets/{id}/test
/api/provisioning/v1/api/system/storage-targets/{id}/test
/api/v1/fleet/upgrade/api/system/storage-targets/{id}/test
/api/system/storage-targets/{id}/test

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "success": true,
  • "data":
    {
    }
}

Test storage connectivity without creating

Tests connectivity to a storage target using the provided config. Does not save anything.

Authorizations:
Request Body schema: application/json
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)

Responses

200

Test result

400

Invalid request

503

Platform manager is unavailable

post/api/system/storage-targets/test
/api/api/system/storage-targets/test
/api/provisioning/v1/api/system/storage-targets/test
/api/v1/fleet/upgrade/api/system/storage-targets/test
/api/system/storage-targets/test

Request samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "storage_type": "local",
  • "server": "string",
  • "share_path": "string",
  • "mount_options": "string",
  • "username": "string",
  • "password": "string"
}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "success": true,
  • "data":
    {
    }
}

Validators

Validate AI provider configuration

Authorizations:
Request Body schema: application/json
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

Responses

200

Validation successful

400

Validation failed

500

Internal server error

post/api/validate/inference_provider
/api/api/validate/inference_provider
/api/provisioning/v1/api/validate/inference_provider
/api/v1/fleet/upgrade/api/validate/inference_provider
/api/validate/inference_provider

Request samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "provider_name": "string",
  • "api_token": "string",
  • "base_url": "string",
  • "model": "string",
  • "ca": "string",
  • "skip_tls_verify": true
}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "status": "validation_success",
  • "error": "string"
}

Validate AIDF configuration

Authorizations:
Request Body schema: application/json
endpoint
required
string
tenant_id
required
string
tenant_token
required
string

Responses

200

Validation successful

400

Validation failed

500

Internal server error

post/api/validate/aidf
/api/api/validate/aidf
/api/provisioning/v1/api/validate/aidf
/api/v1/fleet/upgrade/api/validate/aidf
/api/validate/aidf

Request samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "endpoint": "string",
  • "tenant_id": "string",
  • "tenant_token": "string"
}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "status": "validation_success",
  • "error": "string"
}

License

Check license service health status

Returns the health status of the license service including activation status, storage metrics, and license information

Authorizations:

Responses

200

License service is healthy

503

Service unavailable

get/api/license/health
/api/api/license/health
/api/provisioning/v1/api/license/health
/api/v1/fleet/upgrade/api/license/health
/api/license/health

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "status":
    {
    },
  • "license":
    {
    },
  • "storage":
    {
    }
}

Activate license

Activates the license for the service and returns activation status, digital asset ID, entitlements, and subscription details

Authorizations:
Request Body schema: application/json
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

Responses

200

License activated successfully

400

Invalid activation request

401

Unauthorized activation attempt

500

Internal server error

503

Service unavailable - unable to connect to licensing server

post/api/license/activate
/api/api/license/activate
/api/provisioning/v1/api/license/activate
/api/v1/fleet/upgrade/api/license/activate
/api/license/activate

Request samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "jwt": "your-jwt-token",
  • "customId": "string",
  • "modeOfOperation": "connected"
}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "status": "success",
  • "message": "License activated successfully",
  • "digitalAssetId": "DA-12345-67890",
  • "licenseStatus": "Active",
  • "activatedAt": "2025-12-03T07:18:11Z",
  • "hostLicense":
    {
    },
  • "entitlements":
    [
    ],
  • "subscriptionType": "trial",
  • "expiryDate": "2026-11-29T00:00:32Z"
}

Deactivate license

Deactivates the license for the service and returns deactivation status

Authorizations:

Responses

200

License deactivated successfully

400

Invalid deactivation request

401

Unauthorized deactivation attempt

500

Internal server error

post/api/license/deactivate
/api/api/license/deactivate
/api/provisioning/v1/api/license/deactivate
/api/v1/fleet/upgrade/api/license/deactivate
/api/license/deactivate

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "status": "success",
  • "message": "License deactivated successfully",
  • "digitalAssetId": "string",
  • "licenseStatus": "Terminated",
  • "deactivatedAt": "2026-07-17T10:37:06Z"
}

Download license report

Downloads the license report in disconnected mode (base64 encoded)

Authorizations:

Responses

200

License report downloaded successfully

403

Operation not allowed in connected mode

500

Internal server error

get/api/license/report
/api/api/license/report
/api/provisioning/v1/api/license/report
/api/v1/fleet/upgrade/api/license/report
/api/license/report

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "report": "eyJyZXBvcnROYW1lIjoibXktcmVwb3J0IiwidGVsZW1ldHJ5UmVjb3JkcyI6W119"
}

Verify license report

Verifies a signed license report acknowledgment from F5 TEEM in disconnected mode

Authorizations:
Request Body schema: application/json
manifest
required
string

Base64 encoded signed report acknowledgment from F5 TEEM

Responses

200

Report verification initiated successfully

400

Invalid request body

403

Operation not allowed in connected mode

500

Internal server error

put/api/license/report
/api/api/license/report
/api/provisioning/v1/api/license/report
/api/v1/fleet/upgrade/api/license/report
/api/license/report

Request samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "manifest": "eyJzaWduZWRBY2siOiJ0ZXN0In0="
}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "message": "Operation successful"
}

Get license entitlements

Retrieves license entitlements from llm sdk

Authorizations:

Responses

200

License entitlements retrieved successfully

500

Internal server error

get/api/license/entitlements
/api/api/license/entitlements
/api/provisioning/v1/api/license/entitlements
/api/v1/fleet/upgrade/api/license/entitlements
/api/license/entitlements

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "entitlements": { },
  • "status": "success"
}

AddDataCenter

Add a new data center to F5 Insights fleet.

Authorizations:
Request Body schema: application/json

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.

Responses

200

Data center added successfully.

400

Validation error.

500

Internal server error.

post/api/device-management/data-centers
/api/api/device-management/data-centers
/api/provisioning/v1/api/device-management/data-centers
/api/v1/fleet/upgrade/api/device-management/data-centers
/api/device-management/data-centers

Request samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "id": "string",
  • "name": "string"
}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "message": "Data center added successfully",
  • "id": "string"
}

GetDataCenters

Retrieve all Data Centers.

Authorizations:

Responses

200

List of all data centers.

400

Validation error.

500

Internal server error.

get/api/device-management/data-centers
/api/api/device-management/data-centers
/api/provisioning/v1/api/device-management/data-centers
/api/v1/fleet/upgrade/api/device-management/data-centers
/api/device-management/data-centers

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "data_centers":
    [
    ]
}

SaveGlobalSettings

Save or update global settings for BIG-IP devices.

Authorizations:
Request Body schema: application/json

Global settings configuration.

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

tls_enabled
boolean
Default: false
ca
string <uuid>

CA certificate UUID from trust store

modules
object

Responses

200

Global settings saved successfully.

400

Validation error.

500

Internal server error.

post/api/device-management/global-settings
/api/api/device-management/global-settings
/api/provisioning/v1/api/device-management/global-settings
/api/v1/fleet/upgrade/api/device-management/global-settings
/api/device-management/global-settings

Request samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "retention": "string",
  • "port": 1,
  • "collection_interval": 1,
  • "tls_enabled": false,
  • "ca": "string",
  • "modules":
    {
    }
}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "error": "string",
  • "code": "string"
}

GetGlobalSettings

Retrieve current global settings.

Authorizations:

Responses

200

Global settings fetched successfully.

get/api/device-management/global-settings
/api/api/device-management/global-settings
/api/provisioning/v1/api/device-management/global-settings
/api/v1/fleet/upgrade/api/device-management/global-settings
/api/device-management/global-settings

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "retention": "string",
  • "port": 1,
  • "collection_interval": 1,
  • "tls_enabled": false,
  • "ca": "string",
  • "modules":
    {
    }
}

AddTrustStore

certificate for TLS connections.

Authorizations:
Request Body schema: application/json

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

Responses

201

Certificate uploaded successfully.

400

Validation error.

500

Internal server error.

post/api/device-management/trust-store
/api/api/device-management/trust-store
/api/provisioning/v1/api/device-management/trust-store
/api/v1/fleet/upgrade/api/device-management/trust-store
/api/device-management/trust-store

Request samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "name": "string",
  • "description": "string",
  • "certificate_content": "string"
}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "id": "string",
  • "name": "string",
  • "description": "string",
  • "created_at": "2026-07-17T10:37:06Z"
}

GetTrustStores

Retrieve all certificates from trust store.

Authorizations:

Responses

200

List of certificates.

500

Internal server error.

get/api/device-management/trust-store
/api/api/device-management/trust-store
/api/provisioning/v1/api/device-management/trust-store
/api/v1/fleet/upgrade/api/device-management/trust-store
/api/device-management/trust-store

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "trust_stores":
    [
    ]
}

GetTrustStore

Retrieve a specific certificate by ID from trust store.

Authorizations:
path Parameters
id
required
string <uuid>

Certificate ID

Responses

200

Certificate details.

404

Certificate not found.

500

Internal server error.

get/api/device-management/trust-store/{id}
/api/api/device-management/trust-store/{id}
/api/provisioning/v1/api/device-management/trust-store/{id}
/api/v1/fleet/upgrade/api/device-management/trust-store/{id}
/api/device-management/trust-store/{id}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "id": "string",
  • "name": "string",
  • "description": "string",
  • "certificate_content": "string",
  • "created_at": "2026-07-17T10:37:06Z",
  • "last_modified": "2026-07-17T10:37:06Z"
}

DeleteTrustStore

Delete a certificate from trust store.

Authorizations:
path Parameters
id
required
string <uuid>

Certificate ID

Responses

200

Certificate deleted successfully.

404

Certificate not found.

409

Certificate is in use by devices.

500

Internal server error.

delete/api/device-management/trust-store/{id}
/api/api/device-management/trust-store/{id}
/api/provisioning/v1/api/device-management/trust-store/{id}
/api/v1/fleet/upgrade/api/device-management/trust-store/{id}
/api/device-management/trust-store/{id}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "message": "Operation successful"
}

AddDevice

Onboard a device (BIG-IP or F5OS) to F5 Insights fleet. The deviceType field selects the kind; defaults to bigip.

Authorizations:
Request Body schema: application/json

Details of the device to be added (BIG-IP or F5OS).

deviceType
required
string
Default: "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

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

Responses

200

Device added successfully.

400

Validation error.

500

Internal server error.

post/api/device-management/devices
/api/api/device-management/devices
/api/provisioning/v1/api/device-management/devices
/api/v1/fleet/upgrade/api/device-management/devices
/api/device-management/devices

Request samples

Content type
application/json
Example
Copy
Expand all Collapse all
{
  • "deviceType": "bigip",
  • "retention": "string",
  • "port": 1,
  • "collection_interval": 1,
  • "tls_enabled": false,
  • "ca": "string",
  • "modules":
    {
    },
  • "id": "string",
  • "alias_name": "string",
  • "description": "string",
  • "username": "string",
  • "password": "string",
  • "data_center": "string",
  • "endpoint": "string"
}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "message": "Device added successfully",
  • "id": "string"
}

GetDevices

Retrieve all devices (BIG-IP and F5OS) onboarded to F5 Insights with pagination and filtering support. Use deviceType to filter by kind.

Authorizations:
query Parameters
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.

Responses

200

List of devices (BIG-IP and F5OS) with pagination metadata.

400

Validation error.

500

Internal server error.

get/api/device-management/devices
/api/api/device-management/devices
/api/provisioning/v1/api/device-management/devices
/api/v1/fleet/upgrade/api/device-management/devices
/api/device-management/devices

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "devices":
    [
    ],
  • "pagination":
    {
    }
}

UpdateDevice

Updates configuration of a device (BIG-IP or F5OS). The device kind is auto-detected from the id.

Authorizations:
path Parameters
id
required
string

Unique identifier of the device to update (BIG-IP or F5OS).

Request Body schema: application/json

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

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

Responses

200

Device updated successfully.

400

Validation error.

500

Internal server error.

put/api/device-management/devices/{id}
/api/api/device-management/devices/{id}
/api/provisioning/v1/api/device-management/devices/{id}
/api/v1/fleet/upgrade/api/device-management/devices/{id}
/api/device-management/devices/{id}

Request samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "retention": "string",
  • "port": 1,
  • "collection_interval": 1,
  • "tls_enabled": false,
  • "ca": "string",
  • "modules":
    {
    },
  • "id": "string",
  • "alias_name": "string",
  • "description": "string",
  • "username": "string",
  • "password": "string",
  • "data_center": "string",
  • "endpoint": "string"
}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "message": "Device updated successfully",
  • "id": "string"
}

PartialUpdateDevice

Partially updates configuration of a device (BIG-IP or F5OS). Only provided fields are updated. The device kind is auto-detected from the id.

Authorizations:
path Parameters
id
required
string

Unique identifier of the device to update (BIG-IP or F5OS).

Request Body schema: application/json

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
tls_enabled
boolean
ca
string <uuid>
modules
object

Responses

200

Device partially updated successfully.

400

Validation error.

404

Device not found.

500

Internal server error.

patch/api/device-management/devices/{id}
/api/api/device-management/devices/{id}
/api/provisioning/v1/api/device-management/devices/{id}
/api/v1/fleet/upgrade/api/device-management/devices/{id}
/api/device-management/devices/{id}

Request samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "alias_name": "string",
  • "description": "string",
  • "username": "string",
  • "password": "string",
  • "endpoint": "string",
  • "data_center": "string",
  • "retention": "string",
  • "collection_interval": 1,
  • "tls_enabled": true,
  • "ca": "string",
  • "modules":
    {
    }
}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "retention": "string",
  • "port": 0,
  • "collection_interval": 1,
  • "tls_enabled": false,
  • "ca": "string",
  • "modules":
    {
    },
  • "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-07-17T10:37:06Z"
}

GetDevice

Fetch details of a specific device (BIG-IP or F5OS). The device kind is auto-detected from the id.

Authorizations:
path Parameters
id
required
string

Unique identifier of the device (BIG-IP or F5OS).

Responses

200

Device fetched successfully.

400

Validation error.

500

Internal server error.

get/api/device-management/devices/{id}
/api/api/device-management/devices/{id}
/api/provisioning/v1/api/device-management/devices/{id}
/api/v1/fleet/upgrade/api/device-management/devices/{id}
/api/device-management/devices/{id}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "retention": "string",
  • "port": 0,
  • "collection_interval": 1,
  • "tls_enabled": false,
  • "ca": "string",
  • "modules":
    {
    },
  • "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-07-17T10:37:06Z"
}

DeleteDevice

Delete a specific device (BIG-IP or F5OS). The device kind is auto-detected from the id.

Authorizations:
path Parameters
id
required
string

Unique identifier of the device (BIG-IP or F5OS).

Responses

200

Device deleted successfully.

400

Validation error.

500

Internal server error.

delete/api/device-management/devices/{id}
/api/api/device-management/devices/{id}
/api/provisioning/v1/api/device-management/devices/{id}
/api/v1/fleet/upgrade/api/device-management/devices/{id}
/api/device-management/devices/{id}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "retention": "string",
  • "port": 1,
  • "collection_interval": 1,
  • "tls_enabled": false,
  • "ca": "string",
  • "modules":
    {
    },
  • "id": "string",
  • "alias_name": "string",
  • "description": "string",
  • "username": "string",
  • "password": "string",
  • "data_center": "string",
  • "endpoint": "string"
}

RefreshDevice

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.

Authorizations:
path Parameters
id
required
string

Unique identifier of the device to refresh (F5OS).

Responses

200

Device refreshed successfully.

400

Validation error (e.g. refresh not supported for BIG-IP devices).

404

Device not found.

500

Internal server error.

post/api/device-management/devices/{id}/refresh
/api/api/device-management/devices/{id}/refresh
/api/provisioning/v1/api/device-management/devices/{id}/refresh
/api/v1/fleet/upgrade/api/device-management/devices/{id}/refresh
/api/device-management/devices/{id}/refresh

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "retention": "string",
  • "port": 0,
  • "collection_interval": 1,
  • "tls_enabled": false,
  • "ca": "string",
  • "modules":
    {
    },
  • "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-07-17T10:37:06Z"
}

GetDevicesByAutoScaleGroup

Retrieve all the devices that belong to a specific auto-scale group.

Authorizations:
path Parameters
autoScaleGroupId
required
string <uuid>

Unique identifier of the auto-scale group.

query Parameters
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)

Responses

200

List of devices belonging to the specified auto-scale group.

400

Validation error.

404

Auto-scale group not found.

500

Internal server error.

get/api/device-management/devices/auto-scale/{autoScaleGroupId}
/api/api/device-management/devices/auto-scale/{autoScaleGroupId}
/api/provisioning/v1/api/device-management/devices/auto-scale/{autoScaleGroupId}
/api/v1/fleet/upgrade/api/device-management/devices/auto-scale/{autoScaleGroupId}
/api/device-management/devices/auto-scale/{autoScaleGroupId}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "devices":
    [
    ],
  • "pagination":
    {
    }
}

ValidateDeviceConnection

Validate connectivity from F5 Insights to a BIG-IP device using provided credentials.

Authorizations:
Request Body schema: application/json

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

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

Responses

200

Connection validation result.

400

Validation error.

500

Internal server error.

post/api/device-management/devices/connection/validate
/api/api/device-management/devices/connection/validate
/api/provisioning/v1/api/device-management/devices/connection/validate
/api/v1/fleet/upgrade/api/device-management/devices/connection/validate
/api/device-management/devices/connection/validate

Request samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "retention": "string",
  • "port": 1,
  • "collection_interval": 1,
  • "tls_enabled": false,
  • "ca": "string",
  • "modules":
    {
    },
  • "id": "string",
  • "alias_name": "string",
  • "description": "string",
  • "username": "string",
  • "password": "string",
  • "data_center": "string",
  • "endpoint": "string"
}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "reachable": true,
  • "authenticated": true,
  • "message": "string"
}

List IP pools

Retrieve IP pools with optional pagination.

Authorizations:
query Parameters
$top
integer >= 1

Maximum number of records to return.

$skip
integer >= 0

Number of records to skip before returning results.

Responses

200

A paginated collection of IP pools.

500

An unexpected error occurred.

get/api/provisioning/v1/ip-pools
/api/api/provisioning/v1/ip-pools
/api/provisioning/v1/api/provisioning/v1/ip-pools
/api/v1/fleet/upgrade/api/provisioning/v1/ip-pools
/api/provisioning/v1/ip-pools

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "items":
    [
    ],
  • "totalItems": 0
}

Create IP pool

Create a new IP pool with CIDR definition and address ranges.

Authorizations:
Request Body schema: application/json
name
required
string [ 1 .. 255 ] characters ^[a-zA-Z_][a-zA-Z0-9_.\-]*$

Pool name. Rules:

  • Minimum length: 1 character
  • Maximum length: 255 characters
  • First character must be a letter (a-z, A-Z) or underscore (_)
  • Remaining characters may be letters, digits, hyphens (-), underscores (_), or dots (.)
  • The following reserved words are not allowed: all, delete, disable, enable, help, list, none, show, None
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

Responses

201

IP pool created successfully.

400

Invalid request

500

An unexpected error occurred.

post/api/provisioning/v1/ip-pools
/api/api/provisioning/v1/ip-pools
/api/provisioning/v1/api/provisioning/v1/ip-pools
/api/v1/fleet/upgrade/api/provisioning/v1/ip-pools
/api/provisioning/v1/ip-pools

Request samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "name": "string",
  • "description": "string",
  • "addressFamily": "IPv4",
  • "address": "10.0.0.0/24",
  • "gateway": "string",
  • "addressRanges":
    [
    ]
}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "id": "string",
  • "name": "string",
  • "description": "string",
  • "addressFamily": "IPv4",
  • "address": "10.0.0.0/24",
  • "gateway": "10.0.0.1",
  • "addressRanges":
    [
    ],
  • "totalAddressCount": 0,
  • "createdAt": "2026-07-17T10:37:06Z",
  • "updatedAt": "2026-07-17T10:37:06Z",
  • "deletedAt": "2026-07-17T10:37:06Z"
}

Get IP pool

Fetch an IP pool by its identifier.

Authorizations:
path Parameters
poolId
required
string <uuid>

UUID of the IP pool.

Responses

200

IP pool details.

400

Invalid request

404

Resource not found

500

An unexpected error occurred.

get/api/provisioning/v1/ip-pools/{poolId}
/api/api/provisioning/v1/ip-pools/{poolId}
/api/provisioning/v1/api/provisioning/v1/ip-pools/{poolId}
/api/v1/fleet/upgrade/api/provisioning/v1/ip-pools/{poolId}
/api/provisioning/v1/ip-pools/{poolId}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "id": "string",
  • "name": "string",
  • "description": "string",
  • "addressFamily": "IPv4",
  • "address": "10.0.0.0/24",
  • "gateway": "10.0.0.1",
  • "addressRanges":
    [
    ],
  • "totalAddressCount": 0,
  • "createdAt": "2026-07-17T10:37:06Z",
  • "updatedAt": "2026-07-17T10:37:06Z",
  • "deletedAt": "2026-07-17T10:37:06Z"
}

Update IP pool

Replace the configuration of an existing IP pool.

Authorizations:
path Parameters
poolId
required
string <uuid>

UUID of the IP pool.

Request Body schema: application/json
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:

  • Minimum length: 1 character
  • Maximum length: 255 characters
  • First character must be a letter (a-z, A-Z) or underscore (_)
  • Remaining characters may be letters, digits, hyphens (-), underscores (_), or dots (.)
  • The following reserved words are not allowed: all, delete, disable, enable, help, list, none, show, None
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

Responses

200

Updated IP pool.

400

Invalid request

404

Resource not found

500

An unexpected error occurred.

put/api/provisioning/v1/ip-pools/{poolId}
/api/api/provisioning/v1/ip-pools/{poolId}
/api/provisioning/v1/api/provisioning/v1/ip-pools/{poolId}
/api/v1/fleet/upgrade/api/provisioning/v1/ip-pools/{poolId}
/api/provisioning/v1/ip-pools/{poolId}

Request samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "id": "string",
  • "name": "string",
  • "description": "string",
  • "addressFamily": "IPv4",
  • "address": "10.0.0.0/24",
  • "gateway": "string",
  • "addressRanges":
    [
    ]
}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "id": "string",
  • "name": "string",
  • "description": "string",
  • "addressFamily": "IPv4",
  • "address": "10.0.0.0/24",
  • "gateway": "10.0.0.1",
  • "addressRanges":
    [
    ],
  • "totalAddressCount": 0,
  • "createdAt": "2026-07-17T10:37:06Z",
  • "updatedAt": "2026-07-17T10:37:06Z",
  • "deletedAt": "2026-07-17T10:37:06Z"
}

Delete IP pool

Permanently remove an IP pool. The operation fails if the pool still has active leases.

Authorizations:
path Parameters
poolId
required
string <uuid>

UUID of the IP pool.

Responses

204

Pool deleted successfully.

400

Invalid request

409

Pool cannot be deleted because of active leases or validation errors.

500

An unexpected error occurred.

delete/api/provisioning/v1/ip-pools/{poolId}
/api/api/provisioning/v1/ip-pools/{poolId}
/api/provisioning/v1/api/provisioning/v1/ip-pools/{poolId}
/api/v1/fleet/upgrade/api/provisioning/v1/ip-pools/{poolId}
/api/provisioning/v1/ip-pools/{poolId}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "code": "string",
  • "message": "string",
  • "details":
    [
    ]
}

Allocate IP address

Allocate an IP address from the specified pool. The request is idempotent on allocationId.

Authorizations:
path Parameters
poolId
required
string <uuid>

UUID of the IP pool.

Request Body schema: application/json
allocationId
required
string

Identifier used to make allocation idempotent.

leaseTags
Array of objects (Tag)

Optional labels applied to the resulting lease.

Responses

200

Allocation succeeded and returns the resulting lease.

400

Invalid request

409

Allocation failed due to conflicts such as exhausted address space.

500

An unexpected error occurred.

post/api/provisioning/v1/ip-pools/{poolId}/allocate
/api/api/provisioning/v1/ip-pools/{poolId}/allocate
/api/provisioning/v1/api/provisioning/v1/ip-pools/{poolId}/allocate
/api/v1/fleet/upgrade/api/provisioning/v1/ip-pools/{poolId}/allocate
/api/provisioning/v1/ip-pools/{poolId}/allocate

Request samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "allocationId": "string",
  • "leaseTags":
    [
    ]
}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "lease":
    {
    },
  • "poolId": "string",
  • "allocationId": "string"
}

Release IP address(es)

Release one or more leases that match the provided criteria (allocation ID, address, or tags).

Authorizations:
path Parameters
poolId
required
string <uuid>

UUID of the IP pool.

Request Body schema: application/json
Any of
  • object
  • object
  • object
allocationId
required
string Nullable
address
string Nullable
leaseTags
Array of objects (Tag)

Responses

200

Leases successfully released (if any matched the filters).

400

Invalid request

500

An unexpected error occurred.

post/api/provisioning/v1/ip-pools/{poolId}/release
/api/api/provisioning/v1/ip-pools/{poolId}/release
/api/provisioning/v1/api/provisioning/v1/ip-pools/{poolId}/release
/api/v1/fleet/upgrade/api/provisioning/v1/ip-pools/{poolId}/release
/api/provisioning/v1/ip-pools/{poolId}/release

Request samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "allocationId": "string",
  • "address": "10.0.0.10",
  • "leaseTags":
    [
    ]
}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "items":
    [
    ],
  • "totalItems": 0
}

List leases for pool

Retrieve all active leases belonging to the specified pool.

Authorizations:
path Parameters
poolId
required
string <uuid>

UUID of the IP pool.

Responses

200

Collection of leases for the pool.

400

Invalid request

500

An unexpected error occurred.

get/api/provisioning/v1/ip-pools/{poolId}/leases
/api/api/provisioning/v1/ip-pools/{poolId}/leases
/api/provisioning/v1/api/provisioning/v1/ip-pools/{poolId}/leases
/api/v1/fleet/upgrade/api/provisioning/v1/ip-pools/{poolId}/leases
/api/provisioning/v1/ip-pools/{poolId}/leases

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "items":
    [
    ],
  • "totalItems": 0
}

Get lease by ID

Retrieve a specific lease by its identifier.

Authorizations:
path Parameters
poolId
required
string <uuid>

UUID of the IP pool.

leaseId
required
string <uuid>

UUID of the IP lease.

Responses

200

Lease details.

400

Invalid request

404

Resource not found

500

An unexpected error occurred.

get/api/provisioning/v1/ip-pools/{poolId}/leases/{leaseId}
/api/api/provisioning/v1/ip-pools/{poolId}/leases/{leaseId}
/api/provisioning/v1/api/provisioning/v1/ip-pools/{poolId}/leases/{leaseId}
/api/v1/fleet/upgrade/api/provisioning/v1/ip-pools/{poolId}/leases/{leaseId}
/api/provisioning/v1/ip-pools/{poolId}/leases/{leaseId}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "id": "string",
  • "poolId": "string",
  • "address": "10.0.0.10",
  • "gateway": "string",
  • "allocationId": "string",
  • "deviceId": "string",
  • "leaseTags":
    [
    ],
  • "metadata": { },
  • "createdAt": "2026-07-17T10:37:06Z",
  • "updatedAt": "2026-07-17T10:37:06Z",
  • "deletedAt": "2026-07-17T10:37:06Z"
}

Release IP address(es) globally across all pools

Release one or more leases across all IP pools that match the provided allocation ID and optional lease tags.

Authorizations:
Request Body schema: application/json
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.

Responses

200

Leases successfully released (if any matched the criteria).

400

Invalid request

500

An unexpected error occurred.

post/api/provisioning/v1/ip-pools/release
/api/api/provisioning/v1/ip-pools/release
/api/provisioning/v1/api/provisioning/v1/ip-pools/release
/api/v1/fleet/upgrade/api/provisioning/v1/ip-pools/release
/api/provisioning/v1/ip-pools/release

Request samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "allocationId": "string",
  • "leaseTags":
    [
    ]
}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "items":
    [
    ],
  • "totalItems": 0
}

Create manual lease

Manually create a lease for a specific address in a pool. Validates address belongs to pool ranges and enforces uniqueness.

Authorizations:
Request Body schema: application/json
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

Responses

200

Lease created successfully.

400

Invalid request

409

Lease creation failed due to conflicts (address already allocated or allocationId in use).

500

An unexpected error occurred.

post/api/provisioning/v1/ip-pools/leases
/api/api/provisioning/v1/ip-pools/leases
/api/provisioning/v1/api/provisioning/v1/ip-pools/leases
/api/v1/fleet/upgrade/api/provisioning/v1/ip-pools/leases
/api/provisioning/v1/ip-pools/leases

Request samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "id": "string",
  • "poolId": "string",
  • "address": "10.0.0.10",
  • "gateway": "string",
  • "allocationId": "string",
  • "deviceId": "string",
  • "leaseTags":
    [
    ],
  • "metadata": { },
  • "createdAt": "2026-07-17T10:37:06Z",
  • "updatedAt": "2026-07-17T10:37:06Z",
  • "deletedAt": "2026-07-17T10:37:06Z"
}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "id": "string",
  • "poolId": "string",
  • "address": "10.0.0.10",
  • "gateway": "string",
  • "allocationId": "string",
  • "deviceId": "string",
  • "leaseTags":
    [
    ],
  • "metadata": { },
  • "createdAt": "2026-07-17T10:37:06Z",
  • "updatedAt": "2026-07-17T10:37:06Z",
  • "deletedAt": "2026-07-17T10:37:06Z"
}

Device Management

DeleteDataCenter

Delete a specific data center by its ID.

Authorizations:
path Parameters
id
required
string <uuid>

Unique identifier of the data center to delete.

Responses

200

Data center deleted successfully.

400

Validation error.

404

Data center not found.

409

Cannot delete data center with associated devices.

500

Internal server error.

delete/api/device-management/data-centers/{id}
/api/api/device-management/data-centers/{id}
/api/provisioning/v1/api/device-management/data-centers/{id}
/api/v1/fleet/upgrade/api/device-management/data-centers/{id}
/api/device-management/data-centers/{id}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "error": "string",
  • "code": "string"
}

GetDataCentersRegisteredDevices

Retrieve all data centers with their registered devices.

Authorizations:
query Parameters
deviceType
string
Default: "all"
Enum: "all" "bigip" "f5os"

Filter by device kind. One of all, bigip, f5os. Defaults to all.

Responses

200

List of all data centers with their devices.

500

Internal server error.

get/api/device-management/data-centers/devices
/api/api/device-management/data-centers/devices
/api/provisioning/v1/api/device-management/data-centers/devices
/api/v1/fleet/upgrade/api/device-management/data-centers/devices
/api/device-management/data-centers/devices

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "data_centers":
    [
    ],
  • "total_data_centers": 0,
  • "total_devices": 0
}

GetCurrentMigrationTask

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.

Authorizations:

Responses

200

Migration task information retrieved successfully

404

No migration tasks found

500

Internal server error

get/api/device-management/devices/migrate-ast
/api/api/device-management/devices/migrate-ast
/api/provisioning/v1/api/device-management/devices/migrate-ast
/api/v1/fleet/upgrade/api/device-management/devices/migrate-ast
/api/device-management/devices/migrate-ast

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "task_id": "123e4567-e89b-12d3-a456-426614174000",
  • "status": "INIT",
  • "message": "Migration task created successfully. Use the task_id to query status."
}

StartMigrationTask

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.

Authorizations:
Request Body schema: multipart/form-data

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)

Responses

202

Migration task created successfully. Use the returned task_id to query status.

400

Validation error in uploaded files.

409

A migration task is already in progress.

500

Internal server error.

post/api/device-management/devices/migrate-ast
/api/api/device-management/devices/migrate-ast
/api/provisioning/v1/api/device-management/devices/migrate-ast
/api/v1/fleet/upgrade/api/device-management/devices/migrate-ast
/api/device-management/devices/migrate-ast

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "task_id": "123e4567-e89b-12d3-a456-426614174000",
  • "status": "INIT",
  • "message": "Migration task created successfully. Use the task_id to query status."
}

GetMigrationStatus

Get the status of a device migration task including overall progress and individual device status.

Authorizations:
path Parameters
task_id
required
string <uuid>

The task ID returned from the migration request

query Parameters
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)

Responses

200

Migration status retrieved successfully

404

Task not found

500

Internal server error

get/api/device-management/devices/migrate-ast/status/{task_id}
/api/api/device-management/devices/migrate-ast/status/{task_id}
/api/provisioning/v1/api/device-management/devices/migrate-ast/status/{task_id}
/api/v1/fleet/upgrade/api/device-management/devices/migrate-ast/status/{task_id}
/api/device-management/devices/migrate-ast/status/{task_id}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "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":
    [
    ]
}

GetDeviceProgress

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.

Authorizations:
path Parameters
task_id
required
string <uuid>

The task ID returned from the migration request

query Parameters
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)

Responses

200

Device progress retrieved successfully

400

Invalid request parameters

404

Task not found

500

Internal server error

get/api/device-management/devices/migrate-ast/status/{task_id}/devices
/api/api/device-management/devices/migrate-ast/status/{task_id}/devices
/api/provisioning/v1/api/device-management/devices/migrate-ast/status/{task_id}/devices
/api/v1/fleet/upgrade/api/device-management/devices/migrate-ast/status/{task_id}/devices
/api/device-management/devices/migrate-ast/status/{task_id}/devices

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "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":
    [
    ]
}

Get staging CA certificates for a migration task

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.

Authorizations:
path Parameters
task_id
required
string <uuid>

The task ID returned from the migration request

query Parameters
page
integer >= 1
Default: 1
size
integer >= 1

Number of items per page.

Responses

200

CA bundle list retrieved successfully

400

Invalid request parameters

404

Task not found

500

Internal server error

get/api/device-management/devices/migrate-ast/status/{task_id}/ca-bundles
/api/api/device-management/devices/migrate-ast/status/{task_id}/ca-bundles
/api/provisioning/v1/api/device-management/devices/migrate-ast/status/{task_id}/ca-bundles
/api/v1/fleet/upgrade/api/device-management/devices/migrate-ast/status/{task_id}/ca-bundles
/api/device-management/devices/migrate-ast/status/{task_id}/ca-bundles

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "task_id": "550e8400-e29b-41d4-a716-446655440000",
  • "page": 1,
  • "size": 20,
  • "total": 5,
  • "ca_bundles":
    [
    ]
}

CleanupMigrationTask

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.

Authorizations:
path Parameters
task_id
required
string <uuid>

The task ID to clean up

query Parameters
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.

Responses

200

Cleanup completed successfully

404

Task not found

500

Internal server error

delete/api/device-management/devices/migrate-ast/cleanup/{task_id}
/api/api/device-management/devices/migrate-ast/cleanup/{task_id}
/api/provisioning/v1/api/device-management/devices/migrate-ast/cleanup/{task_id}
/api/v1/fleet/upgrade/api/device-management/devices/migrate-ast/cleanup/{task_id}
/api/device-management/devices/migrate-ast/cleanup/{task_id}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "task_id": "123e4567-e89b-12d3-a456-426614174000",
  • "deleted_devices": 10,
  • "deleted_trust_stores": 5,
  • "message": "Successfully cleaned up migration task staging data"
}

RetryFailedMigrationDevices

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:

  • Task must exist and be a MIGRATION task
  • No other migration task can be currently running
  • Task must have at least one failed device

The retry process:

  1. Validates the task exists and is a migration task
  2. Checks no concurrent migration tasks are running
  3. Resets failed devices to PENDING status
  4. Resets task state to IN_PROGRESS
  5. Reprocesses only the failed devices through the validation workflow
Authorizations:
path Parameters
task_id
required
string <uuid>

The task ID to retry failed devices for

Responses

202

Retry initiated successfully. Use the same task_id to query status.

400

No failed devices to retry

404

Task not found

409

A migration task is already running

500

Internal server error

post/api/device-management/devices/migrate-ast/retry/{task_id}
/api/api/device-management/devices/migrate-ast/retry/{task_id}
/api/provisioning/v1/api/device-management/devices/migrate-ast/retry/{task_id}
/api/v1/fleet/upgrade/api/device-management/devices/migrate-ast/retry/{task_id}
/api/device-management/devices/migrate-ast/retry/{task_id}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "message": "Retry task initiated successfully",
  • "task_id": "123e4567-e89b-12d3-a456-426614174000"
}

Get a staging device by ID

Retrieve details of a specific staging device including its validation status, configuration, and error messages if any.

Authorizations:
path Parameters
staging_device_id
required
string <uuid>

UUID of the staging device to retrieve

Responses

200

Staging device retrieved successfully

404

Staging device not found

500

Internal server error

get/api/device-management/devices/migrate-ast/staging-devices/{staging_device_id}
/api/api/device-management/devices/migrate-ast/staging-devices/{staging_device_id}
/api/provisioning/v1/api/device-management/devices/migrate-ast/staging-devices/{staging_device_id}
/api/v1/fleet/upgrade/api/device-management/devices/migrate-ast/staging-devices/{staging_device_id}
/api/device-management/devices/migrate-ast/staging-devices/{staging_device_id}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "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,
  • "validation_status": "SUCCESS",
  • "error_message": "Connection timeout",
  • "created_at": "2026-01-30T10:00:00Z",
  • "last_modified": "2026-01-30T12:00:00Z"
}

Update and commit a staging device

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.

Authorizations:
path Parameters
staging_device_id
required
string <uuid>

UUID of the staging device to update

Request Body schema: application/json
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
tls_enabled
boolean
ca
string <uuid>
modules
object

Responses

200

Staging device updated and committed successfully

400

Device validation failed or invalid request

404

Staging device not found

500

Internal server error

patch/api/device-management/devices/migrate-ast/staging-devices/{staging_device_id}
/api/api/device-management/devices/migrate-ast/staging-devices/{staging_device_id}
/api/provisioning/v1/api/device-management/devices/migrate-ast/staging-devices/{staging_device_id}
/api/v1/fleet/upgrade/api/device-management/devices/migrate-ast/staging-devices/{staging_device_id}
/api/device-management/devices/migrate-ast/staging-devices/{staging_device_id}

Request samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "alias_name": "string",
  • "description": "string",
  • "username": "string",
  • "password": "string",
  • "endpoint": "string",
  • "data_center": "string",
  • "retention": "string",
  • "collection_interval": 1,
  • "tls_enabled": true,
  • "ca": "string",
  • "modules":
    {
    }
}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "message": "Staging device updated and committed successfully",
  • "staging_device_id": "string"
}

Update and commit a staging CA bundle

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.

Authorizations:
path Parameters
staging_ca_id
required
string <uuid>

UUID of the staging CA bundle to update

Request Body schema: application/json
name
required
string <= 255 characters

Name of the certificate

description
string

Description of the certificate

certificate_content
required
string

PEM encoded certificate content

Responses

200

Staging CA bundle updated and committed successfully

400

Invalid certificate data

404

Staging CA bundle not found

500

Internal server error

patch/api/device-management/devices/migrate-ast/staging-ca-bundles/{staging_ca_id}
/api/api/device-management/devices/migrate-ast/staging-ca-bundles/{staging_ca_id}
/api/provisioning/v1/api/device-management/devices/migrate-ast/staging-ca-bundles/{staging_ca_id}
/api/v1/fleet/upgrade/api/device-management/devices/migrate-ast/staging-ca-bundles/{staging_ca_id}
/api/device-management/devices/migrate-ast/staging-ca-bundles/{staging_ca_id}

Request samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "name": "string",
  • "description": "string",
  • "certificate_content": "string"
}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "message": "Staging CA bundle updated and committed successfully",
  • "staging_ca_id": "string"
}

MigrateASTDevicesSync

Synchronous migration of BIG-IP devices from AST configuration files (legacy endpoint). For better experience with large migrations, use the async endpoint instead.

Authorizations:
Request Body schema: multipart/form-data

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)

Responses

200

Migration completed with summary of results.

400

Validation error in uploaded files.

500

Internal server error.

post/api/device-management/devices/migrate-ast-sync
/api/api/device-management/devices/migrate-ast-sync
/api/provisioning/v1/api/device-management/devices/migrate-ast-sync
/api/v1/fleet/upgrade/api/device-management/devices/migrate-ast-sync
/api/device-management/devices/migrate-ast-sync

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "total": 10,
  • "successful": 8,
  • "failed": 2,
  • "results":
    [
    ]
}

BulkImportDevices

Import multiple devices (BIG-IP and/or F5OS) to F5 Insights in a single operation.

Authorizations:
Request Body schema: application/json

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)

Responses

200

Bulk import completed with summary of results.

400

Validation error.

500

Internal server error.

post/api/device-management/devices/bulk-import
/api/api/device-management/devices/bulk-import
/api/provisioning/v1/api/device-management/devices/bulk-import
/api/v1/fleet/upgrade/api/device-management/devices/bulk-import
/api/device-management/devices/bulk-import

Request samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "devices":
    [
    ]
}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "total": 10,
  • "successful": 8,
  • "failed": 2,
  • "results":
    [
    ]
}

GetCurrentImportTask

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.

Authorizations:

Responses

200

Import task state and per-device results.

404

No import tasks found.

500

Internal server error.

get/api/device-management/devices/import
/api/api/device-management/devices/import
/api/provisioning/v1/api/device-management/devices/import
/api/v1/fleet/upgrade/api/device-management/devices/import
/api/device-management/devices/import

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "task_id": "string",
  • "state": "INIT",
  • "status": "RUNNING",
  • "progress": 0,
  • "total": 0,
  • "successful": 0,
  • "failed": 0,
  • "error_message": "string",
  • "items":
    [
    ],
  • "created_at": "2026-07-17T10:37:06Z",
  • "updated_at": "2026-07-17T10:37:06Z"
}

ImportDevicesAsync

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.

Authorizations:
Request Body schema:

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

Responses

202

Import task accepted. Poll the status endpoint with the returned task_id.

400

Validation error.

500

Internal server error.

post/api/device-management/devices/import
/api/api/device-management/devices/import
/api/provisioning/v1/api/device-management/devices/import
/api/v1/fleet/upgrade/api/device-management/devices/import
/api/device-management/devices/import

Request samples

Content type
Copy
Expand all Collapse all
{
  • "devices":
    [
    ]
}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "task_id": "string",
  • "message": "Import task accepted"
}

CleanupImportTask

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.

Authorizations:
path Parameters
task_id
required
string <uuid>

The import task ID to clean up

query Parameters
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.

Responses

200

Cleanup completed successfully

404

Task not found

500

Internal server error

delete/api/device-management/devices/import/cleanup/{task_id}
/api/api/device-management/devices/import/cleanup/{task_id}
/api/provisioning/v1/api/device-management/devices/import/cleanup/{task_id}
/api/v1/fleet/upgrade/api/device-management/devices/import/cleanup/{task_id}
/api/device-management/devices/import/cleanup/{task_id}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "task_id": "123e4567-e89b-12d3-a456-426614174000",
  • "message": "Successfully cleaned up import task"
}

GetImportTaskStatus

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.

Authorizations:
path Parameters
task_id
required
string <uuid>

Task id returned by POST /device-management/devices/import.

Responses

200

Task state and per-device results.

404

Task not found.

500

Internal server error.

get/api/device-management/devices/import/status/{task_id}
/api/api/device-management/devices/import/status/{task_id}
/api/provisioning/v1/api/device-management/devices/import/status/{task_id}
/api/v1/fleet/upgrade/api/device-management/devices/import/status/{task_id}
/api/device-management/devices/import/status/{task_id}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "task_id": "string",
  • "state": "INIT",
  • "status": "RUNNING",
  • "progress": 0,
  • "total": 0,
  • "successful": 0,
  • "failed": 0,
  • "error_message": "string",
  • "items":
    [
    ],
  • "created_at": "2026-07-17T10:37:06Z",
  • "updated_at": "2026-07-17T10:37:06Z"
}

ChatHistory

List conversations

List all active (non-expired, non-deleted) conversations for the authenticated user, sorted by most recent message.

Authorizations:

Responses

200

List of conversations

401

Unauthorized - authentication required or token invalid

500

An unexpected error occurred.

get/api/chat/history/conversations
/api/api/chat/history/conversations
/api/provisioning/v1/api/chat/history/conversations
/api/v1/fleet/upgrade/api/chat/history/conversations
/api/chat/history/conversations

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "conversations":
    [
    ]
}

Create conversation

Create a new conversation thread. Returns 429 if the user has reached the 50-thread cap.

Authorizations:
Request Body schema: application/json
title
string <= 500 characters

Optional conversation title

Responses

201

Conversation created

401

Unauthorized - authentication required or token invalid

429

Maximum number of active conversations reached (50)

500

An unexpected error occurred.

post/api/chat/history/conversations
/api/api/chat/history/conversations
/api/provisioning/v1/api/chat/history/conversations
/api/v1/fleet/upgrade/api/chat/history/conversations
/api/chat/history/conversations

Request samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "title": "Troubleshoot VIP latency"
}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "id": "550e8400-e29b-41d4-a716-446655440000",
  • "user_id": "user-123",
  • "title": "Deploy failure on prod-cluster-3",
  • "created_at": "2026-07-17T10:37:06Z",
  • "last_msg_at": "2026-07-17T10:37:06Z",
  • "expires_at": "2026-07-17T10:37:06Z",
  • "deleted_at": "2026-07-17T10:37:06Z",
  • "message_count": 14
}

Get conversation with messages

Get a conversation and its full message history. Returns 410 if the conversation has expired.

Authorizations:
path Parameters
id
required
string <uuid>

Conversation ID

Responses

200

Conversation with messages

401

Unauthorized - authentication required or token invalid

404

Conversation not found

410

Conversation has expired

500

An unexpected error occurred.

get/api/chat/history/conversations/{id}
/api/api/chat/history/conversations/{id}
/api/provisioning/v1/api/chat/history/conversations/{id}
/api/v1/fleet/upgrade/api/chat/history/conversations/{id}
/api/chat/history/conversations/{id}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "conversation":
    {
    },
  • "messages":
    [
    ],
  • "context_summarized": true
}

Delete conversation

Soft-delete a conversation. The conversation will be retained for 30 days for audit purposes before hard-deletion.

Authorizations:
path Parameters
id
required
string <uuid>

Conversation ID

Responses

204

Conversation deleted

401

Unauthorized - authentication required or token invalid

404

Conversation not found

500

An unexpected error occurred.

delete/api/chat/history/conversations/{id}
/api/api/chat/history/conversations/{id}
/api/provisioning/v1/api/chat/history/conversations/{id}
/api/v1/fleet/upgrade/api/chat/history/conversations/{id}
/api/chat/history/conversations/{id}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "status": 401,
  • "message": "Unauthorized"
}

Add message to conversation

Add a message to a conversation. Resets the 24-hour TTL rolling window. Returns 410 if the conversation has expired.

Authorizations:
path Parameters
id
required
string <uuid>

Conversation ID

Request Body schema: application/json
role
required
string
Enum: "user" "assistant"

Message sender role

content
required
string

Message content

Responses

201

Message added

400

Invalid request (missing role/content or invalid role)

401

Unauthorized - authentication required or token invalid

404

Conversation not found

410

Conversation has expired

500

An unexpected error occurred.

post/api/chat/history/conversations/{id}/messages
/api/api/chat/history/conversations/{id}/messages
/api/provisioning/v1/api/chat/history/conversations/{id}/messages
/api/v1/fleet/upgrade/api/chat/history/conversations/{id}/messages
/api/chat/history/conversations/{id}/messages

Request samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "role": "user",
  • "content": "Can you check the pool member health?"
}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "id": "string",
  • "conversation_id": "string",
  • "user_id": "string",
  • "role": "user",
  • "content": "What's the current pool status on prod-cluster-3?",
  • "created_at": "2026-07-17T10:37:06Z",
  • "is_summarized": false
}

Export conversation or single response as PDF

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.

Authorizations:
Request Body schema: application/json
type
required
string
Enum: "single" "conversation"

conversation — export all messages in the thread (up to 200). single — export one assistant response and its preceding user prompt.

conversation_id
required
string <uuid>

ID of the conversation to export

message_id
string <uuid>

Required when type is single. ID of the target assistant message. The preceding user prompt is automatically included in the PDF.

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.

Responses

200

PDF generated successfully — binary file download

400

Invalid request. Possible causes: - Missing or invalid type (must be single or conversation) - Missing conversation_id - type is single but message_id is absent

401

Unauthorized - authentication required or token invalid

404

Conversation not found, not owned by the authenticated user, or no messages matched for the given message_id.

410

Conversation has expired (past 24-hour TTL)

500

An unexpected error occurred.

post/api/chat/export/pdf
/api/api/chat/export/pdf
/api/provisioning/v1/api/chat/export/pdf
/api/v1/fleet/upgrade/api/chat/export/pdf
/api/chat/export/pdf

Request samples

Content type
application/json
Example
Copy
Expand all Collapse all
{
  • "type": "conversation",
  • "conversation_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "status": 400,
  • "message": "message_id is required for single response export"
}

AuditConsole

List AI assistant audit events

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.

Authorizations:
query Parameters
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 true (and the caller has audit.view_sensitive permission), PII fields are returned unmasked.

Responses

200

Paginated list of audit events

401

Unauthorized - authentication required or token invalid

403

Insufficient permissions (requires audit.read)

500

An unexpected error occurred.

503

Audit storage (ClickHouse) unavailable

get/api/audit/events
/api/api/audit/events
/api/provisioning/v1/api/audit/events
/api/v1/fleet/upgrade/api/audit/events
/api/audit/events

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "events":
    [
    ],
  • "pagination":
    {
    }
}

Request an audit export (CSV)

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.

Authorizations:
query Parameters
view_sensitive
boolean
Default: false

Include unmasked PII in the CSV (requires audit.view_sensitive permission).

Request Body schema: application/json
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>

Responses

200

Export ready for download (synchronous path, ≤10 000 rows)

202

Export queued for background processing (>10 000 rows)

401

Unauthorized - authentication required or token invalid

403

Insufficient permissions (requires audit.export)

413

Export exceeds the maximum row limit (5 000 000 rows)

429

Per-user concurrent export limit reached (max 5)

500

An unexpected error occurred.

503

Audit storage unavailable

post/api/audit/export
/api/api/audit/export
/api/provisioning/v1/api/audit/export
/api/v1/fleet/upgrade/api/audit/export
/api/audit/export

Request samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "username": "string",
  • "event_type": "user_message",
  • "tool": "string",
  • "keyword": "string",
  • "thread_id": "string",
  • "session_id": "string",
  • "date_from": "2026-07-17T10:37:06Z",
  • "date_to": "2026-07-17T10:37:06Z"
}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "export_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  • "status": "ready",
  • "download_url": "/api/audit/export/3fa85f64-5717-4562-b3fc-2c963f66afa6",
  • "sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
  • "row_count": 42
}

Download an audit export CSV

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.

Authorizations:
path Parameters
id
required
string <uuid>

Export ID returned by POST /audit/export.

Responses

200

CSV file download

401

Unauthorized - authentication required or token invalid

404

Export not found or already downloaded

410

Export has expired (TTL exceeded)

500

An unexpected error occurred.

get/api/audit/export/{id}
/api/api/audit/export/{id}
/api/provisioning/v1/api/audit/export/{id}
/api/v1/fleet/upgrade/api/audit/export/{id}
/api/audit/export/{id}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "status": 401,
  • "message": "Unauthorized"
}

Cloud Environments

List all VMware environments

List all VMware cloud environments for auto-scaling.

Authorizations:

Responses

200

Cloud environment listed successfully

500

Internal server error

get/api/provisioning/v1/cloud/environments
/api/api/provisioning/v1/cloud/environments
/api/provisioning/v1/api/provisioning/v1/cloud/environments
/api/v1/fleet/upgrade/api/provisioning/v1/cloud/environments
/api/provisioning/v1/cloud/environments

Response samples

Content type
application/json
Copy
Expand all Collapse all
[
  • {
    }
]

Create VMware environment

Creates a new VMware cloud environment for auto-scaling.

Authorizations:
Request Body schema: application/json
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)

Responses

201

Cloud environment created successfully

400

Bad request - validation failed

404

Provider or device template not found

409

Conflict - environment with same name already exists

500

Internal server error

post/api/provisioning/v1/cloud/environments
/api/api/provisioning/v1/cloud/environments
/api/provisioning/v1/api/provisioning/v1/cloud/environments
/api/v1/fleet/upgrade/api/provisioning/v1/cloud/environments
/api/provisioning/v1/cloud/environments

Request samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "name": "string",
  • "providerReference":
    {},
  • "deviceTemplateReference":
    {},
  • "isVmwCluster": true,
  • "vmwProperties":
    {
    }
}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "id": "string",
  • "name": "string",
  • "providerReference":
    {},
  • "deviceTemplateReference":
    {},
  • "isVmwCluster": true,
  • "vmwProperties":
    {
    },
  • "validationStatus": "PENDING",
  • "validationErrors":
    [
    ],
  • "selfLink": "http://example.com",
  • "createdAt": "2026-07-17T10:37:07Z",
  • "updatedAt": "2026-07-17T10:37:07Z"
}

Get VMware environment by ID

Authorizations:
path Parameters
environmentId
required
string <uuid>

UUID of the cloud environment

Responses

200

Cloud environment returned successfully

404

Cloud environment not found

500

Internal server error

get/api/provisioning/v1/cloud/environments/{environmentId}
/api/api/provisioning/v1/cloud/environments/{environmentId}
/api/provisioning/v1/api/provisioning/v1/cloud/environments/{environmentId}
/api/v1/fleet/upgrade/api/provisioning/v1/cloud/environments/{environmentId}
/api/provisioning/v1/cloud/environments/{environmentId}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "id": "string",
  • "name": "string",
  • "providerReference":
    {},
  • "deviceTemplateReference":
    {},
  • "isVmwCluster": true,
  • "vmwProperties":
    {
    },
  • "validationStatus": "PENDING",
  • "validationErrors":
    [
    ],
  • "selfLink": "http://example.com",
  • "createdAt": "2026-07-17T10:37:07Z",
  • "updatedAt": "2026-07-17T10:37:07Z"
}

Edit VMware environment

Authorizations:
path Parameters
environmentId
required
string <uuid>

UUID of the cloud environment

Request Body schema: application/json
name
string [ 1 .. 255 ] characters
isVmwCluster
boolean
vmwProperties
object (VMwareEnvironmentProperties)

Responses

200

Cloud environment updated successfully

400

Bad request - validation failed

404

Cloud environment not found

409

Conflict - environment with same name already exists

500

Internal server error

patch/api/provisioning/v1/cloud/environments/{environmentId}
/api/api/provisioning/v1/cloud/environments/{environmentId}
/api/provisioning/v1/api/provisioning/v1/cloud/environments/{environmentId}
/api/v1/fleet/upgrade/api/provisioning/v1/cloud/environments/{environmentId}
/api/provisioning/v1/cloud/environments/{environmentId}

Request samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "name": "string",
  • "isVmwCluster": true,
  • "vmwProperties":
    {
    }
}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "id": "string",
  • "name": "string",
  • "providerReference":
    {},
  • "deviceTemplateReference":
    {},
  • "isVmwCluster": true,
  • "vmwProperties":
    {
    },
  • "validationStatus": "PENDING",
  • "validationErrors":
    [
    ],
  • "selfLink": "http://example.com",
  • "createdAt": "2026-07-17T10:37:07Z",
  • "updatedAt": "2026-07-17T10:37:07Z"
}

Delete VMware environment

Deletes an existing VMware cloud environment.

Authorizations:
path Parameters
environmentId
required
string <uuid>

UUID of the cloud environment

Responses

204

Cloud environment deleted successfully

400

Bad request - environment is in use

404

Cloud environment not found

500

Internal server error

delete/api/provisioning/v1/cloud/environments/{environmentId}
/api/api/provisioning/v1/cloud/environments/{environmentId}
/api/provisioning/v1/api/provisioning/v1/cloud/environments/{environmentId}
/api/v1/fleet/upgrade/api/provisioning/v1/cloud/environments/{environmentId}
/api/provisioning/v1/cloud/environments/{environmentId}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "error": "string",
  • "code": "string"
}

VM Tasks

Create a VM

Kicks off an asynchronous VM creation task in the referenced cloud environment. Returns 202 Accepted with task tracking info.

Authorizations:
Request Body schema: application/json
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.

Responses

202

VM creation task accepted

400

Bad request - validation failed

404

Referenced environment not found

500

Internal server error

post/api/provisioning/v1/cloud/tasks/create-vm
/api/api/provisioning/v1/cloud/tasks/create-vm
/api/provisioning/v1/api/provisioning/v1/cloud/tasks/create-vm
/api/v1/fleet/upgrade/api/provisioning/v1/cloud/tasks/create-vm
/api/provisioning/v1/cloud/tasks/create-vm

Request samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "envReference": "string",
  • "vmName": "string",
  • "vmIP": "string",
  • "vmUuid": "string"
}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "taskId": "string",
  • "status": "PENDING",
  • "envReference": "string",
  • "taskType": "CREATE_VM",
  • "message": "string",
  • "vmName": "string",
  • "vmUuid": "string",
  • "vmIP": "string",
  • "selfLink": "http://example.com",
  • "createdAt": "2026-07-17T10:37:07Z",
  • "updatedAt": "2026-07-17T10:37:07Z"
}

Delete a VM

Kicks off an asynchronous VM deletion task in the referenced cloud environment. Returns 202 Accepted with task tracking info.

Authorizations:
Request Body schema: application/json
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.

Responses

202

VM deletion task accepted

400

Bad request - validation failed

404

Referenced environment not found

500

Internal server error

post/api/provisioning/v1/cloud/tasks/delete-vm
/api/api/provisioning/v1/cloud/tasks/delete-vm
/api/provisioning/v1/api/provisioning/v1/cloud/tasks/delete-vm
/api/v1/fleet/upgrade/api/provisioning/v1/cloud/tasks/delete-vm
/api/provisioning/v1/cloud/tasks/delete-vm

Request samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "envReference": "string",
  • "vmName": "string",
  • "vmIP": "string",
  • "vmUuid": "string"
}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "taskId": "string",
  • "status": "PENDING",
  • "envReference": "string",
  • "taskType": "CREATE_VM",
  • "message": "string",
  • "vmName": "string",
  • "vmUuid": "string",
  • "vmIP": "string",
  • "selfLink": "http://example.com",
  • "createdAt": "2026-07-17T10:37:07Z",
  • "updatedAt": "2026-07-17T10:37:07Z"
}

Get create-vm task status

Authorizations:
path Parameters
taskId
required
string <uuid>

UUID of the VM task

Responses

200

Task status returned

404

Task not found

500

Internal server error

get/api/provisioning/v1/cloud/tasks/create-vm/{taskId}
/api/api/provisioning/v1/cloud/tasks/create-vm/{taskId}
/api/provisioning/v1/api/provisioning/v1/cloud/tasks/create-vm/{taskId}
/api/v1/fleet/upgrade/api/provisioning/v1/cloud/tasks/create-vm/{taskId}
/api/provisioning/v1/cloud/tasks/create-vm/{taskId}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "taskId": "string",
  • "status": "PENDING",
  • "envReference": "string",
  • "taskType": "CREATE_VM",
  • "message": "string",
  • "vmName": "string",
  • "vmUuid": "string",
  • "vmIP": "string",
  • "selfLink": "http://example.com",
  • "createdAt": "2026-07-17T10:37:07Z",
  • "updatedAt": "2026-07-17T10:37:07Z"
}

Get delete-vm task status

Authorizations:
path Parameters
taskId
required
string <uuid>

UUID of the VM task

Responses

200

Task status returned

404

Task not found

500

Internal server error

get/api/provisioning/v1/cloud/tasks/delete-vm/{taskId}
/api/api/provisioning/v1/cloud/tasks/delete-vm/{taskId}
/api/provisioning/v1/api/provisioning/v1/cloud/tasks/delete-vm/{taskId}
/api/v1/fleet/upgrade/api/provisioning/v1/cloud/tasks/delete-vm/{taskId}
/api/provisioning/v1/cloud/tasks/delete-vm/{taskId}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "taskId": "string",
  • "status": "PENDING",
  • "envReference": "string",
  • "taskType": "CREATE_VM",
  • "message": "string",
  • "vmName": "string",
  • "vmUuid": "string",
  • "vmIP": "string",
  • "selfLink": "http://example.com",
  • "createdAt": "2026-07-17T10:37:07Z",
  • "updatedAt": "2026-07-17T10:37:07Z"
}

Infrastructure Discovery

Establish vSphere connection

Establishes a connection to vSphere using provider credentials. Returns a connection ID that can be used for subsequent discovery API calls.

Authorizations:
Request Body schema: application/json
username
required
string

vSphere username

password
required
string

vSphere password

providerName
required
string

Name of the provider (used to resolve vSphere hostname)

Responses

200

Connection established successfully

400

Bad request - missing required parameters

404

Provider not found

500

Internal server error or connection failed

post/api/provisioning/v1/cloud/connect
/api/api/provisioning/v1/cloud/connect
/api/provisioning/v1/api/provisioning/v1/cloud/connect
/api/v1/fleet/upgrade/api/provisioning/v1/cloud/connect
/api/provisioning/v1/cloud/connect

Request samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "username": "string",
  • "password": "string",
  • "providerName": "string"
}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "connId": "string",
  • "message": "string"
}

List datacenters

Lists all available datacenters in the vSphere environment.

Authorizations:
query Parameters
connId
required
string

Connection ID from /cloud/connect endpoint

Responses

200

List of datacenters

400

Bad request - missing required parameters

404

Environment not found

500

Internal server error

get/api/provisioning/v1/cloud/datacenters
/api/api/provisioning/v1/cloud/datacenters
/api/provisioning/v1/api/provisioning/v1/cloud/datacenters
/api/v1/fleet/upgrade/api/provisioning/v1/cloud/datacenters
/api/provisioning/v1/cloud/datacenters

Response samples

Content type
application/json
Copy
Expand all Collapse all
[
  • {
    }
]

List clusters

Lists all clusters in a datacenter.

Authorizations:
query Parameters
connId
required
string

Connection ID from /cloud/connect endpoint

datacenter
required
string

Name of the datacenter

Responses

200

List of clusters

400

Bad request - missing required parameters

404

Environment or datacenter not found

500

Internal server error

get/api/provisioning/v1/cloud/clusters
/api/api/provisioning/v1/cloud/clusters
/api/provisioning/v1/api/provisioning/v1/cloud/clusters
/api/v1/fleet/upgrade/api/provisioning/v1/cloud/clusters
/api/provisioning/v1/cloud/clusters

Response samples

Content type
application/json
Copy
Expand all Collapse all
[
  • {
    }
]

List hosts

Lists hosts in a datacenter or cluster. If cluster is provided, lists only hosts in that cluster; otherwise lists all hosts in the datacenter.

Authorizations:
query Parameters
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)

Responses

200

List of hosts

400

Bad request - missing required parameters

404

Environment, datacenter, or cluster not found

500

Internal server error

get/api/provisioning/v1/cloud/hosts
/api/api/provisioning/v1/cloud/hosts
/api/provisioning/v1/api/provisioning/v1/cloud/hosts
/api/v1/fleet/upgrade/api/provisioning/v1/cloud/hosts
/api/provisioning/v1/cloud/hosts

Response samples

Content type
application/json
Copy
Expand all Collapse all
[
  • {
    }
]

List networks

Lists all networks in a datacenter.

Authorizations:
query Parameters
connId
required
string

Connection ID from /cloud/connect endpoint

datacenter
required
string

Name of the datacenter

Responses

200

List of networks

400

Bad request - missing required parameters

404

Environment or datacenter not found

500

Internal server error

get/api/provisioning/v1/cloud/networks
/api/api/provisioning/v1/cloud/networks
/api/provisioning/v1/api/provisioning/v1/cloud/networks
/api/v1/fleet/upgrade/api/provisioning/v1/cloud/networks
/api/provisioning/v1/cloud/networks

Response samples

Content type
application/json
Copy
Expand all Collapse all
[
  • {
    }
]

List datastores

Lists all datastores in a datacenter.

Authorizations:
query Parameters
connId
required
string

Connection ID from /cloud/connect endpoint

datacenter
required
string

Name of the datacenter

Responses

200

List of datastores

400

Bad request - missing required parameters

404

Environment or datacenter not found

500

Internal server error

get/api/provisioning/v1/cloud/datastores
/api/api/provisioning/v1/cloud/datastores
/api/provisioning/v1/api/provisioning/v1/cloud/datastores
/api/v1/fleet/upgrade/api/provisioning/v1/cloud/datastores
/api/provisioning/v1/cloud/datastores

Response samples

Content type
application/json
Copy
Expand all Collapse all
[
  • {
    }
]

List VM images

Lists all VM images (templates) available in a datacenter.

Authorizations:
query Parameters
connId
required
string

Connection ID from /cloud/connect endpoint

datacenter
required
string

Name of the datacenter

Responses

200

List of VM images

400

Bad request - missing required parameters

404

Environment or datacenter not found

500

Internal server error

get/api/provisioning/v1/cloud/vm-images
/api/api/provisioning/v1/cloud/vm-images
/api/provisioning/v1/api/provisioning/v1/cloud/vm-images
/api/v1/fleet/upgrade/api/provisioning/v1/cloud/vm-images
/api/provisioning/v1/cloud/vm-images

Response samples

Content type
application/json
Copy
Expand all Collapse all
[
  • {
    }
]

Images

List software images

Authorizations:
query Parameters
page
integer >= 1
Default: 1
page_size
integer [ 1 .. 500 ]
Default: 20
product_family
string (ProductFamily)
Enum: "BIGIP" "F5OS-C" "F5OS-A" "F5OS"

Responses

200

List of software images

401

Authentication required

get/api/v1/fleet/upgrade/images
/api/api/v1/fleet/upgrade/images
/api/provisioning/v1/api/v1/fleet/upgrade/images
/api/v1/fleet/upgrade/api/v1/fleet/upgrade/images
/api/v1/fleet/upgrade/images

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "data":
    [
    ],
  • "pagination":
    {
    }
}

Upload a software image

Authorizations:
Request Body schema: multipart/form-data
file
required
string <binary>

Software image file (ISO, bin, etc.)

product_family
required
string (ProductFamily)
Enum: "BIGIP" "F5OS-C" "F5OS-A" "F5OS"
image_type
string (ImageType)
Default: "FULL_ISO"
Enum: "FULL_ISO" "FULL_VE" "HOTFIX" "ENG_HOTFIX"
version
required
string
build
string

Responses

201

Image uploaded successfully

400

Invalid request

401

Authentication required

409

Duplicate filename

post/api/v1/fleet/upgrade/images
/api/api/v1/fleet/upgrade/images
/api/provisioning/v1/api/v1/fleet/upgrade/images
/api/v1/fleet/upgrade/api/v1/fleet/upgrade/images
/api/v1/fleet/upgrade/images

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "id": "string",
  • "file_name": "string",
  • "product_family": "BIGIP",
  • "image_type": "FULL_ISO",
  • "status": "UPLOADING",
  • "version": "string",
  • "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-07-17T10:37:07Z",
  • "uploaded_by": "string",
  • "uploaded_at": "2026-07-17T10:37:07Z",
  • "build_date": "2026-07-17T10:37:07Z",
  • "created_at": "2026-07-17T10:37:07Z"
}

Get a software image by ID

Authorizations:
path Parameters
imageId
required
string <uuid>

Responses

200

Software image details

404

Resource not found

get/api/v1/fleet/upgrade/images/{imageId}
/api/api/v1/fleet/upgrade/images/{imageId}
/api/provisioning/v1/api/v1/fleet/upgrade/images/{imageId}
/api/v1/fleet/upgrade/api/v1/fleet/upgrade/images/{imageId}
/api/v1/fleet/upgrade/images/{imageId}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "id": "string",
  • "file_name": "string",
  • "product_family": "BIGIP",
  • "image_type": "FULL_ISO",
  • "status": "UPLOADING",
  • "version": "string",
  • "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-07-17T10:37:07Z",
  • "uploaded_by": "string",
  • "uploaded_at": "2026-07-17T10:37:07Z",
  • "build_date": "2026-07-17T10:37:07Z",
  • "created_at": "2026-07-17T10:37:07Z"
}

Delete a software image

Authorizations:
path Parameters
imageId
required
string <uuid>

Responses

204

Image deleted

404

Resource not found

409

Image is associated with one or more upgrade jobs and cannot be deleted. The error message lists the offending job types and names.

delete/api/v1/fleet/upgrade/images/{imageId}
/api/api/v1/fleet/upgrade/images/{imageId}
/api/provisioning/v1/api/v1/fleet/upgrade/images/{imageId}
/api/v1/fleet/upgrade/api/v1/fleet/upgrade/images/{imageId}
/api/v1/fleet/upgrade/images/{imageId}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "code": "string",
  • "message": "string",
  • "details":
    [
    ]
}

Delete multiple software images in a single request

Authorizations:
Request Body schema: application/json
image_ids
required
Array of strings <uuid> [ 1 .. 100 ] items

Responses

200

Per-image deletion results

400

Invalid request

401

Authentication required

post/api/v1/fleet/upgrade/images/bulk-delete
/api/api/v1/fleet/upgrade/images/bulk-delete
/api/provisioning/v1/api/v1/fleet/upgrade/images/bulk-delete
/api/v1/fleet/upgrade/api/v1/fleet/upgrade/images/bulk-delete
/api/v1/fleet/upgrade/images/bulk-delete

Request samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "image_ids":
    [
    ]
}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "results":
    [
    ]
}

Inventory

Get fleet summary (device counts by type, version, status)

Authorizations:

Responses

200

Fleet summary

get/api/v1/fleet/upgrade/summary
/api/api/v1/fleet/upgrade/summary
/api/provisioning/v1/api/v1/fleet/upgrade/summary
/api/v1/fleet/upgrade/api/v1/fleet/upgrade/summary
/api/v1/fleet/upgrade/summary

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "total_devices": 0,
  • "bigip_count": 0,
  • "f5os_count": 0,
  • "version_distribution":
    {
    },
  • "status_distribution":
    {
    }
}

List all fleet devices (BIG-IP + F5OS)

Authorizations:
query Parameters
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: ' asc' or ' desc' (default: hostname asc)

Responses

200

Paginated fleet device list

get/api/v1/fleet/upgrade/devices
/api/api/v1/fleet/upgrade/devices
/api/provisioning/v1/api/v1/fleet/upgrade/devices
/api/v1/fleet/upgrade/api/v1/fleet/upgrade/devices
/api/v1/fleet/upgrade/devices

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "data":
    [
    ],
  • "pagination":
    {
    }
}

Get fleet device details

Authorizations:
path Parameters
deviceId
required
string <uuid>

Responses

200

Fleet device details

404

Resource not found

get/api/v1/fleet/upgrade/devices/{deviceId}
/api/api/v1/fleet/upgrade/devices/{deviceId}
/api/provisioning/v1/api/v1/fleet/upgrade/devices/{deviceId}
/api/v1/fleet/upgrade/api/v1/fleet/upgrade/devices/{deviceId}
/api/v1/fleet/upgrade/devices/{deviceId}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "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":
    [
    ],
  • "disk_available_gb": 42.5,
  • "license_edition": "string",
  • "license_check_date": "2026-07-17",
  • "service_check_date": "2026-07-17",
  • "last_seen_at": "2026-07-17T10:37:07Z",
  • "last_refresh_at": "2026-07-17T10:37:07Z",
  • "eligibility_status": "ELIGIBLE",
  • "recommended_version": "17.1.3"
}

Trigger on-demand metadata refresh for a device

Authorizations:
path Parameters
deviceId
required
string <uuid>

Responses

200

Device metadata refreshed

404

Resource not found

post/api/v1/fleet/upgrade/devices/{deviceId}/refresh
/api/api/v1/fleet/upgrade/devices/{deviceId}/refresh
/api/provisioning/v1/api/v1/fleet/upgrade/devices/{deviceId}/refresh
/api/v1/fleet/upgrade/api/v1/fleet/upgrade/devices/{deviceId}/refresh
/api/v1/fleet/upgrade/devices/{deviceId}/refresh

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "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":
    [
    ],
  • "disk_available_gb": 42.5,
  • "license_edition": "string",
  • "license_check_date": "2026-07-17",
  • "service_check_date": "2026-07-17",
  • "last_seen_at": "2026-07-17T10:37:07Z",
  • "last_refresh_at": "2026-07-17T10:37:07Z",
  • "eligibility_status": "ELIGIBLE",
  • "recommended_version": "17.1.3"
}

Create asynchronous disk space analysis task for multiple devices

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

Authorizations:
Request Body schema: application/json
required_size_bytes
required
integer <int64> >= 1

Required disk size per device, in bytes

devices
required
Array of objects (DiskAnalysisBatchDeviceInput) non-empty

Responses

202

Disk space analysis task accepted

400

Invalid request

post/api/v1/fleet/upgrade/devices/disk-analysis
/api/api/v1/fleet/upgrade/devices/disk-analysis
/api/provisioning/v1/api/v1/fleet/upgrade/devices/disk-analysis
/api/v1/fleet/upgrade/api/v1/fleet/upgrade/devices/disk-analysis
/api/v1/fleet/upgrade/devices/disk-analysis

Request samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "required_size_bytes": 1,
  • "devices":
    [
    ]
}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "task_id": "string",
  • "status": "QUEUED",
  • "created_at": "2026-07-17T10:37:07Z"
}

Get asynchronous disk space analysis task status and results

Authorizations:
path Parameters
taskId
required
string <uuid>

Responses

200

Disk analysis task details

404

Resource not found

get/api/v1/fleet/upgrade/devices/disk-analysis/{taskId}
/api/api/v1/fleet/upgrade/devices/disk-analysis/{taskId}
/api/provisioning/v1/api/v1/fleet/upgrade/devices/disk-analysis/{taskId}
/api/v1/fleet/upgrade/api/v1/fleet/upgrade/devices/disk-analysis/{taskId}
/api/v1/fleet/upgrade/devices/disk-analysis/{taskId}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "task_id": "string",
  • "status": "QUEUED",
  • "created_at": "2026-07-17T10:37:07Z",
  • "started_at": "2026-07-17T10:37:07Z",
  • "completed_at": "2026-07-17T10:37:07Z",
  • "progress":
    {
    },
  • "result":
    {
    },
  • "error":
    {
    }
}

SoftwareDistribution

List software distribution jobs

Authorizations:
query Parameters
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

Responses

200

Paginated list of software distribution jobs

401

Authentication required

get/api/v1/fleet/upgrade/jobs/software-distribution
/api/api/v1/fleet/upgrade/jobs/software-distribution
/api/provisioning/v1/api/v1/fleet/upgrade/jobs/software-distribution
/api/v1/fleet/upgrade/api/v1/fleet/upgrade/jobs/software-distribution
/api/v1/fleet/upgrade/jobs/software-distribution

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "data":
    [
    ],
  • "pagination":
    {
    }
}

Create a software distribution job

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.

Authorizations:
Request Body schema: application/json
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)

Responses

201

Software distribution job created (in DRAFT state)

400

Invalid request

401

Authentication required

409

Job name already exists

post/api/v1/fleet/upgrade/jobs/software-distribution
/api/api/v1/fleet/upgrade/jobs/software-distribution
/api/provisioning/v1/api/v1/fleet/upgrade/jobs/software-distribution
/api/v1/fleet/upgrade/api/v1/fleet/upgrade/jobs/software-distribution
/api/v1/fleet/upgrade/jobs/software-distribution

Request samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "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":
    {
    }
}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "id": "string",
  • "workflowId": "string",
  • "name": "string",
  • "description": "string",
  • "status": "DRAFT",
  • "enabled": true,
  • "config":
    {
    },
  • "execution":
    {
    },
  • "createdBy": "string",
  • "modifiedBy": "string",
  • "createdAt": "2026-07-17T10:37:07Z",
  • "updatedAt": "2026-07-17T10:37:07Z"
}

Get software distribution job details

Returns full job details including configuration, current lifecycle status, and execution state.

Authorizations:
path Parameters
jobId
required
string <uuid>

Responses

200

Software distribution job details

401

Authentication required

404

Resource not found

get/api/v1/fleet/upgrade/jobs/software-distribution/{jobId}
/api/api/v1/fleet/upgrade/jobs/software-distribution/{jobId}
/api/provisioning/v1/api/v1/fleet/upgrade/jobs/software-distribution/{jobId}
/api/v1/fleet/upgrade/api/v1/fleet/upgrade/jobs/software-distribution/{jobId}
/api/v1/fleet/upgrade/jobs/software-distribution/{jobId}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "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":
    {
    },
  • "execution":
    {
    },
  • "createdAt": "2026-05-29T08:55:00Z",
  • "updatedAt": "2026-05-29T09:28:00Z"
}

Update software distribution job configuration

Replaces the job configuration. Only allowed when the job is in DRAFT or READY state.

Authorizations:
path Parameters
jobId
required
string <uuid>
Request Body schema: application/json
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)

Responses

200

Job updated

400

Invalid request

401

Authentication required

404

Resource not found

409

Job cannot be updated in its current state

patch/api/v1/fleet/upgrade/jobs/software-distribution/{jobId}
/api/api/v1/fleet/upgrade/jobs/software-distribution/{jobId}
/api/provisioning/v1/api/v1/fleet/upgrade/jobs/software-distribution/{jobId}
/api/v1/fleet/upgrade/api/v1/fleet/upgrade/jobs/software-distribution/{jobId}
/api/v1/fleet/upgrade/jobs/software-distribution/{jobId}

Request samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "name": "distribute-bigip-17.1.2-to-prod-v2",
  • "description": "Updated device list",
  • "config":
    {
    }
}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "id": "string",
  • "workflowId": "string",
  • "name": "string",
  • "description": "string",
  • "status": "DRAFT",
  • "enabled": true,
  • "config":
    {
    },
  • "execution":
    {
    },
  • "createdBy": "string",
  • "modifiedBy": "string",
  • "createdAt": "2026-07-17T10:37:07Z",
  • "updatedAt": "2026-07-17T10:37:07Z"
}

Delete a software distribution job

Permanently deletes a software distribution job. Only allowed when the job is not in RUNNING state. Terminates any in-progress execution before deletion.

Authorizations:
path Parameters
jobId
required
string <uuid>

Responses

204

Job deleted

401

Authentication required

404

Resource not found

409

Job cannot be deleted in its current state (e.g. RUNNING)

delete/api/v1/fleet/upgrade/jobs/software-distribution/{jobId}
/api/api/v1/fleet/upgrade/jobs/software-distribution/{jobId}
/api/provisioning/v1/api/v1/fleet/upgrade/jobs/software-distribution/{jobId}
/api/v1/fleet/upgrade/api/v1/fleet/upgrade/jobs/software-distribution/{jobId}
/api/v1/fleet/upgrade/jobs/software-distribution/{jobId}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "error": "string",
  • "code": "string"
}

Start a software distribution job

Transitions a software distribution job from DRAFT/READY → RUNNING and begins distributing the image to target devices in batches.

Pre-execution checks:

  • Image must exist and be accessible in the image registry
  • All target devices must be reachable
Authorizations:
path Parameters
jobId
required
string <uuid>
Request Body schema: application/json
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.

Responses

200

Job activated and distribution started

400

Invalid request

401

Authentication required

404

Resource not found

409

Job cannot be activated (wrong state or image not accessible)

post/api/v1/fleet/upgrade/jobs/software-distribution/{jobId}/activate
/api/api/v1/fleet/upgrade/jobs/software-distribution/{jobId}/activate
/api/provisioning/v1/api/v1/fleet/upgrade/jobs/software-distribution/{jobId}/activate
/api/v1/fleet/upgrade/api/v1/fleet/upgrade/jobs/software-distribution/{jobId}/activate
/api/v1/fleet/upgrade/jobs/software-distribution/{jobId}/activate

Request samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "changeRequest": "string"
}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "id": "string",
  • "workflowId": "string",
  • "name": "string",
  • "jobType": "SOFTWARE_DISTRIBUTION",
  • "status": "DRAFT",
  • "updatedAt": "2026-07-17T10:37:07Z"
}

Pause a running software distribution job

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.

Authorizations:
path Parameters
jobId
required
string <uuid>

Responses

202

Pause accepted — job is PAUSING (draining in-flight)

401

Authentication required

404

Resource not found

409

Job is not in a pausable state

post/api/v1/fleet/upgrade/jobs/software-distribution/{jobId}/pause
/api/api/v1/fleet/upgrade/jobs/software-distribution/{jobId}/pause
/api/provisioning/v1/api/v1/fleet/upgrade/jobs/software-distribution/{jobId}/pause
/api/v1/fleet/upgrade/api/v1/fleet/upgrade/jobs/software-distribution/{jobId}/pause
/api/v1/fleet/upgrade/jobs/software-distribution/{jobId}/pause

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "error": "string",
  • "code": "string"
}

Resume a paused software distribution job

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.

Authorizations:
path Parameters
jobId
required
string <uuid>

Responses

202

Resume accepted — job is back to RUNNING

401

Authentication required

404

Resource not found

409

Job is not in a resumable state

post/api/v1/fleet/upgrade/jobs/software-distribution/{jobId}/resume
/api/api/v1/fleet/upgrade/jobs/software-distribution/{jobId}/resume
/api/provisioning/v1/api/v1/fleet/upgrade/jobs/software-distribution/{jobId}/resume
/api/v1/fleet/upgrade/api/v1/fleet/upgrade/jobs/software-distribution/{jobId}/resume
/api/v1/fleet/upgrade/jobs/software-distribution/{jobId}/resume

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "error": "string",
  • "code": "string"
}

Cancel a running or paused software distribution job

Durably signals job cancellation by transitioning to CANCELLING.

  • The claim gate immediately stops the worker pool from picking new devices.
  • In-flight workers run to completion of their current device (no mid-stream kill — chunked uploads can't be safely interrupted).
  • When the pool drains, remaining non-terminal per-device rows are marked CANCELLED and the job returns to READY (re-activatable); the CANCELLED outcome is recorded on the EXECUTION row, not the job, because the job is a long-lived re-activatable definition.
  • Safe across pods and pod restarts: CANCELLING is durable in the DB so a different pod / a restarted pod converges to READY at the job level without operator intervention.
Authorizations:
path Parameters
jobId
required
string <uuid>

Responses

202

Cancel accepted — job is CANCELLING; converges to READY at the job level (CANCELLED on the execution row)

401

Authentication required

404

Resource not found

409

Job is not in a cancellable state (e.g. already COMPLETED or in a non-cancellable lifecycle state)

post/api/v1/fleet/upgrade/jobs/software-distribution/{jobId}/cancel
/api/api/v1/fleet/upgrade/jobs/software-distribution/{jobId}/cancel
/api/provisioning/v1/api/v1/fleet/upgrade/jobs/software-distribution/{jobId}/cancel
/api/v1/fleet/upgrade/api/v1/fleet/upgrade/jobs/software-distribution/{jobId}/cancel
/api/v1/fleet/upgrade/jobs/software-distribution/{jobId}/cancel

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "error": "string",
  • "code": "string"
}

Get per-device runtime status for a software distribution job

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.

Authorizations:
path Parameters
jobId
required
string <uuid>

Responses

200

Per-device + roll-up status

401

Authentication required

404

Resource not found

get/api/v1/fleet/upgrade/jobs/software-distribution/{jobId}/status
/api/api/v1/fleet/upgrade/jobs/software-distribution/{jobId}/status
/api/provisioning/v1/api/v1/fleet/upgrade/jobs/software-distribution/{jobId}/status
/api/v1/fleet/upgrade/api/v1/fleet/upgrade/jobs/software-distribution/{jobId}/status
/api/v1/fleet/upgrade/jobs/software-distribution/{jobId}/status

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "jobId": "string",
  • "status": "RUNNING",
  • "totalDevices": 0,
  • "pending": 0,
  • "transferring": 0,
  • "verifying": 0,
  • "completed": 0,
  • "failed": 0,
  • "cancelled": 0,
  • "skipped": 0,
  • "overallPercent": 0,
  • "devices":
    [
    ]
}

List executions of a software distribution job

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.

Authorizations:
path Parameters
jobId
required
string <uuid>

Responses

200

List of executions

401

Authentication required

404

Resource not found

get/api/v1/fleet/upgrade/jobs/software-distribution/{jobId}/executions
/api/api/v1/fleet/upgrade/jobs/software-distribution/{jobId}/executions
/api/provisioning/v1/api/v1/fleet/upgrade/jobs/software-distribution/{jobId}/executions
/api/v1/fleet/upgrade/api/v1/fleet/upgrade/jobs/software-distribution/{jobId}/executions
/api/v1/fleet/upgrade/jobs/software-distribution/{jobId}/executions

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "items":
    [
    ],
  • "totalItems": 0
}

Get a single execution of a software distribution job

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.

Authorizations:
path Parameters
jobId
required
string <uuid>
executionId
required
string <uuid>

Responses

200

Execution detail

401

Authentication required

404

Resource not found

get/api/v1/fleet/upgrade/jobs/software-distribution/{jobId}/executions/{executionId}
/api/api/v1/fleet/upgrade/jobs/software-distribution/{jobId}/executions/{executionId}
/api/provisioning/v1/api/v1/fleet/upgrade/jobs/software-distribution/{jobId}/executions/{executionId}
/api/v1/fleet/upgrade/api/v1/fleet/upgrade/jobs/software-distribution/{jobId}/executions/{executionId}
/api/v1/fleet/upgrade/jobs/software-distribution/{jobId}/executions/{executionId}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "id": "string",
  • "jobId": "string",
  • "jobName": "string",
  • "jobDescription": "string",
  • "trigger": "USER",
  • "status": "RUNNING",
  • "reason": "string",
  • "startedAt": "2026-07-17T10:37:07Z",
  • "completedAt": "2026-07-17T10:37:07Z",
  • "durationMs": 0,
  • "activityCount": 0,
  • "retryCount": 0,
  • "currentStep": "string",
  • "lastError": "string",
  • "changeRequest": "string",
  • "correlationId": "string",
  • "createdBy": "string",
  • "modifiedBy": "string",
  • "instanceProgress":
    {
    }
}

Cancel distribution for one device in a running job

Cancels in-flight distribution for a single device within a running job. Orthogonal to the job-level cancel — the rest of the job continues.

  • Device's distribution_state row transitions to CANCELLED
  • The device lock for this job is released
  • If the device is currently TRANSFERRING, the next chunk boundary observes the cancel and the goroutine returns
Authorizations:
path Parameters
jobId
required
string <uuid>
deviceId
required
string <uuid>

Responses

202

Per-target cancel accepted

401

Authentication required

404

Resource not found

409

Device is already in a terminal state for this job (COMPLETED / FAILED / CANCELLED / SKIPPED)

delete/api/v1/fleet/upgrade/jobs/software-distribution/{jobId}/targets/{deviceId}
/api/api/v1/fleet/upgrade/jobs/software-distribution/{jobId}/targets/{deviceId}
/api/provisioning/v1/api/v1/fleet/upgrade/jobs/software-distribution/{jobId}/targets/{deviceId}
/api/v1/fleet/upgrade/api/v1/fleet/upgrade/jobs/software-distribution/{jobId}/targets/{deviceId}
/api/v1/fleet/upgrade/jobs/software-distribution/{jobId}/targets/{deviceId}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "error": "string",
  • "code": "string"
}

SoftwareInstallation

List software installation jobs

Authorizations:
query Parameters
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

Responses

200

Paginated list of software installation jobs

401

Authentication required

get/api/v1/fleet/upgrade/jobs/software-installation
/api/api/v1/fleet/upgrade/jobs/software-installation
/api/provisioning/v1/api/v1/fleet/upgrade/jobs/software-installation
/api/v1/fleet/upgrade/api/v1/fleet/upgrade/jobs/software-installation
/api/v1/fleet/upgrade/jobs/software-installation

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "data":
    [
    ],
  • "pagination":
    {
    }
}

Create a software installation job

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 devices
  • HA — upgrades HA pairs, maintaining service continuity

batchSize controls serial vs batch execution:

  • batchSize=1 — serial: upgrades one device (or HA pair) at a time
  • batchSize>1 — batch: upgrades multiple devices (or HA pairs) in parallel

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

Authorizations:
Request Body schema: application/json
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)

Responses

201

Software installation job created (in DRAFT state)

400

Invalid request

401

Authentication required

409

Job name already exists

post/api/v1/fleet/upgrade/jobs/software-installation
/api/api/v1/fleet/upgrade/jobs/software-installation
/api/provisioning/v1/api/v1/fleet/upgrade/jobs/software-installation
/api/v1/fleet/upgrade/api/v1/fleet/upgrade/jobs/software-installation
/api/v1/fleet/upgrade/jobs/software-installation

Request samples

Content type
application/json
Example
Copy
Expand all Collapse all
{
  • "name": "install-bigip-17.1.2-standalone-serial",
  • "description": "Upgrade 3 devices one at a time",
  • "config":
    {
    }
}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "id": "string",
  • "workflowId": "string",
  • "name": "string",
  • "description": "string",
  • "status": "DRAFT",
  • "enabled": true,
  • "config":
    {
    },
  • "execution":
    {
    },
  • "deviceInstallStates":
    [
    ],
  • "createdBy": "string",
  • "modifiedBy": "string",
  • "createdAt": "2026-07-17T10:37:07Z",
  • "updatedAt": "2026-07-17T10:37:07Z"
}

Get software installation job details

Returns full job details including configuration, current lifecycle status, and per-device install state for any devices that have started execution.

Authorizations:
path Parameters
jobId
required
string <uuid>

Responses

200

Software installation job details

401

Authentication required

404

Resource not found

get/api/v1/fleet/upgrade/jobs/software-installation/{jobId}
/api/api/v1/fleet/upgrade/jobs/software-installation/{jobId}
/api/provisioning/v1/api/v1/fleet/upgrade/jobs/software-installation/{jobId}
/api/v1/fleet/upgrade/api/v1/fleet/upgrade/jobs/software-installation/{jobId}
/api/v1/fleet/upgrade/jobs/software-installation/{jobId}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "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":
    {
    },
  • "execution":
    {
    },
  • "deviceInstallStates":
    [
    ],
  • "createdAt": "2026-05-29T09:55:00Z",
  • "updatedAt": "2026-05-29T10:45:00Z"
}

Update software installation job configuration

Replaces the job configuration. Only allowed when the job is in DRAFT or READY state.

Authorizations:
path Parameters
jobId
required
string <uuid>
Request Body schema: application/json
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)

Responses

200

Job updated

400

Invalid request

401

Authentication required

404

Resource not found

409

Job cannot be updated in its current state

patch/api/v1/fleet/upgrade/jobs/software-installation/{jobId}
/api/api/v1/fleet/upgrade/jobs/software-installation/{jobId}
/api/provisioning/v1/api/v1/fleet/upgrade/jobs/software-installation/{jobId}
/api/v1/fleet/upgrade/api/v1/fleet/upgrade/jobs/software-installation/{jobId}
/api/v1/fleet/upgrade/jobs/software-installation/{jobId}

Request samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "name": "install-bigip-17.1.2-batch-v2",
  • "description": "Updated batch size",
  • "config":
    {
    }
}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "id": "string",
  • "workflowId": "string",
  • "name": "string",
  • "description": "string",
  • "status": "DRAFT",
  • "enabled": true,
  • "config":
    {
    },
  • "execution":
    {
    },
  • "deviceInstallStates":
    [
    ],
  • "createdBy": "string",
  • "modifiedBy": "string",
  • "createdAt": "2026-07-17T10:37:07Z",
  • "updatedAt": "2026-07-17T10:37:07Z"
}

Delete a software installation job

Permanently deletes a software installation job. Only allowed when the job is not in RUNNING state. Terminates any in-progress execution before deletion.

Authorizations:
path Parameters
jobId
required
string <uuid>

Responses

204

Job deleted

401

Authentication required

404

Resource not found

409

Job cannot be deleted in its current state (e.g. RUNNING)

delete/api/v1/fleet/upgrade/jobs/software-installation/{jobId}
/api/api/v1/fleet/upgrade/jobs/software-installation/{jobId}
/api/provisioning/v1/api/v1/fleet/upgrade/jobs/software-installation/{jobId}
/api/v1/fleet/upgrade/api/v1/fleet/upgrade/jobs/software-installation/{jobId}
/api/v1/fleet/upgrade/jobs/software-installation/{jobId}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "error": "string",
  • "code": "string"
}

Start a software installation job

Transitions a software installation job from DRAFT/READY → RUNNING and begins the installation pipeline.

Pre-execution checks:

  • Image must be in VERIFIED state
  • All target devices must be reachable
  • No target device may be locked by another running job
  • Total running software installation jobs must be fewer than 5

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.

Authorizations:
path Parameters
jobId
required
string <uuid>
Request Body schema: application/json
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.

Responses

200

Job activated and installation started

400

Invalid request

401

Authentication required

404

Resource not found

409

Job cannot be activated (wrong state, image not verified, device locked, or max concurrent jobs reached)

post/api/v1/fleet/upgrade/jobs/software-installation/{jobId}/activate
/api/api/v1/fleet/upgrade/jobs/software-installation/{jobId}/activate
/api/provisioning/v1/api/v1/fleet/upgrade/jobs/software-installation/{jobId}/activate
/api/v1/fleet/upgrade/api/v1/fleet/upgrade/jobs/software-installation/{jobId}/activate
/api/v1/fleet/upgrade/jobs/software-installation/{jobId}/activate

Request samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "changeRequest": "string"
}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "id": "string",
  • "workflowId": "string",
  • "name": "string",
  • "jobType": "SOFTWARE_DISTRIBUTION",
  • "status": "DRAFT",
  • "updatedAt": "2026-07-17T10:37:07Z"
}

Pause a running software installation job (HITL)

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.

Authorizations:
path Parameters
jobId
required
string <uuid>

Responses

200

Pause requested — job will pause at the next batch boundary

401

Authentication required

404

Resource not found

409

Job is not in a pausable state

post/api/v1/fleet/upgrade/jobs/software-installation/{jobId}/pause
/api/api/v1/fleet/upgrade/jobs/software-installation/{jobId}/pause
/api/provisioning/v1/api/v1/fleet/upgrade/jobs/software-installation/{jobId}/pause
/api/v1/fleet/upgrade/api/v1/fleet/upgrade/jobs/software-installation/{jobId}/pause
/api/v1/fleet/upgrade/jobs/software-installation/{jobId}/pause

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "id": "string",
  • "workflowId": "string",
  • "name": "string",
  • "jobType": "SOFTWARE_DISTRIBUTION",
  • "status": "DRAFT",
  • "updatedAt": "2026-07-17T10:37:07Z"
}

Resume a paused software installation job

Resumes a PAUSED software installation job. Execution continues with the next pending batch. Job transitions back to RUNNING state.

Authorizations:
path Parameters
jobId
required
string <uuid>

Responses

200

Job resumed

401

Authentication required

404

Resource not found

409

Job is not in a resumable state

post/api/v1/fleet/upgrade/jobs/software-installation/{jobId}/resume
/api/api/v1/fleet/upgrade/jobs/software-installation/{jobId}/resume
/api/provisioning/v1/api/v1/fleet/upgrade/jobs/software-installation/{jobId}/resume
/api/v1/fleet/upgrade/api/v1/fleet/upgrade/jobs/software-installation/{jobId}/resume
/api/v1/fleet/upgrade/jobs/software-installation/{jobId}/resume

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "id": "string",
  • "workflowId": "string",
  • "name": "string",
  • "jobType": "SOFTWARE_DISTRIBUTION",
  • "status": "DRAFT",
  • "updatedAt": "2026-07-17T10:37:07Z"
}

List executions of a software installation job

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.

Authorizations:
path Parameters
jobId
required
string <uuid>

Responses

200

List of executions

401

Authentication required

404

Resource not found

get/api/v1/fleet/upgrade/jobs/software-installation/{jobId}/executions
/api/api/v1/fleet/upgrade/jobs/software-installation/{jobId}/executions
/api/provisioning/v1/api/v1/fleet/upgrade/jobs/software-installation/{jobId}/executions
/api/v1/fleet/upgrade/api/v1/fleet/upgrade/jobs/software-installation/{jobId}/executions
/api/v1/fleet/upgrade/jobs/software-installation/{jobId}/executions

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "items":
    [
    ],
  • "totalItems": 0
}

Get a single execution of a software installation job

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.

Authorizations:
path Parameters
jobId
required
string <uuid>
executionId
required
string <uuid>

Responses

200

Execution detail

401

Authentication required

404

Resource not found

get/api/v1/fleet/upgrade/jobs/software-installation/{jobId}/executions/{executionId}
/api/api/v1/fleet/upgrade/jobs/software-installation/{jobId}/executions/{executionId}
/api/provisioning/v1/api/v1/fleet/upgrade/jobs/software-installation/{jobId}/executions/{executionId}
/api/v1/fleet/upgrade/api/v1/fleet/upgrade/jobs/software-installation/{jobId}/executions/{executionId}
/api/v1/fleet/upgrade/jobs/software-installation/{jobId}/executions/{executionId}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "id": "string",
  • "jobId": "string",
  • "jobName": "string",
  • "jobDescription": "string",
  • "trigger": "USER",
  • "status": "RUNNING",
  • "reason": "string",
  • "startedAt": "2026-07-17T10:37:07Z",
  • "completedAt": "2026-07-17T10:37:07Z",
  • "durationMs": 0,
  • "activityCount": 0,
  • "retryCount": 0,
  • "currentStep": "string",
  • "lastError": "string",
  • "changeRequest": "string",
  • "correlationId": "string",
  • "createdBy": "string",
  • "modifiedBy": "string",
  • "instanceProgress":
    {
    },
  • "configSnapshot":
    {
    },
  • "haCoordination":
    {
    }
}

Cancel a running or paused software installation job

Cancels the installation job gracefully.

  • Any in-progress batch is allowed to complete its current step (no mid-step kill)
  • All pending devices transition to CANCELLED state
  • Device locks are released
  • Job returns to READY (re-activatable); the CANCELLED outcome is recorded on the EXECUTION row, not the job, because the job is a long-lived re-activatable definition
Authorizations:
path Parameters
jobId
required
string <uuid>

Responses

200

Job cancelled

401

Authentication required

404

Resource not found

409

Job is not in a cancellable state (e.g. already COMPLETED or in a non-cancellable lifecycle state)

post/api/v1/fleet/upgrade/jobs/software-installation/{jobId}/cancel
/api/api/v1/fleet/upgrade/jobs/software-installation/{jobId}/cancel
/api/provisioning/v1/api/v1/fleet/upgrade/jobs/software-installation/{jobId}/cancel
/api/v1/fleet/upgrade/api/v1/fleet/upgrade/jobs/software-installation/{jobId}/cancel
/api/v1/fleet/upgrade/jobs/software-installation/{jobId}/cancel

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "id": "string",
  • "workflowId": "string",
  • "name": "string",
  • "jobType": "SOFTWARE_DISTRIBUTION",
  • "status": "DRAFT",
  • "updatedAt": "2026-07-17T10:37:07Z"
}

Validation

Trigger async pre-job validation for a list of devices against an image

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.


Soft checks — warn operator; job may still proceed (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

Hard checks — block upgrade; job cannot proceed (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 check detail (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:

  1. Live read of /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.
  2. Fallback to the static K7727 lookup table keyed by 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).

Authorizations:
Request Body schema: application/json
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.

  • NEXT_INACTIVE: install on the next available inactive volume numerically
  • LAST_INACTIVE: install on the last available inactive volume numerically
  • NEXT_SEQUENTIAL_NEW: create a new volume with the next sequential identifier

Responses

202

Validation triggered — poll GET /validate/{validationRunId} for results

400

Invalid request

401

Authentication required

post/api/v1/fleet/upgrade/validate
/api/api/v1/fleet/upgrade/validate
/api/provisioning/v1/api/v1/fleet/upgrade/validate
/api/v1/fleet/upgrade/api/v1/fleet/upgrade/validate
/api/v1/fleet/upgrade/validate

Request samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "device_targets":
    [
    ],
  • "image_id": "string",
  • "volume_strategy": "NEXT_INACTIVE"
}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "validation_run_id": "string",
  • "message": "validation triggered"
}

Get results for a validation run

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.

Authorizations:
path Parameters
validationRunId
required
string <uuid>

The validation run ID returned by POST /validate

Responses

200

Validation results

401

Authentication required

404

Resource not found

get/api/v1/fleet/upgrade/validate/{validationRunId}
/api/api/v1/fleet/upgrade/validate/{validationRunId}
/api/provisioning/v1/api/v1/fleet/upgrade/validate/{validationRunId}
/api/v1/fleet/upgrade/api/v1/fleet/upgrade/validate/{validationRunId}
/api/v1/fleet/upgrade/validate/{validationRunId}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "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":
    [
    ]
}

CompatMatrix

List BIG-IP upgrade path rules (K13845)

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

Authorizations:

Responses

200

List of upgrade path rules

401

Authentication required

get/api/v1/fleet/upgrade/compat/upgrade-paths
/api/api/v1/fleet/upgrade/compat/upgrade-paths
/api/provisioning/v1/api/v1/fleet/upgrade/compat/upgrade-paths
/api/v1/fleet/upgrade/api/v1/fleet/upgrade/compat/upgrade-paths
/api/v1/fleet/upgrade/compat/upgrade-paths

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "data":
    [
    ],
  • "total": 0
}

Add or update a BIG-IP upgrade path rule (K13845 operator override)

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:

  • Add a new rule without checking whether it already exists
  • Update an existing rule (including YAML-seeded rows) without needing to look up its UUID first
  • Use the same idempotent script to enforce desired state across environments

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)
Authorizations:
Request Body schema: application/json
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.

Responses

200

Existing row updated (natural key already existed)

201

New row created (natural key did not previously exist)

400

Invalid request

401

Authentication required

post/api/v1/fleet/upgrade/compat/upgrade-paths
/api/api/v1/fleet/upgrade/compat/upgrade-paths
/api/provisioning/v1/api/v1/fleet/upgrade/compat/upgrade-paths
/api/v1/fleet/upgrade/api/v1/fleet/upgrade/compat/upgrade-paths
/api/v1/fleet/upgrade/compat/upgrade-paths

Request samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "target_major_version": "21",
  • "min_source_version": "14.0.0",
  • "max_source_version": "string",
  • "notes": "string"
}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "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-07-17T10:37:07Z",
  • "updated_at": "2026-07-17T10:37:07Z"
}

Get a BIG-IP upgrade path rule by ID

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

Authorizations:
path Parameters
compatId
required
string <uuid>

Unique ID of a compatibility matrix row.

Responses

200

Upgrade path rule

401

Authentication required

404

Resource not found

get/api/v1/fleet/upgrade/compat/upgrade-paths/{compatId}
/api/api/v1/fleet/upgrade/compat/upgrade-paths/{compatId}
/api/provisioning/v1/api/v1/fleet/upgrade/compat/upgrade-paths/{compatId}
/api/v1/fleet/upgrade/api/v1/fleet/upgrade/compat/upgrade-paths/{compatId}
/api/v1/fleet/upgrade/compat/upgrade-paths/{compatId}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "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-07-17T10:37:07Z",
  • "updated_at": "2026-07-17T10:37:07Z"
}

Delete a BIG-IP upgrade path rule by ID

Authorizations:
path Parameters
compatId
required
string <uuid>

Unique ID of a compatibility matrix row.

Responses

204

Row deleted

401

Authentication required

404

Resource not found

delete/api/v1/fleet/upgrade/compat/upgrade-paths/{compatId}
/api/api/v1/fleet/upgrade/compat/upgrade-paths/{compatId}
/api/provisioning/v1/api/v1/fleet/upgrade/compat/upgrade-paths/{compatId}
/api/v1/fleet/upgrade/api/v1/fleet/upgrade/compat/upgrade-paths/{compatId}
/api/v1/fleet/upgrade/compat/upgrade-paths/{compatId}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "error": "string",
  • "code": "string"
}

FlightChecks

List flight-check snapshots

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

Authorizations:
query Parameters
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).

Responses

200

Paginated list of flight-check snapshots

401

Authentication required

get/api/v1/fleet/upgrade/flight-checks/snapshots
/api/api/v1/fleet/upgrade/flight-checks/snapshots
/api/provisioning/v1/api/v1/fleet/upgrade/flight-checks/snapshots
/api/v1/fleet/upgrade/api/v1/fleet/upgrade/flight-checks/snapshots
/api/v1/fleet/upgrade/flight-checks/snapshots

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "data":
    [
    ],
  • "pagination":
    {
    }
}

Get a single flight-check snapshot by ID

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.

Authorizations:
path Parameters
snapshotId
required
string <uuid>

Unique ID of a flight-check snapshot.

Responses

200

Flight-check snapshot

401

Authentication required

404

Resource not found

get/api/v1/fleet/upgrade/flight-checks/snapshots/{snapshotId}
/api/api/v1/fleet/upgrade/flight-checks/snapshots/{snapshotId}
/api/provisioning/v1/api/v1/fleet/upgrade/flight-checks/snapshots/{snapshotId}
/api/v1/fleet/upgrade/api/v1/fleet/upgrade/flight-checks/snapshots/{snapshotId}
/api/v1/fleet/upgrade/flight-checks/snapshots/{snapshotId}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "id": "string",
  • "jobId": "string",
  • "deviceId": "string",
  • "phase": "PRE",
  • "capturedAt": "2026-07-17T10:37:07Z",
  • "trunkStatus":
    {
    },
  • "interfaceStatus":
    {
    },
  • "virtualServerState":
    {
    },
  • "poolHealth":
    {
    },
  • "poolMemberHealth":
    {
    },
  • "performanceAllStats":
    {
    },
  • "lagStatus":
    {
    },
  • "alarms":
    {
    },
  • "healthSummary":
    {
    }
}

List PRE-vs-POST flight-check diffs

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

Authorizations:
query Parameters
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.

Responses

200

Paginated list of flight-check diffs

401

Authentication required

get/api/v1/fleet/upgrade/flight-checks/diffs
/api/api/v1/fleet/upgrade/flight-checks/diffs
/api/provisioning/v1/api/v1/fleet/upgrade/flight-checks/diffs
/api/v1/fleet/upgrade/api/v1/fleet/upgrade/flight-checks/diffs
/api/v1/fleet/upgrade/flight-checks/diffs

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "data":
    [
    ],
  • "pagination":
    {
    }
}

Get a single PRE-vs-POST flight-check diff by ID

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}).

Authorizations:
path Parameters
diffId
required
string <uuid>

Unique ID of a flight-check diff.

Responses

200

Flight-check diff

401

Authentication required

404

Resource not found

get/api/v1/fleet/upgrade/flight-checks/diffs/{diffId}
/api/api/v1/fleet/upgrade/flight-checks/diffs/{diffId}
/api/provisioning/v1/api/v1/fleet/upgrade/flight-checks/diffs/{diffId}
/api/v1/fleet/upgrade/api/v1/fleet/upgrade/flight-checks/diffs/{diffId}
/api/v1/fleet/upgrade/flight-checks/diffs/{diffId}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "id": "string",
  • "jobId": "string",
  • "deviceId": "string",
  • "degraded": true,
  • "preSnapshotUrl": "string",
  • "postSnapshotUrl": "string",
  • "computedAt": "2026-07-17T10:37:07Z",
  • "entries":
    [
    ]
}

Health

Health check endpoint

Returns the health status of the system manager service

Authorizations:

Responses

200

Service is healthy

get/api/system/health
/api/api/system/health
/api/provisioning/v1/api/system/health
/api/v1/fleet/upgrade/api/system/health
/api/system/health

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "success": true,
  • "data":
    {
    }
}

Get system version

Returns the current F5 Insight version information

Authorizations:

Responses

200

Version information retrieved successfully

get/api/system/version
/api/api/system/version
/api/provisioning/v1/api/system/version
/api/v1/fleet/upgrade/api/system/version
/api/system/version

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "success": true,
  • "data":
    {
    }
}

Upgrade

Get uploaded bundle info

Returns information about the currently uploaded bundle, if any

Authorizations:

Responses

200

Bundle info retrieved successfully

get/api/system/upgrade/upload
/api/api/system/upgrade/upload
/api/provisioning/v1/api/system/upgrade/upload
/api/v1/fleet/upgrade/api/system/upgrade/upload
/api/system/upgrade/upload

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "data":
    {
    }
}

Delete uploaded upgrade bundle

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.

Authorizations:
query Parameters
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

Responses

200

Uploaded bundle deleted

400

No matching uploaded bundle found

409

Upgrade operation already in progress

500

Failed to delete uploaded bundle

delete/api/system/upgrade/upload
/api/api/system/upgrade/upload
/api/provisioning/v1/api/system/upgrade/upload
/api/v1/fleet/upgrade/api/system/upgrade/upload
/api/system/upgrade/upload

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "success": true,
  • "data":
    {
    }
}

Upload upgrade bundle

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.

Authorizations:
Request Body schema: multipart/form-data
bundle
required
string <binary>

Upgrade bundle .tar.gz file (max 8 GB)

Responses

201

Bundle uploaded and validated

400

Invalid request or bundle

409

Another operation is in progress

413

File exceeds 8 GB limit

422

Invalid archive format or missing required structure

post/api/system/upgrade/upload
/api/api/system/upgrade/upload
/api/provisioning/v1/api/system/upgrade/upload
/api/v1/fleet/upgrade/api/system/upgrade/upload
/api/system/upgrade/upload

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "status": "201",
  • "data":
    {
    }
}

Start upgrade

Not supported since F5 Insight 1.2.0. Use POST /api/system/upgrade/apply instead.

Authorizations:

Responses

410

Endpoint is not supported

post/api/system/upgrade/start
/api/api/system/upgrade/start
/api/provisioning/v1/api/system/upgrade/start
/api/v1/fleet/upgrade/api/system/upgrade/start
/api/system/upgrade/start

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "success": false,
  • "error":
    {
    }
}

Get upgrade status

Returns the current status of the upgrade operation

Authorizations:

Responses

200

Status retrieved successfully

get/api/system/upgrade/status
/api/api/system/upgrade/status
/api/provisioning/v1/api/system/upgrade/status
/api/v1/fleet/upgrade/api/system/upgrade/status
/api/system/upgrade/status

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "success": true,
  • "data":
    {
    }
}

Get upgrade catalog

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.

Authorizations:
query Parameters
mode
required
string
Enum: "online" "offline"

Catalog source filter.

Responses

200

Catalog retrieved successfully

400

Missing or invalid mode query parameter

get/api/system/upgrade/catalog
/api/api/system/upgrade/catalog
/api/provisioning/v1/api/system/upgrade/catalog
/api/v1/fleet/upgrade/api/system/upgrade/catalog
/api/system/upgrade/catalog

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "status": "200",
  • "data":
    {
    }
}

Get current running version

Returns the APP_VERSION environment variable from the running system-manager pod.

Authorizations:

Responses

200

Current version returned

get/api/system/upgrade/current
/api/api/system/upgrade/current
/api/provisioning/v1/api/system/upgrade/current
/api/v1/fleet/upgrade/api/system/upgrade/current
/api/system/upgrade/current

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "status": "200",
  • "data":
    {
    }
}

Run preflight checks for upgrade

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.

Authorizations:
query Parameters
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)

Responses

200

Preflight checks completed

400

Invalid version parameter

404

Version not found in catalog

get/api/system/upgrade/preflight
/api/api/system/upgrade/preflight
/api/provisioning/v1/api/system/upgrade/preflight
/api/v1/fleet/upgrade/api/system/upgrade/preflight
/api/system/upgrade/preflight

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "status": "200",
  • "data":
    {
    }
}

Apply upgrade

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.

Authorizations:
Request Body schema: application/json
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.

Responses

202

Upgrade initiated successfully

400

Invalid request or validation failed

409

Upgrade already in progress or preflight checks failed

503

Platform manager unavailable

post/api/system/upgrade/apply
/api/api/system/upgrade/apply
/api/provisioning/v1/api/system/upgrade/apply
/api/v1/fleet/upgrade/api/system/upgrade/apply
/api/system/upgrade/apply

Request samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "version": "3.2.1",
  • "kind": "patch",
  • "skip_backup": false,
  • "backup_passphrase": "MyStr0ng!Pass",
  • "backup_type": "full",
  • "storage_target": "local",
  • "bypass_preflight_checks": false
}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "status": "202",
  • "data":
    {
    }
}

Get upgrade job status

Unified polling endpoint for upgrade status, rollback state, rollback job status, and postflight checks.

Authorizations:
path Parameters
job_id
required
string <uuid>
Example: 550e8400-e29b-41d4-a716-446655440000

Upgrade history record ID

Responses

200

Job status retrieved successfully

404

Job not found

500

Internal server error

get/api/system/upgrade/jobs/{job_id}
/api/api/system/upgrade/jobs/{job_id}
/api/provisioning/v1/api/system/upgrade/jobs/{job_id}
/api/v1/fleet/upgrade/api/system/upgrade/jobs/{job_id}
/api/system/upgrade/jobs/{job_id}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "status": "200",
  • "data":
    {
    }
}

Cancel patch upgrade job

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.

Authorizations:
path Parameters
job_id
required
string <uuid>

Upgrade history record ID

Responses

202

Cancel accepted

400

Cancel is only supported for patch upgrade jobs

404

Job not found

409

No active job to cancel

post/api/system/upgrade/jobs/{job_id}/cancel
/api/api/system/upgrade/jobs/{job_id}/cancel
/api/provisioning/v1/api/system/upgrade/jobs/{job_id}/cancel
/api/v1/fleet/upgrade/api/system/upgrade/jobs/{job_id}/cancel
/api/system/upgrade/jobs/{job_id}/cancel

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "success": false,
  • "error":
    {
    }
}

Run post-flight health checks

Runs post-deployment health checks for a completed upgrade job.

Authorizations:
path Parameters
job_id
required
string <uuid>

Upgrade history record ID

Responses

200

Post-flight results

404

Job not found

get/api/system/upgrade/jobs/{job_id}/postflight
/api/api/system/upgrade/jobs/{job_id}/postflight
/api/provisioning/v1/api/system/upgrade/jobs/{job_id}/postflight
/api/v1/fleet/upgrade/api/system/upgrade/jobs/{job_id}/postflight
/api/system/upgrade/jobs/{job_id}/postflight

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "status": "200",
  • "data":
    {
    }
}

Roll back upgrade job

Manually starts rollback for the latest successful patch job within 72 hours of completion. Failed patch jobs trigger automatic rollback when deployment has started.

Authorizations:
path Parameters
job_id
required
string <uuid>

Upgrade history record ID

Responses

202

Rollback started

400

Rollback is not available for this job

404

Job not found

409

Another operation is already in progress

post/api/system/upgrade/jobs/{job_id}/rollback
/api/api/system/upgrade/jobs/{job_id}/rollback
/api/provisioning/v1/api/system/upgrade/jobs/{job_id}/rollback
/api/v1/fleet/upgrade/api/system/upgrade/jobs/{job_id}/rollback
/api/system/upgrade/jobs/{job_id}/rollback

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "status": "202",
  • "data":
    {
    }
}

Check rollback state availability

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.

Authorizations:
path Parameters
job_id
required
string <uuid>

Upgrade history record ID

Responses

200

Rollback state checked

404

Job not found

get/api/system/upgrade/jobs/{job_id}/rollback-state
/api/api/system/upgrade/jobs/{job_id}/rollback-state
/api/provisioning/v1/api/system/upgrade/jobs/{job_id}/rollback-state
/api/v1/fleet/upgrade/api/system/upgrade/jobs/{job_id}/rollback-state
/api/system/upgrade/jobs/{job_id}/rollback-state

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "status": "200",
  • "data":
    {
    }
}

Poll rollback job status

Returns rollback status, progress, and structured log lines.

Authorizations:
path Parameters
rollback_id
required
string <uuid>

Rollback history record ID

Responses

200

Rollback status

404

Rollback job not found

get/api/system/upgrade/rollback/{rollback_id}
/api/api/system/upgrade/rollback/{rollback_id}
/api/provisioning/v1/api/system/upgrade/rollback/{rollback_id}
/api/v1/fleet/upgrade/api/system/upgrade/rollback/{rollback_id}
/api/system/upgrade/rollback/{rollback_id}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "status": "200",
  • "data":
    {
    }
}

Confirm upgrade state is clean

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.

Authorizations:
path Parameters
job_id
required
string <uuid>

Upgrade history record ID

Responses

200

Dirty state cleared

403

Admin role required

404

Job not found

409

Job is already clean or is not an unresolved failed upgrade

post/api/system/upgrade/jobs/{job_id}/confirm-clean
/api/api/system/upgrade/jobs/{job_id}/confirm-clean
/api/provisioning/v1/api/system/upgrade/jobs/{job_id}/confirm-clean
/api/v1/fleet/upgrade/api/system/upgrade/jobs/{job_id}/confirm-clean
/api/system/upgrade/jobs/{job_id}/confirm-clean

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "success": false,
  • "error":
    {
    }
}

Get active upgrade job

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.

Authorizations:

Responses

200

Active job result

get/api/system/upgrade/active-job
/api/api/system/upgrade/active-job
/api/provisioning/v1/api/system/upgrade/active-job
/api/v1/fleet/upgrade/api/system/upgrade/active-job
/api/system/upgrade/active-job

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "status": "200",
  • "dirty_state": false,
  • "data":
    {
    }
}

Get upgrade history

Returns the last 50 upgrade jobs, newest first, with top-level dirty_state.

Authorizations:

Responses

200

Patch history

get/api/system/upgrade/history
/api/api/system/upgrade/history
/api/provisioning/v1/api/system/upgrade/history
/api/v1/fleet/upgrade/api/system/upgrade/history
/api/system/upgrade/history

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "status": "200",
  • "dirty_state": false,
  • "data":
    [
    ]
}

Get all-time upgrade stats

Returns aggregate statistics across all historical upgrade jobs.

Authorizations:

Responses

200

Aggregate stats

get/api/system/upgrade/history/stats
/api/api/system/upgrade/history/stats
/api/provisioning/v1/api/system/upgrade/history/stats
/api/v1/fleet/upgrade/api/system/upgrade/history/stats
/api/system/upgrade/history/stats

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "status": "200",
  • "data":
    {
    }
}

List pending scheduled upgrade jobs

Returns all scheduled upgrade jobs with status pending.

Authorizations:

Responses

200

Scheduled jobs list

get/api/system/upgrade/scheduled
/api/api/system/upgrade/scheduled
/api/provisioning/v1/api/system/upgrade/scheduled
/api/v1/fleet/upgrade/api/system/upgrade/scheduled
/api/system/upgrade/scheduled

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "status": "200",
  • "data":
    [
    ]
}

Schedule an upgrade

Schedules a patch or full_upgrade to run at a future UTC timestamp.

Authorizations:
Request Body schema: application/json
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.

Responses

201

Schedule created

400

scheduled_at must be a future timestamp

post/api/system/upgrade/schedule
/api/api/system/upgrade/schedule
/api/provisioning/v1/api/system/upgrade/schedule
/api/v1/fleet/upgrade/api/system/upgrade/schedule
/api/system/upgrade/schedule

Request samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "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
}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "status": "201",
  • "data":
    {
    }
}

Cancel a pending scheduled upgrade job

Cancels a pending scheduled job. Has no effect on jobs already triggered.

Authorizations:
path Parameters
sched_id
required
string <uuid>

Scheduled upgrade job ID

Responses

200

Scheduled job cancelled

404

Scheduled job not found

delete/api/system/upgrade/scheduled/{sched_id}
/api/api/system/upgrade/scheduled/{sched_id}
/api/provisioning/v1/api/system/upgrade/scheduled/{sched_id}
/api/v1/fleet/upgrade/api/system/upgrade/scheduled/{sched_id}
/api/system/upgrade/scheduled/{sched_id}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "success": false,
  • "error":
    {
    }
}

List completed scheduled upgrade jobs

Returns scheduled jobs in terminal states done, failed, and cancelled. Pending jobs are excluded.

Authorizations:

Responses

200

Scheduled job history

get/api/system/upgrade/scheduled/history
/api/api/system/upgrade/scheduled/history
/api/provisioning/v1/api/system/upgrade/scheduled/history
/api/v1/fleet/upgrade/api/system/upgrade/scheduled/history
/api/system/upgrade/scheduled/history

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "status": "200",
  • "data":
    [
    ]
}

Get recommended scheduling window

Analyses upgrade history to find the best 2-hour UTC scheduling window.

Authorizations:

Responses

200

Recommendation

get/api/system/upgrade/schedule/recommendation
/api/api/system/upgrade/schedule/recommendation
/api/provisioning/v1/api/system/upgrade/schedule/recommendation
/api/v1/fleet/upgrade/api/system/upgrade/schedule/recommendation
/api/system/upgrade/schedule/recommendation

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "status": "200",
  • "data":
    {
    }
}

Backup

List backups

Returns a list of all backup and restore jobs

Authorizations:

Responses

200

List of jobs

500

Failed to list backups

get/api/system/backups
/api/api/system/backups
/api/provisioning/v1/api/system/backups
/api/v1/fleet/upgrade/api/system/backups
/api/system/backups

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "success": true,
  • "data":
    [
    ]
}

Create a backup

Triggers a backup operation. Returns a job ID to track progress.

Authorizations:
Request Body schema: application/json
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.

Responses

202

Backup started

400

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.

409

Another backup/restore is in progress

500

Failed to create the backup job

503

Platform manager is unavailable

post/api/system/backups
/api/api/system/backups
/api/provisioning/v1/api/system/backups
/api/v1/fleet/upgrade/api/system/backups
/api/system/backups

Request samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "name": "string",
  • "backup_type": "full",
  • "passphrase": "stringstring",
  • "storage_target": "string"
}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "success": true,
  • "data":
    {
    }
}

Backup size anomaly analysis

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

Authorizations:

Responses

200

Analysis result

500

Failed to calculate backup analysis

get/api/system/backups/analysis
/api/api/system/backups/analysis
/api/provisioning/v1/api/system/backups/analysis
/api/v1/fleet/upgrade/api/system/backups/analysis
/api/system/backups/analysis

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "success": true,
  • "data":
    {
    }
}

Get backup details

Returns details of a specific backup job including live progress

Authorizations:
path Parameters
id
required
string <uuid>

Responses

200

Backup details

404

Backup not found

get/api/system/backups/{id}
/api/api/system/backups/{id}
/api/provisioning/v1/api/system/backups/{id}
/api/v1/fleet/upgrade/api/system/backups/{id}
/api/system/backups/{id}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "success": true,
  • "data":
    {
    }
}

Delete a backup

Deletes a backup file and its job record

Authorizations:
path Parameters
id
required
string <uuid>

Responses

200

Backup deleted

404

Backup not found

500

Failed to delete the backup

delete/api/system/backups/{id}
/api/api/system/backups/{id}
/api/provisioning/v1/api/system/backups/{id}
/api/v1/fleet/upgrade/api/system/backups/{id}
/api/system/backups/{id}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "success": true,
  • "data":
    {
    }
}

Download backup file

Downloads the backup archive file

Authorizations:
path Parameters
id
required
string <uuid>

Responses

200

Backup file stream

404

Backup not found

get/api/system/backups/{id}/download
/api/api/system/backups/{id}/download
/api/provisioning/v1/api/system/backups/{id}/download
/api/v1/fleet/upgrade/api/system/backups/{id}/download
/api/system/backups/{id}/download

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "success": false,
  • "error":
    {
    }
}

Restore from backup

Triggers a restore from the specified backup

Authorizations:
path Parameters
id
required
string <uuid>
Request Body schema: application/json
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)

Responses

202

Restore started

400

Invalid request

404

Backup, backup file, or referenced storage target not found

409

Another operation is in progress

500

Failed to start the restore job

503

Platform manager is unavailable

post/api/system/backups/{id}/restore
/api/api/system/backups/{id}/restore
/api/provisioning/v1/api/system/backups/{id}/restore
/api/v1/fleet/upgrade/api/system/backups/{id}/restore
/api/system/backups/{id}/restore

Request samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "passphrase": "string",
  • "components":
    [
    ],
  • "force": true
}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "success": true,
  • "data":
    {
    }
}

Upload backup file

Upload a backup .tar file from another system without restoring

Authorizations:
Request Body schema: multipart/form-data
backup
required
string <binary>

Backup .tar file

Responses

201

Backup uploaded

400

Invalid request

500

Failed to save the uploaded backup

post/api/system/backups/upload
/api/api/system/backups/upload
/api/provisioning/v1/api/system/backups/upload
/api/v1/fleet/upgrade/api/system/backups/upload
/api/system/backups/upload

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "success": true,
  • "data":
    {
    }
}

Import backup from path

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.

Authorizations:
Request Body schema: application/json
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.

Responses

201

Backup imported

400

Invalid request or file not found

409

Backup already imported

500

Failed to import the backup

503

Storage target or platform manager unreachable

post/api/system/backups/import
/api/api/system/backups/import
/api/provisioning/v1/api/system/backups/import
/api/v1/fleet/upgrade/api/system/backups/import
/api/system/backups/import

Request samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "storage_target": "string",
  • "file_path": "string"
}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "success": true,
  • "data":
    {
    }
}

Settings

Get backup settings

Returns current backup settings (retention count, default storage target)

Authorizations:

Responses

200

Current settings

500

Failed to load backup settings

get/api/system/backup-settings
/api/api/system/backup-settings
/api/provisioning/v1/api/system/backup-settings
/api/v1/fleet/upgrade/api/system/backup-settings
/api/system/backup-settings

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "success": true,
  • "data":
    {
    }
}

Update backup settings

Update backup settings

Authorizations:
Request Body schema: application/json
default_storage_target
string

Name of the default storage target

retention_count
integer [ 1 .. 100 ]

Maximum number of backups to retain

Responses

200

Settings updated

400

Invalid request

500

Failed to update backup settings

put/api/system/backup-settings
/api/api/system/backup-settings
/api/provisioning/v1/api/system/backup-settings
/api/v1/fleet/upgrade/api/system/backup-settings
/api/system/backup-settings

Request samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "default_storage_target": "string",
  • "retention_count": 1
}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "success": true,
  • "data":
    {
    }
}

Schedule

List backup schedules

Returns all configured backup schedules. Multiple schedules are allowed (one per backup type).

Authorizations:

Responses

200

Configured schedules

500

Failed to list backup schedules

503

Scheduler is unavailable

get/api/system/backup-schedules
/api/api/system/backup-schedules
/api/provisioning/v1/api/system/backup-schedules
/api/v1/fleet/upgrade/api/system/backup-schedules
/api/system/backup-schedules

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "success": true,
  • "data":
    [
    ]
}

Create backup schedule

Create a named backup schedule. Multiple schedules allowed. Duplicate names rejected.

Authorizations:
Request Body schema: application/json
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.

Responses

201

Schedule created

400

Invalid request, e.g. a full backup schedule without a remote storage target

409

Schedule already exists

500

Failed to create the backup schedule

503

Scheduler or Vault is unavailable

post/api/system/backup-schedules
/api/api/system/backup-schedules
/api/provisioning/v1/api/system/backup-schedules
/api/v1/fleet/upgrade/api/system/backup-schedules
/api/system/backup-schedules

Request samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "name": "string",
  • "cron": "0 2 * * *",
  • "backup_type": "full",
  • "storage_target": "string",
  • "passphrase": "stringstring"
}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "success": true,
  • "data":
    {
    }
}

Get backup schedule by ID

Authorizations:
path Parameters
id
required
string <uuid>

Responses

200

Schedule details

404

Schedule not found

503

Scheduler is unavailable

get/api/system/backup-schedules/{id}
/api/api/system/backup-schedules/{id}
/api/provisioning/v1/api/system/backup-schedules/{id}
/api/v1/fleet/upgrade/api/system/backup-schedules/{id}
/api/system/backup-schedules/{id}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "success": true,
  • "data":
    {
    }
}

Update backup schedule

Authorizations:
path Parameters
id
required
string <uuid>
Request Body schema: application/json

Responses

200

Schedule updated

400

Invalid request

404

Schedule not found

409

Conflicting schedule for this backup type

500

Failed to update the backup schedule

503

Scheduler is unavailable

put/api/system/backup-schedules/{id}
/api/api/system/backup-schedules/{id}
/api/provisioning/v1/api/system/backup-schedules/{id}
/api/v1/fleet/upgrade/api/system/backup-schedules/{id}
/api/system/backup-schedules/{id}

Request samples

Content type
application/json
Copy
Expand all Collapse all
{ }

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "success": true,
  • "data":
    {
    }
}

Delete backup schedule

Authorizations:
path Parameters
id
required
string <uuid>

Responses

200

Schedule deleted

404

Schedule not found

503

Scheduler is unavailable

delete/api/system/backup-schedules/{id}
/api/api/system/backup-schedules/{id}
/api/provisioning/v1/api/system/backup-schedules/{id}
/api/v1/fleet/upgrade/api/system/backup-schedules/{id}
/api/system/backup-schedules/{id}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "success": true,
  • "data":
    {
    }
}

Mode Management

Initiate system mode switch

Switch F5 Insight between lite and full modes.

Mode Descriptions:

  • lite: Minimal mode with otel-collector, clickhouse, backend, frontend, postgres, vault, zitadel, platform-manager
  • full: Full observability mode with additional services: victoriametrics, vmagent, vmalert, system-manager

Constraints:

  • Cannot switch from full → lite (downgrade blocked)
  • Cannot switch to same mode
  • License validation required for lite → full upgrade
  • Returns 202 with task_id for async tracking
Authorizations:
Request Body schema: application/json
target_mode
required
string
Enum: "lite" "full"

Target mode to switch to

Responses

202

Mode switch initiated successfully

400

Invalid request (same mode, full→lite not allowed, invalid mode)

403

License validation failed (lite→full requires valid license)

500

Internal server error

post/api/system/mode
/api/api/system/mode
/api/provisioning/v1/api/system/mode
/api/v1/fleet/upgrade/api/system/mode
/api/system/mode

Request samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "target_mode": "full"
}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "task_id": "123e4567-e89b-12d3-a456-426614174000",
  • "target_mode": "full",
  • "status": "submitted"
}

Get mode switch status

Query the progress of a mode switch task by task_id.

FSM States:

  • INIT: Task initialized
  • IN_PROGRESS: Running (VALIDATE → SAVE_STATE → SCALE → WAIT_READY → HEALTH_CHECK)
  • COMPLETED: Successfully finished
  • FAILED: Error occurred
Authorizations:
path Parameters
task_id
required
string <uuid>
Example: 123e4567-e89b-12d3-a456-426614174000

UUID of the mode switch task

Responses

200

Mode switch status retrieved successfully

400

Invalid task_id format

404

Task not found

500

Internal server error

get/api/system/mode/status/{task_id}
/api/api/system/mode/status/{task_id}
/api/provisioning/v1/api/system/mode/status/{task_id}
/api/v1/fleet/upgrade/api/system/mode/status/{task_id}
/api/system/mode/status/{task_id}

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "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"
}

Get available system modes and capabilities

Returns information about the current system mode (lite/full).

Authorizations:

Responses

200

Mode capabilities retrieved successfully

500

Internal server error

get/api/system/mode/capabilities
/api/api/system/mode/capabilities
/api/provisioning/v1/api/system/mode/capabilities
/api/v1/fleet/upgrade/api/system/mode/capabilities
/api/system/mode/capabilities

Response samples

Content type
application/json
Copy
Expand all Collapse all
{
  • "current_mode": "lite",
  • "message": ""
}