Skip to main content

API Changelog: User Panel 2.4.1

1. Summary

  • Old → New: 2.4.0 (2.4) → 2.4.1.

  • Endpoints (live routes):7 added, 0 removed. 1 method migration (/logout — see §3). Registered routes 330 → 337.

  • Headline additions: a full user-facing recipe execution-logs surface (list / get / ansible-logs / delete / report), a team GPU metrics endpoint, and a POST /logout endpoint.

  • Headline contract change: a large internal Go package reorganization — DTOs were split out of the models package into domain packages (types, pricing, resourcepolicy, gpuaas, baremetalsub, sharedvolume, common). This renames ~128 Swagger schema definitions with identical fields. The JSON wire format is unchanged; only generated schema names change (see §7.1 and §3).

  • Breaking changes (wire contract): 0. No JSON request/response field was removed or retyped for any live endpoint.

  • Deprecations: 1 — GET /logout is now a deprecated back-compat alias for POST /logout.

Metric

Count

Registered routes (main.go)

330 → 337

Documented operations (Swagger)

327 → 333

Genuinely new endpoints (live routes)

7

Newly documented endpoints (already live in 2.4.0)

1

Removed endpoints (live routes)

0

Removed from Swagger only (doc cleanup, never routed)

3

Breaking changes (wire contract)

0

Deprecations

1 (GET /logout)

Renamed schemas / DTOs (package move, identical fields)

~128 (2 gained fields)

New schemas / DTOs

39

Removed schemas / DTOs (stale, never routed)

3

2. ⚠️ Breaking Changes

No breaking wire changes. Every live endpoint keeps its JSON request/response field names and types. The one item integrators must act on is a code-generation concern, not a runtime one — see §3 (schema-name refactor) and the Integrator Migration Guide.

3. ⚠️ Deprecation Notices & Code-generation Impact

Item

Status

Detail & recommended path

GET /logout

DEPRECATED

Logout moved to POST /logout. GET /logout is retained only for backward compatibility and is marked in code for removal once front-ends migrate (// backward compat — deprecated, remove once FE moves to POST). Migrate clients to POST /logout.

Package-prefixed Swagger schema names (~128 definitions)

CHANGING

DTOs were moved out of models into domain packages, so schema names changed (e.g. models.ApiKey → types.ApiKey, models.PricingPolicy → pricing.PricingPolicy). Fields are identical — raw-JSON clients are unaffected. Clients that generate SDKs from the OpenAPI spec will see renamed model classes and must regenerate. This reorganization is ongoing; further schema-name changes are expected in upcoming releases.

What this refactor is not: it is not a removal of 128 models. Matching old and new definitions by name shows 128 pairs with byte-identical field sets. Only 2 gained fields (both additive): sharedvolume.SharedVolumeListing (+ currency_code, currency_symbol) and common.ErrorJson (+ trace_id).

4. New Endpoints (live routes)

All verified as new route registrations in main.go (not present in 2.4.0).

Method

Path

Handler

Purpose

GET

/api/user/recipes/execution-logs

GetUserRecipeExecutionLogs

List the user's recipe execution logs (paginated).

GET

/api/user/recipes/execution-logs/{id}

GetUserRecipeExecutionLog

Get a single recipe execution log.

GET

/api/user/recipes/execution-logs/{id}/ansible-logs

GetUserRecipeAnsibleLogs

Get the Ansible logs for a recipe execution.

DELETE

/api/user/recipes/execution-logs/{id}

RemoveUserRecipeExecutionLog

Delete a recipe execution log.

POST

/api/user/recipes/execution-logs/{id}/report

ReportRecipeExecutionIssue

Report an issue with a recipe execution.

GET

/api/pods/team-metrics

TeamMetrics

GPU/team usage metrics (gpuaas.TeamMetricsResponse).

POST

/api/logout

LogOut

New primary logout method (replaces GET /logout — see §3).

5. Newly Documented & Doc-only Endpoints

Method

Path

Note

GET

/api/team/{team_id}/suspend-impact

Newly documented. Live route in both 2.4.0 and 2.4.1 (handler GetTeamSuspendImpact); only its Swagger annotation is new. Response DTO models.TeamSuspendImpact.

POST

/api/global-admin/users

DOC GAP Appears in Swagger (summary “Create a full-admin user (test provisioning)”, DTO ctrls.CreateAdminUserInput) but is not registered in main.go in either branch. It is a documentation annotation only — not a live endpoint. Worth a QA ticket.

6. Removed / Cleaned-up (documentation only)

No live route was removed. The following left Swagger only; none was a callable endpoint in 2.4.0. No client impact.

Swagger path (2.4.0)

Reason

GET /logout

Superseded by POST /logout in the docs. The GET route still exists as a deprecated back-compat alias (§3).

GET /policy-team

Handler GetPolicyTeamByIDs was never registered in main.go (documentation-only in both branches; also flagged in the previous changelog). Swagger entry removed.

POST /instant-stats

Never registered as a live route in either branch. Swagger entry removed.

7. Schema / DTO Changes

7.1 Package reorganization (~128 renamed definitions — identical fields)

DTOs were moved from models into domain packages. Swagger definition names changed accordingly; field names and types are unchanged. Representative examples below — see §3 for integrator impact.

Target package

Examples (old → new)

types

models.ApiKey → types.ApiKey, models.User → types.User, models.Team, models.Instance, models.InstanceType, models.Workspace, models.Network, models.StorageBlock, models.Currency, models.SSHKey …

pricing

models.PricingPolicy, models.PricingPolicyDetails, models.CardPricing, models.ResourcePricing, models.ServicePricing …

resourcepolicy

models.ResourcePolicyListing, models.ResourcePolicyDetails, models.AvailableResource, models.RegionAccess …

gpuaas

models.AllGpuPoolList, models.PoolSubscriptionDetails, models.TeamMetricsResponse, models.Metrics …

baremetalsub

models.BaremetalSubscriptionResp, models.FulfillBaremetalRequestPayload, models.UpdateBaremetalSubscriptionPayload …

sharedvolume

models.SharedVolume, models.CreateSharedVolumeOpts, models.SharedVolumeListing (+ currency_code, currency_symbol)

common

utils.ErrorJson → common.ErrorJson (+ trace_id), utils.FieldError → common.FieldError

7.2 New definitions (39)

New feature DTOs

New domain-package representations (created by the ongoing refactor)

7.3 Removed definitions (3)

models.InstantStats, models.CreateInstantStatsOpts (tied to the never-routed POST /instant-stats), and models.PolicyTeam (tied to the never-routed GET /policy-team). No client impact — the endpoints were never callable.

8. QA Follow-up

  • Doc gap:POST /global-admin/users is documented but not routed (§5). Either register the route or remove the annotation.

  • Schema-name churn: the package reorganization (§7.1) is in progress across releases. Recommend stabilizing OpenAPI schema names (e.g. via swaggo@name directives) and adding a CI gate that fails on unintended schema-name/field changes, to prevent this recurring in 2.4.2+.

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