From 535941718238395cdfc524c0bc5b59b4109fd8d1 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Thu, 12 Feb 2026 09:29:23 +0000
Subject: [PATCH 1/9] feat(cdn): add client_config subresource for terraform
---
.stats.yml | 4 +-
api.md | 14 +
src/gcore/resources/cdn/__init__.py | 14 +
src/gcore/resources/cdn/cdn.py | 32 ++
src/gcore/resources/cdn/client_config.py | 313 ++++++++++++++++++
src/gcore/types/cdn/__init__.py | 2 +
.../types/cdn/client_config_replace_params.py | 15 +
.../types/cdn/client_config_update_params.py | 15 +
tests/api_resources/cdn/test_client_config.py | 202 +++++++++++
9 files changed, 609 insertions(+), 2 deletions(-)
create mode 100644 src/gcore/resources/cdn/client_config.py
create mode 100644 src/gcore/types/cdn/client_config_replace_params.py
create mode 100644 src/gcore/types/cdn/client_config_update_params.py
create mode 100644 tests/api_resources/cdn/test_client_config.py
diff --git a/.stats.yml b/.stats.yml
index e4e9b35f..9ca9ec3c 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
-configured_endpoints: 645
+configured_endpoints: 646
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-afac9651736e871ab5942174b1c2b741d31f17c1f4ac61e78f0000f1b3fd8d09.yml
openapi_spec_hash: 9c57a763b4c6b82b581defdcaf5f52df
-config_hash: 7552912a8ca7c67b43b97f51b67a5ae7
+config_hash: 33e6d5828b3af3964a67af53b2e1654a
diff --git a/api.md b/api.md
index cbc93dbc..8a2eaa8f 100644
--- a/api.md
+++ b/api.md
@@ -2577,3 +2577,17 @@ Methods:
- client.cdn.ip_ranges.list(\*\*params) -> PublicNetworkList
- client.cdn.ip_ranges.list_ips(\*\*params) -> PublicIPList
+
+## ClientConfig
+
+Types:
+
+```python
+from gcore.types.cdn import CDNClientConfig
+```
+
+Methods:
+
+- client.cdn.client_config.update(\*\*params) -> CDNAccount
+- client.cdn.client_config.get() -> CDNAccount
+- client.cdn.client_config.replace(\*\*params) -> CDNAccount
diff --git a/src/gcore/resources/cdn/__init__.py b/src/gcore/resources/cdn/__init__.py
index 869fc050..91878ce3 100644
--- a/src/gcore/resources/cdn/__init__.py
+++ b/src/gcore/resources/cdn/__init__.py
@@ -72,6 +72,14 @@
CDNResourcesResourceWithStreamingResponse,
AsyncCDNResourcesResourceWithStreamingResponse,
)
+from .client_config import (
+ ClientConfigResource,
+ AsyncClientConfigResource,
+ ClientConfigResourceWithRawResponse,
+ AsyncClientConfigResourceWithRawResponse,
+ ClientConfigResourceWithStreamingResponse,
+ AsyncClientConfigResourceWithStreamingResponse,
+)
from .logs_uploader import (
LogsUploaderResource,
AsyncLogsUploaderResource,
@@ -192,6 +200,12 @@
"AsyncIPRangesResourceWithRawResponse",
"IPRangesResourceWithStreamingResponse",
"AsyncIPRangesResourceWithStreamingResponse",
+ "ClientConfigResource",
+ "AsyncClientConfigResource",
+ "ClientConfigResourceWithRawResponse",
+ "AsyncClientConfigResourceWithRawResponse",
+ "ClientConfigResourceWithStreamingResponse",
+ "AsyncClientConfigResourceWithStreamingResponse",
"CDNResource",
"AsyncCDNResource",
"CDNResourceWithRawResponse",
diff --git a/src/gcore/resources/cdn/cdn.py b/src/gcore/resources/cdn/cdn.py
index 771c3776..4ab4a225 100644
--- a/src/gcore/resources/cdn/cdn.py
+++ b/src/gcore/resources/cdn/cdn.py
@@ -71,6 +71,14 @@
CertificatesResourceWithStreamingResponse,
AsyncCertificatesResourceWithStreamingResponse,
)
+from .client_config import (
+ ClientConfigResource,
+ AsyncClientConfigResource,
+ ClientConfigResourceWithRawResponse,
+ AsyncClientConfigResourceWithRawResponse,
+ ClientConfigResourceWithStreamingResponse,
+ AsyncClientConfigResourceWithStreamingResponse,
+)
from .origin_groups import (
OriginGroupsResource,
AsyncOriginGroupsResource,
@@ -183,6 +191,10 @@ def metrics(self) -> MetricsResource:
def ip_ranges(self) -> IPRangesResource:
return IPRangesResource(self._client)
+ @cached_property
+ def client_config(self) -> ClientConfigResource:
+ return ClientConfigResource(self._client)
+
@cached_property
def with_raw_response(self) -> CDNResourceWithRawResponse:
"""
@@ -484,6 +496,10 @@ def metrics(self) -> AsyncMetricsResource:
def ip_ranges(self) -> AsyncIPRangesResource:
return AsyncIPRangesResource(self._client)
+ @cached_property
+ def client_config(self) -> AsyncClientConfigResource:
+ return AsyncClientConfigResource(self._client)
+
@cached_property
def with_raw_response(self) -> AsyncCDNResourceWithRawResponse:
"""
@@ -810,6 +826,10 @@ def metrics(self) -> MetricsResourceWithRawResponse:
def ip_ranges(self) -> IPRangesResourceWithRawResponse:
return IPRangesResourceWithRawResponse(self._cdn.ip_ranges)
+ @cached_property
+ def client_config(self) -> ClientConfigResourceWithRawResponse:
+ return ClientConfigResourceWithRawResponse(self._cdn.client_config)
+
class AsyncCDNResourceWithRawResponse:
def __init__(self, cdn: AsyncCDNResource) -> None:
@@ -889,6 +909,10 @@ def metrics(self) -> AsyncMetricsResourceWithRawResponse:
def ip_ranges(self) -> AsyncIPRangesResourceWithRawResponse:
return AsyncIPRangesResourceWithRawResponse(self._cdn.ip_ranges)
+ @cached_property
+ def client_config(self) -> AsyncClientConfigResourceWithRawResponse:
+ return AsyncClientConfigResourceWithRawResponse(self._cdn.client_config)
+
class CDNResourceWithStreamingResponse:
def __init__(self, cdn: CDNResource) -> None:
@@ -968,6 +992,10 @@ def metrics(self) -> MetricsResourceWithStreamingResponse:
def ip_ranges(self) -> IPRangesResourceWithStreamingResponse:
return IPRangesResourceWithStreamingResponse(self._cdn.ip_ranges)
+ @cached_property
+ def client_config(self) -> ClientConfigResourceWithStreamingResponse:
+ return ClientConfigResourceWithStreamingResponse(self._cdn.client_config)
+
class AsyncCDNResourceWithStreamingResponse:
def __init__(self, cdn: AsyncCDNResource) -> None:
@@ -1046,3 +1074,7 @@ def metrics(self) -> AsyncMetricsResourceWithStreamingResponse:
@cached_property
def ip_ranges(self) -> AsyncIPRangesResourceWithStreamingResponse:
return AsyncIPRangesResourceWithStreamingResponse(self._cdn.ip_ranges)
+
+ @cached_property
+ def client_config(self) -> AsyncClientConfigResourceWithStreamingResponse:
+ return AsyncClientConfigResourceWithStreamingResponse(self._cdn.client_config)
diff --git a/src/gcore/resources/cdn/client_config.py b/src/gcore/resources/cdn/client_config.py
new file mode 100644
index 00000000..c19b3124
--- /dev/null
+++ b/src/gcore/resources/cdn/client_config.py
@@ -0,0 +1,313 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from __future__ import annotations
+
+import httpx
+
+from ..._types import Body, Omit, Query, Headers, NotGiven, omit, not_given
+from ..._utils import maybe_transform, async_maybe_transform
+from ..._compat import cached_property
+from ..._resource import SyncAPIResource, AsyncAPIResource
+from ..._response import (
+ to_raw_response_wrapper,
+ to_streamed_response_wrapper,
+ async_to_raw_response_wrapper,
+ async_to_streamed_response_wrapper,
+)
+from ...types.cdn import client_config_update_params, client_config_replace_params
+from ..._base_client import make_request_options
+from ...types.cdn.cdn_account import CDNAccount
+
+__all__ = ["ClientConfigResource", "AsyncClientConfigResource"]
+
+
+class ClientConfigResource(SyncAPIResource):
+ @cached_property
+ def with_raw_response(self) -> ClientConfigResourceWithRawResponse:
+ """
+ This property can be used as a prefix for any HTTP method call to return
+ the raw response object instead of the parsed content.
+
+ For more information, see https://www.github.com/G-Core/gcore-python#accessing-raw-response-data-eg-headers
+ """
+ return ClientConfigResourceWithRawResponse(self)
+
+ @cached_property
+ def with_streaming_response(self) -> ClientConfigResourceWithStreamingResponse:
+ """
+ An alternative to `.with_raw_response` that doesn't eagerly read the response body.
+
+ For more information, see https://www.github.com/G-Core/gcore-python#with_streaming_response
+ """
+ return ClientConfigResourceWithStreamingResponse(self)
+
+ def update(
+ self,
+ *,
+ utilization_level: 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.
+ extra_headers: Headers | None = None,
+ extra_query: Query | None = None,
+ extra_body: Body | None = None,
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
+ ) -> CDNAccount:
+ """
+ Change information about CDN service.
+
+ Args:
+ utilization_level: CDN traffic usage limit in gigabytes.
+
+ When the limit is reached, we will send an email notification.
+
+ 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
+ """
+ return self._patch(
+ "/cdn/clients/me",
+ body=maybe_transform(
+ {"utilization_level": utilization_level}, client_config_update_params.ClientConfigUpdateParams
+ ),
+ options=make_request_options(
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
+ ),
+ cast_to=CDNAccount,
+ )
+
+ def get(
+ self,
+ *,
+ # 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,
+ ) -> CDNAccount:
+ """Get information about CDN service."""
+ return self._get(
+ "/cdn/clients/me",
+ options=make_request_options(
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
+ ),
+ cast_to=CDNAccount,
+ )
+
+ def replace(
+ self,
+ *,
+ utilization_level: 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.
+ extra_headers: Headers | None = None,
+ extra_query: Query | None = None,
+ extra_body: Body | None = None,
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
+ ) -> CDNAccount:
+ """
+ Change information about CDN service.
+
+ Args:
+ utilization_level: CDN traffic usage limit in gigabytes.
+
+ When the limit is reached, we will send an email notification.
+
+ 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
+ """
+ return self._put(
+ "/cdn/clients/me",
+ body=maybe_transform(
+ {"utilization_level": utilization_level}, client_config_replace_params.ClientConfigReplaceParams
+ ),
+ options=make_request_options(
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
+ ),
+ cast_to=CDNAccount,
+ )
+
+
+class AsyncClientConfigResource(AsyncAPIResource):
+ @cached_property
+ def with_raw_response(self) -> AsyncClientConfigResourceWithRawResponse:
+ """
+ This property can be used as a prefix for any HTTP method call to return
+ the raw response object instead of the parsed content.
+
+ For more information, see https://www.github.com/G-Core/gcore-python#accessing-raw-response-data-eg-headers
+ """
+ return AsyncClientConfigResourceWithRawResponse(self)
+
+ @cached_property
+ def with_streaming_response(self) -> AsyncClientConfigResourceWithStreamingResponse:
+ """
+ An alternative to `.with_raw_response` that doesn't eagerly read the response body.
+
+ For more information, see https://www.github.com/G-Core/gcore-python#with_streaming_response
+ """
+ return AsyncClientConfigResourceWithStreamingResponse(self)
+
+ async def update(
+ self,
+ *,
+ utilization_level: 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.
+ extra_headers: Headers | None = None,
+ extra_query: Query | None = None,
+ extra_body: Body | None = None,
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
+ ) -> CDNAccount:
+ """
+ Change information about CDN service.
+
+ Args:
+ utilization_level: CDN traffic usage limit in gigabytes.
+
+ When the limit is reached, we will send an email notification.
+
+ 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
+ """
+ return await self._patch(
+ "/cdn/clients/me",
+ body=await async_maybe_transform(
+ {"utilization_level": utilization_level}, client_config_update_params.ClientConfigUpdateParams
+ ),
+ options=make_request_options(
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
+ ),
+ cast_to=CDNAccount,
+ )
+
+ async def get(
+ self,
+ *,
+ # 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,
+ ) -> CDNAccount:
+ """Get information about CDN service."""
+ return await self._get(
+ "/cdn/clients/me",
+ options=make_request_options(
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
+ ),
+ cast_to=CDNAccount,
+ )
+
+ async def replace(
+ self,
+ *,
+ utilization_level: 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.
+ extra_headers: Headers | None = None,
+ extra_query: Query | None = None,
+ extra_body: Body | None = None,
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
+ ) -> CDNAccount:
+ """
+ Change information about CDN service.
+
+ Args:
+ utilization_level: CDN traffic usage limit in gigabytes.
+
+ When the limit is reached, we will send an email notification.
+
+ 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
+ """
+ return await self._put(
+ "/cdn/clients/me",
+ body=await async_maybe_transform(
+ {"utilization_level": utilization_level}, client_config_replace_params.ClientConfigReplaceParams
+ ),
+ options=make_request_options(
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
+ ),
+ cast_to=CDNAccount,
+ )
+
+
+class ClientConfigResourceWithRawResponse:
+ def __init__(self, client_config: ClientConfigResource) -> None:
+ self._client_config = client_config
+
+ self.update = to_raw_response_wrapper(
+ client_config.update,
+ )
+ self.get = to_raw_response_wrapper(
+ client_config.get,
+ )
+ self.replace = to_raw_response_wrapper(
+ client_config.replace,
+ )
+
+
+class AsyncClientConfigResourceWithRawResponse:
+ def __init__(self, client_config: AsyncClientConfigResource) -> None:
+ self._client_config = client_config
+
+ self.update = async_to_raw_response_wrapper(
+ client_config.update,
+ )
+ self.get = async_to_raw_response_wrapper(
+ client_config.get,
+ )
+ self.replace = async_to_raw_response_wrapper(
+ client_config.replace,
+ )
+
+
+class ClientConfigResourceWithStreamingResponse:
+ def __init__(self, client_config: ClientConfigResource) -> None:
+ self._client_config = client_config
+
+ self.update = to_streamed_response_wrapper(
+ client_config.update,
+ )
+ self.get = to_streamed_response_wrapper(
+ client_config.get,
+ )
+ self.replace = to_streamed_response_wrapper(
+ client_config.replace,
+ )
+
+
+class AsyncClientConfigResourceWithStreamingResponse:
+ def __init__(self, client_config: AsyncClientConfigResource) -> None:
+ self._client_config = client_config
+
+ self.update = async_to_streamed_response_wrapper(
+ client_config.update,
+ )
+ self.get = async_to_streamed_response_wrapper(
+ client_config.get,
+ )
+ self.replace = async_to_streamed_response_wrapper(
+ client_config.replace,
+ )
diff --git a/src/gcore/types/cdn/__init__.py b/src/gcore/types/cdn/__init__.py
index 92895e33..6b27c1f9 100644
--- a/src/gcore/types/cdn/__init__.py
+++ b/src/gcore/types/cdn/__init__.py
@@ -52,10 +52,12 @@
from .origin_group_create_params import OriginGroupCreateParams as OriginGroupCreateParams
from .origin_group_update_params import OriginGroupUpdateParams as OriginGroupUpdateParams
from .cdn_resource_replace_params import CDNResourceReplaceParams as CDNResourceReplaceParams
+from .client_config_update_params import ClientConfigUpdateParams as ClientConfigUpdateParams
from .origin_group_replace_params import OriginGroupReplaceParams as OriginGroupReplaceParams
from .rule_template_create_params import RuleTemplateCreateParams as RuleTemplateCreateParams
from .rule_template_update_params import RuleTemplateUpdateParams as RuleTemplateUpdateParams
from .cdn_resource_prefetch_params import CDNResourcePrefetchParams as CDNResourcePrefetchParams
+from .client_config_replace_params import ClientConfigReplaceParams as ClientConfigReplaceParams
from .rule_template_replace_params import RuleTemplateReplaceParams as RuleTemplateReplaceParams
from .certificate_get_status_params import CertificateGetStatusParams as CertificateGetStatusParams
from .cdn_list_purge_statuses_params import CDNListPurgeStatusesParams as CDNListPurgeStatusesParams
diff --git a/src/gcore/types/cdn/client_config_replace_params.py b/src/gcore/types/cdn/client_config_replace_params.py
new file mode 100644
index 00000000..a604b93b
--- /dev/null
+++ b/src/gcore/types/cdn/client_config_replace_params.py
@@ -0,0 +1,15 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from __future__ import annotations
+
+from typing_extensions import TypedDict
+
+__all__ = ["ClientConfigReplaceParams"]
+
+
+class ClientConfigReplaceParams(TypedDict, total=False):
+ utilization_level: int
+ """CDN traffic usage limit in gigabytes.
+
+ When the limit is reached, we will send an email notification.
+ """
diff --git a/src/gcore/types/cdn/client_config_update_params.py b/src/gcore/types/cdn/client_config_update_params.py
new file mode 100644
index 00000000..8f9f22a1
--- /dev/null
+++ b/src/gcore/types/cdn/client_config_update_params.py
@@ -0,0 +1,15 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from __future__ import annotations
+
+from typing_extensions import TypedDict
+
+__all__ = ["ClientConfigUpdateParams"]
+
+
+class ClientConfigUpdateParams(TypedDict, total=False):
+ utilization_level: int
+ """CDN traffic usage limit in gigabytes.
+
+ When the limit is reached, we will send an email notification.
+ """
diff --git a/tests/api_resources/cdn/test_client_config.py b/tests/api_resources/cdn/test_client_config.py
new file mode 100644
index 00000000..3c296833
--- /dev/null
+++ b/tests/api_resources/cdn/test_client_config.py
@@ -0,0 +1,202 @@
+# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
+
+from __future__ import annotations
+
+import os
+from typing import Any, cast
+
+import pytest
+
+from gcore import Gcore, AsyncGcore
+from tests.utils import assert_matches_type
+from gcore.types.cdn import CDNAccount
+
+base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010")
+
+
+class TestClientConfig:
+ parametrize = pytest.mark.parametrize("client", [False, True], indirect=True, ids=["loose", "strict"])
+
+ @parametrize
+ def test_method_update(self, client: Gcore) -> None:
+ client_config = client.cdn.client_config.update()
+ assert_matches_type(CDNAccount, client_config, path=["response"])
+
+ @parametrize
+ def test_method_update_with_all_params(self, client: Gcore) -> None:
+ client_config = client.cdn.client_config.update(
+ utilization_level=1111,
+ )
+ assert_matches_type(CDNAccount, client_config, path=["response"])
+
+ @parametrize
+ def test_raw_response_update(self, client: Gcore) -> None:
+ response = client.cdn.client_config.with_raw_response.update()
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ client_config = response.parse()
+ assert_matches_type(CDNAccount, client_config, path=["response"])
+
+ @parametrize
+ def test_streaming_response_update(self, client: Gcore) -> None:
+ with client.cdn.client_config.with_streaming_response.update() as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ client_config = response.parse()
+ assert_matches_type(CDNAccount, client_config, path=["response"])
+
+ assert cast(Any, response.is_closed) is True
+
+ @parametrize
+ def test_method_get(self, client: Gcore) -> None:
+ client_config = client.cdn.client_config.get()
+ assert_matches_type(CDNAccount, client_config, path=["response"])
+
+ @parametrize
+ def test_raw_response_get(self, client: Gcore) -> None:
+ response = client.cdn.client_config.with_raw_response.get()
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ client_config = response.parse()
+ assert_matches_type(CDNAccount, client_config, path=["response"])
+
+ @parametrize
+ def test_streaming_response_get(self, client: Gcore) -> None:
+ with client.cdn.client_config.with_streaming_response.get() as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ client_config = response.parse()
+ assert_matches_type(CDNAccount, client_config, path=["response"])
+
+ assert cast(Any, response.is_closed) is True
+
+ @parametrize
+ def test_method_replace(self, client: Gcore) -> None:
+ client_config = client.cdn.client_config.replace()
+ assert_matches_type(CDNAccount, client_config, path=["response"])
+
+ @parametrize
+ def test_method_replace_with_all_params(self, client: Gcore) -> None:
+ client_config = client.cdn.client_config.replace(
+ utilization_level=1111,
+ )
+ assert_matches_type(CDNAccount, client_config, path=["response"])
+
+ @parametrize
+ def test_raw_response_replace(self, client: Gcore) -> None:
+ response = client.cdn.client_config.with_raw_response.replace()
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ client_config = response.parse()
+ assert_matches_type(CDNAccount, client_config, path=["response"])
+
+ @parametrize
+ def test_streaming_response_replace(self, client: Gcore) -> None:
+ with client.cdn.client_config.with_streaming_response.replace() as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ client_config = response.parse()
+ assert_matches_type(CDNAccount, client_config, path=["response"])
+
+ assert cast(Any, response.is_closed) is True
+
+
+class TestAsyncClientConfig:
+ parametrize = pytest.mark.parametrize(
+ "async_client", [False, True, {"http_client": "aiohttp"}], indirect=True, ids=["loose", "strict", "aiohttp"]
+ )
+
+ @parametrize
+ async def test_method_update(self, async_client: AsyncGcore) -> None:
+ client_config = await async_client.cdn.client_config.update()
+ assert_matches_type(CDNAccount, client_config, path=["response"])
+
+ @parametrize
+ async def test_method_update_with_all_params(self, async_client: AsyncGcore) -> None:
+ client_config = await async_client.cdn.client_config.update(
+ utilization_level=1111,
+ )
+ assert_matches_type(CDNAccount, client_config, path=["response"])
+
+ @parametrize
+ async def test_raw_response_update(self, async_client: AsyncGcore) -> None:
+ response = await async_client.cdn.client_config.with_raw_response.update()
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ client_config = await response.parse()
+ assert_matches_type(CDNAccount, client_config, path=["response"])
+
+ @parametrize
+ async def test_streaming_response_update(self, async_client: AsyncGcore) -> None:
+ async with async_client.cdn.client_config.with_streaming_response.update() as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ client_config = await response.parse()
+ assert_matches_type(CDNAccount, client_config, path=["response"])
+
+ assert cast(Any, response.is_closed) is True
+
+ @parametrize
+ async def test_method_get(self, async_client: AsyncGcore) -> None:
+ client_config = await async_client.cdn.client_config.get()
+ assert_matches_type(CDNAccount, client_config, path=["response"])
+
+ @parametrize
+ async def test_raw_response_get(self, async_client: AsyncGcore) -> None:
+ response = await async_client.cdn.client_config.with_raw_response.get()
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ client_config = await response.parse()
+ assert_matches_type(CDNAccount, client_config, path=["response"])
+
+ @parametrize
+ async def test_streaming_response_get(self, async_client: AsyncGcore) -> None:
+ async with async_client.cdn.client_config.with_streaming_response.get() as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ client_config = await response.parse()
+ assert_matches_type(CDNAccount, client_config, path=["response"])
+
+ assert cast(Any, response.is_closed) is True
+
+ @parametrize
+ async def test_method_replace(self, async_client: AsyncGcore) -> None:
+ client_config = await async_client.cdn.client_config.replace()
+ assert_matches_type(CDNAccount, client_config, path=["response"])
+
+ @parametrize
+ async def test_method_replace_with_all_params(self, async_client: AsyncGcore) -> None:
+ client_config = await async_client.cdn.client_config.replace(
+ utilization_level=1111,
+ )
+ assert_matches_type(CDNAccount, client_config, path=["response"])
+
+ @parametrize
+ async def test_raw_response_replace(self, async_client: AsyncGcore) -> None:
+ response = await async_client.cdn.client_config.with_raw_response.replace()
+
+ assert response.is_closed is True
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+ client_config = await response.parse()
+ assert_matches_type(CDNAccount, client_config, path=["response"])
+
+ @parametrize
+ async def test_streaming_response_replace(self, async_client: AsyncGcore) -> None:
+ async with async_client.cdn.client_config.with_streaming_response.replace() as response:
+ assert not response.is_closed
+ assert response.http_request.headers.get("X-Stainless-Lang") == "python"
+
+ client_config = await response.parse()
+ assert_matches_type(CDNAccount, client_config, path=["response"])
+
+ assert cast(Any, response.is_closed) is True
From 449ee945443f9c1c86782bbb96635631ac99d406 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Thu, 12 Feb 2026 11:07:02 +0000
Subject: [PATCH 2/9] codegen metadata
---
.stats.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index 9ca9ec3c..8aed1c31 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 646
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-afac9651736e871ab5942174b1c2b741d31f17c1f4ac61e78f0000f1b3fd8d09.yml
-openapi_spec_hash: 9c57a763b4c6b82b581defdcaf5f52df
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-bab3396466ec5b697c339ea24bd4489c07ff40d08091f4d4d263d247ef2b00bd.yml
+openapi_spec_hash: c7d1eedcfa472650c54e9ec569383949
config_hash: 33e6d5828b3af3964a67af53b2e1654a
From 6bc418acdcfed56957b6c571ee2f6f29efa3663e Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Thu, 12 Feb 2026 13:15:27 +0000
Subject: [PATCH 3/9] feat(api): revert(cdn): remove client_config subresource
(#207)
Reverts the client_config addition from PR #206. The generated terraform
provider fails to compile because it references CDN.ClientConfig from
the Go SDK which is only on the `next` branch, not yet on `main`.
---
.stats.yml | 4 +-
api.md | 14 -
src/gcore/resources/cdn/__init__.py | 14 -
src/gcore/resources/cdn/cdn.py | 32 --
src/gcore/resources/cdn/client_config.py | 313 ------------------
src/gcore/types/cdn/__init__.py | 2 -
.../types/cdn/client_config_replace_params.py | 15 -
.../types/cdn/client_config_update_params.py | 15 -
tests/api_resources/cdn/test_client_config.py | 202 -----------
9 files changed, 2 insertions(+), 609 deletions(-)
delete mode 100644 src/gcore/resources/cdn/client_config.py
delete mode 100644 src/gcore/types/cdn/client_config_replace_params.py
delete mode 100644 src/gcore/types/cdn/client_config_update_params.py
delete mode 100644 tests/api_resources/cdn/test_client_config.py
diff --git a/.stats.yml b/.stats.yml
index 8aed1c31..f46ecaf2 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
-configured_endpoints: 646
+configured_endpoints: 645
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-bab3396466ec5b697c339ea24bd4489c07ff40d08091f4d4d263d247ef2b00bd.yml
openapi_spec_hash: c7d1eedcfa472650c54e9ec569383949
-config_hash: 33e6d5828b3af3964a67af53b2e1654a
+config_hash: 841ecfe67afa779a3954fe8800ecb132
diff --git a/api.md b/api.md
index 8a2eaa8f..cbc93dbc 100644
--- a/api.md
+++ b/api.md
@@ -2577,17 +2577,3 @@ Methods:
- client.cdn.ip_ranges.list(\*\*params) -> PublicNetworkList
- client.cdn.ip_ranges.list_ips(\*\*params) -> PublicIPList
-
-## ClientConfig
-
-Types:
-
-```python
-from gcore.types.cdn import CDNClientConfig
-```
-
-Methods:
-
-- client.cdn.client_config.update(\*\*params) -> CDNAccount
-- client.cdn.client_config.get() -> CDNAccount
-- client.cdn.client_config.replace(\*\*params) -> CDNAccount
diff --git a/src/gcore/resources/cdn/__init__.py b/src/gcore/resources/cdn/__init__.py
index 91878ce3..869fc050 100644
--- a/src/gcore/resources/cdn/__init__.py
+++ b/src/gcore/resources/cdn/__init__.py
@@ -72,14 +72,6 @@
CDNResourcesResourceWithStreamingResponse,
AsyncCDNResourcesResourceWithStreamingResponse,
)
-from .client_config import (
- ClientConfigResource,
- AsyncClientConfigResource,
- ClientConfigResourceWithRawResponse,
- AsyncClientConfigResourceWithRawResponse,
- ClientConfigResourceWithStreamingResponse,
- AsyncClientConfigResourceWithStreamingResponse,
-)
from .logs_uploader import (
LogsUploaderResource,
AsyncLogsUploaderResource,
@@ -200,12 +192,6 @@
"AsyncIPRangesResourceWithRawResponse",
"IPRangesResourceWithStreamingResponse",
"AsyncIPRangesResourceWithStreamingResponse",
- "ClientConfigResource",
- "AsyncClientConfigResource",
- "ClientConfigResourceWithRawResponse",
- "AsyncClientConfigResourceWithRawResponse",
- "ClientConfigResourceWithStreamingResponse",
- "AsyncClientConfigResourceWithStreamingResponse",
"CDNResource",
"AsyncCDNResource",
"CDNResourceWithRawResponse",
diff --git a/src/gcore/resources/cdn/cdn.py b/src/gcore/resources/cdn/cdn.py
index 4ab4a225..771c3776 100644
--- a/src/gcore/resources/cdn/cdn.py
+++ b/src/gcore/resources/cdn/cdn.py
@@ -71,14 +71,6 @@
CertificatesResourceWithStreamingResponse,
AsyncCertificatesResourceWithStreamingResponse,
)
-from .client_config import (
- ClientConfigResource,
- AsyncClientConfigResource,
- ClientConfigResourceWithRawResponse,
- AsyncClientConfigResourceWithRawResponse,
- ClientConfigResourceWithStreamingResponse,
- AsyncClientConfigResourceWithStreamingResponse,
-)
from .origin_groups import (
OriginGroupsResource,
AsyncOriginGroupsResource,
@@ -191,10 +183,6 @@ def metrics(self) -> MetricsResource:
def ip_ranges(self) -> IPRangesResource:
return IPRangesResource(self._client)
- @cached_property
- def client_config(self) -> ClientConfigResource:
- return ClientConfigResource(self._client)
-
@cached_property
def with_raw_response(self) -> CDNResourceWithRawResponse:
"""
@@ -496,10 +484,6 @@ def metrics(self) -> AsyncMetricsResource:
def ip_ranges(self) -> AsyncIPRangesResource:
return AsyncIPRangesResource(self._client)
- @cached_property
- def client_config(self) -> AsyncClientConfigResource:
- return AsyncClientConfigResource(self._client)
-
@cached_property
def with_raw_response(self) -> AsyncCDNResourceWithRawResponse:
"""
@@ -826,10 +810,6 @@ def metrics(self) -> MetricsResourceWithRawResponse:
def ip_ranges(self) -> IPRangesResourceWithRawResponse:
return IPRangesResourceWithRawResponse(self._cdn.ip_ranges)
- @cached_property
- def client_config(self) -> ClientConfigResourceWithRawResponse:
- return ClientConfigResourceWithRawResponse(self._cdn.client_config)
-
class AsyncCDNResourceWithRawResponse:
def __init__(self, cdn: AsyncCDNResource) -> None:
@@ -909,10 +889,6 @@ def metrics(self) -> AsyncMetricsResourceWithRawResponse:
def ip_ranges(self) -> AsyncIPRangesResourceWithRawResponse:
return AsyncIPRangesResourceWithRawResponse(self._cdn.ip_ranges)
- @cached_property
- def client_config(self) -> AsyncClientConfigResourceWithRawResponse:
- return AsyncClientConfigResourceWithRawResponse(self._cdn.client_config)
-
class CDNResourceWithStreamingResponse:
def __init__(self, cdn: CDNResource) -> None:
@@ -992,10 +968,6 @@ def metrics(self) -> MetricsResourceWithStreamingResponse:
def ip_ranges(self) -> IPRangesResourceWithStreamingResponse:
return IPRangesResourceWithStreamingResponse(self._cdn.ip_ranges)
- @cached_property
- def client_config(self) -> ClientConfigResourceWithStreamingResponse:
- return ClientConfigResourceWithStreamingResponse(self._cdn.client_config)
-
class AsyncCDNResourceWithStreamingResponse:
def __init__(self, cdn: AsyncCDNResource) -> None:
@@ -1074,7 +1046,3 @@ def metrics(self) -> AsyncMetricsResourceWithStreamingResponse:
@cached_property
def ip_ranges(self) -> AsyncIPRangesResourceWithStreamingResponse:
return AsyncIPRangesResourceWithStreamingResponse(self._cdn.ip_ranges)
-
- @cached_property
- def client_config(self) -> AsyncClientConfigResourceWithStreamingResponse:
- return AsyncClientConfigResourceWithStreamingResponse(self._cdn.client_config)
diff --git a/src/gcore/resources/cdn/client_config.py b/src/gcore/resources/cdn/client_config.py
deleted file mode 100644
index c19b3124..00000000
--- a/src/gcore/resources/cdn/client_config.py
+++ /dev/null
@@ -1,313 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from __future__ import annotations
-
-import httpx
-
-from ..._types import Body, Omit, Query, Headers, NotGiven, omit, not_given
-from ..._utils import maybe_transform, async_maybe_transform
-from ..._compat import cached_property
-from ..._resource import SyncAPIResource, AsyncAPIResource
-from ..._response import (
- to_raw_response_wrapper,
- to_streamed_response_wrapper,
- async_to_raw_response_wrapper,
- async_to_streamed_response_wrapper,
-)
-from ...types.cdn import client_config_update_params, client_config_replace_params
-from ..._base_client import make_request_options
-from ...types.cdn.cdn_account import CDNAccount
-
-__all__ = ["ClientConfigResource", "AsyncClientConfigResource"]
-
-
-class ClientConfigResource(SyncAPIResource):
- @cached_property
- def with_raw_response(self) -> ClientConfigResourceWithRawResponse:
- """
- This property can be used as a prefix for any HTTP method call to return
- the raw response object instead of the parsed content.
-
- For more information, see https://www.github.com/G-Core/gcore-python#accessing-raw-response-data-eg-headers
- """
- return ClientConfigResourceWithRawResponse(self)
-
- @cached_property
- def with_streaming_response(self) -> ClientConfigResourceWithStreamingResponse:
- """
- An alternative to `.with_raw_response` that doesn't eagerly read the response body.
-
- For more information, see https://www.github.com/G-Core/gcore-python#with_streaming_response
- """
- return ClientConfigResourceWithStreamingResponse(self)
-
- def update(
- self,
- *,
- utilization_level: 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.
- extra_headers: Headers | None = None,
- extra_query: Query | None = None,
- extra_body: Body | None = None,
- timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> CDNAccount:
- """
- Change information about CDN service.
-
- Args:
- utilization_level: CDN traffic usage limit in gigabytes.
-
- When the limit is reached, we will send an email notification.
-
- 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
- """
- return self._patch(
- "/cdn/clients/me",
- body=maybe_transform(
- {"utilization_level": utilization_level}, client_config_update_params.ClientConfigUpdateParams
- ),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=CDNAccount,
- )
-
- def get(
- self,
- *,
- # 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,
- ) -> CDNAccount:
- """Get information about CDN service."""
- return self._get(
- "/cdn/clients/me",
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=CDNAccount,
- )
-
- def replace(
- self,
- *,
- utilization_level: 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.
- extra_headers: Headers | None = None,
- extra_query: Query | None = None,
- extra_body: Body | None = None,
- timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> CDNAccount:
- """
- Change information about CDN service.
-
- Args:
- utilization_level: CDN traffic usage limit in gigabytes.
-
- When the limit is reached, we will send an email notification.
-
- 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
- """
- return self._put(
- "/cdn/clients/me",
- body=maybe_transform(
- {"utilization_level": utilization_level}, client_config_replace_params.ClientConfigReplaceParams
- ),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=CDNAccount,
- )
-
-
-class AsyncClientConfigResource(AsyncAPIResource):
- @cached_property
- def with_raw_response(self) -> AsyncClientConfigResourceWithRawResponse:
- """
- This property can be used as a prefix for any HTTP method call to return
- the raw response object instead of the parsed content.
-
- For more information, see https://www.github.com/G-Core/gcore-python#accessing-raw-response-data-eg-headers
- """
- return AsyncClientConfigResourceWithRawResponse(self)
-
- @cached_property
- def with_streaming_response(self) -> AsyncClientConfigResourceWithStreamingResponse:
- """
- An alternative to `.with_raw_response` that doesn't eagerly read the response body.
-
- For more information, see https://www.github.com/G-Core/gcore-python#with_streaming_response
- """
- return AsyncClientConfigResourceWithStreamingResponse(self)
-
- async def update(
- self,
- *,
- utilization_level: 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.
- extra_headers: Headers | None = None,
- extra_query: Query | None = None,
- extra_body: Body | None = None,
- timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> CDNAccount:
- """
- Change information about CDN service.
-
- Args:
- utilization_level: CDN traffic usage limit in gigabytes.
-
- When the limit is reached, we will send an email notification.
-
- 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
- """
- return await self._patch(
- "/cdn/clients/me",
- body=await async_maybe_transform(
- {"utilization_level": utilization_level}, client_config_update_params.ClientConfigUpdateParams
- ),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=CDNAccount,
- )
-
- async def get(
- self,
- *,
- # 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,
- ) -> CDNAccount:
- """Get information about CDN service."""
- return await self._get(
- "/cdn/clients/me",
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=CDNAccount,
- )
-
- async def replace(
- self,
- *,
- utilization_level: 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.
- extra_headers: Headers | None = None,
- extra_query: Query | None = None,
- extra_body: Body | None = None,
- timeout: float | httpx.Timeout | None | NotGiven = not_given,
- ) -> CDNAccount:
- """
- Change information about CDN service.
-
- Args:
- utilization_level: CDN traffic usage limit in gigabytes.
-
- When the limit is reached, we will send an email notification.
-
- 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
- """
- return await self._put(
- "/cdn/clients/me",
- body=await async_maybe_transform(
- {"utilization_level": utilization_level}, client_config_replace_params.ClientConfigReplaceParams
- ),
- options=make_request_options(
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
- ),
- cast_to=CDNAccount,
- )
-
-
-class ClientConfigResourceWithRawResponse:
- def __init__(self, client_config: ClientConfigResource) -> None:
- self._client_config = client_config
-
- self.update = to_raw_response_wrapper(
- client_config.update,
- )
- self.get = to_raw_response_wrapper(
- client_config.get,
- )
- self.replace = to_raw_response_wrapper(
- client_config.replace,
- )
-
-
-class AsyncClientConfigResourceWithRawResponse:
- def __init__(self, client_config: AsyncClientConfigResource) -> None:
- self._client_config = client_config
-
- self.update = async_to_raw_response_wrapper(
- client_config.update,
- )
- self.get = async_to_raw_response_wrapper(
- client_config.get,
- )
- self.replace = async_to_raw_response_wrapper(
- client_config.replace,
- )
-
-
-class ClientConfigResourceWithStreamingResponse:
- def __init__(self, client_config: ClientConfigResource) -> None:
- self._client_config = client_config
-
- self.update = to_streamed_response_wrapper(
- client_config.update,
- )
- self.get = to_streamed_response_wrapper(
- client_config.get,
- )
- self.replace = to_streamed_response_wrapper(
- client_config.replace,
- )
-
-
-class AsyncClientConfigResourceWithStreamingResponse:
- def __init__(self, client_config: AsyncClientConfigResource) -> None:
- self._client_config = client_config
-
- self.update = async_to_streamed_response_wrapper(
- client_config.update,
- )
- self.get = async_to_streamed_response_wrapper(
- client_config.get,
- )
- self.replace = async_to_streamed_response_wrapper(
- client_config.replace,
- )
diff --git a/src/gcore/types/cdn/__init__.py b/src/gcore/types/cdn/__init__.py
index 6b27c1f9..92895e33 100644
--- a/src/gcore/types/cdn/__init__.py
+++ b/src/gcore/types/cdn/__init__.py
@@ -52,12 +52,10 @@
from .origin_group_create_params import OriginGroupCreateParams as OriginGroupCreateParams
from .origin_group_update_params import OriginGroupUpdateParams as OriginGroupUpdateParams
from .cdn_resource_replace_params import CDNResourceReplaceParams as CDNResourceReplaceParams
-from .client_config_update_params import ClientConfigUpdateParams as ClientConfigUpdateParams
from .origin_group_replace_params import OriginGroupReplaceParams as OriginGroupReplaceParams
from .rule_template_create_params import RuleTemplateCreateParams as RuleTemplateCreateParams
from .rule_template_update_params import RuleTemplateUpdateParams as RuleTemplateUpdateParams
from .cdn_resource_prefetch_params import CDNResourcePrefetchParams as CDNResourcePrefetchParams
-from .client_config_replace_params import ClientConfigReplaceParams as ClientConfigReplaceParams
from .rule_template_replace_params import RuleTemplateReplaceParams as RuleTemplateReplaceParams
from .certificate_get_status_params import CertificateGetStatusParams as CertificateGetStatusParams
from .cdn_list_purge_statuses_params import CDNListPurgeStatusesParams as CDNListPurgeStatusesParams
diff --git a/src/gcore/types/cdn/client_config_replace_params.py b/src/gcore/types/cdn/client_config_replace_params.py
deleted file mode 100644
index a604b93b..00000000
--- a/src/gcore/types/cdn/client_config_replace_params.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from __future__ import annotations
-
-from typing_extensions import TypedDict
-
-__all__ = ["ClientConfigReplaceParams"]
-
-
-class ClientConfigReplaceParams(TypedDict, total=False):
- utilization_level: int
- """CDN traffic usage limit in gigabytes.
-
- When the limit is reached, we will send an email notification.
- """
diff --git a/src/gcore/types/cdn/client_config_update_params.py b/src/gcore/types/cdn/client_config_update_params.py
deleted file mode 100644
index 8f9f22a1..00000000
--- a/src/gcore/types/cdn/client_config_update_params.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from __future__ import annotations
-
-from typing_extensions import TypedDict
-
-__all__ = ["ClientConfigUpdateParams"]
-
-
-class ClientConfigUpdateParams(TypedDict, total=False):
- utilization_level: int
- """CDN traffic usage limit in gigabytes.
-
- When the limit is reached, we will send an email notification.
- """
diff --git a/tests/api_resources/cdn/test_client_config.py b/tests/api_resources/cdn/test_client_config.py
deleted file mode 100644
index 3c296833..00000000
--- a/tests/api_resources/cdn/test_client_config.py
+++ /dev/null
@@ -1,202 +0,0 @@
-# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
-
-from __future__ import annotations
-
-import os
-from typing import Any, cast
-
-import pytest
-
-from gcore import Gcore, AsyncGcore
-from tests.utils import assert_matches_type
-from gcore.types.cdn import CDNAccount
-
-base_url = os.environ.get("TEST_API_BASE_URL", "http://127.0.0.1:4010")
-
-
-class TestClientConfig:
- parametrize = pytest.mark.parametrize("client", [False, True], indirect=True, ids=["loose", "strict"])
-
- @parametrize
- def test_method_update(self, client: Gcore) -> None:
- client_config = client.cdn.client_config.update()
- assert_matches_type(CDNAccount, client_config, path=["response"])
-
- @parametrize
- def test_method_update_with_all_params(self, client: Gcore) -> None:
- client_config = client.cdn.client_config.update(
- utilization_level=1111,
- )
- assert_matches_type(CDNAccount, client_config, path=["response"])
-
- @parametrize
- def test_raw_response_update(self, client: Gcore) -> None:
- response = client.cdn.client_config.with_raw_response.update()
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- client_config = response.parse()
- assert_matches_type(CDNAccount, client_config, path=["response"])
-
- @parametrize
- def test_streaming_response_update(self, client: Gcore) -> None:
- with client.cdn.client_config.with_streaming_response.update() as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- client_config = response.parse()
- assert_matches_type(CDNAccount, client_config, path=["response"])
-
- assert cast(Any, response.is_closed) is True
-
- @parametrize
- def test_method_get(self, client: Gcore) -> None:
- client_config = client.cdn.client_config.get()
- assert_matches_type(CDNAccount, client_config, path=["response"])
-
- @parametrize
- def test_raw_response_get(self, client: Gcore) -> None:
- response = client.cdn.client_config.with_raw_response.get()
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- client_config = response.parse()
- assert_matches_type(CDNAccount, client_config, path=["response"])
-
- @parametrize
- def test_streaming_response_get(self, client: Gcore) -> None:
- with client.cdn.client_config.with_streaming_response.get() as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- client_config = response.parse()
- assert_matches_type(CDNAccount, client_config, path=["response"])
-
- assert cast(Any, response.is_closed) is True
-
- @parametrize
- def test_method_replace(self, client: Gcore) -> None:
- client_config = client.cdn.client_config.replace()
- assert_matches_type(CDNAccount, client_config, path=["response"])
-
- @parametrize
- def test_method_replace_with_all_params(self, client: Gcore) -> None:
- client_config = client.cdn.client_config.replace(
- utilization_level=1111,
- )
- assert_matches_type(CDNAccount, client_config, path=["response"])
-
- @parametrize
- def test_raw_response_replace(self, client: Gcore) -> None:
- response = client.cdn.client_config.with_raw_response.replace()
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- client_config = response.parse()
- assert_matches_type(CDNAccount, client_config, path=["response"])
-
- @parametrize
- def test_streaming_response_replace(self, client: Gcore) -> None:
- with client.cdn.client_config.with_streaming_response.replace() as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- client_config = response.parse()
- assert_matches_type(CDNAccount, client_config, path=["response"])
-
- assert cast(Any, response.is_closed) is True
-
-
-class TestAsyncClientConfig:
- parametrize = pytest.mark.parametrize(
- "async_client", [False, True, {"http_client": "aiohttp"}], indirect=True, ids=["loose", "strict", "aiohttp"]
- )
-
- @parametrize
- async def test_method_update(self, async_client: AsyncGcore) -> None:
- client_config = await async_client.cdn.client_config.update()
- assert_matches_type(CDNAccount, client_config, path=["response"])
-
- @parametrize
- async def test_method_update_with_all_params(self, async_client: AsyncGcore) -> None:
- client_config = await async_client.cdn.client_config.update(
- utilization_level=1111,
- )
- assert_matches_type(CDNAccount, client_config, path=["response"])
-
- @parametrize
- async def test_raw_response_update(self, async_client: AsyncGcore) -> None:
- response = await async_client.cdn.client_config.with_raw_response.update()
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- client_config = await response.parse()
- assert_matches_type(CDNAccount, client_config, path=["response"])
-
- @parametrize
- async def test_streaming_response_update(self, async_client: AsyncGcore) -> None:
- async with async_client.cdn.client_config.with_streaming_response.update() as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- client_config = await response.parse()
- assert_matches_type(CDNAccount, client_config, path=["response"])
-
- assert cast(Any, response.is_closed) is True
-
- @parametrize
- async def test_method_get(self, async_client: AsyncGcore) -> None:
- client_config = await async_client.cdn.client_config.get()
- assert_matches_type(CDNAccount, client_config, path=["response"])
-
- @parametrize
- async def test_raw_response_get(self, async_client: AsyncGcore) -> None:
- response = await async_client.cdn.client_config.with_raw_response.get()
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- client_config = await response.parse()
- assert_matches_type(CDNAccount, client_config, path=["response"])
-
- @parametrize
- async def test_streaming_response_get(self, async_client: AsyncGcore) -> None:
- async with async_client.cdn.client_config.with_streaming_response.get() as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- client_config = await response.parse()
- assert_matches_type(CDNAccount, client_config, path=["response"])
-
- assert cast(Any, response.is_closed) is True
-
- @parametrize
- async def test_method_replace(self, async_client: AsyncGcore) -> None:
- client_config = await async_client.cdn.client_config.replace()
- assert_matches_type(CDNAccount, client_config, path=["response"])
-
- @parametrize
- async def test_method_replace_with_all_params(self, async_client: AsyncGcore) -> None:
- client_config = await async_client.cdn.client_config.replace(
- utilization_level=1111,
- )
- assert_matches_type(CDNAccount, client_config, path=["response"])
-
- @parametrize
- async def test_raw_response_replace(self, async_client: AsyncGcore) -> None:
- response = await async_client.cdn.client_config.with_raw_response.replace()
-
- assert response.is_closed is True
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
- client_config = await response.parse()
- assert_matches_type(CDNAccount, client_config, path=["response"])
-
- @parametrize
- async def test_streaming_response_replace(self, async_client: AsyncGcore) -> None:
- async with async_client.cdn.client_config.with_streaming_response.replace() as response:
- assert not response.is_closed
- assert response.http_request.headers.get("X-Stainless-Lang") == "python"
-
- client_config = await response.parse()
- assert_matches_type(CDNAccount, client_config, path=["response"])
-
- assert cast(Any, response.is_closed) is True
From 3d098db09a0d55743def539fe5d4a96cbbed5d48 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Thu, 12 Feb 2026 14:28:57 +0000
Subject: [PATCH 4/9] codegen metadata
---
.stats.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index f46ecaf2..90034d6b 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 645
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-bab3396466ec5b697c339ea24bd4489c07ff40d08091f4d4d263d247ef2b00bd.yml
-openapi_spec_hash: c7d1eedcfa472650c54e9ec569383949
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-69213ba68b3c49b799026d4eff31f8fcee0516596349629e0085447b2ee08807.yml
+openapi_spec_hash: 2893764d7ffe22852b35a30344a79c6a
config_hash: 841ecfe67afa779a3954fe8800ecb132
From c9e395f4726a540815c962a7bb1c1ba122ae87c7 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Thu, 12 Feb 2026 14:52:49 +0000
Subject: [PATCH 5/9] codegen metadata
---
.stats.yml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index 90034d6b..0d8ddfe6 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 645
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-69213ba68b3c49b799026d4eff31f8fcee0516596349629e0085447b2ee08807.yml
-openapi_spec_hash: 2893764d7ffe22852b35a30344a79c6a
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-8c31abd1135e0eac90290da5a160e341a0d09ca3ca62191a13f079a0f958c0e3.yml
+openapi_spec_hash: 3506ce6ee4d6f2057e02e656557ada57
config_hash: 841ecfe67afa779a3954fe8800ecb132
From 6f7ec778e65dce7a413619b85df204268f26d178 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Thu, 12 Feb 2026 16:57:27 +0000
Subject: [PATCH 6/9] chore: format all `api.md` files
---
api.md | 2580 +-------------------------
pyproject.toml | 2 +-
src/gcore/resources/cdn/api.md | 308 +++
src/gcore/resources/cloud/api.md | 1181 ++++++++++++
src/gcore/resources/dns/api.md | 159 ++
src/gcore/resources/fastedge/api.md | 122 ++
src/gcore/resources/iam/api.md | 42 +
src/gcore/resources/security/api.md | 55 +
src/gcore/resources/storage/api.md | 97 +
src/gcore/resources/streaming/api.md | 285 +++
src/gcore/resources/waap/api.md | 322 ++++
11 files changed, 2581 insertions(+), 2572 deletions(-)
create mode 100644 src/gcore/resources/cdn/api.md
create mode 100644 src/gcore/resources/cloud/api.md
create mode 100644 src/gcore/resources/dns/api.md
create mode 100644 src/gcore/resources/fastedge/api.md
create mode 100644 src/gcore/resources/iam/api.md
create mode 100644 src/gcore/resources/security/api.md
create mode 100644 src/gcore/resources/storage/api.md
create mode 100644 src/gcore/resources/streaming/api.md
create mode 100644 src/gcore/resources/waap/api.md
diff --git a/api.md b/api.md
index cbc93dbc..9faa9ce7 100644
--- a/api.md
+++ b/api.md
@@ -1,2579 +1,17 @@
-# Cloud
+# [Cloud](src/gcore/resources/cloud/api.md)
-Types:
+# [Waap](src/gcore/resources/waap/api.md)
-```python
-from gcore.types.cloud import (
- AllowedAddressPairs,
- BaremetalFlavor,
- BaremetalFlavorList,
- BlackholePort,
- Console,
- DDOSProfile,
- DDOSProfileField,
- DDOSProfileOptionList,
- DDOSProfileStatus,
- DDOSProfileTemplate,
- DDOSProfileTemplateField,
- FixedAddress,
- FixedAddressShort,
- FlavorHardwareDescription,
- FloatingAddress,
- FloatingIP,
- FloatingIPStatus,
- GPUImage,
- GPUImageList,
- HTTPMethod,
- Image,
- ImageList,
- Instance,
- InstanceIsolation,
- InstanceList,
- InstanceMetricsTimeUnit,
- InterfaceIPFamily,
- IPAssignment,
- IPVersion,
- LaasIndexRetentionPolicy,
- LoadBalancer,
- LoadBalancerInstanceRole,
- LoadBalancerMemberConnectivity,
- LoadBalancerOperatingStatus,
- LoadBalancerStatistics,
- Logging,
- Network,
- NetworkAnySubnetFip,
- NetworkDetails,
- NetworkInterface,
- NetworkInterfaceList,
- NetworkSubnetFip,
- ProvisioningStatus,
- Route,
- Subnet,
- Tag,
- TagList,
- TagUpdateMap,
- TaskIDList,
-)
-```
+# [Iam](src/gcore/resources/iam/api.md)
-## Projects
+# [Fastedge](src/gcore/resources/fastedge/api.md)
-Types:
+# [Streaming](src/gcore/resources/streaming/api.md)
-```python
-from gcore.types.cloud import Project
-```
+# [Security](src/gcore/resources/security/api.md)
-Methods:
+# [DNS](src/gcore/resources/dns/api.md)
-- client.cloud.projects.create(\*\*params) -> Project
-- client.cloud.projects.update(\*, project_id, \*\*params) -> Project
-- client.cloud.projects.list(\*\*params) -> SyncOffsetPage[Project]
-- client.cloud.projects.delete(\*, project_id) -> TaskIDList
-- client.cloud.projects.get(\*, project_id) -> Project
+# [Storage](src/gcore/resources/storage/api.md)
-## Tasks
-
-Types:
-
-```python
-from gcore.types.cloud import Task
-```
-
-Methods:
-
-- client.cloud.tasks.list(\*\*params) -> SyncOffsetPage[Task]
-- client.cloud.tasks.acknowledge_all(\*\*params) -> None
-- client.cloud.tasks.acknowledge_one(task_id) -> Task
-- client.cloud.tasks.get(task_id) -> Task
-
-## Regions
-
-Types:
-
-```python
-from gcore.types.cloud import Region
-```
-
-Methods:
-
-- client.cloud.regions.list(\*\*params) -> SyncOffsetPage[Region]
-- client.cloud.regions.get(\*, region_id, \*\*params) -> Region
-
-## Quotas
-
-Types:
-
-```python
-from gcore.types.cloud import QuotaGetAllResponse, QuotaGetByRegionResponse, QuotaGetGlobalResponse
-```
-
-Methods:
-
-- client.cloud.quotas.get_all() -> QuotaGetAllResponse
-- client.cloud.quotas.get_by_region(\*, client_id, region_id) -> QuotaGetByRegionResponse
-- client.cloud.quotas.get_global(client_id) -> QuotaGetGlobalResponse
-
-### Requests
-
-Types:
-
-```python
-from gcore.types.cloud.quotas import RequestListResponse, RequestGetResponse
-```
-
-Methods:
-
-- client.cloud.quotas.requests.create(\*\*params) -> None
-- client.cloud.quotas.requests.list(\*\*params) -> SyncOffsetPage[RequestListResponse]
-- client.cloud.quotas.requests.delete(request_id) -> None
-- client.cloud.quotas.requests.get(request_id) -> RequestGetResponse
-
-## Secrets
-
-Types:
-
-```python
-from gcore.types.cloud import Secret
-```
-
-Methods:
-
-- client.cloud.secrets.list(\*, project_id, region_id, \*\*params) -> SyncOffsetPage[Secret]
-- client.cloud.secrets.delete(secret_id, \*, project_id, region_id) -> TaskIDList
-- client.cloud.secrets.get(secret_id, \*, project_id, region_id) -> Secret
-- client.cloud.secrets.upload_tls_certificate(\*, project_id, region_id, \*\*params) -> TaskIDList
-
-## SSHKeys
-
-Types:
-
-```python
-from gcore.types.cloud import SSHKey, SSHKeyCreated
-```
-
-Methods:
-
-- client.cloud.ssh_keys.create(\*, project_id, \*\*params) -> SSHKeyCreated
-- client.cloud.ssh_keys.update(ssh_key_id, \*, project_id, \*\*params) -> SSHKey
-- client.cloud.ssh_keys.list(\*, project_id, \*\*params) -> SyncOffsetPage[SSHKey]
-- client.cloud.ssh_keys.delete(ssh_key_id, \*, project_id) -> None
-- client.cloud.ssh_keys.get(ssh_key_id, \*, project_id) -> SSHKey
-
-## IPRanges
-
-Types:
-
-```python
-from gcore.types.cloud import IPRanges
-```
-
-Methods:
-
-- client.cloud.ip_ranges.list() -> IPRanges
-
-## LoadBalancers
-
-Types:
-
-```python
-from gcore.types.cloud import (
- HealthMonitor,
- HealthMonitorStatus,
- LbAlgorithm,
- LbHealthMonitorType,
- LbListenerProtocol,
- LbPoolProtocol,
- LbSessionPersistenceType,
- ListenerStatus,
- LoadBalancerFlavorDetail,
- LoadBalancerFlavorList,
- LoadBalancerL7Policy,
- LoadBalancerL7PolicyList,
- LoadBalancerL7Rule,
- LoadBalancerL7RuleList,
- LoadBalancerListenerDetail,
- LoadBalancerListenerList,
- LoadBalancerMetrics,
- LoadBalancerMetricsList,
- LoadBalancerPool,
- LoadBalancerPoolList,
- LoadBalancerStatus,
- LoadBalancerStatusList,
- Member,
- MemberStatus,
- PoolStatus,
- SessionPersistence,
-)
-```
-
-Methods:
-
-- client.cloud.load_balancers.create(\*, project_id, region_id, \*\*params) -> TaskIDList
-- client.cloud.load_balancers.update(load_balancer_id, \*, project_id, region_id, \*\*params) -> LoadBalancer
-- client.cloud.load_balancers.list(\*, project_id, region_id, \*\*params) -> SyncOffsetPage[LoadBalancer]
-- client.cloud.load_balancers.delete(load_balancer_id, \*, project_id, region_id) -> TaskIDList
-- client.cloud.load_balancers.failover(load_balancer_id, \*, project_id, region_id, \*\*params) -> TaskIDList
-- client.cloud.load_balancers.get(load_balancer_id, \*, project_id, region_id, \*\*params) -> LoadBalancer
-- client.cloud.load_balancers.resize(load_balancer_id, \*, project_id, region_id, \*\*params) -> TaskIDList
-
-### L7Policies
-
-Methods:
-
-- client.cloud.load_balancers.l7_policies.create(\*, project_id, region_id, \*\*params) -> TaskIDList
-- client.cloud.load_balancers.l7_policies.update(l7policy_id, \*, project_id, region_id, \*\*params) -> TaskIDList
-- client.cloud.load_balancers.l7_policies.list(\*, project_id, region_id) -> LoadBalancerL7PolicyList
-- client.cloud.load_balancers.l7_policies.delete(l7policy_id, \*, project_id, region_id) -> TaskIDList
-- client.cloud.load_balancers.l7_policies.get(l7policy_id, \*, project_id, region_id) -> LoadBalancerL7Policy
-
-#### Rules
-
-Methods:
-
-- client.cloud.load_balancers.l7_policies.rules.create(l7policy_id, \*, project_id, region_id, \*\*params) -> TaskIDList
-- client.cloud.load_balancers.l7_policies.rules.list(l7policy_id, \*, project_id, region_id) -> LoadBalancerL7RuleList
-- client.cloud.load_balancers.l7_policies.rules.delete(l7rule_id, \*, project_id, region_id, l7policy_id) -> TaskIDList
-- client.cloud.load_balancers.l7_policies.rules.get(l7rule_id, \*, project_id, region_id, l7policy_id) -> LoadBalancerL7Rule
-- client.cloud.load_balancers.l7_policies.rules.replace(l7rule_id, \*, project_id, region_id, l7policy_id, \*\*params) -> TaskIDList
-
-### Flavors
-
-Methods:
-
-- client.cloud.load_balancers.flavors.list(\*, project_id, region_id, \*\*params) -> LoadBalancerFlavorList
-
-### Listeners
-
-Methods:
-
-- client.cloud.load_balancers.listeners.create(\*, project_id, region_id, \*\*params) -> TaskIDList
-- client.cloud.load_balancers.listeners.update(listener_id, \*, project_id, region_id, \*\*params) -> TaskIDList
-- client.cloud.load_balancers.listeners.list(\*, project_id, region_id, \*\*params) -> LoadBalancerListenerList
-- client.cloud.load_balancers.listeners.delete(listener_id, \*, project_id, region_id, \*\*params) -> TaskIDList
-- client.cloud.load_balancers.listeners.get(listener_id, \*, project_id, region_id, \*\*params) -> LoadBalancerListenerDetail
-
-### Pools
-
-Methods:
-
-- client.cloud.load_balancers.pools.create(\*, project_id, region_id, \*\*params) -> TaskIDList
-- client.cloud.load_balancers.pools.update(pool_id, \*, project_id, region_id, \*\*params) -> TaskIDList
-- client.cloud.load_balancers.pools.list(\*, project_id, region_id, \*\*params) -> LoadBalancerPoolList
-- client.cloud.load_balancers.pools.delete(pool_id, \*, project_id, region_id) -> TaskIDList
-- client.cloud.load_balancers.pools.get(pool_id, \*, project_id, region_id) -> LoadBalancerPool
-
-#### HealthMonitors
-
-Methods:
-
-- client.cloud.load_balancers.pools.health_monitors.create(pool_id, \*, project_id, region_id, \*\*params) -> TaskIDList
-- client.cloud.load_balancers.pools.health_monitors.delete(pool_id, \*, project_id, region_id) -> None
-
-#### Members
-
-Methods:
-
-- client.cloud.load_balancers.pools.members.create(pool_id, \*, project_id, region_id, \*\*params) -> TaskIDList
-- client.cloud.load_balancers.pools.members.delete(member_id, \*, project_id, region_id, pool_id) -> TaskIDList
-
-### Metrics
-
-Methods:
-
-- client.cloud.load_balancers.metrics.list(load_balancer_id, \*, project_id, region_id, \*\*params) -> LoadBalancerMetricsList
-
-### Statuses
-
-Methods:
-
-- client.cloud.load_balancers.statuses.list(\*, project_id, region_id) -> LoadBalancerStatusList
-- client.cloud.load_balancers.statuses.get(load_balancer_id, \*, project_id, region_id) -> LoadBalancerStatus
-
-## ReservedFixedIPs
-
-Types:
-
-```python
-from gcore.types.cloud import ReservedFixedIP
-```
-
-Methods:
-
-- client.cloud.reserved_fixed_ips.create(\*, project_id, region_id, \*\*params) -> TaskIDList
-- client.cloud.reserved_fixed_ips.update(port_id, \*, project_id, region_id, \*\*params) -> ReservedFixedIP
-- client.cloud.reserved_fixed_ips.list(\*, project_id, region_id, \*\*params) -> SyncOffsetPage[ReservedFixedIP]
-- client.cloud.reserved_fixed_ips.delete(port_id, \*, project_id, region_id) -> TaskIDList
-- client.cloud.reserved_fixed_ips.get(port_id, \*, project_id, region_id) -> ReservedFixedIP
-
-### Vip
-
-Types:
-
-```python
-from gcore.types.cloud.reserved_fixed_ips import IPWithSubnet
-```
-
-Methods:
-
-- client.cloud.reserved_fixed_ips.vip.toggle(port_id, \*, project_id, region_id, \*\*params) -> ReservedFixedIP
-
-#### CandidatePorts
-
-Types:
-
-```python
-from gcore.types.cloud.reserved_fixed_ips.vip import CandidatePort, CandidatePortList
-```
-
-Methods:
-
-- client.cloud.reserved_fixed_ips.vip.candidate_ports.list(port_id, \*, project_id, region_id) -> CandidatePortList
-
-#### ConnectedPorts
-
-Types:
-
-```python
-from gcore.types.cloud.reserved_fixed_ips.vip import ConnectedPort, ConnectedPortList
-```
-
-Methods:
-
-- client.cloud.reserved_fixed_ips.vip.connected_ports.list(port_id, \*, project_id, region_id) -> ConnectedPortList
-- client.cloud.reserved_fixed_ips.vip.connected_ports.add(port_id, \*, project_id, region_id, \*\*params) -> ConnectedPortList
-- client.cloud.reserved_fixed_ips.vip.connected_ports.replace(port_id, \*, project_id, region_id, \*\*params) -> ConnectedPortList
-
-## Networks
-
-Methods:
-
-- client.cloud.networks.create(\*, project_id, region_id, \*\*params) -> TaskIDList
-- client.cloud.networks.update(network_id, \*, project_id, region_id, \*\*params) -> Network
-- client.cloud.networks.list(\*, project_id, region_id, \*\*params) -> SyncOffsetPage[Network]
-- client.cloud.networks.delete(network_id, \*, project_id, region_id) -> TaskIDList
-- client.cloud.networks.get(network_id, \*, project_id, region_id) -> Network
-
-### Subnets
-
-Methods:
-
-- client.cloud.networks.subnets.create(\*, project_id, region_id, \*\*params) -> TaskIDList
-- client.cloud.networks.subnets.update(subnet_id, \*, project_id, region_id, \*\*params) -> Subnet
-- client.cloud.networks.subnets.list(\*, project_id, region_id, \*\*params) -> SyncOffsetPage[Subnet]
-- client.cloud.networks.subnets.delete(subnet_id, \*, project_id, region_id) -> TaskIDList
-- client.cloud.networks.subnets.get(subnet_id, \*, project_id, region_id) -> Subnet
-
-### Routers
-
-Types:
-
-```python
-from gcore.types.cloud.networks import Router, RouterList, SubnetID
-```
-
-Methods:
-
-- client.cloud.networks.routers.create(\*, project_id, region_id, \*\*params) -> TaskIDList
-- client.cloud.networks.routers.update(router_id, \*, project_id, region_id, \*\*params) -> Router
-- client.cloud.networks.routers.list(\*, project_id, region_id, \*\*params) -> SyncOffsetPage[Router]
-- client.cloud.networks.routers.delete(router_id, \*, project_id, region_id) -> TaskIDList
-- client.cloud.networks.routers.attach_subnet(router_id, \*, project_id, region_id, \*\*params) -> Router
-- client.cloud.networks.routers.detach_subnet(router_id, \*, project_id, region_id, \*\*params) -> Router
-- client.cloud.networks.routers.get(router_id, \*, project_id, region_id) -> Router
-
-## Volumes
-
-Types:
-
-```python
-from gcore.types.cloud import Volume
-```
-
-Methods:
-
-- client.cloud.volumes.create(\*, project_id, region_id, \*\*params) -> TaskIDList
-- client.cloud.volumes.update(volume_id, \*, project_id, region_id, \*\*params) -> Volume
-- client.cloud.volumes.list(\*, project_id, region_id, \*\*params) -> SyncOffsetPage[Volume]
-- client.cloud.volumes.delete(volume_id, \*, project_id, region_id, \*\*params) -> TaskIDList
-- client.cloud.volumes.attach_to_instance(volume_id, \*, project_id, region_id, \*\*params) -> TaskIDList
-- client.cloud.volumes.change_type(volume_id, \*, project_id, region_id, \*\*params) -> Volume
-- client.cloud.volumes.detach_from_instance(volume_id, \*, project_id, region_id, \*\*params) -> TaskIDList
-- client.cloud.volumes.get(volume_id, \*, project_id, region_id) -> Volume
-- client.cloud.volumes.resize(volume_id, \*, project_id, region_id, \*\*params) -> TaskIDList
-- client.cloud.volumes.revert_to_last_snapshot(volume_id, \*, project_id, region_id) -> None
-
-## FloatingIPs
-
-Types:
-
-```python
-from gcore.types.cloud import FloatingIPDetailed
-```
-
-Methods:
-
-- client.cloud.floating_ips.create(\*, project_id, region_id, \*\*params) -> TaskIDList
-- client.cloud.floating_ips.update(floating_ip_id, \*, project_id, region_id, \*\*params) -> TaskIDList
-- client.cloud.floating_ips.list(\*, project_id, region_id, \*\*params) -> SyncOffsetPage[FloatingIPDetailed]
-- client.cloud.floating_ips.delete(floating_ip_id, \*, project_id, region_id) -> TaskIDList
-- client.cloud.floating_ips.assign(floating_ip_id, \*, project_id, region_id, \*\*params) -> FloatingIP
-- client.cloud.floating_ips.get(floating_ip_id, \*, project_id, region_id) -> FloatingIP
-- client.cloud.floating_ips.unassign(floating_ip_id, \*, project_id, region_id) -> FloatingIP
-
-## SecurityGroups
-
-Types:
-
-```python
-from gcore.types.cloud import SecurityGroup, SecurityGroupRule
-```
-
-Methods:
-
-- client.cloud.security_groups.create(\*, project_id, region_id, \*\*params) -> TaskIDList
-- client.cloud.security_groups.update(group_id, \*, project_id, region_id, \*\*params) -> TaskIDList
-- client.cloud.security_groups.list(\*, project_id, region_id, \*\*params) -> SyncOffsetPage[SecurityGroup]
-- client.cloud.security_groups.delete(group_id, \*, project_id, region_id) -> None
-- client.cloud.security_groups.copy(group_id, \*, project_id, region_id, \*\*params) -> SecurityGroup
-- client.cloud.security_groups.get(group_id, \*, project_id, region_id) -> SecurityGroup
-- client.cloud.security_groups.revert_to_default(group_id, \*, project_id, region_id) -> SecurityGroup
-
-### Rules
-
-Methods:
-
-- client.cloud.security_groups.rules.create(group_id, \*, project_id, region_id, \*\*params) -> SecurityGroupRule
-- client.cloud.security_groups.rules.delete(rule_id, \*, project_id, region_id) -> None
-- client.cloud.security_groups.rules.replace(rule_id, \*, project_id, region_id, \*\*params) -> SecurityGroupRule
-
-## Users
-
-### RoleAssignments
-
-Types:
-
-```python
-from gcore.types.cloud.users import RoleAssignment, RoleAssignmentUpdatedDeleted
-```
-
-Methods:
-
-- client.cloud.users.role_assignments.create(\*\*params) -> RoleAssignment
-- client.cloud.users.role_assignments.update(assignment_id, \*\*params) -> RoleAssignmentUpdatedDeleted
-- client.cloud.users.role_assignments.list(\*\*params) -> SyncOffsetPage[RoleAssignment]
-- client.cloud.users.role_assignments.delete(assignment_id) -> RoleAssignmentUpdatedDeleted
-
-## Inference
-
-Types:
-
-```python
-from gcore.types.cloud import InferenceRegionCapacity, InferenceRegionCapacityList
-```
-
-Methods:
-
-- client.cloud.inference.get_capacity_by_region() -> InferenceRegionCapacityList
-
-### Flavors
-
-Types:
-
-```python
-from gcore.types.cloud.inference import InferenceFlavor
-```
-
-Methods:
-
-- client.cloud.inference.flavors.list(\*\*params) -> SyncOffsetPage[InferenceFlavor]
-- client.cloud.inference.flavors.get(flavor_name) -> InferenceFlavor
-
-### Deployments
-
-Types:
-
-```python
-from gcore.types.cloud.inference import (
- InferenceDeployment,
- InferenceDeploymentAPIKey,
- Probe,
- ProbeConfig,
- ProbeExec,
- ProbeHTTPGet,
- ProbeTcpSocket,
-)
-```
-
-Methods:
-
-- client.cloud.inference.deployments.create(\*, project_id, \*\*params) -> TaskIDList
-- client.cloud.inference.deployments.update(deployment_name, \*, project_id, \*\*params) -> TaskIDList
-- client.cloud.inference.deployments.list(\*, project_id, \*\*params) -> SyncOffsetPage[InferenceDeployment]
-- client.cloud.inference.deployments.delete(deployment_name, \*, project_id) -> TaskIDList
-- client.cloud.inference.deployments.get(deployment_name, \*, project_id) -> InferenceDeployment
-- client.cloud.inference.deployments.get_api_key(deployment_name, \*, project_id) -> InferenceDeploymentAPIKey
-- client.cloud.inference.deployments.start(deployment_name, \*, project_id) -> None
-- client.cloud.inference.deployments.stop(deployment_name, \*, project_id) -> None
-
-#### Logs
-
-Types:
-
-```python
-from gcore.types.cloud.inference.deployments import InferenceDeploymentLog
-```
-
-Methods:
-
-- client.cloud.inference.deployments.logs.list(deployment_name, \*, project_id, \*\*params) -> SyncOffsetPage[InferenceDeploymentLog]
-
-### RegistryCredentials
-
-Types:
-
-```python
-from gcore.types.cloud.inference import InferenceRegistryCredentials
-```
-
-Methods:
-
-- client.cloud.inference.registry_credentials.create(\*, project_id, \*\*params) -> InferenceRegistryCredentials
-- client.cloud.inference.registry_credentials.list(\*, project_id, \*\*params) -> SyncOffsetPage[InferenceRegistryCredentials]
-- client.cloud.inference.registry_credentials.delete(credential_name, \*, project_id) -> None
-- client.cloud.inference.registry_credentials.get(credential_name, \*, project_id) -> InferenceRegistryCredentials
-- client.cloud.inference.registry_credentials.replace(credential_name, \*, project_id, \*\*params) -> InferenceRegistryCredentials
-
-### Secrets
-
-Types:
-
-```python
-from gcore.types.cloud.inference import InferenceSecret
-```
-
-Methods:
-
-- client.cloud.inference.secrets.create(\*, project_id, \*\*params) -> InferenceSecret
-- client.cloud.inference.secrets.list(\*, project_id, \*\*params) -> SyncOffsetPage[InferenceSecret]
-- client.cloud.inference.secrets.delete(secret_name, \*, project_id) -> None
-- client.cloud.inference.secrets.get(secret_name, \*, project_id) -> InferenceSecret
-- client.cloud.inference.secrets.replace(secret_name, \*, project_id, \*\*params) -> InferenceSecret
-
-### APIKeys
-
-Types:
-
-```python
-from gcore.types.cloud.inference import InferenceAPIKey, InferenceAPIKeyCreated
-```
-
-Methods:
-
-- client.cloud.inference.api_keys.create(\*, project_id, \*\*params) -> InferenceAPIKeyCreated
-- client.cloud.inference.api_keys.update(api_key_name, \*, project_id, \*\*params) -> InferenceAPIKey
-- client.cloud.inference.api_keys.list(\*, project_id, \*\*params) -> SyncOffsetPage[InferenceAPIKey]
-- client.cloud.inference.api_keys.delete(api_key_name, \*, project_id) -> None
-- client.cloud.inference.api_keys.get(api_key_name, \*, project_id) -> InferenceAPIKey
-
-### Applications
-
-#### Deployments
-
-Types:
-
-```python
-from gcore.types.cloud.inference.applications import (
- InferenceApplicationDeployment,
- InferenceApplicationDeploymentList,
-)
-```
-
-Methods:
-
-- client.cloud.inference.applications.deployments.create(\*, project_id, \*\*params) -> TaskIDList
-- client.cloud.inference.applications.deployments.update(deployment_name, \*, project_id, \*\*params) -> TaskIDList
-- client.cloud.inference.applications.deployments.list(\*, project_id) -> InferenceApplicationDeploymentList
-- client.cloud.inference.applications.deployments.delete(deployment_name, \*, project_id) -> TaskIDList
-- client.cloud.inference.applications.deployments.get(deployment_name, \*, project_id) -> InferenceApplicationDeployment
-
-#### Templates
-
-Types:
-
-```python
-from gcore.types.cloud.inference.applications import (
- InferenceApplicationTemplate,
- InferenceApplicationTemplateList,
-)
-```
-
-Methods:
-
-- client.cloud.inference.applications.templates.list() -> InferenceApplicationTemplateList
-- client.cloud.inference.applications.templates.get(application_name) -> InferenceApplicationTemplate
-
-## PlacementGroups
-
-Types:
-
-```python
-from gcore.types.cloud import PlacementGroup, PlacementGroupList
-```
-
-Methods:
-
-- client.cloud.placement_groups.create(\*, project_id, region_id, \*\*params) -> PlacementGroup
-- client.cloud.placement_groups.list(\*, project_id, region_id) -> PlacementGroupList
-- client.cloud.placement_groups.delete(group_id, \*, project_id, region_id) -> TaskIDList
-- client.cloud.placement_groups.get(group_id, \*, project_id, region_id) -> PlacementGroup
-
-## Baremetal
-
-### Images
-
-Methods:
-
-- client.cloud.baremetal.images.list(\*, project_id, region_id, \*\*params) -> ImageList
-
-### Flavors
-
-Methods:
-
-- client.cloud.baremetal.flavors.list(\*, project_id, region_id, \*\*params) -> BaremetalFlavorList
-
-### Servers
-
-Types:
-
-```python
-from gcore.types.cloud.baremetal import (
- BaremetalFixedAddress,
- BaremetalFloatingAddress,
- BaremetalServer,
-)
-```
-
-Methods:
-
-- client.cloud.baremetal.servers.create(\*, project_id, region_id, \*\*params) -> TaskIDList
-- client.cloud.baremetal.servers.list(\*, project_id, region_id, \*\*params) -> SyncOffsetPage[BaremetalServer]
-- client.cloud.baremetal.servers.rebuild(server_id, \*, project_id, region_id, \*\*params) -> TaskIDList
-
-## Registries
-
-Types:
-
-```python
-from gcore.types.cloud import Registry, RegistryList, RegistryTag
-```
-
-Methods:
-
-- client.cloud.registries.create(\*, project_id, region_id, \*\*params) -> Registry
-- client.cloud.registries.list(\*, project_id, region_id) -> RegistryList
-- client.cloud.registries.delete(registry_id, \*, project_id, region_id) -> None
-- client.cloud.registries.get(registry_id, \*, project_id, region_id) -> Registry
-- client.cloud.registries.resize(registry_id, \*, project_id, region_id, \*\*params) -> Registry
-
-### Repositories
-
-Types:
-
-```python
-from gcore.types.cloud.registries import RegistryRepository, RegistryRepositoryList
-```
-
-Methods:
-
-- client.cloud.registries.repositories.list(registry_id, \*, project_id, region_id) -> RegistryRepositoryList
-- client.cloud.registries.repositories.delete(repository_name, \*, project_id, region_id, registry_id) -> None
-
-### Artifacts
-
-Types:
-
-```python
-from gcore.types.cloud.registries import RegistryArtifact, RegistryArtifactList
-```
-
-Methods:
-
-- client.cloud.registries.artifacts.list(repository_name, \*, project_id, region_id, registry_id) -> RegistryArtifactList
-- client.cloud.registries.artifacts.delete(digest, \*, project_id, region_id, registry_id, repository_name) -> None
-
-### Tags
-
-Methods:
-
-- client.cloud.registries.tags.delete(tag_name, \*, project_id, region_id, registry_id, repository_name, digest) -> None
-
-### Users
-
-Types:
-
-```python
-from gcore.types.cloud.registries import (
- RegistryUser,
- RegistryUserCreated,
- RegistryUserList,
- UserRefreshSecretResponse,
-)
-```
-
-Methods:
-
-- client.cloud.registries.users.create(registry_id, \*, project_id, region_id, \*\*params) -> RegistryUserCreated
-- client.cloud.registries.users.update(user_id, \*, project_id, region_id, registry_id, \*\*params) -> RegistryUser
-- client.cloud.registries.users.list(registry_id, \*, project_id, region_id) -> RegistryUserList
-- client.cloud.registries.users.delete(user_id, \*, project_id, region_id, registry_id) -> None
-- client.cloud.registries.users.create_multiple(registry_id, \*, project_id, region_id, \*\*params) -> RegistryUserCreated
-- client.cloud.registries.users.refresh_secret(user_id, \*, project_id, region_id, registry_id) -> UserRefreshSecretResponse
-
-## FileShares
-
-Types:
-
-```python
-from gcore.types.cloud import FileShare
-```
-
-Methods:
-
-- client.cloud.file_shares.create(\*, project_id, region_id, \*\*params) -> TaskIDList
-- client.cloud.file_shares.update(file_share_id, \*, project_id, region_id, \*\*params) -> TaskIDList
-- client.cloud.file_shares.list(\*, project_id, region_id, \*\*params) -> SyncOffsetPage[FileShare]
-- client.cloud.file_shares.delete(file_share_id, \*, project_id, region_id) -> TaskIDList
-- client.cloud.file_shares.get(file_share_id, \*, project_id, region_id) -> FileShare
-- client.cloud.file_shares.resize(file_share_id, \*, project_id, region_id, \*\*params) -> TaskIDList
-
-### AccessRules
-
-Types:
-
-```python
-from gcore.types.cloud.file_shares import AccessRule, AccessRuleList
-```
-
-Methods:
-
-- client.cloud.file_shares.access_rules.create(file_share_id, \*, project_id, region_id, \*\*params) -> AccessRule
-- client.cloud.file_shares.access_rules.list(file_share_id, \*, project_id, region_id) -> AccessRuleList
-- client.cloud.file_shares.access_rules.delete(access_rule_id, \*, project_id, region_id, file_share_id) -> None
-
-## BillingReservations
-
-Types:
-
-```python
-from gcore.types.cloud import BillingReservation, BillingReservations
-```
-
-Methods:
-
-- client.cloud.billing_reservations.list(\*\*params) -> BillingReservations
-
-## GPUBaremetal
-
-### Clusters
-
-Types:
-
-```python
-from gcore.types.cloud.gpu_baremetal import GPUBaremetalCluster
-```
-
-Methods:
-
-- client.cloud.gpu_baremetal.clusters.create(\*, project_id, region_id, \*\*params) -> TaskIDList
-- client.cloud.gpu_baremetal.clusters.list(\*, project_id, region_id, \*\*params) -> SyncOffsetPage[GPUBaremetalCluster]
-- client.cloud.gpu_baremetal.clusters.delete(cluster_id, \*, project_id, region_id, \*\*params) -> TaskIDList
-- client.cloud.gpu_baremetal.clusters.action(cluster_id, \*, project_id, region_id, \*\*params) -> TaskIDList
-- client.cloud.gpu_baremetal.clusters.get(cluster_id, \*, project_id, region_id) -> GPUBaremetalCluster
-- client.cloud.gpu_baremetal.clusters.powercycle_all_servers(cluster_id, \*, project_id, region_id) -> GPUBaremetalClusterServerV1List
-- client.cloud.gpu_baremetal.clusters.reboot_all_servers(cluster_id, \*, project_id, region_id) -> GPUBaremetalClusterServerV1List
-- client.cloud.gpu_baremetal.clusters.rebuild(cluster_id, \*, project_id, region_id, \*\*params) -> TaskIDList
-- client.cloud.gpu_baremetal.clusters.resize(cluster_id, \*, project_id, region_id, \*\*params) -> TaskIDList
-
-#### Interfaces
-
-Methods:
-
-- client.cloud.gpu_baremetal.clusters.interfaces.list(cluster_id, \*, project_id, region_id) -> NetworkInterfaceList
-- client.cloud.gpu_baremetal.clusters.interfaces.attach(instance_id, \*, project_id, region_id, \*\*params) -> TaskIDList
-- client.cloud.gpu_baremetal.clusters.interfaces.detach(instance_id, \*, project_id, region_id, \*\*params) -> TaskIDList
-
-#### Servers
-
-Types:
-
-```python
-from gcore.types.cloud.gpu_baremetal.clusters import (
- GPUBaremetalClusterServer,
- GPUBaremetalClusterServerV1,
- GPUBaremetalClusterServerV1List,
-)
-```
-
-Methods:
-
-- client.cloud.gpu_baremetal.clusters.servers.list(cluster_id, \*, project_id, region_id, \*\*params) -> SyncOffsetPage[GPUBaremetalClusterServer]
-- client.cloud.gpu_baremetal.clusters.servers.delete(instance_id, \*, project_id, region_id, cluster_id, \*\*params) -> TaskIDList
-- client.cloud.gpu_baremetal.clusters.servers.get_console(instance_id, \*, project_id, region_id) -> Console
-- client.cloud.gpu_baremetal.clusters.servers.powercycle(instance_id, \*, project_id, region_id) -> GPUBaremetalClusterServerV1
-- client.cloud.gpu_baremetal.clusters.servers.reboot(instance_id, \*, project_id, region_id) -> GPUBaremetalClusterServerV1
-
-#### Flavors
-
-Types:
-
-```python
-from gcore.types.cloud.gpu_baremetal.clusters import GPUBaremetalFlavor, GPUBaremetalFlavorList
-```
-
-Methods:
-
-- client.cloud.gpu_baremetal.clusters.flavors.list(\*, project_id, region_id, \*\*params) -> GPUBaremetalFlavorList
-
-#### Images
-
-Methods:
-
-- client.cloud.gpu_baremetal.clusters.images.list(\*, project_id, region_id) -> GPUImageList
-- client.cloud.gpu_baremetal.clusters.images.delete(image_id, \*, project_id, region_id) -> TaskIDList
-- client.cloud.gpu_baremetal.clusters.images.get(image_id, \*, project_id, region_id) -> GPUImage
-- client.cloud.gpu_baremetal.clusters.images.upload(\*, project_id, region_id, \*\*params) -> TaskIDList
-
-## GPUVirtual
-
-### Clusters
-
-Types:
-
-```python
-from gcore.types.cloud.gpu_virtual import GPUVirtualCluster
-```
-
-Methods:
-
-- client.cloud.gpu_virtual.clusters.create(\*, project_id, region_id, \*\*params) -> TaskIDList
-- client.cloud.gpu_virtual.clusters.update(cluster_id, \*, project_id, region_id, \*\*params) -> GPUVirtualCluster
-- client.cloud.gpu_virtual.clusters.list(\*, project_id, region_id, \*\*params) -> SyncOffsetPage[GPUVirtualCluster]
-- client.cloud.gpu_virtual.clusters.delete(cluster_id, \*, project_id, region_id, \*\*params) -> TaskIDList
-- client.cloud.gpu_virtual.clusters.action(cluster_id, \*, project_id, region_id, \*\*params) -> TaskIDList
-- client.cloud.gpu_virtual.clusters.get(cluster_id, \*, project_id, region_id) -> GPUVirtualCluster
-
-#### Servers
-
-Types:
-
-```python
-from gcore.types.cloud.gpu_virtual.clusters import (
- GPUVirtualClusterServer,
- GPUVirtualClusterServerList,
-)
-```
-
-Methods:
-
-- client.cloud.gpu_virtual.clusters.servers.list(cluster_id, \*, project_id, region_id, \*\*params) -> GPUVirtualClusterServerList
-- client.cloud.gpu_virtual.clusters.servers.delete(server_id, \*, project_id, region_id, cluster_id, \*\*params) -> TaskIDList
-
-#### Volumes
-
-Types:
-
-```python
-from gcore.types.cloud.gpu_virtual.clusters import (
- GPUVirtualClusterVolume,
- GPUVirtualClusterVolumeList,
-)
-```
-
-Methods:
-
-- client.cloud.gpu_virtual.clusters.volumes.list(cluster_id, \*, project_id, region_id) -> GPUVirtualClusterVolumeList
-
-#### Interfaces
-
-Types:
-
-```python
-from gcore.types.cloud.gpu_virtual.clusters import GPUVirtualInterface, GPUVirtualInterfaceList
-```
-
-Methods:
-
-- client.cloud.gpu_virtual.clusters.interfaces.list(cluster_id, \*, project_id, region_id) -> GPUVirtualInterfaceList
-
-#### Flavors
-
-Types:
-
-```python
-from gcore.types.cloud.gpu_virtual.clusters import GPUVirtualFlavor, GPUVirtualFlavorList
-```
-
-Methods:
-
-- client.cloud.gpu_virtual.clusters.flavors.list(\*, project_id, region_id, \*\*params) -> GPUVirtualFlavorList
-
-#### Images
-
-Methods:
-
-- client.cloud.gpu_virtual.clusters.images.list(\*, project_id, region_id) -> GPUImageList
-- client.cloud.gpu_virtual.clusters.images.delete(image_id, \*, project_id, region_id) -> TaskIDList
-- client.cloud.gpu_virtual.clusters.images.get(image_id, \*, project_id, region_id) -> GPUImage
-- client.cloud.gpu_virtual.clusters.images.upload(\*, project_id, region_id, \*\*params) -> TaskIDList
-
-## Instances
-
-Types:
-
-```python
-from gcore.types.cloud import InstanceInterface
-```
-
-Methods:
-
-- client.cloud.instances.create(\*, project_id, region_id, \*\*params) -> TaskIDList
-- client.cloud.instances.update(instance_id, \*, project_id, region_id, \*\*params) -> Instance
-- client.cloud.instances.list(\*, project_id, region_id, \*\*params) -> SyncOffsetPage[Instance]
-- client.cloud.instances.delete(instance_id, \*, project_id, region_id, \*\*params) -> TaskIDList
-- client.cloud.instances.action(instance_id, \*, project_id, region_id, \*\*params) -> TaskIDList
-- client.cloud.instances.add_to_placement_group(instance_id, \*, project_id, region_id, \*\*params) -> TaskIDList
-- client.cloud.instances.assign_security_group(instance_id, \*, project_id, region_id, \*\*params) -> None
-- client.cloud.instances.disable_port_security(port_id, \*, project_id, region_id) -> InstanceInterface
-- client.cloud.instances.enable_port_security(port_id, \*, project_id, region_id) -> InstanceInterface
-- client.cloud.instances.get(instance_id, \*, project_id, region_id) -> Instance
-- client.cloud.instances.get_console(instance_id, \*, project_id, region_id, \*\*params) -> Console
-- client.cloud.instances.remove_from_placement_group(instance_id, \*, project_id, region_id) -> TaskIDList
-- client.cloud.instances.resize(instance_id, \*, project_id, region_id, \*\*params) -> TaskIDList
-- client.cloud.instances.unassign_security_group(instance_id, \*, project_id, region_id, \*\*params) -> None
-
-### Flavors
-
-Types:
-
-```python
-from gcore.types.cloud.instances import InstanceFlavorDetailed, InstanceFlavorList
-```
-
-Methods:
-
-- client.cloud.instances.flavors.list(\*, project_id, region_id, \*\*params) -> InstanceFlavorList
-
-### Interfaces
-
-Methods:
-
-- client.cloud.instances.interfaces.list(instance_id, \*, project_id, region_id) -> NetworkInterfaceList
-- client.cloud.instances.interfaces.attach(instance_id, \*, project_id, region_id, \*\*params) -> TaskIDList
-- client.cloud.instances.interfaces.detach(instance_id, \*, project_id, region_id, \*\*params) -> TaskIDList
-
-### Images
-
-Methods:
-
-- client.cloud.instances.images.update(image_id, \*, project_id, region_id, \*\*params) -> Image
-- client.cloud.instances.images.list(\*, project_id, region_id, \*\*params) -> ImageList
-- client.cloud.instances.images.delete(image_id, \*, project_id, region_id) -> TaskIDList
-- client.cloud.instances.images.create_from_volume(\*, project_id, region_id, \*\*params) -> TaskIDList
-- client.cloud.instances.images.get(image_id, \*, project_id, region_id, \*\*params) -> Image
-- client.cloud.instances.images.upload(\*, project_id, region_id, \*\*params) -> TaskIDList
-
-### Metrics
-
-Types:
-
-```python
-from gcore.types.cloud.instances import Metrics, MetricsList
-```
-
-Methods:
-
-- client.cloud.instances.metrics.list(instance_id, \*, project_id, region_id, \*\*params) -> MetricsList
-
-## K8S
-
-Types:
-
-```python
-from gcore.types.cloud import K8SClusterVersion, K8SClusterVersionList
-```
-
-Methods:
-
-- client.cloud.k8s.list_versions(\*, project_id, region_id) -> K8SClusterVersionList
-
-### Flavors
-
-Methods:
-
-- client.cloud.k8s.flavors.list(\*, project_id, region_id, \*\*params) -> BaremetalFlavorList
-
-### Clusters
-
-Types:
-
-```python
-from gcore.types.cloud.k8s import (
- K8SCluster,
- K8SClusterCertificate,
- K8SClusterKubeconfig,
- K8SClusterList,
-)
-```
-
-Methods:
-
-- client.cloud.k8s.clusters.create(\*, project_id, region_id, \*\*params) -> TaskIDList
-- client.cloud.k8s.clusters.update(cluster_name, \*, project_id, region_id, \*\*params) -> TaskIDList
-- client.cloud.k8s.clusters.list(\*, project_id, region_id) -> K8SClusterList
-- client.cloud.k8s.clusters.delete(cluster_name, \*, project_id, region_id, \*\*params) -> TaskIDList
-- client.cloud.k8s.clusters.get(cluster_name, \*, project_id, region_id) -> K8SCluster
-- client.cloud.k8s.clusters.get_certificate(cluster_name, \*, project_id, region_id) -> K8SClusterCertificate
-- client.cloud.k8s.clusters.get_kubeconfig(cluster_name, \*, project_id, region_id) -> K8SClusterKubeconfig
-- client.cloud.k8s.clusters.list_versions_for_upgrade(cluster_name, \*, project_id, region_id) -> K8SClusterVersionList
-- client.cloud.k8s.clusters.upgrade(cluster_name, \*, project_id, region_id, \*\*params) -> TaskIDList
-
-#### Nodes
-
-Methods:
-
-- client.cloud.k8s.clusters.nodes.list(cluster_name, \*, project_id, region_id, \*\*params) -> InstanceList
-- client.cloud.k8s.clusters.nodes.delete(instance_id, \*, project_id, region_id, cluster_name) -> None
-
-#### Pools
-
-Types:
-
-```python
-from gcore.types.cloud.k8s.clusters import K8SClusterPool, K8SClusterPoolList, K8SClusterPoolQuota
-```
-
-Methods:
-
-- client.cloud.k8s.clusters.pools.create(cluster_name, \*, project_id, region_id, \*\*params) -> TaskIDList
-- client.cloud.k8s.clusters.pools.update(pool_name, \*, project_id, region_id, cluster_name, \*\*params) -> K8SClusterPool
-- client.cloud.k8s.clusters.pools.list(cluster_name, \*, project_id, region_id) -> K8SClusterPoolList
-- client.cloud.k8s.clusters.pools.delete(pool_name, \*, project_id, region_id, cluster_name) -> TaskIDList
-- client.cloud.k8s.clusters.pools.check_quota(\*, project_id, region_id, \*\*params) -> K8SClusterPoolQuota
-- client.cloud.k8s.clusters.pools.get(pool_name, \*, project_id, region_id, cluster_name) -> K8SClusterPool
-- client.cloud.k8s.clusters.pools.resize(pool_name, \*, project_id, region_id, cluster_name, \*\*params) -> TaskIDList
-
-##### Nodes
-
-Methods:
-
-- client.cloud.k8s.clusters.pools.nodes.list(pool_name, \*, project_id, region_id, cluster_name, \*\*params) -> InstanceList
-- client.cloud.k8s.clusters.pools.nodes.delete(instance_id, \*, project_id, region_id, cluster_name, pool_name) -> None
-
-## AuditLogs
-
-Types:
-
-```python
-from gcore.types.cloud import AuditLogEntry
-```
-
-Methods:
-
-- client.cloud.audit_logs.list(\*\*params) -> SyncOffsetPage[AuditLogEntry]
-
-## CostReports
-
-Types:
-
-```python
-from gcore.types.cloud import CostReportAggregated, CostReportAggregatedMonthly, CostReportDetailed
-```
-
-Methods:
-
-- client.cloud.cost_reports.get_aggregated(\*\*params) -> CostReportAggregated
-- client.cloud.cost_reports.get_aggregated_monthly(\*\*params) -> CostReportAggregatedMonthly
-- client.cloud.cost_reports.get_detailed(\*\*params) -> CostReportDetailed
-
-## UsageReports
-
-Types:
-
-```python
-from gcore.types.cloud import UsageReport
-```
-
-Methods:
-
-- client.cloud.usage_reports.get(\*\*params) -> UsageReport
-
-## Databases
-
-### Postgres
-
-#### Clusters
-
-Types:
-
-```python
-from gcore.types.cloud.databases.postgres import PostgresCluster, PostgresClusterShort
-```
-
-Methods:
-
-- client.cloud.databases.postgres.clusters.create(\*, project_id, region_id, \*\*params) -> TaskIDList
-- client.cloud.databases.postgres.clusters.update(cluster_name, \*, project_id, region_id, \*\*params) -> TaskIDList
-- client.cloud.databases.postgres.clusters.list(\*, project_id, region_id, \*\*params) -> SyncOffsetPage[PostgresClusterShort]
-- client.cloud.databases.postgres.clusters.delete(cluster_name, \*, project_id, region_id) -> TaskIDList
-- client.cloud.databases.postgres.clusters.get(cluster_name, \*, project_id, region_id) -> PostgresCluster
-
-##### UserCredentials
-
-Types:
-
-```python
-from gcore.types.cloud.databases.postgres.clusters import PostgresUserCredentials
-```
-
-Methods:
-
-- client.cloud.databases.postgres.clusters.user_credentials.get(username, \*, project_id, region_id, cluster_name) -> PostgresUserCredentials
-- client.cloud.databases.postgres.clusters.user_credentials.regenerate(username, \*, project_id, region_id, cluster_name) -> PostgresUserCredentials
-
-#### Configurations
-
-Types:
-
-```python
-from gcore.types.cloud.databases.postgres import PostgresConfiguration
-```
-
-Methods:
-
-- client.cloud.databases.postgres.configurations.get(\*, project_id, region_id) -> PostgresConfiguration
-
-#### CustomConfigurations
-
-Types:
-
-```python
-from gcore.types.cloud.databases.postgres import PgConfValidation
-```
-
-Methods:
-
-- client.cloud.databases.postgres.custom_configurations.validate(\*, project_id, region_id, \*\*params) -> PgConfValidation
-
-## VolumeSnapshots
-
-Types:
-
-```python
-from gcore.types.cloud import Snapshot
-```
-
-Methods:
-
-- client.cloud.volume_snapshots.create(\*, project_id, region_id, \*\*params) -> TaskIDList
-- client.cloud.volume_snapshots.update(snapshot_id, \*, project_id, region_id, \*\*params) -> Snapshot
-- client.cloud.volume_snapshots.delete(snapshot_id, \*, project_id, region_id) -> TaskIDList
-- client.cloud.volume_snapshots.get(snapshot_id, \*, project_id, region_id) -> Snapshot
-
-# Waap
-
-Types:
-
-```python
-from gcore.types.waap import WaapGetAccountOverviewResponse
-```
-
-Methods:
-
-- client.waap.get_account_overview() -> WaapGetAccountOverviewResponse
-
-## Statistics
-
-Types:
-
-```python
-from gcore.types.waap import WaapStatisticItem, WaapStatisticsSeries
-```
-
-Methods:
-
-- client.waap.statistics.get_usage_series(\*\*params) -> WaapStatisticsSeries
-
-## Domains
-
-Types:
-
-```python
-from gcore.types.waap import (
- WaapDetailedDomain,
- WaapDomainAPISettings,
- WaapDomainDDOSSettings,
- WaapDomainSettingsModel,
- WaapPolicyMode,
- WaapRuleSet,
- WaapSummaryDomain,
- DomainListRuleSetsResponse,
-)
-```
-
-Methods:
-
-- client.waap.domains.update(domain_id, \*\*params) -> None
-- client.waap.domains.list(\*\*params) -> SyncOffsetPage[WaapSummaryDomain]
-- client.waap.domains.delete(domain_id) -> None
-- client.waap.domains.get(domain_id) -> WaapDetailedDomain
-- client.waap.domains.list_rule_sets(domain_id) -> DomainListRuleSetsResponse
-- client.waap.domains.toggle_policy(policy_id, \*, domain_id) -> WaapPolicyMode
-
-### Settings
-
-Methods:
-
-- client.waap.domains.settings.update(domain_id, \*\*params) -> None
-- client.waap.domains.settings.get(domain_id) -> WaapDomainSettingsModel
-
-### APIPaths
-
-Types:
-
-```python
-from gcore.types.waap.domains import WaapAPIPath
-```
-
-Methods:
-
-- client.waap.domains.api_paths.create(domain_id, \*\*params) -> WaapAPIPath
-- client.waap.domains.api_paths.update(path_id, \*, domain_id, \*\*params) -> None
-- client.waap.domains.api_paths.list(domain_id, \*\*params) -> SyncOffsetPage[WaapAPIPath]
-- client.waap.domains.api_paths.delete(path_id, \*, domain_id) -> None
-- client.waap.domains.api_paths.get(path_id, \*, domain_id) -> WaapAPIPath
-
-### APIPathGroups
-
-Types:
-
-```python
-from gcore.types.waap.domains import APIPathGroupList
-```
-
-Methods:
-
-- client.waap.domains.api_path_groups.list(domain_id) -> APIPathGroupList
-
-### APIDiscovery
-
-Types:
-
-```python
-from gcore.types.waap.domains import WaapAPIDiscoverySettings, WaapAPIScanResult, WaapTaskID
-```
-
-Methods:
-
-- client.waap.domains.api_discovery.get_scan_result(scan_id, \*, domain_id) -> WaapAPIScanResult
-- client.waap.domains.api_discovery.get_settings(domain_id) -> WaapAPIDiscoverySettings
-- client.waap.domains.api_discovery.list_scan_results(domain_id, \*\*params) -> SyncOffsetPage[WaapAPIScanResult]
-- client.waap.domains.api_discovery.scan_openapi(domain_id) -> WaapTaskID
-- client.waap.domains.api_discovery.update_settings(domain_id, \*\*params) -> WaapAPIDiscoverySettings
-- client.waap.domains.api_discovery.upload_openapi(domain_id, \*\*params) -> WaapTaskID
-
-### Insights
-
-Types:
-
-```python
-from gcore.types.waap.domains import WaapInsight
-```
-
-Methods:
-
-- client.waap.domains.insights.list(domain_id, \*\*params) -> SyncOffsetPage[WaapInsight]
-- client.waap.domains.insights.get(insight_id, \*, domain_id) -> WaapInsight
-- client.waap.domains.insights.replace(insight_id, \*, domain_id, \*\*params) -> WaapInsight
-
-### InsightSilences
-
-Types:
-
-```python
-from gcore.types.waap.domains import WaapInsightSilence
-```
-
-Methods:
-
-- client.waap.domains.insight_silences.create(domain_id, \*\*params) -> WaapInsightSilence
-- client.waap.domains.insight_silences.update(silence_id, \*, domain_id, \*\*params) -> WaapInsightSilence
-- client.waap.domains.insight_silences.list(domain_id, \*\*params) -> SyncOffsetPage[WaapInsightSilence]
-- client.waap.domains.insight_silences.delete(silence_id, \*, domain_id) -> None
-- client.waap.domains.insight_silences.get(silence_id, \*, domain_id) -> WaapInsightSilence
-
-### Statistics
-
-Types:
-
-```python
-from gcore.types.waap.domains import (
- WaapBlockedStatistics,
- WaapCountStatistics,
- WaapDDOSAttack,
- WaapDDOSInfo,
- WaapEventStatistics,
- WaapRequestDetails,
- WaapRequestSummary,
- WaapTrafficMetrics,
- StatisticGetTrafficSeriesResponse,
-)
-```
-
-Methods:
-
-- client.waap.domains.statistics.get_ddos_attacks(domain_id, \*\*params) -> SyncOffsetPage[WaapDDOSAttack]
-- client.waap.domains.statistics.get_ddos_info(domain_id, \*\*params) -> SyncOffsetPage[WaapDDOSInfo]
-- client.waap.domains.statistics.get_events_aggregated(domain_id, \*\*params) -> WaapEventStatistics
-- client.waap.domains.statistics.get_request_details(request_id, \*, domain_id) -> WaapRequestDetails
-- client.waap.domains.statistics.get_requests_series(domain_id, \*\*params) -> SyncOffsetPage[WaapRequestSummary]
-- client.waap.domains.statistics.get_traffic_series(domain_id, \*\*params) -> StatisticGetTrafficSeriesResponse
-
-### CustomRules
-
-Types:
-
-```python
-from gcore.types.waap.domains import WaapCustomRule
-```
-
-Methods:
-
-- client.waap.domains.custom_rules.create(domain_id, \*\*params) -> WaapCustomRule
-- client.waap.domains.custom_rules.update(rule_id, \*, domain_id, \*\*params) -> None
-- client.waap.domains.custom_rules.list(domain_id, \*\*params) -> SyncOffsetPage[WaapCustomRule]
-- client.waap.domains.custom_rules.delete(rule_id, \*, domain_id) -> None
-- client.waap.domains.custom_rules.delete_multiple(domain_id, \*\*params) -> None
-- client.waap.domains.custom_rules.get(rule_id, \*, domain_id) -> WaapCustomRule
-- client.waap.domains.custom_rules.toggle(action, \*, domain_id, rule_id) -> None
-
-### FirewallRules
-
-Types:
-
-```python
-from gcore.types.waap.domains import WaapFirewallRule
-```
-
-Methods:
-
-- client.waap.domains.firewall_rules.create(domain_id, \*\*params) -> WaapFirewallRule
-- client.waap.domains.firewall_rules.update(rule_id, \*, domain_id, \*\*params) -> None
-- client.waap.domains.firewall_rules.list(domain_id, \*\*params) -> SyncOffsetPage[WaapFirewallRule]
-- client.waap.domains.firewall_rules.delete(rule_id, \*, domain_id) -> None
-- client.waap.domains.firewall_rules.delete_multiple(domain_id, \*\*params) -> None
-- client.waap.domains.firewall_rules.get(rule_id, \*, domain_id) -> WaapFirewallRule
-- client.waap.domains.firewall_rules.toggle(action, \*, domain_id, rule_id) -> None
-
-### AdvancedRules
-
-Types:
-
-```python
-from gcore.types.waap.domains import WaapAdvancedRule
-```
-
-Methods:
-
-- client.waap.domains.advanced_rules.create(domain_id, \*\*params) -> WaapAdvancedRule
-- client.waap.domains.advanced_rules.update(rule_id, \*, domain_id, \*\*params) -> None
-- client.waap.domains.advanced_rules.list(domain_id, \*\*params) -> SyncOffsetPage[WaapAdvancedRule]
-- client.waap.domains.advanced_rules.delete(rule_id, \*, domain_id) -> None
-- client.waap.domains.advanced_rules.get(rule_id, \*, domain_id) -> WaapAdvancedRule
-- client.waap.domains.advanced_rules.toggle(action, \*, domain_id, rule_id) -> None
-
-## CustomPageSets
-
-Types:
-
-```python
-from gcore.types.waap import WaapCustomPagePreview, WaapCustomPageSet
-```
-
-Methods:
-
-- client.waap.custom_page_sets.create(\*\*params) -> WaapCustomPageSet
-- client.waap.custom_page_sets.update(set_id, \*\*params) -> None
-- client.waap.custom_page_sets.list(\*\*params) -> SyncOffsetPage[WaapCustomPageSet]
-- client.waap.custom_page_sets.delete(set_id) -> None
-- client.waap.custom_page_sets.get(set_id) -> WaapCustomPageSet
-- client.waap.custom_page_sets.preview(\*\*params) -> WaapCustomPagePreview
-
-## AdvancedRules
-
-Types:
-
-```python
-from gcore.types.waap import WaapAdvancedRuleDescriptor, WaapAdvancedRuleDescriptorList
-```
-
-Methods:
-
-- client.waap.advanced_rules.list() -> WaapAdvancedRuleDescriptorList
-
-## Tags
-
-Types:
-
-```python
-from gcore.types.waap import WaapTag
-```
-
-Methods:
-
-- client.waap.tags.list(\*\*params) -> SyncOffsetPage[WaapTag]
-
-## Organizations
-
-Types:
-
-```python
-from gcore.types.waap import WaapOrganization
-```
-
-Methods:
-
-- client.waap.organizations.list(\*\*params) -> SyncOffsetPage[WaapOrganization]
-
-## Insights
-
-Types:
-
-```python
-from gcore.types.waap import WaapInsightType
-```
-
-Methods:
-
-- client.waap.insights.list_types(\*\*params) -> SyncOffsetPage[WaapInsightType]
-
-## IPInfo
-
-Types:
-
-```python
-from gcore.types.waap import (
- WaapIPCountryAttack,
- WaapIPDDOSInfoModel,
- WaapIPInfo,
- WaapRuleBlockedRequests,
- WaapTimeSeriesAttack,
- WaapTopSession,
- WaapTopURL,
- WaapTopUserAgent,
- IPInfoGetAttackTimeSeriesResponse,
- IPInfoGetBlockedRequestsResponse,
- IPInfoGetTopURLsResponse,
- IPInfoGetTopUserAgentsResponse,
- IPInfoGetTopUserSessionsResponse,
- IPInfoListAttackedCountriesResponse,
-)
-```
-
-Methods:
-
-- client.waap.ip_info.get_attack_time_series(\*\*params) -> IPInfoGetAttackTimeSeriesResponse
-- client.waap.ip_info.get_blocked_requests(\*\*params) -> IPInfoGetBlockedRequestsResponse
-- client.waap.ip_info.get_ddos_attack_series(\*\*params) -> WaapIPDDOSInfoModel
-- client.waap.ip_info.get_ip_info(\*\*params) -> WaapIPInfo
-- client.waap.ip_info.get_top_urls(\*\*params) -> IPInfoGetTopURLsResponse
-- client.waap.ip_info.get_top_user_agents(\*\*params) -> IPInfoGetTopUserAgentsResponse
-- client.waap.ip_info.get_top_user_sessions(\*\*params) -> IPInfoGetTopUserSessionsResponse
-- client.waap.ip_info.list_attacked_countries(\*\*params) -> IPInfoListAttackedCountriesResponse
-
-### Metrics
-
-Types:
-
-```python
-from gcore.types.waap.ip_info import WaapIPInfoCounts
-```
-
-Methods:
-
-- client.waap.ip_info.metrics.list(\*\*params) -> WaapIPInfoCounts
-
-# Iam
-
-Types:
-
-```python
-from gcore.types.iam import AccountOverview
-```
-
-Methods:
-
-- client.iam.get_account_overview() -> AccountOverview
-
-## APITokens
-
-Types:
-
-```python
-from gcore.types.iam import APIToken, APITokenCreated, APITokenList
-```
-
-Methods:
-
-- client.iam.api_tokens.create(client_id, \*\*params) -> APITokenCreated
-- client.iam.api_tokens.list(client_id, \*\*params) -> APITokenList
-- client.iam.api_tokens.delete(token_id, \*, client_id) -> None
-- client.iam.api_tokens.get(token_id, \*, client_id) -> APIToken
-
-## Users
-
-Types:
-
-```python
-from gcore.types.iam import User, UserDetailed, UserInvite, UserUpdated
-```
-
-Methods:
-
-- client.iam.users.update(user_id, \*\*params) -> UserUpdated
-- client.iam.users.list(\*\*params) -> SyncOffsetPage[User]
-- client.iam.users.delete(user_id, \*, client_id) -> None
-- client.iam.users.get(user_id) -> UserDetailed
-- client.iam.users.invite(\*\*params) -> UserInvite
-
-# Fastedge
-
-Types:
-
-```python
-from gcore.types.fastedge import Client
-```
-
-Methods:
-
-- client.fastedge.get_account_overview() -> Client
-
-## Templates
-
-Types:
-
-```python
-from gcore.types.fastedge import Template, TemplateParameter, TemplateShort
-```
-
-Methods:
-
-- client.fastedge.templates.create(\*\*params) -> TemplateShort
-- client.fastedge.templates.list(\*\*params) -> SyncOffsetPageFastedgeTemplates[TemplateShort]
-- client.fastedge.templates.delete(id, \*\*params) -> None
-- client.fastedge.templates.get(id) -> Template
-- client.fastedge.templates.replace(id, \*\*params) -> TemplateShort
-
-## Secrets
-
-Types:
-
-```python
-from gcore.types.fastedge import Secret, SecretShort, SecretCreateResponse, SecretListResponse
-```
-
-Methods:
-
-- client.fastedge.secrets.create(\*\*params) -> SecretCreateResponse
-- client.fastedge.secrets.update(id, \*\*params) -> Secret
-- client.fastedge.secrets.list(\*\*params) -> SecretListResponse
-- client.fastedge.secrets.delete(id, \*\*params) -> None
-- client.fastedge.secrets.get(id) -> Secret
-- client.fastedge.secrets.replace(id, \*\*params) -> Secret
-
-## Binaries
-
-Types:
-
-```python
-from gcore.types.fastedge import Binary, BinaryShort, BinaryListResponse
-```
-
-Methods:
-
-- client.fastedge.binaries.create(body, \*\*params) -> BinaryShort
-- client.fastedge.binaries.list() -> BinaryListResponse
-- client.fastedge.binaries.delete(id) -> None
-- client.fastedge.binaries.get(id) -> Binary
-
-## Statistics
-
-Types:
-
-```python
-from gcore.types.fastedge import (
- CallStatus,
- DurationStats,
- StatisticGetCallSeriesResponse,
- StatisticGetDurationSeriesResponse,
-)
-```
-
-Methods:
-
-- client.fastedge.statistics.get_call_series(\*\*params) -> StatisticGetCallSeriesResponse
-- client.fastedge.statistics.get_duration_series(\*\*params) -> StatisticGetDurationSeriesResponse
-
-## Apps
-
-Types:
-
-```python
-from gcore.types.fastedge import App, AppShort
-```
-
-Methods:
-
-- client.fastedge.apps.create(\*\*params) -> AppShort
-- client.fastedge.apps.update(id, \*\*params) -> AppShort
-- client.fastedge.apps.list(\*\*params) -> SyncOffsetPageFastedgeApps[AppShort]
-- client.fastedge.apps.delete(id) -> None
-- client.fastedge.apps.get(id) -> App
-- client.fastedge.apps.replace(id, \*\*params) -> AppShort
-
-### Logs
-
-Types:
-
-```python
-from gcore.types.fastedge.apps import Log
-```
-
-Methods:
-
-- client.fastedge.apps.logs.list(id, \*\*params) -> SyncOffsetPageFastedgeAppLogs[Log]
-
-## KvStores
-
-Types:
-
-```python
-from gcore.types.fastedge import KvStore, KvStoreShort, KvStoreCreateResponse, KvStoreListResponse
-```
-
-Methods:
-
-- client.fastedge.kv_stores.create(\*\*params) -> KvStoreCreateResponse
-- client.fastedge.kv_stores.list(\*\*params) -> KvStoreListResponse
-- client.fastedge.kv_stores.delete(id) -> None
-- client.fastedge.kv_stores.get(id) -> KvStore
-- client.fastedge.kv_stores.replace(id, \*\*params) -> KvStore
-
-# Streaming
-
-Types:
-
-```python
-from gcore.types.streaming import CreateVideo, Video
-```
-
-## AITasks
-
-Types:
-
-```python
-from gcore.types.streaming import (
- AIContentmoderationHardnudity,
- AIContentmoderationNsfw,
- AIContentmoderationSoftnudity,
- AIContentmoderationSport,
- AITask,
- AITaskCreateResponse,
- AITaskCancelResponse,
- AITaskGetResponse,
- AITaskGetAISettingsResponse,
-)
-```
-
-Methods:
-
-- client.streaming.ai_tasks.create(\*\*params) -> AITaskCreateResponse
-- client.streaming.ai_tasks.list(\*\*params) -> SyncPageStreamingAI[AITask]
-- client.streaming.ai_tasks.cancel(task_id) -> AITaskCancelResponse
-- client.streaming.ai_tasks.get(task_id) -> AITaskGetResponse
-- client.streaming.ai_tasks.get_ai_settings(\*\*params) -> AITaskGetAISettingsResponse
-
-## Broadcasts
-
-Types:
-
-```python
-from gcore.types.streaming import Broadcast, BroadcastSpectatorsCount
-```
-
-Methods:
-
-- client.streaming.broadcasts.create(\*\*params) -> None
-- client.streaming.broadcasts.update(broadcast_id, \*\*params) -> Broadcast
-- client.streaming.broadcasts.list(\*\*params) -> SyncPageStreaming[Broadcast]
-- client.streaming.broadcasts.delete(broadcast_id) -> None
-- client.streaming.broadcasts.get(broadcast_id) -> Broadcast
-- client.streaming.broadcasts.get_spectators_count(broadcast_id) -> BroadcastSpectatorsCount
-
-## Directories
-
-Types:
-
-```python
-from gcore.types.streaming import (
- DirectoriesTree,
- DirectoryBase,
- DirectoryItem,
- DirectoryVideo,
- DirectoryGetResponse,
-)
-```
-
-Methods:
-
-- client.streaming.directories.create(\*\*params) -> DirectoryBase
-- client.streaming.directories.update(directory_id, \*\*params) -> DirectoryBase
-- client.streaming.directories.delete(directory_id) -> None
-- client.streaming.directories.get(directory_id) -> DirectoryGetResponse
-- client.streaming.directories.get_tree() -> DirectoriesTree
-
-## Players
-
-Types:
-
-```python
-from gcore.types.streaming import Player
-```
-
-Methods:
-
-- client.streaming.players.create(\*\*params) -> None
-- client.streaming.players.update(player_id, \*\*params) -> Player
-- client.streaming.players.list(\*\*params) -> SyncPageStreaming[Player]
-- client.streaming.players.delete(player_id) -> None
-- client.streaming.players.get(player_id) -> Player
-- client.streaming.players.preview(player_id) -> None
-
-## QualitySets
-
-Types:
-
-```python
-from gcore.types.streaming import QualitySets
-```
-
-Methods:
-
-- client.streaming.quality_sets.list() -> QualitySets
-- client.streaming.quality_sets.set_default(\*\*params) -> QualitySets
-
-## Playlists
-
-Types:
-
-```python
-from gcore.types.streaming import (
- Playlist,
- PlaylistCreated,
- PlaylistVideo,
- PlaylistListVideosResponse,
-)
-```
-
-Methods:
-
-- client.streaming.playlists.create(\*\*params) -> PlaylistCreated
-- client.streaming.playlists.update(playlist_id, \*\*params) -> Playlist
-- client.streaming.playlists.list(\*\*params) -> SyncPageStreaming[Playlist]
-- client.streaming.playlists.delete(playlist_id) -> None
-- client.streaming.playlists.get(playlist_id) -> Playlist
-- client.streaming.playlists.list_videos(playlist_id) -> PlaylistListVideosResponse
-
-## Videos
-
-Types:
-
-```python
-from gcore.types.streaming import (
- DirectUploadParameters,
- Subtitle,
- SubtitleBase,
- SubtitleBody,
- SubtitleUpdated,
- VideoCreateResponse,
- VideoCreateMultipleResponse,
-)
-```
-
-Methods:
-
-- client.streaming.videos.create(\*\*params) -> VideoCreateResponse
-- client.streaming.videos.update(video_id, \*\*params) -> Video
-- client.streaming.videos.list(\*\*params) -> SyncPageStreaming[Video]
-- client.streaming.videos.delete(video_id) -> None
-- client.streaming.videos.create_multiple(\*\*params) -> VideoCreateMultipleResponse
-- client.streaming.videos.get(video_id) -> Video
-- client.streaming.videos.get_parameters_for_direct_upload(video_id) -> DirectUploadParameters
-- client.streaming.videos.list_names(\*\*params) -> None
-
-### Subtitles
-
-Types:
-
-```python
-from gcore.types.streaming.videos import SubtitleListResponse
-```
-
-Methods:
-
-- client.streaming.videos.subtitles.create(video_id, \*\*params) -> Subtitle
-- client.streaming.videos.subtitles.update(id, \*, video_id, \*\*params) -> SubtitleBase
-- client.streaming.videos.subtitles.list(video_id) -> SubtitleListResponse
-- client.streaming.videos.subtitles.delete(id, \*, video_id) -> None
-- client.streaming.videos.subtitles.get(id, \*, video_id) -> Subtitle
-
-## Streams
-
-Types:
-
-```python
-from gcore.types.streaming import (
- Clip,
- Stream,
- StreamListClipsResponse,
- StreamStartRecordingResponse,
-)
-```
-
-Methods:
-
-- client.streaming.streams.create(\*\*params) -> Stream
-- client.streaming.streams.update(stream_id, \*\*params) -> Stream
-- client.streaming.streams.list(\*\*params) -> SyncPageStreaming[Stream]
-- client.streaming.streams.delete(stream_id) -> None
-- client.streaming.streams.clear_dvr(stream_id) -> None
-- client.streaming.streams.create_clip(stream_id, \*\*params) -> Clip
-- client.streaming.streams.get(stream_id) -> Stream
-- client.streaming.streams.list_clips(stream_id) -> StreamListClipsResponse
-- client.streaming.streams.start_recording(stream_id) -> StreamStartRecordingResponse
-- client.streaming.streams.stop_recording(stream_id) -> Video
-
-### Overlays
-
-Types:
-
-```python
-from gcore.types.streaming.streams import (
- Overlay,
- OverlayCreateResponse,
- OverlayListResponse,
- OverlayUpdateMultipleResponse,
-)
-```
-
-Methods:
-
-- client.streaming.streams.overlays.create(stream_id, \*\*params) -> OverlayCreateResponse
-- client.streaming.streams.overlays.update(overlay_id, \*, stream_id, \*\*params) -> Overlay
-- client.streaming.streams.overlays.list(stream_id) -> OverlayListResponse
-- client.streaming.streams.overlays.delete(overlay_id, \*, stream_id) -> None
-- client.streaming.streams.overlays.get(overlay_id, \*, stream_id) -> Overlay
-- client.streaming.streams.overlays.update_multiple(stream_id, \*\*params) -> OverlayUpdateMultipleResponse
-
-## Restreams
-
-Types:
-
-```python
-from gcore.types.streaming import Restream
-```
-
-Methods:
-
-- client.streaming.restreams.create(\*\*params) -> None
-- client.streaming.restreams.update(restream_id, \*\*params) -> Restream
-- client.streaming.restreams.list(\*\*params) -> SyncPageStreaming[Restream]
-- client.streaming.restreams.delete(restream_id) -> None
-- client.streaming.restreams.get(restream_id) -> Restream
-
-## Statistics
-
-Types:
-
-```python
-from gcore.types.streaming import (
- Ffprobes,
- MaxStreamSeries,
- PopularVideos,
- StorageSeries,
- StreamSeries,
- UniqueViewers,
- UniqueViewersCDN,
- Views,
- ViewsByBrowser,
- ViewsByCountry,
- ViewsByHostname,
- ViewsByOperatingSystem,
- ViewsByReferer,
- ViewsByRegion,
- ViewsHeatmap,
- VodStatisticsSeries,
- VodTotalStreamDurationSeries,
- StatisticGetLiveUniqueViewersResponse,
- StatisticGetVodWatchTimeTotalCDNResponse,
-)
-```
-
-Methods:
-
-- client.streaming.statistics.get_ffprobes(\*\*params) -> Ffprobes
-- client.streaming.statistics.get_live_unique_viewers(\*\*params) -> StatisticGetLiveUniqueViewersResponse
-- client.streaming.statistics.get_live_watch_time_cdn(\*\*params) -> StreamSeries
-- client.streaming.statistics.get_live_watch_time_total_cdn(\*\*params) -> VodTotalStreamDurationSeries
-- client.streaming.statistics.get_max_streams_series(\*\*params) -> MaxStreamSeries
-- client.streaming.statistics.get_popular_videos(\*\*params) -> PopularVideos
-- client.streaming.statistics.get_storage_series(\*\*params) -> StorageSeries
-- client.streaming.statistics.get_stream_series(\*\*params) -> StreamSeries
-- client.streaming.statistics.get_unique_viewers(\*\*params) -> UniqueViewers
-- client.streaming.statistics.get_unique_viewers_cdn(\*\*params) -> UniqueViewersCDN
-- client.streaming.statistics.get_views(\*\*params) -> Views
-- client.streaming.statistics.get_views_by_browsers(\*\*params) -> ViewsByBrowser
-- client.streaming.statistics.get_views_by_country(\*\*params) -> ViewsByCountry
-- client.streaming.statistics.get_views_by_hostname(\*\*params) -> ViewsByHostname
-- client.streaming.statistics.get_views_by_operating_system(\*\*params) -> ViewsByOperatingSystem
-- client.streaming.statistics.get_views_by_referer(\*\*params) -> ViewsByReferer
-- client.streaming.statistics.get_views_by_region(\*\*params) -> ViewsByRegion
-- client.streaming.statistics.get_views_heatmap(\*\*params) -> ViewsHeatmap
-- client.streaming.statistics.get_vod_storage_volume(\*\*params) -> VodStatisticsSeries
-- client.streaming.statistics.get_vod_transcoding_duration(\*\*params) -> VodStatisticsSeries
-- client.streaming.statistics.get_vod_unique_viewers_cdn(\*\*params) -> VodStatisticsSeries
-- client.streaming.statistics.get_vod_watch_time_cdn(\*\*params) -> VodStatisticsSeries
-- client.streaming.statistics.get_vod_watch_time_total_cdn(\*\*params) -> StatisticGetVodWatchTimeTotalCDNResponse
-
-# Security
-
-## Events
-
-Types:
-
-```python
-from gcore.types.security import ClientView
-```
-
-Methods:
-
-- client.security.events.list(\*\*params) -> SyncOffsetPage[ClientView]
-
-## BgpAnnounces
-
-Types:
-
-```python
-from gcore.types.security import ClientAnnounce, BgpAnnounceListResponse
-```
-
-Methods:
-
-- client.security.bgp_announces.list(\*\*params) -> BgpAnnounceListResponse
-- client.security.bgp_announces.toggle(\*\*params) -> object
-
-## ProfileTemplates
-
-Types:
-
-```python
-from gcore.types.security import ClientProfileTemplate, ProfileTemplateListResponse
-```
-
-Methods:
-
-- client.security.profile_templates.list() -> ProfileTemplateListResponse
-
-## Profiles
-
-Types:
-
-```python
-from gcore.types.security import ClientProfile, ProfileListResponse
-```
-
-Methods:
-
-- client.security.profiles.create(\*\*params) -> ClientProfile
-- client.security.profiles.list(\*\*params) -> ProfileListResponse
-- client.security.profiles.delete(id) -> None
-- client.security.profiles.get(id) -> ClientProfile
-- client.security.profiles.recreate(id, \*\*params) -> ClientProfile
-- client.security.profiles.replace(id, \*\*params) -> ClientProfile
-
-# DNS
-
-Types:
-
-```python
-from gcore.types.dns import DNSGetAccountOverviewResponse, DNSLookupResponse
-```
-
-Methods:
-
-- client.dns.get_account_overview() -> DNSGetAccountOverviewResponse
-- client.dns.lookup(\*\*params) -> DNSLookupResponse
-
-## Locations
-
-Types:
-
-```python
-from gcore.types.dns import (
- DNSLocationTranslations,
- LocationListResponse,
- LocationListContinentsResponse,
- LocationListCountriesResponse,
- LocationListRegionsResponse,
-)
-```
-
-Methods:
-
-- client.dns.locations.list() -> LocationListResponse
-- client.dns.locations.list_continents() -> LocationListContinentsResponse
-- client.dns.locations.list_countries() -> LocationListCountriesResponse
-- client.dns.locations.list_regions() -> LocationListRegionsResponse
-
-## Metrics
-
-Types:
-
-```python
-from gcore.types.dns import MetricListResponse
-```
-
-Methods:
-
-- client.dns.metrics.list(\*\*params) -> str
-
-## Pickers
-
-Types:
-
-```python
-from gcore.types.dns import DNSLabelName, PickerListResponse
-```
-
-Methods:
-
-- client.dns.pickers.list() -> PickerListResponse
-
-### Presets
-
-Types:
-
-```python
-from gcore.types.dns.pickers import PresetListResponse
-```
-
-Methods:
-
-- client.dns.pickers.presets.list() -> PresetListResponse
-
-## Zones
-
-Types:
-
-```python
-from gcore.types.dns import (
- DNSNameServer,
- ZoneCreateResponse,
- ZoneListResponse,
- ZoneCheckDelegationStatusResponse,
- ZoneExportResponse,
- ZoneGetResponse,
- ZoneGetStatisticsResponse,
- ZoneImportResponse,
-)
-```
-
-Methods:
-
-- client.dns.zones.create(\*\*params) -> ZoneCreateResponse
-- client.dns.zones.list(\*\*params) -> ZoneListResponse
-- client.dns.zones.delete(name) -> object
-- client.dns.zones.check_delegation_status(name) -> ZoneCheckDelegationStatusResponse
-- client.dns.zones.disable(name) -> object
-- client.dns.zones.enable(name) -> object
-- client.dns.zones.export(zone_name) -> ZoneExportResponse
-- client.dns.zones.get(name) -> ZoneGetResponse
-- client.dns.zones.get_statistics(name, \*\*params) -> ZoneGetStatisticsResponse
-- client.dns.zones.import\_(zone_name, \*\*params) -> ZoneImportResponse
-- client.dns.zones.replace(path_name, \*\*params) -> object
-
-### Dnssec
-
-Types:
-
-```python
-from gcore.types.dns.zones import DnssecUpdateResponse, DnssecGetResponse
-```
-
-Methods:
-
-- client.dns.zones.dnssec.update(name, \*\*params) -> DnssecUpdateResponse
-- client.dns.zones.dnssec.get(name) -> DnssecGetResponse
-
-### Rrsets
-
-Types:
-
-```python
-from gcore.types.dns.zones import (
- DNSFailoverLog,
- DNSOutputRrset,
- RrsetListResponse,
- RrsetGetFailoverLogsResponse,
-)
-```
-
-Methods:
-
-- client.dns.zones.rrsets.create(rrset_type, \*, zone_name, rrset_name, \*\*params) -> DNSOutputRrset
-- client.dns.zones.rrsets.list(zone_name, \*\*params) -> RrsetListResponse
-- client.dns.zones.rrsets.delete(rrset_type, \*, zone_name, rrset_name) -> object
-- client.dns.zones.rrsets.get(rrset_type, \*, zone_name, rrset_name) -> DNSOutputRrset
-- client.dns.zones.rrsets.get_failover_logs(rrset_type, \*, zone_name, rrset_name, \*\*params) -> RrsetGetFailoverLogsResponse
-- client.dns.zones.rrsets.replace(rrset_type, \*, zone_name, rrset_name, \*\*params) -> DNSOutputRrset
-
-## NetworkMappings
-
-Types:
-
-```python
-from gcore.types.dns import (
- DNSMappingEntry,
- DNSNetworkMapping,
- NetworkMappingCreateResponse,
- NetworkMappingListResponse,
- NetworkMappingImportResponse,
-)
-```
-
-Methods:
-
-- client.dns.network_mappings.create(\*\*params) -> NetworkMappingCreateResponse
-- client.dns.network_mappings.list(\*\*params) -> NetworkMappingListResponse
-- client.dns.network_mappings.delete(id) -> object
-- client.dns.network_mappings.get(id) -> DNSNetworkMapping
-- client.dns.network_mappings.get_by_name(name) -> DNSNetworkMapping
-- client.dns.network*mappings.import*() -> NetworkMappingImportResponse
-- client.dns.network_mappings.replace(id, \*\*params) -> object
-
-# Storage
-
-Types:
-
-```python
-from gcore.types.storage import Storage
-```
-
-Methods:
-
-- client.storage.create(\*\*params) -> Storage
-- client.storage.update(storage_id, \*\*params) -> Storage
-- client.storage.list(\*\*params) -> SyncOffsetPage[Storage]
-- client.storage.delete(storage_id) -> None
-- client.storage.get(storage_id) -> Storage
-- client.storage.link_ssh_key(key_id, \*, storage_id) -> None
-- client.storage.restore(storage_id, \*\*params) -> None
-- client.storage.unlink_ssh_key(key_id, \*, storage_id) -> None
-
-## Locations
-
-Types:
-
-```python
-from gcore.types.storage import Location
-```
-
-Methods:
-
-- client.storage.locations.list(\*\*params) -> SyncOffsetPage[Location]
-
-## Statistics
-
-Types:
-
-```python
-from gcore.types.storage import UsageSeries, UsageTotal, StatisticGetUsageSeriesResponse
-```
-
-Methods:
-
-- client.storage.statistics.get_usage_aggregated(\*\*params) -> UsageTotal
-- client.storage.statistics.get_usage_series(\*\*params) -> StatisticGetUsageSeriesResponse
-
-## Credentials
-
-Methods:
-
-- client.storage.credentials.recreate(storage_id, \*\*params) -> Storage
-
-## Buckets
-
-Types:
-
-```python
-from gcore.types.storage import Bucket
-```
-
-Methods:
-
-- client.storage.buckets.create(bucket_name, \*, storage_id) -> None
-- client.storage.buckets.list(storage_id, \*\*params) -> SyncOffsetPage[Bucket]
-- client.storage.buckets.delete(bucket_name, \*, storage_id) -> None
-
-### Cors
-
-Types:
-
-```python
-from gcore.types.storage.buckets import BucketCors
-```
-
-Methods:
-
-- client.storage.buckets.cors.create(bucket_name, \*, storage_id, \*\*params) -> None
-- client.storage.buckets.cors.get(bucket_name, \*, storage_id) -> BucketCors
-
-### Lifecycle
-
-Methods:
-
-- client.storage.buckets.lifecycle.create(bucket_name, \*, storage_id, \*\*params) -> None
-- client.storage.buckets.lifecycle.delete(bucket_name, \*, storage_id) -> None
-
-### Policy
-
-Types:
-
-```python
-from gcore.types.storage.buckets import BucketPolicy, PolicyGetResponse
-```
-
-Methods:
-
-- client.storage.buckets.policy.create(bucket_name, \*, storage_id) -> None
-- client.storage.buckets.policy.delete(bucket_name, \*, storage_id) -> None
-- client.storage.buckets.policy.get(bucket_name, \*, storage_id) -> PolicyGetResponse
-
-# CDN
-
-Types:
-
-```python
-from gcore.types.cdn import (
- AlibabaRegions,
- AwsRegions,
- CDNAccount,
- CDNAccountLimits,
- CDNAvailableFeatures,
- PurgeStatus,
- CDNListPurgeStatusesResponse,
-)
-```
-
-Methods:
-
-- client.cdn.get_account_limits() -> CDNAccountLimits
-- client.cdn.get_account_overview() -> CDNAccount
-- client.cdn.get_available_features() -> CDNAvailableFeatures
-- client.cdn.list_alibaba_regions() -> AlibabaRegions
-- client.cdn.list_aws_regions() -> AwsRegions
-- client.cdn.list_purge_statuses(\*\*params) -> CDNListPurgeStatusesResponse
-- client.cdn.update_account(\*\*params) -> CDNAccount
-
-## CDNResources
-
-Types:
-
-```python
-from gcore.types.cdn import CDNResource, CDNResourceList
-```
-
-Methods:
-
-- client.cdn.cdn_resources.create(\*\*params) -> CDNResource
-- client.cdn.cdn_resources.update(resource_id, \*\*params) -> CDNResource
-- client.cdn.cdn_resources.list(\*\*params) -> CDNResourceList
-- client.cdn.cdn_resources.delete(resource_id) -> None
-- client.cdn.cdn_resources.get(resource_id) -> CDNResource
-- client.cdn.cdn_resources.prefetch(resource_id, \*\*params) -> None
-- client.cdn.cdn_resources.prevalidate_ssl_le_certificate(resource_id) -> None
-- client.cdn.cdn_resources.purge(resource_id, \*\*params) -> None
-- client.cdn.cdn_resources.replace(resource_id, \*\*params) -> CDNResource
-
-### Shield
-
-Types:
-
-```python
-from gcore.types.cdn.cdn_resources import OriginShielding, OriginShieldingReplaced
-```
-
-Methods:
-
-- client.cdn.cdn_resources.shield.get(resource_id) -> OriginShielding
-- client.cdn.cdn_resources.shield.replace(resource_id, \*\*params) -> object
-
-### Rules
-
-Types:
-
-```python
-from gcore.types.cdn.cdn_resources import CDNResourceRule, RuleListResponse
-```
-
-Methods:
-
-- client.cdn.cdn_resources.rules.create(resource_id, \*\*params) -> CDNResourceRule
-- client.cdn.cdn_resources.rules.update(rule_id, \*, resource_id, \*\*params) -> CDNResourceRule
-- client.cdn.cdn_resources.rules.list(resource_id) -> RuleListResponse
-- client.cdn.cdn_resources.rules.delete(rule_id, \*, resource_id) -> None
-- client.cdn.cdn_resources.rules.get(rule_id, \*, resource_id) -> CDNResourceRule
-- client.cdn.cdn_resources.rules.replace(rule_id, \*, resource_id, \*\*params) -> CDNResourceRule
-
-## Shields
-
-Types:
-
-```python
-from gcore.types.cdn import ShieldListResponse
-```
-
-Methods:
-
-- client.cdn.shields.list() -> ShieldListResponse
-
-## OriginGroups
-
-Types:
-
-```python
-from gcore.types.cdn import OriginGroups, OriginGroupsList
-```
-
-Methods:
-
-- client.cdn.origin_groups.create(\*\*params) -> OriginGroups
-- client.cdn.origin_groups.update(origin_group_id, \*\*params) -> OriginGroups
-- client.cdn.origin_groups.list(\*\*params) -> OriginGroupsList
-- client.cdn.origin_groups.delete(origin_group_id) -> None
-- client.cdn.origin_groups.get(origin_group_id) -> OriginGroups
-- client.cdn.origin_groups.replace(origin_group_id, \*\*params) -> OriginGroups
-
-## RuleTemplates
-
-Types:
-
-```python
-from gcore.types.cdn import RuleTemplate, RuleTemplateList
-```
-
-Methods:
-
-- client.cdn.rule_templates.create(\*\*params) -> RuleTemplate
-- client.cdn.rule_templates.update(rule_template_id, \*\*params) -> RuleTemplate
-- client.cdn.rule_templates.list() -> RuleTemplateList
-- client.cdn.rule_templates.delete(rule_template_id) -> None
-- client.cdn.rule_templates.get(rule_template_id) -> RuleTemplate
-- client.cdn.rule_templates.replace(rule_template_id, \*\*params) -> RuleTemplate
-
-## Certificates
-
-Types:
-
-```python
-from gcore.types.cdn import SslDetail, SslDetailList, SslRequestStatus
-```
-
-Methods:
-
-- client.cdn.certificates.create(\*\*params) -> None
-- client.cdn.certificates.list(\*\*params) -> SslDetailList
-- client.cdn.certificates.delete(ssl_id) -> None
-- client.cdn.certificates.force_retry(cert_id) -> None
-- client.cdn.certificates.get(ssl_id) -> SslDetail
-- client.cdn.certificates.get_status(cert_id, \*\*params) -> SslRequestStatus
-- client.cdn.certificates.renew(cert_id) -> None
-- client.cdn.certificates.replace(ssl_id, \*\*params) -> SslDetail
-
-## TrustedCaCertificates
-
-Types:
-
-```python
-from gcore.types.cdn import CaCertificate, CaCertificateList
-```
-
-Methods:
-
-- client.cdn.trusted_ca_certificates.create(\*\*params) -> CaCertificate
-- client.cdn.trusted_ca_certificates.list(\*\*params) -> CaCertificateList
-- client.cdn.trusted_ca_certificates.delete(id) -> None
-- client.cdn.trusted_ca_certificates.get(id) -> CaCertificate
-- client.cdn.trusted_ca_certificates.replace(id, \*\*params) -> CaCertificate
-
-## AuditLogs
-
-Types:
-
-```python
-from gcore.types.cdn import CDNAuditLogEntry
-```
-
-Methods:
-
-- client.cdn.audit_logs.list(\*\*params) -> SyncOffsetPage[CDNAuditLogEntry]
-- client.cdn.audit_logs.get(log_id) -> CDNAuditLogEntry
-
-## Logs
-
-Types:
-
-```python
-from gcore.types.cdn import CDNLogEntry
-```
-
-Methods:
-
-- client.cdn.logs.list(\*\*params) -> SyncOffsetPageCDNLogs[Data]
-- client.cdn.logs.download(\*\*params) -> BinaryAPIResponse
-
-## LogsUploader
-
-Types:
-
-```python
-from gcore.types.cdn import LogsUploaderValidation
-```
-
-### Policies
-
-Types:
-
-```python
-from gcore.types.cdn.logs_uploader import (
- LogsUploaderPolicy,
- LogsUploaderPolicyList,
- PolicyListFieldsResponse,
-)
-```
-
-Methods:
-
-- client.cdn.logs_uploader.policies.create(\*\*params) -> LogsUploaderPolicy
-- client.cdn.logs_uploader.policies.update(id, \*\*params) -> LogsUploaderPolicy
-- client.cdn.logs_uploader.policies.list(\*\*params) -> LogsUploaderPolicyList
-- client.cdn.logs_uploader.policies.delete(id) -> None
-- client.cdn.logs_uploader.policies.get(id) -> LogsUploaderPolicy
-- client.cdn.logs_uploader.policies.list_fields() -> PolicyListFieldsResponse
-- client.cdn.logs_uploader.policies.replace(id, \*\*params) -> LogsUploaderPolicy
-
-### Targets
-
-Types:
-
-```python
-from gcore.types.cdn.logs_uploader import LogsUploaderTarget, LogsUploaderTargetList
-```
-
-Methods:
-
-- client.cdn.logs_uploader.targets.create(\*\*params) -> LogsUploaderTarget
-- client.cdn.logs_uploader.targets.update(id, \*\*params) -> LogsUploaderTarget
-- client.cdn.logs_uploader.targets.list(\*\*params) -> LogsUploaderTargetList
-- client.cdn.logs_uploader.targets.delete(id) -> None
-- client.cdn.logs_uploader.targets.get(id) -> LogsUploaderTarget
-- client.cdn.logs_uploader.targets.replace(id, \*\*params) -> LogsUploaderTarget
-- client.cdn.logs_uploader.targets.validate(id) -> LogsUploaderValidation
-
-### Configs
-
-Types:
-
-```python
-from gcore.types.cdn.logs_uploader import LogsUploaderConfig, LogsUploaderConfigList
-```
-
-Methods:
-
-- client.cdn.logs_uploader.configs.create(\*\*params) -> LogsUploaderConfig
-- client.cdn.logs_uploader.configs.update(id, \*\*params) -> LogsUploaderConfig
-- client.cdn.logs_uploader.configs.list(\*\*params) -> LogsUploaderConfigList
-- client.cdn.logs_uploader.configs.delete(id) -> None
-- client.cdn.logs_uploader.configs.get(id) -> LogsUploaderConfig
-- client.cdn.logs_uploader.configs.replace(id, \*\*params) -> LogsUploaderConfig
-- client.cdn.logs_uploader.configs.validate(id) -> LogsUploaderValidation
-
-## Statistics
-
-Types:
-
-```python
-from gcore.types.cdn import (
- LogsAggregatedStats,
- ResourceAggregatedStats,
- ResourceUsageStats,
- ShieldAggregatedStats,
- UsageSeriesStats,
-)
-```
-
-Methods:
-
-- client.cdn.statistics.get_logs_usage_aggregated(\*\*params) -> LogsAggregatedStats
-- client.cdn.statistics.get_logs_usage_series(\*\*params) -> UsageSeriesStats
-- client.cdn.statistics.get_resource_usage_aggregated(\*\*params) -> ResourceAggregatedStats
-- client.cdn.statistics.get_resource_usage_series(\*\*params) -> ResourceUsageStats
-- client.cdn.statistics.get_shield_usage_aggregated(\*\*params) -> ShieldAggregatedStats
-- client.cdn.statistics.get_shield_usage_series(\*\*params) -> UsageSeriesStats
-
-## NetworkCapacity
-
-Types:
-
-```python
-from gcore.types.cdn import NetworkCapacity
-```
-
-Methods:
-
-- client.cdn.network_capacity.list() -> NetworkCapacity
-
-## Metrics
-
-Types:
-
-```python
-from gcore.types.cdn import CDNMetrics, CDNMetricsGroups, CDNMetricsValues
-```
-
-Methods:
-
-- client.cdn.metrics.list(\*\*params) -> CDNMetrics
-
-## IPRanges
-
-Types:
-
-```python
-from gcore.types.cdn import PublicIPList, PublicNetworkList
-```
-
-Methods:
-
-- client.cdn.ip_ranges.list(\*\*params) -> PublicNetworkList
-- client.cdn.ip_ranges.list_ips(\*\*params) -> PublicIPList
+# [CDN](src/gcore/resources/cdn/api.md)
diff --git a/pyproject.toml b/pyproject.toml
index 4b9b2d7c..98c0ae3c 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -71,7 +71,7 @@ format = { chain = [
# run formatting again to fix any inconsistencies when imports are stripped
"format:ruff",
]}
-"format:docs" = "python scripts/utils/ruffen-docs.py README.md api.md"
+"format:docs" = "bash -c 'python scripts/utils/ruffen-docs.py README.md $(find . -type f -name api.md)'"
"format:ruff" = "ruff format"
"lint" = { chain = [
diff --git a/src/gcore/resources/cdn/api.md b/src/gcore/resources/cdn/api.md
new file mode 100644
index 00000000..70919175
--- /dev/null
+++ b/src/gcore/resources/cdn/api.md
@@ -0,0 +1,308 @@
+# CDN
+
+Types:
+
+```python
+from gcore.types.cdn import (
+ AlibabaRegions,
+ AwsRegions,
+ CDNAccount,
+ CDNAccountLimits,
+ CDNAvailableFeatures,
+ PurgeStatus,
+ CDNListPurgeStatusesResponse,
+)
+```
+
+Methods:
+
+- client.cdn.get_account_limits() -> CDNAccountLimits
+- client.cdn.get_account_overview() -> CDNAccount
+- client.cdn.get_available_features() -> CDNAvailableFeatures
+- client.cdn.list_alibaba_regions() -> AlibabaRegions
+- client.cdn.list_aws_regions() -> AwsRegions
+- client.cdn.list_purge_statuses(\*\*params) -> CDNListPurgeStatusesResponse
+- client.cdn.update_account(\*\*params) -> CDNAccount
+
+## CDNResources
+
+Types:
+
+```python
+from gcore.types.cdn import CDNResource, CDNResourceList
+```
+
+Methods:
+
+- client.cdn.cdn_resources.create(\*\*params) -> CDNResource
+- client.cdn.cdn_resources.update(resource_id, \*\*params) -> CDNResource
+- client.cdn.cdn_resources.list(\*\*params) -> CDNResourceList
+- client.cdn.cdn_resources.delete(resource_id) -> None
+- client.cdn.cdn_resources.get(resource_id) -> CDNResource
+- client.cdn.cdn_resources.prefetch(resource_id, \*\*params) -> None
+- client.cdn.cdn_resources.prevalidate_ssl_le_certificate(resource_id) -> None
+- client.cdn.cdn_resources.purge(resource_id, \*\*params) -> None
+- client.cdn.cdn_resources.replace(resource_id, \*\*params) -> CDNResource
+
+### Shield
+
+Types:
+
+```python
+from gcore.types.cdn.cdn_resources import OriginShielding, OriginShieldingReplaced
+```
+
+Methods:
+
+- client.cdn.cdn_resources.shield.get(resource_id) -> OriginShielding
+- client.cdn.cdn_resources.shield.replace(resource_id, \*\*params) -> object
+
+### Rules
+
+Types:
+
+```python
+from gcore.types.cdn.cdn_resources import CDNResourceRule, RuleListResponse
+```
+
+Methods:
+
+- client.cdn.cdn_resources.rules.create(resource_id, \*\*params) -> CDNResourceRule
+- client.cdn.cdn_resources.rules.update(rule_id, \*, resource_id, \*\*params) -> CDNResourceRule
+- client.cdn.cdn_resources.rules.list(resource_id) -> RuleListResponse
+- client.cdn.cdn_resources.rules.delete(rule_id, \*, resource_id) -> None
+- client.cdn.cdn_resources.rules.get(rule_id, \*, resource_id) -> CDNResourceRule
+- client.cdn.cdn_resources.rules.replace(rule_id, \*, resource_id, \*\*params) -> CDNResourceRule
+
+## Shields
+
+Types:
+
+```python
+from gcore.types.cdn import ShieldListResponse
+```
+
+Methods:
+
+- client.cdn.shields.list() -> ShieldListResponse
+
+## OriginGroups
+
+Types:
+
+```python
+from gcore.types.cdn import OriginGroups, OriginGroupsList
+```
+
+Methods:
+
+- client.cdn.origin_groups.create(\*\*params) -> OriginGroups
+- client.cdn.origin_groups.update(origin_group_id, \*\*params) -> OriginGroups
+- client.cdn.origin_groups.list(\*\*params) -> OriginGroupsList
+- client.cdn.origin_groups.delete(origin_group_id) -> None
+- client.cdn.origin_groups.get(origin_group_id) -> OriginGroups
+- client.cdn.origin_groups.replace(origin_group_id, \*\*params) -> OriginGroups
+
+## RuleTemplates
+
+Types:
+
+```python
+from gcore.types.cdn import RuleTemplate, RuleTemplateList
+```
+
+Methods:
+
+- client.cdn.rule_templates.create(\*\*params) -> RuleTemplate
+- client.cdn.rule_templates.update(rule_template_id, \*\*params) -> RuleTemplate
+- client.cdn.rule_templates.list() -> RuleTemplateList
+- client.cdn.rule_templates.delete(rule_template_id) -> None
+- client.cdn.rule_templates.get(rule_template_id) -> RuleTemplate
+- client.cdn.rule_templates.replace(rule_template_id, \*\*params) -> RuleTemplate
+
+## Certificates
+
+Types:
+
+```python
+from gcore.types.cdn import SslDetail, SslDetailList, SslRequestStatus
+```
+
+Methods:
+
+- client.cdn.certificates.create(\*\*params) -> None
+- client.cdn.certificates.list(\*\*params) -> SslDetailList
+- client.cdn.certificates.delete(ssl_id) -> None
+- client.cdn.certificates.force_retry(cert_id) -> None
+- client.cdn.certificates.get(ssl_id) -> SslDetail
+- client.cdn.certificates.get_status(cert_id, \*\*params) -> SslRequestStatus
+- client.cdn.certificates.renew(cert_id) -> None
+- client.cdn.certificates.replace(ssl_id, \*\*params) -> SslDetail
+
+## TrustedCaCertificates
+
+Types:
+
+```python
+from gcore.types.cdn import CaCertificate, CaCertificateList
+```
+
+Methods:
+
+- client.cdn.trusted_ca_certificates.create(\*\*params) -> CaCertificate
+- client.cdn.trusted_ca_certificates.list(\*\*params) -> CaCertificateList
+- client.cdn.trusted_ca_certificates.delete(id) -> None
+- client.cdn.trusted_ca_certificates.get(id) -> CaCertificate
+- client.cdn.trusted_ca_certificates.replace(id, \*\*params) -> CaCertificate
+
+## AuditLogs
+
+Types:
+
+```python
+from gcore.types.cdn import CDNAuditLogEntry
+```
+
+Methods:
+
+- client.cdn.audit_logs.list(\*\*params) -> SyncOffsetPage[CDNAuditLogEntry]
+- client.cdn.audit_logs.get(log_id) -> CDNAuditLogEntry
+
+## Logs
+
+Types:
+
+```python
+from gcore.types.cdn import CDNLogEntry
+```
+
+Methods:
+
+- client.cdn.logs.list(\*\*params) -> SyncOffsetPageCDNLogs[Data]
+- client.cdn.logs.download(\*\*params) -> BinaryAPIResponse
+
+## LogsUploader
+
+Types:
+
+```python
+from gcore.types.cdn import LogsUploaderValidation
+```
+
+### Policies
+
+Types:
+
+```python
+from gcore.types.cdn.logs_uploader import (
+ LogsUploaderPolicy,
+ LogsUploaderPolicyList,
+ PolicyListFieldsResponse,
+)
+```
+
+Methods:
+
+- client.cdn.logs_uploader.policies.create(\*\*params) -> LogsUploaderPolicy
+- client.cdn.logs_uploader.policies.update(id, \*\*params) -> LogsUploaderPolicy
+- client.cdn.logs_uploader.policies.list(\*\*params) -> LogsUploaderPolicyList
+- client.cdn.logs_uploader.policies.delete(id) -> None
+- client.cdn.logs_uploader.policies.get(id) -> LogsUploaderPolicy
+- client.cdn.logs_uploader.policies.list_fields() -> PolicyListFieldsResponse
+- client.cdn.logs_uploader.policies.replace(id, \*\*params) -> LogsUploaderPolicy
+
+### Targets
+
+Types:
+
+```python
+from gcore.types.cdn.logs_uploader import LogsUploaderTarget, LogsUploaderTargetList
+```
+
+Methods:
+
+- client.cdn.logs_uploader.targets.create(\*\*params) -> LogsUploaderTarget
+- client.cdn.logs_uploader.targets.update(id, \*\*params) -> LogsUploaderTarget
+- client.cdn.logs_uploader.targets.list(\*\*params) -> LogsUploaderTargetList
+- client.cdn.logs_uploader.targets.delete(id) -> None
+- client.cdn.logs_uploader.targets.get(id) -> LogsUploaderTarget
+- client.cdn.logs_uploader.targets.replace(id, \*\*params) -> LogsUploaderTarget
+- client.cdn.logs_uploader.targets.validate(id) -> LogsUploaderValidation
+
+### Configs
+
+Types:
+
+```python
+from gcore.types.cdn.logs_uploader import LogsUploaderConfig, LogsUploaderConfigList
+```
+
+Methods:
+
+- client.cdn.logs_uploader.configs.create(\*\*params) -> LogsUploaderConfig
+- client.cdn.logs_uploader.configs.update(id, \*\*params) -> LogsUploaderConfig
+- client.cdn.logs_uploader.configs.list(\*\*params) -> LogsUploaderConfigList
+- client.cdn.logs_uploader.configs.delete(id) -> None
+- client.cdn.logs_uploader.configs.get(id) -> LogsUploaderConfig
+- client.cdn.logs_uploader.configs.replace(id, \*\*params) -> LogsUploaderConfig
+- client.cdn.logs_uploader.configs.validate(id) -> LogsUploaderValidation
+
+## Statistics
+
+Types:
+
+```python
+from gcore.types.cdn import (
+ LogsAggregatedStats,
+ ResourceAggregatedStats,
+ ResourceUsageStats,
+ ShieldAggregatedStats,
+ UsageSeriesStats,
+)
+```
+
+Methods:
+
+- client.cdn.statistics.get_logs_usage_aggregated(\*\*params) -> LogsAggregatedStats
+- client.cdn.statistics.get_logs_usage_series(\*\*params) -> UsageSeriesStats
+- client.cdn.statistics.get_resource_usage_aggregated(\*\*params) -> ResourceAggregatedStats
+- client.cdn.statistics.get_resource_usage_series(\*\*params) -> ResourceUsageStats
+- client.cdn.statistics.get_shield_usage_aggregated(\*\*params) -> ShieldAggregatedStats
+- client.cdn.statistics.get_shield_usage_series(\*\*params) -> UsageSeriesStats
+
+## NetworkCapacity
+
+Types:
+
+```python
+from gcore.types.cdn import NetworkCapacity
+```
+
+Methods:
+
+- client.cdn.network_capacity.list() -> NetworkCapacity
+
+## Metrics
+
+Types:
+
+```python
+from gcore.types.cdn import CDNMetrics, CDNMetricsGroups, CDNMetricsValues
+```
+
+Methods:
+
+- client.cdn.metrics.list(\*\*params) -> CDNMetrics
+
+## IPRanges
+
+Types:
+
+```python
+from gcore.types.cdn import PublicIPList, PublicNetworkList
+```
+
+Methods:
+
+- client.cdn.ip_ranges.list(\*\*params) -> PublicNetworkList
+- client.cdn.ip_ranges.list_ips(\*\*params) -> PublicIPList
diff --git a/src/gcore/resources/cloud/api.md b/src/gcore/resources/cloud/api.md
new file mode 100644
index 00000000..5e26e6a1
--- /dev/null
+++ b/src/gcore/resources/cloud/api.md
@@ -0,0 +1,1181 @@
+# Cloud
+
+Types:
+
+```python
+from gcore.types.cloud import (
+ AllowedAddressPairs,
+ BaremetalFlavor,
+ BaremetalFlavorList,
+ BlackholePort,
+ Console,
+ DDOSProfile,
+ DDOSProfileField,
+ DDOSProfileOptionList,
+ DDOSProfileStatus,
+ DDOSProfileTemplate,
+ DDOSProfileTemplateField,
+ FixedAddress,
+ FixedAddressShort,
+ FlavorHardwareDescription,
+ FloatingAddress,
+ FloatingIP,
+ FloatingIPStatus,
+ GPUImage,
+ GPUImageList,
+ HTTPMethod,
+ Image,
+ ImageList,
+ Instance,
+ InstanceIsolation,
+ InstanceList,
+ InstanceMetricsTimeUnit,
+ InterfaceIPFamily,
+ IPAssignment,
+ IPVersion,
+ LaasIndexRetentionPolicy,
+ LoadBalancer,
+ LoadBalancerInstanceRole,
+ LoadBalancerMemberConnectivity,
+ LoadBalancerOperatingStatus,
+ LoadBalancerStatistics,
+ Logging,
+ Network,
+ NetworkAnySubnetFip,
+ NetworkDetails,
+ NetworkInterface,
+ NetworkInterfaceList,
+ NetworkSubnetFip,
+ ProvisioningStatus,
+ Route,
+ Subnet,
+ Tag,
+ TagList,
+ TagUpdateMap,
+ TaskIDList,
+)
+```
+
+## Projects
+
+Types:
+
+```python
+from gcore.types.cloud import Project
+```
+
+Methods:
+
+- client.cloud.projects.create(\*\*params) -> Project
+- client.cloud.projects.update(\*, project_id, \*\*params) -> Project
+- client.cloud.projects.list(\*\*params) -> SyncOffsetPage[Project]
+- client.cloud.projects.delete(\*, project_id) -> TaskIDList
+- client.cloud.projects.get(\*, project_id) -> Project
+
+## Tasks
+
+Types:
+
+```python
+from gcore.types.cloud import Task
+```
+
+Methods:
+
+- client.cloud.tasks.list(\*\*params) -> SyncOffsetPage[Task]
+- client.cloud.tasks.acknowledge_all(\*\*params) -> None
+- client.cloud.tasks.acknowledge_one(task_id) -> Task
+- client.cloud.tasks.get(task_id) -> Task
+
+## Regions
+
+Types:
+
+```python
+from gcore.types.cloud import Region
+```
+
+Methods:
+
+- client.cloud.regions.list(\*\*params) -> SyncOffsetPage[Region]
+- client.cloud.regions.get(\*, region_id, \*\*params) -> Region
+
+## Quotas
+
+Types:
+
+```python
+from gcore.types.cloud import QuotaGetAllResponse, QuotaGetByRegionResponse, QuotaGetGlobalResponse
+```
+
+Methods:
+
+- client.cloud.quotas.get_all() -> QuotaGetAllResponse
+- client.cloud.quotas.get_by_region(\*, client_id, region_id) -> QuotaGetByRegionResponse
+- client.cloud.quotas.get_global(client_id) -> QuotaGetGlobalResponse
+
+### Requests
+
+Types:
+
+```python
+from gcore.types.cloud.quotas import RequestListResponse, RequestGetResponse
+```
+
+Methods:
+
+- client.cloud.quotas.requests.create(\*\*params) -> None
+- client.cloud.quotas.requests.list(\*\*params) -> SyncOffsetPage[RequestListResponse]
+- client.cloud.quotas.requests.delete(request_id) -> None
+- client.cloud.quotas.requests.get(request_id) -> RequestGetResponse
+
+## Secrets
+
+Types:
+
+```python
+from gcore.types.cloud import Secret
+```
+
+Methods:
+
+- client.cloud.secrets.list(\*, project_id, region_id, \*\*params) -> SyncOffsetPage[Secret]
+- client.cloud.secrets.delete(secret_id, \*, project_id, region_id) -> TaskIDList
+- client.cloud.secrets.get(secret_id, \*, project_id, region_id) -> Secret
+- client.cloud.secrets.upload_tls_certificate(\*, project_id, region_id, \*\*params) -> TaskIDList
+
+## SSHKeys
+
+Types:
+
+```python
+from gcore.types.cloud import SSHKey, SSHKeyCreated
+```
+
+Methods:
+
+- client.cloud.ssh_keys.create(\*, project_id, \*\*params) -> SSHKeyCreated
+- client.cloud.ssh_keys.update(ssh_key_id, \*, project_id, \*\*params) -> SSHKey
+- client.cloud.ssh_keys.list(\*, project_id, \*\*params) -> SyncOffsetPage[SSHKey]
+- client.cloud.ssh_keys.delete(ssh_key_id, \*, project_id) -> None
+- client.cloud.ssh_keys.get(ssh_key_id, \*, project_id) -> SSHKey
+
+## IPRanges
+
+Types:
+
+```python
+from gcore.types.cloud import IPRanges
+```
+
+Methods:
+
+- client.cloud.ip_ranges.list() -> IPRanges
+
+## LoadBalancers
+
+Types:
+
+```python
+from gcore.types.cloud import (
+ HealthMonitor,
+ HealthMonitorStatus,
+ LbAlgorithm,
+ LbHealthMonitorType,
+ LbListenerProtocol,
+ LbPoolProtocol,
+ LbSessionPersistenceType,
+ ListenerStatus,
+ LoadBalancerFlavorDetail,
+ LoadBalancerFlavorList,
+ LoadBalancerL7Policy,
+ LoadBalancerL7PolicyList,
+ LoadBalancerL7Rule,
+ LoadBalancerL7RuleList,
+ LoadBalancerListenerDetail,
+ LoadBalancerListenerList,
+ LoadBalancerMetrics,
+ LoadBalancerMetricsList,
+ LoadBalancerPool,
+ LoadBalancerPoolList,
+ LoadBalancerStatus,
+ LoadBalancerStatusList,
+ Member,
+ MemberStatus,
+ PoolStatus,
+ SessionPersistence,
+)
+```
+
+Methods:
+
+- client.cloud.load_balancers.create(\*, project_id, region_id, \*\*params) -> TaskIDList
+- client.cloud.load_balancers.update(load_balancer_id, \*, project_id, region_id, \*\*params) -> LoadBalancer
+- client.cloud.load_balancers.list(\*, project_id, region_id, \*\*params) -> SyncOffsetPage[LoadBalancer]
+- client.cloud.load_balancers.delete(load_balancer_id, \*, project_id, region_id) -> TaskIDList
+- client.cloud.load_balancers.failover(load_balancer_id, \*, project_id, region_id, \*\*params) -> TaskIDList
+- client.cloud.load_balancers.get(load_balancer_id, \*, project_id, region_id, \*\*params) -> LoadBalancer
+- client.cloud.load_balancers.resize(load_balancer_id, \*, project_id, region_id, \*\*params) -> TaskIDList
+
+### L7Policies
+
+Methods:
+
+- client.cloud.load_balancers.l7_policies.create(\*, project_id, region_id, \*\*params) -> TaskIDList
+- client.cloud.load_balancers.l7_policies.update(l7policy_id, \*, project_id, region_id, \*\*params) -> TaskIDList
+- client.cloud.load_balancers.l7_policies.list(\*, project_id, region_id) -> LoadBalancerL7PolicyList
+- client.cloud.load_balancers.l7_policies.delete(l7policy_id, \*, project_id, region_id) -> TaskIDList
+- client.cloud.load_balancers.l7_policies.get(l7policy_id, \*, project_id, region_id) -> LoadBalancerL7Policy
+
+#### Rules
+
+Methods:
+
+- client.cloud.load_balancers.l7_policies.rules.create(l7policy_id, \*, project_id, region_id, \*\*params) -> TaskIDList
+- client.cloud.load_balancers.l7_policies.rules.list(l7policy_id, \*, project_id, region_id) -> LoadBalancerL7RuleList
+- client.cloud.load_balancers.l7_policies.rules.delete(l7rule_id, \*, project_id, region_id, l7policy_id) -> TaskIDList
+- client.cloud.load_balancers.l7_policies.rules.get(l7rule_id, \*, project_id, region_id, l7policy_id) -> LoadBalancerL7Rule
+- client.cloud.load_balancers.l7_policies.rules.replace(l7rule_id, \*, project_id, region_id, l7policy_id, \*\*params) -> TaskIDList
+
+### Flavors
+
+Methods:
+
+- client.cloud.load_balancers.flavors.list(\*, project_id, region_id, \*\*params) -> LoadBalancerFlavorList
+
+### Listeners
+
+Methods:
+
+- client.cloud.load_balancers.listeners.create(\*, project_id, region_id, \*\*params) -> TaskIDList
+- client.cloud.load_balancers.listeners.update(listener_id, \*, project_id, region_id, \*\*params) -> TaskIDList
+- client.cloud.load_balancers.listeners.list(\*, project_id, region_id, \*\*params) -> LoadBalancerListenerList
+- client.cloud.load_balancers.listeners.delete(listener_id, \*, project_id, region_id, \*\*params) -> TaskIDList
+- client.cloud.load_balancers.listeners.get(listener_id, \*, project_id, region_id, \*\*params) -> LoadBalancerListenerDetail
+
+### Pools
+
+Methods:
+
+- client.cloud.load_balancers.pools.create(\*, project_id, region_id, \*\*params) -> TaskIDList
+- client.cloud.load_balancers.pools.update(pool_id, \*, project_id, region_id, \*\*params) -> TaskIDList
+- client.cloud.load_balancers.pools.list(\*, project_id, region_id, \*\*params) -> LoadBalancerPoolList
+- client.cloud.load_balancers.pools.delete(pool_id, \*, project_id, region_id) -> TaskIDList
+- client.cloud.load_balancers.pools.get(pool_id, \*, project_id, region_id) -> LoadBalancerPool
+
+#### HealthMonitors
+
+Methods:
+
+- client.cloud.load_balancers.pools.health_monitors.create(pool_id, \*, project_id, region_id, \*\*params) -> TaskIDList
+- client.cloud.load_balancers.pools.health_monitors.delete(pool_id, \*, project_id, region_id) -> None
+
+#### Members
+
+Methods:
+
+- client.cloud.load_balancers.pools.members.create(pool_id, \*, project_id, region_id, \*\*params) -> TaskIDList
+- client.cloud.load_balancers.pools.members.delete(member_id, \*, project_id, region_id, pool_id) -> TaskIDList
+
+### Metrics
+
+Methods:
+
+- client.cloud.load_balancers.metrics.list(load_balancer_id, \*, project_id, region_id, \*\*params) -> LoadBalancerMetricsList
+
+### Statuses
+
+Methods:
+
+- client.cloud.load_balancers.statuses.list(\*, project_id, region_id) -> LoadBalancerStatusList
+- client.cloud.load_balancers.statuses.get(load_balancer_id, \*, project_id, region_id) -> LoadBalancerStatus
+
+## ReservedFixedIPs
+
+Types:
+
+```python
+from gcore.types.cloud import ReservedFixedIP
+```
+
+Methods:
+
+- client.cloud.reserved_fixed_ips.create(\*, project_id, region_id, \*\*params) -> TaskIDList
+- client.cloud.reserved_fixed_ips.update(port_id, \*, project_id, region_id, \*\*params) -> ReservedFixedIP
+- client.cloud.reserved_fixed_ips.list(\*, project_id, region_id, \*\*params) -> SyncOffsetPage[ReservedFixedIP]
+- client.cloud.reserved_fixed_ips.delete(port_id, \*, project_id, region_id) -> TaskIDList
+- client.cloud.reserved_fixed_ips.get(port_id, \*, project_id, region_id) -> ReservedFixedIP
+
+### Vip
+
+Types:
+
+```python
+from gcore.types.cloud.reserved_fixed_ips import IPWithSubnet
+```
+
+Methods:
+
+- client.cloud.reserved_fixed_ips.vip.toggle(port_id, \*, project_id, region_id, \*\*params) -> ReservedFixedIP
+
+#### CandidatePorts
+
+Types:
+
+```python
+from gcore.types.cloud.reserved_fixed_ips.vip import CandidatePort, CandidatePortList
+```
+
+Methods:
+
+- client.cloud.reserved_fixed_ips.vip.candidate_ports.list(port_id, \*, project_id, region_id) -> CandidatePortList
+
+#### ConnectedPorts
+
+Types:
+
+```python
+from gcore.types.cloud.reserved_fixed_ips.vip import ConnectedPort, ConnectedPortList
+```
+
+Methods:
+
+- client.cloud.reserved_fixed_ips.vip.connected_ports.list(port_id, \*, project_id, region_id) -> ConnectedPortList
+- client.cloud.reserved_fixed_ips.vip.connected_ports.add(port_id, \*, project_id, region_id, \*\*params) -> ConnectedPortList
+- client.cloud.reserved_fixed_ips.vip.connected_ports.replace(port_id, \*, project_id, region_id, \*\*params) -> ConnectedPortList
+
+## Networks
+
+Methods:
+
+- client.cloud.networks.create(\*, project_id, region_id, \*\*params) -> TaskIDList
+- client.cloud.networks.update(network_id, \*, project_id, region_id, \*\*params) -> Network
+- client.cloud.networks.list(\*, project_id, region_id, \*\*params) -> SyncOffsetPage[Network]
+- client.cloud.networks.delete(network_id, \*, project_id, region_id) -> TaskIDList
+- client.cloud.networks.get(network_id, \*, project_id, region_id) -> Network
+
+### Subnets
+
+Methods:
+
+- client.cloud.networks.subnets.create(\*, project_id, region_id, \*\*params) -> TaskIDList
+- client.cloud.networks.subnets.update(subnet_id, \*, project_id, region_id, \*\*params) -> Subnet
+- client.cloud.networks.subnets.list(\*, project_id, region_id, \*\*params) -> SyncOffsetPage[Subnet]
+- client.cloud.networks.subnets.delete(subnet_id, \*, project_id, region_id) -> TaskIDList
+- client.cloud.networks.subnets.get(subnet_id, \*, project_id, region_id) -> Subnet
+
+### Routers
+
+Types:
+
+```python
+from gcore.types.cloud.networks import Router, RouterList, SubnetID
+```
+
+Methods:
+
+- client.cloud.networks.routers.create(\*, project_id, region_id, \*\*params) -> TaskIDList
+- client.cloud.networks.routers.update(router_id, \*, project_id, region_id, \*\*params) -> Router
+- client.cloud.networks.routers.list(\*, project_id, region_id, \*\*params) -> SyncOffsetPage[Router]
+- client.cloud.networks.routers.delete(router_id, \*, project_id, region_id) -> TaskIDList
+- client.cloud.networks.routers.attach_subnet(router_id, \*, project_id, region_id, \*\*params) -> Router
+- client.cloud.networks.routers.detach_subnet(router_id, \*, project_id, region_id, \*\*params) -> Router
+- client.cloud.networks.routers.get(router_id, \*, project_id, region_id) -> Router
+
+## Volumes
+
+Types:
+
+```python
+from gcore.types.cloud import Volume
+```
+
+Methods:
+
+- client.cloud.volumes.create(\*, project_id, region_id, \*\*params) -> TaskIDList
+- client.cloud.volumes.update(volume_id, \*, project_id, region_id, \*\*params) -> Volume
+- client.cloud.volumes.list(\*, project_id, region_id, \*\*params) -> SyncOffsetPage[Volume]
+- client.cloud.volumes.delete(volume_id, \*, project_id, region_id, \*\*params) -> TaskIDList
+- client.cloud.volumes.attach_to_instance(volume_id, \*, project_id, region_id, \*\*params) -> TaskIDList
+- client.cloud.volumes.change_type(volume_id, \*, project_id, region_id, \*\*params) -> Volume
+- client.cloud.volumes.detach_from_instance(volume_id, \*, project_id, region_id, \*\*params) -> TaskIDList
+- client.cloud.volumes.get(volume_id, \*, project_id, region_id) -> Volume
+- client.cloud.volumes.resize(volume_id, \*, project_id, region_id, \*\*params) -> TaskIDList
+- client.cloud.volumes.revert_to_last_snapshot(volume_id, \*, project_id, region_id) -> None
+
+## FloatingIPs
+
+Types:
+
+```python
+from gcore.types.cloud import FloatingIPDetailed
+```
+
+Methods:
+
+- client.cloud.floating_ips.create(\*, project_id, region_id, \*\*params) -> TaskIDList
+- client.cloud.floating_ips.update(floating_ip_id, \*, project_id, region_id, \*\*params) -> TaskIDList
+- client.cloud.floating_ips.list(\*, project_id, region_id, \*\*params) -> SyncOffsetPage[FloatingIPDetailed]
+- client.cloud.floating_ips.delete(floating_ip_id, \*, project_id, region_id) -> TaskIDList
+- client.cloud.floating_ips.assign(floating_ip_id, \*, project_id, region_id, \*\*params) -> FloatingIP
+- client.cloud.floating_ips.get(floating_ip_id, \*, project_id, region_id) -> FloatingIP
+- client.cloud.floating_ips.unassign(floating_ip_id, \*, project_id, region_id) -> FloatingIP
+
+## SecurityGroups
+
+Types:
+
+```python
+from gcore.types.cloud import SecurityGroup, SecurityGroupRule
+```
+
+Methods:
+
+- client.cloud.security_groups.create(\*, project_id, region_id, \*\*params) -> TaskIDList
+- client.cloud.security_groups.update(group_id, \*, project_id, region_id, \*\*params) -> TaskIDList
+- client.cloud.security_groups.list(\*, project_id, region_id, \*\*params) -> SyncOffsetPage[SecurityGroup]
+- client.cloud.security_groups.delete(group_id, \*, project_id, region_id) -> None
+- client.cloud.security_groups.copy(group_id, \*, project_id, region_id, \*\*params) -> SecurityGroup
+- client.cloud.security_groups.get(group_id, \*, project_id, region_id) -> SecurityGroup
+- client.cloud.security_groups.revert_to_default(group_id, \*, project_id, region_id) -> SecurityGroup
+
+### Rules
+
+Methods:
+
+- client.cloud.security_groups.rules.create(group_id, \*, project_id, region_id, \*\*params) -> SecurityGroupRule
+- client.cloud.security_groups.rules.delete(rule_id, \*, project_id, region_id) -> None
+- client.cloud.security_groups.rules.replace(rule_id, \*, project_id, region_id, \*\*params) -> SecurityGroupRule
+
+## Users
+
+### RoleAssignments
+
+Types:
+
+```python
+from gcore.types.cloud.users import RoleAssignment, RoleAssignmentUpdatedDeleted
+```
+
+Methods:
+
+- client.cloud.users.role_assignments.create(\*\*params) -> RoleAssignment
+- client.cloud.users.role_assignments.update(assignment_id, \*\*params) -> RoleAssignmentUpdatedDeleted
+- client.cloud.users.role_assignments.list(\*\*params) -> SyncOffsetPage[RoleAssignment]
+- client.cloud.users.role_assignments.delete(assignment_id) -> RoleAssignmentUpdatedDeleted
+
+## Inference
+
+Types:
+
+```python
+from gcore.types.cloud import InferenceRegionCapacity, InferenceRegionCapacityList
+```
+
+Methods:
+
+- client.cloud.inference.get_capacity_by_region() -> InferenceRegionCapacityList
+
+### Flavors
+
+Types:
+
+```python
+from gcore.types.cloud.inference import InferenceFlavor
+```
+
+Methods:
+
+- client.cloud.inference.flavors.list(\*\*params) -> SyncOffsetPage[InferenceFlavor]
+- client.cloud.inference.flavors.get(flavor_name) -> InferenceFlavor
+
+### Deployments
+
+Types:
+
+```python
+from gcore.types.cloud.inference import (
+ InferenceDeployment,
+ InferenceDeploymentAPIKey,
+ Probe,
+ ProbeConfig,
+ ProbeExec,
+ ProbeHTTPGet,
+ ProbeTcpSocket,
+)
+```
+
+Methods:
+
+- client.cloud.inference.deployments.create(\*, project_id, \*\*params) -> TaskIDList
+- client.cloud.inference.deployments.update(deployment_name, \*, project_id, \*\*params) -> TaskIDList
+- client.cloud.inference.deployments.list(\*, project_id, \*\*params) -> SyncOffsetPage[InferenceDeployment]
+- client.cloud.inference.deployments.delete(deployment_name, \*, project_id) -> TaskIDList
+- client.cloud.inference.deployments.get(deployment_name, \*, project_id) -> InferenceDeployment
+- client.cloud.inference.deployments.get_api_key(deployment_name, \*, project_id) -> InferenceDeploymentAPIKey
+- client.cloud.inference.deployments.start(deployment_name, \*, project_id) -> None
+- client.cloud.inference.deployments.stop(deployment_name, \*, project_id) -> None
+
+#### Logs
+
+Types:
+
+```python
+from gcore.types.cloud.inference.deployments import InferenceDeploymentLog
+```
+
+Methods:
+
+- client.cloud.inference.deployments.logs.list(deployment_name, \*, project_id, \*\*params) -> SyncOffsetPage[InferenceDeploymentLog]
+
+### RegistryCredentials
+
+Types:
+
+```python
+from gcore.types.cloud.inference import InferenceRegistryCredentials
+```
+
+Methods:
+
+- client.cloud.inference.registry_credentials.create(\*, project_id, \*\*params) -> InferenceRegistryCredentials
+- client.cloud.inference.registry_credentials.list(\*, project_id, \*\*params) -> SyncOffsetPage[InferenceRegistryCredentials]
+- client.cloud.inference.registry_credentials.delete(credential_name, \*, project_id) -> None
+- client.cloud.inference.registry_credentials.get(credential_name, \*, project_id) -> InferenceRegistryCredentials
+- client.cloud.inference.registry_credentials.replace(credential_name, \*, project_id, \*\*params) -> InferenceRegistryCredentials
+
+### Secrets
+
+Types:
+
+```python
+from gcore.types.cloud.inference import InferenceSecret
+```
+
+Methods:
+
+- client.cloud.inference.secrets.create(\*, project_id, \*\*params) -> InferenceSecret
+- client.cloud.inference.secrets.list(\*, project_id, \*\*params) -> SyncOffsetPage[InferenceSecret]
+- client.cloud.inference.secrets.delete(secret_name, \*, project_id) -> None
+- client.cloud.inference.secrets.get(secret_name, \*, project_id) -> InferenceSecret
+- client.cloud.inference.secrets.replace(secret_name, \*, project_id, \*\*params) -> InferenceSecret
+
+### APIKeys
+
+Types:
+
+```python
+from gcore.types.cloud.inference import InferenceAPIKey, InferenceAPIKeyCreated
+```
+
+Methods:
+
+- client.cloud.inference.api_keys.create(\*, project_id, \*\*params) -> InferenceAPIKeyCreated
+- client.cloud.inference.api_keys.update(api_key_name, \*, project_id, \*\*params) -> InferenceAPIKey
+- client.cloud.inference.api_keys.list(\*, project_id, \*\*params) -> SyncOffsetPage[InferenceAPIKey]
+- client.cloud.inference.api_keys.delete(api_key_name, \*, project_id) -> None
+- client.cloud.inference.api_keys.get(api_key_name, \*, project_id) -> InferenceAPIKey
+
+### Applications
+
+#### Deployments
+
+Types:
+
+```python
+from gcore.types.cloud.inference.applications import (
+ InferenceApplicationDeployment,
+ InferenceApplicationDeploymentList,
+)
+```
+
+Methods:
+
+- client.cloud.inference.applications.deployments.create(\*, project_id, \*\*params) -> TaskIDList
+- client.cloud.inference.applications.deployments.update(deployment_name, \*, project_id, \*\*params) -> TaskIDList
+- client.cloud.inference.applications.deployments.list(\*, project_id) -> InferenceApplicationDeploymentList
+- client.cloud.inference.applications.deployments.delete(deployment_name, \*, project_id) -> TaskIDList
+- client.cloud.inference.applications.deployments.get(deployment_name, \*, project_id) -> InferenceApplicationDeployment
+
+#### Templates
+
+Types:
+
+```python
+from gcore.types.cloud.inference.applications import (
+ InferenceApplicationTemplate,
+ InferenceApplicationTemplateList,
+)
+```
+
+Methods:
+
+- client.cloud.inference.applications.templates.list() -> InferenceApplicationTemplateList
+- client.cloud.inference.applications.templates.get(application_name) -> InferenceApplicationTemplate
+
+## PlacementGroups
+
+Types:
+
+```python
+from gcore.types.cloud import PlacementGroup, PlacementGroupList
+```
+
+Methods:
+
+- client.cloud.placement_groups.create(\*, project_id, region_id, \*\*params) -> PlacementGroup
+- client.cloud.placement_groups.list(\*, project_id, region_id) -> PlacementGroupList
+- client.cloud.placement_groups.delete(group_id, \*, project_id, region_id) -> TaskIDList
+- client.cloud.placement_groups.get(group_id, \*, project_id, region_id) -> PlacementGroup
+
+## Baremetal
+
+### Images
+
+Methods:
+
+- client.cloud.baremetal.images.list(\*, project_id, region_id, \*\*params) -> ImageList
+
+### Flavors
+
+Methods:
+
+- client.cloud.baremetal.flavors.list(\*, project_id, region_id, \*\*params) -> BaremetalFlavorList
+
+### Servers
+
+Types:
+
+```python
+from gcore.types.cloud.baremetal import (
+ BaremetalFixedAddress,
+ BaremetalFloatingAddress,
+ BaremetalServer,
+)
+```
+
+Methods:
+
+- client.cloud.baremetal.servers.create(\*, project_id, region_id, \*\*params) -> TaskIDList
+- client.cloud.baremetal.servers.list(\*, project_id, region_id, \*\*params) -> SyncOffsetPage[BaremetalServer]
+- client.cloud.baremetal.servers.rebuild(server_id, \*, project_id, region_id, \*\*params) -> TaskIDList
+
+## Registries
+
+Types:
+
+```python
+from gcore.types.cloud import Registry, RegistryList, RegistryTag
+```
+
+Methods:
+
+- client.cloud.registries.create(\*, project_id, region_id, \*\*params) -> Registry
+- client.cloud.registries.list(\*, project_id, region_id) -> RegistryList
+- client.cloud.registries.delete(registry_id, \*, project_id, region_id) -> None
+- client.cloud.registries.get(registry_id, \*, project_id, region_id) -> Registry
+- client.cloud.registries.resize(registry_id, \*, project_id, region_id, \*\*params) -> Registry
+
+### Repositories
+
+Types:
+
+```python
+from gcore.types.cloud.registries import RegistryRepository, RegistryRepositoryList
+```
+
+Methods:
+
+- client.cloud.registries.repositories.list(registry_id, \*, project_id, region_id) -> RegistryRepositoryList
+- client.cloud.registries.repositories.delete(repository_name, \*, project_id, region_id, registry_id) -> None
+
+### Artifacts
+
+Types:
+
+```python
+from gcore.types.cloud.registries import RegistryArtifact, RegistryArtifactList
+```
+
+Methods:
+
+- client.cloud.registries.artifacts.list(repository_name, \*, project_id, region_id, registry_id) -> RegistryArtifactList
+- client.cloud.registries.artifacts.delete(digest, \*, project_id, region_id, registry_id, repository_name) -> None
+
+### Tags
+
+Methods:
+
+- client.cloud.registries.tags.delete(tag_name, \*, project_id, region_id, registry_id, repository_name, digest) -> None
+
+### Users
+
+Types:
+
+```python
+from gcore.types.cloud.registries import (
+ RegistryUser,
+ RegistryUserCreated,
+ RegistryUserList,
+ UserRefreshSecretResponse,
+)
+```
+
+Methods:
+
+- client.cloud.registries.users.create(registry_id, \*, project_id, region_id, \*\*params) -> RegistryUserCreated
+- client.cloud.registries.users.update(user_id, \*, project_id, region_id, registry_id, \*\*params) -> RegistryUser
+- client.cloud.registries.users.list(registry_id, \*, project_id, region_id) -> RegistryUserList
+- client.cloud.registries.users.delete(user_id, \*, project_id, region_id, registry_id) -> None
+- client.cloud.registries.users.create_multiple(registry_id, \*, project_id, region_id, \*\*params) -> RegistryUserCreated
+- client.cloud.registries.users.refresh_secret(user_id, \*, project_id, region_id, registry_id) -> UserRefreshSecretResponse
+
+## FileShares
+
+Types:
+
+```python
+from gcore.types.cloud import FileShare
+```
+
+Methods:
+
+- client.cloud.file_shares.create(\*, project_id, region_id, \*\*params) -> TaskIDList
+- client.cloud.file_shares.update(file_share_id, \*, project_id, region_id, \*\*params) -> TaskIDList
+- client.cloud.file_shares.list(\*, project_id, region_id, \*\*params) -> SyncOffsetPage[FileShare]
+- client.cloud.file_shares.delete(file_share_id, \*, project_id, region_id) -> TaskIDList
+- client.cloud.file_shares.get(file_share_id, \*, project_id, region_id) -> FileShare
+- client.cloud.file_shares.resize(file_share_id, \*, project_id, region_id, \*\*params) -> TaskIDList
+
+### AccessRules
+
+Types:
+
+```python
+from gcore.types.cloud.file_shares import AccessRule, AccessRuleList
+```
+
+Methods:
+
+- client.cloud.file_shares.access_rules.create(file_share_id, \*, project_id, region_id, \*\*params) -> AccessRule
+- client.cloud.file_shares.access_rules.list(file_share_id, \*, project_id, region_id) -> AccessRuleList
+- client.cloud.file_shares.access_rules.delete(access_rule_id, \*, project_id, region_id, file_share_id) -> None
+
+## BillingReservations
+
+Types:
+
+```python
+from gcore.types.cloud import BillingReservation, BillingReservations
+```
+
+Methods:
+
+- client.cloud.billing_reservations.list(\*\*params) -> BillingReservations
+
+## GPUBaremetal
+
+### Clusters
+
+Types:
+
+```python
+from gcore.types.cloud.gpu_baremetal import GPUBaremetalCluster
+```
+
+Methods:
+
+- client.cloud.gpu_baremetal.clusters.create(\*, project_id, region_id, \*\*params) -> TaskIDList
+- client.cloud.gpu_baremetal.clusters.list(\*, project_id, region_id, \*\*params) -> SyncOffsetPage[GPUBaremetalCluster]
+- client.cloud.gpu_baremetal.clusters.delete(cluster_id, \*, project_id, region_id, \*\*params) -> TaskIDList
+- client.cloud.gpu_baremetal.clusters.action(cluster_id, \*, project_id, region_id, \*\*params) -> TaskIDList
+- client.cloud.gpu_baremetal.clusters.get(cluster_id, \*, project_id, region_id) -> GPUBaremetalCluster
+- client.cloud.gpu_baremetal.clusters.powercycle_all_servers(cluster_id, \*, project_id, region_id) -> GPUBaremetalClusterServerV1List
+- client.cloud.gpu_baremetal.clusters.reboot_all_servers(cluster_id, \*, project_id, region_id) -> GPUBaremetalClusterServerV1List
+- client.cloud.gpu_baremetal.clusters.rebuild(cluster_id, \*, project_id, region_id, \*\*params) -> TaskIDList
+- client.cloud.gpu_baremetal.clusters.resize(cluster_id, \*, project_id, region_id, \*\*params) -> TaskIDList
+
+#### Interfaces
+
+Methods:
+
+- client.cloud.gpu_baremetal.clusters.interfaces.list(cluster_id, \*, project_id, region_id) -> NetworkInterfaceList
+- client.cloud.gpu_baremetal.clusters.interfaces.attach(instance_id, \*, project_id, region_id, \*\*params) -> TaskIDList
+- client.cloud.gpu_baremetal.clusters.interfaces.detach(instance_id, \*, project_id, region_id, \*\*params) -> TaskIDList
+
+#### Servers
+
+Types:
+
+```python
+from gcore.types.cloud.gpu_baremetal.clusters import (
+ GPUBaremetalClusterServer,
+ GPUBaremetalClusterServerV1,
+ GPUBaremetalClusterServerV1List,
+)
+```
+
+Methods:
+
+- client.cloud.gpu_baremetal.clusters.servers.list(cluster_id, \*, project_id, region_id, \*\*params) -> SyncOffsetPage[GPUBaremetalClusterServer]
+- client.cloud.gpu_baremetal.clusters.servers.delete(instance_id, \*, project_id, region_id, cluster_id, \*\*params) -> TaskIDList
+- client.cloud.gpu_baremetal.clusters.servers.get_console(instance_id, \*, project_id, region_id) -> Console
+- client.cloud.gpu_baremetal.clusters.servers.powercycle(instance_id, \*, project_id, region_id) -> GPUBaremetalClusterServerV1
+- client.cloud.gpu_baremetal.clusters.servers.reboot(instance_id, \*, project_id, region_id) -> GPUBaremetalClusterServerV1
+
+#### Flavors
+
+Types:
+
+```python
+from gcore.types.cloud.gpu_baremetal.clusters import GPUBaremetalFlavor, GPUBaremetalFlavorList
+```
+
+Methods:
+
+- client.cloud.gpu_baremetal.clusters.flavors.list(\*, project_id, region_id, \*\*params) -> GPUBaremetalFlavorList
+
+#### Images
+
+Methods:
+
+- client.cloud.gpu_baremetal.clusters.images.list(\*, project_id, region_id) -> GPUImageList
+- client.cloud.gpu_baremetal.clusters.images.delete(image_id, \*, project_id, region_id) -> TaskIDList
+- client.cloud.gpu_baremetal.clusters.images.get(image_id, \*, project_id, region_id) -> GPUImage
+- client.cloud.gpu_baremetal.clusters.images.upload(\*, project_id, region_id, \*\*params) -> TaskIDList
+
+## GPUVirtual
+
+### Clusters
+
+Types:
+
+```python
+from gcore.types.cloud.gpu_virtual import GPUVirtualCluster
+```
+
+Methods:
+
+- client.cloud.gpu_virtual.clusters.create(\*, project_id, region_id, \*\*params) -> TaskIDList
+- client.cloud.gpu_virtual.clusters.update(cluster_id, \*, project_id, region_id, \*\*params) -> GPUVirtualCluster
+- client.cloud.gpu_virtual.clusters.list(\*, project_id, region_id, \*\*params) -> SyncOffsetPage[GPUVirtualCluster]
+- client.cloud.gpu_virtual.clusters.delete(cluster_id, \*, project_id, region_id, \*\*params) -> TaskIDList
+- client.cloud.gpu_virtual.clusters.action(cluster_id, \*, project_id, region_id, \*\*params) -> TaskIDList
+- client.cloud.gpu_virtual.clusters.get(cluster_id, \*, project_id, region_id) -> GPUVirtualCluster
+
+#### Servers
+
+Types:
+
+```python
+from gcore.types.cloud.gpu_virtual.clusters import (
+ GPUVirtualClusterServer,
+ GPUVirtualClusterServerList,
+)
+```
+
+Methods:
+
+- client.cloud.gpu_virtual.clusters.servers.list(cluster_id, \*, project_id, region_id, \*\*params) -> GPUVirtualClusterServerList
+- client.cloud.gpu_virtual.clusters.servers.delete(server_id, \*, project_id, region_id, cluster_id, \*\*params) -> TaskIDList
+
+#### Volumes
+
+Types:
+
+```python
+from gcore.types.cloud.gpu_virtual.clusters import (
+ GPUVirtualClusterVolume,
+ GPUVirtualClusterVolumeList,
+)
+```
+
+Methods:
+
+- client.cloud.gpu_virtual.clusters.volumes.list(cluster_id, \*, project_id, region_id) -> GPUVirtualClusterVolumeList
+
+#### Interfaces
+
+Types:
+
+```python
+from gcore.types.cloud.gpu_virtual.clusters import GPUVirtualInterface, GPUVirtualInterfaceList
+```
+
+Methods:
+
+- client.cloud.gpu_virtual.clusters.interfaces.list(cluster_id, \*, project_id, region_id) -> GPUVirtualInterfaceList
+
+#### Flavors
+
+Types:
+
+```python
+from gcore.types.cloud.gpu_virtual.clusters import GPUVirtualFlavor, GPUVirtualFlavorList
+```
+
+Methods:
+
+- client.cloud.gpu_virtual.clusters.flavors.list(\*, project_id, region_id, \*\*params) -> GPUVirtualFlavorList
+
+#### Images
+
+Methods:
+
+- client.cloud.gpu_virtual.clusters.images.list(\*, project_id, region_id) -> GPUImageList
+- client.cloud.gpu_virtual.clusters.images.delete(image_id, \*, project_id, region_id) -> TaskIDList
+- client.cloud.gpu_virtual.clusters.images.get(image_id, \*, project_id, region_id) -> GPUImage
+- client.cloud.gpu_virtual.clusters.images.upload(\*, project_id, region_id, \*\*params) -> TaskIDList
+
+## Instances
+
+Types:
+
+```python
+from gcore.types.cloud import InstanceInterface
+```
+
+Methods:
+
+- client.cloud.instances.create(\*, project_id, region_id, \*\*params) -> TaskIDList
+- client.cloud.instances.update(instance_id, \*, project_id, region_id, \*\*params) -> Instance
+- client.cloud.instances.list(\*, project_id, region_id, \*\*params) -> SyncOffsetPage[Instance]
+- client.cloud.instances.delete(instance_id, \*, project_id, region_id, \*\*params) -> TaskIDList
+- client.cloud.instances.action(instance_id, \*, project_id, region_id, \*\*params) -> TaskIDList
+- client.cloud.instances.add_to_placement_group(instance_id, \*, project_id, region_id, \*\*params) -> TaskIDList
+- client.cloud.instances.assign_security_group(instance_id, \*, project_id, region_id, \*\*params) -> None
+- client.cloud.instances.disable_port_security(port_id, \*, project_id, region_id) -> InstanceInterface
+- client.cloud.instances.enable_port_security(port_id, \*, project_id, region_id) -> InstanceInterface
+- client.cloud.instances.get(instance_id, \*, project_id, region_id) -> Instance
+- client.cloud.instances.get_console(instance_id, \*, project_id, region_id, \*\*params) -> Console
+- client.cloud.instances.remove_from_placement_group(instance_id, \*, project_id, region_id) -> TaskIDList
+- client.cloud.instances.resize(instance_id, \*, project_id, region_id, \*\*params) -> TaskIDList
+- client.cloud.instances.unassign_security_group(instance_id, \*, project_id, region_id, \*\*params) -> None
+
+### Flavors
+
+Types:
+
+```python
+from gcore.types.cloud.instances import InstanceFlavorDetailed, InstanceFlavorList
+```
+
+Methods:
+
+- client.cloud.instances.flavors.list(\*, project_id, region_id, \*\*params) -> InstanceFlavorList
+
+### Interfaces
+
+Methods:
+
+- client.cloud.instances.interfaces.list(instance_id, \*, project_id, region_id) -> NetworkInterfaceList
+- client.cloud.instances.interfaces.attach(instance_id, \*, project_id, region_id, \*\*params) -> TaskIDList
+- client.cloud.instances.interfaces.detach(instance_id, \*, project_id, region_id, \*\*params) -> TaskIDList
+
+### Images
+
+Methods:
+
+- client.cloud.instances.images.update(image_id, \*, project_id, region_id, \*\*params) -> Image
+- client.cloud.instances.images.list(\*, project_id, region_id, \*\*params) -> ImageList
+- client.cloud.instances.images.delete(image_id, \*, project_id, region_id) -> TaskIDList
+- client.cloud.instances.images.create_from_volume(\*, project_id, region_id, \*\*params) -> TaskIDList
+- client.cloud.instances.images.get(image_id, \*, project_id, region_id, \*\*params) -> Image
+- client.cloud.instances.images.upload(\*, project_id, region_id, \*\*params) -> TaskIDList
+
+### Metrics
+
+Types:
+
+```python
+from gcore.types.cloud.instances import Metrics, MetricsList
+```
+
+Methods:
+
+- client.cloud.instances.metrics.list(instance_id, \*, project_id, region_id, \*\*params) -> MetricsList
+
+## K8S
+
+Types:
+
+```python
+from gcore.types.cloud import K8SClusterVersion, K8SClusterVersionList
+```
+
+Methods:
+
+- client.cloud.k8s.list_versions(\*, project_id, region_id) -> K8SClusterVersionList
+
+### Flavors
+
+Methods:
+
+- client.cloud.k8s.flavors.list(\*, project_id, region_id, \*\*params) -> BaremetalFlavorList
+
+### Clusters
+
+Types:
+
+```python
+from gcore.types.cloud.k8s import (
+ K8SCluster,
+ K8SClusterCertificate,
+ K8SClusterKubeconfig,
+ K8SClusterList,
+)
+```
+
+Methods:
+
+- client.cloud.k8s.clusters.create(\*, project_id, region_id, \*\*params) -> TaskIDList
+- client.cloud.k8s.clusters.update(cluster_name, \*, project_id, region_id, \*\*params) -> TaskIDList
+- client.cloud.k8s.clusters.list(\*, project_id, region_id) -> K8SClusterList
+- client.cloud.k8s.clusters.delete(cluster_name, \*, project_id, region_id, \*\*params) -> TaskIDList
+- client.cloud.k8s.clusters.get(cluster_name, \*, project_id, region_id) -> K8SCluster
+- client.cloud.k8s.clusters.get_certificate(cluster_name, \*, project_id, region_id) -> K8SClusterCertificate
+- client.cloud.k8s.clusters.get_kubeconfig(cluster_name, \*, project_id, region_id) -> K8SClusterKubeconfig
+- client.cloud.k8s.clusters.list_versions_for_upgrade(cluster_name, \*, project_id, region_id) -> K8SClusterVersionList
+- client.cloud.k8s.clusters.upgrade(cluster_name, \*, project_id, region_id, \*\*params) -> TaskIDList
+
+#### Nodes
+
+Methods:
+
+- client.cloud.k8s.clusters.nodes.list(cluster_name, \*, project_id, region_id, \*\*params) -> InstanceList
+- client.cloud.k8s.clusters.nodes.delete(instance_id, \*, project_id, region_id, cluster_name) -> None
+
+#### Pools
+
+Types:
+
+```python
+from gcore.types.cloud.k8s.clusters import K8SClusterPool, K8SClusterPoolList, K8SClusterPoolQuota
+```
+
+Methods:
+
+- client.cloud.k8s.clusters.pools.create(cluster_name, \*, project_id, region_id, \*\*params) -> TaskIDList
+- client.cloud.k8s.clusters.pools.update(pool_name, \*, project_id, region_id, cluster_name, \*\*params) -> K8SClusterPool
+- client.cloud.k8s.clusters.pools.list(cluster_name, \*, project_id, region_id) -> K8SClusterPoolList
+- client.cloud.k8s.clusters.pools.delete(pool_name, \*, project_id, region_id, cluster_name) -> TaskIDList
+- client.cloud.k8s.clusters.pools.check_quota(\*, project_id, region_id, \*\*params) -> K8SClusterPoolQuota
+- client.cloud.k8s.clusters.pools.get(pool_name, \*, project_id, region_id, cluster_name) -> K8SClusterPool
+- client.cloud.k8s.clusters.pools.resize(pool_name, \*, project_id, region_id, cluster_name, \*\*params) -> TaskIDList
+
+##### Nodes
+
+Methods:
+
+- client.cloud.k8s.clusters.pools.nodes.list(pool_name, \*, project_id, region_id, cluster_name, \*\*params) -> InstanceList
+- client.cloud.k8s.clusters.pools.nodes.delete(instance_id, \*, project_id, region_id, cluster_name, pool_name) -> None
+
+## AuditLogs
+
+Types:
+
+```python
+from gcore.types.cloud import AuditLogEntry
+```
+
+Methods:
+
+- client.cloud.audit_logs.list(\*\*params) -> SyncOffsetPage[AuditLogEntry]
+
+## CostReports
+
+Types:
+
+```python
+from gcore.types.cloud import CostReportAggregated, CostReportAggregatedMonthly, CostReportDetailed
+```
+
+Methods:
+
+- client.cloud.cost_reports.get_aggregated(\*\*params) -> CostReportAggregated
+- client.cloud.cost_reports.get_aggregated_monthly(\*\*params) -> CostReportAggregatedMonthly
+- client.cloud.cost_reports.get_detailed(\*\*params) -> CostReportDetailed
+
+## UsageReports
+
+Types:
+
+```python
+from gcore.types.cloud import UsageReport
+```
+
+Methods:
+
+- client.cloud.usage_reports.get(\*\*params) -> UsageReport
+
+## Databases
+
+### Postgres
+
+#### Clusters
+
+Types:
+
+```python
+from gcore.types.cloud.databases.postgres import PostgresCluster, PostgresClusterShort
+```
+
+Methods:
+
+- client.cloud.databases.postgres.clusters.create(\*, project_id, region_id, \*\*params) -> TaskIDList
+- client.cloud.databases.postgres.clusters.update(cluster_name, \*, project_id, region_id, \*\*params) -> TaskIDList
+- client.cloud.databases.postgres.clusters.list(\*, project_id, region_id, \*\*params) -> SyncOffsetPage[PostgresClusterShort]
+- client.cloud.databases.postgres.clusters.delete(cluster_name, \*, project_id, region_id) -> TaskIDList
+- client.cloud.databases.postgres.clusters.get(cluster_name, \*, project_id, region_id) -> PostgresCluster
+
+##### UserCredentials
+
+Types:
+
+```python
+from gcore.types.cloud.databases.postgres.clusters import PostgresUserCredentials
+```
+
+Methods:
+
+- client.cloud.databases.postgres.clusters.user_credentials.get(username, \*, project_id, region_id, cluster_name) -> PostgresUserCredentials
+- client.cloud.databases.postgres.clusters.user_credentials.regenerate(username, \*, project_id, region_id, cluster_name) -> PostgresUserCredentials
+
+#### Configurations
+
+Types:
+
+```python
+from gcore.types.cloud.databases.postgres import PostgresConfiguration
+```
+
+Methods:
+
+- client.cloud.databases.postgres.configurations.get(\*, project_id, region_id) -> PostgresConfiguration
+
+#### CustomConfigurations
+
+Types:
+
+```python
+from gcore.types.cloud.databases.postgres import PgConfValidation
+```
+
+Methods:
+
+- client.cloud.databases.postgres.custom_configurations.validate(\*, project_id, region_id, \*\*params) -> PgConfValidation
+
+## VolumeSnapshots
+
+Types:
+
+```python
+from gcore.types.cloud import Snapshot
+```
+
+Methods:
+
+- client.cloud.volume_snapshots.create(\*, project_id, region_id, \*\*params) -> TaskIDList
+- client.cloud.volume_snapshots.update(snapshot_id, \*, project_id, region_id, \*\*params) -> Snapshot
+- client.cloud.volume_snapshots.delete(snapshot_id, \*, project_id, region_id) -> TaskIDList
+- client.cloud.volume_snapshots.get(snapshot_id, \*, project_id, region_id) -> Snapshot
diff --git a/src/gcore/resources/dns/api.md b/src/gcore/resources/dns/api.md
new file mode 100644
index 00000000..ff89a8bc
--- /dev/null
+++ b/src/gcore/resources/dns/api.md
@@ -0,0 +1,159 @@
+# DNS
+
+Types:
+
+```python
+from gcore.types.dns import DNSGetAccountOverviewResponse, DNSLookupResponse
+```
+
+Methods:
+
+- client.dns.get_account_overview() -> DNSGetAccountOverviewResponse
+- client.dns.lookup(\*\*params) -> DNSLookupResponse
+
+## Locations
+
+Types:
+
+```python
+from gcore.types.dns import (
+ DNSLocationTranslations,
+ LocationListResponse,
+ LocationListContinentsResponse,
+ LocationListCountriesResponse,
+ LocationListRegionsResponse,
+)
+```
+
+Methods:
+
+- client.dns.locations.list() -> LocationListResponse
+- client.dns.locations.list_continents() -> LocationListContinentsResponse
+- client.dns.locations.list_countries() -> LocationListCountriesResponse
+- client.dns.locations.list_regions() -> LocationListRegionsResponse
+
+## Metrics
+
+Types:
+
+```python
+from gcore.types.dns import MetricListResponse
+```
+
+Methods:
+
+- client.dns.metrics.list(\*\*params) -> str
+
+## Pickers
+
+Types:
+
+```python
+from gcore.types.dns import DNSLabelName, PickerListResponse
+```
+
+Methods:
+
+- client.dns.pickers.list() -> PickerListResponse
+
+### Presets
+
+Types:
+
+```python
+from gcore.types.dns.pickers import PresetListResponse
+```
+
+Methods:
+
+- client.dns.pickers.presets.list() -> PresetListResponse
+
+## Zones
+
+Types:
+
+```python
+from gcore.types.dns import (
+ DNSNameServer,
+ ZoneCreateResponse,
+ ZoneListResponse,
+ ZoneCheckDelegationStatusResponse,
+ ZoneExportResponse,
+ ZoneGetResponse,
+ ZoneGetStatisticsResponse,
+ ZoneImportResponse,
+)
+```
+
+Methods:
+
+- client.dns.zones.create(\*\*params) -> ZoneCreateResponse
+- client.dns.zones.list(\*\*params) -> ZoneListResponse
+- client.dns.zones.delete(name) -> object
+- client.dns.zones.check_delegation_status(name) -> ZoneCheckDelegationStatusResponse
+- client.dns.zones.disable(name) -> object
+- client.dns.zones.enable(name) -> object
+- client.dns.zones.export(zone_name) -> ZoneExportResponse
+- client.dns.zones.get(name) -> ZoneGetResponse
+- client.dns.zones.get_statistics(name, \*\*params) -> ZoneGetStatisticsResponse
+- client.dns.zones.import\_(zone_name, \*\*params) -> ZoneImportResponse
+- client.dns.zones.replace(path_name, \*\*params) -> object
+
+### Dnssec
+
+Types:
+
+```python
+from gcore.types.dns.zones import DnssecUpdateResponse, DnssecGetResponse
+```
+
+Methods:
+
+- client.dns.zones.dnssec.update(name, \*\*params) -> DnssecUpdateResponse
+- client.dns.zones.dnssec.get(name) -> DnssecGetResponse
+
+### Rrsets
+
+Types:
+
+```python
+from gcore.types.dns.zones import (
+ DNSFailoverLog,
+ DNSOutputRrset,
+ RrsetListResponse,
+ RrsetGetFailoverLogsResponse,
+)
+```
+
+Methods:
+
+- client.dns.zones.rrsets.create(rrset_type, \*, zone_name, rrset_name, \*\*params) -> DNSOutputRrset
+- client.dns.zones.rrsets.list(zone_name, \*\*params) -> RrsetListResponse
+- client.dns.zones.rrsets.delete(rrset_type, \*, zone_name, rrset_name) -> object
+- client.dns.zones.rrsets.get(rrset_type, \*, zone_name, rrset_name) -> DNSOutputRrset
+- client.dns.zones.rrsets.get_failover_logs(rrset_type, \*, zone_name, rrset_name, \*\*params) -> RrsetGetFailoverLogsResponse
+- client.dns.zones.rrsets.replace(rrset_type, \*, zone_name, rrset_name, \*\*params) -> DNSOutputRrset
+
+## NetworkMappings
+
+Types:
+
+```python
+from gcore.types.dns import (
+ DNSMappingEntry,
+ DNSNetworkMapping,
+ NetworkMappingCreateResponse,
+ NetworkMappingListResponse,
+ NetworkMappingImportResponse,
+)
+```
+
+Methods:
+
+- client.dns.network_mappings.create(\*\*params) -> NetworkMappingCreateResponse
+- client.dns.network_mappings.list(\*\*params) -> NetworkMappingListResponse
+- client.dns.network_mappings.delete(id) -> object
+- client.dns.network_mappings.get(id) -> DNSNetworkMapping
+- client.dns.network_mappings.get_by_name(name) -> DNSNetworkMapping
+- client.dns.network*mappings.import*() -> NetworkMappingImportResponse
+- client.dns.network_mappings.replace(id, \*\*params) -> object
diff --git a/src/gcore/resources/fastedge/api.md b/src/gcore/resources/fastedge/api.md
new file mode 100644
index 00000000..8d835d33
--- /dev/null
+++ b/src/gcore/resources/fastedge/api.md
@@ -0,0 +1,122 @@
+# Fastedge
+
+Types:
+
+```python
+from gcore.types.fastedge import Client
+```
+
+Methods:
+
+- client.fastedge.get_account_overview() -> Client
+
+## Templates
+
+Types:
+
+```python
+from gcore.types.fastedge import Template, TemplateParameter, TemplateShort
+```
+
+Methods:
+
+- client.fastedge.templates.create(\*\*params) -> TemplateShort
+- client.fastedge.templates.list(\*\*params) -> SyncOffsetPageFastedgeTemplates[TemplateShort]
+- client.fastedge.templates.delete(id, \*\*params) -> None
+- client.fastedge.templates.get(id) -> Template
+- client.fastedge.templates.replace(id, \*\*params) -> TemplateShort
+
+## Secrets
+
+Types:
+
+```python
+from gcore.types.fastedge import Secret, SecretShort, SecretCreateResponse, SecretListResponse
+```
+
+Methods:
+
+- client.fastedge.secrets.create(\*\*params) -> SecretCreateResponse
+- client.fastedge.secrets.update(id, \*\*params) -> Secret
+- client.fastedge.secrets.list(\*\*params) -> SecretListResponse
+- client.fastedge.secrets.delete(id, \*\*params) -> None
+- client.fastedge.secrets.get(id) -> Secret
+- client.fastedge.secrets.replace(id, \*\*params) -> Secret
+
+## Binaries
+
+Types:
+
+```python
+from gcore.types.fastedge import Binary, BinaryShort, BinaryListResponse
+```
+
+Methods:
+
+- client.fastedge.binaries.create(body, \*\*params) -> BinaryShort
+- client.fastedge.binaries.list() -> BinaryListResponse
+- client.fastedge.binaries.delete(id) -> None
+- client.fastedge.binaries.get(id) -> Binary
+
+## Statistics
+
+Types:
+
+```python
+from gcore.types.fastedge import (
+ CallStatus,
+ DurationStats,
+ StatisticGetCallSeriesResponse,
+ StatisticGetDurationSeriesResponse,
+)
+```
+
+Methods:
+
+- client.fastedge.statistics.get_call_series(\*\*params) -> StatisticGetCallSeriesResponse
+- client.fastedge.statistics.get_duration_series(\*\*params) -> StatisticGetDurationSeriesResponse
+
+## Apps
+
+Types:
+
+```python
+from gcore.types.fastedge import App, AppShort
+```
+
+Methods:
+
+- client.fastedge.apps.create(\*\*params) -> AppShort
+- client.fastedge.apps.update(id, \*\*params) -> AppShort
+- client.fastedge.apps.list(\*\*params) -> SyncOffsetPageFastedgeApps[AppShort]
+- client.fastedge.apps.delete(id) -> None
+- client.fastedge.apps.get(id) -> App
+- client.fastedge.apps.replace(id, \*\*params) -> AppShort
+
+### Logs
+
+Types:
+
+```python
+from gcore.types.fastedge.apps import Log
+```
+
+Methods:
+
+- client.fastedge.apps.logs.list(id, \*\*params) -> SyncOffsetPageFastedgeAppLogs[Log]
+
+## KvStores
+
+Types:
+
+```python
+from gcore.types.fastedge import KvStore, KvStoreShort, KvStoreCreateResponse, KvStoreListResponse
+```
+
+Methods:
+
+- client.fastedge.kv_stores.create(\*\*params) -> KvStoreCreateResponse
+- client.fastedge.kv_stores.list(\*\*params) -> KvStoreListResponse
+- client.fastedge.kv_stores.delete(id) -> None
+- client.fastedge.kv_stores.get(id) -> KvStore
+- client.fastedge.kv_stores.replace(id, \*\*params) -> KvStore
diff --git a/src/gcore/resources/iam/api.md b/src/gcore/resources/iam/api.md
new file mode 100644
index 00000000..b6411972
--- /dev/null
+++ b/src/gcore/resources/iam/api.md
@@ -0,0 +1,42 @@
+# Iam
+
+Types:
+
+```python
+from gcore.types.iam import AccountOverview
+```
+
+Methods:
+
+- client.iam.get_account_overview() -> AccountOverview
+
+## APITokens
+
+Types:
+
+```python
+from gcore.types.iam import APIToken, APITokenCreated, APITokenList
+```
+
+Methods:
+
+- client.iam.api_tokens.create(client_id, \*\*params) -> APITokenCreated
+- client.iam.api_tokens.list(client_id, \*\*params) -> APITokenList
+- client.iam.api_tokens.delete(token_id, \*, client_id) -> None
+- client.iam.api_tokens.get(token_id, \*, client_id) -> APIToken
+
+## Users
+
+Types:
+
+```python
+from gcore.types.iam import User, UserDetailed, UserInvite, UserUpdated
+```
+
+Methods:
+
+- client.iam.users.update(user_id, \*\*params) -> UserUpdated
+- client.iam.users.list(\*\*params) -> SyncOffsetPage[User]
+- client.iam.users.delete(user_id, \*, client_id) -> None
+- client.iam.users.get(user_id) -> UserDetailed
+- client.iam.users.invite(\*\*params) -> UserInvite
diff --git a/src/gcore/resources/security/api.md b/src/gcore/resources/security/api.md
new file mode 100644
index 00000000..228f9548
--- /dev/null
+++ b/src/gcore/resources/security/api.md
@@ -0,0 +1,55 @@
+# Security
+
+## Events
+
+Types:
+
+```python
+from gcore.types.security import ClientView
+```
+
+Methods:
+
+- client.security.events.list(\*\*params) -> SyncOffsetPage[ClientView]
+
+## BgpAnnounces
+
+Types:
+
+```python
+from gcore.types.security import ClientAnnounce, BgpAnnounceListResponse
+```
+
+Methods:
+
+- client.security.bgp_announces.list(\*\*params) -> BgpAnnounceListResponse
+- client.security.bgp_announces.toggle(\*\*params) -> object
+
+## ProfileTemplates
+
+Types:
+
+```python
+from gcore.types.security import ClientProfileTemplate, ProfileTemplateListResponse
+```
+
+Methods:
+
+- client.security.profile_templates.list() -> ProfileTemplateListResponse
+
+## Profiles
+
+Types:
+
+```python
+from gcore.types.security import ClientProfile, ProfileListResponse
+```
+
+Methods:
+
+- client.security.profiles.create(\*\*params) -> ClientProfile
+- client.security.profiles.list(\*\*params) -> ProfileListResponse
+- client.security.profiles.delete(id) -> None
+- client.security.profiles.get(id) -> ClientProfile
+- client.security.profiles.recreate(id, \*\*params) -> ClientProfile
+- client.security.profiles.replace(id, \*\*params) -> ClientProfile
diff --git a/src/gcore/resources/storage/api.md b/src/gcore/resources/storage/api.md
new file mode 100644
index 00000000..83eea9dc
--- /dev/null
+++ b/src/gcore/resources/storage/api.md
@@ -0,0 +1,97 @@
+# Storage
+
+Types:
+
+```python
+from gcore.types.storage import Storage
+```
+
+Methods:
+
+- client.storage.create(\*\*params) -> Storage
+- client.storage.update(storage_id, \*\*params) -> Storage
+- client.storage.list(\*\*params) -> SyncOffsetPage[Storage]
+- client.storage.delete(storage_id) -> None
+- client.storage.get(storage_id) -> Storage
+- client.storage.link_ssh_key(key_id, \*, storage_id) -> None
+- client.storage.restore(storage_id, \*\*params) -> None
+- client.storage.unlink_ssh_key(key_id, \*, storage_id) -> None
+
+## Locations
+
+Types:
+
+```python
+from gcore.types.storage import Location
+```
+
+Methods:
+
+- client.storage.locations.list(\*\*params) -> SyncOffsetPage[Location]
+
+## Statistics
+
+Types:
+
+```python
+from gcore.types.storage import UsageSeries, UsageTotal, StatisticGetUsageSeriesResponse
+```
+
+Methods:
+
+- client.storage.statistics.get_usage_aggregated(\*\*params) -> UsageTotal
+- client.storage.statistics.get_usage_series(\*\*params) -> StatisticGetUsageSeriesResponse
+
+## Credentials
+
+Methods:
+
+- client.storage.credentials.recreate(storage_id, \*\*params) -> Storage
+
+## Buckets
+
+Types:
+
+```python
+from gcore.types.storage import Bucket
+```
+
+Methods:
+
+- client.storage.buckets.create(bucket_name, \*, storage_id) -> None
+- client.storage.buckets.list(storage_id, \*\*params) -> SyncOffsetPage[Bucket]
+- client.storage.buckets.delete(bucket_name, \*, storage_id) -> None
+
+### Cors
+
+Types:
+
+```python
+from gcore.types.storage.buckets import BucketCors
+```
+
+Methods:
+
+- client.storage.buckets.cors.create(bucket_name, \*, storage_id, \*\*params) -> None
+- client.storage.buckets.cors.get(bucket_name, \*, storage_id) -> BucketCors
+
+### Lifecycle
+
+Methods:
+
+- client.storage.buckets.lifecycle.create(bucket_name, \*, storage_id, \*\*params) -> None
+- client.storage.buckets.lifecycle.delete(bucket_name, \*, storage_id) -> None
+
+### Policy
+
+Types:
+
+```python
+from gcore.types.storage.buckets import BucketPolicy, PolicyGetResponse
+```
+
+Methods:
+
+- client.storage.buckets.policy.create(bucket_name, \*, storage_id) -> None
+- client.storage.buckets.policy.delete(bucket_name, \*, storage_id) -> None
+- client.storage.buckets.policy.get(bucket_name, \*, storage_id) -> PolicyGetResponse
diff --git a/src/gcore/resources/streaming/api.md b/src/gcore/resources/streaming/api.md
new file mode 100644
index 00000000..1e868475
--- /dev/null
+++ b/src/gcore/resources/streaming/api.md
@@ -0,0 +1,285 @@
+# Streaming
+
+Types:
+
+```python
+from gcore.types.streaming import CreateVideo, Video
+```
+
+## AITasks
+
+Types:
+
+```python
+from gcore.types.streaming import (
+ AIContentmoderationHardnudity,
+ AIContentmoderationNsfw,
+ AIContentmoderationSoftnudity,
+ AIContentmoderationSport,
+ AITask,
+ AITaskCreateResponse,
+ AITaskCancelResponse,
+ AITaskGetResponse,
+ AITaskGetAISettingsResponse,
+)
+```
+
+Methods:
+
+- client.streaming.ai_tasks.create(\*\*params) -> AITaskCreateResponse
+- client.streaming.ai_tasks.list(\*\*params) -> SyncPageStreamingAI[AITask]
+- client.streaming.ai_tasks.cancel(task_id) -> AITaskCancelResponse
+- client.streaming.ai_tasks.get(task_id) -> AITaskGetResponse
+- client.streaming.ai_tasks.get_ai_settings(\*\*params) -> AITaskGetAISettingsResponse
+
+## Broadcasts
+
+Types:
+
+```python
+from gcore.types.streaming import Broadcast, BroadcastSpectatorsCount
+```
+
+Methods:
+
+- client.streaming.broadcasts.create(\*\*params) -> None
+- client.streaming.broadcasts.update(broadcast_id, \*\*params) -> Broadcast
+- client.streaming.broadcasts.list(\*\*params) -> SyncPageStreaming[Broadcast]
+- client.streaming.broadcasts.delete(broadcast_id) -> None
+- client.streaming.broadcasts.get(broadcast_id) -> Broadcast
+- client.streaming.broadcasts.get_spectators_count(broadcast_id) -> BroadcastSpectatorsCount
+
+## Directories
+
+Types:
+
+```python
+from gcore.types.streaming import (
+ DirectoriesTree,
+ DirectoryBase,
+ DirectoryItem,
+ DirectoryVideo,
+ DirectoryGetResponse,
+)
+```
+
+Methods:
+
+- client.streaming.directories.create(\*\*params) -> DirectoryBase
+- client.streaming.directories.update(directory_id, \*\*params) -> DirectoryBase
+- client.streaming.directories.delete(directory_id) -> None
+- client.streaming.directories.get(directory_id) -> DirectoryGetResponse
+- client.streaming.directories.get_tree() -> DirectoriesTree
+
+## Players
+
+Types:
+
+```python
+from gcore.types.streaming import Player
+```
+
+Methods:
+
+- client.streaming.players.create(\*\*params) -> None
+- client.streaming.players.update(player_id, \*\*params) -> Player
+- client.streaming.players.list(\*\*params) -> SyncPageStreaming[Player]
+- client.streaming.players.delete(player_id) -> None
+- client.streaming.players.get(player_id) -> Player
+- client.streaming.players.preview(player_id) -> None
+
+## QualitySets
+
+Types:
+
+```python
+from gcore.types.streaming import QualitySets
+```
+
+Methods:
+
+- client.streaming.quality_sets.list() -> QualitySets
+- client.streaming.quality_sets.set_default(\*\*params) -> QualitySets
+
+## Playlists
+
+Types:
+
+```python
+from gcore.types.streaming import (
+ Playlist,
+ PlaylistCreated,
+ PlaylistVideo,
+ PlaylistListVideosResponse,
+)
+```
+
+Methods:
+
+- client.streaming.playlists.create(\*\*params) -> PlaylistCreated
+- client.streaming.playlists.update(playlist_id, \*\*params) -> Playlist
+- client.streaming.playlists.list(\*\*params) -> SyncPageStreaming[Playlist]
+- client.streaming.playlists.delete(playlist_id) -> None
+- client.streaming.playlists.get(playlist_id) -> Playlist
+- client.streaming.playlists.list_videos(playlist_id) -> PlaylistListVideosResponse
+
+## Videos
+
+Types:
+
+```python
+from gcore.types.streaming import (
+ DirectUploadParameters,
+ Subtitle,
+ SubtitleBase,
+ SubtitleBody,
+ SubtitleUpdated,
+ VideoCreateResponse,
+ VideoCreateMultipleResponse,
+)
+```
+
+Methods:
+
+- client.streaming.videos.create(\*\*params) -> VideoCreateResponse
+- client.streaming.videos.update(video_id, \*\*params) -> Video
+- client.streaming.videos.list(\*\*params) -> SyncPageStreaming[Video]
+- client.streaming.videos.delete(video_id) -> None
+- client.streaming.videos.create_multiple(\*\*params) -> VideoCreateMultipleResponse
+- client.streaming.videos.get(video_id) -> Video
+- client.streaming.videos.get_parameters_for_direct_upload(video_id) -> DirectUploadParameters
+- client.streaming.videos.list_names(\*\*params) -> None
+
+### Subtitles
+
+Types:
+
+```python
+from gcore.types.streaming.videos import SubtitleListResponse
+```
+
+Methods:
+
+- client.streaming.videos.subtitles.create(video_id, \*\*params) -> Subtitle
+- client.streaming.videos.subtitles.update(id, \*, video_id, \*\*params) -> SubtitleBase
+- client.streaming.videos.subtitles.list(video_id) -> SubtitleListResponse
+- client.streaming.videos.subtitles.delete(id, \*, video_id) -> None
+- client.streaming.videos.subtitles.get(id, \*, video_id) -> Subtitle
+
+## Streams
+
+Types:
+
+```python
+from gcore.types.streaming import (
+ Clip,
+ Stream,
+ StreamListClipsResponse,
+ StreamStartRecordingResponse,
+)
+```
+
+Methods:
+
+- client.streaming.streams.create(\*\*params) -> Stream
+- client.streaming.streams.update(stream_id, \*\*params) -> Stream
+- client.streaming.streams.list(\*\*params) -> SyncPageStreaming[Stream]
+- client.streaming.streams.delete(stream_id) -> None
+- client.streaming.streams.clear_dvr(stream_id) -> None
+- client.streaming.streams.create_clip(stream_id, \*\*params) -> Clip
+- client.streaming.streams.get(stream_id) -> Stream
+- client.streaming.streams.list_clips(stream_id) -> StreamListClipsResponse
+- client.streaming.streams.start_recording(stream_id) -> StreamStartRecordingResponse
+- client.streaming.streams.stop_recording(stream_id) -> Video
+
+### Overlays
+
+Types:
+
+```python
+from gcore.types.streaming.streams import (
+ Overlay,
+ OverlayCreateResponse,
+ OverlayListResponse,
+ OverlayUpdateMultipleResponse,
+)
+```
+
+Methods:
+
+- client.streaming.streams.overlays.create(stream_id, \*\*params) -> OverlayCreateResponse
+- client.streaming.streams.overlays.update(overlay_id, \*, stream_id, \*\*params) -> Overlay
+- client.streaming.streams.overlays.list(stream_id) -> OverlayListResponse
+- client.streaming.streams.overlays.delete(overlay_id, \*, stream_id) -> None
+- client.streaming.streams.overlays.get(overlay_id, \*, stream_id) -> Overlay
+- client.streaming.streams.overlays.update_multiple(stream_id, \*\*params) -> OverlayUpdateMultipleResponse
+
+## Restreams
+
+Types:
+
+```python
+from gcore.types.streaming import Restream
+```
+
+Methods:
+
+- client.streaming.restreams.create(\*\*params) -> None
+- client.streaming.restreams.update(restream_id, \*\*params) -> Restream
+- client.streaming.restreams.list(\*\*params) -> SyncPageStreaming[Restream]
+- client.streaming.restreams.delete(restream_id) -> None
+- client.streaming.restreams.get(restream_id) -> Restream
+
+## Statistics
+
+Types:
+
+```python
+from gcore.types.streaming import (
+ Ffprobes,
+ MaxStreamSeries,
+ PopularVideos,
+ StorageSeries,
+ StreamSeries,
+ UniqueViewers,
+ UniqueViewersCDN,
+ Views,
+ ViewsByBrowser,
+ ViewsByCountry,
+ ViewsByHostname,
+ ViewsByOperatingSystem,
+ ViewsByReferer,
+ ViewsByRegion,
+ ViewsHeatmap,
+ VodStatisticsSeries,
+ VodTotalStreamDurationSeries,
+ StatisticGetLiveUniqueViewersResponse,
+ StatisticGetVodWatchTimeTotalCDNResponse,
+)
+```
+
+Methods:
+
+- client.streaming.statistics.get_ffprobes(\*\*params) -> Ffprobes
+- client.streaming.statistics.get_live_unique_viewers(\*\*params) -> StatisticGetLiveUniqueViewersResponse
+- client.streaming.statistics.get_live_watch_time_cdn(\*\*params) -> StreamSeries
+- client.streaming.statistics.get_live_watch_time_total_cdn(\*\*params) -> VodTotalStreamDurationSeries
+- client.streaming.statistics.get_max_streams_series(\*\*params) -> MaxStreamSeries
+- client.streaming.statistics.get_popular_videos(\*\*params) -> PopularVideos
+- client.streaming.statistics.get_storage_series(\*\*params) -> StorageSeries
+- client.streaming.statistics.get_stream_series(\*\*params) -> StreamSeries
+- client.streaming.statistics.get_unique_viewers(\*\*params) -> UniqueViewers
+- client.streaming.statistics.get_unique_viewers_cdn(\*\*params) -> UniqueViewersCDN
+- client.streaming.statistics.get_views(\*\*params) -> Views
+- client.streaming.statistics.get_views_by_browsers(\*\*params) -> ViewsByBrowser
+- client.streaming.statistics.get_views_by_country(\*\*params) -> ViewsByCountry
+- client.streaming.statistics.get_views_by_hostname(\*\*params) -> ViewsByHostname
+- client.streaming.statistics.get_views_by_operating_system(\*\*params) -> ViewsByOperatingSystem
+- client.streaming.statistics.get_views_by_referer(\*\*params) -> ViewsByReferer
+- client.streaming.statistics.get_views_by_region(\*\*params) -> ViewsByRegion
+- client.streaming.statistics.get_views_heatmap(\*\*params) -> ViewsHeatmap
+- client.streaming.statistics.get_vod_storage_volume(\*\*params) -> VodStatisticsSeries
+- client.streaming.statistics.get_vod_transcoding_duration(\*\*params) -> VodStatisticsSeries
+- client.streaming.statistics.get_vod_unique_viewers_cdn(\*\*params) -> VodStatisticsSeries
+- client.streaming.statistics.get_vod_watch_time_cdn(\*\*params) -> VodStatisticsSeries
+- client.streaming.statistics.get_vod_watch_time_total_cdn(\*\*params) -> StatisticGetVodWatchTimeTotalCDNResponse
diff --git a/src/gcore/resources/waap/api.md b/src/gcore/resources/waap/api.md
new file mode 100644
index 00000000..52a55dc6
--- /dev/null
+++ b/src/gcore/resources/waap/api.md
@@ -0,0 +1,322 @@
+# Waap
+
+Types:
+
+```python
+from gcore.types.waap import WaapGetAccountOverviewResponse
+```
+
+Methods:
+
+- client.waap.get_account_overview() -> WaapGetAccountOverviewResponse
+
+## Statistics
+
+Types:
+
+```python
+from gcore.types.waap import WaapStatisticItem, WaapStatisticsSeries
+```
+
+Methods:
+
+- client.waap.statistics.get_usage_series(\*\*params) -> WaapStatisticsSeries
+
+## Domains
+
+Types:
+
+```python
+from gcore.types.waap import (
+ WaapDetailedDomain,
+ WaapDomainAPISettings,
+ WaapDomainDDOSSettings,
+ WaapDomainSettingsModel,
+ WaapPolicyMode,
+ WaapRuleSet,
+ WaapSummaryDomain,
+ DomainListRuleSetsResponse,
+)
+```
+
+Methods:
+
+- client.waap.domains.update(domain_id, \*\*params) -> None
+- client.waap.domains.list(\*\*params) -> SyncOffsetPage[WaapSummaryDomain]
+- client.waap.domains.delete(domain_id) -> None
+- client.waap.domains.get(domain_id) -> WaapDetailedDomain
+- client.waap.domains.list_rule_sets(domain_id) -> DomainListRuleSetsResponse
+- client.waap.domains.toggle_policy(policy_id, \*, domain_id) -> WaapPolicyMode
+
+### Settings
+
+Methods:
+
+- client.waap.domains.settings.update(domain_id, \*\*params) -> None
+- client.waap.domains.settings.get(domain_id) -> WaapDomainSettingsModel
+
+### APIPaths
+
+Types:
+
+```python
+from gcore.types.waap.domains import WaapAPIPath
+```
+
+Methods:
+
+- client.waap.domains.api_paths.create(domain_id, \*\*params) -> WaapAPIPath
+- client.waap.domains.api_paths.update(path_id, \*, domain_id, \*\*params) -> None
+- client.waap.domains.api_paths.list(domain_id, \*\*params) -> SyncOffsetPage[WaapAPIPath]
+- client.waap.domains.api_paths.delete(path_id, \*, domain_id) -> None
+- client.waap.domains.api_paths.get(path_id, \*, domain_id) -> WaapAPIPath
+
+### APIPathGroups
+
+Types:
+
+```python
+from gcore.types.waap.domains import APIPathGroupList
+```
+
+Methods:
+
+- client.waap.domains.api_path_groups.list(domain_id) -> APIPathGroupList
+
+### APIDiscovery
+
+Types:
+
+```python
+from gcore.types.waap.domains import WaapAPIDiscoverySettings, WaapAPIScanResult, WaapTaskID
+```
+
+Methods:
+
+- client.waap.domains.api_discovery.get_scan_result(scan_id, \*, domain_id) -> WaapAPIScanResult
+- client.waap.domains.api_discovery.get_settings(domain_id) -> WaapAPIDiscoverySettings
+- client.waap.domains.api_discovery.list_scan_results(domain_id, \*\*params) -> SyncOffsetPage[WaapAPIScanResult]
+- client.waap.domains.api_discovery.scan_openapi(domain_id) -> WaapTaskID
+- client.waap.domains.api_discovery.update_settings(domain_id, \*\*params) -> WaapAPIDiscoverySettings
+- client.waap.domains.api_discovery.upload_openapi(domain_id, \*\*params) -> WaapTaskID
+
+### Insights
+
+Types:
+
+```python
+from gcore.types.waap.domains import WaapInsight
+```
+
+Methods:
+
+- client.waap.domains.insights.list(domain_id, \*\*params) -> SyncOffsetPage[WaapInsight]
+- client.waap.domains.insights.get(insight_id, \*, domain_id) -> WaapInsight
+- client.waap.domains.insights.replace(insight_id, \*, domain_id, \*\*params) -> WaapInsight
+
+### InsightSilences
+
+Types:
+
+```python
+from gcore.types.waap.domains import WaapInsightSilence
+```
+
+Methods:
+
+- client.waap.domains.insight_silences.create(domain_id, \*\*params) -> WaapInsightSilence
+- client.waap.domains.insight_silences.update(silence_id, \*, domain_id, \*\*params) -> WaapInsightSilence
+- client.waap.domains.insight_silences.list(domain_id, \*\*params) -> SyncOffsetPage[WaapInsightSilence]
+- client.waap.domains.insight_silences.delete(silence_id, \*, domain_id) -> None
+- client.waap.domains.insight_silences.get(silence_id, \*, domain_id) -> WaapInsightSilence
+
+### Statistics
+
+Types:
+
+```python
+from gcore.types.waap.domains import (
+ WaapBlockedStatistics,
+ WaapCountStatistics,
+ WaapDDOSAttack,
+ WaapDDOSInfo,
+ WaapEventStatistics,
+ WaapRequestDetails,
+ WaapRequestSummary,
+ WaapTrafficMetrics,
+ StatisticGetTrafficSeriesResponse,
+)
+```
+
+Methods:
+
+- client.waap.domains.statistics.get_ddos_attacks(domain_id, \*\*params) -> SyncOffsetPage[WaapDDOSAttack]
+- client.waap.domains.statistics.get_ddos_info(domain_id, \*\*params) -> SyncOffsetPage[WaapDDOSInfo]
+- client.waap.domains.statistics.get_events_aggregated(domain_id, \*\*params) -> WaapEventStatistics
+- client.waap.domains.statistics.get_request_details(request_id, \*, domain_id) -> WaapRequestDetails
+- client.waap.domains.statistics.get_requests_series(domain_id, \*\*params) -> SyncOffsetPage[WaapRequestSummary]
+- client.waap.domains.statistics.get_traffic_series(domain_id, \*\*params) -> StatisticGetTrafficSeriesResponse
+
+### CustomRules
+
+Types:
+
+```python
+from gcore.types.waap.domains import WaapCustomRule
+```
+
+Methods:
+
+- client.waap.domains.custom_rules.create(domain_id, \*\*params) -> WaapCustomRule
+- client.waap.domains.custom_rules.update(rule_id, \*, domain_id, \*\*params) -> None
+- client.waap.domains.custom_rules.list(domain_id, \*\*params) -> SyncOffsetPage[WaapCustomRule]
+- client.waap.domains.custom_rules.delete(rule_id, \*, domain_id) -> None
+- client.waap.domains.custom_rules.delete_multiple(domain_id, \*\*params) -> None
+- client.waap.domains.custom_rules.get(rule_id, \*, domain_id) -> WaapCustomRule
+- client.waap.domains.custom_rules.toggle(action, \*, domain_id, rule_id) -> None
+
+### FirewallRules
+
+Types:
+
+```python
+from gcore.types.waap.domains import WaapFirewallRule
+```
+
+Methods:
+
+- client.waap.domains.firewall_rules.create(domain_id, \*\*params) -> WaapFirewallRule
+- client.waap.domains.firewall_rules.update(rule_id, \*, domain_id, \*\*params) -> None
+- client.waap.domains.firewall_rules.list(domain_id, \*\*params) -> SyncOffsetPage[WaapFirewallRule]
+- client.waap.domains.firewall_rules.delete(rule_id, \*, domain_id) -> None
+- client.waap.domains.firewall_rules.delete_multiple(domain_id, \*\*params) -> None
+- client.waap.domains.firewall_rules.get(rule_id, \*, domain_id) -> WaapFirewallRule
+- client.waap.domains.firewall_rules.toggle(action, \*, domain_id, rule_id) -> None
+
+### AdvancedRules
+
+Types:
+
+```python
+from gcore.types.waap.domains import WaapAdvancedRule
+```
+
+Methods:
+
+- client.waap.domains.advanced_rules.create(domain_id, \*\*params) -> WaapAdvancedRule
+- client.waap.domains.advanced_rules.update(rule_id, \*, domain_id, \*\*params) -> None
+- client.waap.domains.advanced_rules.list(domain_id, \*\*params) -> SyncOffsetPage[WaapAdvancedRule]
+- client.waap.domains.advanced_rules.delete(rule_id, \*, domain_id) -> None
+- client.waap.domains.advanced_rules.get(rule_id, \*, domain_id) -> WaapAdvancedRule
+- client.waap.domains.advanced_rules.toggle(action, \*, domain_id, rule_id) -> None
+
+## CustomPageSets
+
+Types:
+
+```python
+from gcore.types.waap import WaapCustomPagePreview, WaapCustomPageSet
+```
+
+Methods:
+
+- client.waap.custom_page_sets.create(\*\*params) -> WaapCustomPageSet
+- client.waap.custom_page_sets.update(set_id, \*\*params) -> None
+- client.waap.custom_page_sets.list(\*\*params) -> SyncOffsetPage[WaapCustomPageSet]
+- client.waap.custom_page_sets.delete(set_id) -> None
+- client.waap.custom_page_sets.get(set_id) -> WaapCustomPageSet
+- client.waap.custom_page_sets.preview(\*\*params) -> WaapCustomPagePreview
+
+## AdvancedRules
+
+Types:
+
+```python
+from gcore.types.waap import WaapAdvancedRuleDescriptor, WaapAdvancedRuleDescriptorList
+```
+
+Methods:
+
+- client.waap.advanced_rules.list() -> WaapAdvancedRuleDescriptorList
+
+## Tags
+
+Types:
+
+```python
+from gcore.types.waap import WaapTag
+```
+
+Methods:
+
+- client.waap.tags.list(\*\*params) -> SyncOffsetPage[WaapTag]
+
+## Organizations
+
+Types:
+
+```python
+from gcore.types.waap import WaapOrganization
+```
+
+Methods:
+
+- client.waap.organizations.list(\*\*params) -> SyncOffsetPage[WaapOrganization]
+
+## Insights
+
+Types:
+
+```python
+from gcore.types.waap import WaapInsightType
+```
+
+Methods:
+
+- client.waap.insights.list_types(\*\*params) -> SyncOffsetPage[WaapInsightType]
+
+## IPInfo
+
+Types:
+
+```python
+from gcore.types.waap import (
+ WaapIPCountryAttack,
+ WaapIPDDOSInfoModel,
+ WaapIPInfo,
+ WaapRuleBlockedRequests,
+ WaapTimeSeriesAttack,
+ WaapTopSession,
+ WaapTopURL,
+ WaapTopUserAgent,
+ IPInfoGetAttackTimeSeriesResponse,
+ IPInfoGetBlockedRequestsResponse,
+ IPInfoGetTopURLsResponse,
+ IPInfoGetTopUserAgentsResponse,
+ IPInfoGetTopUserSessionsResponse,
+ IPInfoListAttackedCountriesResponse,
+)
+```
+
+Methods:
+
+- client.waap.ip_info.get_attack_time_series(\*\*params) -> IPInfoGetAttackTimeSeriesResponse
+- client.waap.ip_info.get_blocked_requests(\*\*params) -> IPInfoGetBlockedRequestsResponse
+- client.waap.ip_info.get_ddos_attack_series(\*\*params) -> WaapIPDDOSInfoModel
+- client.waap.ip_info.get_ip_info(\*\*params) -> WaapIPInfo
+- client.waap.ip_info.get_top_urls(\*\*params) -> IPInfoGetTopURLsResponse
+- client.waap.ip_info.get_top_user_agents(\*\*params) -> IPInfoGetTopUserAgentsResponse
+- client.waap.ip_info.get_top_user_sessions(\*\*params) -> IPInfoGetTopUserSessionsResponse
+- client.waap.ip_info.list_attacked_countries(\*\*params) -> IPInfoListAttackedCountriesResponse
+
+### Metrics
+
+Types:
+
+```python
+from gcore.types.waap.ip_info import WaapIPInfoCounts
+```
+
+Methods:
+
+- client.waap.ip_info.metrics.list(\*\*params) -> WaapIPInfoCounts
From 329f548a5aaf9d012af3b0cc4eb73a124ec1a6df Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Fri, 13 Feb 2026 07:49:04 +0000
Subject: [PATCH 7/9] codegen metadata
---
.stats.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.stats.yml b/.stats.yml
index 0d8ddfe6..6cbd581b 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 645
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-8c31abd1135e0eac90290da5a160e341a0d09ca3ca62191a13f079a0f958c0e3.yml
openapi_spec_hash: 3506ce6ee4d6f2057e02e656557ada57
-config_hash: 841ecfe67afa779a3954fe8800ecb132
+config_hash: bc578a7de14c42e33b7d4bd4502218f2
From d6b782c24f6534edc3c2013d644e0d5f9fdffac5 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Fri, 13 Feb 2026 10:22:21 +0000
Subject: [PATCH 8/9] feat(api): aggregated API specs update
---
.stats.yml | 4 +-
.../resources/cdn/logs_uploader/policies.py | 60 +++++++++++++++++++
.../cdn/logs_uploader/logs_uploader_policy.py | 11 ++++
.../cdn/logs_uploader/policy_create_params.py | 11 ++++
.../logs_uploader/policy_replace_params.py | 11 ++++
.../cdn/logs_uploader/policy_update_params.py | 11 ++++
.../cdn/logs_uploader/test_policies.py | 6 ++
7 files changed, 112 insertions(+), 2 deletions(-)
diff --git a/.stats.yml b/.stats.yml
index 6cbd581b..fae1a1cb 100644
--- a/.stats.yml
+++ b/.stats.yml
@@ -1,4 +1,4 @@
configured_endpoints: 645
-openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-8c31abd1135e0eac90290da5a160e341a0d09ca3ca62191a13f079a0f958c0e3.yml
-openapi_spec_hash: 3506ce6ee4d6f2057e02e656557ada57
+openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/gcore%2Fgcore-9259165aabf370bac0e114d6934e471a5ac10c13bbd4bb8e3a868ab3ac04c1b0.yml
+openapi_spec_hash: ae218d74dd0778c09d4ea5f932519e56
config_hash: bc578a7de14c42e33b7d4bd4502218f2
diff --git a/src/gcore/resources/cdn/logs_uploader/policies.py b/src/gcore/resources/cdn/logs_uploader/policies.py
index a6d933fb..e4d15912 100644
--- a/src/gcore/resources/cdn/logs_uploader/policies.py
+++ b/src/gcore/resources/cdn/logs_uploader/policies.py
@@ -64,6 +64,7 @@ def create(
format_type: Literal["json", ""] | Omit = omit,
include_empty_logs: bool | Omit = omit,
include_shield_logs: bool | Omit = omit,
+ log_sample_rate: float | Omit = omit,
name: str | Omit = omit,
retry_interval_minutes: int | Omit = omit,
rotate_interval_minutes: int | Omit = omit,
@@ -116,6 +117,14 @@ def create(
include_shield_logs: Include logs from origin shielding in the upload.
+ log_sample_rate: Sampling rate for logs. A value between 0 and 1 that determines the fraction of
+ log entries to collect.
+
+ - **1** - collect all logs (default).
+ - **0.5** - collect approximately 50% of logs.
+ - **0** - collect no logs (effectively disables logging without removing the
+ policy).
+
name: Name of the policy.
retry_interval_minutes: Interval in minutes to retry failed uploads.
@@ -152,6 +161,7 @@ def create(
"format_type": format_type,
"include_empty_logs": include_empty_logs,
"include_shield_logs": include_shield_logs,
+ "log_sample_rate": log_sample_rate,
"name": name,
"retry_interval_minutes": retry_interval_minutes,
"rotate_interval_minutes": rotate_interval_minutes,
@@ -181,6 +191,7 @@ def update(
format_type: Literal["json", ""] | Omit = omit,
include_empty_logs: bool | Omit = omit,
include_shield_logs: bool | Omit = omit,
+ log_sample_rate: float | Omit = omit,
name: str | Omit = omit,
retry_interval_minutes: int | Omit = omit,
rotate_interval_minutes: int | Omit = omit,
@@ -233,6 +244,14 @@ def update(
include_shield_logs: Include logs from origin shielding in the upload.
+ log_sample_rate: Sampling rate for logs. A value between 0 and 1 that determines the fraction of
+ log entries to collect.
+
+ - **1** - collect all logs (default).
+ - **0.5** - collect approximately 50% of logs.
+ - **0** - collect no logs (effectively disables logging without removing the
+ policy).
+
name: Name of the policy.
retry_interval_minutes: Interval in minutes to retry failed uploads.
@@ -269,6 +288,7 @@ def update(
"format_type": format_type,
"include_empty_logs": include_empty_logs,
"include_shield_logs": include_shield_logs,
+ "log_sample_rate": log_sample_rate,
"name": name,
"retry_interval_minutes": retry_interval_minutes,
"rotate_interval_minutes": rotate_interval_minutes,
@@ -431,6 +451,7 @@ def replace(
format_type: Literal["json", ""] | Omit = omit,
include_empty_logs: bool | Omit = omit,
include_shield_logs: bool | Omit = omit,
+ log_sample_rate: float | Omit = omit,
name: str | Omit = omit,
retry_interval_minutes: int | Omit = omit,
rotate_interval_minutes: int | Omit = omit,
@@ -483,6 +504,14 @@ def replace(
include_shield_logs: Include logs from origin shielding in the upload.
+ log_sample_rate: Sampling rate for logs. A value between 0 and 1 that determines the fraction of
+ log entries to collect.
+
+ - **1** - collect all logs (default).
+ - **0.5** - collect approximately 50% of logs.
+ - **0** - collect no logs (effectively disables logging without removing the
+ policy).
+
name: Name of the policy.
retry_interval_minutes: Interval in minutes to retry failed uploads.
@@ -519,6 +548,7 @@ def replace(
"format_type": format_type,
"include_empty_logs": include_empty_logs,
"include_shield_logs": include_shield_logs,
+ "log_sample_rate": log_sample_rate,
"name": name,
"retry_interval_minutes": retry_interval_minutes,
"rotate_interval_minutes": rotate_interval_minutes,
@@ -568,6 +598,7 @@ async def create(
format_type: Literal["json", ""] | Omit = omit,
include_empty_logs: bool | Omit = omit,
include_shield_logs: bool | Omit = omit,
+ log_sample_rate: float | Omit = omit,
name: str | Omit = omit,
retry_interval_minutes: int | Omit = omit,
rotate_interval_minutes: int | Omit = omit,
@@ -620,6 +651,14 @@ async def create(
include_shield_logs: Include logs from origin shielding in the upload.
+ log_sample_rate: Sampling rate for logs. A value between 0 and 1 that determines the fraction of
+ log entries to collect.
+
+ - **1** - collect all logs (default).
+ - **0.5** - collect approximately 50% of logs.
+ - **0** - collect no logs (effectively disables logging without removing the
+ policy).
+
name: Name of the policy.
retry_interval_minutes: Interval in minutes to retry failed uploads.
@@ -656,6 +695,7 @@ async def create(
"format_type": format_type,
"include_empty_logs": include_empty_logs,
"include_shield_logs": include_shield_logs,
+ "log_sample_rate": log_sample_rate,
"name": name,
"retry_interval_minutes": retry_interval_minutes,
"rotate_interval_minutes": rotate_interval_minutes,
@@ -685,6 +725,7 @@ async def update(
format_type: Literal["json", ""] | Omit = omit,
include_empty_logs: bool | Omit = omit,
include_shield_logs: bool | Omit = omit,
+ log_sample_rate: float | Omit = omit,
name: str | Omit = omit,
retry_interval_minutes: int | Omit = omit,
rotate_interval_minutes: int | Omit = omit,
@@ -737,6 +778,14 @@ async def update(
include_shield_logs: Include logs from origin shielding in the upload.
+ log_sample_rate: Sampling rate for logs. A value between 0 and 1 that determines the fraction of
+ log entries to collect.
+
+ - **1** - collect all logs (default).
+ - **0.5** - collect approximately 50% of logs.
+ - **0** - collect no logs (effectively disables logging without removing the
+ policy).
+
name: Name of the policy.
retry_interval_minutes: Interval in minutes to retry failed uploads.
@@ -773,6 +822,7 @@ async def update(
"format_type": format_type,
"include_empty_logs": include_empty_logs,
"include_shield_logs": include_shield_logs,
+ "log_sample_rate": log_sample_rate,
"name": name,
"retry_interval_minutes": retry_interval_minutes,
"rotate_interval_minutes": rotate_interval_minutes,
@@ -935,6 +985,7 @@ async def replace(
format_type: Literal["json", ""] | Omit = omit,
include_empty_logs: bool | Omit = omit,
include_shield_logs: bool | Omit = omit,
+ log_sample_rate: float | Omit = omit,
name: str | Omit = omit,
retry_interval_minutes: int | Omit = omit,
rotate_interval_minutes: int | Omit = omit,
@@ -987,6 +1038,14 @@ async def replace(
include_shield_logs: Include logs from origin shielding in the upload.
+ log_sample_rate: Sampling rate for logs. A value between 0 and 1 that determines the fraction of
+ log entries to collect.
+
+ - **1** - collect all logs (default).
+ - **0.5** - collect approximately 50% of logs.
+ - **0** - collect no logs (effectively disables logging without removing the
+ policy).
+
name: Name of the policy.
retry_interval_minutes: Interval in minutes to retry failed uploads.
@@ -1023,6 +1082,7 @@ async def replace(
"format_type": format_type,
"include_empty_logs": include_empty_logs,
"include_shield_logs": include_shield_logs,
+ "log_sample_rate": log_sample_rate,
"name": name,
"retry_interval_minutes": retry_interval_minutes,
"rotate_interval_minutes": rotate_interval_minutes,
diff --git a/src/gcore/types/cdn/logs_uploader/logs_uploader_policy.py b/src/gcore/types/cdn/logs_uploader/logs_uploader_policy.py
index dd6cfc5a..b71e8375 100644
--- a/src/gcore/types/cdn/logs_uploader/logs_uploader_policy.py
+++ b/src/gcore/types/cdn/logs_uploader/logs_uploader_policy.py
@@ -66,6 +66,17 @@ class LogsUploaderPolicy(BaseModel):
include_shield_logs: Optional[bool] = None
"""Include logs from origin shielding in the upload."""
+ log_sample_rate: Optional[float] = None
+ """Sampling rate for logs.
+
+ A value between 0 and 1 that determines the fraction of log entries to collect.
+
+ - **1** - collect all logs (default).
+ - **0.5** - collect approximately 50% of logs.
+ - **0** - collect no logs (effectively disables logging without removing the
+ policy).
+ """
+
name: Optional[str] = None
"""Name of the policy."""
diff --git a/src/gcore/types/cdn/logs_uploader/policy_create_params.py b/src/gcore/types/cdn/logs_uploader/policy_create_params.py
index 7179d9d1..4d25b99a 100644
--- a/src/gcore/types/cdn/logs_uploader/policy_create_params.py
+++ b/src/gcore/types/cdn/logs_uploader/policy_create_params.py
@@ -59,6 +59,17 @@ class PolicyCreateParams(TypedDict, total=False):
include_shield_logs: bool
"""Include logs from origin shielding in the upload."""
+ log_sample_rate: float
+ """Sampling rate for logs.
+
+ A value between 0 and 1 that determines the fraction of log entries to collect.
+
+ - **1** - collect all logs (default).
+ - **0.5** - collect approximately 50% of logs.
+ - **0** - collect no logs (effectively disables logging without removing the
+ policy).
+ """
+
name: str
"""Name of the policy."""
diff --git a/src/gcore/types/cdn/logs_uploader/policy_replace_params.py b/src/gcore/types/cdn/logs_uploader/policy_replace_params.py
index cc779079..1087c1f7 100644
--- a/src/gcore/types/cdn/logs_uploader/policy_replace_params.py
+++ b/src/gcore/types/cdn/logs_uploader/policy_replace_params.py
@@ -59,6 +59,17 @@ class PolicyReplaceParams(TypedDict, total=False):
include_shield_logs: bool
"""Include logs from origin shielding in the upload."""
+ log_sample_rate: float
+ """Sampling rate for logs.
+
+ A value between 0 and 1 that determines the fraction of log entries to collect.
+
+ - **1** - collect all logs (default).
+ - **0.5** - collect approximately 50% of logs.
+ - **0** - collect no logs (effectively disables logging without removing the
+ policy).
+ """
+
name: str
"""Name of the policy."""
diff --git a/src/gcore/types/cdn/logs_uploader/policy_update_params.py b/src/gcore/types/cdn/logs_uploader/policy_update_params.py
index 0e8ce99d..43ad9e99 100644
--- a/src/gcore/types/cdn/logs_uploader/policy_update_params.py
+++ b/src/gcore/types/cdn/logs_uploader/policy_update_params.py
@@ -59,6 +59,17 @@ class PolicyUpdateParams(TypedDict, total=False):
include_shield_logs: bool
"""Include logs from origin shielding in the upload."""
+ log_sample_rate: float
+ """Sampling rate for logs.
+
+ A value between 0 and 1 that determines the fraction of log entries to collect.
+
+ - **1** - collect all logs (default).
+ - **0.5** - collect approximately 50% of logs.
+ - **0** - collect no logs (effectively disables logging without removing the
+ policy).
+ """
+
name: str
"""Name of the policy."""
diff --git a/tests/api_resources/cdn/logs_uploader/test_policies.py b/tests/api_resources/cdn/logs_uploader/test_policies.py
index e197ed4c..249b03cc 100644
--- a/tests/api_resources/cdn/logs_uploader/test_policies.py
+++ b/tests/api_resources/cdn/logs_uploader/test_policies.py
@@ -39,6 +39,7 @@ def test_method_create_with_all_params(self, client: Gcore) -> None:
format_type="json",
include_empty_logs=True,
include_shield_logs=True,
+ log_sample_rate=1,
name="Policy",
retry_interval_minutes=32,
rotate_interval_minutes=32,
@@ -89,6 +90,7 @@ def test_method_update_with_all_params(self, client: Gcore) -> None:
format_type="json",
include_empty_logs=True,
include_shield_logs=True,
+ log_sample_rate=0.5,
name="Policy",
retry_interval_minutes=32,
rotate_interval_minutes=32,
@@ -263,6 +265,7 @@ def test_method_replace_with_all_params(self, client: Gcore) -> None:
format_type="json",
include_empty_logs=True,
include_shield_logs=True,
+ log_sample_rate=1,
name="Policy",
retry_interval_minutes=32,
rotate_interval_minutes=32,
@@ -320,6 +323,7 @@ async def test_method_create_with_all_params(self, async_client: AsyncGcore) ->
format_type="json",
include_empty_logs=True,
include_shield_logs=True,
+ log_sample_rate=1,
name="Policy",
retry_interval_minutes=32,
rotate_interval_minutes=32,
@@ -370,6 +374,7 @@ async def test_method_update_with_all_params(self, async_client: AsyncGcore) ->
format_type="json",
include_empty_logs=True,
include_shield_logs=True,
+ log_sample_rate=0.5,
name="Policy",
retry_interval_minutes=32,
rotate_interval_minutes=32,
@@ -544,6 +549,7 @@ async def test_method_replace_with_all_params(self, async_client: AsyncGcore) ->
format_type="json",
include_empty_logs=True,
include_shield_logs=True,
+ log_sample_rate=1,
name="Policy",
retry_interval_minutes=32,
rotate_interval_minutes=32,
From ce8ca57dca917fe87e825b2f0f116e5891ac0359 Mon Sep 17 00:00:00 2001
From: "stainless-app[bot]"
<142633134+stainless-app[bot]@users.noreply.github.com>
Date: Fri, 13 Feb 2026 10:22:43 +0000
Subject: [PATCH 9/9] release: 0.33.0
---
.release-please-manifest.json | 2 +-
CHANGELOG.md | 15 +++++++++++++++
pyproject.toml | 2 +-
src/gcore/_version.py | 2 +-
4 files changed, 18 insertions(+), 3 deletions(-)
diff --git a/.release-please-manifest.json b/.release-please-manifest.json
index f04d0896..57dc0c3d 100644
--- a/.release-please-manifest.json
+++ b/.release-please-manifest.json
@@ -1,3 +1,3 @@
{
- ".": "0.32.0"
+ ".": "0.33.0"
}
\ No newline at end of file
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 9a2a6a34..d90a52da 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,20 @@
# Changelog
+## 0.33.0 (2026-02-13)
+
+Full Changelog: [v0.32.0...v0.33.0](https://github.com/G-Core/gcore-python/compare/v0.32.0...v0.33.0)
+
+### Features
+
+* **api:** aggregated API specs update ([d6b782c](https://github.com/G-Core/gcore-python/commit/d6b782c24f6534edc3c2013d644e0d5f9fdffac5))
+* **api:** revert(cdn): remove client_config subresource ([#207](https://github.com/G-Core/gcore-python/issues/207)) ([6bc418a](https://github.com/G-Core/gcore-python/commit/6bc418acdcfed56957b6c571ee2f6f29efa3663e))
+* **cdn:** add client_config subresource for terraform ([5359417](https://github.com/G-Core/gcore-python/commit/535941718238395cdfc524c0bc5b59b4109fd8d1))
+
+
+### Chores
+
+* format all `api.md` files ([6f7ec77](https://github.com/G-Core/gcore-python/commit/6f7ec778e65dce7a413619b85df204268f26d178))
+
## 0.32.0 (2026-02-11)
Full Changelog: [v0.31.0...v0.32.0](https://github.com/G-Core/gcore-python/compare/v0.31.0...v0.32.0)
diff --git a/pyproject.toml b/pyproject.toml
index 98c0ae3c..3c044082 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,6 +1,6 @@
[project]
name = "gcore"
-version = "0.32.0"
+version = "0.33.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 0211e7f4..f2c32ca0 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.32.0" # x-release-please-version
+__version__ = "0.33.0" # x-release-please-version