Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/admbe/FluxOp/llms.txt

Use this file to discover all available pages before exploring further.

The right-sizing endpoints expose Flux’s deterministic VM classification results and planning board management. Every VM in the estate receives an explicit coverage state — from full telemetry-backed classification through advisory corroboration to evidence-gap acknowledgement. Planning boards let your team turn those findings into reservation and savings-plan purchase decisions, captured with a full decision log.

GET /api/recommendations/rightsizing

Auth: reader Returns multi-source VM idle and Advisor-corroborated resize results, paginated. Each item carries its coverage state, governed utilization evidence (CPU/memory/network percentiles), candidate action, and savings lineage. Resize targets require Azure Advisor corroboration; material source disagreement is surfaced as a review state rather than silently overridden.

Query parameters

ParameterTypeDefaultDescription
statusstring“ (all)Filter by coverage/action state — see coverage states below
subscriptionIdstring“ (all)Restrict to a single subscription GUID
limitinteger250Page size (1–2000)
offsetinteger0Page offset (≥ 0)

Coverage states

StateMeaning
idleCPU p95 ≤ threshold, peak below guardrail, network p95 below threshold — confirmed idle
resizeCPU p95 within review headroom, Advisor corroboration present
reviewTelemetry available but sources disagree beyond the configured disagreement threshold
evidence_neededInsufficient telemetry window or sample coverage
no_telemetryNo telemetry source matched this VM

Key response fields

FieldTypeDescription
resourceIdstringFull Azure resource ID
resourceNamestringDisplay name
subscriptionNamestringSubscription display name
resourceGroupstringResource group
regionstringAzure region
statusstringCoverage/action state (see above)
currentSkustringCurrently deployed VM SKU
targetSkustringAdvisor-corroborated recommended SKU
cpuP95float95th-percentile CPU utilization (%)
cpuMaximumfloatPeak CPU observed in the evidence window
networkInP95float95th-percentile inbound network (bytes/hour)
networkOutP95float95th-percentile outbound network (bytes/hour)
metricCoveragePercentfloatFraction of the evidence window with CPU samples
evidenceWindowDaysintegerGoverned telemetry window length in days
coverageFlagstringShort label summarising coverage quality
telemetrySourcestringPrimary source: azure_monitor, logicmonitor, or combined
advisorCorroboratedbooleanWhether a matching Advisor resize recommendation exists
estimatedMonthlySavingfloatEstimated monthly saving if the recommendation is implemented
currencystringCurrency code for savings figures
computedAtstringISO 8601 timestamp of the last classification run
methodVersionstringVersioned classification method identifier

Example request

curl -s "https://flux.example.com/api/recommendations/rightsizing?status=idle&limit=50" \
  -H "Authorization: Bearer $TOKEN"

Example response (truncated)

{
  "items": [
    {
      "resourceId": "/subscriptions/00000000-0000-0000-0000-000000000001/resourceGroups/prod-rg/providers/Microsoft.Compute/virtualMachines/vm-api-01",
      "resourceName": "vm-api-01",
      "subscriptionName": "Production",
      "resourceGroup": "prod-rg",
      "region": "eastus",
      "status": "idle",
      "currentSku": "Standard_D4s_v3",
      "targetSku": null,
      "cpuP95": 3.1,
      "cpuMaximum": 12.4,
      "networkInP95": 1048576,
      "networkOutP95": 524288,
      "metricCoveragePercent": 94.2,
      "evidenceWindowDays": 14,
      "coverageFlag": "full",
      "telemetrySource": "azure_monitor",
      "advisorCorroborated": false,
      "estimatedMonthlySaving": 187.50,
      "currency": "USD",
      "computedAt": "2025-07-15T10:00:00Z",
      "methodVersion": "2.1"
    }
  ],
  "total": 1,
  "limit": 50,
  "offset": 0
}

GET /api/recommendations/rightsizing/export

Auth: reader Streams a tabular export of right-sizing recommendations. Accepts the same status and subscriptionId filters as the list endpoint. The format parameter selects output type.

Query parameters

ParameterTypeDefaultDescription
statusstringFilter by coverage/action state
subscriptionIdstringRestrict to one subscription
formatstringcsvExport format: csv or xlsx
XLSX exports include a Metadata sheet with generation time, snapshot version, and applied filters.

GET /api/recommendations/quality

Auth: reader Returns quality-reconciliation metrics covering four dimensions: Advisor ID matching, semantic-action classification, resource-resolution accuracy, and actionability signals. Use this endpoint to investigate discrepancies between Flux’s deterministic classification and Azure Advisor findings.

Example request

curl -s "https://flux.example.com/api/recommendations/quality" \
  -H "Authorization: Bearer $TOKEN"

Example response (truncated)

{
  "advisorIdResolution": {
    "matched": 312,
    "unmatched": 14,
    "matchRate": 0.957
  },
  "semanticAction": {
    "resize": 201,
    "idle": 97,
    "review": 28
  },
  "resourceResolution": {
    "resolved": 320,
    "unresolved": 6
  },
  "actionability": {
    "actionableNow": 198,
    "portfolioReview": 87,
    "evidenceNeeded": 41
  }
}

GET /api/rightsizing/boards

Auth: reader Returns all planning boards. Each board contains commitment buckets, planned quantities, planner-entered economics, and VM decisions. The primary (Flux-owned) board is regenerated from governed evidence every 72 hours; human boards are never overwritten by scheduled refreshes.
curl -s "https://flux.example.com/api/rightsizing/boards" \
  -H "Authorization: Bearer $TOKEN"

POST /api/rightsizing/boards

Auth: admin Creates a new empty planning board.

Request body (RightsizingBoardCreate)

