Skip to main content

2.4.1 API changelogs

API Changelog: Admin Panel 2.4.1

By Volodymyr Lukashkin

5 min

Listen

2

Add a reaction

Generated from a diff of the sim_api (hai_admin_api) repository between branch ariel (2.4.0, 2026-06-11, 8a4a6f13) and branch ariel_1 (2.4.1, 2026-06-29, 6918b5f5). 374 commits in range. Source of truth for endpoints: main.go route registrations, cross-checked against docs/swagger.json for contracts. Route/behaviour changes are verified against live route registration, not Swagger annotations alone.

1. Summary

  • Old → New: 2.4.0 (ariel) → 2.4.1 (ariel_1).

  • Endpoints (live routes):20 added, 0 removed, 0 changed method/path/auth. Registered routes 526 → 546.

  • Headline additions: GPUaaS floating-IP management (5 endpoints), KVM high-availability control + node force-remove, Marketplace pod RootFS / factory-reset / recon-inventory, pod-instance and team sync endpoints, node/region storage availability, and admin recipe execution logs.

  • Documentation: Swagger documented operations 499 → 550. Beyond the 20 new live routes, ~38 pre-existing routes (the full KVM node-management surface, Marketplace OAuth/authorize, pod RootFS/scheduler, pool scheduler-config, region leader-secret) that were live since 2.4.0 but undocumented are now documented.

  • Contracts: 51 new DTO definitions, ~19 existing DTOs enriched. 14 DTOs renamed by an internal Go package move (identical fields — see Deprecation Notices).

  • Breaking changes: 1rootfs_persistence_capable relocated from node-level to pool-level DTOs (see §2).

Metric

Count

Registered routes (main.go)

526 → 546

Documented operations (Swagger)

499 → 550

Genuinely new endpoints (live routes)

20

Newly documented endpoints (already live in 2.4.0)

~38

Removed endpoints (live routes)

0

Removed from Swagger only (doc cleanup, never routed / renamed)

7

Breaking changes (wire contract)

1

New schemas / DTOs

51

Renamed schemas / DTOs (package move, identical fields)

14

Removed schemas / DTOs (stale, never routed)

2

Enriched schemas / DTOs

~19

2. ⚠️ Breaking Changes

One breaking wire change. The rootfs_persistence_capable field was removed from node-level DTOs and relocated to the pool level. Clients that read this field from node responses will no longer find it.

Area

What changed

Action required

GPUaaS node DTOs
models.AddNodeGpuaasOpts (request)
models.NodeGpuaasResp, models.GPUaaSNodeDetails (responses)

rootfs_persistence_capableremoved from these node-level DTOs. RootFS capability is now surfaced at the pool level (models.GPUaaSPool.rootfs_persistence_capable) and is auto-derived from whether the region has an is_storage_service node (ref MHA-673). Setting it per-node on add is no longer honoured; reading it from a node response returns nothing.

Read RootFS capability from the pool object (GPUaaSPool.rootfs_persistence_capable) instead of from node responses. Stop sending it in the node-add payload.

3. ⚠️ Deprecation Notices (forward-looking)

The items below are not removed in 2.4.1 but are planned to change or be phased out. Plan integration work accordingly.

Item

Status

Recommended path

Node-level rootfs_persistence_capable

DEPRECATED Already removed from the node DTOs in 2.4.1 (see §2); the concept now lives only at pool level.

Consume pool-level capability only.

Marketplace linking via plaintext token — POST /api/marketplace/link

LEGACY The code marks this the “legacy paste-token” link path. The OAuth authorize flow (GET /api/marketplace/authorize + /authorize/login + /authorize/submit, plus GET /api/marketplace/oauth-info) is the modern linking mechanism.

New integrations should link via the OAuth authorize flow rather than posting a plaintext token.

Package-prefixed Swagger schema names (e.g. models.X)

CHANGING Schema definitions are being progressively moved from the models package into domain packages (e.g. types.*). 14 definitions were renamed this way in 2.4.1; more are expected in upcoming releases. The JSON wire format is unchanged; only the generated schema names change.

Clients that generate SDKs from the OpenAPI spec should expect model class-name churn and plan to regenerate. Consider pinning names via a model-name mapping.

4. New Endpoints (live routes)

All verified as new route registrations in main.go (not present in 2.4.0). Auth = default means no explicit Secure wrapper on the route.

GPUaaS Floating IP management (5)

Method

Path

Handler

Auth

Purpose

GET

/api/gpuaas/floating-ip/list

ListFloatingIPMappings

Secure

List floating-IP mappings

GET

/api/gpuaas/floating-ip/available-ips

GetAvailableIPs

Secure

List available IPs for mapping

POST

/api/gpuaas/floating-ip/create

CreateFloatingIPMapping

Secure

Create a floating-IP mapping

PUT

/api/gpuaas/floating-ip/{id}/edit

UpdateFloatingIPMapping

Secure

Update a mapping

DELETE

/api/gpuaas/floating-ip/{id}/delete

DeleteFloatingIPMapping

Secure

Delete a mapping

KVM high-availability & node lifecycle (4)

Method

Path

Handler

Auth

Purpose

GET

/api/kvm/region/{region_id}/ha/status

GetKVMHAStatus

default

Get HA status for a KVM region

POST

/api/kvm/region/{region_id}/ha/enable

EnableKVMHA

default

Enable HA for a KVM region

POST

/api/kvm/region/{region_id}/ha/disable

DisableKVMHA

default

Disable HA for a KVM region

POST

/api/kvm/node/{id}/force_remove

ForceRemoveKVMClusterNode

default

Force-remove a KVM cluster node

