---
title: "Changelog"
description: "Gyro Public API release notes (newest first). The CLI and the Terraform provider ship the same day."
url: https://www.gyrohosting.com/developers/en/changelog.html
language: en
openapi: https://www.gyrohosting.com/developers/openapi.json
api_version: 2.30.0
---

# Changelog

Gyro Public API release notes (newest first). The CLI and the Terraform provider ship the same day.


## 2.30.0

container extra nodes `PUT /cloud/containers/{id}/nodes` (same price as a plan node, hourly; removal drains first), egress change advance notice (`egress_change`, `pending_egress_ips`) with an optional approval step (`PUT .../egress-approval`, `POST .../egress-change/approve`), and `DELETE /cloud/containers/{id}` (prepaid environment delete, same as the panel). Additive.


## 2.29.0

private networks (VPC) for tr-ist-1: `/cloud/vpcs` (create, rename, delete), subnets, the VPC gateway (NAT, port forwards, inter-subnet rule; hourly prepaid while on, 4.99 EUR/month cap), server cards `/cloud/servers/{id}/nics` and turning the public IPv4 off/on `/cloud/servers/{id}/public-ip`. Additive.


## 2.28.2

pipeline create no longer lists `repo` as required: it is required for git providers and must be left out for `provider: archive`. Container services: `alerts` given on create / update is applied (the service view now also shows it at the top level, `alerts.min_ready`, 0 = off); unknown fields inside `alerts` or `autoscaling` are refused with 422 `invalid_alerts` / `invalid_autoscaling` instead of being ignored.


## 2.28.1

the limit hint (`details.limit_exceeded`, `how_to_increase`, "This limit can be raised with a support ticket") is added only to real account / plan limit refusals; input validation errors that mention a maximum length or count ("at most 64 characters") no longer get it. Module limits now name their `limit_key` (e.g. `compute.extra_ips`, `s3.max_buckets`, `dns.max_zones`, `gfw.rules_per_server`); plan limits answer `how_to_increase: upgrade_plan`, hourly ones `wait`.


## 2.28.0

Gyro Pipeline `build_target` (create / update / get): build a named stage of a multi-stage Dockerfile (`docker build --target`); empty = last stage; unknown stage = run error `build_target_not_found`; also `build_target:` in gyro-pipeline.yml. Additive.


## 2.27.1

`PUT /cloud/containers/{id}/services/{name}/env` rejects unknown fields and empty changes with 422 `invalid_env` (was: success without change).


## 2.27.0

`GET /cloud/containers/{id}` (environment detail: Kubernetes `namespace`, in-cluster addressing `cluster_dns`, `egress_ips`) and `GET /cloud/containers/{id}/egress-ips` (current egress IPv4 addresses for IP allow lists; dedicated = own nodes + shared pool during updates, serverless = shared pool); service detail has `internal` (`<service>.<namespace>.svc.cluster.local:80`), service list `internal_address`; egress IP changes are notified (alert event `egress`). Additive.


## 2.26.0

`GET /cloud/account/limits`; structured limit hint in limit errors (new-account limit of the prepaid cloud now answers `limit_exceeded` instead of `checkout_blocked`, original code in `details.reason`); dry-run quotes of servers, container environments and templates show `quote.limit_exceeded`; new-account limit raised to 5 servers. Additive.


## 2.25.0

Object Storage and Protected Storage can be ordered through the API: `GET /cloud/storage/plans`, `POST /cloud/storage` (plan, cycle, quantity, extra_traffic, object_lock_buckets, name/tags/project_id; paid from the balance), `GET /cloud/storage`, `GET|DELETE /cloud/storage/{id}`. Plan change: documented data safety, `data_preserved`/`disk`/`restart` in the answer, resize-options marks smaller-disk plans `allowed: false` and a smaller disk is refused with 409 `disk_shrink` already in `dry_run`; clearer `recreate_required` message. Additive.


## 2.24.4

