Table of Contents
Breaking Changes Summary
Team Creation / Update — Request Body Restructured
Baremetal Node Logs — Response & Query Params Changed
New Endpoints
Non-Breaking Improvements
Known Documentation Gaps
Migration Checklist
1. Breaking Changes Summary
There are two breaking changes between europa and ariel. All other changes are additive.
Change | Impact | Action Required |
|---|---|---|
| Clients sending flat policy ID fields at the top level receive | Wrap policy IDs under |
| Clients reading the | Read |
2. Team Creation / Update — Request Body Restructured BREAKING
POST /api/team and PUT /api/team/{team_id} now require policy IDs to be nested inside a general (or baremetal) object. Sending the old flat structure returns 400.
Request body — old vs new
Old (2.3) — flat top-level fields:
{ "name": "my-team", "color": "#414141", "description": "", "pricing_policy_id": "uuid-...", "resource_policy_id": "uuid-...", "service_policy_id": "uuid-...", "instance_type_policy_id": "uuid-...", "image_policy_id": "uuid-...", "members": [{ "email": "user@example.com", "role": "uuid-...", "pre_onboard": true }] }
New (ariel) — policies nested under general:
{ "name": "my-team", "color": "#414141", "description": "", "has_general_policies": true, "general": { "pricing_policy_id": "uuid-...", "resource_policy_id": "uuid-...", "service_policy_id": "uuid-...", "instance_type_policy_id": "uuid-...", "image_policy_id": "uuid-..." }, "members": [{ "email": "user@example.com", "role": "uuid-...", "pre_onboard": true }] }
If your integration also provisions baremetal teams, use the baremetal object with "has_baremetal_policies": true in the same way. You may set both has_general_policies and has_baremetal_policies to true simultaneously.
Error you will see without this change
{ "code": 12010004, "message": "failed to create team", "errors": [{ "code": 12110007, "message": "invalid policy id", "field": "has_general_policies", "detail": "at least one of general or baremetal policies must be enabled" }] }
3. Baremetal Node Logs — Response & Query Params Changed BREAKING
GET /api/baremetal/node/{id}/logs switched from a paginated log listing to a "last-N-lines" provision-log tail. Both the query parameters and the 200 response schema changed.
Query parameters — old vs new
release 2.3 | release 2.4 |
|---|---|
|
|
Response body — old vs new
Old (2.3) — BaremetalNodeLogsResponse:
{ "logs": [ { } ], "pagination": { "page": 1, "per_page": 20, "total_items": 134, "total_pages": 7 } }
New (ariel) — BaremetalNodeProvisionLogsResponse:
{ "logs": [ { } ], "total_count": 134 }
The logs[] item schema (BaremetalNodeLogResp) is unchanged. Migration: stop reading .pagination; use the scalar .total_count. If you previously paged through logs with page/per_page, request the desired tail length via lines instead.
4. New Endpoints
Endpoints added in ariel that integrators may want to adopt. (37 routes added in total; the integrator-relevant groups are listed here.)
KVM Cluster Node management (new domain)
A full lifecycle surface for KVM cluster nodes under /api/kvm/node: register / list / get / update / delete, plus actions test-connection, reconcile-tunnels, scan, storage_metrics, cluster, initialise, reset, reboot, scan_interfaces (+ {scan_id} poll), interfaces, network_config (POST/GET/DELETE), ssh_keys, and lifecycle-jobs/{job_id}; plus POST /api/kvm/leader-announce for cluster coordination.
These KVM routes are live in the API but are not yet present in swagger.json — see Section 6. Confirm request/response shapes with the platform team before integrating.
Marketplace
Method | Path | Purpose |
|---|---|---|
GET |
| OAuth client/config info for the marketplace link flow. |
GET |
| OAuth authorize (render). |
POST |
| OAuth authorize — login step. |
POST |
| OAuth authorize — consent/submit step. |
GET |
| Active workers for a published pool (MarketplaceGate + service-account auth). |
DELETE |
| Hard-delete revoked link rows (returns settings to never-linked state). |
POST |
| API-to-API purge invoked by mesh on link deletion (revoked-token bearer auth). |
Pods & GPUaaS scheduling / rootfs
Method | Path | Purpose |
|---|---|---|
POST |
| Rootfs action on a pod. |
GET |
| Rootfs extraction status. |
POST |
| Factory-reset a pod. |
PUT |
| Update a pod's scheduler config. |
GET |
| Read a pool's scheduler config. |
PUT |
| Update a pool's scheduler config. |
PUT |
| Enable rootfs persistence on pool workers. |
Regions
Method | Path | Purpose |
|---|---|---|
GET |
| Fetch a region's leader secret (Secure auth). |
5. Non-Breaking Improvements
Existing responses gained additional fields (safe to ignore if unused; no parser changes required). Highlights:
Baremetal subscriptions (
BaremetalSubscriptionResp) now includegpu_type,image,image_hash,image_id,instance_type,name,node,os_type,os_version,service_id,workspace_id.Baremetal images & instance types gained
creation_type,description,file_size,hash,is_active,last_used.Baremetal nodes:
BaremetalNodeRespandTransitionBaremetalNodeOptsgainedservice_status;TestConnectionRespgainedstatus_transition.Marketplace pools gained
gpu_spec_*,region_*,time_quantum_in_sec,utilization_percent, andpool_label.Regions:
Region/CreateRegionReqgainedbaremetal_enabled.GPUaaS nodes/pools:
rootfs_persistence_capableadded acrossAddNodeGpuaasOpts/GPUaaSNodeDetails/NodeGpuaasResp;GPUaaSPoolgainedpool_label.Marketplace unsubscribe:
MarketplaceUnsubscribeRequestgainedmarketplace_subscription_id.23 new DTO definitions for marketplace pods/volumes, baremetal summaries, GPUaaS team metrics, async operations, and SSH/expose-service results.
6. Known Documentation Gaps
If you generate clients from docs/swagger.json, be aware of these mismatches between the spec and the live API (tracked separately for fix):
The 22 new
/api/kvm/*routes are not in swagger — generate against them manually or request shapes from the platform team.Swagger advertises
POST /marketplace/connect,/marketplace/sync,/marketplace/disconnect, but these are not currently routed in the API — do not integrate against them yet.Swagger lists
GET /gpuaas-npu; the live route isGET /gpuaas-npu/all.The deprecated
gpuaas/pool/{id}/publishand/unpublishswagger definitions were removed; publishing is now a marketplace-only flow.
7. Migration Checklist
Update POST /api/team and PUT /api/team/{team_id} clients: move policy IDs into "general": {...} and add "has_general_policies": true.
Update GET /baremetal/node/{id}/logs clients: read total_count instead of the pagination object, and replace page/per_page with the lines query param.
Confirm nothing else in your integration depends on the old flat CreateTeam / UpdateTeam schema or the old BaremetalNodeLogsResponse shape.
(Optional) Adopt new marketplace OAuth/authorize and link-history endpoints if you manage the my.hosted.ai link from your integration.
(Optional) Adopt pod/GPUaaS scheduler-config and rootfs endpoints.
(Optional) Adopt the KVM cluster-node endpoints — but verify shapes out-of-band, as they are not yet in swagger.
Do NOT integrate against /marketplace/connect|sync|disconnect until they are actually routed.