Skip to main content

User Panel API — 2.3 → 2.4 (Integrator Migration Guide)

Table of Contents

  1. Breaking Changes Summary

  2. Image Management Consolidated under /baremetal/images

  3. Team Create/Update Request & Policy Response Restructured

  4. Baremetal Instance Types — Paginated Response

  5. Removed Endpoint: migrated-pods lookup

  6. Policy Type "baremetal" Behavior

  7. New Endpoints

  8. Non-Breaking Improvements

  9. Migration Guide

1. Breaking Changes Summary

Change

Impact

Action Required

Image write endpoints moved from /general-images to /baremetal/images

POST/PUT/DELETE on /general-images return 404

Switch to /baremetal/images and the new payload schema

Team create/update request body restructured

Create/update team calls using flat *_policy_id fields fail

Nest policy IDs under general / baremetal

Team policy response fields renamed/split

Parsers reading baremetal_workload_image_policy break

Read the new baremetal_*_policy fields

GET /baremetal/instance-types now returns an object, not an array

Clients iterating the top-level array break

Read items from the items array of the paginated wrapper

GET /instances/unified/migrated-pods/lookup removed

Calls return 404

Remove the call; use migration status endpoint

Policy type string "baremetal" no longer resolves

Flows passing "baremetal" as a policy type break

Use the dedicated baremetal policy endpoints/values

2. Image Management Consolidated under /baremetal/images BREAKING

The write operations for images were removed from /general-images and now live under /baremetal/images (these endpoints already existed in europa). Read operations on /general-images (list, get by ID, toggle) are unchanged.

Old (europa)

New (ariel)

POST /general-images

POST /baremetal/images

PUT /general-images/{id}

PUT /baremetal/images/{id}

DELETE /general-images/{id}

DELETE /baremetal/images/{id}

The request/response schema is now CreateBaremetalImagePayload / BaremetalImageModel (the old CreateGeneralImageOpts / UpdateGeneralImageOpts payloads no longer exist). A new convenience endpoint PUT /baremetal/images/{id}/toggle flips the is_active flag.

3. Team Create/Update Request & Policy Response Restructured BREAKING

Policy assignment on teams moved from flat fields to grouped general / baremetal objects. This affects both the request body of POST /team and PUT /team/{team_id}, and the policy response returned when reading a team.

Request body — old vs new

Old (europa) POST /team / PUT /team/{team_id}:

{ "name": "team-a", "description": "...", "color": "#fff", "resource_policy_id": "uuid", "service_policy_id": "uuid", "pricing_policy_id": "uuid", "image_policy_id": "uuid", "instance_type_policy_id": "uuid", "baremetal_workload_image_policy_id": "uuid" }

New (ariel):

{ "name": "team-a", "description": "...", "color": "#fff", "members": [], "has_general_policies": true, "has_baremetal_policies": true, "general": { "resource_policy_id": "uuid", "service_policy_id": "uuid", "pricing_policy_id": "uuid", "image_policy_id": "uuid", "instance_type_policy_id": "uuid" }, "baremetal": { "resource_policy_id": "uuid", "service_policy_id": "uuid", "pricing_policy_id": "uuid", "image_policy_id": "uuid", "instance_type_policy_id": "uuid" } }

Policy response — field changes

In the team policy_info object, the single baremetal_workload_image_policy field was split into four, and two boolean flags were added at the team level:

europa

ariel

policy_info.baremetal_workload_image_policy

policy_info.baremetal_image_policy
policy_info.baremetal_resource_policy
policy_info.baremetal_service_policy
policy_info.baremetal_instance_type_policy

has_general_policies, has_baremetal_policies (top-level booleans)

4. Baremetal Instance Types — Paginated Response BREAKING

GET /baremetal/instance-types previously returned a bare JSON array. It now returns a paginated wrapper object and accepts optional query params: page, per_page, sort, order, name[contains], gpu_type[eqstr], is_active[eqstr].

Old (europa):

[ { "id": 1, "name": "bm-a100", "...": "..." }, { "id": 2, "name": "bm-h100", "...": "..." } ]

