diff --git a/.release-please-manifest.json b/.release-please-manifest.json
index 51acdaa4..8ea07c9a 100644
--- a/.release-please-manifest.json
+++ b/.release-please-manifest.json
@@ -1,3 +1,3 @@
 {
-  ".": "0.37.0"
+  ".": "0.38.0"
 }
\ No newline at end of file
diff --git a/.stats.yml b/.stats.yml
index aed8796f..b72e6f1f 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
-configured_endpoints: 647
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-fb64ef91c12781d682cbc845f5a4640859f270c08a85ba13b83213fec2e4a14e.yml
-openapi_spec_hash: f2fe832b9215e2af7118835cfe833d18
-config_hash: edde4fda674dd197930f89cdf732c63b
+configured_endpoints: 650
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-bdb3b4d668f81b13e6efe02f12c8bd9282bcb8ac0a5ffe1ffc6eb9818fb4383c.yml
+openapi_spec_hash: 35c08e4518648985dfc11c5a49dcf579
+config_hash: 672a7b10c4d79ac7c95a730251493432
diff --git a/.vscode/settings.json b/.vscode/settings.json
deleted file mode 100644
index 5b010307..00000000
--- a/.vscode/settings.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
-    "python.analysis.importFormat": "relative",
-}
diff --git a/CHANGELOG.md b/CHANGELOG.md
index b915b07d..5e725df6 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,30 @@
 # Changelog
 
+## 0.38.0 (2026-03-13)
+
+Full Changelog: [v0.37.0...v0.38.0](https://github.com/G-Core/gcore-python/compare/v0.37.0...v0.38.0)
+
+### Features
+
+* **api:** aggregated API specs update ([b150a8b](https://github.com/G-Core/gcore-python/commit/b150a8b912a9f3253f2d8138fa8c93f5530c331d))
+* **api:** aggregated API specs update ([c1fb24e](https://github.com/G-Core/gcore-python/commit/c1fb24e6132dcd89b9b84a2e369d327a57f187e2))
+* **api:** aggregated API specs update ([eb53954](https://github.com/G-Core/gcore-python/commit/eb5395427eae979ee0f64ebcc79aa11455cd3d62))
+* **api:** aggregated API specs update ([152f7b0](https://github.com/G-Core/gcore-python/commit/152f7b010e3de9e11b74fa0e9d25c2e3c46edd7c))
+* **api:** aggregated API specs update ([e203f21](https://github.com/G-Core/gcore-python/commit/e203f2110410c15524fabbf45c813cd7b7113308))
+* **cloud:** add get, update, delete methods to baremetal servers ([46de113](https://github.com/G-Core/gcore-python/commit/46de113fe4f394a353ea06199533b30c9fa42df9))
+* **cloud:** add update method to GPU Baremetal clusters ([3aaae61](https://github.com/G-Core/gcore-python/commit/3aaae61423f266ceca10a2a44aab05fb11875b9f))
+
+
+### Bug Fixes
+
+* **fastedge:** rename path parameters to match updated OpenAPI spec ([2c17154](https://github.com/G-Core/gcore-python/commit/2c17154346bd0f1663ecccadf5a444e0b21c6134))
+
+
+### Chores
+
+* **examples:** suppress pyright deprecation warnings in storage examples ([81806bb](https://github.com/G-Core/gcore-python/commit/81806bbe78c871a60e6ca613e7b24c3442293f90))
+* remove .vscode/ ([8490ade](https://github.com/G-Core/gcore-python/commit/8490ade7834974693fa6e9df0dd44edabe4050e7))
+
 ## 0.37.0 (2026-03-09)
 
 Full Changelog: [v0.36.0...v0.37.0](https://github.com/G-Core/gcore-python/compare/v0.36.0...v0.37.0)
diff --git a/examples/storage/basic.py b/examples/storage/basic.py
index cd134630..ae0322cc 100644
--- a/examples/storage/basic.py
+++ b/examples/storage/basic.py
@@ -37,7 +37,7 @@ def create_storage(*, client: Gcore) -> int:
 
 def list_storages(*, client: Gcore) -> None:
     print("\n=== LIST STORAGES ===")
-    storages = client.storage.list()
+    storages = client.storage.list() # pyright: ignore[reportDeprecated]
     for count, storage in enumerate(storages, 1):
         print(
             f"  {count}. Storage: ID={storage.id}, Name={storage.name}, Type={storage.type}, Location={storage.location}, Status={storage.provisioning_status}"
@@ -47,7 +47,7 @@ def list_storages(*, client: Gcore) -> None:
 
 def get_storage(*, client: Gcore, storage_id: int) -> None:
     print("\n=== GET STORAGE ===")
-    storage = client.storage.get(storage_id=storage_id)
+    storage = client.storage.get(storage_id=storage_id) # pyright: ignore[reportDeprecated]
     print(
         f"Storage: ID={storage.id}, Name={storage.name}, Type={storage.type}, Location={storage.location}, Status={storage.provisioning_status}"
     )
diff --git a/examples/storage/basic_async.py b/examples/storage/basic_async.py
index 8d898fec..f07ed2ef 100644
--- a/examples/storage/basic_async.py
+++ b/examples/storage/basic_async.py
@@ -38,7 +38,7 @@ async def create_storage(*, client: AsyncGcore) -> int:
 
 async def list_storages(*, client: AsyncGcore) -> None:
     print("\n=== LIST STORAGES ===")
-    storages = client.storage.list()
+    storages = client.storage.list() # pyright: ignore[reportDeprecated]
     count = 1
     async for storage in storages:
         print(
@@ -50,7 +50,7 @@ async def list_storages(*, client: AsyncGcore) -> None:
 
 async def get_storage(*, client: AsyncGcore, storage_id: int) -> None:
     print("\n=== GET STORAGE ===")
-    storage = await client.storage.get(storage_id=storage_id)
+    storage = await client.storage.get(storage_id=storage_id) # pyright: ignore[reportDeprecated]
     print(
         f"Storage: ID={storage.id}, Name={storage.name}, Type={storage.type}, Location={storage.location}, Status={storage.provisioning_status}"
     )
diff --git a/examples/storage/credentials.py b/examples/storage/credentials.py
index f46914f9..34f68b6b 100644
--- a/examples/storage/credentials.py
+++ b/examples/storage/credentials.py
@@ -67,7 +67,7 @@ def wait_for_storage_provisioning(
     """Wait for a single storage to be provisioned"""
     elapsed = 0
     while elapsed < max_wait:
-        storage = client.storage.get(storage_id=storage_id)
+        storage = client.storage.get(storage_id=storage_id) # pyright: ignore[reportDeprecated]
         if storage.provisioning_status == "ok":
             print(f"Storage {storage_id} is ready")
             return
@@ -80,7 +80,7 @@ def wait_for_storage_provisioning(
 def get_storage(*, client: Gcore, storage_id: int) -> None:
     """Get and display details for a single storage"""
     print("\n=== GET STORAGE DETAILS ===")
-    storage = client.storage.get(storage_id=storage_id)
+    storage = client.storage.get(storage_id=storage_id) # pyright: ignore[reportDeprecated]
     print(
         f"Storage: ID={storage.id}, Name={storage.name}, Type={storage.type}, Location={storage.location}, Status={storage.provisioning_status}"
     )
diff --git a/examples/storage/credentials_async.py b/examples/storage/credentials_async.py
index 4a9b3134..aa1baeda 100644
--- a/examples/storage/credentials_async.py
+++ b/examples/storage/credentials_async.py
@@ -68,7 +68,7 @@ async def wait_for_storage_provisioning(
     """Wait for a single storage to be provisioned"""
     elapsed = 0
     while elapsed < max_wait:
-        storage = await client.storage.get(storage_id=storage_id)
+        storage = await client.storage.get(storage_id=storage_id) # pyright: ignore[reportDeprecated]
         if storage.provisioning_status == "ok":
             print(f"Storage {storage_id} is ready")
             return
@@ -81,7 +81,7 @@ async def wait_for_storage_provisioning(
 async def get_storage(*, client: AsyncGcore, storage_id: int) -> None:
     """Get and display details for a single storage"""
     print("\n=== GET STORAGE DETAILS ===")
-    storage = await client.storage.get(storage_id=storage_id)
+    storage = await client.storage.get(storage_id=storage_id) # pyright: ignore[reportDeprecated]
     print(
         f"Storage: ID={storage.id}, Name={storage.name}, Type={storage.type}, Location={storage.location}, Status={storage.provisioning_status}"
     )
diff --git a/examples/storage/s3_buckets.py b/examples/storage/s3_buckets.py
index 2c516e3e..957b18a9 100644
--- a/examples/storage/s3_buckets.py
+++ b/examples/storage/s3_buckets.py
@@ -50,7 +50,7 @@ def wait_for_storage_provisioning(*, client: Gcore, storage_id: int) -> None:
     wait_interval = 2
     elapsed = 0
     while elapsed < max_wait:
-        storage = client.storage.get(storage_id=storage_id)
+        storage = client.storage.get(storage_id=storage_id) # pyright: ignore[reportDeprecated]
         if storage.provisioning_status == "ok":
             print(f"Storage {storage_id} is ready")
             print("=====================================")
diff --git a/examples/storage/s3_buckets_async.py b/examples/storage/s3_buckets_async.py
index 25934d68..c83078b5 100644
--- a/examples/storage/s3_buckets_async.py
+++ b/examples/storage/s3_buckets_async.py
@@ -49,7 +49,7 @@ async def wait_for_storage_provisioning(*, client: AsyncGcore, storage_id: int)
     wait_interval = 2
     elapsed = 0
     while elapsed < max_wait:
-        storage = await client.storage.get(storage_id=storage_id)
+        storage = await client.storage.get(storage_id=storage_id) # pyright: ignore[reportDeprecated]
         if storage.provisioning_status == "ok":
             print(f"Storage {storage_id} is ready")
             print("=====================================")
diff --git a/pyproject.toml b/pyproject.toml
index 6f91235f..4dca5b5e 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,6 +1,6 @@
 [project]
 name = "gcore"
-version = "0.37.0"
+version = "0.38.0"
 description = "The official Python library for the gcore API"
 dynamic = ["readme"]
 license = "Apache-2.0"
diff --git a/src/gcore/_version.py b/src/gcore/_version.py
index 9d314c83..ee385833 100644
--- a/src/gcore/_version.py
+++ b/src/gcore/_version.py
@@ -1,4 +1,4 @@
 # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
 
 __title__ = "gcore"
-__version__ = "0.37.0"  # x-release-please-version
+__version__ = "0.38.0"  # x-release-please-version
diff --git a/src/gcore/resources/cdn/logs_uploader/targets.py b/src/gcore/resources/cdn/logs_uploader/targets.py
index 3772321d..b43f30d8 100644
--- a/src/gcore/resources/cdn/logs_uploader/targets.py
+++ b/src/gcore/resources/cdn/logs_uploader/targets.py
@@ -63,7 +63,9 @@ def create(
         self,
         *,
         config: target_create_params.Config,
-        storage_type: Literal["s3_gcore", "s3_amazon", "s3_oss", "s3_other", "s3_v1", "ftp", "sftp", "http"],
+        storage_type: Literal[
+            "s3_gcore", "s3_amazon", "s3_oss", "s3_other", "s3_v1", "ftp", "sftp", "http", "azure_blob"
+        ],
         description: str | Omit = omit,
         name: str | Omit = omit,
         # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
@@ -117,7 +119,9 @@ def update(
         config: target_update_params.Config | Omit = omit,
         description: str | Omit = omit,
         name: str | Omit = omit,
-        storage_type: Literal["s3_gcore", "s3_amazon", "s3_oss", "s3_other", "s3_v1", "ftp", "sftp", "http"]
+        storage_type: Literal[
+            "s3_gcore", "s3_amazon", "s3_oss", "s3_other", "s3_v1", "ftp", "sftp", "http", "azure_blob"
+        ]
         | Omit = omit,
         # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
         # The extra values given here take precedence over values defined on the client or passed to this method.
@@ -282,7 +286,9 @@ def replace(
         id: int,
         *,
         config: target_replace_params.Config,
-        storage_type: Literal["s3_gcore", "s3_amazon", "s3_oss", "s3_other", "s3_v1", "ftp", "sftp", "http"],
+        storage_type: Literal[
+            "s3_gcore", "s3_amazon", "s3_oss", "s3_other", "s3_v1", "ftp", "sftp", "http", "azure_blob"
+        ],
         description: str | Omit = omit,
         name: str | Omit = omit,
         # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
@@ -393,7 +399,9 @@ async def create(
         self,
         *,
         config: target_create_params.Config,
-        storage_type: Literal["s3_gcore", "s3_amazon", "s3_oss", "s3_other", "s3_v1", "ftp", "sftp", "http"],
+        storage_type: Literal[
+            "s3_gcore", "s3_amazon", "s3_oss", "s3_other", "s3_v1", "ftp", "sftp", "http", "azure_blob"
+        ],
         description: str | Omit = omit,
         name: str | Omit = omit,
         # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
@@ -447,7 +455,9 @@ async def update(
         config: target_update_params.Config | Omit = omit,
         description: str | Omit = omit,
         name: str | Omit = omit,
-        storage_type: Literal["s3_gcore", "s3_amazon", "s3_oss", "s3_other", "s3_v1", "ftp", "sftp", "http"]
+        storage_type: Literal[
+            "s3_gcore", "s3_amazon", "s3_oss", "s3_other", "s3_v1", "ftp", "sftp", "http", "azure_blob"
+        ]
         | Omit = omit,
         # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
         # The extra values given here take precedence over values defined on the client or passed to this method.
@@ -612,7 +622,9 @@ async def replace(
         id: int,
         *,
         config: target_replace_params.Config,
-        storage_type: Literal["s3_gcore", "s3_amazon", "s3_oss", "s3_other", "s3_v1", "ftp", "sftp", "http"],
+        storage_type: Literal[
+            "s3_gcore", "s3_amazon", "s3_oss", "s3_other", "s3_v1", "ftp", "sftp", "http", "azure_blob"
+        ],
         description: str | Omit = omit,
         name: str | Omit = omit,
         # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
diff --git a/src/gcore/resources/cloud/api.md b/src/gcore/resources/cloud/api.md
index 0028620e..99cac30b 100644
--- a/src/gcore/resources/cloud/api.md
+++ b/src/gcore/resources/cloud/api.md
@@ -657,7 +657,10 @@ from gcore.types.cloud.baremetal import (
 Methods:
 
 - <code title="post /cloud/v1/bminstances/{project_id}/{region_id}">client.cloud.baremetal.servers.<a href="./src/gcore/resources/cloud/baremetal/servers.py">create</a>(\*, project_id, region_id, \*\*<a href="src/gcore/types/cloud/baremetal/server_create_params.py">params</a>) -> <a href="./src/gcore/types/cloud/task_id_list.py">TaskIDList</a></code>
+- <code title="patch /cloud/v1/bminstances/{project_id}/{region_id}/{server_id}">client.cloud.baremetal.servers.<a href="./src/gcore/resources/cloud/baremetal/servers.py">update</a>(server_id, \*, project_id, region_id, \*\*<a href="src/gcore/types/cloud/baremetal/server_update_params.py">params</a>) -> <a href="./src/gcore/types/cloud/baremetal/baremetal_server.py">BaremetalServer</a></code>
 - <code title="get /cloud/v1/bminstances/{project_id}/{region_id}">client.cloud.baremetal.servers.<a href="./src/gcore/resources/cloud/baremetal/servers.py">list</a>(\*, project_id, region_id, \*\*<a href="src/gcore/types/cloud/baremetal/server_list_params.py">params</a>) -> <a href="./src/gcore/types/cloud/baremetal/baremetal_server.py">SyncOffsetPage[BaremetalServer]</a></code>
+- <code title="delete /cloud/v1/bminstances/{project_id}/{region_id}/{server_id}">client.cloud.baremetal.servers.<a href="./src/gcore/resources/cloud/baremetal/servers.py">delete</a>(server_id, \*, project_id, region_id, \*\*<a href="src/gcore/types/cloud/baremetal/server_delete_params.py">params</a>) -> <a href="./src/gcore/types/cloud/task_id_list.py">TaskIDList</a></code>
+- <code title="get /cloud/v1/bminstances/{project_id}/{region_id}/{server_id}">client.cloud.baremetal.servers.<a href="./src/gcore/resources/cloud/baremetal/servers.py">get</a>(server_id, \*, project_id, region_id) -> <a href="./src/gcore/types/cloud/baremetal/baremetal_server.py">BaremetalServer</a></code>
 - <code title="post /cloud/v1/bminstances/{project_id}/{region_id}/{server_id}/rebuild">client.cloud.baremetal.servers.<a href="./src/gcore/resources/cloud/baremetal/servers.py">rebuild</a>(server_id, \*, project_id, region_id, \*\*<a href="src/gcore/types/cloud/baremetal/server_rebuild_params.py">params</a>) -> <a href="./src/gcore/types/cloud/task_id_list.py">TaskIDList</a></code>
 
 ## Registries
@@ -786,9 +789,9 @@ from gcore.types.cloud.gpu_baremetal import GPUBaremetalCluster
 Methods:
 
 - <code title="post /cloud/v3/gpu/baremetal/{project_id}/{region_id}/clusters">client.cloud.gpu_baremetal.clusters.<a href="./src/gcore/resources/cloud/gpu_baremetal/clusters/clusters.py">create</a>(\*, project_id, region_id, \*\*<a href="src/gcore/types/cloud/gpu_baremetal/cluster_create_params.py">params</a>) -> <a href="./src/gcore/types/cloud/task_id_list.py">TaskIDList</a></code>
+- <code title="patch /cloud/v3/gpu/baremetal/{project_id}/{region_id}/clusters/{cluster_id}">client.cloud.gpu_baremetal.clusters.<a href="./src/gcore/resources/cloud/gpu_baremetal/clusters/clusters.py">update</a>(cluster_id, \*, project_id, region_id, \*\*<a href="src/gcore/types/cloud/gpu_baremetal/cluster_update_params.py">params</a>) -> <a href="./src/gcore/types/cloud/gpu_baremetal/gpu_baremetal_cluster.py">GPUBaremetalCluster</a></code>
 - <code title="get /cloud/v3/gpu/baremetal/{project_id}/{region_id}/clusters">client.cloud.gpu_baremetal.clusters.<a href="./src/gcore/resources/cloud/gpu_baremetal/clusters/clusters.py">list</a>(\*, project_id, region_id, \*\*<a href="src/gcore/types/cloud/gpu_baremetal/cluster_list_params.py">params</a>) -> <a href="./src/gcore/types/cloud/gpu_baremetal/gpu_baremetal_cluster.py">SyncOffsetPage[GPUBaremetalCluster]</a></code>
 - <code title="delete /cloud/v3/gpu/baremetal/{project_id}/{region_id}/clusters/{cluster_id}">client.cloud.gpu_baremetal.clusters.<a href="./src/gcore/resources/cloud/gpu_baremetal/clusters/clusters.py">delete</a>(cluster_id, \*, project_id, region_id, \*\*<a href="src/gcore/types/cloud/gpu_baremetal/cluster_delete_params.py">params</a>) -> <a href="./src/gcore/types/cloud/task_id_list.py">TaskIDList</a></code>
-- <code title="post /cloud/v3/gpu/baremetal/{project_id}/{region_id}/clusters/{cluster_id}/action">client.cloud.gpu_baremetal.clusters.<a href="./src/gcore/resources/cloud/gpu_baremetal/clusters/clusters.py">action</a>(cluster_id, \*, project_id, region_id, \*\*<a href="src/gcore/types/cloud/gpu_baremetal/cluster_action_params.py">params</a>) -> <a href="./src/gcore/types/cloud/task_id_list.py">TaskIDList</a></code>
 - <code title="get /cloud/v3/gpu/baremetal/{project_id}/{region_id}/clusters/{cluster_id}">client.cloud.gpu_baremetal.clusters.<a href="./src/gcore/resources/cloud/gpu_baremetal/clusters/clusters.py">get</a>(cluster_id, \*, project_id, region_id) -> <a href="./src/gcore/types/cloud/gpu_baremetal/gpu_baremetal_cluster.py">GPUBaremetalCluster</a></code>
 - <code title="post /cloud/v2/ai/clusters/{project_id}/{region_id}/{cluster_id}/powercycle">client.cloud.gpu_baremetal.clusters.<a href="./src/gcore/resources/cloud/gpu_baremetal/clusters/clusters.py">powercycle_all_servers</a>(cluster_id, \*, project_id, region_id) -> <a href="./src/gcore/types/cloud/gpu_baremetal/clusters/gpu_baremetal_cluster_server_v1_list.py">GPUBaremetalClusterServerV1List</a></code>
 - <code title="post /cloud/v2/ai/clusters/{project_id}/{region_id}/{cluster_id}/reboot">client.cloud.gpu_baremetal.clusters.<a href="./src/gcore/resources/cloud/gpu_baremetal/clusters/clusters.py">reboot_all_servers</a>(cluster_id, \*, project_id, region_id) -> <a href="./src/gcore/types/cloud/gpu_baremetal/clusters/gpu_baremetal_cluster_server_v1_list.py">GPUBaremetalClusterServerV1List</a></code>
diff --git a/src/gcore/resources/cloud/baremetal/servers.py b/src/gcore/resources/cloud/baremetal/servers.py
index ae77f521..fc72c78d 100644
--- a/src/gcore/resources/cloud/baremetal/servers.py
+++ b/src/gcore/resources/cloud/baremetal/servers.py
@@ -20,8 +20,15 @@
 )
 from ....pagination import SyncOffsetPage, AsyncOffsetPage
 from ...._base_client import AsyncPaginator, make_request_options
-from ....types.cloud.baremetal import server_list_params, server_create_params, server_rebuild_params
+from ....types.cloud.baremetal import (
+    server_list_params,
+    server_create_params,
+    server_delete_params,
+    server_update_params,
+    server_rebuild_params,
+)
 from ....types.cloud.task_id_list import TaskIDList
+from ....types.cloud.tag_update_map_param import TagUpdateMapParam
 from ....types.cloud.baremetal.baremetal_server import BaremetalServer
 
 __all__ = ["ServersResource", "AsyncServersResource"]
@@ -187,6 +194,84 @@ def create(
             cast_to=TaskIDList,
         )
 
+    def update(
+        self,
+        server_id: str,
+        *,
+        project_id: int | None = None,
+        region_id: int | None = None,
+        name: str | Omit = omit,
+        tags: Optional[TagUpdateMapParam] | Omit = omit,
+        # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
+        # The extra values given here take precedence over values defined on the client or passed to this method.
+        extra_headers: Headers | None = None,
+        extra_query: Query | None = None,
+        extra_body: Body | None = None,
+        timeout: float | httpx.Timeout | None | NotGiven = not_given,
+    ) -> BaremetalServer:
+        """
+        Rename bare metal server or update tags
+
+        Args:
+          project_id: Project ID
+
+          region_id: Region ID
+
+          server_id: Server ID
+
+          name: Name
+
+          tags: Update key-value tags using JSON Merge Patch semantics (RFC 7386). Provide
+              key-value pairs to add or update tags. Set tag values to `null` to remove tags.
+              Unspecified tags remain unchanged. Read-only tags are always preserved and
+              cannot be modified.
+
+              **Examples:**
+
+              - **Add/update tags:**
+                `{'tags': {'environment': 'production', 'team': 'backend'}}` adds new tags or
+                updates existing ones.
+              - **Delete tags:** `{'tags': {'old_tag': null}}` removes specific tags.
+              - **Remove all tags:** `{'tags': null}` removes all user-managed tags (read-only
+                tags are preserved).
+              - **Partial update:** `{'tags': {'environment': 'staging'}}` only updates
+                specified tags.
+              - **Mixed operations:**
+                `{'tags': {'environment': 'production', 'cost_center': 'engineering', 'deprecated_tag': null}}`
+                adds/updates 'environment' and 'cost_center' while removing 'deprecated_tag',
+                preserving other existing tags.
+              - **Replace all:** first delete existing tags with null values, then add new
+                ones in the same request.
+
+          extra_headers: Send extra headers
+
+          extra_query: Add additional query parameters to the request
+
+          extra_body: Add additional JSON properties to the request
+
+          timeout: Override the client-level default timeout for this request, in seconds
+        """
+        if project_id is None:
+            project_id = self._client._get_cloud_project_id_path_param()
+        if region_id is None:
+            region_id = self._client._get_cloud_region_id_path_param()
+        if not server_id:
+            raise ValueError(f"Expected a non-empty value for `server_id` but received {server_id!r}")
+        return self._patch(
+            f"/cloud/v1/bminstances/{project_id}/{region_id}/{server_id}",
+            body=maybe_transform(
+                {
+                    "name": name,
+                    "tags": tags,
+                },
+                server_update_params.ServerUpdateParams,
+            ),
+            options=make_request_options(
+                extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
+            ),
+            cast_to=BaremetalServer,
+        )
+
     def list(
         self,
         *,
@@ -337,6 +422,118 @@ def list(
             model=BaremetalServer,
         )
 
+    def delete(
+        self,
+        server_id: str,
+        *,
+        project_id: int | None = None,
+        region_id: int | None = None,
+        all_floating_ips: bool | Omit = omit,
+        floating_ip_ids: str | Omit = omit,
+        reserved_fixed_ip_ids: str | Omit = omit,
+        # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
+        # The extra values given here take precedence over values defined on the client or passed to this method.
+        extra_headers: Headers | None = None,
+        extra_query: Query | None = None,
+        extra_body: Body | None = None,
+        timeout: float | httpx.Timeout | None | NotGiven = not_given,
+    ) -> TaskIDList:
+        """
+        Delete a bare metal server and it's associated resources
+
+        Args:
+          project_id: Project ID
+
+          region_id: Region ID
+
+          server_id: Server ID
+
+          all_floating_ips: True if it is required to delete floating IPs assigned to the instance. Can't be
+              used with `floating_ip_ids`.
+
+          floating_ip_ids: Comma separated list of floating ids that should be deleted. Can't be used with
+              `all_floating_ips`.
+
+          reserved_fixed_ip_ids: Comma separated list of port IDs to be deleted with the instance
+
+          extra_headers: Send extra headers
+
+          extra_query: Add additional query parameters to the request
+
+          extra_body: Add additional JSON properties to the request
+
+          timeout: Override the client-level default timeout for this request, in seconds
+        """
+        if project_id is None:
+            project_id = self._client._get_cloud_project_id_path_param()
+        if region_id is None:
+            region_id = self._client._get_cloud_region_id_path_param()
+        if not server_id:
+            raise ValueError(f"Expected a non-empty value for `server_id` but received {server_id!r}")
+        return self._delete(
+            f"/cloud/v1/bminstances/{project_id}/{region_id}/{server_id}",
+            options=make_request_options(
+                extra_headers=extra_headers,
+                extra_query=extra_query,
+                extra_body=extra_body,
+                timeout=timeout,
+                query=maybe_transform(
+                    {
+                        "all_floating_ips": all_floating_ips,
+                        "floating_ip_ids": floating_ip_ids,
+                        "reserved_fixed_ip_ids": reserved_fixed_ip_ids,
+                    },
+                    server_delete_params.ServerDeleteParams,
+                ),
+            ),
+            cast_to=TaskIDList,
+        )
+
+    def get(
+        self,
+        server_id: str,
+        *,
+        project_id: int | None = None,
+        region_id: int | None = None,
+        # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
+        # The extra values given here take precedence over values defined on the client or passed to this method.
+        extra_headers: Headers | None = None,
+        extra_query: Query | None = None,
+        extra_body: Body | None = None,
+        timeout: float | httpx.Timeout | None | NotGiven = not_given,
+    ) -> BaremetalServer:
+        """
+        Retrieve detailed information about a specific baremetal instance.
+
+        Args:
+          project_id: Project ID
+
+          region_id: Region ID
+
+          server_id: Server ID
+
+          extra_headers: Send extra headers
+
+          extra_query: Add additional query parameters to the request
+
+          extra_body: Add additional JSON properties to the request
+
+          timeout: Override the client-level default timeout for this request, in seconds
+        """
+        if project_id is None:
+            project_id = self._client._get_cloud_project_id_path_param()
+        if region_id is None:
+            region_id = self._client._get_cloud_region_id_path_param()
+        if not server_id:
+            raise ValueError(f"Expected a non-empty value for `server_id` but received {server_id!r}")
+        return self._get(
+            f"/cloud/v1/bminstances/{project_id}/{region_id}/{server_id}",
+            options=make_request_options(
+                extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
+            ),
+            cast_to=BaremetalServer,
+        )
+
     def rebuild(
         self,
         server_id: str,
@@ -679,6 +876,84 @@ async def create(
             cast_to=TaskIDList,
         )
 
+    async def update(
+        self,
+        server_id: str,
+        *,
+        project_id: int | None = None,
+        region_id: int | None = None,
+        name: str | Omit = omit,
+        tags: Optional[TagUpdateMapParam] | Omit = omit,
+        # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
+        # The extra values given here take precedence over values defined on the client or passed to this method.
+        extra_headers: Headers | None = None,
+        extra_query: Query | None = None,
+        extra_body: Body | None = None,
+        timeout: float | httpx.Timeout | None | NotGiven = not_given,
+    ) -> BaremetalServer:
+        """
+        Rename bare metal server or update tags
+
+        Args:
+          project_id: Project ID
+
+          region_id: Region ID
+
+          server_id: Server ID
+
+          name: Name
+
+          tags: Update key-value tags using JSON Merge Patch semantics (RFC 7386). Provide
+              key-value pairs to add or update tags. Set tag values to `null` to remove tags.
+              Unspecified tags remain unchanged. Read-only tags are always preserved and
+              cannot be modified.
+
+              **Examples:**
+
+              - **Add/update tags:**
+                `{'tags': {'environment': 'production', 'team': 'backend'}}` adds new tags or
+                updates existing ones.
+              - **Delete tags:** `{'tags': {'old_tag': null}}` removes specific tags.
+              - **Remove all tags:** `{'tags': null}` removes all user-managed tags (read-only
+                tags are preserved).
+              - **Partial update:** `{'tags': {'environment': 'staging'}}` only updates
+                specified tags.
+              - **Mixed operations:**
+                `{'tags': {'environment': 'production', 'cost_center': 'engineering', 'deprecated_tag': null}}`
+                adds/updates 'environment' and 'cost_center' while removing 'deprecated_tag',
+                preserving other existing tags.
+              - **Replace all:** first delete existing tags with null values, then add new
+                ones in the same request.
+
+          extra_headers: Send extra headers
+
+          extra_query: Add additional query parameters to the request
+
+          extra_body: Add additional JSON properties to the request
+
+          timeout: Override the client-level default timeout for this request, in seconds
+        """
+        if project_id is None:
+            project_id = self._client._get_cloud_project_id_path_param()
+        if region_id is None:
+            region_id = self._client._get_cloud_region_id_path_param()
+        if not server_id:
+            raise ValueError(f"Expected a non-empty value for `server_id` but received {server_id!r}")
+        return await self._patch(
+            f"/cloud/v1/bminstances/{project_id}/{region_id}/{server_id}",
+            body=await async_maybe_transform(
+                {
+                    "name": name,
+                    "tags": tags,
+                },
+                server_update_params.ServerUpdateParams,
+            ),
+            options=make_request_options(
+                extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
+            ),
+            cast_to=BaremetalServer,
+        )
+
     def list(
         self,
         *,
@@ -829,6 +1104,118 @@ def list(
             model=BaremetalServer,
         )
 
+    async def delete(
+        self,
+        server_id: str,
+        *,
+        project_id: int | None = None,
+        region_id: int | None = None,
+        all_floating_ips: bool | Omit = omit,
+        floating_ip_ids: str | Omit = omit,
+        reserved_fixed_ip_ids: str | Omit = omit,
+        # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
+        # The extra values given here take precedence over values defined on the client or passed to this method.
+        extra_headers: Headers | None = None,
+        extra_query: Query | None = None,
+        extra_body: Body | None = None,
+        timeout: float | httpx.Timeout | None | NotGiven = not_given,
+    ) -> TaskIDList:
+        """
+        Delete a bare metal server and it's associated resources
+
+        Args:
+          project_id: Project ID
+
+          region_id: Region ID
+
+          server_id: Server ID
+
+          all_floating_ips: True if it is required to delete floating IPs assigned to the instance. Can't be
+              used with `floating_ip_ids`.
+
+          floating_ip_ids: Comma separated list of floating ids that should be deleted. Can't be used with
+              `all_floating_ips`.
+
+          reserved_fixed_ip_ids: Comma separated list of port IDs to be deleted with the instance
+
+          extra_headers: Send extra headers
+
+          extra_query: Add additional query parameters to the request
+
+          extra_body: Add additional JSON properties to the request
+
+          timeout: Override the client-level default timeout for this request, in seconds
+        """
+        if project_id is None:
+            project_id = self._client._get_cloud_project_id_path_param()
+        if region_id is None:
+            region_id = self._client._get_cloud_region_id_path_param()
+        if not server_id:
+            raise ValueError(f"Expected a non-empty value for `server_id` but received {server_id!r}")
+        return await self._delete(
+            f"/cloud/v1/bminstances/{project_id}/{region_id}/{server_id}",
+            options=make_request_options(
+                extra_headers=extra_headers,
+                extra_query=extra_query,
+                extra_body=extra_body,
+                timeout=timeout,
+                query=await async_maybe_transform(
+                    {
+                        "all_floating_ips": all_floating_ips,
+                        "floating_ip_ids": floating_ip_ids,
+                        "reserved_fixed_ip_ids": reserved_fixed_ip_ids,
+                    },
+                    server_delete_params.ServerDeleteParams,
+                ),
+            ),
+            cast_to=TaskIDList,
+        )
+
+    async def get(
+        self,
+        server_id: str,
+        *,
+        project_id: int | None = None,
+        region_id: int | None = None,
+        # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
+        # The extra values given here take precedence over values defined on the client or passed to this method.
+        extra_headers: Headers | None = None,
+        extra_query: Query | None = None,
+        extra_body: Body | None = None,
+        timeout: float | httpx.Timeout | None | NotGiven = not_given,
+    ) -> BaremetalServer:
+        """
+        Retrieve detailed information about a specific baremetal instance.
+
+        Args:
+          project_id: Project ID
+
+          region_id: Region ID
+
+          server_id: Server ID
+
+          extra_headers: Send extra headers
+
+          extra_query: Add additional query parameters to the request
+
+          extra_body: Add additional JSON properties to the request
+
+          timeout: Override the client-level default timeout for this request, in seconds
+        """
+        if project_id is None:
+            project_id = self._client._get_cloud_project_id_path_param()
+        if region_id is None:
+            region_id = self._client._get_cloud_region_id_path_param()
+        if not server_id:
+            raise ValueError(f"Expected a non-empty value for `server_id` but received {server_id!r}")
+        return await self._get(
+            f"/cloud/v1/bminstances/{project_id}/{region_id}/{server_id}",
+            options=make_request_options(
+                extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
+            ),
+            cast_to=BaremetalServer,
+        )
+
     async def rebuild(
         self,
         server_id: str,
@@ -1018,9 +1405,18 @@ def __init__(self, servers: ServersResource) -> None:
         self.create = to_raw_response_wrapper(
             servers.create,
         )
+        self.update = to_raw_response_wrapper(
+            servers.update,
+        )
         self.list = to_raw_response_wrapper(
             servers.list,
         )
+        self.delete = to_raw_response_wrapper(
+            servers.delete,
+        )
+        self.get = to_raw_response_wrapper(
+            servers.get,
+        )
         self.rebuild = to_raw_response_wrapper(
             servers.rebuild,
         )
@@ -1039,9 +1435,18 @@ def __init__(self, servers: AsyncServersResource) -> None:
         self.create = async_to_raw_response_wrapper(
             servers.create,
         )
+        self.update = async_to_raw_response_wrapper(
+            servers.update,
+        )
         self.list = async_to_raw_response_wrapper(
             servers.list,
         )
+        self.delete = async_to_raw_response_wrapper(
+            servers.delete,
+        )
+        self.get = async_to_raw_response_wrapper(
+            servers.get,
+        )
         self.rebuild = async_to_raw_response_wrapper(
             servers.rebuild,
         )
@@ -1060,9 +1465,18 @@ def __init__(self, servers: ServersResource) -> None:
         self.create = to_streamed_response_wrapper(
             servers.create,
         )
+        self.update = to_streamed_response_wrapper(
+            servers.update,
+        )
         self.list = to_streamed_response_wrapper(
             servers.list,
         )
+        self.delete = to_streamed_response_wrapper(
+            servers.delete,
+        )
+        self.get = to_streamed_response_wrapper(
+            servers.get,
+        )
         self.rebuild = to_streamed_response_wrapper(
             servers.rebuild,
         )
@@ -1081,9 +1495,18 @@ def __init__(self, servers: AsyncServersResource) -> None:
         self.create = async_to_streamed_response_wrapper(
             servers.create,
         )
+        self.update = async_to_streamed_response_wrapper(
+            servers.update,
+        )
         self.list = async_to_streamed_response_wrapper(
             servers.list,
         )
+        self.delete = async_to_streamed_response_wrapper(
+            servers.delete,
+        )
+        self.get = async_to_streamed_response_wrapper(
+            servers.get,
+        )
         self.rebuild = async_to_streamed_response_wrapper(
             servers.rebuild,
         )
diff --git a/src/gcore/resources/cloud/gpu_baremetal/clusters/clusters.py b/src/gcore/resources/cloud/gpu_baremetal/clusters/clusters.py
index c6f18d25..7e79f1e2 100644
--- a/src/gcore/resources/cloud/gpu_baremetal/clusters/clusters.py
+++ b/src/gcore/resources/cloud/gpu_baremetal/clusters/clusters.py
@@ -54,10 +54,10 @@
 from .....types.cloud.task_id_list import TaskIDList
 from .....types.cloud.gpu_baremetal import (
     cluster_list_params,
-    cluster_action_params,
     cluster_create_params,
     cluster_delete_params,
     cluster_resize_params,
+    cluster_update_params,
     cluster_update_servers_settings_params,
 )
 from .....types.cloud.tag_update_map_param import TagUpdateMapParam
@@ -178,6 +178,88 @@ def create(
             cast_to=TaskIDList,
         )
 
+    def update(
+        self,
+        cluster_id: str,
+        *,
+        project_id: int | None = None,
+        region_id: int | None = None,
+        name: str | Omit = omit,
+        tags: Optional[TagUpdateMapParam] | Omit = omit,
+        # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
+        # The extra values given here take precedence over values defined on the client or passed to this method.
+        extra_headers: Headers | None = None,
+        extra_query: Query | None = None,
+        extra_body: Body | None = None,
+        timeout: float | httpx.Timeout | None | NotGiven = not_given,
+    ) -> GPUBaremetalCluster:
+        """
+        Update the name of an existing bare metal GPU cluster.
+
+        Update tags for a bare metal GPU cluster (and apply to all its nodes) using JSON
+        Merge Patch semantics (RFC 7386). To add or update tags, provide key-value
+        pairs. To remove a tag, set its value to null.
+
+        Args:
+          project_id: Project ID
+
+          region_id: Region ID
+
+          cluster_id: Cluster unique identifier
+
+          name: Cluster name
+
+          tags: Update key-value tags using JSON Merge Patch semantics (RFC 7386). Provide
+              key-value pairs to add or update tags. Set tag values to `null` to remove tags.
+              Unspecified tags remain unchanged. Read-only tags are always preserved and
+              cannot be modified.
+
+              **Examples:**
+
+              - **Add/update tags:**
+                `{'tags': {'environment': 'production', 'team': 'backend'}}` adds new tags or
+                updates existing ones.
+              - **Delete tags:** `{'tags': {'old_tag': null}}` removes specific tags.
+              - **Remove all tags:** `{'tags': null}` removes all user-managed tags (read-only
+                tags are preserved).
+              - **Partial update:** `{'tags': {'environment': 'staging'}}` only updates
+                specified tags.
+              - **Mixed operations:**
+                `{'tags': {'environment': 'production', 'cost_center': 'engineering', 'deprecated_tag': null}}`
+                adds/updates 'environment' and 'cost_center' while removing 'deprecated_tag',
+                preserving other existing tags.
+              - **Replace all:** first delete existing tags with null values, then add new
+                ones in the same request.
+
+          extra_headers: Send extra headers
+
+          extra_query: Add additional query parameters to the request
+
+          extra_body: Add additional JSON properties to the request
+
+          timeout: Override the client-level default timeout for this request, in seconds
+        """
+        if project_id is None:
+            project_id = self._client._get_cloud_project_id_path_param()
+        if region_id is None:
+            region_id = self._client._get_cloud_region_id_path_param()
+        if not cluster_id:
+            raise ValueError(f"Expected a non-empty value for `cluster_id` but received {cluster_id!r}")
+        return self._patch(
+            f"/cloud/v3/gpu/baremetal/{project_id}/{region_id}/clusters/{cluster_id}",
+            body=maybe_transform(
+                {
+                    "name": name,
+                    "tags": tags,
+                },
+                cluster_update_params.ClusterUpdateParams,
+            ),
+            options=make_request_options(
+                extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
+            ),
+            cast_to=GPUBaremetalCluster,
+        )
+
     def list(
         self,
         *,
@@ -314,86 +396,6 @@ def delete(
             cast_to=TaskIDList,
         )
 
-    def action(
-        self,
-        cluster_id: str,
-        *,
-        project_id: int | None = None,
-        region_id: int | None = None,
-        action: Literal["update_tags"],
-        tags: Optional[TagUpdateMapParam],
-        # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
-        # The extra values given here take precedence over values defined on the client or passed to this method.
-        extra_headers: Headers | None = None,
-        extra_query: Query | None = None,
-        extra_body: Body | None = None,
-        timeout: float | httpx.Timeout | None | NotGiven = not_given,
-    ) -> TaskIDList:
-        """Perform a specific action on a baremetal GPU cluster.
-
-        Available actions: update
-        tags.
-
-        Args:
-          project_id: Project ID
-
-          region_id: Region ID
-
-          cluster_id: Cluster unique identifier
-
-          action: Action name
-
-          tags: Update key-value tags using JSON Merge Patch semantics (RFC 7386). Provide
-              key-value pairs to add or update tags. Set tag values to `null` to remove tags.
-              Unspecified tags remain unchanged. Read-only tags are always preserved and
-              cannot be modified.
-
-              **Examples:**
-
-              - **Add/update tags:**
-                `{'tags': {'environment': 'production', 'team': 'backend'}}` adds new tags or
-                updates existing ones.
-              - **Delete tags:** `{'tags': {'old_tag': null}}` removes specific tags.
-              - **Remove all tags:** `{'tags': null}` removes all user-managed tags (read-only
-                tags are preserved).
-              - **Partial update:** `{'tags': {'environment': 'staging'}}` only updates
-                specified tags.
-              - **Mixed operations:**
-                `{'tags': {'environment': 'production', 'cost_center': 'engineering', 'deprecated_tag': null}}`
-                adds/updates 'environment' and 'cost_center' while removing 'deprecated_tag',
-                preserving other existing tags.
-              - **Replace all:** first delete existing tags with null values, then add new
-                ones in the same request.
-
-          extra_headers: Send extra headers
-
-          extra_query: Add additional query parameters to the request
-
-          extra_body: Add additional JSON properties to the request
-
-          timeout: Override the client-level default timeout for this request, in seconds
-        """
-        if project_id is None:
-            project_id = self._client._get_cloud_project_id_path_param()
-        if region_id is None:
-            region_id = self._client._get_cloud_region_id_path_param()
-        if not cluster_id:
-            raise ValueError(f"Expected a non-empty value for `cluster_id` but received {cluster_id!r}")
-        return self._post(
-            f"/cloud/v3/gpu/baremetal/{project_id}/{region_id}/clusters/{cluster_id}/action",
-            body=maybe_transform(
-                {
-                    "action": action,
-                    "tags": tags,
-                },
-                cluster_action_params.ClusterActionParams,
-            ),
-            options=make_request_options(
-                extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
-            ),
-            cast_to=TaskIDList,
-        )
-
     def get(
         self,
         cluster_id: str,
@@ -944,6 +946,88 @@ async def create(
             cast_to=TaskIDList,
         )
 
+    async def update(
+        self,
+        cluster_id: str,
+        *,
+        project_id: int | None = None,
+        region_id: int | None = None,
+        name: str | Omit = omit,
+        tags: Optional[TagUpdateMapParam] | Omit = omit,
+        # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
+        # The extra values given here take precedence over values defined on the client or passed to this method.
+        extra_headers: Headers | None = None,
+        extra_query: Query | None = None,
+        extra_body: Body | None = None,
+        timeout: float | httpx.Timeout | None | NotGiven = not_given,
+    ) -> GPUBaremetalCluster:
+        """
+        Update the name of an existing bare metal GPU cluster.
+
+        Update tags for a bare metal GPU cluster (and apply to all its nodes) using JSON
+        Merge Patch semantics (RFC 7386). To add or update tags, provide key-value
+        pairs. To remove a tag, set its value to null.
+
+        Args:
+          project_id: Project ID
+
+          region_id: Region ID
+
+          cluster_id: Cluster unique identifier
+
+          name: Cluster name
+
+          tags: Update key-value tags using JSON Merge Patch semantics (RFC 7386). Provide
+              key-value pairs to add or update tags. Set tag values to `null` to remove tags.
+              Unspecified tags remain unchanged. Read-only tags are always preserved and
+              cannot be modified.
+
+              **Examples:**
+
+              - **Add/update tags:**
+                `{'tags': {'environment': 'production', 'team': 'backend'}}` adds new tags or
+                updates existing ones.
+              - **Delete tags:** `{'tags': {'old_tag': null}}` removes specific tags.
+              - **Remove all tags:** `{'tags': null}` removes all user-managed tags (read-only
+                tags are preserved).
+              - **Partial update:** `{'tags': {'environment': 'staging'}}` only updates
+                specified tags.
+              - **Mixed operations:**
+                `{'tags': {'environment': 'production', 'cost_center': 'engineering', 'deprecated_tag': null}}`
+                adds/updates 'environment' and 'cost_center' while removing 'deprecated_tag',
+                preserving other existing tags.
+              - **Replace all:** first delete existing tags with null values, then add new
+                ones in the same request.
+
+          extra_headers: Send extra headers
+
+          extra_query: Add additional query parameters to the request
+
+          extra_body: Add additional JSON properties to the request
+
+          timeout: Override the client-level default timeout for this request, in seconds
+        """
+        if project_id is None:
+            project_id = self._client._get_cloud_project_id_path_param()
+        if region_id is None:
+            region_id = self._client._get_cloud_region_id_path_param()
+        if not cluster_id:
+            raise ValueError(f"Expected a non-empty value for `cluster_id` but received {cluster_id!r}")
+        return await self._patch(
+            f"/cloud/v3/gpu/baremetal/{project_id}/{region_id}/clusters/{cluster_id}",
+            body=await async_maybe_transform(
+                {
+                    "name": name,
+                    "tags": tags,
+                },
+                cluster_update_params.ClusterUpdateParams,
+            ),
+            options=make_request_options(
+                extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
+            ),
+            cast_to=GPUBaremetalCluster,
+        )
+
     def list(
         self,
         *,
@@ -1080,86 +1164,6 @@ async def delete(
             cast_to=TaskIDList,
         )
 
-    async def action(
-        self,
-        cluster_id: str,
-        *,
-        project_id: int | None = None,
-        region_id: int | None = None,
-        action: Literal["update_tags"],
-        tags: Optional[TagUpdateMapParam],
-        # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
-        # The extra values given here take precedence over values defined on the client or passed to this method.
-        extra_headers: Headers | None = None,
-        extra_query: Query | None = None,
-        extra_body: Body | None = None,
-        timeout: float | httpx.Timeout | None | NotGiven = not_given,
-    ) -> TaskIDList:
-        """Perform a specific action on a baremetal GPU cluster.
-
-        Available actions: update
-        tags.
-
-        Args:
-          project_id: Project ID
-
-          region_id: Region ID
-
-          cluster_id: Cluster unique identifier
-
-          action: Action name
-
-          tags: Update key-value tags using JSON Merge Patch semantics (RFC 7386). Provide
-              key-value pairs to add or update tags. Set tag values to `null` to remove tags.
-              Unspecified tags remain unchanged. Read-only tags are always preserved and
-              cannot be modified.
-
-              **Examples:**
-
-              - **Add/update tags:**
-                `{'tags': {'environment': 'production', 'team': 'backend'}}` adds new tags or
-                updates existing ones.
-              - **Delete tags:** `{'tags': {'old_tag': null}}` removes specific tags.
-              - **Remove all tags:** `{'tags': null}` removes all user-managed tags (read-only
-                tags are preserved).
-              - **Partial update:** `{'tags': {'environment': 'staging'}}` only updates
-                specified tags.
-              - **Mixed operations:**
-                `{'tags': {'environment': 'production', 'cost_center': 'engineering', 'deprecated_tag': null}}`
-                adds/updates 'environment' and 'cost_center' while removing 'deprecated_tag',
-                preserving other existing tags.
-              - **Replace all:** first delete existing tags with null values, then add new
-                ones in the same request.
-
-          extra_headers: Send extra headers
-
-          extra_query: Add additional query parameters to the request
-
-          extra_body: Add additional JSON properties to the request
-
-          timeout: Override the client-level default timeout for this request, in seconds
-        """
-        if project_id is None:
-            project_id = self._client._get_cloud_project_id_path_param()
-        if region_id is None:
-            region_id = self._client._get_cloud_region_id_path_param()
-        if not cluster_id:
-            raise ValueError(f"Expected a non-empty value for `cluster_id` but received {cluster_id!r}")
-        return await self._post(
-            f"/cloud/v3/gpu/baremetal/{project_id}/{region_id}/clusters/{cluster_id}/action",
-            body=await async_maybe_transform(
-                {
-                    "action": action,
-                    "tags": tags,
-                },
-                cluster_action_params.ClusterActionParams,
-            ),
-            options=make_request_options(
-                extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
-            ),
-            cast_to=TaskIDList,
-        )
-
     async def get(
         self,
         cluster_id: str,
@@ -1608,15 +1612,15 @@ def __init__(self, clusters: ClustersResource) -> None:
         self.create = to_raw_response_wrapper(
             clusters.create,
         )
+        self.update = to_raw_response_wrapper(
+            clusters.update,
+        )
         self.list = to_raw_response_wrapper(
             clusters.list,
         )
         self.delete = to_raw_response_wrapper(
             clusters.delete,
         )
-        self.action = to_raw_response_wrapper(
-            clusters.action,
-        )
         self.get = to_raw_response_wrapper(
             clusters.get,
         )
@@ -1670,15 +1674,15 @@ def __init__(self, clusters: AsyncClustersResource) -> None:
         self.create = async_to_raw_response_wrapper(
             clusters.create,
         )
+        self.update = async_to_raw_response_wrapper(
+            clusters.update,
+        )
         self.list = async_to_raw_response_wrapper(
             clusters.list,
         )
         self.delete = async_to_raw_response_wrapper(
             clusters.delete,
         )
-        self.action = async_to_raw_response_wrapper(
-            clusters.action,
-        )
         self.get = async_to_raw_response_wrapper(
             clusters.get,
         )
@@ -1732,15 +1736,15 @@ def __init__(self, clusters: ClustersResource) -> None:
         self.create = to_streamed_response_wrapper(
             clusters.create,
         )
+        self.update = to_streamed_response_wrapper(
+            clusters.update,
+        )
         self.list = to_streamed_response_wrapper(
             clusters.list,
         )
         self.delete = to_streamed_response_wrapper(
             clusters.delete,
         )
-        self.action = to_streamed_response_wrapper(
-            clusters.action,
-        )
         self.get = to_streamed_response_wrapper(
             clusters.get,
         )
@@ -1794,15 +1798,15 @@ def __init__(self, clusters: AsyncClustersResource) -> None:
         self.create = async_to_streamed_response_wrapper(
             clusters.create,
         )
+        self.update = async_to_streamed_response_wrapper(
+            clusters.update,
+        )
         self.list = async_to_streamed_response_wrapper(
             clusters.list,
         )
         self.delete = async_to_streamed_response_wrapper(
             clusters.delete,
         )
-        self.action = async_to_streamed_response_wrapper(
-            clusters.action,
-        )
         self.get = async_to_streamed_response_wrapper(
             clusters.get,
         )
diff --git a/src/gcore/resources/cloud/gpu_virtual/clusters/clusters.py b/src/gcore/resources/cloud/gpu_virtual/clusters/clusters.py
index f141c5b6..0cd97264 100644
--- a/src/gcore/resources/cloud/gpu_virtual/clusters/clusters.py
+++ b/src/gcore/resources/cloud/gpu_virtual/clusters/clusters.py
@@ -194,7 +194,8 @@ def update(
         *,
         project_id: int | None = None,
         region_id: int | None = None,
-        name: str,
+        name: str | Omit = omit,
+        tags: Optional[TagUpdateMapParam] | Omit = omit,
         # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
         # The extra values given here take precedence over values defined on the client or passed to this method.
         extra_headers: Headers | None = None,
@@ -205,6 +206,10 @@ def update(
         """
         Update the name of an existing virtual GPU cluster.
 
+        Update tags for a virtual GPU cluster (and apply to all its nodes) using JSON
+        Merge Patch semantics (RFC 7386). To add or update tags, provide key-value
+        pairs. To remove a tag, set its value to null.
+
         Args:
           project_id: Project ID
 
@@ -214,6 +219,28 @@ def update(
 
           name: Cluster name
 
+          tags: Update key-value tags using JSON Merge Patch semantics (RFC 7386). Provide
+              key-value pairs to add or update tags. Set tag values to `null` to remove tags.
+              Unspecified tags remain unchanged. Read-only tags are always preserved and
+              cannot be modified.
+
+              **Examples:**
+
+              - **Add/update tags:**
+                `{'tags': {'environment': 'production', 'team': 'backend'}}` adds new tags or
+                updates existing ones.
+              - **Delete tags:** `{'tags': {'old_tag': null}}` removes specific tags.
+              - **Remove all tags:** `{'tags': null}` removes all user-managed tags (read-only
+                tags are preserved).
+              - **Partial update:** `{'tags': {'environment': 'staging'}}` only updates
+                specified tags.
+              - **Mixed operations:**
+                `{'tags': {'environment': 'production', 'cost_center': 'engineering', 'deprecated_tag': null}}`
+                adds/updates 'environment' and 'cost_center' while removing 'deprecated_tag',
+                preserving other existing tags.
+              - **Replace all:** first delete existing tags with null values, then add new
+                ones in the same request.
+
           extra_headers: Send extra headers
 
           extra_query: Add additional query parameters to the request
@@ -230,7 +257,13 @@ def update(
             raise ValueError(f"Expected a non-empty value for `cluster_id` but received {cluster_id!r}")
         return self._patch(
             f"/cloud/v3/gpu/virtual/{project_id}/{region_id}/clusters/{cluster_id}",
-            body=maybe_transform({"name": name}, cluster_update_params.ClusterUpdateParams),
+            body=maybe_transform(
+                {
+                    "name": name,
+                    "tags": tags,
+                },
+                cluster_update_params.ClusterUpdateParams,
+            ),
             options=make_request_options(
                 extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
             ),
@@ -391,7 +424,7 @@ def action(
         """Perform a specific action on a virtual GPU cluster.
 
         Available actions: start,
-        stop, soft reboot, hard reboot, resize, update tags.
+        stop, soft reboot, hard reboot, resize
 
         Args:
           project_id: Project ID
@@ -430,7 +463,7 @@ def action(
         """Perform a specific action on a virtual GPU cluster.
 
         Available actions: start,
-        stop, soft reboot, hard reboot, resize, update tags.
+        stop, soft reboot, hard reboot, resize
 
         Args:
           project_id: Project ID
@@ -469,7 +502,7 @@ def action(
         """Perform a specific action on a virtual GPU cluster.
 
         Available actions: start,
-        stop, soft reboot, hard reboot, resize, update tags.
+        stop, soft reboot, hard reboot, resize
 
         Args:
           project_id: Project ID
@@ -508,47 +541,7 @@ def action(
         """Perform a specific action on a virtual GPU cluster.
 
         Available actions: start,
-        stop, soft reboot, hard reboot, resize, update tags.
-
-        Args:
-          project_id: Project ID
-
-          region_id: Region ID
-
-          cluster_id: Cluster unique identifier
-
-          action: Action name
-
-          extra_headers: Send extra headers
-
-          extra_query: Add additional query parameters to the request
-
-          extra_body: Add additional JSON properties to the request
-
-          timeout: Override the client-level default timeout for this request, in seconds
-        """
-        ...
-
-    @overload
-    def action(
-        self,
-        cluster_id: str,
-        *,
-        project_id: int | None = None,
-        region_id: int | None = None,
-        action: Literal["update_tags"],
-        tags: Optional[TagUpdateMapParam],
-        # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
-        # The extra values given here take precedence over values defined on the client or passed to this method.
-        extra_headers: Headers | None = None,
-        extra_query: Query | None = None,
-        extra_body: Body | None = None,
-        timeout: float | httpx.Timeout | None | NotGiven = not_given,
-    ) -> TaskIDList:
-        """Perform a specific action on a virtual GPU cluster.
-
-        Available actions: start,
-        stop, soft reboot, hard reboot, resize, update tags.
+        stop, soft reboot, hard reboot, resize
 
         Args:
           project_id: Project ID
@@ -559,28 +552,6 @@ def action(
 
           action: Action name
 
-          tags: Update key-value tags using JSON Merge Patch semantics (RFC 7386). Provide
-              key-value pairs to add or update tags. Set tag values to `null` to remove tags.
-              Unspecified tags remain unchanged. Read-only tags are always preserved and
-              cannot be modified.
-
-              **Examples:**
-
-              - **Add/update tags:**
-                `{'tags': {'environment': 'production', 'team': 'backend'}}` adds new tags or
-                updates existing ones.
-              - **Delete tags:** `{'tags': {'old_tag': null}}` removes specific tags.
-              - **Remove all tags:** `{'tags': null}` removes all user-managed tags (read-only
-                tags are preserved).
-              - **Partial update:** `{'tags': {'environment': 'staging'}}` only updates
-                specified tags.
-              - **Mixed operations:**
-                `{'tags': {'environment': 'production', 'cost_center': 'engineering', 'deprecated_tag': null}}`
-                adds/updates 'environment' and 'cost_center' while removing 'deprecated_tag',
-                preserving other existing tags.
-              - **Replace all:** first delete existing tags with null values, then add new
-                ones in the same request.
-
           extra_headers: Send extra headers
 
           extra_query: Add additional query parameters to the request
@@ -610,7 +581,7 @@ def action(
         """Perform a specific action on a virtual GPU cluster.
 
         Available actions: start,
-        stop, soft reboot, hard reboot, resize, update tags.
+        stop, soft reboot, hard reboot, resize
 
         Args:
           project_id: Project ID
@@ -633,7 +604,7 @@ def action(
         """
         ...
 
-    @required_args(["action"], ["action", "tags"], ["action", "servers_count"])
+    @required_args(["action"], ["action", "servers_count"])
     def action(
         self,
         cluster_id: str,
@@ -644,9 +615,7 @@ def action(
         | Literal["stop"]
         | Literal["soft_reboot"]
         | Literal["hard_reboot"]
-        | Literal["update_tags"]
         | Literal["resize"],
-        tags: Optional[TagUpdateMapParam] | Omit = omit,
         servers_count: int | Omit = omit,
         # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
         # The extra values given here take precedence over values defined on the client or passed to this method.
@@ -666,7 +635,6 @@ def action(
             body=maybe_transform(
                 {
                     "action": action,
-                    "tags": tags,
                     "servers_count": servers_count,
                 },
                 cluster_action_params.ClusterActionParams,
@@ -844,7 +812,8 @@ async def update(
         *,
         project_id: int | None = None,
         region_id: int | None = None,
-        name: str,
+        name: str | Omit = omit,
+        tags: Optional[TagUpdateMapParam] | Omit = omit,
         # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
         # The extra values given here take precedence over values defined on the client or passed to this method.
         extra_headers: Headers | None = None,
@@ -855,6 +824,10 @@ async def update(
         """
         Update the name of an existing virtual GPU cluster.
 
+        Update tags for a virtual GPU cluster (and apply to all its nodes) using JSON
+        Merge Patch semantics (RFC 7386). To add or update tags, provide key-value
+        pairs. To remove a tag, set its value to null.
+
         Args:
           project_id: Project ID
 
@@ -864,6 +837,28 @@ async def update(
 
           name: Cluster name
 
+          tags: Update key-value tags using JSON Merge Patch semantics (RFC 7386). Provide
+              key-value pairs to add or update tags. Set tag values to `null` to remove tags.
+              Unspecified tags remain unchanged. Read-only tags are always preserved and
+              cannot be modified.
+
+              **Examples:**
+
+              - **Add/update tags:**
+                `{'tags': {'environment': 'production', 'team': 'backend'}}` adds new tags or
+                updates existing ones.
+              - **Delete tags:** `{'tags': {'old_tag': null}}` removes specific tags.
+              - **Remove all tags:** `{'tags': null}` removes all user-managed tags (read-only
+                tags are preserved).
+              - **Partial update:** `{'tags': {'environment': 'staging'}}` only updates
+                specified tags.
+              - **Mixed operations:**
+                `{'tags': {'environment': 'production', 'cost_center': 'engineering', 'deprecated_tag': null}}`
+                adds/updates 'environment' and 'cost_center' while removing 'deprecated_tag',
+                preserving other existing tags.
+              - **Replace all:** first delete existing tags with null values, then add new
+                ones in the same request.
+
           extra_headers: Send extra headers
 
           extra_query: Add additional query parameters to the request
@@ -880,7 +875,13 @@ async def update(
             raise ValueError(f"Expected a non-empty value for `cluster_id` but received {cluster_id!r}")
         return await self._patch(
             f"/cloud/v3/gpu/virtual/{project_id}/{region_id}/clusters/{cluster_id}",
-            body=await async_maybe_transform({"name": name}, cluster_update_params.ClusterUpdateParams),
+            body=await async_maybe_transform(
+                {
+                    "name": name,
+                    "tags": tags,
+                },
+                cluster_update_params.ClusterUpdateParams,
+            ),
             options=make_request_options(
                 extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
             ),
@@ -1041,7 +1042,7 @@ async def action(
         """Perform a specific action on a virtual GPU cluster.
 
         Available actions: start,
-        stop, soft reboot, hard reboot, resize, update tags.
+        stop, soft reboot, hard reboot, resize
 
         Args:
           project_id: Project ID
@@ -1080,7 +1081,7 @@ async def action(
         """Perform a specific action on a virtual GPU cluster.
 
         Available actions: start,
-        stop, soft reboot, hard reboot, resize, update tags.
+        stop, soft reboot, hard reboot, resize
 
         Args:
           project_id: Project ID
@@ -1119,7 +1120,7 @@ async def action(
         """Perform a specific action on a virtual GPU cluster.
 
         Available actions: start,
-        stop, soft reboot, hard reboot, resize, update tags.
+        stop, soft reboot, hard reboot, resize
 
         Args:
           project_id: Project ID
@@ -1158,47 +1159,7 @@ async def action(
         """Perform a specific action on a virtual GPU cluster.
 
         Available actions: start,
-        stop, soft reboot, hard reboot, resize, update tags.
-
-        Args:
-          project_id: Project ID
-
-          region_id: Region ID
-
-          cluster_id: Cluster unique identifier
-
-          action: Action name
-
-          extra_headers: Send extra headers
-
-          extra_query: Add additional query parameters to the request
-
-          extra_body: Add additional JSON properties to the request
-
-          timeout: Override the client-level default timeout for this request, in seconds
-        """
-        ...
-
-    @overload
-    async def action(
-        self,
-        cluster_id: str,
-        *,
-        project_id: int | None = None,
-        region_id: int | None = None,
-        action: Literal["update_tags"],
-        tags: Optional[TagUpdateMapParam],
-        # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
-        # The extra values given here take precedence over values defined on the client or passed to this method.
-        extra_headers: Headers | None = None,
-        extra_query: Query | None = None,
-        extra_body: Body | None = None,
-        timeout: float | httpx.Timeout | None | NotGiven = not_given,
-    ) -> TaskIDList:
-        """Perform a specific action on a virtual GPU cluster.
-
-        Available actions: start,
-        stop, soft reboot, hard reboot, resize, update tags.
+        stop, soft reboot, hard reboot, resize
 
         Args:
           project_id: Project ID
@@ -1209,28 +1170,6 @@ async def action(
 
           action: Action name
 
-          tags: Update key-value tags using JSON Merge Patch semantics (RFC 7386). Provide
-              key-value pairs to add or update tags. Set tag values to `null` to remove tags.
-              Unspecified tags remain unchanged. Read-only tags are always preserved and
-              cannot be modified.
-
-              **Examples:**
-
-              - **Add/update tags:**
-                `{'tags': {'environment': 'production', 'team': 'backend'}}` adds new tags or
-                updates existing ones.
-              - **Delete tags:** `{'tags': {'old_tag': null}}` removes specific tags.
-              - **Remove all tags:** `{'tags': null}` removes all user-managed tags (read-only
-                tags are preserved).
-              - **Partial update:** `{'tags': {'environment': 'staging'}}` only updates
-                specified tags.
-              - **Mixed operations:**
-                `{'tags': {'environment': 'production', 'cost_center': 'engineering', 'deprecated_tag': null}}`
-                adds/updates 'environment' and 'cost_center' while removing 'deprecated_tag',
-                preserving other existing tags.
-              - **Replace all:** first delete existing tags with null values, then add new
-                ones in the same request.
-
           extra_headers: Send extra headers
 
           extra_query: Add additional query parameters to the request
@@ -1260,7 +1199,7 @@ async def action(
         """Perform a specific action on a virtual GPU cluster.
 
         Available actions: start,
-        stop, soft reboot, hard reboot, resize, update tags.
+        stop, soft reboot, hard reboot, resize
 
         Args:
           project_id: Project ID
@@ -1283,7 +1222,7 @@ async def action(
         """
         ...
 
-    @required_args(["action"], ["action", "tags"], ["action", "servers_count"])
+    @required_args(["action"], ["action", "servers_count"])
     async def action(
         self,
         cluster_id: str,
@@ -1294,9 +1233,7 @@ async def action(
         | Literal["stop"]
         | Literal["soft_reboot"]
         | Literal["hard_reboot"]
-        | Literal["update_tags"]
         | Literal["resize"],
-        tags: Optional[TagUpdateMapParam] | Omit = omit,
         servers_count: int | Omit = omit,
         # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
         # The extra values given here take precedence over values defined on the client or passed to this method.
@@ -1316,7 +1253,6 @@ async def action(
             body=await async_maybe_transform(
                 {
                     "action": action,
-                    "tags": tags,
                     "servers_count": servers_count,
                 },
                 cluster_action_params.ClusterActionParams,
diff --git a/src/gcore/resources/cloud/load_balancers/l7_policies/rules.py b/src/gcore/resources/cloud/load_balancers/l7_policies/rules.py
index d6ff597a..822c28c5 100644
--- a/src/gcore/resources/cloud/load_balancers/l7_policies/rules.py
+++ b/src/gcore/resources/cloud/load_balancers/l7_policies/rules.py
@@ -280,7 +280,7 @@ def replace(
         project_id: int | None = None,
         region_id: int | None = None,
         l7policy_id: str,
-        compare_type: Literal["CONTAINS", "ENDS_WITH", "EQUAL_TO", "REGEX", "STARTS_WITH"],
+        compare_type: Literal["CONTAINS", "ENDS_WITH", "EQUAL_TO", "REGEX", "STARTS_WITH"] | Omit = omit,
         invert: bool | Omit = omit,
         key: str | Omit = omit,
         tags: SequenceNotStr[str] | Omit = omit,
@@ -787,7 +787,7 @@ async def replace(
         project_id: int | None = None,
         region_id: int | None = None,
         l7policy_id: str,
-        compare_type: Literal["CONTAINS", "ENDS_WITH", "EQUAL_TO", "REGEX", "STARTS_WITH"],
+        compare_type: Literal["CONTAINS", "ENDS_WITH", "EQUAL_TO", "REGEX", "STARTS_WITH"] | Omit = omit,
         invert: bool | Omit = omit,
         key: str | Omit = omit,
         tags: SequenceNotStr[str] | Omit = omit,
diff --git a/src/gcore/resources/fastedge/api.md b/src/gcore/resources/fastedge/api.md
index 8d835d33..a0214452 100644
--- a/src/gcore/resources/fastedge/api.md
+++ b/src/gcore/resources/fastedge/api.md
@@ -22,9 +22,9 @@ Methods:
 
 - <code title="post /fastedge/v1/template">client.fastedge.templates.<a href="./src/gcore/resources/fastedge/templates.py">create</a>(\*\*<a href="src/gcore/types/fastedge/template_create_params.py">params</a>) -> <a href="./src/gcore/types/fastedge/template_short.py">TemplateShort</a></code>
 - <code title="get /fastedge/v1/template">client.fastedge.templates.<a href="./src/gcore/resources/fastedge/templates.py">list</a>(\*\*<a href="src/gcore/types/fastedge/template_list_params.py">params</a>) -> <a href="./src/gcore/types/fastedge/template_short.py">SyncOffsetPageFastedgeTemplates[TemplateShort]</a></code>
-- <code title="delete /fastedge/v1/template/{id}">client.fastedge.templates.<a href="./src/gcore/resources/fastedge/templates.py">delete</a>(id, \*\*<a href="src/gcore/types/fastedge/template_delete_params.py">params</a>) -> None</code>
-- <code title="get /fastedge/v1/template/{id}">client.fastedge.templates.<a href="./src/gcore/resources/fastedge/templates.py">get</a>(id) -> <a href="./src/gcore/types/fastedge/template.py">Template</a></code>
-- <code title="put /fastedge/v1/template/{id}">client.fastedge.templates.<a href="./src/gcore/resources/fastedge/templates.py">replace</a>(id, \*\*<a href="src/gcore/types/fastedge/template_replace_params.py">params</a>) -> <a href="./src/gcore/types/fastedge/template_short.py">TemplateShort</a></code>
+- <code title="delete /fastedge/v1/template/{template_id}">client.fastedge.templates.<a href="./src/gcore/resources/fastedge/templates.py">delete</a>(template_id, \*\*<a href="src/gcore/types/fastedge/template_delete_params.py">params</a>) -> None</code>
+- <code title="get /fastedge/v1/template/{template_id}">client.fastedge.templates.<a href="./src/gcore/resources/fastedge/templates.py">get</a>(template_id) -> <a href="./src/gcore/types/fastedge/template.py">Template</a></code>
+- <code title="put /fastedge/v1/template/{template_id}">client.fastedge.templates.<a href="./src/gcore/resources/fastedge/templates.py">replace</a>(template_id, \*\*<a href="src/gcore/types/fastedge/template_replace_params.py">params</a>) -> <a href="./src/gcore/types/fastedge/template_short.py">TemplateShort</a></code>
 
 ## Secrets
 
@@ -37,11 +37,11 @@ from gcore.types.fastedge import Secret, SecretShort, SecretCreateResponse, Secr
 Methods:
 
 - <code title="post /fastedge/v1/secrets">client.fastedge.secrets.<a href="./src/gcore/resources/fastedge/secrets.py">create</a>(\*\*<a href="src/gcore/types/fastedge/secret_create_params.py">params</a>) -> <a href="./src/gcore/types/fastedge/secret_create_response.py">SecretCreateResponse</a></code>
-- <code title="patch /fastedge/v1/secrets/{id}">client.fastedge.secrets.<a href="./src/gcore/resources/fastedge/secrets.py">update</a>(id, \*\*<a href="src/gcore/types/fastedge/secret_update_params.py">params</a>) -> <a href="./src/gcore/types/fastedge/secret.py">Secret</a></code>
+- <code title="patch /fastedge/v1/secrets/{secret_id}">client.fastedge.secrets.<a href="./src/gcore/resources/fastedge/secrets.py">update</a>(secret_id, \*\*<a href="src/gcore/types/fastedge/secret_update_params.py">params</a>) -> <a href="./src/gcore/types/fastedge/secret.py">Secret</a></code>
 - <code title="get /fastedge/v1/secrets">client.fastedge.secrets.<a href="./src/gcore/resources/fastedge/secrets.py">list</a>(\*\*<a href="src/gcore/types/fastedge/secret_list_params.py">params</a>) -> <a href="./src/gcore/types/fastedge/secret_list_response.py">SecretListResponse</a></code>
-- <code title="delete /fastedge/v1/secrets/{id}">client.fastedge.secrets.<a href="./src/gcore/resources/fastedge/secrets.py">delete</a>(id, \*\*<a href="src/gcore/types/fastedge/secret_delete_params.py">params</a>) -> None</code>
-- <code title="get /fastedge/v1/secrets/{id}">client.fastedge.secrets.<a href="./src/gcore/resources/fastedge/secrets.py">get</a>(id) -> <a href="./src/gcore/types/fastedge/secret.py">Secret</a></code>
-- <code title="put /fastedge/v1/secrets/{id}">client.fastedge.secrets.<a href="./src/gcore/resources/fastedge/secrets.py">replace</a>(id, \*\*<a href="src/gcore/types/fastedge/secret_replace_params.py">params</a>) -> <a href="./src/gcore/types/fastedge/secret.py">Secret</a></code>
+- <code title="delete /fastedge/v1/secrets/{secret_id}">client.fastedge.secrets.<a href="./src/gcore/resources/fastedge/secrets.py">delete</a>(secret_id, \*\*<a href="src/gcore/types/fastedge/secret_delete_params.py">params</a>) -> None</code>
+- <code title="get /fastedge/v1/secrets/{secret_id}">client.fastedge.secrets.<a href="./src/gcore/resources/fastedge/secrets.py">get</a>(secret_id) -> <a href="./src/gcore/types/fastedge/secret.py">Secret</a></code>
+- <code title="put /fastedge/v1/secrets/{secret_id}">client.fastedge.secrets.<a href="./src/gcore/resources/fastedge/secrets.py">replace</a>(secret_id, \*\*<a href="src/gcore/types/fastedge/secret_replace_params.py">params</a>) -> <a href="./src/gcore/types/fastedge/secret.py">Secret</a></code>
 
 ## Binaries
 
@@ -55,8 +55,8 @@ Methods:
 
 - <code title="post /fastedge/v1/binaries/raw">client.fastedge.binaries.<a href="./src/gcore/resources/fastedge/binaries.py">create</a>(body, \*\*<a href="src/gcore/types/fastedge/binary_create_params.py">params</a>) -> <a href="./src/gcore/types/fastedge/binary_short.py">BinaryShort</a></code>
 - <code title="get /fastedge/v1/binaries">client.fastedge.binaries.<a href="./src/gcore/resources/fastedge/binaries.py">list</a>() -> <a href="./src/gcore/types/fastedge/binary_list_response.py">BinaryListResponse</a></code>
-- <code title="delete /fastedge/v1/binaries/{id}">client.fastedge.binaries.<a href="./src/gcore/resources/fastedge/binaries.py">delete</a>(id) -> None</code>
-- <code title="get /fastedge/v1/binaries/{id}">client.fastedge.binaries.<a href="./src/gcore/resources/fastedge/binaries.py">get</a>(id) -> <a href="./src/gcore/types/fastedge/binary.py">Binary</a></code>
+- <code title="delete /fastedge/v1/binaries/{binary_id}">client.fastedge.binaries.<a href="./src/gcore/resources/fastedge/binaries.py">delete</a>(binary_id) -> None</code>
+- <code title="get /fastedge/v1/binaries/{binary_id}">client.fastedge.binaries.<a href="./src/gcore/resources/fastedge/binaries.py">get</a>(binary_id) -> <a href="./src/gcore/types/fastedge/binary.py">Binary</a></code>
 
 ## Statistics
 
@@ -87,11 +87,11 @@ from gcore.types.fastedge import App, AppShort
 Methods:
 
 - <code title="post /fastedge/v1/apps">client.fastedge.apps.<a href="./src/gcore/resources/fastedge/apps/apps.py">create</a>(\*\*<a href="src/gcore/types/fastedge/app_create_params.py">params</a>) -> <a href="./src/gcore/types/fastedge/app_short.py">AppShort</a></code>
-- <code title="patch /fastedge/v1/apps/{id}">client.fastedge.apps.<a href="./src/gcore/resources/fastedge/apps/apps.py">update</a>(id, \*\*<a href="src/gcore/types/fastedge/app_update_params.py">params</a>) -> <a href="./src/gcore/types/fastedge/app_short.py">AppShort</a></code>
+- <code title="patch /fastedge/v1/apps/{app_id}">client.fastedge.apps.<a href="./src/gcore/resources/fastedge/apps/apps.py">update</a>(app_id, \*\*<a href="src/gcore/types/fastedge/app_update_params.py">params</a>) -> <a href="./src/gcore/types/fastedge/app_short.py">AppShort</a></code>
 - <code title="get /fastedge/v1/apps">client.fastedge.apps.<a href="./src/gcore/resources/fastedge/apps/apps.py">list</a>(\*\*<a href="src/gcore/types/fastedge/app_list_params.py">params</a>) -> <a href="./src/gcore/types/fastedge/app_short.py">SyncOffsetPageFastedgeApps[AppShort]</a></code>
-- <code title="delete /fastedge/v1/apps/{id}">client.fastedge.apps.<a href="./src/gcore/resources/fastedge/apps/apps.py">delete</a>(id) -> None</code>
-- <code title="get /fastedge/v1/apps/{id}">client.fastedge.apps.<a href="./src/gcore/resources/fastedge/apps/apps.py">get</a>(id) -> <a href="./src/gcore/types/fastedge/app.py">App</a></code>
-- <code title="put /fastedge/v1/apps/{id}">client.fastedge.apps.<a href="./src/gcore/resources/fastedge/apps/apps.py">replace</a>(id, \*\*<a href="src/gcore/types/fastedge/app_replace_params.py">params</a>) -> <a href="./src/gcore/types/fastedge/app_short.py">AppShort</a></code>
+- <code title="delete /fastedge/v1/apps/{app_id}">client.fastedge.apps.<a href="./src/gcore/resources/fastedge/apps/apps.py">delete</a>(app_id) -> None</code>
+- <code title="get /fastedge/v1/apps/{app_id}">client.fastedge.apps.<a href="./src/gcore/resources/fastedge/apps/apps.py">get</a>(app_id) -> <a href="./src/gcore/types/fastedge/app.py">App</a></code>
+- <code title="put /fastedge/v1/apps/{app_id}">client.fastedge.apps.<a href="./src/gcore/resources/fastedge/apps/apps.py">replace</a>(app_id, \*\*<a href="src/gcore/types/fastedge/app_replace_params.py">params</a>) -> <a href="./src/gcore/types/fastedge/app_short.py">AppShort</a></code>
 
 ### Logs
 
@@ -103,7 +103,7 @@ from gcore.types.fastedge.apps import Log
 
 Methods:
 
-- <code title="get /fastedge/v1/apps/{id}/logs">client.fastedge.apps.logs.<a href="./src/gcore/resources/fastedge/apps/logs.py">list</a>(id, \*\*<a href="src/gcore/types/fastedge/apps/log_list_params.py">params</a>) -> <a href="./src/gcore/types/fastedge/apps/log.py">SyncOffsetPageFastedgeAppLogs[Log]</a></code>
+- <code title="get /fastedge/v1/apps/{app_id}/logs">client.fastedge.apps.logs.<a href="./src/gcore/resources/fastedge/apps/logs.py">list</a>(app_id, \*\*<a href="src/gcore/types/fastedge/apps/log_list_params.py">params</a>) -> <a href="./src/gcore/types/fastedge/apps/log.py">SyncOffsetPageFastedgeAppLogs[Log]</a></code>
 
 ## KvStores
 
@@ -117,6 +117,6 @@ Methods:
 
 - <code title="post /fastedge/v1/kv">client.fastedge.kv_stores.<a href="./src/gcore/resources/fastedge/kv_stores.py">create</a>(\*\*<a href="src/gcore/types/fastedge/kv_store_create_params.py">params</a>) -> <a href="./src/gcore/types/fastedge/kv_store_create_response.py">KvStoreCreateResponse</a></code>
 - <code title="get /fastedge/v1/kv">client.fastedge.kv_stores.<a href="./src/gcore/resources/fastedge/kv_stores.py">list</a>(\*\*<a href="src/gcore/types/fastedge/kv_store_list_params.py">params</a>) -> <a href="./src/gcore/types/fastedge/kv_store_list_response.py">KvStoreListResponse</a></code>
-- <code title="delete /fastedge/v1/kv/{id}">client.fastedge.kv_stores.<a href="./src/gcore/resources/fastedge/kv_stores.py">delete</a>(id) -> None</code>
-- <code title="get /fastedge/v1/kv/{id}">client.fastedge.kv_stores.<a href="./src/gcore/resources/fastedge/kv_stores.py">get</a>(id) -> <a href="./src/gcore/types/fastedge/kv_store.py">KvStore</a></code>
-- <code title="put /fastedge/v1/kv/{id}">client.fastedge.kv_stores.<a href="./src/gcore/resources/fastedge/kv_stores.py">replace</a>(id, \*\*<a href="src/gcore/types/fastedge/kv_store_replace_params.py">params</a>) -> <a href="./src/gcore/types/fastedge/kv_store.py">KvStore</a></code>
+- <code title="delete /fastedge/v1/kv/{store_id}">client.fastedge.kv_stores.<a href="./src/gcore/resources/fastedge/kv_stores.py">delete</a>(store_id) -> None</code>
+- <code title="get /fastedge/v1/kv/{store_id}">client.fastedge.kv_stores.<a href="./src/gcore/resources/fastedge/kv_stores.py">get</a>(store_id) -> <a href="./src/gcore/types/fastedge/kv_store.py">KvStore</a></code>
+- <code title="put /fastedge/v1/kv/{store_id}">client.fastedge.kv_stores.<a href="./src/gcore/resources/fastedge/kv_stores.py">replace</a>(store_id, \*\*<a href="src/gcore/types/fastedge/kv_store_replace_params.py">params</a>) -> <a href="./src/gcore/types/fastedge/kv_store.py">KvStore</a></code>
diff --git a/src/gcore/resources/fastedge/apps/apps.py b/src/gcore/resources/fastedge/apps/apps.py
index a4da2906..c69b0cc2 100644
--- a/src/gcore/resources/fastedge/apps/apps.py
+++ b/src/gcore/resources/fastedge/apps/apps.py
@@ -86,21 +86,26 @@ def create(
         extra_body: Body | None = None,
         timeout: float | httpx.Timeout | None | NotGiven = not_given,
     ) -> AppShort:
-        """
-        Add a new app
+        """Create a new edge application from a WebAssembly binary.
+
+        The app is configured
+        with execution limits, environment variables, and network assignments. Apps
+        start in draft status (0) and must be explicitly enabled to receive traffic.
 
         Args:
-          binary: Binary ID
+          binary: ID of the WebAssembly binary to deploy
 
-          comment: App description
+          comment: Optional human-readable description of the application's purpose
 
-          debug: Switch on logging for 30 minutes (switched off by default)
+          debug: Enable verbose debug logging for 30 minutes. Automatically expires to prevent
+              performance impact.
 
           env: Environment variables
 
-          log: Logging channel (by default - kafka, which allows exploring logs with API)
+          log: Logging channel. Use 'kafka' to enable log collection (queryable via API), or
+              'none' to disable logging.
 
-          name: App name
+          name: Unique application name (alphanumeric, hyphens allowed)
 
           rsp_headers: Extra headers to add to the response
 
@@ -111,8 +116,6 @@ def create(
               0 - draft (inactive)
               1 - enabled
               2 - disabled
-              3 - hourly call limit exceeded
-              4 - daily call limit exceeded
               5 - suspended
 
           stores: Application edge stores
@@ -153,7 +156,7 @@ def create(
 
     def update(
         self,
-        id: int,
+        app_id: int,
         *,
         binary: int | Omit = omit,
         comment: str | Omit = omit,
@@ -173,21 +176,25 @@ def update(
         extra_body: Body | None = None,
         timeout: float | httpx.Timeout | None | NotGiven = not_given,
     ) -> AppShort:
-        """
-        Update app
+        """Partially update an application's configuration.
+
+        Only the fields provided in the
+        request body will be modified; others remain unchanged.
 
         Args:
-          binary: Binary ID
+          binary: ID of the WebAssembly binary to deploy
 
-          comment: App description
+          comment: Optional human-readable description of the application's purpose
 
-          debug: Switch on logging for 30 minutes (switched off by default)
+          debug: Enable verbose debug logging for 30 minutes. Automatically expires to prevent
+              performance impact.
 
           env: Environment variables
 
-          log: Logging channel (by default - kafka, which allows exploring logs with API)
+          log: Logging channel. Use 'kafka' to enable log collection (queryable via API), or
+              'none' to disable logging.
 
-          name: App name
+          name: Unique application name (alphanumeric, hyphens allowed)
 
           rsp_headers: Extra headers to add to the response
 
@@ -198,8 +205,6 @@ def update(
               0 - draft (inactive)
               1 - enabled
               2 - disabled
-              3 - hourly call limit exceeded
-              4 - daily call limit exceeded
               5 - suspended
 
           stores: Application edge stores
@@ -215,7 +220,7 @@ def update(
           timeout: Override the client-level default timeout for this request, in seconds
         """
         return self._patch(
-            f"/fastedge/v1/apps/{id}",
+            f"/fastedge/v1/apps/{app_id}",
             body=maybe_transform(
                 {
                     "binary": binary,
@@ -272,7 +277,9 @@ def list(
         timeout: float | httpx.Timeout | None | NotGiven = not_given,
     ) -> SyncOffsetPageFastedgeApps[AppShort]:
         """
-        List client's apps
+        Retrieve a paginated list of applications owned by the authenticated client.
+        Results can be filtered by name, API type, status, template, binary, or plan,
+        and sorted by various fields.
 
         Args:
           api_type:
@@ -280,17 +287,17 @@ def list(
               wasi-http - WASI with HTTP entry point
               proxy-wasm - Proxy-Wasm app, callable from CDN
 
-          binary: Binary ID
+          binary: Filter by binary ID (shows apps using this binary)
 
-          limit: Limit for pagination
+          limit: Maximum number of results to return
 
-          name: Name of the app
+          name: Filter by application name (case-insensitive partial match)
 
-          offset: Offset for pagination
+          offset: Number of results to skip for pagination
 
-          ordering: Ordering
+          ordering: Sort order. Use - prefix for descending (e.g., -name sorts by name descending)
 
-          plan: Plan ID
+          plan: Filter by plan ID
 
           status:
               Status code:
@@ -301,7 +308,7 @@ def list(
               4 - daily call limit exceeded
               5 - suspended
 
-          template: Template ID
+          template: Filter by template ID (shows apps created from this template)
 
           extra_headers: Send extra headers
 
@@ -339,7 +346,7 @@ def list(
 
     def delete(
         self,
-        id: int,
+        app_id: int,
         *,
         # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
         # The extra values given here take precedence over values defined on the client or passed to this method.
@@ -348,8 +355,10 @@ def delete(
         extra_body: Body | None = None,
         timeout: float | httpx.Timeout | None | NotGiven = not_given,
     ) -> None:
-        """
-        Delete app
+        """Permanently delete an application and remove it from all edge networks.
+
+        This
+        action cannot be undone. The associated binary is not deleted and can be reused.
 
         Args:
           extra_headers: Send extra headers
@@ -362,7 +371,7 @@ def delete(
         """
         extra_headers = {"Accept": "*/*", **(extra_headers or {})}
         return self._delete(
-            f"/fastedge/v1/apps/{id}",
+            f"/fastedge/v1/apps/{app_id}",
             options=make_request_options(
                 extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
             ),
@@ -371,7 +380,7 @@ def delete(
 
     def get(
         self,
-        id: int,
+        app_id: int,
         *,
         # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
         # The extra values given here take precedence over values defined on the client or passed to this method.
@@ -381,7 +390,9 @@ def get(
         timeout: float | httpx.Timeout | None | NotGiven = not_given,
     ) -> App:
         """
-        Get app details
+        Retrieve complete configuration and metadata for a specific application.
+        Includes binary reference, plan limits, environment variables, and current
+        status.
 
         Args:
           extra_headers: Send extra headers
@@ -393,7 +404,7 @@ def get(
           timeout: Override the client-level default timeout for this request, in seconds
         """
         return self._get(
-            f"/fastedge/v1/apps/{id}",
+            f"/fastedge/v1/apps/{app_id}",
             options=make_request_options(
                 extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
             ),
@@ -402,7 +413,7 @@ def get(
 
     def replace(
         self,
-        id: int,
+        app_id: int,
         *,
         body: app_replace_params.Body | Omit = omit,
         # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
@@ -412,8 +423,10 @@ def replace(
         extra_body: Body | None = None,
         timeout: float | httpx.Timeout | None | NotGiven = not_given,
     ) -> AppShort:
-        """
-        Update an app
+        """Replace the complete configuration of an existing application.
+
+        All fields must
+        be provided - use PATCH for partial updates.
 
         Args:
           extra_headers: Send extra headers
@@ -425,7 +438,7 @@ def replace(
           timeout: Override the client-level default timeout for this request, in seconds
         """
         return self._put(
-            f"/fastedge/v1/apps/{id}",
+            f"/fastedge/v1/apps/{app_id}",
             body=maybe_transform(body, app_replace_params.AppReplaceParams),
             options=make_request_options(
                 extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
@@ -486,21 +499,26 @@ async def create(
         extra_body: Body | None = None,
         timeout: float | httpx.Timeout | None | NotGiven = not_given,
     ) -> AppShort:
-        """
-        Add a new app
+        """Create a new edge application from a WebAssembly binary.
+
+        The app is configured
+        with execution limits, environment variables, and network assignments. Apps
+        start in draft status (0) and must be explicitly enabled to receive traffic.
 
         Args:
-          binary: Binary ID
+          binary: ID of the WebAssembly binary to deploy
 
-          comment: App description
+          comment: Optional human-readable description of the application's purpose
 
-          debug: Switch on logging for 30 minutes (switched off by default)
+          debug: Enable verbose debug logging for 30 minutes. Automatically expires to prevent
+              performance impact.
 
           env: Environment variables
 
-          log: Logging channel (by default - kafka, which allows exploring logs with API)
+          log: Logging channel. Use 'kafka' to enable log collection (queryable via API), or
+              'none' to disable logging.
 
-          name: App name
+          name: Unique application name (alphanumeric, hyphens allowed)
 
           rsp_headers: Extra headers to add to the response
 
@@ -511,8 +529,6 @@ async def create(
               0 - draft (inactive)
               1 - enabled
               2 - disabled
-              3 - hourly call limit exceeded
-              4 - daily call limit exceeded
               5 - suspended
 
           stores: Application edge stores
@@ -553,7 +569,7 @@ async def create(
 
     async def update(
         self,
-        id: int,
+        app_id: int,
         *,
         binary: int | Omit = omit,
         comment: str | Omit = omit,
@@ -573,21 +589,25 @@ async def update(
         extra_body: Body | None = None,
         timeout: float | httpx.Timeout | None | NotGiven = not_given,
     ) -> AppShort:
-        """
-        Update app
+        """Partially update an application's configuration.
+
+        Only the fields provided in the
+        request body will be modified; others remain unchanged.
 
         Args:
-          binary: Binary ID
+          binary: ID of the WebAssembly binary to deploy
 
-          comment: App description
+          comment: Optional human-readable description of the application's purpose
 
-          debug: Switch on logging for 30 minutes (switched off by default)
+          debug: Enable verbose debug logging for 30 minutes. Automatically expires to prevent
+              performance impact.
 
           env: Environment variables
 
-          log: Logging channel (by default - kafka, which allows exploring logs with API)
+          log: Logging channel. Use 'kafka' to enable log collection (queryable via API), or
+              'none' to disable logging.
 
-          name: App name
+          name: Unique application name (alphanumeric, hyphens allowed)
 
           rsp_headers: Extra headers to add to the response
 
@@ -598,8 +618,6 @@ async def update(
               0 - draft (inactive)
               1 - enabled
               2 - disabled
-              3 - hourly call limit exceeded
-              4 - daily call limit exceeded
               5 - suspended
 
           stores: Application edge stores
@@ -615,7 +633,7 @@ async def update(
           timeout: Override the client-level default timeout for this request, in seconds
         """
         return await self._patch(
-            f"/fastedge/v1/apps/{id}",
+            f"/fastedge/v1/apps/{app_id}",
             body=await async_maybe_transform(
                 {
                     "binary": binary,
@@ -672,7 +690,9 @@ def list(
         timeout: float | httpx.Timeout | None | NotGiven = not_given,
     ) -> AsyncPaginator[AppShort, AsyncOffsetPageFastedgeApps[AppShort]]:
         """
-        List client's apps
+        Retrieve a paginated list of applications owned by the authenticated client.
+        Results can be filtered by name, API type, status, template, binary, or plan,
+        and sorted by various fields.
 
         Args:
           api_type:
@@ -680,17 +700,17 @@ def list(
               wasi-http - WASI with HTTP entry point
               proxy-wasm - Proxy-Wasm app, callable from CDN
 
-          binary: Binary ID
+          binary: Filter by binary ID (shows apps using this binary)
 
-          limit: Limit for pagination
+          limit: Maximum number of results to return
 
-          name: Name of the app
+          name: Filter by application name (case-insensitive partial match)
 
-          offset: Offset for pagination
+          offset: Number of results to skip for pagination
 
-          ordering: Ordering
+          ordering: Sort order. Use - prefix for descending (e.g., -name sorts by name descending)
 
-          plan: Plan ID
+          plan: Filter by plan ID
 
           status:
               Status code:
@@ -701,7 +721,7 @@ def list(
               4 - daily call limit exceeded
               5 - suspended
 
-          template: Template ID
+          template: Filter by template ID (shows apps created from this template)
 
           extra_headers: Send extra headers
 
@@ -739,7 +759,7 @@ def list(
 
     async def delete(
         self,
-        id: int,
+        app_id: int,
         *,
         # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
         # The extra values given here take precedence over values defined on the client or passed to this method.
@@ -748,8 +768,10 @@ async def delete(
         extra_body: Body | None = None,
         timeout: float | httpx.Timeout | None | NotGiven = not_given,
     ) -> None:
-        """
-        Delete app
+        """Permanently delete an application and remove it from all edge networks.
+
+        This
+        action cannot be undone. The associated binary is not deleted and can be reused.
 
         Args:
           extra_headers: Send extra headers
@@ -762,7 +784,7 @@ async def delete(
         """
         extra_headers = {"Accept": "*/*", **(extra_headers or {})}
         return await self._delete(
-            f"/fastedge/v1/apps/{id}",
+            f"/fastedge/v1/apps/{app_id}",
             options=make_request_options(
                 extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
             ),
@@ -771,7 +793,7 @@ async def delete(
 
     async def get(
         self,
-        id: int,
+        app_id: int,
         *,
         # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
         # The extra values given here take precedence over values defined on the client or passed to this method.
@@ -781,7 +803,9 @@ async def get(
         timeout: float | httpx.Timeout | None | NotGiven = not_given,
     ) -> App:
         """
-        Get app details
+        Retrieve complete configuration and metadata for a specific application.
+        Includes binary reference, plan limits, environment variables, and current
+        status.
 
         Args:
           extra_headers: Send extra headers
@@ -793,7 +817,7 @@ async def get(
           timeout: Override the client-level default timeout for this request, in seconds
         """
         return await self._get(
-            f"/fastedge/v1/apps/{id}",
+            f"/fastedge/v1/apps/{app_id}",
             options=make_request_options(
                 extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
             ),
@@ -802,7 +826,7 @@ async def get(
 
     async def replace(
         self,
-        id: int,
+        app_id: int,
         *,
         body: app_replace_params.Body | Omit = omit,
         # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
@@ -812,8 +836,10 @@ async def replace(
         extra_body: Body | None = None,
         timeout: float | httpx.Timeout | None | NotGiven = not_given,
     ) -> AppShort:
-        """
-        Update an app
+        """Replace the complete configuration of an existing application.
+
+        All fields must
+        be provided - use PATCH for partial updates.
 
         Args:
           extra_headers: Send extra headers
@@ -825,7 +851,7 @@ async def replace(
           timeout: Override the client-level default timeout for this request, in seconds
         """
         return await self._put(
-            f"/fastedge/v1/apps/{id}",
+            f"/fastedge/v1/apps/{app_id}",
             body=await async_maybe_transform(body, app_replace_params.AppReplaceParams),
             options=make_request_options(
                 extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
diff --git a/src/gcore/resources/fastedge/apps/logs.py b/src/gcore/resources/fastedge/apps/logs.py
index 5d88a402..a5670a04 100644
--- a/src/gcore/resources/fastedge/apps/logs.py
+++ b/src/gcore/resources/fastedge/apps/logs.py
@@ -52,7 +52,7 @@ def with_streaming_response(self) -> LogsResourceWithStreamingResponse:
 
     def list(
         self,
-        id: int,
+        app_id: int,
         *,
         client_ip: str | Omit = omit,
         edge: str | Omit = omit,
@@ -77,7 +77,8 @@ def list(
 
           edge: Edge name
 
-          from_: Reporting period start time, RFC3339 format. Default 1 hour ago.
+          from_: Start of log retrieval period in RFC3339 format. Defaults to 1 hour ago if not
+              specified.
 
           limit: Limit for pagination
 
@@ -98,7 +99,7 @@ def list(
           timeout: Override the client-level default timeout for this request, in seconds
         """
         return self._get_api_list(
-            f"/fastedge/v1/apps/{id}/logs",
+            f"/fastedge/v1/apps/{app_id}/logs",
             page=SyncOffsetPageFastedgeAppLogs[Log],
             options=make_request_options(
                 extra_headers=extra_headers,
@@ -149,7 +150,7 @@ def with_streaming_response(self) -> AsyncLogsResourceWithStreamingResponse:
 
     def list(
         self,
-        id: int,
+        app_id: int,
         *,
         client_ip: str | Omit = omit,
         edge: str | Omit = omit,
@@ -174,7 +175,8 @@ def list(
 
           edge: Edge name
 
-          from_: Reporting period start time, RFC3339 format. Default 1 hour ago.
+          from_: Start of log retrieval period in RFC3339 format. Defaults to 1 hour ago if not
+              specified.
 
           limit: Limit for pagination
 
@@ -195,7 +197,7 @@ def list(
           timeout: Override the client-level default timeout for this request, in seconds
         """
         return self._get_api_list(
-            f"/fastedge/v1/apps/{id}/logs",
+            f"/fastedge/v1/apps/{app_id}/logs",
             page=AsyncOffsetPageFastedgeAppLogs[Log],
             options=make_request_options(
                 extra_headers=extra_headers,
diff --git a/src/gcore/resources/fastedge/binaries.py b/src/gcore/resources/fastedge/binaries.py
index 62c107af..9d20dca6 100644
--- a/src/gcore/resources/fastedge/binaries.py
+++ b/src/gcore/resources/fastedge/binaries.py
@@ -69,8 +69,11 @@ def create(
         extra_body: Body | None = None,
         timeout: float | httpx.Timeout | None | NotGiven = not_given,
     ) -> BinaryShort:
-        """
-        Store compiled WASM binary
+        """Upload a compiled WebAssembly binary to the edge platform.
+
+        The binary is
+        automatically analyzed to detect its API type (WASI or Proxy-WASM) and stored
+        for use in applications. Maximum binary size is 100MB.
 
         Args:
           extra_headers: Send extra headers
@@ -101,7 +104,12 @@ def list(
         extra_body: Body | None = None,
         timeout: float | httpx.Timeout | None | NotGiven = not_given,
     ) -> BinaryListResponse:
-        """List binaries"""
+        """Retrieve all WebAssembly binaries owned by the authenticated client.
+
+        Binaries
+        can be shared across multiple applications and include both WASI and Proxy-WASM
+        formats.
+        """
         return self._get(
             "/fastedge/v1/binaries",
             options=make_request_options(
@@ -112,7 +120,7 @@ def list(
 
     def delete(
         self,
-        id: int,
+        binary_id: int,
         *,
         # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
         # The extra values given here take precedence over values defined on the client or passed to this method.
@@ -121,8 +129,10 @@ def delete(
         extra_body: Body | None = None,
         timeout: float | httpx.Timeout | None | NotGiven = not_given,
     ) -> None:
-        """
-        Delete a binary
+        """Delete a WebAssembly binary from the platform.
+
+        Note: Binaries currently in use
+        by applications cannot be deleted. Remove all application associations first.
 
         Args:
           extra_headers: Send extra headers
@@ -135,7 +145,7 @@ def delete(
         """
         extra_headers = {"Accept": "*/*", **(extra_headers or {})}
         return self._delete(
-            f"/fastedge/v1/binaries/{id}",
+            f"/fastedge/v1/binaries/{binary_id}",
             options=make_request_options(
                 extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
             ),
@@ -144,7 +154,7 @@ def delete(
 
     def get(
         self,
-        id: int,
+        binary_id: int,
         *,
         # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
         # The extra values given here take precedence over values defined on the client or passed to this method.
@@ -154,7 +164,9 @@ def get(
         timeout: float | httpx.Timeout | None | NotGiven = not_given,
     ) -> Binary:
         """
-        Get binary
+        Retrieve complete information about a specific WebAssembly binary including
+        metadata and compiled content. Use this to download or inspect binaries before
+        using them in applications.
 
         Args:
           extra_headers: Send extra headers
@@ -166,7 +178,7 @@ def get(
           timeout: Override the client-level default timeout for this request, in seconds
         """
         return self._get(
-            f"/fastedge/v1/binaries/{id}",
+            f"/fastedge/v1/binaries/{binary_id}",
             options=make_request_options(
                 extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
             ),
@@ -209,8 +221,11 @@ async def create(
         extra_body: Body | None = None,
         timeout: float | httpx.Timeout | None | NotGiven = not_given,
     ) -> BinaryShort:
-        """
-        Store compiled WASM binary
+        """Upload a compiled WebAssembly binary to the edge platform.
+
+        The binary is
+        automatically analyzed to detect its API type (WASI or Proxy-WASM) and stored
+        for use in applications. Maximum binary size is 100MB.
 
         Args:
           extra_headers: Send extra headers
@@ -241,7 +256,12 @@ async def list(
         extra_body: Body | None = None,
         timeout: float | httpx.Timeout | None | NotGiven = not_given,
     ) -> BinaryListResponse:
-        """List binaries"""
+        """Retrieve all WebAssembly binaries owned by the authenticated client.
+
+        Binaries
+        can be shared across multiple applications and include both WASI and Proxy-WASM
+        formats.
+        """
         return await self._get(
             "/fastedge/v1/binaries",
             options=make_request_options(
@@ -252,7 +272,7 @@ async def list(
 
     async def delete(
         self,
-        id: int,
+        binary_id: int,
         *,
         # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
         # The extra values given here take precedence over values defined on the client or passed to this method.
@@ -261,8 +281,10 @@ async def delete(
         extra_body: Body | None = None,
         timeout: float | httpx.Timeout | None | NotGiven = not_given,
     ) -> None:
-        """
-        Delete a binary
+        """Delete a WebAssembly binary from the platform.
+
+        Note: Binaries currently in use
+        by applications cannot be deleted. Remove all application associations first.
 
         Args:
           extra_headers: Send extra headers
@@ -275,7 +297,7 @@ async def delete(
         """
         extra_headers = {"Accept": "*/*", **(extra_headers or {})}
         return await self._delete(
-            f"/fastedge/v1/binaries/{id}",
+            f"/fastedge/v1/binaries/{binary_id}",
             options=make_request_options(
                 extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
             ),
@@ -284,7 +306,7 @@ async def delete(
 
     async def get(
         self,
-        id: int,
+        binary_id: int,
         *,
         # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
         # The extra values given here take precedence over values defined on the client or passed to this method.
@@ -294,7 +316,9 @@ async def get(
         timeout: float | httpx.Timeout | None | NotGiven = not_given,
     ) -> Binary:
         """
-        Get binary
+        Retrieve complete information about a specific WebAssembly binary including
+        metadata and compiled content. Use this to download or inspect binaries before
+        using them in applications.
 
         Args:
           extra_headers: Send extra headers
@@ -306,7 +330,7 @@ async def get(
           timeout: Override the client-level default timeout for this request, in seconds
         """
         return await self._get(
-            f"/fastedge/v1/binaries/{id}",
+            f"/fastedge/v1/binaries/{binary_id}",
             options=make_request_options(
                 extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
             ),
diff --git a/src/gcore/resources/fastedge/fastedge.py b/src/gcore/resources/fastedge/fastedge.py
index 539366a3..d4bb3ff7 100644
--- a/src/gcore/resources/fastedge/fastedge.py
+++ b/src/gcore/resources/fastedge/fastedge.py
@@ -135,7 +135,10 @@ def get_account_overview(
         extra_body: Body | None = None,
         timeout: float | httpx.Timeout | None | NotGiven = not_given,
     ) -> Client:
-        """Get status and limits for the client"""
+        """
+        Retrieve the authenticated client's account status, resource quotas, and usage
+        limits. Shows current plan, available resources, and any active restrictions.
+        """
         return self._get(
             "/fastedge/v1/me",
             options=make_request_options(
@@ -213,7 +216,10 @@ async def get_account_overview(
         extra_body: Body | None = None,
         timeout: float | httpx.Timeout | None | NotGiven = not_given,
     ) -> Client:
-        """Get status and limits for the client"""
+        """
+        Retrieve the authenticated client's account status, resource quotas, and usage
+        limits. Shows current plan, available resources, and any active restrictions.
+        """
         return await self._get(
             "/fastedge/v1/me",
             options=make_request_options(
diff --git a/src/gcore/resources/fastedge/kv_stores.py b/src/gcore/resources/fastedge/kv_stores.py
index a3ac1abe..daa1bbe0 100644
--- a/src/gcore/resources/fastedge/kv_stores.py
+++ b/src/gcore/resources/fastedge/kv_stores.py
@@ -58,8 +58,10 @@ def create(
         extra_body: Body | None = None,
         timeout: float | httpx.Timeout | None | NotGiven = not_given,
     ) -> KvStoreCreateResponse:
-        """
-        Add a new Edge store
+        """Create a new key-value storage store for edge applications.
+
+        Stores support
+        multiple data types: simple KV, sorted sets, and bloom filters.
 
         Args:
           name: A name of the store
@@ -105,15 +107,17 @@ def list(
         extra_body: Body | None = None,
         timeout: float | httpx.Timeout | None | NotGiven = not_given,
     ) -> KvStoreListResponse:
-        """
-        List available edge stores
+        """Retrieve key-value storage stores available to the authenticated client.
+
+        Stores
+        can contain KV pairs, sorted sets, or bloom filters for edge application data.
 
         Args:
-          app_id: App ID
+          app_id: Filter stores by application ID. Returns only stores associated with this app.
 
-          limit: Limit for pagination
+          limit: Maximum number of stores to return per page
 
-          offset: Offset for pagination
+          offset: Number of stores to skip for pagination
 
           extra_headers: Send extra headers
 
@@ -144,7 +148,7 @@ def list(
 
     def delete(
         self,
-        id: int,
+        store_id: int,
         *,
         # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
         # The extra values given here take precedence over values defined on the client or passed to this method.
@@ -153,8 +157,10 @@ def delete(
         extra_body: Body | None = None,
         timeout: float | httpx.Timeout | None | NotGiven = not_given,
     ) -> None:
-        """
-        Delete a store
+        """Permanently delete an edge storage store and all its data.
+
+        This action cannot be
+        undone; all keys and values will be lost.
 
         Args:
           extra_headers: Send extra headers
@@ -167,7 +173,7 @@ def delete(
         """
         extra_headers = {"Accept": "*/*", **(extra_headers or {})}
         return self._delete(
-            f"/fastedge/v1/kv/{id}",
+            f"/fastedge/v1/kv/{store_id}",
             options=make_request_options(
                 extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
             ),
@@ -176,7 +182,7 @@ def delete(
 
     def get(
         self,
-        id: int,
+        store_id: int,
         *,
         # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
         # The extra values given here take precedence over values defined on the client or passed to this method.
@@ -186,7 +192,8 @@ def get(
         timeout: float | httpx.Timeout | None | NotGiven = not_given,
     ) -> KvStore:
         """
-        Get the edge store by id
+        Retrieve complete configuration and metadata for a specific edge storage store.
+        Includes store type, size limits, and associated applications.
 
         Args:
           extra_headers: Send extra headers
@@ -198,7 +205,7 @@ def get(
           timeout: Override the client-level default timeout for this request, in seconds
         """
         return self._get(
-            f"/fastedge/v1/kv/{id}",
+            f"/fastedge/v1/kv/{store_id}",
             options=make_request_options(
                 extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
             ),
@@ -207,7 +214,7 @@ def get(
 
     def replace(
         self,
-        id: int,
+        store_id: int,
         *,
         name: str,
         byod: kv_store_replace_params.Byod | Omit = omit,
@@ -220,7 +227,8 @@ def replace(
         timeout: float | httpx.Timeout | None | NotGiven = not_given,
     ) -> KvStore:
         """
-        Update a store
+        Modify edge store configuration including name, description, and application
+        associations. Store type cannot be changed after creation.
 
         Args:
           name: A name of the store
@@ -238,7 +246,7 @@ def replace(
           timeout: Override the client-level default timeout for this request, in seconds
         """
         return self._put(
-            f"/fastedge/v1/kv/{id}",
+            f"/fastedge/v1/kv/{store_id}",
             body=maybe_transform(
                 {
                     "name": name,
@@ -289,8 +297,10 @@ async def create(
         extra_body: Body | None = None,
         timeout: float | httpx.Timeout | None | NotGiven = not_given,
     ) -> KvStoreCreateResponse:
-        """
-        Add a new Edge store
+        """Create a new key-value storage store for edge applications.
+
+        Stores support
+        multiple data types: simple KV, sorted sets, and bloom filters.
 
         Args:
           name: A name of the store
@@ -336,15 +346,17 @@ async def list(
         extra_body: Body | None = None,
         timeout: float | httpx.Timeout | None | NotGiven = not_given,
     ) -> KvStoreListResponse:
-        """
-        List available edge stores
+        """Retrieve key-value storage stores available to the authenticated client.
+
+        Stores
+        can contain KV pairs, sorted sets, or bloom filters for edge application data.
 
         Args:
-          app_id: App ID
+          app_id: Filter stores by application ID. Returns only stores associated with this app.
 
-          limit: Limit for pagination
+          limit: Maximum number of stores to return per page
 
-          offset: Offset for pagination
+          offset: Number of stores to skip for pagination
 
           extra_headers: Send extra headers
 
@@ -375,7 +387,7 @@ async def list(
 
     async def delete(
         self,
-        id: int,
+        store_id: int,
         *,
         # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
         # The extra values given here take precedence over values defined on the client or passed to this method.
@@ -384,8 +396,10 @@ async def delete(
         extra_body: Body | None = None,
         timeout: float | httpx.Timeout | None | NotGiven = not_given,
     ) -> None:
-        """
-        Delete a store
+        """Permanently delete an edge storage store and all its data.
+
+        This action cannot be
+        undone; all keys and values will be lost.
 
         Args:
           extra_headers: Send extra headers
@@ -398,7 +412,7 @@ async def delete(
         """
         extra_headers = {"Accept": "*/*", **(extra_headers or {})}
         return await self._delete(
-            f"/fastedge/v1/kv/{id}",
+            f"/fastedge/v1/kv/{store_id}",
             options=make_request_options(
                 extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
             ),
@@ -407,7 +421,7 @@ async def delete(
 
     async def get(
         self,
-        id: int,
+        store_id: int,
         *,
         # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
         # The extra values given here take precedence over values defined on the client or passed to this method.
@@ -417,7 +431,8 @@ async def get(
         timeout: float | httpx.Timeout | None | NotGiven = not_given,
     ) -> KvStore:
         """
-        Get the edge store by id
+        Retrieve complete configuration and metadata for a specific edge storage store.
+        Includes store type, size limits, and associated applications.
 
         Args:
           extra_headers: Send extra headers
@@ -429,7 +444,7 @@ async def get(
           timeout: Override the client-level default timeout for this request, in seconds
         """
         return await self._get(
-            f"/fastedge/v1/kv/{id}",
+            f"/fastedge/v1/kv/{store_id}",
             options=make_request_options(
                 extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
             ),
@@ -438,7 +453,7 @@ async def get(
 
     async def replace(
         self,
-        id: int,
+        store_id: int,
         *,
         name: str,
         byod: kv_store_replace_params.Byod | Omit = omit,
@@ -451,7 +466,8 @@ async def replace(
         timeout: float | httpx.Timeout | None | NotGiven = not_given,
     ) -> KvStore:
         """
-        Update a store
+        Modify edge store configuration including name, description, and application
+        associations. Store type cannot be changed after creation.
 
         Args:
           name: A name of the store
@@ -469,7 +485,7 @@ async def replace(
           timeout: Override the client-level default timeout for this request, in seconds
         """
         return await self._put(
-            f"/fastedge/v1/kv/{id}",
+            f"/fastedge/v1/kv/{store_id}",
             body=await async_maybe_transform(
                 {
                     "name": name,
diff --git a/src/gcore/resources/fastedge/secrets.py b/src/gcore/resources/fastedge/secrets.py
index 5c37ade0..640f3989 100644
--- a/src/gcore/resources/fastedge/secrets.py
+++ b/src/gcore/resources/fastedge/secrets.py
@@ -68,8 +68,10 @@ def create(
         extra_body: Body | None = None,
         timeout: float | httpx.Timeout | None | NotGiven = not_given,
     ) -> SecretCreateResponse:
-        """
-        Add a new secret
+        """Create a new encrypted secret for use in edge applications.
+
+        Secrets are
+        encrypted with AES-256-GCM and can have multiple time-based slots for rotation.
 
         Args:
           name: The unique name of the secret.
@@ -104,7 +106,7 @@ def create(
 
     def update(
         self,
-        id: int,
+        secret_id: int,
         *,
         comment: str | Omit = omit,
         name: str | Omit = omit,
@@ -117,7 +119,7 @@ def update(
         timeout: float | httpx.Timeout | None | NotGiven = not_given,
     ) -> Secret:
         """
-        Update a secret
+        Partially updates secret metadata and/or modifies specific slots
 
         Args:
           comment: A description or comment about the secret.
@@ -135,7 +137,7 @@ def update(
           timeout: Override the client-level default timeout for this request, in seconds
         """
         return self._patch(
-            f"/fastedge/v1/secrets/{id}",
+            f"/fastedge/v1/secrets/{secret_id}",
             body=maybe_transform(
                 {
                     "comment": comment,
@@ -162,8 +164,10 @@ def list(
         extra_body: Body | None = None,
         timeout: float | httpx.Timeout | None | NotGiven = not_given,
     ) -> SecretListResponse:
-        """
-        List available secrets
+        """Retrieve encrypted secrets available to the authenticated client.
+
+        Secrets can be
+        filtered by application ID or name. Values are encrypted and require decryption.
 
         Args:
           app_id: App ID
@@ -198,7 +202,7 @@ def list(
 
     def delete(
         self,
-        id: int,
+        secret_id: int,
         *,
         force: bool | Omit = omit,
         # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
@@ -208,11 +212,13 @@ def delete(
         extra_body: Body | None = None,
         timeout: float | httpx.Timeout | None | NotGiven = not_given,
     ) -> None:
-        """
-        Delete a secret
+        """Permanently delete a secret and all its slot values.
+
+        Secrets in use by
+        applications require force=true to delete.
 
         Args:
-          force: Force delete secret even if it is used in slots
+          force: When true, deletes secret even if used by applications. Defaults to false.
 
           extra_headers: Send extra headers
 
@@ -224,7 +230,7 @@ def delete(
         """
         extra_headers = {"Accept": "*/*", **(extra_headers or {})}
         return self._delete(
-            f"/fastedge/v1/secrets/{id}",
+            f"/fastedge/v1/secrets/{secret_id}",
             options=make_request_options(
                 extra_headers=extra_headers,
                 extra_query=extra_query,
@@ -237,7 +243,7 @@ def delete(
 
     def get(
         self,
-        id: int,
+        secret_id: int,
         *,
         # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
         # The extra values given here take precedence over values defined on the client or passed to this method.
@@ -247,7 +253,9 @@ def get(
         timeout: float | httpx.Timeout | None | NotGiven = not_given,
     ) -> Secret:
         """
-        Get secret by id
+        Retrieve complete metadata for a specific secret including all time-based slots.
+        Secret values remain encrypted; use the encryption service to decrypt when
+        needed.
 
         Args:
           extra_headers: Send extra headers
@@ -259,7 +267,7 @@ def get(
           timeout: Override the client-level default timeout for this request, in seconds
         """
         return self._get(
-            f"/fastedge/v1/secrets/{id}",
+            f"/fastedge/v1/secrets/{secret_id}",
             options=make_request_options(
                 extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
             ),
@@ -268,11 +276,9 @@ def get(
 
     def replace(
         self,
-        id: int,
+        secret_id: int,
         *,
-        name: str,
-        comment: str | Omit = omit,
-        secret_slots: Iterable[secret_replace_params.SecretSlot] | Omit = omit,
+        body: secret_replace_params.Body,
         # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
         # The extra values given here take precedence over values defined on the client or passed to this method.
         extra_headers: Headers | None = None,
@@ -281,15 +287,9 @@ def replace(
         timeout: float | httpx.Timeout | None | NotGiven = not_given,
     ) -> Secret:
         """
-        Update a secret
+        Updates secret metadata and/or adds new time-based slots with encrypted values
 
         Args:
-          name: The unique name of the secret.
-
-          comment: A description or comment about the secret.
-
-          secret_slots: A list of secret slots associated with this secret.
-
           extra_headers: Send extra headers
 
           extra_query: Add additional query parameters to the request
@@ -299,15 +299,8 @@ def replace(
           timeout: Override the client-level default timeout for this request, in seconds
         """
         return self._put(
-            f"/fastedge/v1/secrets/{id}",
-            body=maybe_transform(
-                {
-                    "name": name,
-                    "comment": comment,
-                    "secret_slots": secret_slots,
-                },
-                secret_replace_params.SecretReplaceParams,
-            ),
+            f"/fastedge/v1/secrets/{secret_id}",
+            body=maybe_transform(body, secret_replace_params.SecretReplaceParams),
             options=make_request_options(
                 extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
             ),
@@ -352,8 +345,10 @@ async def create(
         extra_body: Body | None = None,
         timeout: float | httpx.Timeout | None | NotGiven = not_given,
     ) -> SecretCreateResponse:
-        """
-        Add a new secret
+        """Create a new encrypted secret for use in edge applications.
+
+        Secrets are
+        encrypted with AES-256-GCM and can have multiple time-based slots for rotation.
 
         Args:
           name: The unique name of the secret.
@@ -388,7 +383,7 @@ async def create(
 
     async def update(
         self,
-        id: int,
+        secret_id: int,
         *,
         comment: str | Omit = omit,
         name: str | Omit = omit,
@@ -401,7 +396,7 @@ async def update(
         timeout: float | httpx.Timeout | None | NotGiven = not_given,
     ) -> Secret:
         """
-        Update a secret
+        Partially updates secret metadata and/or modifies specific slots
 
         Args:
           comment: A description or comment about the secret.
@@ -419,7 +414,7 @@ async def update(
           timeout: Override the client-level default timeout for this request, in seconds
         """
         return await self._patch(
-            f"/fastedge/v1/secrets/{id}",
+            f"/fastedge/v1/secrets/{secret_id}",
             body=await async_maybe_transform(
                 {
                     "comment": comment,
@@ -446,8 +441,10 @@ async def list(
         extra_body: Body | None = None,
         timeout: float | httpx.Timeout | None | NotGiven = not_given,
     ) -> SecretListResponse:
-        """
-        List available secrets
+        """Retrieve encrypted secrets available to the authenticated client.
+
+        Secrets can be
+        filtered by application ID or name. Values are encrypted and require decryption.
 
         Args:
           app_id: App ID
@@ -482,7 +479,7 @@ async def list(
 
     async def delete(
         self,
-        id: int,
+        secret_id: int,
         *,
         force: bool | Omit = omit,
         # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
@@ -492,11 +489,13 @@ async def delete(
         extra_body: Body | None = None,
         timeout: float | httpx.Timeout | None | NotGiven = not_given,
     ) -> None:
-        """
-        Delete a secret
+        """Permanently delete a secret and all its slot values.
+
+        Secrets in use by
+        applications require force=true to delete.
 
         Args:
-          force: Force delete secret even if it is used in slots
+          force: When true, deletes secret even if used by applications. Defaults to false.
 
           extra_headers: Send extra headers
 
@@ -508,7 +507,7 @@ async def delete(
         """
         extra_headers = {"Accept": "*/*", **(extra_headers or {})}
         return await self._delete(
-            f"/fastedge/v1/secrets/{id}",
+            f"/fastedge/v1/secrets/{secret_id}",
             options=make_request_options(
                 extra_headers=extra_headers,
                 extra_query=extra_query,
@@ -521,7 +520,7 @@ async def delete(
 
     async def get(
         self,
-        id: int,
+        secret_id: int,
         *,
         # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
         # The extra values given here take precedence over values defined on the client or passed to this method.
@@ -531,7 +530,9 @@ async def get(
         timeout: float | httpx.Timeout | None | NotGiven = not_given,
     ) -> Secret:
         """
-        Get secret by id
+        Retrieve complete metadata for a specific secret including all time-based slots.
+        Secret values remain encrypted; use the encryption service to decrypt when
+        needed.
 
         Args:
           extra_headers: Send extra headers
@@ -543,7 +544,7 @@ async def get(
           timeout: Override the client-level default timeout for this request, in seconds
         """
         return await self._get(
-            f"/fastedge/v1/secrets/{id}",
+            f"/fastedge/v1/secrets/{secret_id}",
             options=make_request_options(
                 extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
             ),
@@ -552,11 +553,9 @@ async def get(
 
     async def replace(
         self,
-        id: int,
+        secret_id: int,
         *,
-        name: str,
-        comment: str | Omit = omit,
-        secret_slots: Iterable[secret_replace_params.SecretSlot] | Omit = omit,
+        body: secret_replace_params.Body,
         # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
         # The extra values given here take precedence over values defined on the client or passed to this method.
         extra_headers: Headers | None = None,
@@ -565,15 +564,9 @@ async def replace(
         timeout: float | httpx.Timeout | None | NotGiven = not_given,
     ) -> Secret:
         """
-        Update a secret
+        Updates secret metadata and/or adds new time-based slots with encrypted values
 
         Args:
-          name: The unique name of the secret.
-
-          comment: A description or comment about the secret.
-
-          secret_slots: A list of secret slots associated with this secret.
-
           extra_headers: Send extra headers
 
           extra_query: Add additional query parameters to the request
@@ -583,15 +576,8 @@ async def replace(
           timeout: Override the client-level default timeout for this request, in seconds
         """
         return await self._put(
-            f"/fastedge/v1/secrets/{id}",
-            body=await async_maybe_transform(
-                {
-                    "name": name,
-                    "comment": comment,
-                    "secret_slots": secret_slots,
-                },
-                secret_replace_params.SecretReplaceParams,
-            ),
+            f"/fastedge/v1/secrets/{secret_id}",
+            body=await async_maybe_transform(body, secret_replace_params.SecretReplaceParams),
             options=make_request_options(
                 extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
             ),
diff --git a/src/gcore/resources/fastedge/statistics.py b/src/gcore/resources/fastedge/statistics.py
index 7404cad2..aef4efb6 100644
--- a/src/gcore/resources/fastedge/statistics.py
+++ b/src/gcore/resources/fastedge/statistics.py
@@ -63,18 +63,21 @@ def get_call_series(
         timeout: float | httpx.Timeout | None | NotGiven = not_given,
     ) -> StatisticGetCallSeriesResponse:
         """
-        Call statistics
+        Retrieve aggregated call statistics for applications within a specified time
+        period. Data is aggregated by the specified step interval and can be filtered by
+        application ID and network.
 
         Args:
-          from_: Reporting period start time, RFC3339 format
+          from_: Reporting period start time in RFC3339 format
 
-          step: Reporting granularity, in seconds
+          step: Reporting time granularity in seconds. Common values are 60 (1 minute), 300 (5
+              minutes), 3600 (1 hour).
 
-          to: Reporting period end time (not included into reporting period), RFC3339 format
+          to: Reporting period end time in RFC3339 format (exclusive)
 
-          id: App ID
+          id: Filter statistics by specific application ID
 
-          network: Network name
+          network: Filter statistics by edge network name
 
           extra_headers: Send extra headers
 
@@ -121,18 +124,21 @@ def get_duration_series(
         timeout: float | httpx.Timeout | None | NotGiven = not_given,
     ) -> StatisticGetDurationSeriesResponse:
         """
-        Execution duration statistics
+        Retrieve execution time statistics showing how long applications took to process
+        requests. Results are aggregated by the specified time interval and can be
+        filtered by app and network.
 
         Args:
-          from_: Reporting period start time, RFC3339 format
+          from_: Reporting period start time in RFC3339 format
 
-          step: Reporting granularity, in seconds
+          step: Reporting time granularity in seconds. Common values are 60 (1 minute), 300 (5
+              minutes), 3600 (1 hour).
 
-          to: Reporting period end time (not included into reporting period), RFC3339 format
+          to: Reporting period end time in RFC3339 format (exclusive)
 
-          id: App ID
+          id: Filter statistics by specific application ID
 
-          network: Network name
+          network: Filter statistics by edge network name
 
           extra_headers: Send extra headers
 
@@ -202,18 +208,21 @@ async def get_call_series(
         timeout: float | httpx.Timeout | None | NotGiven = not_given,
     ) -> StatisticGetCallSeriesResponse:
         """
-        Call statistics
+        Retrieve aggregated call statistics for applications within a specified time
+        period. Data is aggregated by the specified step interval and can be filtered by
+        application ID and network.
 
         Args:
-          from_: Reporting period start time, RFC3339 format
+          from_: Reporting period start time in RFC3339 format
 
-          step: Reporting granularity, in seconds
+          step: Reporting time granularity in seconds. Common values are 60 (1 minute), 300 (5
+              minutes), 3600 (1 hour).
 
-          to: Reporting period end time (not included into reporting period), RFC3339 format
+          to: Reporting period end time in RFC3339 format (exclusive)
 
-          id: App ID
+          id: Filter statistics by specific application ID
 
-          network: Network name
+          network: Filter statistics by edge network name
 
           extra_headers: Send extra headers
 
@@ -260,18 +269,21 @@ async def get_duration_series(
         timeout: float | httpx.Timeout | None | NotGiven = not_given,
     ) -> StatisticGetDurationSeriesResponse:
         """
-        Execution duration statistics
+        Retrieve execution time statistics showing how long applications took to process
+        requests. Results are aggregated by the specified time interval and can be
+        filtered by app and network.
 
         Args:
-          from_: Reporting period start time, RFC3339 format
+          from_: Reporting period start time in RFC3339 format
 
-          step: Reporting granularity, in seconds
+          step: Reporting time granularity in seconds. Common values are 60 (1 minute), 300 (5
+              minutes), 3600 (1 hour).
 
-          to: Reporting period end time (not included into reporting period), RFC3339 format
+          to: Reporting period end time in RFC3339 format (exclusive)
 
-          id: App ID
+          id: Filter statistics by specific application ID
 
-          network: Network name
+          network: Filter statistics by edge network name
 
           extra_headers: Send extra headers
 
diff --git a/src/gcore/resources/fastedge/templates.py b/src/gcore/resources/fastedge/templates.py
index 5c6efc5f..3c9a4689 100644
--- a/src/gcore/resources/fastedge/templates.py
+++ b/src/gcore/resources/fastedge/templates.py
@@ -71,20 +71,22 @@ def create(
         timeout: float | httpx.Timeout | None | NotGiven = not_given,
     ) -> TemplateShort:
         """
-        Add template
+        Create a new application template from an existing binary and configuration.
+        Templates can be shared with groups to enable collaborative application
+        development.
 
         Args:
-          binary_id: Binary ID
+          binary_id: ID of the WebAssembly binary to use for this template
 
-          name: Name of the template
+          name: Unique name for the template (used for identification and searching)
 
           owned: Is the template owned by user?
 
           params: Parameters
 
-          long_descr: Long description of the template
+          long_descr: Detailed markdown description explaining template features and usage
 
-          short_descr: Short description of the template
+          short_descr: Brief one-line description displayed in template listings
 
           extra_headers: Send extra headers
 
@@ -128,7 +130,9 @@ def list(
         timeout: float | httpx.Timeout | None | NotGiven = not_given,
     ) -> SyncOffsetPageFastedgeTemplates[TemplateShort]:
         """
-        List app templates
+        Retrieve available application templates including system templates and
+        user-created templates. Templates provide pre-configured application settings
+        that can be reused for quick deployment.
 
         Args:
           api_type:
@@ -136,11 +140,12 @@ def list(
               wasi-http - WASI with HTTP entry point
               proxy-wasm - Proxy-Wasm app, callable from CDN
 
-          limit: Limit for pagination
+          limit: Maximum number of results to return
 
-          offset: Offset for pagination
+          offset: Number of results to skip for pagination
 
-          only_mine: Only my templates
+          only_mine: When true, returns only templates created by the client. When false, includes
+              shared templates.
 
           extra_headers: Send extra headers
 
@@ -173,7 +178,7 @@ def list(
 
     def delete(
         self,
-        id: int,
+        template_id: int,
         *,
         force: bool | Omit = omit,
         # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
@@ -183,11 +188,13 @@ def delete(
         extra_body: Body | None = None,
         timeout: float | httpx.Timeout | None | NotGiven = not_given,
     ) -> None:
-        """
-        Delete template
+        """Remove a template from the platform.
+
+        Templates shared with groups require
+        force=true parameter to delete.
 
         Args:
-          force: Force template deletion even if it is shared to groups
+          force: When true, deletes template even if shared with groups. Defaults to false.
 
           extra_headers: Send extra headers
 
@@ -199,7 +206,7 @@ def delete(
         """
         extra_headers = {"Accept": "*/*", **(extra_headers or {})}
         return self._delete(
-            f"/fastedge/v1/template/{id}",
+            f"/fastedge/v1/template/{template_id}",
             options=make_request_options(
                 extra_headers=extra_headers,
                 extra_query=extra_query,
@@ -212,7 +219,7 @@ def delete(
 
     def get(
         self,
-        id: int,
+        template_id: int,
         *,
         # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
         # The extra values given here take precedence over values defined on the client or passed to this method.
@@ -221,8 +228,10 @@ def get(
         extra_body: Body | None = None,
         timeout: float | httpx.Timeout | None | NotGiven = not_given,
     ) -> Template:
-        """
-        Get template details
+        """Retrieve complete configuration and metadata for a specific template.
+
+        Use this
+        to inspect template parameters before creating applications from it.
 
         Args:
           extra_headers: Send extra headers
@@ -234,7 +243,7 @@ def get(
           timeout: Override the client-level default timeout for this request, in seconds
         """
         return self._get(
-            f"/fastedge/v1/template/{id}",
+            f"/fastedge/v1/template/{template_id}",
             options=make_request_options(
                 extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
             ),
@@ -243,7 +252,7 @@ def get(
 
     def replace(
         self,
-        id: int,
+        template_id: int,
         *,
         binary_id: int,
         name: str,
@@ -258,21 +267,23 @@ def replace(
         extra_body: Body | None = None,
         timeout: float | httpx.Timeout | None | NotGiven = not_given,
     ) -> TemplateShort:
-        """
-        Update template
+        """Modify an existing template's configuration.
+
+        Updates affect future applications
+        created from this template; existing apps are not changed.
 
         Args:
-          binary_id: Binary ID
+          binary_id: ID of the WebAssembly binary to use for this template
 
-          name: Name of the template
+          name: Unique name for the template (used for identification and searching)
 
           owned: Is the template owned by user?
 
           params: Parameters
 
-          long_descr: Long description of the template
+          long_descr: Detailed markdown description explaining template features and usage
 
-          short_descr: Short description of the template
+          short_descr: Brief one-line description displayed in template listings
 
           extra_headers: Send extra headers
 
@@ -283,7 +294,7 @@ def replace(
           timeout: Override the client-level default timeout for this request, in seconds
         """
         return self._put(
-            f"/fastedge/v1/template/{id}",
+            f"/fastedge/v1/template/{template_id}",
             body=maybe_transform(
                 {
                     "binary_id": binary_id,
@@ -341,20 +352,22 @@ async def create(
         timeout: float | httpx.Timeout | None | NotGiven = not_given,
     ) -> TemplateShort:
         """
-        Add template
+        Create a new application template from an existing binary and configuration.
+        Templates can be shared with groups to enable collaborative application
+        development.
 
         Args:
-          binary_id: Binary ID
+          binary_id: ID of the WebAssembly binary to use for this template
 
-          name: Name of the template
+          name: Unique name for the template (used for identification and searching)
 
           owned: Is the template owned by user?
 
           params: Parameters
 
-          long_descr: Long description of the template
+          long_descr: Detailed markdown description explaining template features and usage
 
-          short_descr: Short description of the template
+          short_descr: Brief one-line description displayed in template listings
 
           extra_headers: Send extra headers
 
@@ -398,7 +411,9 @@ def list(
         timeout: float | httpx.Timeout | None | NotGiven = not_given,
     ) -> AsyncPaginator[TemplateShort, AsyncOffsetPageFastedgeTemplates[TemplateShort]]:
         """
-        List app templates
+        Retrieve available application templates including system templates and
+        user-created templates. Templates provide pre-configured application settings
+        that can be reused for quick deployment.
 
         Args:
           api_type:
@@ -406,11 +421,12 @@ def list(
               wasi-http - WASI with HTTP entry point
               proxy-wasm - Proxy-Wasm app, callable from CDN
 
-          limit: Limit for pagination
+          limit: Maximum number of results to return
 
-          offset: Offset for pagination
+          offset: Number of results to skip for pagination
 
-          only_mine: Only my templates
+          only_mine: When true, returns only templates created by the client. When false, includes
+              shared templates.
 
           extra_headers: Send extra headers
 
@@ -443,7 +459,7 @@ def list(
 
     async def delete(
         self,
-        id: int,
+        template_id: int,
         *,
         force: bool | Omit = omit,
         # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
@@ -453,11 +469,13 @@ async def delete(
         extra_body: Body | None = None,
         timeout: float | httpx.Timeout | None | NotGiven = not_given,
     ) -> None:
-        """
-        Delete template
+        """Remove a template from the platform.
+
+        Templates shared with groups require
+        force=true parameter to delete.
 
         Args:
-          force: Force template deletion even if it is shared to groups
+          force: When true, deletes template even if shared with groups. Defaults to false.
 
           extra_headers: Send extra headers
 
@@ -469,7 +487,7 @@ async def delete(
         """
         extra_headers = {"Accept": "*/*", **(extra_headers or {})}
         return await self._delete(
-            f"/fastedge/v1/template/{id}",
+            f"/fastedge/v1/template/{template_id}",
             options=make_request_options(
                 extra_headers=extra_headers,
                 extra_query=extra_query,
@@ -482,7 +500,7 @@ async def delete(
 
     async def get(
         self,
-        id: int,
+        template_id: int,
         *,
         # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
         # The extra values given here take precedence over values defined on the client or passed to this method.
@@ -491,8 +509,10 @@ async def get(
         extra_body: Body | None = None,
         timeout: float | httpx.Timeout | None | NotGiven = not_given,
     ) -> Template:
-        """
-        Get template details
+        """Retrieve complete configuration and metadata for a specific template.
+
+        Use this
+        to inspect template parameters before creating applications from it.
 
         Args:
           extra_headers: Send extra headers
@@ -504,7 +524,7 @@ async def get(
           timeout: Override the client-level default timeout for this request, in seconds
         """
         return await self._get(
-            f"/fastedge/v1/template/{id}",
+            f"/fastedge/v1/template/{template_id}",
             options=make_request_options(
                 extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
             ),
@@ -513,7 +533,7 @@ async def get(
 
     async def replace(
         self,
-        id: int,
+        template_id: int,
         *,
         binary_id: int,
         name: str,
@@ -528,21 +548,23 @@ async def replace(
         extra_body: Body | None = None,
         timeout: float | httpx.Timeout | None | NotGiven = not_given,
     ) -> TemplateShort:
-        """
-        Update template
+        """Modify an existing template's configuration.
+
+        Updates affect future applications
+        created from this template; existing apps are not changed.
 
         Args:
-          binary_id: Binary ID
+          binary_id: ID of the WebAssembly binary to use for this template
 
-          name: Name of the template
+          name: Unique name for the template (used for identification and searching)
 
           owned: Is the template owned by user?
 
           params: Parameters
 
-          long_descr: Long description of the template
+          long_descr: Detailed markdown description explaining template features and usage
 
-          short_descr: Short description of the template
+          short_descr: Brief one-line description displayed in template listings
 
           extra_headers: Send extra headers
 
@@ -553,7 +575,7 @@ async def replace(
           timeout: Override the client-level default timeout for this request, in seconds
         """
         return await self._put(
-            f"/fastedge/v1/template/{id}",
+            f"/fastedge/v1/template/{template_id}",
             body=await async_maybe_transform(
                 {
                     "binary_id": binary_id,
diff --git a/src/gcore/resources/storage/buckets/buckets.py b/src/gcore/resources/storage/buckets/buckets.py
index 5f89b36d..7c8c83a0 100644
--- a/src/gcore/resources/storage/buckets/buckets.py
+++ b/src/gcore/resources/storage/buckets/buckets.py
@@ -98,8 +98,8 @@ def create(
         Only applicable to S3-compatible
         storages.
 
-        Deprecated: Use POST /provisioning/v3/storages/{`storage_id`}/buckets with
-        {"name": "bucket-name"} instead.
+        Deprecated: Use POST /v4/`object_storages`/{`storage_id`}/buckets with {"name":
+        "bucket-name"} instead.
 
         Args:
           extra_headers: Send extra headers
@@ -141,9 +141,8 @@ def list(
         Response format: count: total number of buckets (independent of pagination)
         results: current page of buckets according to limit/offset
 
-        Deprecated: Use GET
-        /provisioning/v3/storages/{`storage_id`}/buckets/{`bucket_name`} for individual
-        bucket details instead.
+        Deprecated: Use GET /v4/`object_storages`/{`storage_id`}/buckets/{`bucket_name`}
+        for individual bucket details instead.
 
         Args:
           limit: Max number of records in response
@@ -196,7 +195,7 @@ def delete(
         automatically deleted before the bucket is removed.
 
         Deprecated: Use DELETE
-        /provisioning/v3/storages/{`storage_id`}/buckets/{`bucket_name`} instead.
+        /v4/`object_storages`/{`storage_id`}/buckets/{`bucket_name`} instead.
 
         Args:
           extra_headers: Send extra headers
@@ -269,8 +268,8 @@ async def create(
         Only applicable to S3-compatible
         storages.
 
-        Deprecated: Use POST /provisioning/v3/storages/{`storage_id`}/buckets with
-        {"name": "bucket-name"} instead.
+        Deprecated: Use POST /v4/`object_storages`/{`storage_id`}/buckets with {"name":
+        "bucket-name"} instead.
 
         Args:
           extra_headers: Send extra headers
@@ -312,9 +311,8 @@ def list(
         Response format: count: total number of buckets (independent of pagination)
         results: current page of buckets according to limit/offset
 
-        Deprecated: Use GET
-        /provisioning/v3/storages/{`storage_id`}/buckets/{`bucket_name`} for individual
-        bucket details instead.
+        Deprecated: Use GET /v4/`object_storages`/{`storage_id`}/buckets/{`bucket_name`}
+        for individual bucket details instead.
 
         Args:
           limit: Max number of records in response
@@ -367,7 +365,7 @@ async def delete(
         automatically deleted before the bucket is removed.
 
         Deprecated: Use DELETE
-        /provisioning/v3/storages/{`storage_id`}/buckets/{`bucket_name`} instead.
+        /v4/`object_storages`/{`storage_id`}/buckets/{`bucket_name`} instead.
 
         Args:
           extra_headers: Send extra headers
diff --git a/src/gcore/resources/storage/buckets/cors.py b/src/gcore/resources/storage/buckets/cors.py
index d1983698..c6f10f9a 100644
--- a/src/gcore/resources/storage/buckets/cors.py
+++ b/src/gcore/resources/storage/buckets/cors.py
@@ -63,7 +63,7 @@ def create(
         browsers.
 
         Deprecated: Use PATCH
-        /provisioning/v3/storages/{`storage_id`}/buckets/{`bucket_name`} with {"cors":
+        /v4/`object_storages`/{`storage_id`}/buckets/{`bucket_name`} with {"cors":
         {"allowed_origins": [...]}} instead.
 
         Args:
@@ -107,9 +107,8 @@ def get(
         S3 bucket, showing which domains are allowed to access the bucket from web
         browsers.
 
-        Deprecated: Use GET
-        /provisioning/v3/storages/{`storage_id`}/buckets/{`bucket_name`} instead, which
-        returns CORS along with policy and lifecycle configuration.
+        Deprecated: Use GET /v4/`object_storages`/{`storage_id`}/buckets/{`bucket_name`}
+        instead, which returns CORS along with policy and lifecycle configuration.
 
         Args:
           extra_headers: Send extra headers
@@ -171,7 +170,7 @@ async def create(
         browsers.
 
         Deprecated: Use PATCH
-        /provisioning/v3/storages/{`storage_id`}/buckets/{`bucket_name`} with {"cors":
+        /v4/`object_storages`/{`storage_id`}/buckets/{`bucket_name`} with {"cors":
         {"allowed_origins": [...]}} instead.
 
         Args:
@@ -215,9 +214,8 @@ async def get(
         S3 bucket, showing which domains are allowed to access the bucket from web
         browsers.
 
-        Deprecated: Use GET
-        /provisioning/v3/storages/{`storage_id`}/buckets/{`bucket_name`} instead, which
-        returns CORS along with policy and lifecycle configuration.
+        Deprecated: Use GET /v4/`object_storages`/{`storage_id`}/buckets/{`bucket_name`}
+        instead, which returns CORS along with policy and lifecycle configuration.
 
         Args:
           extra_headers: Send extra headers
diff --git a/src/gcore/resources/storage/buckets/lifecycle.py b/src/gcore/resources/storage/buckets/lifecycle.py
index af2c7aec..5be5e7dc 100644
--- a/src/gcore/resources/storage/buckets/lifecycle.py
+++ b/src/gcore/resources/storage/buckets/lifecycle.py
@@ -65,8 +65,8 @@ def create(
         the expiration policy.
 
         Deprecated: Use PATCH
-        /provisioning/v3/storages/{`storage_id`}/buckets/{`bucket_name`} with
-        {"lifecycle": {"expiration_days": N}} instead.
+        /v4/`object_storages`/{`storage_id`}/buckets/{`bucket_name`} with {"lifecycle":
+        {"expiration_days": N}} instead.
 
         Args:
           expiration_days: Number of days after which objects will be automatically deleted from the
@@ -111,8 +111,8 @@ def delete(
         expiration. Objects will no longer be automatically deleted based on age.
 
         Deprecated: Use PATCH
-        /provisioning/v3/storages/{`storage_id`}/buckets/{`bucket_name`} with
-        {"lifecycle": {"expiration_days": null}} instead.
+        /v4/`object_storages`/{`storage_id`}/buckets/{`bucket_name`} with {"lifecycle":
+        {"expiration_days": null}} instead.
 
         Args:
           extra_headers: Send extra headers
@@ -178,8 +178,8 @@ async def create(
         the expiration policy.
 
         Deprecated: Use PATCH
-        /provisioning/v3/storages/{`storage_id`}/buckets/{`bucket_name`} with
-        {"lifecycle": {"expiration_days": N}} instead.
+        /v4/`object_storages`/{`storage_id`}/buckets/{`bucket_name`} with {"lifecycle":
+        {"expiration_days": N}} instead.
 
         Args:
           expiration_days: Number of days after which objects will be automatically deleted from the
@@ -226,8 +226,8 @@ async def delete(
         expiration. Objects will no longer be automatically deleted based on age.
 
         Deprecated: Use PATCH
-        /provisioning/v3/storages/{`storage_id`}/buckets/{`bucket_name`} with
-        {"lifecycle": {"expiration_days": null}} instead.
+        /v4/`object_storages`/{`storage_id`}/buckets/{`bucket_name`} with {"lifecycle":
+        {"expiration_days": null}} instead.
 
         Args:
           extra_headers: Send extra headers
diff --git a/src/gcore/resources/storage/buckets/policy.py b/src/gcore/resources/storage/buckets/policy.py
index d44b173c..ac84e0db 100644
--- a/src/gcore/resources/storage/buckets/policy.py
+++ b/src/gcore/resources/storage/buckets/policy.py
@@ -62,7 +62,7 @@ def create(
         objects without proper authentication.
 
         Deprecated: Use PATCH
-        /provisioning/v3/storages/{`storage_id`}/buckets/{`bucket_name`} with {"policy":
+        /v4/`object_storages`/{`storage_id`}/buckets/{`bucket_name`} with {"policy":
         {"public": true}} instead.
 
         Args:
@@ -105,7 +105,7 @@ def delete(
         requests.
 
         Deprecated: Use PATCH
-        /provisioning/v3/storages/{`storage_id`}/buckets/{`bucket_name`} with {"policy":
+        /v4/`object_storages`/{`storage_id`}/buckets/{`bucket_name`} with {"policy":
         {"public": false}} instead.
 
         Args:
@@ -145,9 +145,9 @@ def get(
         Returns whether the S3 bucket is currently configured for public read access.
         Shows if anonymous users can download objects from the bucket via HTTP requests.
 
-        Deprecated: Use GET
-        /provisioning/v3/storages/{`storage_id`}/buckets/{`bucket_name`} instead, which
-        returns policy status along with CORS and lifecycle configuration.
+        Deprecated: Use GET /v4/`object_storages`/{`storage_id`}/buckets/{`bucket_name`}
+        instead, which returns policy status along with CORS and lifecycle
+        configuration.
 
         Args:
           extra_headers: Send extra headers
@@ -210,7 +210,7 @@ async def create(
         objects without proper authentication.
 
         Deprecated: Use PATCH
-        /provisioning/v3/storages/{`storage_id`}/buckets/{`bucket_name`} with {"policy":
+        /v4/`object_storages`/{`storage_id`}/buckets/{`bucket_name`} with {"policy":
         {"public": true}} instead.
 
         Args:
@@ -253,7 +253,7 @@ async def delete(
         requests.
 
         Deprecated: Use PATCH
-        /provisioning/v3/storages/{`storage_id`}/buckets/{`bucket_name`} with {"policy":
+        /v4/`object_storages`/{`storage_id`}/buckets/{`bucket_name`} with {"policy":
         {"public": false}} instead.
 
         Args:
@@ -293,9 +293,9 @@ async def get(
         Returns whether the S3 bucket is currently configured for public read access.
         Shows if anonymous users can download objects from the bucket via HTTP requests.
 
-        Deprecated: Use GET
-        /provisioning/v3/storages/{`storage_id`}/buckets/{`bucket_name`} instead, which
-        returns policy status along with CORS and lifecycle configuration.
+        Deprecated: Use GET /v4/`object_storages`/{`storage_id`}/buckets/{`bucket_name`}
+        instead, which returns policy status along with CORS and lifecycle
+        configuration.
 
         Args:
           extra_headers: Send extra headers
diff --git a/src/gcore/resources/storage/credentials.py b/src/gcore/resources/storage/credentials.py
index 2b317f6f..e8564751 100644
--- a/src/gcore/resources/storage/credentials.py
+++ b/src/gcore/resources/storage/credentials.py
@@ -61,13 +61,18 @@ def recreate(
         timeout: float | httpx.Timeout | None | NotGiven = not_given,
     ) -> Storage:
         """
-        Generates new access credentials for the storage (S3 keys for S3 storage, SFTP
-        password for SFTP storage).
+        WARNING: This is a destructive operation — it removes ALL existing access keys
+        and generates a single new key pair. Any applications using the old keys will
+        lose access immediately.
 
-        Deprecated: Use POST
-        /provisioning/v3/storages/`s3_compatible`/{`storage_id`}/credentials/reset for
-        S3 storage or PATCH /provisioning/v3/storages/sftp/{`storage_id`}/credentials
-        for SFTP storage instead.
+        For S3 storage this replaces all existing access keys with a single new key
+        pair. For SFTP storage this resets the password.
+
+        Deprecated: Use POST /v4/`object_storages`/{`storage_id`}/`access_keys` to
+        create individual access keys, DELETE
+        /v4/`object_storages`/{`storage_id`}/`access_keys`/{`access_key`} to remove
+        specific keys, or PATCH /v4/`sftp_storages`/{`storage_id`}/credentials for SFTP
+        storage instead.
 
         Args:
           extra_headers: Send extra headers
@@ -135,13 +140,18 @@ async def recreate(
         timeout: float | httpx.Timeout | None | NotGiven = not_given,
     ) -> Storage:
         """
-        Generates new access credentials for the storage (S3 keys for S3 storage, SFTP
-        password for SFTP storage).
-
-        Deprecated: Use POST
-        /provisioning/v3/storages/`s3_compatible`/{`storage_id`}/credentials/reset for
-        S3 storage or PATCH /provisioning/v3/storages/sftp/{`storage_id`}/credentials
-        for SFTP storage instead.
+        WARNING: This is a destructive operation — it removes ALL existing access keys
+        and generates a single new key pair. Any applications using the old keys will
+        lose access immediately.
+
+        For S3 storage this replaces all existing access keys with a single new key
+        pair. For SFTP storage this resets the password.
+
+        Deprecated: Use POST /v4/`object_storages`/{`storage_id`}/`access_keys` to
+        create individual access keys, DELETE
+        /v4/`object_storages`/{`storage_id`}/`access_keys`/{`access_key`} to remove
+        specific keys, or PATCH /v4/`sftp_storages`/{`storage_id`}/credentials for SFTP
+        storage instead.
 
         Args:
           extra_headers: Send extra headers
diff --git a/src/gcore/resources/storage/locations.py b/src/gcore/resources/storage/locations.py
index 10cee722..86f4727d 100644
--- a/src/gcore/resources/storage/locations.py
+++ b/src/gcore/resources/storage/locations.py
@@ -60,8 +60,8 @@ def list(
         """Returns available storage locations where you can create storages.
 
         Each location
-        represents a geographic region with specific data center facilities. Deprecated,
-        use GET /provisioning/v3/locations instead.
+        represents a geographic region with specific data center facilities. Deprecated:
+        Use GET /v4/locations instead.
 
         Args:
           extra_headers: Send extra headers
@@ -128,8 +128,8 @@ def list(
         """Returns available storage locations where you can create storages.
 
         Each location
-        represents a geographic region with specific data center facilities. Deprecated,
-        use GET /provisioning/v3/locations instead.
+        represents a geographic region with specific data center facilities. Deprecated:
+        Use GET /v4/locations instead.
 
         Args:
           extra_headers: Send extra headers
diff --git a/src/gcore/resources/storage/storage.py b/src/gcore/resources/storage/storage.py
index 41b6edb5..0503e68e 100644
--- a/src/gcore/resources/storage/storage.py
+++ b/src/gcore/resources/storage/storage.py
@@ -113,8 +113,8 @@ def create(
         Creates a new storage instance (S3 or SFTP) in the specified location and
         returns the storage details including credentials.
 
-        Deprecated: Use POST /provisioning/v3/storages/`s3_compatible` for S3 storage or
-        POST /provisioning/v3/storages/sftp for SFTP storage instead.
+        Deprecated: Use POST /v4/`object_storages` for S3 storage or POST
+        /v4/`sftp_storages` for SFTP storage instead.
 
         Args:
           location: Geographic location where the storage will be provisioned. Each location
@@ -179,8 +179,8 @@ def update(
         Used for
         SFTP storages.
 
-        Deprecated: Use PATCH /provisioning/v3/storages/sftp/{`storage_id`} for SFTP
-        storage updates instead.
+        Deprecated: Use PATCH /v4/`sftp_storages`/{`storage_id`} for SFTP storage
+        updates instead.
 
         Args:
           expires: Duration when the storage should expire in format like "1 years 6 months 2 weeks
@@ -211,6 +211,7 @@ def update(
             cast_to=Storage,
         )
 
+    @typing_extensions.deprecated("deprecated")
     def list(
         self,
         *,
@@ -222,7 +223,7 @@ def list(
         order_by: str | Omit = omit,
         order_direction: Literal["asc", "desc"] | Omit = omit,
         show_deleted: bool | Omit = omit,
-        status: Literal["active", "suspended", "deleted", "pending"] | Omit = omit,
+        status: Literal["active", "creating", "ok", "updating", "deleting", "deleted"] | Omit = omit,
         type: Literal["s3_compatible", "sftp"] | Omit = omit,
         # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
         # The extra values given here take precedence over values defined on the client or passed to this method.
@@ -239,6 +240,9 @@ def list(
         (independent of pagination) results: the current page of storages according to
         limit/offset
 
+        Deprecated: Use GET /v4/`object_storages` for S3 storages or GET
+        /v4/`sftp_storages` for SFTP storages instead.
+
         Args:
           id: Filter by storage ID
 
@@ -311,8 +315,8 @@ def delete(
 
         This action cannot be undone.
 
-        Deprecated: Use DELETE /provisioning/v3/storages/`s3_compatible`/{`storage_id`}
-        or DELETE /provisioning/v3/storages/sftp/{`storage_id`} instead.
+        Deprecated: Use DELETE /v4/`object_storages`/{`storage_id`} or DELETE
+        /v4/`sftp_storages`/{`storage_id`} instead.
 
         Args:
           extra_headers: Send extra headers
@@ -332,6 +336,7 @@ def delete(
             cast_to=NoneType,
         )
 
+    @typing_extensions.deprecated("deprecated")
     def get(
         self,
         storage_id: int,
@@ -347,6 +352,9 @@ def get(
         Retrieves detailed information about a specific storage including its
         configuration, credentials, and current status.
 
+        Deprecated: Use GET /v4/`object_storages`/{`storage_id`} for S3 storages or GET
+        /v4/`sftp_storages`/{`storage_id`} for SFTP storages instead.
+
         Args:
           extra_headers: Send extra headers
 
@@ -382,9 +390,7 @@ def link_ssh_key(
         authentication. Only works with SFTP storage types - not applicable to
         S3-compatible storage.
 
-        Deprecated: Use PATCH /provisioning/v3/storages/sftp/{`storage_id`} with
-        `ssh_key_ids` array or PATCH
-        /provisioning/v3/storages/sftp/{`storage_id`}/credentials with `ssh_key_ids`
+        Deprecated: Use PATCH /v4/`sftp_storages`/{`storage_id`} with `ssh_key_ids`
         array instead.
 
         Args:
@@ -405,6 +411,7 @@ def link_ssh_key(
             cast_to=NoneType,
         )
 
+    @typing_extensions.deprecated("deprecated")
     def restore(
         self,
         storage_id: int,
@@ -421,6 +428,8 @@ def restore(
         Restores a previously deleted S3 storage if it was deleted within the last 2
         weeks. SFTP storages cannot be restored.
 
+        Deprecated: Use POST /v4/`object_storages`/{`storage_id`}/restore instead.
+
         Args:
           extra_headers: Send extra headers
 
@@ -461,9 +470,7 @@ def unlink_ssh_key(
         authentication for that key. The key itself remains available for other
         storages.
 
-        Deprecated: Use PATCH /provisioning/v3/storages/sftp/{`storage_id`} with
-        `ssh_key_ids` array or PATCH
-        /provisioning/v3/storages/sftp/{`storage_id`}/credentials with `ssh_key_ids`
+        Deprecated: Use PATCH /v4/`sftp_storages`/{`storage_id`} with `ssh_key_ids`
         array instead.
 
         Args:
@@ -541,8 +548,8 @@ async def create(
         Creates a new storage instance (S3 or SFTP) in the specified location and
         returns the storage details including credentials.
 
-        Deprecated: Use POST /provisioning/v3/storages/`s3_compatible` for S3 storage or
-        POST /provisioning/v3/storages/sftp for SFTP storage instead.
+        Deprecated: Use POST /v4/`object_storages` for S3 storage or POST
+        /v4/`sftp_storages` for SFTP storage instead.
 
         Args:
           location: Geographic location where the storage will be provisioned. Each location
@@ -607,8 +614,8 @@ async def update(
         Used for
         SFTP storages.
 
-        Deprecated: Use PATCH /provisioning/v3/storages/sftp/{`storage_id`} for SFTP
-        storage updates instead.
+        Deprecated: Use PATCH /v4/`sftp_storages`/{`storage_id`} for SFTP storage
+        updates instead.
 
         Args:
           expires: Duration when the storage should expire in format like "1 years 6 months 2 weeks
@@ -639,6 +646,7 @@ async def update(
             cast_to=Storage,
         )
 
+    @typing_extensions.deprecated("deprecated")
     def list(
         self,
         *,
@@ -650,7 +658,7 @@ def list(
         order_by: str | Omit = omit,
         order_direction: Literal["asc", "desc"] | Omit = omit,
         show_deleted: bool | Omit = omit,
-        status: Literal["active", "suspended", "deleted", "pending"] | Omit = omit,
+        status: Literal["active", "creating", "ok", "updating", "deleting", "deleted"] | Omit = omit,
         type: Literal["s3_compatible", "sftp"] | Omit = omit,
         # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
         # The extra values given here take precedence over values defined on the client or passed to this method.
@@ -667,6 +675,9 @@ def list(
         (independent of pagination) results: the current page of storages according to
         limit/offset
 
+        Deprecated: Use GET /v4/`object_storages` for S3 storages or GET
+        /v4/`sftp_storages` for SFTP storages instead.
+
         Args:
           id: Filter by storage ID
 
@@ -739,8 +750,8 @@ async def delete(
 
         This action cannot be undone.
 
-        Deprecated: Use DELETE /provisioning/v3/storages/`s3_compatible`/{`storage_id`}
-        or DELETE /provisioning/v3/storages/sftp/{`storage_id`} instead.
+        Deprecated: Use DELETE /v4/`object_storages`/{`storage_id`} or DELETE
+        /v4/`sftp_storages`/{`storage_id`} instead.
 
         Args:
           extra_headers: Send extra headers
@@ -760,6 +771,7 @@ async def delete(
             cast_to=NoneType,
         )
 
+    @typing_extensions.deprecated("deprecated")
     async def get(
         self,
         storage_id: int,
@@ -775,6 +787,9 @@ async def get(
         Retrieves detailed information about a specific storage including its
         configuration, credentials, and current status.
 
+        Deprecated: Use GET /v4/`object_storages`/{`storage_id`} for S3 storages or GET
+        /v4/`sftp_storages`/{`storage_id`} for SFTP storages instead.
+
         Args:
           extra_headers: Send extra headers
 
@@ -810,9 +825,7 @@ async def link_ssh_key(
         authentication. Only works with SFTP storage types - not applicable to
         S3-compatible storage.
 
-        Deprecated: Use PATCH /provisioning/v3/storages/sftp/{`storage_id`} with
-        `ssh_key_ids` array or PATCH
-        /provisioning/v3/storages/sftp/{`storage_id`}/credentials with `ssh_key_ids`
+        Deprecated: Use PATCH /v4/`sftp_storages`/{`storage_id`} with `ssh_key_ids`
         array instead.
 
         Args:
@@ -833,6 +846,7 @@ async def link_ssh_key(
             cast_to=NoneType,
         )
 
+    @typing_extensions.deprecated("deprecated")
     async def restore(
         self,
         storage_id: int,
@@ -849,6 +863,8 @@ async def restore(
         Restores a previously deleted S3 storage if it was deleted within the last 2
         weeks. SFTP storages cannot be restored.
 
+        Deprecated: Use POST /v4/`object_storages`/{`storage_id`}/restore instead.
+
         Args:
           extra_headers: Send extra headers
 
@@ -891,9 +907,7 @@ async def unlink_ssh_key(
         authentication for that key. The key itself remains available for other
         storages.
 
-        Deprecated: Use PATCH /provisioning/v3/storages/sftp/{`storage_id`} with
-        `ssh_key_ids` array or PATCH
-        /provisioning/v3/storages/sftp/{`storage_id`}/credentials with `ssh_key_ids`
+        Deprecated: Use PATCH /v4/`sftp_storages`/{`storage_id`} with `ssh_key_ids`
         array instead.
 
         Args:
@@ -929,24 +943,30 @@ def __init__(self, storage: StorageResource) -> None:
                 storage.update,  # pyright: ignore[reportDeprecated],
             )
         )
-        self.list = to_raw_response_wrapper(
-            storage.list,
+        self.list = (  # pyright: ignore[reportDeprecated]
+            to_raw_response_wrapper(
+                storage.list,  # pyright: ignore[reportDeprecated],
+            )
         )
         self.delete = (  # pyright: ignore[reportDeprecated]
             to_raw_response_wrapper(
                 storage.delete,  # pyright: ignore[reportDeprecated],
             )
         )
-        self.get = to_raw_response_wrapper(
-            storage.get,
+        self.get = (  # pyright: ignore[reportDeprecated]
+            to_raw_response_wrapper(
+                storage.get,  # pyright: ignore[reportDeprecated],
+            )
         )
         self.link_ssh_key = (  # pyright: ignore[reportDeprecated]
             to_raw_response_wrapper(
                 storage.link_ssh_key,  # pyright: ignore[reportDeprecated],
             )
         )
-        self.restore = to_raw_response_wrapper(
-            storage.restore,
+        self.restore = (  # pyright: ignore[reportDeprecated]
+            to_raw_response_wrapper(
+                storage.restore,  # pyright: ignore[reportDeprecated],
+            )
         )
         self.unlink_ssh_key = (  # pyright: ignore[reportDeprecated]
             to_raw_response_wrapper(
@@ -985,24 +1005,30 @@ def __init__(self, storage: AsyncStorageResource) -> None:
                 storage.update,  # pyright: ignore[reportDeprecated],
             )
         )
-        self.list = async_to_raw_response_wrapper(
-            storage.list,
+        self.list = (  # pyright: ignore[reportDeprecated]
+            async_to_raw_response_wrapper(
+                storage.list,  # pyright: ignore[reportDeprecated],
+            )
         )
         self.delete = (  # pyright: ignore[reportDeprecated]
             async_to_raw_response_wrapper(
                 storage.delete,  # pyright: ignore[reportDeprecated],
             )
         )
-        self.get = async_to_raw_response_wrapper(
-            storage.get,
+        self.get = (  # pyright: ignore[reportDeprecated]
+            async_to_raw_response_wrapper(
+                storage.get,  # pyright: ignore[reportDeprecated],
+            )
         )
         self.link_ssh_key = (  # pyright: ignore[reportDeprecated]
             async_to_raw_response_wrapper(
                 storage.link_ssh_key,  # pyright: ignore[reportDeprecated],
             )
         )
-        self.restore = async_to_raw_response_wrapper(
-            storage.restore,
+        self.restore = (  # pyright: ignore[reportDeprecated]
+            async_to_raw_response_wrapper(
+                storage.restore,  # pyright: ignore[reportDeprecated],
+            )
         )
         self.unlink_ssh_key = (  # pyright: ignore[reportDeprecated]
             async_to_raw_response_wrapper(
@@ -1041,24 +1067,30 @@ def __init__(self, storage: StorageResource) -> None:
                 storage.update,  # pyright: ignore[reportDeprecated],
             )
         )
-        self.list = to_streamed_response_wrapper(
-            storage.list,
+        self.list = (  # pyright: ignore[reportDeprecated]
+            to_streamed_response_wrapper(
+                storage.list,  # pyright: ignore[reportDeprecated],
+            )
         )
         self.delete = (  # pyright: ignore[reportDeprecated]
             to_streamed_response_wrapper(
                 storage.delete,  # pyright: ignore[reportDeprecated],
             )
         )
-        self.get = to_streamed_response_wrapper(
-            storage.get,
+        self.get = (  # pyright: ignore[reportDeprecated]
+            to_streamed_response_wrapper(
+                storage.get,  # pyright: ignore[reportDeprecated],
+            )
         )
         self.link_ssh_key = (  # pyright: ignore[reportDeprecated]
             to_streamed_response_wrapper(
                 storage.link_ssh_key,  # pyright: ignore[reportDeprecated],
             )
         )
-        self.restore = to_streamed_response_wrapper(
-            storage.restore,
+        self.restore = (  # pyright: ignore[reportDeprecated]
+            to_streamed_response_wrapper(
+                storage.restore,  # pyright: ignore[reportDeprecated],
+            )
         )
         self.unlink_ssh_key = (  # pyright: ignore[reportDeprecated]
             to_streamed_response_wrapper(
@@ -1097,24 +1129,30 @@ def __init__(self, storage: AsyncStorageResource) -> None:
                 storage.update,  # pyright: ignore[reportDeprecated],
             )
         )
-        self.list = async_to_streamed_response_wrapper(
-            storage.list,
+        self.list = (  # pyright: ignore[reportDeprecated]
+            async_to_streamed_response_wrapper(
+                storage.list,  # pyright: ignore[reportDeprecated],
+            )
         )
         self.delete = (  # pyright: ignore[reportDeprecated]
             async_to_streamed_response_wrapper(
                 storage.delete,  # pyright: ignore[reportDeprecated],
             )
         )
-        self.get = async_to_streamed_response_wrapper(
-            storage.get,
+        self.get = (  # pyright: ignore[reportDeprecated]
+            async_to_streamed_response_wrapper(
+                storage.get,  # pyright: ignore[reportDeprecated],
+            )
         )
         self.link_ssh_key = (  # pyright: ignore[reportDeprecated]
             async_to_streamed_response_wrapper(
                 storage.link_ssh_key,  # pyright: ignore[reportDeprecated],
             )
         )
-        self.restore = async_to_streamed_response_wrapper(
-            storage.restore,
+        self.restore = (  # pyright: ignore[reportDeprecated]
+            async_to_streamed_response_wrapper(
+                storage.restore,  # pyright: ignore[reportDeprecated],
+            )
         )
         self.unlink_ssh_key = (  # pyright: ignore[reportDeprecated]
             async_to_streamed_response_wrapper(
diff --git a/src/gcore/types/cdn/logs_uploader/logs_uploader_target.py b/src/gcore/types/cdn/logs_uploader/logs_uploader_target.py
index e5f040a9..3b6c7862 100644
--- a/src/gcore/types/cdn/logs_uploader/logs_uploader_target.py
+++ b/src/gcore/types/cdn/logs_uploader/logs_uploader_target.py
@@ -24,6 +24,11 @@
     "ConfigHTTPConfigResponseRetryResponseAction",
     "ConfigHTTPConfigResponseUpload",
     "ConfigHTTPConfigResponseUploadResponseAction",
+    "ConfigAzureBlobConfigResponse",
+    "ConfigAzureBlobConfigResponseAuth",
+    "ConfigAzureBlobConfigResponseAuthConfig",
+    "ConfigAzureBlobConfigResponseAuthConfigAccountKey",
+    "ConfigAzureBlobConfigResponseAuthConfigToken",
     "Status",
 ]
 
@@ -186,6 +191,45 @@ class ConfigHTTPConfigResponse(BaseModel):
     upload: Optional[ConfigHTTPConfigResponseUpload] = None
 
 
+class ConfigAzureBlobConfigResponseAuthConfigAccountKey(BaseModel):
+    account_key: Optional[str] = None
+    """Masked secret value."""
+
+
+class ConfigAzureBlobConfigResponseAuthConfigToken(BaseModel):
+    token: Optional[str] = None
+    """Masked secret value."""
+
+
+ConfigAzureBlobConfigResponseAuthConfig: TypeAlias = Union[
+    ConfigAzureBlobConfigResponseAuthConfigAccountKey, ConfigAzureBlobConfigResponseAuthConfigToken
+]
+
+
+class ConfigAzureBlobConfigResponseAuth(BaseModel):
+    config: ConfigAzureBlobConfigResponseAuthConfig
+    """Authentication credentials. Secret fields are masked with '**\\****'."""
+
+    type: Literal["shared_key", "sas_token"]
+    """Authentication type."""
+
+
+class ConfigAzureBlobConfigResponse(BaseModel):
+    account_name: Optional[str] = None
+    """Azure Blob Storage account name."""
+
+    auth: Optional[ConfigAzureBlobConfigResponseAuth] = None
+
+    container_name: Optional[str] = None
+    """Azure Blob Storage container name."""
+
+    directory: Optional[str] = None
+    """Directory path within the container."""
+
+    endpoint: Optional[str] = None
+    """Custom Azure Blob Storage endpoint URL."""
+
+
 Config: TypeAlias = Union[
     ConfigS3GcoreConfigResponse,
     ConfigS3AmazonConfigResponse,
@@ -195,6 +239,7 @@ class ConfigHTTPConfigResponse(BaseModel):
     ConfigBaseFtpConfig,
     ConfigSftpConfigResponse,
     ConfigHTTPConfigResponse,
+    ConfigAzureBlobConfigResponse,
 ]
 
 
@@ -234,9 +279,9 @@ class LogsUploaderTarget(BaseModel):
     Informs if the specified target is reachable.
     """
 
-    storage_type: Optional[Literal["s3_gcore", "s3_amazon", "s3_oss", "s3_other", "s3_v1", "ftp", "sftp", "http"]] = (
-        None
-    )
+    storage_type: Optional[
+        Literal["s3_gcore", "s3_amazon", "s3_oss", "s3_other", "s3_v1", "ftp", "sftp", "http", "azure_blob"]
+    ] = None
     """Type of storage for logs."""
 
     updated: Optional[datetime] = None
diff --git a/src/gcore/types/cdn/logs_uploader/target_create_params.py b/src/gcore/types/cdn/logs_uploader/target_create_params.py
index d48e6374..e0813316 100644
--- a/src/gcore/types/cdn/logs_uploader/target_create_params.py
+++ b/src/gcore/types/cdn/logs_uploader/target_create_params.py
@@ -24,6 +24,11 @@
     "ConfigHTTPConfigAuthConfig",
     "ConfigHTTPConfigRetry",
     "ConfigHTTPConfigRetryResponseAction",
+    "ConfigAzureBlobConfig",
+    "ConfigAzureBlobConfigAuth",
+    "ConfigAzureBlobConfigAuthConfig",
+    "ConfigAzureBlobConfigAuthConfigAccountKey",
+    "ConfigAzureBlobConfigAuthConfigToken",
 ]
 
 
@@ -31,7 +36,9 @@ class TargetCreateParams(TypedDict, total=False):
     config: Required[Config]
     """Config for specific storage type."""
 
-    storage_type: Required[Literal["s3_gcore", "s3_amazon", "s3_oss", "s3_other", "s3_v1", "ftp", "sftp", "http"]]
+    storage_type: Required[
+        Literal["s3_gcore", "s3_amazon", "s3_oss", "s3_other", "s3_v1", "ftp", "sftp", "http", "azure_blob"]
+    ]
     """Type of storage for logs."""
 
     description: str
@@ -239,6 +246,45 @@ class ConfigHTTPConfig(TypedDict, total=False):
     retry: ConfigHTTPConfigRetry
 
 
+class ConfigAzureBlobConfigAuthConfigAccountKey(TypedDict, total=False):
+    account_key: Required[str]
+    """Azure Blob Storage account key."""
+
+
+class ConfigAzureBlobConfigAuthConfigToken(TypedDict, total=False):
+    token: Required[str]
+    """Azure Blob Storage SAS token."""
+
+
+ConfigAzureBlobConfigAuthConfig: TypeAlias = Union[
+    ConfigAzureBlobConfigAuthConfigAccountKey, ConfigAzureBlobConfigAuthConfigToken
+]
+
+
+class ConfigAzureBlobConfigAuth(TypedDict, total=False):
+    config: Required[ConfigAzureBlobConfigAuthConfig]
+    """Authentication credentials."""
+
+    type: Required[Literal["shared_key", "sas_token"]]
+    """Authentication type."""
+
+
+class ConfigAzureBlobConfig(TypedDict, total=False):
+    account_name: Required[str]
+    """Azure Blob Storage account name."""
+
+    auth: Required[ConfigAzureBlobConfigAuth]
+
+    container_name: Required[str]
+    """Azure Blob Storage container name."""
+
+    directory: Optional[str]
+    """Directory path within the container."""
+
+    endpoint: Optional[str]
+    """Custom Azure Blob Storage endpoint URL."""
+
+
 Config: TypeAlias = Union[
     ConfigS3GcoreConfig,
     ConfigS3AmazonConfig,
@@ -248,4 +294,5 @@ class ConfigHTTPConfig(TypedDict, total=False):
     ConfigFtpConfig,
     ConfigSftpConfig,
     ConfigHTTPConfig,
+    ConfigAzureBlobConfig,
 ]
diff --git a/src/gcore/types/cdn/logs_uploader/target_replace_params.py b/src/gcore/types/cdn/logs_uploader/target_replace_params.py
index 2a97435c..0beba59b 100644
--- a/src/gcore/types/cdn/logs_uploader/target_replace_params.py
+++ b/src/gcore/types/cdn/logs_uploader/target_replace_params.py
@@ -24,6 +24,11 @@
     "ConfigHTTPConfigAuthConfig",
     "ConfigHTTPConfigRetry",
     "ConfigHTTPConfigRetryResponseAction",
+    "ConfigAzureBlobConfig",
+    "ConfigAzureBlobConfigAuth",
+    "ConfigAzureBlobConfigAuthConfig",
+    "ConfigAzureBlobConfigAuthConfigAccountKey",
+    "ConfigAzureBlobConfigAuthConfigToken",
 ]
 
 
@@ -31,7 +36,9 @@ class TargetReplaceParams(TypedDict, total=False):
     config: Required[Config]
     """Config for specific storage type."""
 
-    storage_type: Required[Literal["s3_gcore", "s3_amazon", "s3_oss", "s3_other", "s3_v1", "ftp", "sftp", "http"]]
+    storage_type: Required[
+        Literal["s3_gcore", "s3_amazon", "s3_oss", "s3_other", "s3_v1", "ftp", "sftp", "http", "azure_blob"]
+    ]
     """Type of storage for logs."""
 
     description: str
@@ -239,6 +246,45 @@ class ConfigHTTPConfig(TypedDict, total=False):
     retry: ConfigHTTPConfigRetry
 
 
+class ConfigAzureBlobConfigAuthConfigAccountKey(TypedDict, total=False):
+    account_key: Required[str]
+    """Azure Blob Storage account key."""
+
+
+class ConfigAzureBlobConfigAuthConfigToken(TypedDict, total=False):
+    token: Required[str]
+    """Azure Blob Storage SAS token."""
+
+
+ConfigAzureBlobConfigAuthConfig: TypeAlias = Union[
+    ConfigAzureBlobConfigAuthConfigAccountKey, ConfigAzureBlobConfigAuthConfigToken
+]
+
+
+class ConfigAzureBlobConfigAuth(TypedDict, total=False):
+    config: Required[ConfigAzureBlobConfigAuthConfig]
+    """Authentication credentials."""
+
+    type: Required[Literal["shared_key", "sas_token"]]
+    """Authentication type."""
+
+
+class ConfigAzureBlobConfig(TypedDict, total=False):
+    account_name: Required[str]
+    """Azure Blob Storage account name."""
+
+    auth: Required[ConfigAzureBlobConfigAuth]
+
+    container_name: Required[str]
+    """Azure Blob Storage container name."""
+
+    directory: Optional[str]
+    """Directory path within the container."""
+
+    endpoint: Optional[str]
+    """Custom Azure Blob Storage endpoint URL."""
+
+
 Config: TypeAlias = Union[
     ConfigS3GcoreConfig,
     ConfigS3AmazonConfig,
@@ -248,4 +294,5 @@ class ConfigHTTPConfig(TypedDict, total=False):
     ConfigFtpConfig,
     ConfigSftpConfig,
     ConfigHTTPConfig,
+    ConfigAzureBlobConfig,
 ]
diff --git a/src/gcore/types/cdn/logs_uploader/target_update_params.py b/src/gcore/types/cdn/logs_uploader/target_update_params.py
index 34730db0..a80ed7e6 100644
--- a/src/gcore/types/cdn/logs_uploader/target_update_params.py
+++ b/src/gcore/types/cdn/logs_uploader/target_update_params.py
@@ -24,6 +24,11 @@
     "ConfigHTTPConfigAuthConfig",
     "ConfigHTTPConfigRetry",
     "ConfigHTTPConfigRetryResponseAction",
+    "ConfigAzureBlobConfig",
+    "ConfigAzureBlobConfigAuth",
+    "ConfigAzureBlobConfigAuthConfig",
+    "ConfigAzureBlobConfigAuthConfigAccountKey",
+    "ConfigAzureBlobConfigAuthConfigToken",
 ]
 
 
@@ -37,7 +42,7 @@ class TargetUpdateParams(TypedDict, total=False):
     name: str
     """Name of the target."""
 
-    storage_type: Literal["s3_gcore", "s3_amazon", "s3_oss", "s3_other", "s3_v1", "ftp", "sftp", "http"]
+    storage_type: Literal["s3_gcore", "s3_amazon", "s3_oss", "s3_other", "s3_v1", "ftp", "sftp", "http", "azure_blob"]
     """Type of storage for logs."""
 
 
@@ -239,6 +244,45 @@ class ConfigHTTPConfig(TypedDict, total=False):
     retry: ConfigHTTPConfigRetry
 
 
+class ConfigAzureBlobConfigAuthConfigAccountKey(TypedDict, total=False):
+    account_key: Required[str]
+    """Azure Blob Storage account key."""
+
+
+class ConfigAzureBlobConfigAuthConfigToken(TypedDict, total=False):
+    token: Required[str]
+    """Azure Blob Storage SAS token."""
+
+
+ConfigAzureBlobConfigAuthConfig: TypeAlias = Union[
+    ConfigAzureBlobConfigAuthConfigAccountKey, ConfigAzureBlobConfigAuthConfigToken
+]
+
+
+class ConfigAzureBlobConfigAuth(TypedDict, total=False):
+    config: Required[ConfigAzureBlobConfigAuthConfig]
+    """Authentication credentials."""
+
+    type: Required[Literal["shared_key", "sas_token"]]
+    """Authentication type."""
+
+
+class ConfigAzureBlobConfig(TypedDict, total=False):
+    account_name: Required[str]
+    """Azure Blob Storage account name."""
+
+    auth: Required[ConfigAzureBlobConfigAuth]
+
+    container_name: Required[str]
+    """Azure Blob Storage container name."""
+
+    directory: Optional[str]
+    """Directory path within the container."""
+
+    endpoint: Optional[str]
+    """Custom Azure Blob Storage endpoint URL."""
+
+
 Config: TypeAlias = Union[
     ConfigS3GcoreConfig,
     ConfigS3AmazonConfig,
@@ -248,4 +292,5 @@ class ConfigHTTPConfig(TypedDict, total=False):
     ConfigFtpConfig,
     ConfigSftpConfig,
     ConfigHTTPConfig,
+    ConfigAzureBlobConfig,
 ]
diff --git a/src/gcore/types/cloud/baremetal/__init__.py b/src/gcore/types/cloud/baremetal/__init__.py
index 5c1e9aea..c96b5497 100644
--- a/src/gcore/types/cloud/baremetal/__init__.py
+++ b/src/gcore/types/cloud/baremetal/__init__.py
@@ -7,6 +7,8 @@
 from .flavor_list_params import FlavorListParams as FlavorListParams
 from .server_list_params import ServerListParams as ServerListParams
 from .server_create_params import ServerCreateParams as ServerCreateParams
+from .server_delete_params import ServerDeleteParams as ServerDeleteParams
+from .server_update_params import ServerUpdateParams as ServerUpdateParams
 from .server_rebuild_params import ServerRebuildParams as ServerRebuildParams
 from .baremetal_fixed_address import BaremetalFixedAddress as BaremetalFixedAddress
 from .baremetal_floating_address import BaremetalFloatingAddress as BaremetalFloatingAddress
diff --git a/src/gcore/types/cloud/baremetal/server_create_params.py b/src/gcore/types/cloud/baremetal/server_create_params.py
index 6a0d6aa9..ad257adf 100644
--- a/src/gcore/types/cloud/baremetal/server_create_params.py
+++ b/src/gcore/types/cloud/baremetal/server_create_params.py
@@ -356,9 +356,6 @@ class DDOSProfileField(TypedDict, total=False):
     base_field: Optional[int]
     """Unique identifier of the DDoS protection field being configured"""
 
-    field_name: Optional[str]
-    """Human-readable name of the DDoS protection field being configured"""
-
     field_value: object
 
     value: Optional[str]
diff --git a/src/gcore/types/cloud/baremetal/server_delete_params.py b/src/gcore/types/cloud/baremetal/server_delete_params.py
new file mode 100644
index 00000000..e3c7df2b
--- /dev/null
+++ b/src/gcore/types/cloud/baremetal/server_delete_params.py
@@ -0,0 +1,30 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from __future__ import annotations
+
+from typing_extensions import TypedDict
+
+__all__ = ["ServerDeleteParams"]
+
+
+class ServerDeleteParams(TypedDict, total=False):
+    project_id: int
+    """Project ID"""
+
+    region_id: int
+    """Region ID"""
+
+    all_floating_ips: bool
+    """True if it is required to delete floating IPs assigned to the instance.
+
+    Can't be used with `floating_ip_ids`.
+    """
+
+    floating_ip_ids: str
+    """Comma separated list of floating ids that should be deleted.
+
+    Can't be used with `all_floating_ips`.
+    """
+
+    reserved_fixed_ip_ids: str
+    """Comma separated list of port IDs to be deleted with the instance"""
diff --git a/src/gcore/types/cloud/gpu_baremetal/cluster_action_params.py b/src/gcore/types/cloud/baremetal/server_update_params.py
similarity index 84%
rename from src/gcore/types/cloud/gpu_baremetal/cluster_action_params.py
rename to src/gcore/types/cloud/baremetal/server_update_params.py
index e3208874..539a3f2c 100644
--- a/src/gcore/types/cloud/gpu_baremetal/cluster_action_params.py
+++ b/src/gcore/types/cloud/baremetal/server_update_params.py
@@ -3,24 +3,24 @@
 from __future__ import annotations
 
 from typing import Optional
-from typing_extensions import Literal, Required, TypedDict
+from typing_extensions import TypedDict
 
 from ..tag_update_map_param import TagUpdateMapParam
 
-__all__ = ["ClusterActionParams"]
+__all__ = ["ServerUpdateParams"]
 
 
-class ClusterActionParams(TypedDict, total=False):
+class ServerUpdateParams(TypedDict, total=False):
     project_id: int
     """Project ID"""
 
     region_id: int
     """Region ID"""
 
-    action: Required[Literal["update_tags"]]
-    """Action name"""
+    name: str
+    """Name"""
 
-    tags: Required[Optional[TagUpdateMapParam]]
+    tags: Optional[TagUpdateMapParam]
     """Update key-value tags using JSON Merge Patch semantics (RFC 7386).
 
     Provide key-value pairs to add or update tags. Set tag values to `null` to
diff --git a/src/gcore/types/cloud/gpu_baremetal/__init__.py b/src/gcore/types/cloud/gpu_baremetal/__init__.py
index ccd8f847..6894a9ac 100644
--- a/src/gcore/types/cloud/gpu_baremetal/__init__.py
+++ b/src/gcore/types/cloud/gpu_baremetal/__init__.py
@@ -3,10 +3,10 @@
 from __future__ import annotations
 
 from .cluster_list_params import ClusterListParams as ClusterListParams
-from .cluster_action_params import ClusterActionParams as ClusterActionParams
 from .cluster_create_params import ClusterCreateParams as ClusterCreateParams
 from .cluster_delete_params import ClusterDeleteParams as ClusterDeleteParams
 from .cluster_resize_params import ClusterResizeParams as ClusterResizeParams
+from .cluster_update_params import ClusterUpdateParams as ClusterUpdateParams
 from .gpu_baremetal_cluster import GPUBaremetalCluster as GPUBaremetalCluster
 from .cluster_update_servers_settings_params import (
     ClusterUpdateServersSettingsParams as ClusterUpdateServersSettingsParams,
diff --git a/src/gcore/types/cloud/gpu_baremetal/cluster_update_params.py b/src/gcore/types/cloud/gpu_baremetal/cluster_update_params.py
new file mode 100644
index 00000000..2cdf95be
--- /dev/null
+++ b/src/gcore/types/cloud/gpu_baremetal/cluster_update_params.py
@@ -0,0 +1,46 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from __future__ import annotations
+
+from typing import Optional
+from typing_extensions import TypedDict
+
+from ..tag_update_map_param import TagUpdateMapParam
+
+__all__ = ["ClusterUpdateParams"]
+
+
+class ClusterUpdateParams(TypedDict, total=False):
+    project_id: int
+    """Project ID"""
+
+    region_id: int
+    """Region ID"""
+
+    name: str
+    """Cluster name"""
+
+    tags: Optional[TagUpdateMapParam]
+    """Update key-value tags using JSON Merge Patch semantics (RFC 7386).
+
+    Provide key-value pairs to add or update tags. Set tag values to `null` to
+    remove tags. Unspecified tags remain unchanged. Read-only tags are always
+    preserved and cannot be modified.
+
+    **Examples:**
+
+    - **Add/update tags:**
+      `{'tags': {'environment': 'production', 'team': 'backend'}}` adds new tags or
+      updates existing ones.
+    - **Delete tags:** `{'tags': {'old_tag': null}}` removes specific tags.
+    - **Remove all tags:** `{'tags': null}` removes all user-managed tags (read-only
+      tags are preserved).
+    - **Partial update:** `{'tags': {'environment': 'staging'}}` only updates
+      specified tags.
+    - **Mixed operations:**
+      `{'tags': {'environment': 'production', 'cost_center': 'engineering', 'deprecated_tag': null}}`
+      adds/updates 'environment' and 'cost_center' while removing 'deprecated_tag',
+      preserving other existing tags.
+    - **Replace all:** first delete existing tags with null values, then add new
+      ones in the same request.
+    """
diff --git a/src/gcore/types/cloud/gpu_virtual/cluster_action_params.py b/src/gcore/types/cloud/gpu_virtual/cluster_action_params.py
index e620f9ee..f7d04751 100644
--- a/src/gcore/types/cloud/gpu_virtual/cluster_action_params.py
+++ b/src/gcore/types/cloud/gpu_virtual/cluster_action_params.py
@@ -2,18 +2,15 @@
 
 from __future__ import annotations
 
-from typing import Union, Optional
+from typing import Union
 from typing_extensions import Literal, Required, TypeAlias, TypedDict
 
-from ..tag_update_map_param import TagUpdateMapParam
-
 __all__ = [
     "ClusterActionParams",
     "StartVirtualGPUClusterSerializer",
     "StopVirtualGPUClusterSerializer",
     "SoftRebootVirtualGPUClusterSerializer",
     "HardRebootVirtualGPUClusterSerializer",
-    "UpdateTagsGPUClusterSerializer",
     "ResizeVirtualGPUClusterSerializer",
 ]
 
@@ -62,42 +59,6 @@ class HardRebootVirtualGPUClusterSerializer(TypedDict, total=False):
     """Action name"""
 
 
-class UpdateTagsGPUClusterSerializer(TypedDict, total=False):
-    project_id: int
-    """Project ID"""
-
-    region_id: int
-    """Region ID"""
-
-    action: Required[Literal["update_tags"]]
-    """Action name"""
-
-    tags: Required[Optional[TagUpdateMapParam]]
-    """Update key-value tags using JSON Merge Patch semantics (RFC 7386).
-
-    Provide key-value pairs to add or update tags. Set tag values to `null` to
-    remove tags. Unspecified tags remain unchanged. Read-only tags are always
-    preserved and cannot be modified.
-
-    **Examples:**
-
-    - **Add/update tags:**
-      `{'tags': {'environment': 'production', 'team': 'backend'}}` adds new tags or
-      updates existing ones.
-    - **Delete tags:** `{'tags': {'old_tag': null}}` removes specific tags.
-    - **Remove all tags:** `{'tags': null}` removes all user-managed tags (read-only
-      tags are preserved).
-    - **Partial update:** `{'tags': {'environment': 'staging'}}` only updates
-      specified tags.
-    - **Mixed operations:**
-      `{'tags': {'environment': 'production', 'cost_center': 'engineering', 'deprecated_tag': null}}`
-      adds/updates 'environment' and 'cost_center' while removing 'deprecated_tag',
-      preserving other existing tags.
-    - **Replace all:** first delete existing tags with null values, then add new
-      ones in the same request.
-    """
-
-
 class ResizeVirtualGPUClusterSerializer(TypedDict, total=False):
     project_id: int
     """Project ID"""
@@ -117,6 +78,5 @@ class ResizeVirtualGPUClusterSerializer(TypedDict, total=False):
     StopVirtualGPUClusterSerializer,
     SoftRebootVirtualGPUClusterSerializer,
     HardRebootVirtualGPUClusterSerializer,
-    UpdateTagsGPUClusterSerializer,
     ResizeVirtualGPUClusterSerializer,
 ]
diff --git a/src/gcore/types/cloud/gpu_virtual/cluster_update_params.py b/src/gcore/types/cloud/gpu_virtual/cluster_update_params.py
index 8ce9c924..2cdf95be 100644
--- a/src/gcore/types/cloud/gpu_virtual/cluster_update_params.py
+++ b/src/gcore/types/cloud/gpu_virtual/cluster_update_params.py
@@ -2,7 +2,10 @@
 
 from __future__ import annotations
 
-from typing_extensions import Required, TypedDict
+from typing import Optional
+from typing_extensions import TypedDict
+
+from ..tag_update_map_param import TagUpdateMapParam
 
 __all__ = ["ClusterUpdateParams"]
 
@@ -14,5 +17,30 @@ class ClusterUpdateParams(TypedDict, total=False):
     region_id: int
     """Region ID"""
 
-    name: Required[str]
+    name: str
     """Cluster name"""
+
+    tags: Optional[TagUpdateMapParam]
+    """Update key-value tags using JSON Merge Patch semantics (RFC 7386).
+
+    Provide key-value pairs to add or update tags. Set tag values to `null` to
+    remove tags. Unspecified tags remain unchanged. Read-only tags are always
+    preserved and cannot be modified.
+
+    **Examples:**
+
+    - **Add/update tags:**
+      `{'tags': {'environment': 'production', 'team': 'backend'}}` adds new tags or
+      updates existing ones.
+    - **Delete tags:** `{'tags': {'old_tag': null}}` removes specific tags.
+    - **Remove all tags:** `{'tags': null}` removes all user-managed tags (read-only
+      tags are preserved).
+    - **Partial update:** `{'tags': {'environment': 'staging'}}` only updates
+      specified tags.
+    - **Mixed operations:**
+      `{'tags': {'environment': 'production', 'cost_center': 'engineering', 'deprecated_tag': null}}`
+      adds/updates 'environment' and 'cost_center' while removing 'deprecated_tag',
+      preserving other existing tags.
+    - **Replace all:** first delete existing tags with null values, then add new
+      ones in the same request.
+    """
diff --git a/src/gcore/types/cloud/load_balancers/l7_policies/rule_replace_params.py b/src/gcore/types/cloud/load_balancers/l7_policies/rule_replace_params.py
index ab64c93b..39155d5c 100644
--- a/src/gcore/types/cloud/load_balancers/l7_policies/rule_replace_params.py
+++ b/src/gcore/types/cloud/load_balancers/l7_policies/rule_replace_params.py
@@ -19,7 +19,7 @@ class RuleReplaceParams(TypedDict, total=False):
     l7policy_id: Required[str]
     """L7 policy ID"""
 
-    compare_type: Required[Literal["CONTAINS", "ENDS_WITH", "EQUAL_TO", "REGEX", "STARTS_WITH"]]
+    compare_type: Literal["CONTAINS", "ENDS_WITH", "EQUAL_TO", "REGEX", "STARTS_WITH"]
     """The comparison type for the L7 rule"""
 
     invert: bool
diff --git a/src/gcore/types/fastedge/__init__.py b/src/gcore/types/fastedge/__init__.py
index 59553df9..9885ca38 100644
--- a/src/gcore/types/fastedge/__init__.py
+++ b/src/gcore/types/fastedge/__init__.py
@@ -12,6 +12,7 @@
 from .app_short import AppShort as AppShort
 from .call_status import CallStatus as CallStatus
 from .binary_short import BinaryShort as BinaryShort
+from .secret_param import SecretParam as SecretParam
 from .secret_short import SecretShort as SecretShort
 from .duration_stats import DurationStats as DurationStats
 from .kv_store_short import KvStoreShort as KvStoreShort
diff --git a/src/gcore/types/fastedge/app.py b/src/gcore/types/fastedge/app.py
index d8cb8b41..ea6ff027 100644
--- a/src/gcore/types/fastedge/app.py
+++ b/src/gcore/types/fastedge/app.py
@@ -40,10 +40,10 @@ class App(BaseModel):
     """Wasm API type"""
 
     binary: Optional[int] = None
-    """Binary ID"""
+    """ID of the WebAssembly binary to deploy"""
 
     comment: Optional[str] = None
-    """App description"""
+    """Optional human-readable description of the application's purpose"""
 
     debug_until: Optional[datetime] = None
     """When debugging finishes"""
@@ -52,10 +52,14 @@ class App(BaseModel):
     """Environment variables"""
 
     log: Optional[Literal["kafka", "none"]] = None
-    """Logging channel (by default - kafka, which allows exploring logs with API)"""
+    """Logging channel.
+
+    Use 'kafka' to enable log collection (queryable via API), or 'none' to disable
+    logging.
+    """
 
     name: Optional[str] = None
-    """App name"""
+    """Unique application name (alphanumeric, hyphens allowed)"""
 
     networks: Optional[List[str]] = None
     """Networks"""
@@ -78,8 +82,6 @@ class App(BaseModel):
     0 - draft (inactive)
     1 - enabled
     2 - disabled
-    3 - hourly call limit exceeded
-    4 - daily call limit exceeded
     5 - suspended
     """
 
@@ -93,4 +95,4 @@ class App(BaseModel):
     """Template name"""
 
     url: Optional[str] = None
-    """App URL"""
+    """Auto-generated URL where the application is accessible"""
diff --git a/src/gcore/types/fastedge/app_create_params.py b/src/gcore/types/fastedge/app_create_params.py
index fa8f8f0f..53b9a0b1 100644
--- a/src/gcore/types/fastedge/app_create_params.py
+++ b/src/gcore/types/fastedge/app_create_params.py
@@ -10,22 +10,29 @@
 
 class AppCreateParams(TypedDict, total=False):
     binary: int
-    """Binary ID"""
+    """ID of the WebAssembly binary to deploy"""
 
     comment: str
-    """App description"""
+    """Optional human-readable description of the application's purpose"""
 
     debug: bool
-    """Switch on logging for 30 minutes (switched off by default)"""
+    """Enable verbose debug logging for 30 minutes.
+
+    Automatically expires to prevent performance impact.
+    """
 
     env: Dict[str, str]
     """Environment variables"""
 
     log: Optional[Literal["kafka", "none"]]
-    """Logging channel (by default - kafka, which allows exploring logs with API)"""
+    """Logging channel.
+
+    Use 'kafka' to enable log collection (queryable via API), or 'none' to disable
+    logging.
+    """
 
     name: str
-    """App name"""
+    """Unique application name (alphanumeric, hyphens allowed)"""
 
     rsp_headers: Dict[str, str]
     """Extra headers to add to the response"""
@@ -39,8 +46,6 @@ class AppCreateParams(TypedDict, total=False):
     0 - draft (inactive)
     1 - enabled
     2 - disabled
-    3 - hourly call limit exceeded
-    4 - daily call limit exceeded
     5 - suspended
     """
 
diff --git a/src/gcore/types/fastedge/app_list_params.py b/src/gcore/types/fastedge/app_list_params.py
index e55c8558..2937e1b6 100644
--- a/src/gcore/types/fastedge/app_list_params.py
+++ b/src/gcore/types/fastedge/app_list_params.py
@@ -16,24 +16,24 @@ class AppListParams(TypedDict, total=False):
     """
 
     binary: int
-    """Binary ID"""
+    """Filter by binary ID (shows apps using this binary)"""
 
     limit: int
-    """Limit for pagination"""
+    """Maximum number of results to return"""
 
     name: str
-    """Name of the app"""
+    """Filter by application name (case-insensitive partial match)"""
 
     offset: int
-    """Offset for pagination"""
+    """Number of results to skip for pagination"""
 
     ordering: Literal[
         "name", "-name", "status", "-status", "id", "-id", "template", "-template", "binary", "-binary", "plan", "-plan"
     ]
-    """Ordering"""
+    """Sort order. Use - prefix for descending (e.g., -name sorts by name descending)"""
 
     plan: int
-    """Plan ID"""
+    """Filter by plan ID"""
 
     status: int
     """
@@ -47,4 +47,4 @@ class AppListParams(TypedDict, total=False):
     """
 
     template: int
-    """Template ID"""
+    """Filter by template ID (shows apps created from this template)"""
diff --git a/src/gcore/types/fastedge/app_param.py b/src/gcore/types/fastedge/app_param.py
index c49448b8..22f917ab 100644
--- a/src/gcore/types/fastedge/app_param.py
+++ b/src/gcore/types/fastedge/app_param.py
@@ -24,22 +24,29 @@ class Stores(TypedDict, total=False):
 
 class AppParam(TypedDict, total=False):
     binary: int
-    """Binary ID"""
+    """ID of the WebAssembly binary to deploy"""
 
     comment: str
-    """App description"""
+    """Optional human-readable description of the application's purpose"""
 
     debug: bool
-    """Switch on logging for 30 minutes (switched off by default)"""
+    """Enable verbose debug logging for 30 minutes.
+
+    Automatically expires to prevent performance impact.
+    """
 
     env: Dict[str, str]
     """Environment variables"""
 
     log: Optional[Literal["kafka", "none"]]
-    """Logging channel (by default - kafka, which allows exploring logs with API)"""
+    """Logging channel.
+
+    Use 'kafka' to enable log collection (queryable via API), or 'none' to disable
+    logging.
+    """
 
     name: str
-    """App name"""
+    """Unique application name (alphanumeric, hyphens allowed)"""
 
     rsp_headers: Dict[str, str]
     """Extra headers to add to the response"""
@@ -53,8 +60,6 @@ class AppParam(TypedDict, total=False):
     0 - draft (inactive)
     1 - enabled
     2 - disabled
-    3 - hourly call limit exceeded
-    4 - daily call limit exceeded
     5 - suspended
     """
 
diff --git a/src/gcore/types/fastedge/app_update_params.py b/src/gcore/types/fastedge/app_update_params.py
index af917ce8..999c134b 100644
--- a/src/gcore/types/fastedge/app_update_params.py
+++ b/src/gcore/types/fastedge/app_update_params.py
@@ -10,22 +10,29 @@
 
 class AppUpdateParams(TypedDict, total=False):
     binary: int
-    """Binary ID"""
+    """ID of the WebAssembly binary to deploy"""
 
     comment: str
-    """App description"""
+    """Optional human-readable description of the application's purpose"""
 
     debug: bool
-    """Switch on logging for 30 minutes (switched off by default)"""
+    """Enable verbose debug logging for 30 minutes.
+
+    Automatically expires to prevent performance impact.
+    """
 
     env: Dict[str, str]
     """Environment variables"""
 
     log: Optional[Literal["kafka", "none"]]
-    """Logging channel (by default - kafka, which allows exploring logs with API)"""
+    """Logging channel.
+
+    Use 'kafka' to enable log collection (queryable via API), or 'none' to disable
+    logging.
+    """
 
     name: str
-    """App name"""
+    """Unique application name (alphanumeric, hyphens allowed)"""
 
     rsp_headers: Dict[str, str]
     """Extra headers to add to the response"""
@@ -39,8 +46,6 @@ class AppUpdateParams(TypedDict, total=False):
     0 - draft (inactive)
     1 - enabled
     2 - disabled
-    3 - hourly call limit exceeded
-    4 - daily call limit exceeded
     5 - suspended
     """
 
diff --git a/src/gcore/types/fastedge/apps/log.py b/src/gcore/types/fastedge/apps/log.py
index eb04e9de..ddfee5b1 100644
--- a/src/gcore/types/fastedge/apps/log.py
+++ b/src/gcore/types/fastedge/apps/log.py
@@ -10,19 +10,19 @@
 
 class Log(BaseModel):
     id: Optional[str] = None
-    """Id of the log"""
+    """Unique identifier for this log entry"""
 
     app_name: Optional[str] = None
-    """Name of the application"""
+    """Name of the application that generated this log"""
 
     client_ip: Optional[str] = None
-    """Client IP"""
+    """IP address of the client that triggered the log"""
 
     edge: Optional[str] = None
-    """Edge name"""
+    """Edge location where the log originated"""
 
     log: Optional[str] = None
-    """Log message"""
+    """The actual log message content"""
 
     timestamp: Optional[datetime] = None
-    """Timestamp of a log in RFC3339 format"""
+    """When the log was generated (RFC3339 format)"""
diff --git a/src/gcore/types/fastedge/apps/log_list_params.py b/src/gcore/types/fastedge/apps/log_list_params.py
index 8d53640a..059cc1e9 100644
--- a/src/gcore/types/fastedge/apps/log_list_params.py
+++ b/src/gcore/types/fastedge/apps/log_list_params.py
@@ -19,7 +19,10 @@ class LogListParams(TypedDict, total=False):
     """Edge name"""
 
     from_: Annotated[Union[str, datetime], PropertyInfo(alias="from", format="iso8601")]
-    """Reporting period start time, RFC3339 format. Default 1 hour ago."""
+    """Start of log retrieval period in RFC3339 format.
+
+    Defaults to 1 hour ago if not specified.
+    """
 
     limit: int
     """Limit for pagination"""
diff --git a/src/gcore/types/fastedge/binary.py b/src/gcore/types/fastedge/binary.py
index 90a96496..ad1f690c 100644
--- a/src/gcore/types/fastedge/binary.py
+++ b/src/gcore/types/fastedge/binary.py
@@ -20,6 +20,7 @@ class Binary(BaseModel):
     0 - unknown
     1 - Rust
     2 - JavaScript
+    3 - Go
     """
 
     status: int
diff --git a/src/gcore/types/fastedge/binary_short.py b/src/gcore/types/fastedge/binary_short.py
index e9ab6732..4c3fe0c0 100644
--- a/src/gcore/types/fastedge/binary_short.py
+++ b/src/gcore/types/fastedge/binary_short.py
@@ -28,5 +28,14 @@ class BinaryShort(BaseModel):
     checksum: Optional[str] = None
     """MD5 hash of the binary"""
 
+    source: Optional[int] = None
+    """
+    Source language:
+    0 - unknown
+    1 - Rust
+    2 - JavaScript
+    3 - Go
+    """
+
     unref_since: Optional[str] = None
     """Not used since (UTC)"""
diff --git a/src/gcore/types/fastedge/client.py b/src/gcore/types/fastedge/client.py
index 80cc2901..a3938a05 100644
--- a/src/gcore/types/fastedge/client.py
+++ b/src/gcore/types/fastedge/client.py
@@ -39,8 +39,6 @@ class Client(BaseModel):
     Status code:
     1 - enabled
     2 - disabled
-    3 - hourly call limit exceeded
-    4 - daily call limit exceeded
     5 - suspended
     """
 
diff --git a/src/gcore/types/fastedge/kv_store.py b/src/gcore/types/fastedge/kv_store.py
index 2b9a1d4c..1dc13fff 100644
--- a/src/gcore/types/fastedge/kv_store.py
+++ b/src/gcore/types/fastedge/kv_store.py
@@ -12,10 +12,10 @@ class Byod(BaseModel):
     """BYOD (Bring Your Own Data) settings"""
 
     prefix: str
-    """Key prefix"""
+    """Key prefix to namespace your data within the external store"""
 
     url: str
-    """URL to connect to"""
+    """Connection URL for external storage service (Redis, PostgreSQL, etc.)"""
 
 
 class KvStore(BaseModel):
diff --git a/src/gcore/types/fastedge/kv_store_create_params.py b/src/gcore/types/fastedge/kv_store_create_params.py
index abd3df61..a092dc5e 100644
--- a/src/gcore/types/fastedge/kv_store_create_params.py
+++ b/src/gcore/types/fastedge/kv_store_create_params.py
@@ -22,7 +22,7 @@ class Byod(TypedDict, total=False):
     """BYOD (Bring Your Own Data) settings"""
 
     prefix: Required[str]
-    """Key prefix"""
+    """Key prefix to namespace your data within the external store"""
 
     url: Required[str]
-    """URL to connect to"""
+    """Connection URL for external storage service (Redis, PostgreSQL, etc.)"""
diff --git a/src/gcore/types/fastedge/kv_store_list_params.py b/src/gcore/types/fastedge/kv_store_list_params.py
index 50bac08a..97c6be50 100644
--- a/src/gcore/types/fastedge/kv_store_list_params.py
+++ b/src/gcore/types/fastedge/kv_store_list_params.py
@@ -9,10 +9,10 @@
 
 class KvStoreListParams(TypedDict, total=False):
     app_id: int
-    """App ID"""
+    """Filter stores by application ID. Returns only stores associated with this app."""
 
     limit: int
-    """Limit for pagination"""
+    """Maximum number of stores to return per page"""
 
     offset: int
-    """Offset for pagination"""
+    """Number of stores to skip for pagination"""
diff --git a/src/gcore/types/fastedge/kv_store_replace_params.py b/src/gcore/types/fastedge/kv_store_replace_params.py
index 25b2b5bb..d8f32845 100644
--- a/src/gcore/types/fastedge/kv_store_replace_params.py
+++ b/src/gcore/types/fastedge/kv_store_replace_params.py
@@ -22,7 +22,7 @@ class Byod(TypedDict, total=False):
     """BYOD (Bring Your Own Data) settings"""
 
     prefix: Required[str]
-    """Key prefix"""
+    """Key prefix to namespace your data within the external store"""
 
     url: Required[str]
-    """URL to connect to"""
+    """Connection URL for external storage service (Redis, PostgreSQL, etc.)"""
diff --git a/src/gcore/types/fastedge/secret.py b/src/gcore/types/fastedge/secret.py
index bb29718f..8e79a259 100644
--- a/src/gcore/types/fastedge/secret.py
+++ b/src/gcore/types/fastedge/secret.py
@@ -9,10 +9,13 @@
 
 class SecretSlot(BaseModel):
     slot: int
-    """Secret slot ID."""
+    """
+    Unix timestamp (seconds since epoch) indicating when this secret version becomes
+    active. Use for time-based secret rotation.
+    """
 
     checksum: Optional[str] = None
-    """A checksum of the secret value for integrity verification."""
+    """SHA-256 hash of the decrypted value for integrity verification (auto-generated)"""
 
 
 class Secret(BaseModel):
diff --git a/src/gcore/types/fastedge/secret_create_params.py b/src/gcore/types/fastedge/secret_create_params.py
index 861dcc02..658a3aa2 100644
--- a/src/gcore/types/fastedge/secret_create_params.py
+++ b/src/gcore/types/fastedge/secret_create_params.py
@@ -21,7 +21,10 @@ class SecretCreateParams(TypedDict, total=False):
 
 class SecretSlot(TypedDict, total=False):
     slot: Required[int]
-    """Secret slot ID."""
+    """
+    Unix timestamp (seconds since epoch) indicating when this secret version becomes
+    active. Use for time-based secret rotation.
+    """
 
     value: str
-    """The value of the secret."""
+    """The plaintext secret value. Will be encrypted with AES-256-GCM before storage."""
diff --git a/src/gcore/types/fastedge/secret_delete_params.py b/src/gcore/types/fastedge/secret_delete_params.py
index 3f275df7..bfec30b1 100644
--- a/src/gcore/types/fastedge/secret_delete_params.py
+++ b/src/gcore/types/fastedge/secret_delete_params.py
@@ -9,4 +9,4 @@
 
 class SecretDeleteParams(TypedDict, total=False):
     force: bool
-    """Force delete secret even if it is used in slots"""
+    """When true, deletes secret even if used by applications. Defaults to false."""
diff --git a/src/gcore/types/fastedge/secret_list_response.py b/src/gcore/types/fastedge/secret_list_response.py
index a8768eb2..de96d8a9 100644
--- a/src/gcore/types/fastedge/secret_list_response.py
+++ b/src/gcore/types/fastedge/secret_list_response.py
@@ -9,4 +9,7 @@
 
 
 class SecretListResponse(BaseModel):
+    count: int
+    """Total number of secrets matching the filters"""
+
     secrets: List[SecretShort]
diff --git a/src/gcore/types/fastedge/secret_param.py b/src/gcore/types/fastedge/secret_param.py
new file mode 100644
index 00000000..d394055b
--- /dev/null
+++ b/src/gcore/types/fastedge/secret_param.py
@@ -0,0 +1,30 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from __future__ import annotations
+
+from typing import Iterable
+from typing_extensions import Required, TypedDict
+
+__all__ = ["SecretParam", "SecretSlot"]
+
+
+class SecretSlot(TypedDict, total=False):
+    slot: Required[int]
+    """
+    Unix timestamp (seconds since epoch) indicating when this secret version becomes
+    active. Use for time-based secret rotation.
+    """
+
+    value: str
+    """The plaintext secret value. Will be encrypted with AES-256-GCM before storage."""
+
+
+class SecretParam(TypedDict, total=False):
+    comment: str
+    """A description or comment about the secret."""
+
+    name: str
+    """The unique name of the secret."""
+
+    secret_slots: Iterable[SecretSlot]
+    """A list of secret slots associated with this secret."""
diff --git a/src/gcore/types/fastedge/secret_replace_params.py b/src/gcore/types/fastedge/secret_replace_params.py
index 54ddc7f2..61ea7e95 100644
--- a/src/gcore/types/fastedge/secret_replace_params.py
+++ b/src/gcore/types/fastedge/secret_replace_params.py
@@ -2,26 +2,16 @@
 
 from __future__ import annotations
 
-from typing import Iterable
 from typing_extensions import Required, TypedDict
 
-__all__ = ["SecretReplaceParams", "SecretSlot"]
+from .secret_param import SecretParam
 
+__all__ = ["SecretReplaceParams", "Body"]
 
-class SecretReplaceParams(TypedDict, total=False):
-    name: Required[str]
-    """The unique name of the secret."""
-
-    comment: str
-    """A description or comment about the secret."""
-
-    secret_slots: Iterable[SecretSlot]
-    """A list of secret slots associated with this secret."""
 
+class SecretReplaceParams(TypedDict, total=False):
+    body: Required[Body]
 
-class SecretSlot(TypedDict, total=False):
-    slot: Required[int]
-    """Secret slot ID."""
 
-    value: str
-    """The value of the secret."""
+class Body(SecretParam, total=False):
+    pass
diff --git a/src/gcore/types/fastedge/secret_update_params.py b/src/gcore/types/fastedge/secret_update_params.py
index 09a14344..c3115bb0 100644
--- a/src/gcore/types/fastedge/secret_update_params.py
+++ b/src/gcore/types/fastedge/secret_update_params.py
@@ -21,7 +21,10 @@ class SecretUpdateParams(TypedDict, total=False):
 
 class SecretSlot(TypedDict, total=False):
     slot: Required[int]
-    """Secret slot ID."""
+    """
+    Unix timestamp (seconds since epoch) indicating when this secret version becomes
+    active. Use for time-based secret rotation.
+    """
 
     value: str
-    """The value of the secret."""
+    """The plaintext secret value. Will be encrypted with AES-256-GCM before storage."""
diff --git a/src/gcore/types/fastedge/statistic_get_call_series_params.py b/src/gcore/types/fastedge/statistic_get_call_series_params.py
index a1cd6f68..0d59a265 100644
--- a/src/gcore/types/fastedge/statistic_get_call_series_params.py
+++ b/src/gcore/types/fastedge/statistic_get_call_series_params.py
@@ -13,16 +13,19 @@
 
 class StatisticGetCallSeriesParams(TypedDict, total=False):
     from_: Required[Annotated[Union[str, datetime], PropertyInfo(alias="from", format="iso8601")]]
-    """Reporting period start time, RFC3339 format"""
+    """Reporting period start time in RFC3339 format"""
 
     step: Required[int]
-    """Reporting granularity, in seconds"""
+    """Reporting time granularity in seconds.
+
+    Common values are 60 (1 minute), 300 (5 minutes), 3600 (1 hour).
+    """
 
     to: Required[Annotated[Union[str, datetime], PropertyInfo(format="iso8601")]]
-    """Reporting period end time (not included into reporting period), RFC3339 format"""
+    """Reporting period end time in RFC3339 format (exclusive)"""
 
     id: int
-    """App ID"""
+    """Filter statistics by specific application ID"""
 
     network: str
-    """Network name"""
+    """Filter statistics by edge network name"""
diff --git a/src/gcore/types/fastedge/statistic_get_duration_series_params.py b/src/gcore/types/fastedge/statistic_get_duration_series_params.py
index c9170ee8..abf7bc9b 100644
--- a/src/gcore/types/fastedge/statistic_get_duration_series_params.py
+++ b/src/gcore/types/fastedge/statistic_get_duration_series_params.py
@@ -13,16 +13,19 @@
 
 class StatisticGetDurationSeriesParams(TypedDict, total=False):
     from_: Required[Annotated[Union[str, datetime], PropertyInfo(alias="from", format="iso8601")]]
-    """Reporting period start time, RFC3339 format"""
+    """Reporting period start time in RFC3339 format"""
 
     step: Required[int]
-    """Reporting granularity, in seconds"""
+    """Reporting time granularity in seconds.
+
+    Common values are 60 (1 minute), 300 (5 minutes), 3600 (1 hour).
+    """
 
     to: Required[Annotated[Union[str, datetime], PropertyInfo(format="iso8601")]]
-    """Reporting period end time (not included into reporting period), RFC3339 format"""
+    """Reporting period end time in RFC3339 format (exclusive)"""
 
     id: int
-    """App ID"""
+    """Filter statistics by specific application ID"""
 
     network: str
-    """Network name"""
+    """Filter statistics by edge network name"""
diff --git a/src/gcore/types/fastedge/template.py b/src/gcore/types/fastedge/template.py
index 71efe55c..b7a75e19 100644
--- a/src/gcore/types/fastedge/template.py
+++ b/src/gcore/types/fastedge/template.py
@@ -13,10 +13,10 @@ class Template(BaseModel):
     """Wasm API type"""
 
     binary_id: int
-    """Binary ID"""
+    """ID of the WebAssembly binary to use for this template"""
 
     name: str
-    """Name of the template"""
+    """Unique name for the template (used for identification and searching)"""
 
     owned: bool
     """Is the template owned by user?"""
@@ -25,7 +25,7 @@ class Template(BaseModel):
     """Parameters"""
 
     long_descr: Optional[str] = None
-    """Long description of the template"""
+    """Detailed markdown description explaining template features and usage"""
 
     short_descr: Optional[str] = None
-    """Short description of the template"""
+    """Brief one-line description displayed in template listings"""
diff --git a/src/gcore/types/fastedge/template_create_params.py b/src/gcore/types/fastedge/template_create_params.py
index e5f2ad12..e66379fa 100644
--- a/src/gcore/types/fastedge/template_create_params.py
+++ b/src/gcore/types/fastedge/template_create_params.py
@@ -12,10 +12,10 @@
 
 class TemplateCreateParams(TypedDict, total=False):
     binary_id: Required[int]
-    """Binary ID"""
+    """ID of the WebAssembly binary to use for this template"""
 
     name: Required[str]
-    """Name of the template"""
+    """Unique name for the template (used for identification and searching)"""
 
     owned: Required[bool]
     """Is the template owned by user?"""
@@ -24,7 +24,7 @@ class TemplateCreateParams(TypedDict, total=False):
     """Parameters"""
 
     long_descr: str
-    """Long description of the template"""
+    """Detailed markdown description explaining template features and usage"""
 
     short_descr: str
-    """Short description of the template"""
+    """Brief one-line description displayed in template listings"""
diff --git a/src/gcore/types/fastedge/template_delete_params.py b/src/gcore/types/fastedge/template_delete_params.py
index e403aa0e..232acff4 100644
--- a/src/gcore/types/fastedge/template_delete_params.py
+++ b/src/gcore/types/fastedge/template_delete_params.py
@@ -9,4 +9,4 @@
 
 class TemplateDeleteParams(TypedDict, total=False):
     force: bool
-    """Force template deletion even if it is shared to groups"""
+    """When true, deletes template even if shared with groups. Defaults to false."""
diff --git a/src/gcore/types/fastedge/template_list_params.py b/src/gcore/types/fastedge/template_list_params.py
index 09009d39..e8a207e6 100644
--- a/src/gcore/types/fastedge/template_list_params.py
+++ b/src/gcore/types/fastedge/template_list_params.py
@@ -16,10 +16,13 @@ class TemplateListParams(TypedDict, total=False):
     """
 
     limit: int
-    """Limit for pagination"""
+    """Maximum number of results to return"""
 
     offset: int
-    """Offset for pagination"""
+    """Number of results to skip for pagination"""
 
     only_mine: bool
-    """Only my templates"""
+    """When true, returns only templates created by the client.
+
+    When false, includes shared templates.
+    """
diff --git a/src/gcore/types/fastedge/template_parameter.py b/src/gcore/types/fastedge/template_parameter.py
index 48249128..7ec55ed5 100644
--- a/src/gcore/types/fastedge/template_parameter.py
+++ b/src/gcore/types/fastedge/template_parameter.py
@@ -9,14 +9,34 @@
 
 
 class TemplateParameter(BaseModel):
-    data_type: Literal["string", "number", "date", "time", "secret", "store"]
-    """Parameter type"""
+    data_type: Literal["string", "number", "date", "time", "secret", "store", "bool", "json", "enum"]
+    """
+    Parameter type determines validation and UI rendering:
+    string - text input
+    number - numeric input
+    date - date picker
+    time - time picker
+    secret - references a secret
+    store - references an edge store
+    bool - boolean toggle
+    json - JSON editor or multiline text area with JSON validation
+    enum - dropdown/select with allowed values defined via parameter metadata
+    """
 
     mandatory: bool
-    """Is this field mandatory?"""
+    """If true, this parameter must be provided when instantiating the template"""
 
     name: str
-    """Parameter name"""
+    """
+    Parameter name used as a placeholder in template (e.g., `API_KEY`,
+    `DATABASE_URL`)
+    """
 
     descr: Optional[str] = None
-    """Parameter description"""
+    """Human-readable explanation of what this parameter controls"""
+
+    metadata: Optional[str] = None
+    """
+    Optional JSON-encoded string for additional parameter metadata, such as allowed
+    values for enum types
+    """
diff --git a/src/gcore/types/fastedge/template_parameter_param.py b/src/gcore/types/fastedge/template_parameter_param.py
index ee5fb80f..c67c5b65 100644
--- a/src/gcore/types/fastedge/template_parameter_param.py
+++ b/src/gcore/types/fastedge/template_parameter_param.py
@@ -8,14 +8,34 @@
 
 
 class TemplateParameterParam(TypedDict, total=False):
-    data_type: Required[Literal["string", "number", "date", "time", "secret", "store"]]
-    """Parameter type"""
+    data_type: Required[Literal["string", "number", "date", "time", "secret", "store", "bool", "json", "enum"]]
+    """
+    Parameter type determines validation and UI rendering:
+    string - text input
+    number - numeric input
+    date - date picker
+    time - time picker
+    secret - references a secret
+    store - references an edge store
+    bool - boolean toggle
+    json - JSON editor or multiline text area with JSON validation
+    enum - dropdown/select with allowed values defined via parameter metadata
+    """
 
     mandatory: Required[bool]
-    """Is this field mandatory?"""
+    """If true, this parameter must be provided when instantiating the template"""
 
     name: Required[str]
-    """Parameter name"""
+    """
+    Parameter name used as a placeholder in template (e.g., `API_KEY`,
+    `DATABASE_URL`)
+    """
 
     descr: str
-    """Parameter description"""
+    """Human-readable explanation of what this parameter controls"""
+
+    metadata: str
+    """
+    Optional JSON-encoded string for additional parameter metadata, such as allowed
+    values for enum types
+    """
diff --git a/src/gcore/types/fastedge/template_replace_params.py b/src/gcore/types/fastedge/template_replace_params.py
index 214b22f6..5bb006cc 100644
--- a/src/gcore/types/fastedge/template_replace_params.py
+++ b/src/gcore/types/fastedge/template_replace_params.py
@@ -12,10 +12,10 @@
 
 class TemplateReplaceParams(TypedDict, total=False):
     binary_id: Required[int]
-    """Binary ID"""
+    """ID of the WebAssembly binary to use for this template"""
 
     name: Required[str]
-    """Name of the template"""
+    """Unique name for the template (used for identification and searching)"""
 
     owned: Required[bool]
     """Is the template owned by user?"""
@@ -24,7 +24,7 @@ class TemplateReplaceParams(TypedDict, total=False):
     """Parameters"""
 
     long_descr: str
-    """Long description of the template"""
+    """Detailed markdown description explaining template features and usage"""
 
     short_descr: str
-    """Short description of the template"""
+    """Brief one-line description displayed in template listings"""
diff --git a/src/gcore/types/storage/storage.py b/src/gcore/types/storage/storage.py
index f158afa8..16524640 100644
--- a/src/gcore/types/storage/storage.py
+++ b/src/gcore/types/storage/storage.py
@@ -1,6 +1,7 @@
 # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
 
 from typing import Dict, List, Optional
+from datetime import datetime
 from typing_extensions import Literal
 
 from ..._models import BaseModel
@@ -12,7 +13,7 @@ class CredentialsKey(BaseModel):
     id: Optional[int] = None
     """Unique identifier for the SSH key"""
 
-    created_at: Optional[str] = None
+    created_at: Optional[datetime] = None
     """ISO 8601 timestamp when the SSH key was created"""
 
     name: Optional[str] = None
@@ -50,7 +51,7 @@ class Storage(BaseModel):
     client_id: int
     """Client identifier who owns this storage"""
 
-    created_at: str
+    created_at: datetime
     """ISO 8601 timestamp when the storage was created"""
 
     location: str
@@ -82,7 +83,7 @@ class Storage(BaseModel):
     custom_config_file: Optional[bool] = None
     """Whether custom configuration file is used for this storage"""
 
-    deleted_at: Optional[str] = None
+    deleted_at: Optional[datetime] = None
     """
     ISO 8601 timestamp when the storage was deleted (only present for deleted
     storages)
@@ -91,7 +92,7 @@ class Storage(BaseModel):
     disable_http: Optional[bool] = None
     """Whether HTTP access is disabled for this storage (HTTPS only)"""
 
-    expires: Optional[str] = None
+    expires: Optional[datetime] = None
     """ISO 8601 timestamp when the storage will expire (if set)"""
 
     rewrite_rules: Optional[Dict[str, str]] = None
diff --git a/src/gcore/types/storage/storage_list_params.py b/src/gcore/types/storage/storage_list_params.py
index 5028a2e4..42fc559b 100644
--- a/src/gcore/types/storage/storage_list_params.py
+++ b/src/gcore/types/storage/storage_list_params.py
@@ -32,7 +32,7 @@ class StorageListParams(TypedDict, total=False):
     show_deleted: bool
     """Include deleted storages in the response"""
 
-    status: Literal["active", "suspended", "deleted", "pending"]
+    status: Literal["active", "creating", "ok", "updating", "deleting", "deleted"]
     """Filter by storage status"""
 
     type: Literal["s3_compatible", "sftp"]
diff --git a/tests/api_resources/cloud/baremetal/test_servers.py b/tests/api_resources/cloud/baremetal/test_servers.py
index 564217ee..b86a277b 100644
--- a/tests/api_resources/cloud/baremetal/test_servers.py
+++ b/tests/api_resources/cloud/baremetal/test_servers.py
@@ -12,7 +12,9 @@
 from gcore._utils import parse_datetime
 from gcore.pagination import SyncOffsetPage, AsyncOffsetPage
 from gcore.types.cloud import TaskIDList
-from gcore.types.cloud.baremetal import BaremetalServer
+from gcore.types.cloud.baremetal import (
+    BaremetalServer,
+)
 
 base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010")
 
@@ -51,7 +53,6 @@ def test_method_create_with_all_params(self, client: Gcore) -> None:
                 "fields": [
                     {
                         "base_field": 10,
-                        "field_name": None,
                         "field_value": [45046, 45047],
                         "value": None,
                     }
@@ -98,6 +99,63 @@ def test_streaming_response_create(self, client: Gcore) -> None:
 
         assert cast(Any, response.is_closed) is True
 
+    @parametrize
+    def test_method_update(self, client: Gcore) -> None:
+        server = client.cloud.baremetal.servers.update(
+            server_id="024a29e-b4b7-4c91-9a46-505be123d9f8",
+            project_id=1,
+            region_id=1,
+        )
+        assert_matches_type(BaremetalServer, server, path=["response"])
+
+    @parametrize
+    def test_method_update_with_all_params(self, client: Gcore) -> None:
+        server = client.cloud.baremetal.servers.update(
+            server_id="024a29e-b4b7-4c91-9a46-505be123d9f8",
+            project_id=1,
+            region_id=1,
+            name="server_name",
+            tags={"foo": "string"},
+        )
+        assert_matches_type(BaremetalServer, server, path=["response"])
+
+    @parametrize
+    def test_raw_response_update(self, client: Gcore) -> None:
+        response = client.cloud.baremetal.servers.with_raw_response.update(
+            server_id="024a29e-b4b7-4c91-9a46-505be123d9f8",
+            project_id=1,
+            region_id=1,
+        )
+
+        assert response.is_closed is True
+        assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+        server = response.parse()
+        assert_matches_type(BaremetalServer, server, path=["response"])
+
+    @parametrize
+    def test_streaming_response_update(self, client: Gcore) -> None:
+        with client.cloud.baremetal.servers.with_streaming_response.update(
+            server_id="024a29e-b4b7-4c91-9a46-505be123d9f8",
+            project_id=1,
+            region_id=1,
+        ) as response:
+            assert not response.is_closed
+            assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+            server = response.parse()
+            assert_matches_type(BaremetalServer, server, path=["response"])
+
+        assert cast(Any, response.is_closed) is True
+
+    @parametrize
+    def test_path_params_update(self, client: Gcore) -> None:
+        with pytest.raises(ValueError, match=r"Expected a non-empty value for `server_id` but received ''"):
+            client.cloud.baremetal.servers.with_raw_response.update(
+                server_id="",
+                project_id=1,
+                region_id=1,
+            )
+
     @parametrize
     def test_method_list(self, client: Gcore) -> None:
         server = client.cloud.baremetal.servers.list(
@@ -161,6 +219,110 @@ def test_streaming_response_list(self, client: Gcore) -> None:
 
         assert cast(Any, response.is_closed) is True
 
+    @parametrize
+    def test_method_delete(self, client: Gcore) -> None:
+        server = client.cloud.baremetal.servers.delete(
+            server_id="024a29e-b4b7-4c91-9a46-505be123d9f8",
+            project_id=1,
+            region_id=1,
+        )
+        assert_matches_type(TaskIDList, server, path=["response"])
+
+    @parametrize
+    def test_method_delete_with_all_params(self, client: Gcore) -> None:
+        server = client.cloud.baremetal.servers.delete(
+            server_id="024a29e-b4b7-4c91-9a46-505be123d9f8",
+            project_id=1,
+            region_id=1,
+            all_floating_ips=True,
+            floating_ip_ids="floating_ip_ids",
+            reserved_fixed_ip_ids="reserved_fixed_ip_ids",
+        )
+        assert_matches_type(TaskIDList, server, path=["response"])
+
+    @parametrize
+    def test_raw_response_delete(self, client: Gcore) -> None:
+        response = client.cloud.baremetal.servers.with_raw_response.delete(
+            server_id="024a29e-b4b7-4c91-9a46-505be123d9f8",
+            project_id=1,
+            region_id=1,
+        )
+
+        assert response.is_closed is True
+        assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+        server = response.parse()
+        assert_matches_type(TaskIDList, server, path=["response"])
+
+    @parametrize
+    def test_streaming_response_delete(self, client: Gcore) -> None:
+        with client.cloud.baremetal.servers.with_streaming_response.delete(
+            server_id="024a29e-b4b7-4c91-9a46-505be123d9f8",
+            project_id=1,
+            region_id=1,
+        ) as response:
+            assert not response.is_closed
+            assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+            server = response.parse()
+            assert_matches_type(TaskIDList, server, path=["response"])
+
+        assert cast(Any, response.is_closed) is True
+
+    @parametrize
+    def test_path_params_delete(self, client: Gcore) -> None:
+        with pytest.raises(ValueError, match=r"Expected a non-empty value for `server_id` but received ''"):
+            client.cloud.baremetal.servers.with_raw_response.delete(
+                server_id="",
+                project_id=1,
+                region_id=1,
+            )
+
+    @parametrize
+    def test_method_get(self, client: Gcore) -> None:
+        server = client.cloud.baremetal.servers.get(
+            server_id="024a29e-b4b7-4c91-9a46-505be123d9f8",
+            project_id=1,
+            region_id=1,
+        )
+        assert_matches_type(BaremetalServer, server, path=["response"])
+
+    @parametrize
+    def test_raw_response_get(self, client: Gcore) -> None:
+        response = client.cloud.baremetal.servers.with_raw_response.get(
+            server_id="024a29e-b4b7-4c91-9a46-505be123d9f8",
+            project_id=1,
+            region_id=1,
+        )
+
+        assert response.is_closed is True
+        assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+        server = response.parse()
+        assert_matches_type(BaremetalServer, server, path=["response"])
+
+    @parametrize
+    def test_streaming_response_get(self, client: Gcore) -> None:
+        with client.cloud.baremetal.servers.with_streaming_response.get(
+            server_id="024a29e-b4b7-4c91-9a46-505be123d9f8",
+            project_id=1,
+            region_id=1,
+        ) as response:
+            assert not response.is_closed
+            assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+            server = response.parse()
+            assert_matches_type(BaremetalServer, server, path=["response"])
+
+        assert cast(Any, response.is_closed) is True
+
+    @parametrize
+    def test_path_params_get(self, client: Gcore) -> None:
+        with pytest.raises(ValueError, match=r"Expected a non-empty value for `server_id` but received ''"):
+            client.cloud.baremetal.servers.with_raw_response.get(
+                server_id="",
+                project_id=1,
+                region_id=1,
+            )
+
     @parametrize
     def test_method_rebuild(self, client: Gcore) -> None:
         server = client.cloud.baremetal.servers.rebuild(
@@ -255,7 +417,6 @@ async def test_method_create_with_all_params(self, async_client: AsyncGcore) ->
                 "fields": [
                     {
                         "base_field": 10,
-                        "field_name": None,
                         "field_value": [45046, 45047],
                         "value": None,
                     }
@@ -302,6 +463,63 @@ async def test_streaming_response_create(self, async_client: AsyncGcore) -> None
 
         assert cast(Any, response.is_closed) is True
 
+    @parametrize
+    async def test_method_update(self, async_client: AsyncGcore) -> None:
+        server = await async_client.cloud.baremetal.servers.update(
+            server_id="024a29e-b4b7-4c91-9a46-505be123d9f8",
+            project_id=1,
+            region_id=1,
+        )
+        assert_matches_type(BaremetalServer, server, path=["response"])
+
+    @parametrize
+    async def test_method_update_with_all_params(self, async_client: AsyncGcore) -> None:
+        server = await async_client.cloud.baremetal.servers.update(
+            server_id="024a29e-b4b7-4c91-9a46-505be123d9f8",
+            project_id=1,
+            region_id=1,
+            name="server_name",
+            tags={"foo": "string"},
+        )
+        assert_matches_type(BaremetalServer, server, path=["response"])
+
+    @parametrize
+    async def test_raw_response_update(self, async_client: AsyncGcore) -> None:
+        response = await async_client.cloud.baremetal.servers.with_raw_response.update(
+            server_id="024a29e-b4b7-4c91-9a46-505be123d9f8",
+            project_id=1,
+            region_id=1,
+        )
+
+        assert response.is_closed is True
+        assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+        server = await response.parse()
+        assert_matches_type(BaremetalServer, server, path=["response"])
+
+    @parametrize
+    async def test_streaming_response_update(self, async_client: AsyncGcore) -> None:
+        async with async_client.cloud.baremetal.servers.with_streaming_response.update(
+            server_id="024a29e-b4b7-4c91-9a46-505be123d9f8",
+            project_id=1,
+            region_id=1,
+        ) as response:
+            assert not response.is_closed
+            assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+            server = await response.parse()
+            assert_matches_type(BaremetalServer, server, path=["response"])
+
+        assert cast(Any, response.is_closed) is True
+
+    @parametrize
+    async def test_path_params_update(self, async_client: AsyncGcore) -> None:
+        with pytest.raises(ValueError, match=r"Expected a non-empty value for `server_id` but received ''"):
+            await async_client.cloud.baremetal.servers.with_raw_response.update(
+                server_id="",
+                project_id=1,
+                region_id=1,
+            )
+
     @parametrize
     async def test_method_list(self, async_client: AsyncGcore) -> None:
         server = await async_client.cloud.baremetal.servers.list(
@@ -365,6 +583,110 @@ async def test_streaming_response_list(self, async_client: AsyncGcore) -> None:
 
         assert cast(Any, response.is_closed) is True
 
+    @parametrize
+    async def test_method_delete(self, async_client: AsyncGcore) -> None:
+        server = await async_client.cloud.baremetal.servers.delete(
+            server_id="024a29e-b4b7-4c91-9a46-505be123d9f8",
+            project_id=1,
+            region_id=1,
+        )
+        assert_matches_type(TaskIDList, server, path=["response"])
+
+    @parametrize
+    async def test_method_delete_with_all_params(self, async_client: AsyncGcore) -> None:
+        server = await async_client.cloud.baremetal.servers.delete(
+            server_id="024a29e-b4b7-4c91-9a46-505be123d9f8",
+            project_id=1,
+            region_id=1,
+            all_floating_ips=True,
+            floating_ip_ids="floating_ip_ids",
+            reserved_fixed_ip_ids="reserved_fixed_ip_ids",
+        )
+        assert_matches_type(TaskIDList, server, path=["response"])
+
+    @parametrize
+    async def test_raw_response_delete(self, async_client: AsyncGcore) -> None:
+        response = await async_client.cloud.baremetal.servers.with_raw_response.delete(
+            server_id="024a29e-b4b7-4c91-9a46-505be123d9f8",
+            project_id=1,
+            region_id=1,
+        )
+
+        assert response.is_closed is True
+        assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+        server = await response.parse()
+        assert_matches_type(TaskIDList, server, path=["response"])
+
+    @parametrize
+    async def test_streaming_response_delete(self, async_client: AsyncGcore) -> None:
+        async with async_client.cloud.baremetal.servers.with_streaming_response.delete(
+            server_id="024a29e-b4b7-4c91-9a46-505be123d9f8",
+            project_id=1,
+            region_id=1,
+        ) as response:
+            assert not response.is_closed
+            assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+            server = await response.parse()
+            assert_matches_type(TaskIDList, server, path=["response"])
+
+        assert cast(Any, response.is_closed) is True
+
+    @parametrize
+    async def test_path_params_delete(self, async_client: AsyncGcore) -> None:
+        with pytest.raises(ValueError, match=r"Expected a non-empty value for `server_id` but received ''"):
+            await async_client.cloud.baremetal.servers.with_raw_response.delete(
+                server_id="",
+                project_id=1,
+                region_id=1,
+            )
+
+    @parametrize
+    async def test_method_get(self, async_client: AsyncGcore) -> None:
+        server = await async_client.cloud.baremetal.servers.get(
+            server_id="024a29e-b4b7-4c91-9a46-505be123d9f8",
+            project_id=1,
+            region_id=1,
+        )
+        assert_matches_type(BaremetalServer, server, path=["response"])
+
+    @parametrize
+    async def test_raw_response_get(self, async_client: AsyncGcore) -> None:
+        response = await async_client.cloud.baremetal.servers.with_raw_response.get(
+            server_id="024a29e-b4b7-4c91-9a46-505be123d9f8",
+            project_id=1,
+            region_id=1,
+        )
+
+        assert response.is_closed is True
+        assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+        server = await response.parse()
+        assert_matches_type(BaremetalServer, server, path=["response"])
+
+    @parametrize
+    async def test_streaming_response_get(self, async_client: AsyncGcore) -> None:
+        async with async_client.cloud.baremetal.servers.with_streaming_response.get(
+            server_id="024a29e-b4b7-4c91-9a46-505be123d9f8",
+            project_id=1,
+            region_id=1,
+        ) as response:
+            assert not response.is_closed
+            assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+            server = await response.parse()
+            assert_matches_type(BaremetalServer, server, path=["response"])
+
+        assert cast(Any, response.is_closed) is True
+
+    @parametrize
+    async def test_path_params_get(self, async_client: AsyncGcore) -> None:
+        with pytest.raises(ValueError, match=r"Expected a non-empty value for `server_id` but received ''"):
+            await async_client.cloud.baremetal.servers.with_raw_response.get(
+                server_id="",
+                project_id=1,
+                region_id=1,
+            )
+
     @parametrize
     async def test_method_rebuild(self, async_client: AsyncGcore) -> None:
         server = await async_client.cloud.baremetal.servers.rebuild(
diff --git a/tests/api_resources/cloud/gpu_baremetal/test_clusters.py b/tests/api_resources/cloud/gpu_baremetal/test_clusters.py
index a1522ef3..0a2518f7 100644
--- a/tests/api_resources/cloud/gpu_baremetal/test_clusters.py
+++ b/tests/api_resources/cloud/gpu_baremetal/test_clusters.py
@@ -106,6 +106,63 @@ def test_streaming_response_create(self, client: Gcore) -> None:
 
         assert cast(Any, response.is_closed) is True
 
+    @parametrize
+    def test_method_update(self, client: Gcore) -> None:
+        cluster = client.cloud.gpu_baremetal.clusters.update(
+            cluster_id="1aaaab48-10d0-46d9-80cc-85209284ceb4",
+            project_id=1,
+            region_id=7,
+        )
+        assert_matches_type(GPUBaremetalCluster, cluster, path=["response"])
+
+    @parametrize
+    def test_method_update_with_all_params(self, client: Gcore) -> None:
+        cluster = client.cloud.gpu_baremetal.clusters.update(
+            cluster_id="1aaaab48-10d0-46d9-80cc-85209284ceb4",
+            project_id=1,
+            region_id=7,
+            name="gpu-cluster-1",
+            tags={"foo": "string"},
+        )
+        assert_matches_type(GPUBaremetalCluster, cluster, path=["response"])
+
+    @parametrize
+    def test_raw_response_update(self, client: Gcore) -> None:
+        response = client.cloud.gpu_baremetal.clusters.with_raw_response.update(
+            cluster_id="1aaaab48-10d0-46d9-80cc-85209284ceb4",
+            project_id=1,
+            region_id=7,
+        )
+
+        assert response.is_closed is True
+        assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+        cluster = response.parse()
+        assert_matches_type(GPUBaremetalCluster, cluster, path=["response"])
+
+    @parametrize
+    def test_streaming_response_update(self, client: Gcore) -> None:
+        with client.cloud.gpu_baremetal.clusters.with_streaming_response.update(
+            cluster_id="1aaaab48-10d0-46d9-80cc-85209284ceb4",
+            project_id=1,
+            region_id=7,
+        ) as response:
+            assert not response.is_closed
+            assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+            cluster = response.parse()
+            assert_matches_type(GPUBaremetalCluster, cluster, path=["response"])
+
+        assert cast(Any, response.is_closed) is True
+
+    @parametrize
+    def test_path_params_update(self, client: Gcore) -> None:
+        with pytest.raises(ValueError, match=r"Expected a non-empty value for `cluster_id` but received ''"):
+            client.cloud.gpu_baremetal.clusters.with_raw_response.update(
+                cluster_id="",
+                project_id=1,
+                region_id=7,
+            )
+
     @parametrize
     def test_method_list(self, client: Gcore) -> None:
         cluster = client.cloud.gpu_baremetal.clusters.list(
@@ -210,60 +267,6 @@ def test_path_params_delete(self, client: Gcore) -> None:
                 region_id=7,
             )
 
-    @parametrize
-    def test_method_action(self, client: Gcore) -> None:
-        cluster = client.cloud.gpu_baremetal.clusters.action(
-            cluster_id="1aaaab48-10d0-46d9-80cc-85209284ceb4",
-            project_id=1,
-            region_id=7,
-            action="update_tags",
-            tags={"foo": "string"},
-        )
-        assert_matches_type(TaskIDList, cluster, path=["response"])
-
-    @parametrize
-    def test_raw_response_action(self, client: Gcore) -> None:
-        response = client.cloud.gpu_baremetal.clusters.with_raw_response.action(
-            cluster_id="1aaaab48-10d0-46d9-80cc-85209284ceb4",
-            project_id=1,
-            region_id=7,
-            action="update_tags",
-            tags={"foo": "string"},
-        )
-
-        assert response.is_closed is True
-        assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-        cluster = response.parse()
-        assert_matches_type(TaskIDList, cluster, path=["response"])
-
-    @parametrize
-    def test_streaming_response_action(self, client: Gcore) -> None:
-        with client.cloud.gpu_baremetal.clusters.with_streaming_response.action(
-            cluster_id="1aaaab48-10d0-46d9-80cc-85209284ceb4",
-            project_id=1,
-            region_id=7,
-            action="update_tags",
-            tags={"foo": "string"},
-        ) as response:
-            assert not response.is_closed
-            assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
-            cluster = response.parse()
-            assert_matches_type(TaskIDList, cluster, path=["response"])
-
-        assert cast(Any, response.is_closed) is True
-
-    @parametrize
-    def test_path_params_action(self, client: Gcore) -> None:
-        with pytest.raises(ValueError, match=r"Expected a non-empty value for `cluster_id` but received ''"):
-            client.cloud.gpu_baremetal.clusters.with_raw_response.action(
-                cluster_id="",
-                project_id=1,
-                region_id=7,
-                action="update_tags",
-                tags={"foo": "string"},
-            )
-
     @parametrize
     def test_method_get(self, client: Gcore) -> None:
         cluster = client.cloud.gpu_baremetal.clusters.get(
@@ -648,6 +651,63 @@ async def test_streaming_response_create(self, async_client: AsyncGcore) -> None
 
         assert cast(Any, response.is_closed) is True
 
+    @parametrize
+    async def test_method_update(self, async_client: AsyncGcore) -> None:
+        cluster = await async_client.cloud.gpu_baremetal.clusters.update(
+            cluster_id="1aaaab48-10d0-46d9-80cc-85209284ceb4",
+            project_id=1,
+            region_id=7,
+        )
+        assert_matches_type(GPUBaremetalCluster, cluster, path=["response"])
+
+    @parametrize
+    async def test_method_update_with_all_params(self, async_client: AsyncGcore) -> None:
+        cluster = await async_client.cloud.gpu_baremetal.clusters.update(
+            cluster_id="1aaaab48-10d0-46d9-80cc-85209284ceb4",
+            project_id=1,
+            region_id=7,
+            name="gpu-cluster-1",
+            tags={"foo": "string"},
+        )
+        assert_matches_type(GPUBaremetalCluster, cluster, path=["response"])
+
+    @parametrize
+    async def test_raw_response_update(self, async_client: AsyncGcore) -> None:
+        response = await async_client.cloud.gpu_baremetal.clusters.with_raw_response.update(
+            cluster_id="1aaaab48-10d0-46d9-80cc-85209284ceb4",
+            project_id=1,
+            region_id=7,
+        )
+
+        assert response.is_closed is True
+        assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+        cluster = await response.parse()
+        assert_matches_type(GPUBaremetalCluster, cluster, path=["response"])
+
+    @parametrize
+    async def test_streaming_response_update(self, async_client: AsyncGcore) -> None:
+        async with async_client.cloud.gpu_baremetal.clusters.with_streaming_response.update(
+            cluster_id="1aaaab48-10d0-46d9-80cc-85209284ceb4",
+            project_id=1,
+            region_id=7,
+        ) as response:
+            assert not response.is_closed
+            assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+            cluster = await response.parse()
+            assert_matches_type(GPUBaremetalCluster, cluster, path=["response"])
+
+        assert cast(Any, response.is_closed) is True
+
+    @parametrize
+    async def test_path_params_update(self, async_client: AsyncGcore) -> None:
+        with pytest.raises(ValueError, match=r"Expected a non-empty value for `cluster_id` but received ''"):
+            await async_client.cloud.gpu_baremetal.clusters.with_raw_response.update(
+                cluster_id="",
+                project_id=1,
+                region_id=7,
+            )
+
     @parametrize
     async def test_method_list(self, async_client: AsyncGcore) -> None:
         cluster = await async_client.cloud.gpu_baremetal.clusters.list(
@@ -752,60 +812,6 @@ async def test_path_params_delete(self, async_client: AsyncGcore) -> None:
                 region_id=7,
             )
 
-    @parametrize
-    async def test_method_action(self, async_client: AsyncGcore) -> None:
-        cluster = await async_client.cloud.gpu_baremetal.clusters.action(
-            cluster_id="1aaaab48-10d0-46d9-80cc-85209284ceb4",
-            project_id=1,
-            region_id=7,
-            action="update_tags",
-            tags={"foo": "string"},
-        )
-        assert_matches_type(TaskIDList, cluster, path=["response"])
-
-    @parametrize
-    async def test_raw_response_action(self, async_client: AsyncGcore) -> None:
-        response = await async_client.cloud.gpu_baremetal.clusters.with_raw_response.action(
-            cluster_id="1aaaab48-10d0-46d9-80cc-85209284ceb4",
-            project_id=1,
-            region_id=7,
-            action="update_tags",
-            tags={"foo": "string"},
-        )
-
-        assert response.is_closed is True
-        assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-        cluster = await response.parse()
-        assert_matches_type(TaskIDList, cluster, path=["response"])
-
-    @parametrize
-    async def test_streaming_response_action(self, async_client: AsyncGcore) -> None:
-        async with async_client.cloud.gpu_baremetal.clusters.with_streaming_response.action(
-            cluster_id="1aaaab48-10d0-46d9-80cc-85209284ceb4",
-            project_id=1,
-            region_id=7,
-            action="update_tags",
-            tags={"foo": "string"},
-        ) as response:
-            assert not response.is_closed
-            assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
-            cluster = await response.parse()
-            assert_matches_type(TaskIDList, cluster, path=["response"])
-
-        assert cast(Any, response.is_closed) is True
-
-    @parametrize
-    async def test_path_params_action(self, async_client: AsyncGcore) -> None:
-        with pytest.raises(ValueError, match=r"Expected a non-empty value for `cluster_id` but received ''"):
-            await async_client.cloud.gpu_baremetal.clusters.with_raw_response.action(
-                cluster_id="",
-                project_id=1,
-                region_id=7,
-                action="update_tags",
-                tags={"foo": "string"},
-            )
-
     @parametrize
     async def test_method_get(self, async_client: AsyncGcore) -> None:
         cluster = await async_client.cloud.gpu_baremetal.clusters.get(
diff --git a/tests/api_resources/cloud/gpu_virtual/test_clusters.py b/tests/api_resources/cloud/gpu_virtual/test_clusters.py
index 4e9b521d..05bdb651 100644
--- a/tests/api_resources/cloud/gpu_virtual/test_clusters.py
+++ b/tests/api_resources/cloud/gpu_virtual/test_clusters.py
@@ -147,11 +147,21 @@ def test_streaming_response_create(self, client: Gcore) -> None:
 
     @parametrize
     def test_method_update(self, client: Gcore) -> None:
+        cluster = client.cloud.gpu_virtual.clusters.update(
+            cluster_id="1aaaab48-10d0-46d9-80cc-85209284ceb4",
+            project_id=1,
+            region_id=7,
+        )
+        assert_matches_type(GPUVirtualCluster, cluster, path=["response"])
+
+    @parametrize
+    def test_method_update_with_all_params(self, client: Gcore) -> None:
         cluster = client.cloud.gpu_virtual.clusters.update(
             cluster_id="1aaaab48-10d0-46d9-80cc-85209284ceb4",
             project_id=1,
             region_id=7,
             name="gpu-cluster-1",
+            tags={"foo": "string"},
         )
         assert_matches_type(GPUVirtualCluster, cluster, path=["response"])
 
@@ -161,7 +171,6 @@ def test_raw_response_update(self, client: Gcore) -> None:
             cluster_id="1aaaab48-10d0-46d9-80cc-85209284ceb4",
             project_id=1,
             region_id=7,
-            name="gpu-cluster-1",
         )
 
         assert response.is_closed is True
@@ -175,7 +184,6 @@ def test_streaming_response_update(self, client: Gcore) -> None:
             cluster_id="1aaaab48-10d0-46d9-80cc-85209284ceb4",
             project_id=1,
             region_id=7,
-            name="gpu-cluster-1",
         ) as response:
             assert not response.is_closed
             assert response.http_request.headers.get("X-Stainless-Lang") == "python"
@@ -192,7 +200,6 @@ def test_path_params_update(self, client: Gcore) -> None:
                 cluster_id="",
                 project_id=1,
                 region_id=7,
-                name="gpu-cluster-1",
             )
 
     @parametrize
@@ -502,60 +509,6 @@ def test_path_params_action_overload_4(self, client: Gcore) -> None:
 
     @parametrize
     def test_method_action_overload_5(self, client: Gcore) -> None:
-        cluster = client.cloud.gpu_virtual.clusters.action(
-            cluster_id="1aaaab48-10d0-46d9-80cc-85209284ceb4",
-            project_id=1,
-            region_id=7,
-            action="update_tags",
-            tags={"foo": "string"},
-        )
-        assert_matches_type(TaskIDList, cluster, path=["response"])
-
-    @parametrize
-    def test_raw_response_action_overload_5(self, client: Gcore) -> None:
-        response = client.cloud.gpu_virtual.clusters.with_raw_response.action(
-            cluster_id="1aaaab48-10d0-46d9-80cc-85209284ceb4",
-            project_id=1,
-            region_id=7,
-            action="update_tags",
-            tags={"foo": "string"},
-        )
-
-        assert response.is_closed is True
-        assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-        cluster = response.parse()
-        assert_matches_type(TaskIDList, cluster, path=["response"])
-
-    @parametrize
-    def test_streaming_response_action_overload_5(self, client: Gcore) -> None:
-        with client.cloud.gpu_virtual.clusters.with_streaming_response.action(
-            cluster_id="1aaaab48-10d0-46d9-80cc-85209284ceb4",
-            project_id=1,
-            region_id=7,
-            action="update_tags",
-            tags={"foo": "string"},
-        ) as response:
-            assert not response.is_closed
-            assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
-            cluster = response.parse()
-            assert_matches_type(TaskIDList, cluster, path=["response"])
-
-        assert cast(Any, response.is_closed) is True
-
-    @parametrize
-    def test_path_params_action_overload_5(self, client: Gcore) -> None:
-        with pytest.raises(ValueError, match=r"Expected a non-empty value for `cluster_id` but received ''"):
-            client.cloud.gpu_virtual.clusters.with_raw_response.action(
-                cluster_id="",
-                project_id=1,
-                region_id=7,
-                action="update_tags",
-                tags={"foo": "string"},
-            )
-
-    @parametrize
-    def test_method_action_overload_6(self, client: Gcore) -> None:
         cluster = client.cloud.gpu_virtual.clusters.action(
             cluster_id="1aaaab48-10d0-46d9-80cc-85209284ceb4",
             project_id=1,
@@ -566,7 +519,7 @@ def test_method_action_overload_6(self, client: Gcore) -> None:
         assert_matches_type(TaskIDList, cluster, path=["response"])
 
     @parametrize
-    def test_raw_response_action_overload_6(self, client: Gcore) -> None:
+    def test_raw_response_action_overload_5(self, client: Gcore) -> None:
         response = client.cloud.gpu_virtual.clusters.with_raw_response.action(
             cluster_id="1aaaab48-10d0-46d9-80cc-85209284ceb4",
             project_id=1,
@@ -581,7 +534,7 @@ def test_raw_response_action_overload_6(self, client: Gcore) -> None:
         assert_matches_type(TaskIDList, cluster, path=["response"])
 
     @parametrize
-    def test_streaming_response_action_overload_6(self, client: Gcore) -> None:
+    def test_streaming_response_action_overload_5(self, client: Gcore) -> None:
         with client.cloud.gpu_virtual.clusters.with_streaming_response.action(
             cluster_id="1aaaab48-10d0-46d9-80cc-85209284ceb4",
             project_id=1,
@@ -598,7 +551,7 @@ def test_streaming_response_action_overload_6(self, client: Gcore) -> None:
         assert cast(Any, response.is_closed) is True
 
     @parametrize
-    def test_path_params_action_overload_6(self, client: Gcore) -> None:
+    def test_path_params_action_overload_5(self, client: Gcore) -> None:
         with pytest.raises(ValueError, match=r"Expected a non-empty value for `cluster_id` but received ''"):
             client.cloud.gpu_virtual.clusters.with_raw_response.action(
                 cluster_id="",
@@ -786,11 +739,21 @@ async def test_streaming_response_create(self, async_client: AsyncGcore) -> None
 
     @parametrize
     async def test_method_update(self, async_client: AsyncGcore) -> None:
+        cluster = await async_client.cloud.gpu_virtual.clusters.update(
+            cluster_id="1aaaab48-10d0-46d9-80cc-85209284ceb4",
+            project_id=1,
+            region_id=7,
+        )
+        assert_matches_type(GPUVirtualCluster, cluster, path=["response"])
+
+    @parametrize
+    async def test_method_update_with_all_params(self, async_client: AsyncGcore) -> None:
         cluster = await async_client.cloud.gpu_virtual.clusters.update(
             cluster_id="1aaaab48-10d0-46d9-80cc-85209284ceb4",
             project_id=1,
             region_id=7,
             name="gpu-cluster-1",
+            tags={"foo": "string"},
         )
         assert_matches_type(GPUVirtualCluster, cluster, path=["response"])
 
@@ -800,7 +763,6 @@ async def test_raw_response_update(self, async_client: AsyncGcore) -> None:
             cluster_id="1aaaab48-10d0-46d9-80cc-85209284ceb4",
             project_id=1,
             region_id=7,
-            name="gpu-cluster-1",
         )
 
         assert response.is_closed is True
@@ -814,7 +776,6 @@ async def test_streaming_response_update(self, async_client: AsyncGcore) -> None
             cluster_id="1aaaab48-10d0-46d9-80cc-85209284ceb4",
             project_id=1,
             region_id=7,
-            name="gpu-cluster-1",
         ) as response:
             assert not response.is_closed
             assert response.http_request.headers.get("X-Stainless-Lang") == "python"
@@ -831,7 +792,6 @@ async def test_path_params_update(self, async_client: AsyncGcore) -> None:
                 cluster_id="",
                 project_id=1,
                 region_id=7,
-                name="gpu-cluster-1",
             )
 
     @parametrize
@@ -1141,60 +1101,6 @@ async def test_path_params_action_overload_4(self, async_client: AsyncGcore) ->
 
     @parametrize
     async def test_method_action_overload_5(self, async_client: AsyncGcore) -> None:
-        cluster = await async_client.cloud.gpu_virtual.clusters.action(
-            cluster_id="1aaaab48-10d0-46d9-80cc-85209284ceb4",
-            project_id=1,
-            region_id=7,
-            action="update_tags",
-            tags={"foo": "string"},
-        )
-        assert_matches_type(TaskIDList, cluster, path=["response"])
-
-    @parametrize
-    async def test_raw_response_action_overload_5(self, async_client: AsyncGcore) -> None:
-        response = await async_client.cloud.gpu_virtual.clusters.with_raw_response.action(
-            cluster_id="1aaaab48-10d0-46d9-80cc-85209284ceb4",
-            project_id=1,
-            region_id=7,
-            action="update_tags",
-            tags={"foo": "string"},
-        )
-
-        assert response.is_closed is True
-        assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-        cluster = await response.parse()
-        assert_matches_type(TaskIDList, cluster, path=["response"])
-
-    @parametrize
-    async def test_streaming_response_action_overload_5(self, async_client: AsyncGcore) -> None:
-        async with async_client.cloud.gpu_virtual.clusters.with_streaming_response.action(
-            cluster_id="1aaaab48-10d0-46d9-80cc-85209284ceb4",
-            project_id=1,
-            region_id=7,
-            action="update_tags",
-            tags={"foo": "string"},
-        ) as response:
-            assert not response.is_closed
-            assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
-            cluster = await response.parse()
-            assert_matches_type(TaskIDList, cluster, path=["response"])
-
-        assert cast(Any, response.is_closed) is True
-
-    @parametrize
-    async def test_path_params_action_overload_5(self, async_client: AsyncGcore) -> None:
-        with pytest.raises(ValueError, match=r"Expected a non-empty value for `cluster_id` but received ''"):
-            await async_client.cloud.gpu_virtual.clusters.with_raw_response.action(
-                cluster_id="",
-                project_id=1,
-                region_id=7,
-                action="update_tags",
-                tags={"foo": "string"},
-            )
-
-    @parametrize
-    async def test_method_action_overload_6(self, async_client: AsyncGcore) -> None:
         cluster = await async_client.cloud.gpu_virtual.clusters.action(
             cluster_id="1aaaab48-10d0-46d9-80cc-85209284ceb4",
             project_id=1,
@@ -1205,7 +1111,7 @@ async def test_method_action_overload_6(self, async_client: AsyncGcore) -> None:
         assert_matches_type(TaskIDList, cluster, path=["response"])
 
     @parametrize
-    async def test_raw_response_action_overload_6(self, async_client: AsyncGcore) -> None:
+    async def test_raw_response_action_overload_5(self, async_client: AsyncGcore) -> None:
         response = await async_client.cloud.gpu_virtual.clusters.with_raw_response.action(
             cluster_id="1aaaab48-10d0-46d9-80cc-85209284ceb4",
             project_id=1,
@@ -1220,7 +1126,7 @@ async def test_raw_response_action_overload_6(self, async_client: AsyncGcore) ->
         assert_matches_type(TaskIDList, cluster, path=["response"])
 
     @parametrize
-    async def test_streaming_response_action_overload_6(self, async_client: AsyncGcore) -> None:
+    async def test_streaming_response_action_overload_5(self, async_client: AsyncGcore) -> None:
         async with async_client.cloud.gpu_virtual.clusters.with_streaming_response.action(
             cluster_id="1aaaab48-10d0-46d9-80cc-85209284ceb4",
             project_id=1,
@@ -1237,7 +1143,7 @@ async def test_streaming_response_action_overload_6(self, async_client: AsyncGco
         assert cast(Any, response.is_closed) is True
 
     @parametrize
-    async def test_path_params_action_overload_6(self, async_client: AsyncGcore) -> None:
+    async def test_path_params_action_overload_5(self, async_client: AsyncGcore) -> None:
         with pytest.raises(ValueError, match=r"Expected a non-empty value for `cluster_id` but received ''"):
             await async_client.cloud.gpu_virtual.clusters.with_raw_response.action(
                 cluster_id="",
diff --git a/tests/api_resources/cloud/load_balancers/l7_policies/test_rules.py b/tests/api_resources/cloud/load_balancers/l7_policies/test_rules.py
index 2538e125..93b6eaf5 100644
--- a/tests/api_resources/cloud/load_balancers/l7_policies/test_rules.py
+++ b/tests/api_resources/cloud/load_balancers/l7_policies/test_rules.py
@@ -259,7 +259,6 @@ def test_method_replace(self, client: Gcore) -> None:
             project_id=1,
             region_id=1,
             l7policy_id="023f2e34-7806-443b-bfae-16c324569a3d",
-            compare_type="REGEX",
         )
         assert_matches_type(TaskIDList, rule, path=["response"])
 
@@ -286,7 +285,6 @@ def test_raw_response_replace(self, client: Gcore) -> None:
             project_id=1,
             region_id=1,
             l7policy_id="023f2e34-7806-443b-bfae-16c324569a3d",
-            compare_type="REGEX",
         )
 
         assert response.is_closed is True
@@ -301,7 +299,6 @@ def test_streaming_response_replace(self, client: Gcore) -> None:
             project_id=1,
             region_id=1,
             l7policy_id="023f2e34-7806-443b-bfae-16c324569a3d",
-            compare_type="REGEX",
         ) as response:
             assert not response.is_closed
             assert response.http_request.headers.get("X-Stainless-Lang") == "python"
@@ -319,7 +316,6 @@ def test_path_params_replace(self, client: Gcore) -> None:
                 project_id=1,
                 region_id=1,
                 l7policy_id="",
-                compare_type="REGEX",
             )
 
         with pytest.raises(ValueError, match=r"Expected a non-empty value for `l7rule_id` but received ''"):
@@ -328,7 +324,6 @@ def test_path_params_replace(self, client: Gcore) -> None:
                 project_id=1,
                 region_id=1,
                 l7policy_id="023f2e34-7806-443b-bfae-16c324569a3d",
-                compare_type="REGEX",
             )
 
 
@@ -579,7 +574,6 @@ async def test_method_replace(self, async_client: AsyncGcore) -> None:
             project_id=1,
             region_id=1,
             l7policy_id="023f2e34-7806-443b-bfae-16c324569a3d",
-            compare_type="REGEX",
         )
         assert_matches_type(TaskIDList, rule, path=["response"])
 
@@ -606,7 +600,6 @@ async def test_raw_response_replace(self, async_client: AsyncGcore) -> None:
             project_id=1,
             region_id=1,
             l7policy_id="023f2e34-7806-443b-bfae-16c324569a3d",
-            compare_type="REGEX",
         )
 
         assert response.is_closed is True
@@ -621,7 +614,6 @@ async def test_streaming_response_replace(self, async_client: AsyncGcore) -> Non
             project_id=1,
             region_id=1,
             l7policy_id="023f2e34-7806-443b-bfae-16c324569a3d",
-            compare_type="REGEX",
         ) as response:
             assert not response.is_closed
             assert response.http_request.headers.get("X-Stainless-Lang") == "python"
@@ -639,7 +631,6 @@ async def test_path_params_replace(self, async_client: AsyncGcore) -> None:
                 project_id=1,
                 region_id=1,
                 l7policy_id="",
-                compare_type="REGEX",
             )
 
         with pytest.raises(ValueError, match=r"Expected a non-empty value for `l7rule_id` but received ''"):
@@ -648,5 +639,4 @@ async def test_path_params_replace(self, async_client: AsyncGcore) -> None:
                 project_id=1,
                 region_id=1,
                 l7policy_id="023f2e34-7806-443b-bfae-16c324569a3d",
-                compare_type="REGEX",
             )
diff --git a/tests/api_resources/fastedge/apps/test_logs.py b/tests/api_resources/fastedge/apps/test_logs.py
index db4a3cc3..7773365d 100644
--- a/tests/api_resources/fastedge/apps/test_logs.py
+++ b/tests/api_resources/fastedge/apps/test_logs.py
@@ -22,14 +22,14 @@ class TestLogs:
     @parametrize
     def test_method_list(self, client: Gcore) -> None:
         log = client.fastedge.apps.logs.list(
-            id=0,
+            app_id=0,
         )
         assert_matches_type(SyncOffsetPageFastedgeAppLogs[Log], log, path=["response"])
 
     @parametrize
     def test_method_list_with_all_params(self, client: Gcore) -> None:
         log = client.fastedge.apps.logs.list(
-            id=0,
+            app_id=0,
             client_ip="192.168.1.1",
             edge="edge",
             from_=parse_datetime("2019-12-27T18:11:19.117Z"),
@@ -44,7 +44,7 @@ def test_method_list_with_all_params(self, client: Gcore) -> None:
     @parametrize
     def test_raw_response_list(self, client: Gcore) -> None:
         response = client.fastedge.apps.logs.with_raw_response.list(
-            id=0,
+            app_id=0,
         )
 
         assert response.is_closed is True
@@ -55,7 +55,7 @@ def test_raw_response_list(self, client: Gcore) -> None:
     @parametrize
     def test_streaming_response_list(self, client: Gcore) -> None:
         with client.fastedge.apps.logs.with_streaming_response.list(
-            id=0,
+            app_id=0,
         ) as response:
             assert not response.is_closed
             assert response.http_request.headers.get("X-Stainless-Lang") == "python"
@@ -74,14 +74,14 @@ class TestAsyncLogs:
     @parametrize
     async def test_method_list(self, async_client: AsyncGcore) -> None:
         log = await async_client.fastedge.apps.logs.list(
-            id=0,
+            app_id=0,
         )
         assert_matches_type(AsyncOffsetPageFastedgeAppLogs[Log], log, path=["response"])
 
     @parametrize
     async def test_method_list_with_all_params(self, async_client: AsyncGcore) -> None:
         log = await async_client.fastedge.apps.logs.list(
-            id=0,
+            app_id=0,
             client_ip="192.168.1.1",
             edge="edge",
             from_=parse_datetime("2019-12-27T18:11:19.117Z"),
@@ -96,7 +96,7 @@ async def test_method_list_with_all_params(self, async_client: AsyncGcore) -> No
     @parametrize
     async def test_raw_response_list(self, async_client: AsyncGcore) -> None:
         response = await async_client.fastedge.apps.logs.with_raw_response.list(
-            id=0,
+            app_id=0,
         )
 
         assert response.is_closed is True
@@ -107,7 +107,7 @@ async def test_raw_response_list(self, async_client: AsyncGcore) -> None:
     @parametrize
     async def test_streaming_response_list(self, async_client: AsyncGcore) -> None:
         async with async_client.fastedge.apps.logs.with_streaming_response.list(
-            id=0,
+            app_id=0,
         ) as response:
             assert not response.is_closed
             assert response.http_request.headers.get("X-Stainless-Lang") == "python"
diff --git a/tests/api_resources/fastedge/test_apps.py b/tests/api_resources/fastedge/test_apps.py
index b2e2949b..d2c13598 100644
--- a/tests/api_resources/fastedge/test_apps.py
+++ b/tests/api_resources/fastedge/test_apps.py
@@ -29,21 +29,21 @@ def test_method_create(self, client: Gcore) -> None:
     @parametrize
     def test_method_create_with_all_params(self, client: Gcore) -> None:
         app = client.fastedge.apps.create(
-            binary=0,
-            comment="comment",
-            debug=True,
+            binary=12345,
+            comment="Production API gateway for customer portal",
+            debug=False,
             env={
                 "var1": "value1",
                 "var2": "value2",
             },
             log="kafka",
-            name="name",
+            name="my-edge-app",
             rsp_headers={
                 "header1": "value1",
                 "header2": "value2",
             },
             secrets={"foo": {"id": 0}},
-            status=0,
+            status=1,
             stores={"foo": {"id": 0}},
             template=0,
         )
@@ -72,29 +72,29 @@ def test_streaming_response_create(self, client: Gcore) -> None:
     @parametrize
     def test_method_update(self, client: Gcore) -> None:
         app = client.fastedge.apps.update(
-            id=0,
+            app_id=0,
         )
         assert_matches_type(AppShort, app, path=["response"])
 
     @parametrize
     def test_method_update_with_all_params(self, client: Gcore) -> None:
         app = client.fastedge.apps.update(
-            id=0,
-            binary=0,
-            comment="comment",
-            debug=True,
+            app_id=0,
+            binary=12345,
+            comment="Production API gateway for customer portal",
+            debug=False,
             env={
                 "var1": "value1",
                 "var2": "value2",
             },
             log="kafka",
-            name="name",
+            name="my-edge-app",
             rsp_headers={
                 "header1": "value1",
                 "header2": "value2",
             },
             secrets={"foo": {"id": 0}},
-            status=0,
+            status=1,
             stores={"foo": {"id": 0}},
             template=0,
         )
@@ -103,7 +103,7 @@ def test_method_update_with_all_params(self, client: Gcore) -> None:
     @parametrize
     def test_raw_response_update(self, client: Gcore) -> None:
         response = client.fastedge.apps.with_raw_response.update(
-            id=0,
+            app_id=0,
         )
 
         assert response.is_closed is True
@@ -114,7 +114,7 @@ def test_raw_response_update(self, client: Gcore) -> None:
     @parametrize
     def test_streaming_response_update(self, client: Gcore) -> None:
         with client.fastedge.apps.with_streaming_response.update(
-            id=0,
+            app_id=0,
         ) as response:
             assert not response.is_closed
             assert response.http_request.headers.get("X-Stainless-Lang") == "python"
@@ -133,14 +133,14 @@ def test_method_list(self, client: Gcore) -> None:
     def test_method_list_with_all_params(self, client: Gcore) -> None:
         app = client.fastedge.apps.list(
             api_type="wasi-http",
-            binary=0,
-            limit=0,
-            name="name",
+            binary=1,
+            limit=1,
+            name="x",
             offset=0,
             ordering="name",
-            plan=0,
+            plan=1,
             status=0,
-            template=0,
+            template=1,
         )
         assert_matches_type(SyncOffsetPageFastedgeApps[AppShort], app, path=["response"])
 
@@ -229,30 +229,30 @@ def test_streaming_response_get(self, client: Gcore) -> None:
     @parametrize
     def test_method_replace(self, client: Gcore) -> None:
         app = client.fastedge.apps.replace(
-            id=0,
+            app_id=0,
         )
         assert_matches_type(AppShort, app, path=["response"])
 
     @parametrize
     def test_method_replace_with_all_params(self, client: Gcore) -> None:
         app = client.fastedge.apps.replace(
-            id=0,
+            app_id=0,
             body={
-                "binary": 0,
-                "comment": "comment",
-                "debug": True,
+                "binary": 12345,
+                "comment": "Production API gateway for customer portal",
+                "debug": False,
                 "env": {
                     "var1": "value1",
                     "var2": "value2",
                 },
                 "log": "kafka",
-                "name": "name",
+                "name": "my-edge-app",
                 "rsp_headers": {
                     "header1": "value1",
                     "header2": "value2",
                 },
                 "secrets": {"foo": {"id": 0}},
-                "status": 0,
+                "status": 1,
                 "stores": {"foo": {"id": 0}},
                 "template": 0,
             },
@@ -262,7 +262,7 @@ def test_method_replace_with_all_params(self, client: Gcore) -> None:
     @parametrize
     def test_raw_response_replace(self, client: Gcore) -> None:
         response = client.fastedge.apps.with_raw_response.replace(
-            id=0,
+            app_id=0,
         )
 
         assert response.is_closed is True
@@ -273,7 +273,7 @@ def test_raw_response_replace(self, client: Gcore) -> None:
     @parametrize
     def test_streaming_response_replace(self, client: Gcore) -> None:
         with client.fastedge.apps.with_streaming_response.replace(
-            id=0,
+            app_id=0,
         ) as response:
             assert not response.is_closed
             assert response.http_request.headers.get("X-Stainless-Lang") == "python"
@@ -297,21 +297,21 @@ async def test_method_create(self, async_client: AsyncGcore) -> None:
     @parametrize
     async def test_method_create_with_all_params(self, async_client: AsyncGcore) -> None:
         app = await async_client.fastedge.apps.create(
-            binary=0,
-            comment="comment",
-            debug=True,
+            binary=12345,
+            comment="Production API gateway for customer portal",
+            debug=False,
             env={
                 "var1": "value1",
                 "var2": "value2",
             },
             log="kafka",
-            name="name",
+            name="my-edge-app",
             rsp_headers={
                 "header1": "value1",
                 "header2": "value2",
             },
             secrets={"foo": {"id": 0}},
-            status=0,
+            status=1,
             stores={"foo": {"id": 0}},
             template=0,
         )
@@ -340,29 +340,29 @@ async def test_streaming_response_create(self, async_client: AsyncGcore) -> None
     @parametrize
     async def test_method_update(self, async_client: AsyncGcore) -> None:
         app = await async_client.fastedge.apps.update(
-            id=0,
+            app_id=0,
         )
         assert_matches_type(AppShort, app, path=["response"])
 
     @parametrize
     async def test_method_update_with_all_params(self, async_client: AsyncGcore) -> None:
         app = await async_client.fastedge.apps.update(
-            id=0,
-            binary=0,
-            comment="comment",
-            debug=True,
+            app_id=0,
+            binary=12345,
+            comment="Production API gateway for customer portal",
+            debug=False,
             env={
                 "var1": "value1",
                 "var2": "value2",
             },
             log="kafka",
-            name="name",
+            name="my-edge-app",
             rsp_headers={
                 "header1": "value1",
                 "header2": "value2",
             },
             secrets={"foo": {"id": 0}},
-            status=0,
+            status=1,
             stores={"foo": {"id": 0}},
             template=0,
         )
@@ -371,7 +371,7 @@ async def test_method_update_with_all_params(self, async_client: AsyncGcore) ->
     @parametrize
     async def test_raw_response_update(self, async_client: AsyncGcore) -> None:
         response = await async_client.fastedge.apps.with_raw_response.update(
-            id=0,
+            app_id=0,
         )
 
         assert response.is_closed is True
@@ -382,7 +382,7 @@ async def test_raw_response_update(self, async_client: AsyncGcore) -> None:
     @parametrize
     async def test_streaming_response_update(self, async_client: AsyncGcore) -> None:
         async with async_client.fastedge.apps.with_streaming_response.update(
-            id=0,
+            app_id=0,
         ) as response:
             assert not response.is_closed
             assert response.http_request.headers.get("X-Stainless-Lang") == "python"
@@ -401,14 +401,14 @@ async def test_method_list(self, async_client: AsyncGcore) -> None:
     async def test_method_list_with_all_params(self, async_client: AsyncGcore) -> None:
         app = await async_client.fastedge.apps.list(
             api_type="wasi-http",
-            binary=0,
-            limit=0,
-            name="name",
+            binary=1,
+            limit=1,
+            name="x",
             offset=0,
             ordering="name",
-            plan=0,
+            plan=1,
             status=0,
-            template=0,
+            template=1,
         )
         assert_matches_type(AsyncOffsetPageFastedgeApps[AppShort], app, path=["response"])
 
@@ -497,30 +497,30 @@ async def test_streaming_response_get(self, async_client: AsyncGcore) -> None:
     @parametrize
     async def test_method_replace(self, async_client: AsyncGcore) -> None:
         app = await async_client.fastedge.apps.replace(
-            id=0,
+            app_id=0,
         )
         assert_matches_type(AppShort, app, path=["response"])
 
     @parametrize
     async def test_method_replace_with_all_params(self, async_client: AsyncGcore) -> None:
         app = await async_client.fastedge.apps.replace(
-            id=0,
+            app_id=0,
             body={
-                "binary": 0,
-                "comment": "comment",
-                "debug": True,
+                "binary": 12345,
+                "comment": "Production API gateway for customer portal",
+                "debug": False,
                 "env": {
                     "var1": "value1",
                     "var2": "value2",
                 },
                 "log": "kafka",
-                "name": "name",
+                "name": "my-edge-app",
                 "rsp_headers": {
                     "header1": "value1",
                     "header2": "value2",
                 },
                 "secrets": {"foo": {"id": 0}},
-                "status": 0,
+                "status": 1,
                 "stores": {"foo": {"id": 0}},
                 "template": 0,
             },
@@ -530,7 +530,7 @@ async def test_method_replace_with_all_params(self, async_client: AsyncGcore) ->
     @parametrize
     async def test_raw_response_replace(self, async_client: AsyncGcore) -> None:
         response = await async_client.fastedge.apps.with_raw_response.replace(
-            id=0,
+            app_id=0,
         )
 
         assert response.is_closed is True
@@ -541,7 +541,7 @@ async def test_raw_response_replace(self, async_client: AsyncGcore) -> None:
     @parametrize
     async def test_streaming_response_replace(self, async_client: AsyncGcore) -> None:
         async with async_client.fastedge.apps.with_streaming_response.replace(
-            id=0,
+            app_id=0,
         ) as response:
             assert not response.is_closed
             assert response.http_request.headers.get("X-Stainless-Lang") == "python"
diff --git a/tests/api_resources/fastedge/test_kv_stores.py b/tests/api_resources/fastedge/test_kv_stores.py
index 55851568..e5aed6a7 100644
--- a/tests/api_resources/fastedge/test_kv_stores.py
+++ b/tests/api_resources/fastedge/test_kv_stores.py
@@ -33,8 +33,8 @@ def test_method_create_with_all_params(self, client: Gcore) -> None:
         kv_store = client.fastedge.kv_stores.create(
             name="name",
             byod={
-                "prefix": "prefix",
-                "url": "url",
+                "prefix": "app:prod:",
+                "url": "redis://redis.example.com:6379/0",
             },
             comment="comment",
         )
@@ -72,8 +72,8 @@ def test_method_list(self, client: Gcore) -> None:
     @parametrize
     def test_method_list_with_all_params(self, client: Gcore) -> None:
         kv_store = client.fastedge.kv_stores.list(
-            app_id=0,
-            limit=0,
+            app_id=1,
+            limit=1,
             offset=0,
         )
         assert_matches_type(KvStoreListResponse, kv_store, path=["response"])
@@ -163,7 +163,7 @@ def test_streaming_response_get(self, client: Gcore) -> None:
     @parametrize
     def test_method_replace(self, client: Gcore) -> None:
         kv_store = client.fastedge.kv_stores.replace(
-            id=0,
+            store_id=0,
             name="name",
         )
         assert_matches_type(KvStore, kv_store, path=["response"])
@@ -171,11 +171,11 @@ def test_method_replace(self, client: Gcore) -> None:
     @parametrize
     def test_method_replace_with_all_params(self, client: Gcore) -> None:
         kv_store = client.fastedge.kv_stores.replace(
-            id=0,
+            store_id=0,
             name="name",
             byod={
-                "prefix": "prefix",
-                "url": "url",
+                "prefix": "app:prod:",
+                "url": "redis://redis.example.com:6379/0",
             },
             comment="comment",
         )
@@ -184,7 +184,7 @@ def test_method_replace_with_all_params(self, client: Gcore) -> None:
     @parametrize
     def test_raw_response_replace(self, client: Gcore) -> None:
         response = client.fastedge.kv_stores.with_raw_response.replace(
-            id=0,
+            store_id=0,
             name="name",
         )
 
@@ -196,7 +196,7 @@ def test_raw_response_replace(self, client: Gcore) -> None:
     @parametrize
     def test_streaming_response_replace(self, client: Gcore) -> None:
         with client.fastedge.kv_stores.with_streaming_response.replace(
-            id=0,
+            store_id=0,
             name="name",
         ) as response:
             assert not response.is_closed
@@ -225,8 +225,8 @@ async def test_method_create_with_all_params(self, async_client: AsyncGcore) ->
         kv_store = await async_client.fastedge.kv_stores.create(
             name="name",
             byod={
-                "prefix": "prefix",
-                "url": "url",
+                "prefix": "app:prod:",
+                "url": "redis://redis.example.com:6379/0",
             },
             comment="comment",
         )
@@ -264,8 +264,8 @@ async def test_method_list(self, async_client: AsyncGcore) -> None:
     @parametrize
     async def test_method_list_with_all_params(self, async_client: AsyncGcore) -> None:
         kv_store = await async_client.fastedge.kv_stores.list(
-            app_id=0,
-            limit=0,
+            app_id=1,
+            limit=1,
             offset=0,
         )
         assert_matches_type(KvStoreListResponse, kv_store, path=["response"])
@@ -355,7 +355,7 @@ async def test_streaming_response_get(self, async_client: AsyncGcore) -> None:
     @parametrize
     async def test_method_replace(self, async_client: AsyncGcore) -> None:
         kv_store = await async_client.fastedge.kv_stores.replace(
-            id=0,
+            store_id=0,
             name="name",
         )
         assert_matches_type(KvStore, kv_store, path=["response"])
@@ -363,11 +363,11 @@ async def test_method_replace(self, async_client: AsyncGcore) -> None:
     @parametrize
     async def test_method_replace_with_all_params(self, async_client: AsyncGcore) -> None:
         kv_store = await async_client.fastedge.kv_stores.replace(
-            id=0,
+            store_id=0,
             name="name",
             byod={
-                "prefix": "prefix",
-                "url": "url",
+                "prefix": "app:prod:",
+                "url": "redis://redis.example.com:6379/0",
             },
             comment="comment",
         )
@@ -376,7 +376,7 @@ async def test_method_replace_with_all_params(self, async_client: AsyncGcore) ->
     @parametrize
     async def test_raw_response_replace(self, async_client: AsyncGcore) -> None:
         response = await async_client.fastedge.kv_stores.with_raw_response.replace(
-            id=0,
+            store_id=0,
             name="name",
         )
 
@@ -388,7 +388,7 @@ async def test_raw_response_replace(self, async_client: AsyncGcore) -> None:
     @parametrize
     async def test_streaming_response_replace(self, async_client: AsyncGcore) -> None:
         async with async_client.fastedge.kv_stores.with_streaming_response.replace(
-            id=0,
+            store_id=0,
             name="name",
         ) as response:
             assert not response.is_closed
diff --git a/tests/api_resources/fastedge/test_secrets.py b/tests/api_resources/fastedge/test_secrets.py
index 684ff5d4..8a2b035c 100644
--- a/tests/api_resources/fastedge/test_secrets.py
+++ b/tests/api_resources/fastedge/test_secrets.py
@@ -35,8 +35,8 @@ def test_method_create_with_all_params(self, client: Gcore) -> None:
             comment="comment",
             secret_slots=[
                 {
-                    "slot": 0,
-                    "value": "value",
+                    "slot": 1704067200,
+                    "value": "P@ssw0rd123!",
                 }
             ],
         )
@@ -69,20 +69,20 @@ def test_streaming_response_create(self, client: Gcore) -> None:
     @parametrize
     def test_method_update(self, client: Gcore) -> None:
         secret = client.fastedge.secrets.update(
-            id=0,
+            secret_id=0,
         )
         assert_matches_type(Secret, secret, path=["response"])
 
     @parametrize
     def test_method_update_with_all_params(self, client: Gcore) -> None:
         secret = client.fastedge.secrets.update(
-            id=0,
+            secret_id=0,
             comment="comment",
             name="name",
             secret_slots=[
                 {
-                    "slot": 0,
-                    "value": "value",
+                    "slot": 1704067200,
+                    "value": "P@ssw0rd123!",
                 }
             ],
         )
@@ -91,7 +91,7 @@ def test_method_update_with_all_params(self, client: Gcore) -> None:
     @parametrize
     def test_raw_response_update(self, client: Gcore) -> None:
         response = client.fastedge.secrets.with_raw_response.update(
-            id=0,
+            secret_id=0,
         )
 
         assert response.is_closed is True
@@ -102,7 +102,7 @@ def test_raw_response_update(self, client: Gcore) -> None:
     @parametrize
     def test_streaming_response_update(self, client: Gcore) -> None:
         with client.fastedge.secrets.with_streaming_response.update(
-            id=0,
+            secret_id=0,
         ) as response:
             assert not response.is_closed
             assert response.http_request.headers.get("X-Stainless-Lang") == "python"
@@ -120,8 +120,8 @@ def test_method_list(self, client: Gcore) -> None:
     @parametrize
     def test_method_list_with_all_params(self, client: Gcore) -> None:
         secret = client.fastedge.secrets.list(
-            app_id=0,
-            secret_name="secret_name",
+            app_id=1,
+            secret_name="x",
         )
         assert_matches_type(SecretListResponse, secret, path=["response"])
 
@@ -148,14 +148,14 @@ def test_streaming_response_list(self, client: Gcore) -> None:
     @parametrize
     def test_method_delete(self, client: Gcore) -> None:
         secret = client.fastedge.secrets.delete(
-            id=0,
+            secret_id=0,
         )
         assert secret is None
 
     @parametrize
     def test_method_delete_with_all_params(self, client: Gcore) -> None:
         secret = client.fastedge.secrets.delete(
-            id=0,
+            secret_id=0,
             force=True,
         )
         assert secret is None
@@ -163,7 +163,7 @@ def test_method_delete_with_all_params(self, client: Gcore) -> None:
     @parametrize
     def test_raw_response_delete(self, client: Gcore) -> None:
         response = client.fastedge.secrets.with_raw_response.delete(
-            id=0,
+            secret_id=0,
         )
 
         assert response.is_closed is True
@@ -174,7 +174,7 @@ def test_raw_response_delete(self, client: Gcore) -> None:
     @parametrize
     def test_streaming_response_delete(self, client: Gcore) -> None:
         with client.fastedge.secrets.with_streaming_response.delete(
-            id=0,
+            secret_id=0,
         ) as response:
             assert not response.is_closed
             assert response.http_request.headers.get("X-Stainless-Lang") == "python"
@@ -218,31 +218,33 @@ def test_streaming_response_get(self, client: Gcore) -> None:
     @parametrize
     def test_method_replace(self, client: Gcore) -> None:
         secret = client.fastedge.secrets.replace(
-            id=0,
-            name="name",
+            secret_id=0,
+            body={},
         )
         assert_matches_type(Secret, secret, path=["response"])
 
     @parametrize
     def test_method_replace_with_all_params(self, client: Gcore) -> None:
         secret = client.fastedge.secrets.replace(
-            id=0,
-            name="name",
-            comment="comment",
-            secret_slots=[
-                {
-                    "slot": 0,
-                    "value": "value",
-                }
-            ],
+            secret_id=0,
+            body={
+                "comment": "comment",
+                "name": "name",
+                "secret_slots": [
+                    {
+                        "slot": 1704067200,
+                        "value": "P@ssw0rd123!",
+                    }
+                ],
+            },
         )
         assert_matches_type(Secret, secret, path=["response"])
 
     @parametrize
     def test_raw_response_replace(self, client: Gcore) -> None:
         response = client.fastedge.secrets.with_raw_response.replace(
-            id=0,
-            name="name",
+            secret_id=0,
+            body={},
         )
 
         assert response.is_closed is True
@@ -253,8 +255,8 @@ def test_raw_response_replace(self, client: Gcore) -> None:
     @parametrize
     def test_streaming_response_replace(self, client: Gcore) -> None:
         with client.fastedge.secrets.with_streaming_response.replace(
-            id=0,
-            name="name",
+            secret_id=0,
+            body={},
         ) as response:
             assert not response.is_closed
             assert response.http_request.headers.get("X-Stainless-Lang") == "python"
@@ -284,8 +286,8 @@ async def test_method_create_with_all_params(self, async_client: AsyncGcore) ->
             comment="comment",
             secret_slots=[
                 {
-                    "slot": 0,
-                    "value": "value",
+                    "slot": 1704067200,
+                    "value": "P@ssw0rd123!",
                 }
             ],
         )
@@ -318,20 +320,20 @@ async def test_streaming_response_create(self, async_client: AsyncGcore) -> None
     @parametrize
     async def test_method_update(self, async_client: AsyncGcore) -> None:
         secret = await async_client.fastedge.secrets.update(
-            id=0,
+            secret_id=0,
         )
         assert_matches_type(Secret, secret, path=["response"])
 
     @parametrize
     async def test_method_update_with_all_params(self, async_client: AsyncGcore) -> None:
         secret = await async_client.fastedge.secrets.update(
-            id=0,
+            secret_id=0,
             comment="comment",
             name="name",
             secret_slots=[
                 {
-                    "slot": 0,
-                    "value": "value",
+                    "slot": 1704067200,
+                    "value": "P@ssw0rd123!",
                 }
             ],
         )
@@ -340,7 +342,7 @@ async def test_method_update_with_all_params(self, async_client: AsyncGcore) ->
     @parametrize
     async def test_raw_response_update(self, async_client: AsyncGcore) -> None:
         response = await async_client.fastedge.secrets.with_raw_response.update(
-            id=0,
+            secret_id=0,
         )
 
         assert response.is_closed is True
@@ -351,7 +353,7 @@ async def test_raw_response_update(self, async_client: AsyncGcore) -> None:
     @parametrize
     async def test_streaming_response_update(self, async_client: AsyncGcore) -> None:
         async with async_client.fastedge.secrets.with_streaming_response.update(
-            id=0,
+            secret_id=0,
         ) as response:
             assert not response.is_closed
             assert response.http_request.headers.get("X-Stainless-Lang") == "python"
@@ -369,8 +371,8 @@ async def test_method_list(self, async_client: AsyncGcore) -> None:
     @parametrize
     async def test_method_list_with_all_params(self, async_client: AsyncGcore) -> None:
         secret = await async_client.fastedge.secrets.list(
-            app_id=0,
-            secret_name="secret_name",
+            app_id=1,
+            secret_name="x",
         )
         assert_matches_type(SecretListResponse, secret, path=["response"])
 
@@ -397,14 +399,14 @@ async def test_streaming_response_list(self, async_client: AsyncGcore) -> None:
     @parametrize
     async def test_method_delete(self, async_client: AsyncGcore) -> None:
         secret = await async_client.fastedge.secrets.delete(
-            id=0,
+            secret_id=0,
         )
         assert secret is None
 
     @parametrize
     async def test_method_delete_with_all_params(self, async_client: AsyncGcore) -> None:
         secret = await async_client.fastedge.secrets.delete(
-            id=0,
+            secret_id=0,
             force=True,
         )
         assert secret is None
@@ -412,7 +414,7 @@ async def test_method_delete_with_all_params(self, async_client: AsyncGcore) ->
     @parametrize
     async def test_raw_response_delete(self, async_client: AsyncGcore) -> None:
         response = await async_client.fastedge.secrets.with_raw_response.delete(
-            id=0,
+            secret_id=0,
         )
 
         assert response.is_closed is True
@@ -423,7 +425,7 @@ async def test_raw_response_delete(self, async_client: AsyncGcore) -> None:
     @parametrize
     async def test_streaming_response_delete(self, async_client: AsyncGcore) -> None:
         async with async_client.fastedge.secrets.with_streaming_response.delete(
-            id=0,
+            secret_id=0,
         ) as response:
             assert not response.is_closed
             assert response.http_request.headers.get("X-Stainless-Lang") == "python"
@@ -467,31 +469,33 @@ async def test_streaming_response_get(self, async_client: AsyncGcore) -> None:
     @parametrize
     async def test_method_replace(self, async_client: AsyncGcore) -> None:
         secret = await async_client.fastedge.secrets.replace(
-            id=0,
-            name="name",
+            secret_id=0,
+            body={},
         )
         assert_matches_type(Secret, secret, path=["response"])
 
     @parametrize
     async def test_method_replace_with_all_params(self, async_client: AsyncGcore) -> None:
         secret = await async_client.fastedge.secrets.replace(
-            id=0,
-            name="name",
-            comment="comment",
-            secret_slots=[
-                {
-                    "slot": 0,
-                    "value": "value",
-                }
-            ],
+            secret_id=0,
+            body={
+                "comment": "comment",
+                "name": "name",
+                "secret_slots": [
+                    {
+                        "slot": 1704067200,
+                        "value": "P@ssw0rd123!",
+                    }
+                ],
+            },
         )
         assert_matches_type(Secret, secret, path=["response"])
 
     @parametrize
     async def test_raw_response_replace(self, async_client: AsyncGcore) -> None:
         response = await async_client.fastedge.secrets.with_raw_response.replace(
-            id=0,
-            name="name",
+            secret_id=0,
+            body={},
         )
 
         assert response.is_closed is True
@@ -502,8 +506,8 @@ async def test_raw_response_replace(self, async_client: AsyncGcore) -> None:
     @parametrize
     async def test_streaming_response_replace(self, async_client: AsyncGcore) -> None:
         async with async_client.fastedge.secrets.with_streaming_response.replace(
-            id=0,
-            name="name",
+            secret_id=0,
+            body={},
         ) as response:
             assert not response.is_closed
             assert response.http_request.headers.get("X-Stainless-Lang") == "python"
diff --git a/tests/api_resources/fastedge/test_templates.py b/tests/api_resources/fastedge/test_templates.py
index 3b530e74..4f86e098 100644
--- a/tests/api_resources/fastedge/test_templates.py
+++ b/tests/api_resources/fastedge/test_templates.py
@@ -24,14 +24,14 @@ class TestTemplates:
     @parametrize
     def test_method_create(self, client: Gcore) -> None:
         template = client.fastedge.templates.create(
-            binary_id=0,
-            name="name",
+            binary_id=12345,
+            name="api-gateway-template",
             owned=True,
             params=[
                 {
                     "data_type": "string",
                     "mandatory": True,
-                    "name": "name",
+                    "name": "api_key",
                 }
             ],
         )
@@ -40,33 +40,34 @@ def test_method_create(self, client: Gcore) -> None:
     @parametrize
     def test_method_create_with_all_params(self, client: Gcore) -> None:
         template = client.fastedge.templates.create(
-            binary_id=0,
-            name="name",
+            binary_id=12345,
+            name="api-gateway-template",
             owned=True,
             params=[
                 {
                     "data_type": "string",
                     "mandatory": True,
-                    "name": "name",
-                    "descr": "descr",
+                    "name": "api_key",
+                    "descr": "API key for external service authentication",
+                    "metadata": "metadata",
                 }
             ],
-            long_descr="long_descr",
-            short_descr="short_descr",
+            long_descr="Complete API gateway solution with JWT authentication, rate limiting, and request transformation capabilities.",
+            short_descr="HTTP API gateway with authentication",
         )
         assert_matches_type(TemplateShort, template, path=["response"])
 
     @parametrize
     def test_raw_response_create(self, client: Gcore) -> None:
         response = client.fastedge.templates.with_raw_response.create(
-            binary_id=0,
-            name="name",
+            binary_id=12345,
+            name="api-gateway-template",
             owned=True,
             params=[
                 {
                     "data_type": "string",
                     "mandatory": True,
-                    "name": "name",
+                    "name": "api_key",
                 }
             ],
         )
@@ -79,14 +80,14 @@ def test_raw_response_create(self, client: Gcore) -> None:
     @parametrize
     def test_streaming_response_create(self, client: Gcore) -> None:
         with client.fastedge.templates.with_streaming_response.create(
-            binary_id=0,
-            name="name",
+            binary_id=12345,
+            name="api-gateway-template",
             owned=True,
             params=[
                 {
                     "data_type": "string",
                     "mandatory": True,
-                    "name": "name",
+                    "name": "api_key",
                 }
             ],
         ) as response:
@@ -107,7 +108,7 @@ def test_method_list(self, client: Gcore) -> None:
     def test_method_list_with_all_params(self, client: Gcore) -> None:
         template = client.fastedge.templates.list(
             api_type="wasi-http",
-            limit=0,
+            limit=1,
             offset=0,
             only_mine=True,
         )
@@ -136,14 +137,14 @@ def test_streaming_response_list(self, client: Gcore) -> None:
     @parametrize
     def test_method_delete(self, client: Gcore) -> None:
         template = client.fastedge.templates.delete(
-            id=0,
+            template_id=0,
         )
         assert template is None
 
     @parametrize
     def test_method_delete_with_all_params(self, client: Gcore) -> None:
         template = client.fastedge.templates.delete(
-            id=0,
+            template_id=0,
             force=True,
         )
         assert template is None
@@ -151,7 +152,7 @@ def test_method_delete_with_all_params(self, client: Gcore) -> None:
     @parametrize
     def test_raw_response_delete(self, client: Gcore) -> None:
         response = client.fastedge.templates.with_raw_response.delete(
-            id=0,
+            template_id=0,
         )
 
         assert response.is_closed is True
@@ -162,7 +163,7 @@ def test_raw_response_delete(self, client: Gcore) -> None:
     @parametrize
     def test_streaming_response_delete(self, client: Gcore) -> None:
         with client.fastedge.templates.with_streaming_response.delete(
-            id=0,
+            template_id=0,
         ) as response:
             assert not response.is_closed
             assert response.http_request.headers.get("X-Stainless-Lang") == "python"
@@ -206,15 +207,15 @@ def test_streaming_response_get(self, client: Gcore) -> None:
     @parametrize
     def test_method_replace(self, client: Gcore) -> None:
         template = client.fastedge.templates.replace(
-            id=0,
-            binary_id=0,
-            name="name",
+            template_id=0,
+            binary_id=12345,
+            name="api-gateway-template",
             owned=True,
             params=[
                 {
                     "data_type": "string",
                     "mandatory": True,
-                    "name": "name",
+                    "name": "api_key",
                 }
             ],
         )
@@ -223,35 +224,36 @@ def test_method_replace(self, client: Gcore) -> None:
     @parametrize
     def test_method_replace_with_all_params(self, client: Gcore) -> None:
         template = client.fastedge.templates.replace(
-            id=0,
-            binary_id=0,
-            name="name",
+            template_id=0,
+            binary_id=12345,
+            name="api-gateway-template",
             owned=True,
             params=[
                 {
                     "data_type": "string",
                     "mandatory": True,
-                    "name": "name",
-                    "descr": "descr",
+                    "name": "api_key",
+                    "descr": "API key for external service authentication",
+                    "metadata": "metadata",
                 }
             ],
-            long_descr="long_descr",
-            short_descr="short_descr",
+            long_descr="Complete API gateway solution with JWT authentication, rate limiting, and request transformation capabilities.",
+            short_descr="HTTP API gateway with authentication",
         )
         assert_matches_type(TemplateShort, template, path=["response"])
 
     @parametrize
     def test_raw_response_replace(self, client: Gcore) -> None:
         response = client.fastedge.templates.with_raw_response.replace(
-            id=0,
-            binary_id=0,
-            name="name",
+            template_id=0,
+            binary_id=12345,
+            name="api-gateway-template",
             owned=True,
             params=[
                 {
                     "data_type": "string",
                     "mandatory": True,
-                    "name": "name",
+                    "name": "api_key",
                 }
             ],
         )
@@ -264,15 +266,15 @@ def test_raw_response_replace(self, client: Gcore) -> None:
     @parametrize
     def test_streaming_response_replace(self, client: Gcore) -> None:
         with client.fastedge.templates.with_streaming_response.replace(
-            id=0,
-            binary_id=0,
-            name="name",
+            template_id=0,
+            binary_id=12345,
+            name="api-gateway-template",
             owned=True,
             params=[
                 {
                     "data_type": "string",
                     "mandatory": True,
-                    "name": "name",
+                    "name": "api_key",
                 }
             ],
         ) as response:
@@ -293,14 +295,14 @@ class TestAsyncTemplates:
     @parametrize
     async def test_method_create(self, async_client: AsyncGcore) -> None:
         template = await async_client.fastedge.templates.create(
-            binary_id=0,
-            name="name",
+            binary_id=12345,
+            name="api-gateway-template",
             owned=True,
             params=[
                 {
                     "data_type": "string",
                     "mandatory": True,
-                    "name": "name",
+                    "name": "api_key",
                 }
             ],
         )
@@ -309,33 +311,34 @@ async def test_method_create(self, async_client: AsyncGcore) -> None:
     @parametrize
     async def test_method_create_with_all_params(self, async_client: AsyncGcore) -> None:
         template = await async_client.fastedge.templates.create(
-            binary_id=0,
-            name="name",
+            binary_id=12345,
+            name="api-gateway-template",
             owned=True,
             params=[
                 {
                     "data_type": "string",
                     "mandatory": True,
-                    "name": "name",
-                    "descr": "descr",
+                    "name": "api_key",
+                    "descr": "API key for external service authentication",
+                    "metadata": "metadata",
                 }
             ],
-            long_descr="long_descr",
-            short_descr="short_descr",
+            long_descr="Complete API gateway solution with JWT authentication, rate limiting, and request transformation capabilities.",
+            short_descr="HTTP API gateway with authentication",
         )
         assert_matches_type(TemplateShort, template, path=["response"])
 
     @parametrize
     async def test_raw_response_create(self, async_client: AsyncGcore) -> None:
         response = await async_client.fastedge.templates.with_raw_response.create(
-            binary_id=0,
-            name="name",
+            binary_id=12345,
+            name="api-gateway-template",
             owned=True,
             params=[
                 {
                     "data_type": "string",
                     "mandatory": True,
-                    "name": "name",
+                    "name": "api_key",
                 }
             ],
         )
@@ -348,14 +351,14 @@ async def test_raw_response_create(self, async_client: AsyncGcore) -> None:
     @parametrize
     async def test_streaming_response_create(self, async_client: AsyncGcore) -> None:
         async with async_client.fastedge.templates.with_streaming_response.create(
-            binary_id=0,
-            name="name",
+            binary_id=12345,
+            name="api-gateway-template",
             owned=True,
             params=[
                 {
                     "data_type": "string",
                     "mandatory": True,
-                    "name": "name",
+                    "name": "api_key",
                 }
             ],
         ) as response:
@@ -376,7 +379,7 @@ async def test_method_list(self, async_client: AsyncGcore) -> None:
     async def test_method_list_with_all_params(self, async_client: AsyncGcore) -> None:
         template = await async_client.fastedge.templates.list(
             api_type="wasi-http",
-            limit=0,
+            limit=1,
             offset=0,
             only_mine=True,
         )
@@ -405,14 +408,14 @@ async def test_streaming_response_list(self, async_client: AsyncGcore) -> None:
     @parametrize
     async def test_method_delete(self, async_client: AsyncGcore) -> None:
         template = await async_client.fastedge.templates.delete(
-            id=0,
+            template_id=0,
         )
         assert template is None
 
     @parametrize
     async def test_method_delete_with_all_params(self, async_client: AsyncGcore) -> None:
         template = await async_client.fastedge.templates.delete(
-            id=0,
+            template_id=0,
             force=True,
         )
         assert template is None
@@ -420,7 +423,7 @@ async def test_method_delete_with_all_params(self, async_client: AsyncGcore) ->
     @parametrize
     async def test_raw_response_delete(self, async_client: AsyncGcore) -> None:
         response = await async_client.fastedge.templates.with_raw_response.delete(
-            id=0,
+            template_id=0,
         )
 
         assert response.is_closed is True
@@ -431,7 +434,7 @@ async def test_raw_response_delete(self, async_client: AsyncGcore) -> None:
     @parametrize
     async def test_streaming_response_delete(self, async_client: AsyncGcore) -> None:
         async with async_client.fastedge.templates.with_streaming_response.delete(
-            id=0,
+            template_id=0,
         ) as response:
             assert not response.is_closed
             assert response.http_request.headers.get("X-Stainless-Lang") == "python"
@@ -475,15 +478,15 @@ async def test_streaming_response_get(self, async_client: AsyncGcore) -> None:
     @parametrize
     async def test_method_replace(self, async_client: AsyncGcore) -> None:
         template = await async_client.fastedge.templates.replace(
-            id=0,
-            binary_id=0,
-            name="name",
+            template_id=0,
+            binary_id=12345,
+            name="api-gateway-template",
             owned=True,
             params=[
                 {
                     "data_type": "string",
                     "mandatory": True,
-                    "name": "name",
+                    "name": "api_key",
                 }
             ],
         )
@@ -492,35 +495,36 @@ async def test_method_replace(self, async_client: AsyncGcore) -> None:
     @parametrize
     async def test_method_replace_with_all_params(self, async_client: AsyncGcore) -> None:
         template = await async_client.fastedge.templates.replace(
-            id=0,
-            binary_id=0,
-            name="name",
+            template_id=0,
+            binary_id=12345,
+            name="api-gateway-template",
             owned=True,
             params=[
                 {
                     "data_type": "string",
                     "mandatory": True,
-                    "name": "name",
-                    "descr": "descr",
+                    "name": "api_key",
+                    "descr": "API key for external service authentication",
+                    "metadata": "metadata",
                 }
             ],
-            long_descr="long_descr",
-            short_descr="short_descr",
+            long_descr="Complete API gateway solution with JWT authentication, rate limiting, and request transformation capabilities.",
+            short_descr="HTTP API gateway with authentication",
         )
         assert_matches_type(TemplateShort, template, path=["response"])
 
     @parametrize
     async def test_raw_response_replace(self, async_client: AsyncGcore) -> None:
         response = await async_client.fastedge.templates.with_raw_response.replace(
-            id=0,
-            binary_id=0,
-            name="name",
+            template_id=0,
+            binary_id=12345,
+            name="api-gateway-template",
             owned=True,
             params=[
                 {
                     "data_type": "string",
                     "mandatory": True,
-                    "name": "name",
+                    "name": "api_key",
                 }
             ],
         )
@@ -533,15 +537,15 @@ async def test_raw_response_replace(self, async_client: AsyncGcore) -> None:
     @parametrize
     async def test_streaming_response_replace(self, async_client: AsyncGcore) -> None:
         async with async_client.fastedge.templates.with_streaming_response.replace(
-            id=0,
-            binary_id=0,
-            name="name",
+            template_id=0,
+            binary_id=12345,
+            name="api-gateway-template",
             owned=True,
             params=[
                 {
                     "data_type": "string",
                     "mandatory": True,
-                    "name": "name",
+                    "name": "api_key",
                 }
             ],
         ) as response:
diff --git a/tests/api_resources/test_storage.py b/tests/api_resources/test_storage.py
index 8261bb66..90e1d446 100644
--- a/tests/api_resources/test_storage.py
+++ b/tests/api_resources/test_storage.py
@@ -124,28 +124,33 @@ def test_streaming_response_update(self, client: Gcore) -> None:
 
     @parametrize
     def test_method_list(self, client: Gcore) -> None:
-        storage = client.storage.list()
+        with pytest.warns(DeprecationWarning):
+            storage = client.storage.list()
+
         assert_matches_type(SyncOffsetPage[Storage], storage, path=["response"])
 
     @parametrize
     def test_method_list_with_all_params(self, client: Gcore) -> None:
-        storage = client.storage.list(
-            id="id",
-            limit=1,
-            location="location",
-            name="name",
-            offset=0,
-            order_by="order_by",
-            order_direction="asc",
-            show_deleted=True,
-            status="active",
-            type="s3_compatible",
-        )
+        with pytest.warns(DeprecationWarning):
+            storage = client.storage.list(
+                id="id",
+                limit=1,
+                location="location",
+                name="name",
+                offset=0,
+                order_by="order_by",
+                order_direction="asc",
+                show_deleted=True,
+                status="active",
+                type="s3_compatible",
+            )
+
         assert_matches_type(SyncOffsetPage[Storage], storage, path=["response"])
 
     @parametrize
     def test_raw_response_list(self, client: Gcore) -> None:
-        response = client.storage.with_raw_response.list()
+        with pytest.warns(DeprecationWarning):
+            response = client.storage.with_raw_response.list()
 
         assert response.is_closed is True
         assert response.http_request.headers.get("X-Stainless-Lang") == "python"
@@ -154,12 +159,13 @@ def test_raw_response_list(self, client: Gcore) -> None:
 
     @parametrize
     def test_streaming_response_list(self, client: Gcore) -> None:
-        with client.storage.with_streaming_response.list() as response:
-            assert not response.is_closed
-            assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+        with pytest.warns(DeprecationWarning):
+            with client.storage.with_streaming_response.list() as response:
+                assert not response.is_closed
+                assert response.http_request.headers.get("X-Stainless-Lang") == "python"
 
-            storage = response.parse()
-            assert_matches_type(SyncOffsetPage[Storage], storage, path=["response"])
+                storage = response.parse()
+                assert_matches_type(SyncOffsetPage[Storage], storage, path=["response"])
 
         assert cast(Any, response.is_closed) is True
 
@@ -200,16 +206,19 @@ def test_streaming_response_delete(self, client: Gcore) -> None:
 
     @parametrize
     def test_method_get(self, client: Gcore) -> None:
-        storage = client.storage.get(
-            0,
-        )
+        with pytest.warns(DeprecationWarning):
+            storage = client.storage.get(
+                0,
+            )
+
         assert_matches_type(Storage, storage, path=["response"])
 
     @parametrize
     def test_raw_response_get(self, client: Gcore) -> None:
-        response = client.storage.with_raw_response.get(
-            0,
-        )
+        with pytest.warns(DeprecationWarning):
+            response = client.storage.with_raw_response.get(
+                0,
+            )
 
         assert response.is_closed is True
         assert response.http_request.headers.get("X-Stainless-Lang") == "python"
@@ -218,14 +227,15 @@ def test_raw_response_get(self, client: Gcore) -> None:
 
     @parametrize
     def test_streaming_response_get(self, client: Gcore) -> None:
-        with client.storage.with_streaming_response.get(
-            0,
-        ) as response:
-            assert not response.is_closed
-            assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+        with pytest.warns(DeprecationWarning):
+            with client.storage.with_streaming_response.get(
+                0,
+            ) as response:
+                assert not response.is_closed
+                assert response.http_request.headers.get("X-Stainless-Lang") == "python"
 
-            storage = response.parse()
-            assert_matches_type(Storage, storage, path=["response"])
+                storage = response.parse()
+                assert_matches_type(Storage, storage, path=["response"])
 
         assert cast(Any, response.is_closed) is True
 
@@ -269,24 +279,29 @@ def test_streaming_response_link_ssh_key(self, client: Gcore) -> None:
 
     @parametrize
     def test_method_restore(self, client: Gcore) -> None:
-        storage = client.storage.restore(
-            storage_id=0,
-        )
+        with pytest.warns(DeprecationWarning):
+            storage = client.storage.restore(
+                storage_id=0,
+            )
+
         assert storage is None
 
     @parametrize
     def test_method_restore_with_all_params(self, client: Gcore) -> None:
-        storage = client.storage.restore(
-            storage_id=0,
-            client_id=0,
-        )
+        with pytest.warns(DeprecationWarning):
+            storage = client.storage.restore(
+                storage_id=0,
+                client_id=0,
+            )
+
         assert storage is None
 
     @parametrize
     def test_raw_response_restore(self, client: Gcore) -> None:
-        response = client.storage.with_raw_response.restore(
-            storage_id=0,
-        )
+        with pytest.warns(DeprecationWarning):
+            response = client.storage.with_raw_response.restore(
+                storage_id=0,
+            )
 
         assert response.is_closed is True
         assert response.http_request.headers.get("X-Stainless-Lang") == "python"
@@ -295,14 +310,15 @@ def test_raw_response_restore(self, client: Gcore) -> None:
 
     @parametrize
     def test_streaming_response_restore(self, client: Gcore) -> None:
-        with client.storage.with_streaming_response.restore(
-            storage_id=0,
-        ) as response:
-            assert not response.is_closed
-            assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+        with pytest.warns(DeprecationWarning):
+            with client.storage.with_streaming_response.restore(
+                storage_id=0,
+            ) as response:
+                assert not response.is_closed
+                assert response.http_request.headers.get("X-Stainless-Lang") == "python"
 
-            storage = response.parse()
-            assert storage is None
+                storage = response.parse()
+                assert storage is None
 
         assert cast(Any, response.is_closed) is True
 
@@ -452,28 +468,33 @@ async def test_streaming_response_update(self, async_client: AsyncGcore) -> None
 
     @parametrize
     async def test_method_list(self, async_client: AsyncGcore) -> None:
-        storage = await async_client.storage.list()
+        with pytest.warns(DeprecationWarning):
+            storage = await async_client.storage.list()
+
         assert_matches_type(AsyncOffsetPage[Storage], storage, path=["response"])
 
     @parametrize
     async def test_method_list_with_all_params(self, async_client: AsyncGcore) -> None:
-        storage = await async_client.storage.list(
-            id="id",
-            limit=1,
-            location="location",
-            name="name",
-            offset=0,
-            order_by="order_by",
-            order_direction="asc",
-            show_deleted=True,
-            status="active",
-            type="s3_compatible",
-        )
+        with pytest.warns(DeprecationWarning):
+            storage = await async_client.storage.list(
+                id="id",
+                limit=1,
+                location="location",
+                name="name",
+                offset=0,
+                order_by="order_by",
+                order_direction="asc",
+                show_deleted=True,
+                status="active",
+                type="s3_compatible",
+            )
+
         assert_matches_type(AsyncOffsetPage[Storage], storage, path=["response"])
 
     @parametrize
     async def test_raw_response_list(self, async_client: AsyncGcore) -> None:
-        response = await async_client.storage.with_raw_response.list()
+        with pytest.warns(DeprecationWarning):
+            response = await async_client.storage.with_raw_response.list()
 
         assert response.is_closed is True
         assert response.http_request.headers.get("X-Stainless-Lang") == "python"
@@ -482,12 +503,13 @@ async def test_raw_response_list(self, async_client: AsyncGcore) -> None:
 
     @parametrize
     async def test_streaming_response_list(self, async_client: AsyncGcore) -> None:
-        async with async_client.storage.with_streaming_response.list() as response:
-            assert not response.is_closed
-            assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+        with pytest.warns(DeprecationWarning):
+            async with async_client.storage.with_streaming_response.list() as response:
+                assert not response.is_closed
+                assert response.http_request.headers.get("X-Stainless-Lang") == "python"
 
-            storage = await response.parse()
-            assert_matches_type(AsyncOffsetPage[Storage], storage, path=["response"])
+                storage = await response.parse()
+                assert_matches_type(AsyncOffsetPage[Storage], storage, path=["response"])
 
         assert cast(Any, response.is_closed) is True
 
@@ -528,16 +550,19 @@ async def test_streaming_response_delete(self, async_client: AsyncGcore) -> None
 
     @parametrize
     async def test_method_get(self, async_client: AsyncGcore) -> None:
-        storage = await async_client.storage.get(
-            0,
-        )
+        with pytest.warns(DeprecationWarning):
+            storage = await async_client.storage.get(
+                0,
+            )
+
         assert_matches_type(Storage, storage, path=["response"])
 
     @parametrize
     async def test_raw_response_get(self, async_client: AsyncGcore) -> None:
-        response = await async_client.storage.with_raw_response.get(
-            0,
-        )
+        with pytest.warns(DeprecationWarning):
+            response = await async_client.storage.with_raw_response.get(
+                0,
+            )
 
         assert response.is_closed is True
         assert response.http_request.headers.get("X-Stainless-Lang") == "python"
@@ -546,14 +571,15 @@ async def test_raw_response_get(self, async_client: AsyncGcore) -> None:
 
     @parametrize
     async def test_streaming_response_get(self, async_client: AsyncGcore) -> None:
-        async with async_client.storage.with_streaming_response.get(
-            0,
-        ) as response:
-            assert not response.is_closed
-            assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+        with pytest.warns(DeprecationWarning):
+            async with async_client.storage.with_streaming_response.get(
+                0,
+            ) as response:
+                assert not response.is_closed
+                assert response.http_request.headers.get("X-Stainless-Lang") == "python"
 
-            storage = await response.parse()
-            assert_matches_type(Storage, storage, path=["response"])
+                storage = await response.parse()
+                assert_matches_type(Storage, storage, path=["response"])
 
         assert cast(Any, response.is_closed) is True
 
@@ -597,24 +623,29 @@ async def test_streaming_response_link_ssh_key(self, async_client: AsyncGcore) -
 
     @parametrize
     async def test_method_restore(self, async_client: AsyncGcore) -> None:
-        storage = await async_client.storage.restore(
-            storage_id=0,
-        )
+        with pytest.warns(DeprecationWarning):
+            storage = await async_client.storage.restore(
+                storage_id=0,
+            )
+
         assert storage is None
 
     @parametrize
     async def test_method_restore_with_all_params(self, async_client: AsyncGcore) -> None:
-        storage = await async_client.storage.restore(
-            storage_id=0,
-            client_id=0,
-        )
+        with pytest.warns(DeprecationWarning):
+            storage = await async_client.storage.restore(
+                storage_id=0,
+                client_id=0,
+            )
+
         assert storage is None
 
     @parametrize
     async def test_raw_response_restore(self, async_client: AsyncGcore) -> None:
-        response = await async_client.storage.with_raw_response.restore(
-            storage_id=0,
-        )
+        with pytest.warns(DeprecationWarning):
+            response = await async_client.storage.with_raw_response.restore(
+                storage_id=0,
+            )
 
         assert response.is_closed is True
         assert response.http_request.headers.get("X-Stainless-Lang") == "python"
@@ -623,14 +654,15 @@ async def test_raw_response_restore(self, async_client: AsyncGcore) -> None:
 
     @parametrize
     async def test_streaming_response_restore(self, async_client: AsyncGcore) -> None:
-        async with async_client.storage.with_streaming_response.restore(
-            storage_id=0,
-        ) as response:
-            assert not response.is_closed
-            assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
-            storage = await response.parse()
-            assert storage is None
+        with pytest.warns(DeprecationWarning):
+            async with async_client.storage.with_streaming_response.restore(
+                storage_id=0,
+            ) as response:
+                assert not response.is_closed
+                assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+                storage = await response.parse()
+                assert storage is None
 
         assert cast(Any, response.is_closed) is True
 