FieldTypeRequiredConstraintsDescription
namestring1–120 charsDisplay name for the board
descriptionstringmax 500 charsOptional description

Responses

StatusMeaning
200Board created; returns the new board object
422Validation error (e.g., duplicate name)
curl -s -X POST "https://flux.example.com/api/rightsizing/boards" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name": "Aggressive downsize Q3", "description": "Scenario board for Q3 planning"}'

PUT /api/rightsizing/boards/

Auth: admin Renames an existing board and updates its description. The primary Flux-owned board cannot be renamed through this endpoint.

Path parameter

ParameterDescription
board_idBoard identifier string

Request body (RightsizingBoardUpdate)

FieldTypeRequiredConstraintsDescription
namestring1–120 charsNew display name
descriptionstringmax 500 charsUpdated description

Responses

StatusMeaning
200Board updated; returns updated board object
404Board not found
409Board is protected and cannot be renamed

POST /api/rightsizing/boards//primary

Auth: admin Promotes a board to the primary position. Only one board can be primary at a time.

Responses

StatusMeaning
200Board promoted to primary
404Board not found
409Board cannot be made primary

DELETE /api/rightsizing/boards/

Auth: admin Deletes a planning board. The primary Flux-owned board cannot be deleted.

Responses

StatusMeaning
200Board deleted
404Board not found
409Board is protected and cannot be deleted

POST /api/rightsizing/boards//duplicate

Auth: admin Duplicates an existing board under a new name. The new board inherits buckets and VM assignments from the source board.

Request body (RightsizingBoardCreate)

FieldTypeRequiredDescription
namestringDisplay name for the duplicated board
descriptionstringOptional description

GET /api/rightsizing/plan

Auth: reader Returns the full planning board view for a given board, including commitment buckets, assigned VMs, planned quantities, planner-entered economics, and per-VM decisions.

Query parameters

ParameterTypeDefaultDescription
boardIdstring“ (primary board)Target board identifier (max 64 chars)
curl -s "https://flux.example.com/api/rightsizing/plan?boardId=abc123" \
  -H "Authorization: Bearer $TOKEN"

GET /api/rightsizing/plan/log

Auth: reader Returns the decision log for a planning board — an ordered history of VM assignments, bucket changes, and planner notes.

Query parameters

ParameterTypeDefaultDescription
boardIdstring“ (primary board)Target board identifier
limitinteger250Page size (1–2000)

PUT /api/rightsizing/plan/bucket

Auth: admin Creates or updates a commitment bucket in a planning board. Buckets represent a target SKU in a region with associated quantity and pricing assumptions (pay-as-you-go, 1-year RI, savings plan).

Responses

StatusMeaning
200Bucket created or updated; returns the saved bucket object
409Bucket belongs to a protected board and cannot be modified

Request body (RightsizingBucketUpdate)

FieldTypeRequiredDescription
boardIdstringTarget board (empty = primary)
regionstringAzure region (max 64 chars)
skustringTarget VM SKU (max 100 chars)
strategystringCommitment strategy label (max 60 chars)
refQuantityintegerPlanned quantity (0–100,000)
refMonthlyPaygfloatMonthly pay-as-you-go reference cost
refMonthlyRi1yfloatMonthly 1-year RI reference cost
refRi1yUpfrontfloat1-year RI upfront cost
refMonthlySp1yfloatMonthly 1-year savings plan reference cost
refMonthlySavingsfloatEstimated monthly saving for the bucket
refReservationCheckstringReservation verification note (max 200 chars)
notestringPlanner note (max 2000 chars)

DELETE /api/rightsizing/plan/bucket

Auth: admin Removes a bucket from the plan. The bucket key is a compound region/SKU identifier.

Query parameters

ParameterTypeRequiredDescription
keystringBucket key (1–200 chars)

Responses

StatusMeaning
200Bucket deleted; returns the removed bucket object
404Bucket not found
409Bucket belongs to a protected board and cannot be deleted

PUT /api/rightsizing/plan/assignments

Auth: admin Moves one or more VMs to a target bucket, optionally recording a decision and a planner note.

Request body (RightsizingAssignmentsUpdate)

FieldTypeRequiredDescription
boardIdstringTarget board (empty = primary)
movesarray1–500 move objects (see below)
Each move object (RightsizingMove):
FieldTypeRequiredDescription
vmKeystringVM identifier key (max 1024 chars)
vmNamestringVM display name
subscriptionNamestringSubscription display name
bucketKeystringTarget bucket key (max 200 chars)
decisionstringDecision label, e.g. approved (max 40 chars)
notestringPlanner note (max 2000 chars)

POST /api/rightsizing/plan/import

Auth: admin Imports a plan file (buckets, assignments, VM metadata, and log entries) into a board. Supports dry-run validation before committing.

Request body (RightsizingPlanImport)

FieldTypeRequiredDescription
boardIdstringTarget board ID (empty = primary)
newBoardNamestringCreate a new board with this name instead
dryRunbooleantrue validates without committing
bucketsobjectMap of bucket key → bucket definition
assignmentsobjectMap of VM key → bucket key
vmMetaobjectMap of VM key → VM metadata
logarrayUp to 10,000 log entries to replay
vmsarrayUp to 10,000 VM records to seed

GET /api/rightsizing/proposal/status

Auth: reader Returns the status of the latest Flux right-sizing proposal — when it was last generated, the next scheduled refresh, and whether a refresh is in progress.

POST /api/rightsizing/proposal/refresh

Auth: admin Forces an immediate regeneration of the Flux right-sizing proposal from current governed evidence. Returns 409 if a refresh is already running.
curl -s -X POST "https://flux.example.com/api/rightsizing/proposal/refresh" \
  -H "Authorization: Bearer $TOKEN"

Build docs developers (and LLMs) love