Container services: a replica count (scale, create, update, autoscaling max) outside the plan limit is refused with 422 `invalid_replicas` and the message names the limit (`details.max`). GET /cloud/servers/{id}: Gyro Compute servers in tr-ist-1 show the SSH keys given at creation (`ssh_keys.fingerprints`, `ssh_keys.key_ids`, `method: cloud-init`; `state: none` when no key was given) instead of null.


## 2.24.3

Security groups: a rule change that removes or narrows SSH/RDP access for a source on an attached server is a 5 minute trial on every path (API included; before only when the caller's own address was cut); the group object has `trial` and `trial_seconds_left` also while `applying`. Deleting a server removes its group attachments, so the group can be deleted. Group changes are written to each attached server's change log.


## 2.24.2

Serverless containers are billed for the full month again: no monthly cap (`capped: false`), billing estimate default `hours` 730 (a full month), `monthly_cap` = 730 hours, `total` = `hours` x hourly; `billed_hours` kept (= `hours`). Replaces the 672-hour serverless ceiling announced in 2.24.1. Capped plans (servers, dedicated nodes) unchanged.


## 2.24.1

Containers: `command` / `args` also accept a plain string, split like a shell with quotes respected (invalid JSON array / unclosed quote -> 400). Service updates, restarts and rollbacks are seamless even when the node pool is full (the new copy starts on a shared sandboxed pool and moves back); the response carries `rollout`: `seamless` | `brief_interruption`. Service `state` may be `preparing` (the environment's node is being installed) with `eta_s`. Serverless: at most 672 charged hours a calendar month; billing estimate default `hours` 672, `billed_hours`. Additive.


## 2.24.0

Gyro Pipeline: archive builds (`POST .../pipelines/{pipeline}/uploads` gives a presigned upload URL, tar.gz / zip up to 200 MB, kept 24 h; then `POST .../runs {"upload_id"}`; provider `archive` = pipelines without a repository) and private repositories over SSH (`PUT .../deploy-key` creates an ed25519 deploy key, only the public key is returned; `GET/PUT .../host-key` shows and confirms the server key; GitHub / GitLab / Bitbucket keys are pinned). Additive.


## 2.23.0

Gyro Pipeline for containers: `/cloud/containers/{id}/pipelines` connects a GitHub / GitLab / Gitea / https git repository; a push or tag (webhook) or `POST .../runs` builds the Dockerfile in an isolated build environment, pushes `<registry>/<code>/<image>:<sha7>` and rolls the target services out with health watch and automatic rollback. Runs, live logs, approval and redeploy under `/cloud/containers/{id}/pipeline-runs/{run}`. Additive.


## 2.22.0

container image import: `POST /cloud/containers/{id}/registry/imports` copies an image from Docker Hub, GitHub, Quay or another https registry into the environment's Gyro registry (no `docker push`; optional token, never stored), `GET .../registry/imports` shows progress. Additive.


## 2.21.0

batch create: `POST /cloud/servers` takes `quantity` (N servers in one order), `name` (`{n}` template) / `tags` and `app`; container environments can be ordered through the API: `GET /cloud/containers/plans`, `POST /cloud/containers` (`quantity`, `name`, `tags`, `project_id`). Additive.


## 2.20.1

documentation only (example values). No functional change.


## 2.20.0

Protected Storage buckets can be mounted on servers (`/cloud/servers/{id}/storage-mounts`, read-only by default, read/write needs `accept_versioning: true`, field `protected`) and renamed (`POST /cloud/storage/{id}/buckets/{bucket}/rename`: display name + website address change, S3 name stays, `s3_name` in bucket lists). Additive.


## 2.19.1

`POST /cloud/servers/{id}/actions/rebuild` accepts `app` and `app_domain` (one-click app on top of the reinstall; response `app_install_id`); `POST /cloud/servers/{id}/app` also on tr-ist-1. Install status `kaldirildi` = removed by a later reinstall. Additive.


## 2.19.0

additional disks for tr-ist-1 servers: `GET/POST /cloud/servers/{id}/disks`, `PUT/DELETE /cloud/servers/{id}/disks/{disk}` (ssd or hdd class, per GB, hourly from the prepaid balance; up to 4 disks per server, grow only).


## 2.18.0

projects: `/cloud/projects` (list/create/get/update/delete, move services), `PUT /cloud/services/{id}/project`, `project` on every service, `?project=` filter, optional `project_id` on order endpoints. Additive.


## 2.17.5

mount a Gyro Object Storage bucket on a server: `GET/POST /cloud/servers/{id}/storage-mounts`, `GET/DELETE /cloud/servers/{id}/storage-mounts/{mid}`, `POST .../{mid}/command` (one-line installer, automatic on tr-ist-1; one narrow key per mount; free). Additive.


## 2.17.4

Gyro Containers Serverless: `GET /cloud/billing/container-sizes` (vCPU / memory pairs and prices), `POST /cloud/billing/estimate` accepts `{"type": "serverless", "cpu_m", "memory_mi", "count", "hours"}` (no monthly cap, `capped` flag on every item). Additive.


## 2.17.3

tr-ist-1 snapshots: every additional snapshot is billed at least 1 hour (a snapshot created and deleted between two hourly counts is billed too). Text only.


## 2.17.2

tr-ist-1 reverse DNS is published automatically: default PTR `<a-b-c-d>.ip.gyrohosting.com` on every address, custom PTR live within seconds (`status: active`, new `default` flag), removed when the server/IP is released. Additive.


## 2.17.1

additional IPv4: each added address is billed at least 6 hours (`pricing.minimum_hours`), per-server add limit per hour (`adds_per_hour`, `adds_left_this_hour`). Additive.


## 2.17.0

Gyro Containers: per-service autoscaling (`PUT /cloud/containers/{id}/services/{name}/autoscaling`, also `autoscaling` / `alerts` on create and update), notification channels (`GET/PUT /cloud/containers/{id}/notifications`, `.../notifications/test`, `.../notifications/webhook-secret`: e-mail, SMS, Telegram, signed webhook). Additive.


## 2.16.1

`GET /cloud/apps` returns `min_ram_gb` (fixed), `min_disk_gb`, `min_cpu`, `popular_tr`, `version`, `license` and `description` for each one-click app. Additive change.


## 2.16.0

additional IPv4 addresses for tr-ist-1 servers: `GET/POST /cloud/servers/{id}/ips`, `DELETE /cloud/servers/{id}/ips/{ip}` (hourly from the prepaid balance, default 2 EUR per address-month, up to 5 per server; configured on the server automatically).


## 2.15.0

custom templates for tr-ist-1 servers: capture a server (`POST /cloud/servers/{id}/templates`), list / rename / delete, new server (`POST /cloud/templates/{id}/servers`) or reinstall (`POST /cloud/templates/{id}/rebuild`) from it. 0.05 EUR per GB-month (prepaid, hourly). No image upload.


## 2.14.0

tr-ist-1 servers on Gyro Compute: SSH keys (up to 10) and `user_data` at creation through cloud-init (~25 s to SSH), `reset` action, rebuild with `user_data`, real snapshot ids, metrics (instant), browser console URL. Request / response shapes unchanged.


## 2.13.1

Protected Storage (versioning + object lock / WORM): `object_lock` on bucket create, versions list / restore / undelete / delete, bucket default retention, per-version retention and legal hold, old version expiry, lock summary and scan. Standard Object Storage answers 409 `feature_not_available` on these.


## 2.11.0

prepaid hourly billing from the account balance for Gyro Containers (ECS) and Gyro Cloud Istanbul (`billing: prepaid` on products and servers; `/cloud/billing/balance|usage|statement/{month}|estimate|topup-url`); `/cloud/containers` (Gyro Containers).


## 2.10.0

region `tr-ist-1` (Gyro Cloud Istanbul) on the same `/cloud/servers` endpoints, CLI commands and Terraform resources; `GET /cloud/images?region=`; SSH keys installed after first boot in tr-ist-1 (`ssh_keys` on the server).