New (ariel):

{ "items": [ { "id": 1, "name": "bm-a100", "...": "..." }, { "id": 2, "name": "bm-h100", "...": "..." } ], "status_counts": { "active": 10, "inactive": 2, "total": 12 }, "page": 1, "per_page": 20, "total_items": 12, "total_pages": 1 }

Read your list from the items array and use page / total_pages for pagination.

5. Removed Endpoint: migrated-pods lookup BREAKING

Removed

Replacement

GET /instances/unified/migrated-pods/lookup

No direct replacement. Use GET /instances/unified/migrate-legacy-pods/status for migration progress.

6. Policy Type "baremetal" Behavior BREAKING

The raw policy-type string "baremetal" no longer resolves to the baremetal workload-image policy. If your integration passes "baremetal" as a policy_type path value (for example to a /policy/{policy_type} call) expecting it to map to the baremetal workload-image policy, that mapping no longer applies. Use the dedicated baremetal policy fields/endpoints described in section 3 instead, and confirm the exact policy-type value with the platform team if needed.

7. New Endpoints

Endpoints added in ariel that are relevant to integrators.

Method

Path

Purpose

GET

/all-images

All enabled images, including baremetal images.

GET

/baremetal/instances/{id}/credentials

SSH credentials for an accessible baremetal instance. Response: { "ip", "username", "password", "port" } — all fields nullable.

PUT

/baremetal/images/{id}/toggle

Toggle a baremetal image's active flag.

PUT

/baremetal/instance-types/{id}/toggle

Toggle a baremetal instance type's active flag.

POST

/team/{team_id}/accept-invite

Accept the caller's pending invitation to a team.

GET

/shared-volumes/shared-storage-volumes

AVAILABLE/IN_USE shared storage volumes for a team in a region (team_id, region_id query params).

POST

/pods/factory_reset

Wipe a pod's RootFS and re-provision from its base image.

POST

/pods/rootfs

Enable or disable rootfs for a pod instance.

PUT

/pods/workers/bulk-enable-rootfs

Bulk-update rootfs_enabled for a list of worker IDs.

PUT

/instance/{instance_id}/scheduler-config

Update scheduler config (VIP priority, TQ percentage) for a pod instance.

GET

/pools/{pool_id}/scheduler-config

Read scheduler mode configs for a pool.

PUT

/resource-policy/pool/{pool_id}/scheduler-config

Update scheduler config for a pool's resource policy.

POST

/pools/{pool_id}/pricing-suggestions

Compute a weighted price distribution from a full-share price; supports dynamic_mode and vip_ratio overrides.

8. Non-Breaking Improvements

  • GET /baremetal/instances: team_id is now optional (omit it to list across all teams).

  • Pagination, sorting and filtering query params (page, per_page, sort, order, filter) added to GET /policy/{policy_type}, GET /resource-policy, and GET /shared-volumes.

  • GET /service/i/team-accessible-regions: new optional nature query param.

  • New scheduler concept (dynamic_mode): one of disabled, user_selected, vip_priority — used by the new scheduler-config and pricing-suggestions endpoints.

9. Migration Guide

Repoint image create/update/delete calls from /general-images to /baremetal/images, and adopt the CreateBaremetalImagePayload / BaremetalImageModel schema.

Update POST /team and PUT /team/{team_id} request bodies: move flat *_policy_id fields into nested general and baremetal objects, and set has_general_policies / has_baremetal_policies.

Update team-policy response parsing: replace baremetal_workload_image_policy with the four baremetal_*_policy fields.

Update GET /baremetal/instance-types clients to read from items and handle pagination metadata.

Remove calls to GET /instances/unified/migrated-pods/lookup; use the migration status endpoint if needed.

Audit any use of the "baremetal" policy-type string and switch to the dedicated baremetal policy fields/endpoints.

Optionally adopt the new baremetal credentials, toggle, scheduler-config, and pricing-suggestions endpoints.

This guide is the customer-facing companion to the internal changelog API Changelog: User Panel — europa → ariel (parent page). Keep both in sync when the diff is revised.