Marketplace pod operations (4)

Method

Path

Handler

Auth

Purpose

GET

/api/marketplace/pods/rootfs-status

MarketplacePodRootfsStatus

MarketplaceGate

RootFS extraction status for a marketplace pod

POST

/api/marketplace/pods/rootfs

MarketplacePodRootfs

MarketplaceGate

RootFS action on a marketplace pod

POST

/api/marketplace/pods/factory_reset

MarketplacePodFactoryReset

MarketplaceGate

Factory-reset a marketplace pod

GET

/api/marketplace/recon/inventory

GetReconInventory

MarketplaceGate

Reconciliation inventory of published pools/workers

Pod-instance, team sync, storage, logs & stats (7)

Method

Path

Handler

Auth

Purpose

POST

/api/pod-instances/sync

SyncPodInstances

default

Sync pod-instance state

DELETE

/api/pod-instances/{worker_id}

DeletePodInstance

default

Delete a pod instance by worker ID

POST

/api/teams/sync

SyncTeams

default

Sync teams

GET

/api/gpuaas/nodes/storage/available

GpuaasNodesGetStorageAvailability

default

Available storage across GPUaaS nodes

GET

/api/regions/{region_id}/storage

GetRegionStorageDetail

default

Storage detail for a region

GET

/api/recipes/execution-logs

GetRecipeExecutionLogs

default

Admin recipe execution logs

GET

/api/get-last-10-min-stats

GetLast10MinStats

default

Instant stats for the last 10 minutes

5. Newly Documented Endpoints (already live in 2.4.0)

These routes existed in main.go in 2.4.0 (most were added during the europa → ariel cycle) but were absent from Swagger. They are not new API — only newly documented. The largest group is the full KVM node-management surface previously flagged as a doc gap.

~38 newly documented pre-existing endpoints

6. Removed / Cleaned-up (documentation only)

No live route was removed. The following disappeared from Swagger only — stale definitions or path corrections. No client impact.

Swagger path (2.4.0)

Reason

GET /clusters/{cl_id}/pci_devs

Path corrected to match the live route GET /clusters/{cl_id}/pcidevs.

GET /gpuaas-npu

Path corrected to match the live route GET /gpuaas-npu/all.

GET /marketplace/status
GET /pools

Stale Swagger entries — never registered as live routes in either branch.

POST /marketplace/connect
POST /marketplace/sync
POST /marketplace/disconnect

Documented-but-not-routed in 2.4.0 (flagged as a doc gap in the previous changelog); Swagger definitions now removed. DTOs ctrls.marketplaceConnectRequest and ctrls.marketplacePool removed with them.

7. Schema / DTO Changes

7.1 New definitions (51)

Full list of 51 new definitions

7.2 Enriched definitions

Definition

Change

db.Region

+ kvmClusterEnabled

models.Region

+ active_nodes, kvm_cluster_enabled, local_storage_utilization_percent, shared_storage_utilization_percent

models.CreateRegionReq

+ kvm_cluster_enabled

models.Status

+ kvm_cluster

models.GPUaaSPool

+ marketplace_active_deployments, marketplace_max_deployments, rootfs_persistence_capable, scheduler_mode, vip_ratio

models.GPUaaSNodeDetails, models.NodeGpuaasResp

+ active_instance_count, local_storage_allocated_percentage, os_type, shared_storage_allocated_percentage; rootfs_persistence_capable (see §2)

models.AddNodeGpuaasOpts

rootfs_persistence_capable (see §2)

models.ProvisionPodOpts

+ fractional_shares, guaranteed_gpu_share_percent, instance_name, is_vip_priority, marketplace_subscription_id, rootfs_enabled

models.MarketplacePodProvisionRequest

+ instance_name, marketplace_subscription_id, rootfs_enabled

models.MarketplacePodDetail

+ rootfs_status

models.MarketplacePoolResponse, models.MarketplacePoolDetailResponse

+ rootfs_persistence_capable

models.ProvisionMarketplacePoolRequest

+ max_marketplace_deployments, rootfs_persistence_capable

models.BaremetalSubscriptionResp

+ ssh_keys, ssh_password

models.SubscribeToBaremetalPayload

+ ssh_keys

models.WorkerSSHInfo

+ rootfs_status

models.Role

permissions retyped []models.PermissionRole[]types.PermissionRole (package rename — see §7.3)

models.VDisk

actions retyped []models.VDiskAction[]types.VDiskAction (package rename — see §7.3)

7.3 Renamed definitions (package move — identical fields)

These 14 definitions were moved from the models package to types. The JSON wire format (field names and types) is identical; only the Swagger schema name changed. This affects OpenAPI code-generation clients (regenerate SDKs) but not clients that read/write raw JSON.

14 renamed definitions (models.X → types.X)

7.4 Removed definitions (2)

ctrls.marketplaceConnectRequest, ctrls.marketplacePool — removed together with the stale /marketplace/connect Swagger paths (never routed). No client impact.

8. Doc Gaps & QA Follow-up

  • Documented but not routed: none newly introduced; the previously flagged /marketplace/connect|sync|disconnect entries were cleaned up in this release.

  • Unauthenticated administrative routes: several new endpoints register with no Secure wrapper (Auth = default) — e.g. /api/get-last-10-min-stats, the /api/kvm/region/{region_id}/ha/* controls, /api/pod-instances/sync, /api/teams/sync. Confirm these are intended to be internal/service-only and are gated at the network layer. Worth a QA/security ticket.

The customer-facing companion to this page is the child page Admin Panel API — 2.4.0 → 2.4.1 (Integrator Migration Guide). Keep both in sync when the diff is revised.