diff --git a/src/libs/OpenRouter/Generated/OpenRouter.GuardrailsClient.Create.g.cs b/src/libs/OpenRouter/Generated/OpenRouter.GuardrailsClient.Create.g.cs
index 90273ab5..08b2a24a 100644
--- a/src/libs/OpenRouter/Generated/OpenRouter.GuardrailsClient.Create.g.cs
+++ b/src/libs/OpenRouter/Generated/OpenRouter.GuardrailsClient.Create.g.cs
@@ -587,6 +587,10 @@ partial void ProcessCreateResponseContent(
/// Create a guardrail
/// Create a new guardrail for the authenticated user. A newly created guardrail enforces nothing until it is assigned to API keys or organization members; `workspace_id` places the guardrail in a workspace but does not apply it to that workspace's traffic. To restrict all traffic in a workspace, update the workspace's default guardrail instead. Set `allowed_data_regions` to enforce [In-Region Routing](/docs/guides/features/in-region-routing#enforcing-in-region-routing-with-guardrails): governed requests must arrive through one of the listed OpenRouter domains and are rejected with a 403 otherwise. [Management key](/docs/guides/overview/auth/management-api-keys) required.
///
+ ///
+ /// Whether ZDR requests for Google models may use Safety Retention endpoints, which keep only prompts flagged by safety classifiers. `false` requires strict ZDR for Google. `null` inherits the account setting, which is on by default. A guardrail cannot turn this on for an account that turned it off.
+ /// Example: true
+ ///
///
/// Data regions through which requests governed by this guardrail must arrive. `global` is https://openrouter.ai, `europe` is https://eu.openrouter.ai, and `us` is https://us.openrouter.ai. Requests arriving through any other region are rejected. `null` leaves the ingress region unrestricted. When several guardrails apply (workspace default, member, API key), the effective regions are the intersection of every non-null value. An empty array is rejected.
/// Example: [europe]
@@ -676,6 +680,7 @@ partial void ProcessCreateResponseContent(
///
public async global::System.Threading.Tasks.Task CreateAsync(
string name,
+ bool? allowSafetyRetentionGoogle = default,
global::System.Collections.Generic.IList? allowedDataRegions = default,
global::System.Collections.Generic.IList? allowedModels = default,
global::System.Collections.Generic.IList? allowedProviders = default,
@@ -701,6 +706,7 @@ partial void ProcessCreateResponseContent(
{
var __request = new global::OpenRouter.CreateGuardrailRequest
{
+ AllowSafetyRetentionGoogle = allowSafetyRetentionGoogle,
AllowedDataRegions = allowedDataRegions,
AllowedModels = allowedModels,
AllowedProviders = allowedProviders,
diff --git a/src/libs/OpenRouter/Generated/OpenRouter.GuardrailsClient.Update.g.cs b/src/libs/OpenRouter/Generated/OpenRouter.GuardrailsClient.Update.g.cs
index 4140a5a3..7cadeed6 100644
--- a/src/libs/OpenRouter/Generated/OpenRouter.GuardrailsClient.Update.g.cs
+++ b/src/libs/OpenRouter/Generated/OpenRouter.GuardrailsClient.Update.g.cs
@@ -680,6 +680,10 @@ partial void ProcessUpdateResponseContent(
/// The unique identifier of the guardrail to update
/// Example: 550e8400-e29b-41d4-a716-446655440000
///
+ ///
+ /// Whether ZDR requests for Google models may use Safety Retention endpoints, which keep only prompts flagged by safety classifiers. `false` requires strict ZDR for Google. `null` inherits the account setting, which is on by default. A guardrail cannot turn this on for an account that turned it off.
+ /// Example: true
+ ///
///
/// Data regions through which requests governed by this guardrail must arrive. `global` is https://openrouter.ai, `europe` is https://eu.openrouter.ai, and `us` is https://us.openrouter.ai. Requests arriving through any other region are rejected. `null` leaves the ingress region unrestricted. When several guardrails apply (workspace default, member, API key), the effective regions are the intersection of every non-null value. An empty array is rejected.
/// Example: [europe]
@@ -765,6 +769,7 @@ partial void ProcessUpdateResponseContent(
///
public async global::System.Threading.Tasks.Task UpdateAsync(
global::System.Guid id,
+ bool? allowSafetyRetentionGoogle = default,
global::System.Collections.Generic.IList? allowedDataRegions = default,
global::System.Collections.Generic.IList? allowedModels = default,
global::System.Collections.Generic.IList? allowedProviders = default,
@@ -790,6 +795,7 @@ partial void ProcessUpdateResponseContent(
{
var __request = new global::OpenRouter.UpdateGuardrailRequest
{
+ AllowSafetyRetentionGoogle = allowSafetyRetentionGoogle,
AllowedDataRegions = allowedDataRegions,
AllowedModels = allowedModels,
AllowedProviders = allowedProviders,
diff --git a/src/libs/OpenRouter/Generated/OpenRouter.IGuardrailsClient.Create.g.cs b/src/libs/OpenRouter/Generated/OpenRouter.IGuardrailsClient.Create.g.cs
index 7cddb17c..dde2fd66 100644
--- a/src/libs/OpenRouter/Generated/OpenRouter.IGuardrailsClient.Create.g.cs
+++ b/src/libs/OpenRouter/Generated/OpenRouter.IGuardrailsClient.Create.g.cs
@@ -36,6 +36,10 @@ public partial interface IGuardrailsClient
/// Create a guardrail
/// Create a new guardrail for the authenticated user. A newly created guardrail enforces nothing until it is assigned to API keys or organization members; `workspace_id` places the guardrail in a workspace but does not apply it to that workspace's traffic. To restrict all traffic in a workspace, update the workspace's default guardrail instead. Set `allowed_data_regions` to enforce [In-Region Routing](/docs/guides/features/in-region-routing#enforcing-in-region-routing-with-guardrails): governed requests must arrive through one of the listed OpenRouter domains and are rejected with a 403 otherwise. [Management key](/docs/guides/overview/auth/management-api-keys) required.
///
+ ///
+ /// Whether ZDR requests for Google models may use Safety Retention endpoints, which keep only prompts flagged by safety classifiers. `false` requires strict ZDR for Google. `null` inherits the account setting, which is on by default. A guardrail cannot turn this on for an account that turned it off.
+ /// Example: true
+ ///
///
/// Data regions through which requests governed by this guardrail must arrive. `global` is https://openrouter.ai, `europe` is https://eu.openrouter.ai, and `us` is https://us.openrouter.ai. Requests arriving through any other region are rejected. `null` leaves the ingress region unrestricted. When several guardrails apply (workspace default, member, API key), the effective regions are the intersection of every non-null value. An empty array is rejected.
/// Example: [europe]
@@ -125,6 +129,7 @@ public partial interface IGuardrailsClient
///
global::System.Threading.Tasks.Task CreateAsync(
string name,
+ bool? allowSafetyRetentionGoogle = default,
global::System.Collections.Generic.IList? allowedDataRegions = default,
global::System.Collections.Generic.IList? allowedModels = default,
global::System.Collections.Generic.IList? allowedProviders = default,
diff --git a/src/libs/OpenRouter/Generated/OpenRouter.IGuardrailsClient.Update.g.cs b/src/libs/OpenRouter/Generated/OpenRouter.IGuardrailsClient.Update.g.cs
index a442d676..56f3522b 100644
--- a/src/libs/OpenRouter/Generated/OpenRouter.IGuardrailsClient.Update.g.cs
+++ b/src/libs/OpenRouter/Generated/OpenRouter.IGuardrailsClient.Update.g.cs
@@ -50,6 +50,10 @@ public partial interface IGuardrailsClient
/// The unique identifier of the guardrail to update
/// Example: 550e8400-e29b-41d4-a716-446655440000
///
+ ///
+ /// Whether ZDR requests for Google models may use Safety Retention endpoints, which keep only prompts flagged by safety classifiers. `false` requires strict ZDR for Google. `null` inherits the account setting, which is on by default. A guardrail cannot turn this on for an account that turned it off.
+ /// Example: true
+ ///
///
/// Data regions through which requests governed by this guardrail must arrive. `global` is https://openrouter.ai, `europe` is https://eu.openrouter.ai, and `us` is https://us.openrouter.ai. Requests arriving through any other region are rejected. `null` leaves the ingress region unrestricted. When several guardrails apply (workspace default, member, API key), the effective regions are the intersection of every non-null value. An empty array is rejected.
/// Example: [europe]
@@ -135,6 +139,7 @@ public partial interface IGuardrailsClient
///
global::System.Threading.Tasks.Task UpdateAsync(
global::System.Guid id,
+ bool? allowSafetyRetentionGoogle = default,
global::System.Collections.Generic.IList? allowedDataRegions = default,
global::System.Collections.Generic.IList? allowedModels = default,
global::System.Collections.Generic.IList? allowedProviders = default,
diff --git a/src/libs/OpenRouter/Generated/OpenRouter.Models.CreateGuardrailRequest.g.cs b/src/libs/OpenRouter/Generated/OpenRouter.Models.CreateGuardrailRequest.g.cs
index ae29b777..4cee06cd 100644
--- a/src/libs/OpenRouter/Generated/OpenRouter.Models.CreateGuardrailRequest.g.cs
+++ b/src/libs/OpenRouter/Generated/OpenRouter.Models.CreateGuardrailRequest.g.cs
@@ -6,10 +6,18 @@
namespace OpenRouter
{
///
- /// Example: {"allowed_models":null,"allowed_providers":["openai","anthropic","deepseek"],"content_filter_builtins":[{"action":"block","slug":"regex-prompt-injection"}],"content_filters":null,"description":"A guardrail for limiting API usage","enforce_zdr_anthropic":true,"enforce_zdr_google":false,"enforce_zdr_openai":true,"enforce_zdr_other":false,"enforce_zdr_xai":false,"ignored_models":null,"ignored_providers":null,"limit_usd":50,"name":"My New Guardrail","reset_interval":"monthly"}
+ /// Example: {"allow_safety_retention_google":null,"allowed_models":null,"allowed_providers":["openai","anthropic","deepseek"],"content_filter_builtins":[{"action":"block","slug":"regex-prompt-injection"}],"content_filters":null,"description":"A guardrail for limiting API usage","enforce_zdr_anthropic":true,"enforce_zdr_google":false,"enforce_zdr_openai":true,"enforce_zdr_other":false,"enforce_zdr_xai":false,"ignored_models":null,"ignored_providers":null,"limit_usd":50,"name":"My New Guardrail","reset_interval":"monthly"}
///
public sealed partial class CreateGuardrailRequest
{
+ ///
+ /// Whether ZDR requests for Google models may use Safety Retention endpoints, which keep only prompts flagged by safety classifiers. `false` requires strict ZDR for Google. `null` inherits the account setting, which is on by default. A guardrail cannot turn this on for an account that turned it off.
+ /// Example: true
+ ///
+ /// true
+ [global::System.Text.Json.Serialization.JsonPropertyName("allow_safety_retention_google")]
+ public bool? AllowSafetyRetentionGoogle { get; set; }
+
///
/// Data regions through which requests governed by this guardrail must arrive. `global` is https://openrouter.ai, `europe` is https://eu.openrouter.ai, and `us` is https://us.openrouter.ai. Requests arriving through any other region are rejected. `null` leaves the ingress region unrestricted. When several guardrails apply (workspace default, member, API key), the effective regions are the intersection of every non-null value. An empty array is rejected.
/// Example: [europe]
@@ -202,6 +210,10 @@ public sealed partial class CreateGuardrailRequest
/// Name for the new guardrail
/// Example: My New Guardrail
///
+ ///
+ /// Whether ZDR requests for Google models may use Safety Retention endpoints, which keep only prompts flagged by safety classifiers. `false` requires strict ZDR for Google. `null` inherits the account setting, which is on by default. A guardrail cannot turn this on for an account that turned it off.
+ /// Example: true
+ ///
///
/// Data regions through which requests governed by this guardrail must arrive. `global` is https://openrouter.ai, `europe` is https://eu.openrouter.ai, and `us` is https://us.openrouter.ai. Requests arriving through any other region are rejected. `null` leaves the ingress region unrestricted. When several guardrails apply (workspace default, member, API key), the effective regions are the intersection of every non-null value. An empty array is rejected.
/// Example: [europe]
@@ -287,6 +299,7 @@ public sealed partial class CreateGuardrailRequest
#endif
public CreateGuardrailRequest(
string name,
+ bool? allowSafetyRetentionGoogle,
global::System.Collections.Generic.IList? allowedDataRegions,
global::System.Collections.Generic.IList? allowedModels,
global::System.Collections.Generic.IList? allowedProviders,
@@ -308,6 +321,7 @@ public CreateGuardrailRequest(
global::OpenRouter.GuardrailInterval? resetInterval,
global::System.Guid? workspaceId)
{
+ this.AllowSafetyRetentionGoogle = allowSafetyRetentionGoogle;
this.AllowedDataRegions = allowedDataRegions;
this.AllowedModels = allowedModels;
this.AllowedProviders = allowedProviders;
diff --git a/src/libs/OpenRouter/Generated/OpenRouter.Models.CreateGuardrailResponse.g.cs b/src/libs/OpenRouter/Generated/OpenRouter.Models.CreateGuardrailResponse.g.cs
index 80d01d5f..c6946530 100644
--- a/src/libs/OpenRouter/Generated/OpenRouter.Models.CreateGuardrailResponse.g.cs
+++ b/src/libs/OpenRouter/Generated/OpenRouter.Models.CreateGuardrailResponse.g.cs
@@ -4,7 +4,7 @@
namespace OpenRouter
{
///
- /// Example: {"data":{"allowed_models":null,"allowed_providers":["openai","anthropic","google"],"content_filter_builtins":[{"action":"redact","label":"[EMAIL]","slug":"email"}],"content_filters":null,"created_at":"2025-08-24T10:30:00Z","description":"A guardrail for limiting API usage","enable_free_model_publication":false,"enable_free_model_training":true,"enable_paid_model_training":true,"enforce_zdr":null,"enforce_zdr_anthropic":true,"enforce_zdr_google":false,"enforce_zdr_openai":true,"enforce_zdr_other":false,"enforce_zdr_xai":false,"id":"550e8400-e29b-41d4-a716-446655440000","ignored_models":null,"ignored_providers":null,"include_byok_in_budgets":false,"limit_usd":50,"name":"My New Guardrail","reset_interval":"monthly","updated_at":null,"workspace_id":"0df9e665-d932-5740-b2c7-b52af166bc11"}}
+ /// Example: {"data":{"allow_safety_retention_google":null,"allowed_models":null,"allowed_providers":["openai","anthropic","google"],"content_filter_builtins":[{"action":"redact","label":"[EMAIL]","slug":"email"}],"content_filters":null,"created_at":"2025-08-24T10:30:00Z","description":"A guardrail for limiting API usage","enable_free_model_publication":false,"enable_free_model_training":true,"enable_paid_model_training":true,"enforce_zdr":null,"enforce_zdr_anthropic":true,"enforce_zdr_google":false,"enforce_zdr_openai":true,"enforce_zdr_other":false,"enforce_zdr_xai":false,"id":"550e8400-e29b-41d4-a716-446655440000","ignored_models":null,"ignored_providers":null,"include_byok_in_budgets":false,"limit_usd":50,"name":"My New Guardrail","reset_interval":"monthly","updated_at":null,"workspace_id":"0df9e665-d932-5740-b2c7-b52af166bc11"}}
///
public sealed partial class CreateGuardrailResponse
{
diff --git a/src/libs/OpenRouter/Generated/OpenRouter.Models.GetGuardrailResponse.g.cs b/src/libs/OpenRouter/Generated/OpenRouter.Models.GetGuardrailResponse.g.cs
index facf178c..9f5944d1 100644
--- a/src/libs/OpenRouter/Generated/OpenRouter.Models.GetGuardrailResponse.g.cs
+++ b/src/libs/OpenRouter/Generated/OpenRouter.Models.GetGuardrailResponse.g.cs
@@ -4,7 +4,7 @@
namespace OpenRouter
{
///
- /// Example: {"data":{"allowed_models":null,"allowed_providers":["openai","anthropic","google"],"content_filter_builtins":[{"action":"redact","label":"[EMAIL]","slug":"email"}],"content_filters":null,"created_at":"2025-08-24T10:30:00Z","description":"Guardrail for production environment","enable_free_model_publication":false,"enable_free_model_training":true,"enable_paid_model_training":true,"enforce_zdr":null,"enforce_zdr_anthropic":true,"enforce_zdr_google":false,"enforce_zdr_openai":true,"enforce_zdr_other":false,"enforce_zdr_xai":false,"id":"550e8400-e29b-41d4-a716-446655440000","ignored_models":null,"ignored_providers":null,"include_byok_in_budgets":false,"limit_usd":100,"name":"Production Guardrail","reset_interval":"monthly","updated_at":"2025-08-24T15:45:00Z","workspace_id":"0df9e665-d932-5740-b2c7-b52af166bc11"}}
+ /// Example: {"data":{"allow_safety_retention_google":null,"allowed_models":null,"allowed_providers":["openai","anthropic","google"],"content_filter_builtins":[{"action":"redact","label":"[EMAIL]","slug":"email"}],"content_filters":null,"created_at":"2025-08-24T10:30:00Z","description":"Guardrail for production environment","enable_free_model_publication":false,"enable_free_model_training":true,"enable_paid_model_training":true,"enforce_zdr":null,"enforce_zdr_anthropic":true,"enforce_zdr_google":false,"enforce_zdr_openai":true,"enforce_zdr_other":false,"enforce_zdr_xai":false,"id":"550e8400-e29b-41d4-a716-446655440000","ignored_models":null,"ignored_providers":null,"include_byok_in_budgets":false,"limit_usd":100,"name":"Production Guardrail","reset_interval":"monthly","updated_at":"2025-08-24T15:45:00Z","workspace_id":"0df9e665-d932-5740-b2c7-b52af166bc11"}}
///
public sealed partial class GetGuardrailResponse
{
diff --git a/src/libs/OpenRouter/Generated/OpenRouter.Models.Guardrail.g.cs b/src/libs/OpenRouter/Generated/OpenRouter.Models.Guardrail.g.cs
index 3e3ab447..28ead8b2 100644
--- a/src/libs/OpenRouter/Generated/OpenRouter.Models.Guardrail.g.cs
+++ b/src/libs/OpenRouter/Generated/OpenRouter.Models.Guardrail.g.cs
@@ -6,10 +6,18 @@
namespace OpenRouter
{
///
- /// Example: {"allowed_data_regions":null,"allowed_models":null,"allowed_providers":["openai","anthropic","google"],"content_filter_builtins":[{"action":"redact","label":"[EMAIL]","slug":"email"}],"content_filters":null,"created_at":"2025-08-24T10:30:00Z","description":"Guardrail for production environment","enable_free_model_publication":false,"enable_free_model_training":true,"enable_paid_model_training":true,"enforce_zdr":null,"enforce_zdr_anthropic":true,"enforce_zdr_google":false,"enforce_zdr_openai":true,"enforce_zdr_other":false,"enforce_zdr_xai":false,"id":"550e8400-e29b-41d4-a716-446655440000","ignored_models":null,"ignored_providers":null,"include_byok_in_budgets":false,"limit_usd":100,"name":"Production Guardrail","reset_interval":"monthly","updated_at":"2025-08-24T15:45:00Z","workspace_id":"0df9e665-d932-5740-b2c7-b52af166bc11"}
+ /// Example: {"allow_safety_retention_google":null,"allowed_data_regions":null,"allowed_models":null,"allowed_providers":["openai","anthropic","google"],"content_filter_builtins":[{"action":"redact","label":"[EMAIL]","slug":"email"}],"content_filters":null,"created_at":"2025-08-24T10:30:00Z","description":"Guardrail for production environment","enable_free_model_publication":false,"enable_free_model_training":true,"enable_paid_model_training":true,"enforce_zdr":null,"enforce_zdr_anthropic":true,"enforce_zdr_google":false,"enforce_zdr_openai":true,"enforce_zdr_other":false,"enforce_zdr_xai":false,"id":"550e8400-e29b-41d4-a716-446655440000","ignored_models":null,"ignored_providers":null,"include_byok_in_budgets":false,"limit_usd":100,"name":"Production Guardrail","reset_interval":"monthly","updated_at":"2025-08-24T15:45:00Z","workspace_id":"0df9e665-d932-5740-b2c7-b52af166bc11"}
///
public sealed partial class Guardrail
{
+ ///
+ /// Whether ZDR requests for Google models may use Safety Retention endpoints, which keep only prompts flagged by safety classifiers. `false` requires strict ZDR for Google. `null` inherits the account setting, which is on by default. A guardrail cannot turn this on for an account that turned it off.
+ /// Example: true
+ ///
+ /// true
+ [global::System.Text.Json.Serialization.JsonPropertyName("allow_safety_retention_google")]
+ public bool? AllowSafetyRetentionGoogle { get; set; }
+
///
/// Data regions through which requests governed by this guardrail must arrive. `global` is https://openrouter.ai, `europe` is https://eu.openrouter.ai, and `us` is https://us.openrouter.ai. Requests arriving through any other region are rejected. `null` leaves the ingress region unrestricted. When several guardrails apply (workspace default, member, API key), the effective regions are the intersection of every non-null value.
/// Example: [europe]
@@ -241,6 +249,10 @@ public sealed partial class Guardrail
/// Name of the guardrail
/// Example: Production Guardrail
///
+ ///
+ /// Whether ZDR requests for Google models may use Safety Retention endpoints, which keep only prompts flagged by safety classifiers. `false` requires strict ZDR for Google. `null` inherits the account setting, which is on by default. A guardrail cannot turn this on for an account that turned it off.
+ /// Example: true
+ ///
///
/// Data regions through which requests governed by this guardrail must arrive. `global` is https://openrouter.ai, `europe` is https://eu.openrouter.ai, and `us` is https://us.openrouter.ai. Requests arriving through any other region are rejected. `null` leaves the ingress region unrestricted. When several guardrails apply (workspace default, member, API key), the effective regions are the intersection of every non-null value.
/// Example: [europe]
@@ -329,6 +341,7 @@ public Guardrail(
global::System.Guid id,
bool includeByokInBudgets,
string name,
+ bool? allowSafetyRetentionGoogle,
global::System.Collections.Generic.IList? allowedDataRegions,
global::System.Collections.Generic.IList? allowedModels,
global::System.Collections.Generic.IList? allowedProviders,
@@ -350,6 +363,7 @@ public Guardrail(
string? updatedAt,
string? workspaceId)
{
+ this.AllowSafetyRetentionGoogle = allowSafetyRetentionGoogle;
this.AllowedDataRegions = allowedDataRegions;
this.AllowedModels = allowedModels;
this.AllowedProviders = allowedProviders;
diff --git a/src/libs/OpenRouter/Generated/OpenRouter.Models.ListGuardrailsResponse.g.cs b/src/libs/OpenRouter/Generated/OpenRouter.Models.ListGuardrailsResponse.g.cs
index 7a1a8d62..f8a5682d 100644
--- a/src/libs/OpenRouter/Generated/OpenRouter.Models.ListGuardrailsResponse.g.cs
+++ b/src/libs/OpenRouter/Generated/OpenRouter.Models.ListGuardrailsResponse.g.cs
@@ -4,7 +4,7 @@
namespace OpenRouter
{
///
- /// Example: {"data":[{"allowed_models":null,"allowed_providers":["openai","anthropic","google"],"content_filter_builtins":[{"action":"redact","label":"[EMAIL]","slug":"email"}],"content_filters":null,"created_at":"2025-08-24T10:30:00Z","description":"Guardrail for production environment","enable_free_model_publication":false,"enable_free_model_training":true,"enable_paid_model_training":true,"enforce_zdr":null,"enforce_zdr_anthropic":true,"enforce_zdr_google":false,"enforce_zdr_openai":true,"enforce_zdr_other":false,"enforce_zdr_xai":false,"id":"550e8400-e29b-41d4-a716-446655440000","ignored_models":null,"ignored_providers":null,"include_byok_in_budgets":false,"limit_usd":100,"name":"Production Guardrail","reset_interval":"monthly","updated_at":"2025-08-24T15:45:00Z","workspace_id":"0df9e665-d932-5740-b2c7-b52af166bc11"}],"total_count":1}
+ /// Example: {"data":[{"allow_safety_retention_google":null,"allowed_models":null,"allowed_providers":["openai","anthropic","google"],"content_filter_builtins":[{"action":"redact","label":"[EMAIL]","slug":"email"}],"content_filters":null,"created_at":"2025-08-24T10:30:00Z","description":"Guardrail for production environment","enable_free_model_publication":false,"enable_free_model_training":true,"enable_paid_model_training":true,"enforce_zdr":null,"enforce_zdr_anthropic":true,"enforce_zdr_google":false,"enforce_zdr_openai":true,"enforce_zdr_other":false,"enforce_zdr_xai":false,"id":"550e8400-e29b-41d4-a716-446655440000","ignored_models":null,"ignored_providers":null,"include_byok_in_budgets":false,"limit_usd":100,"name":"Production Guardrail","reset_interval":"monthly","updated_at":"2025-08-24T15:45:00Z","workspace_id":"0df9e665-d932-5740-b2c7-b52af166bc11"}],"total_count":1}
///
public sealed partial class ListGuardrailsResponse
{
diff --git a/src/libs/OpenRouter/Generated/OpenRouter.Models.MessagesResultVariant2.g.cs b/src/libs/OpenRouter/Generated/OpenRouter.Models.MessagesResultVariant2.g.cs
index d963c630..77ebb46d 100644
--- a/src/libs/OpenRouter/Generated/OpenRouter.Models.MessagesResultVariant2.g.cs
+++ b/src/libs/OpenRouter/Generated/OpenRouter.Models.MessagesResultVariant2.g.cs
@@ -22,10 +22,12 @@ public sealed partial class MessagesResultVariant2
public global::OpenRouter.OpenRouterMetadata? OpenrouterMetadata { get; set; }
///
- ///
+ /// Example: OpenAI
///
+ /// OpenAI
[global::System.Text.Json.Serialization.JsonPropertyName("provider")]
- public string? Provider { get; set; }
+ [global::System.Text.Json.Serialization.JsonConverter(typeof(global::OpenRouter.JsonConverters.ProviderNameJsonConverter))]
+ public global::OpenRouter.ProviderName? Provider { get; set; }
///
///
@@ -54,7 +56,9 @@ public sealed partial class MessagesResultVariant2
///
/// Example: {"attempt":1,"endpoints":{"available":[{"model":"openai/gpt-4o","provider":"OpenAI","selected":true}],"total":1},"generation_time":2016,"is_byok":false,"region":"iad","requested":"openai/gpt-4o","strategy":"direct","summary":"available=1, selected=OpenAI"}
///
- ///
+ ///
+ /// Example: OpenAI
+ ///
///
///
/// Example: {"cache_creation":null,"cache_creation_input_tokens":null,"cache_read_input_tokens":null,"inference_geo":null,"input_tokens":100,"output_tokens":50,"output_tokens_details":null,"server_tool_use":null,"service_tier":"standard"}
@@ -65,7 +69,7 @@ public sealed partial class MessagesResultVariant2
public MessagesResultVariant2(
global::OpenRouter.MessagesResultVariant2ContextManagement? contextManagement,
global::OpenRouter.OpenRouterMetadata? openrouterMetadata,
- string? provider,
+ global::OpenRouter.ProviderName? provider,
global::System.Collections.Generic.IList? safeguardResults,
global::OpenRouter.AllOf? usage)
{
diff --git a/src/libs/OpenRouter/Generated/OpenRouter.Models.UpdateGuardrailRequest.g.cs b/src/libs/OpenRouter/Generated/OpenRouter.Models.UpdateGuardrailRequest.g.cs
index ebf8b580..25f3f32d 100644
--- a/src/libs/OpenRouter/Generated/OpenRouter.Models.UpdateGuardrailRequest.g.cs
+++ b/src/libs/OpenRouter/Generated/OpenRouter.Models.UpdateGuardrailRequest.g.cs
@@ -10,6 +10,14 @@ namespace OpenRouter
///
public sealed partial class UpdateGuardrailRequest
{
+ ///
+ /// Whether ZDR requests for Google models may use Safety Retention endpoints, which keep only prompts flagged by safety classifiers. `false` requires strict ZDR for Google. `null` inherits the account setting, which is on by default. A guardrail cannot turn this on for an account that turned it off.
+ /// Example: true
+ ///
+ /// true
+ [global::System.Text.Json.Serialization.JsonPropertyName("allow_safety_retention_google")]
+ public bool? AllowSafetyRetentionGoogle { get; set; }
+
///
/// Data regions through which requests governed by this guardrail must arrive. `global` is https://openrouter.ai, `europe` is https://eu.openrouter.ai, and `us` is https://us.openrouter.ai. Requests arriving through any other region are rejected. `null` leaves the ingress region unrestricted. When several guardrails apply (workspace default, member, API key), the effective regions are the intersection of every non-null value. An empty array is rejected.
/// Example: [europe]
@@ -189,6 +197,10 @@ public sealed partial class UpdateGuardrailRequest
///
/// Initializes a new instance of the class.
///
+ ///
+ /// Whether ZDR requests for Google models may use Safety Retention endpoints, which keep only prompts flagged by safety classifiers. `false` requires strict ZDR for Google. `null` inherits the account setting, which is on by default. A guardrail cannot turn this on for an account that turned it off.
+ /// Example: true
+ ///
///
/// Data regions through which requests governed by this guardrail must arrive. `global` is https://openrouter.ai, `europe` is https://eu.openrouter.ai, and `us` is https://us.openrouter.ai. Requests arriving through any other region are rejected. `null` leaves the ingress region unrestricted. When several guardrails apply (workspace default, member, API key), the effective regions are the intersection of every non-null value. An empty array is rejected.
/// Example: [europe]
@@ -273,6 +285,7 @@ public sealed partial class UpdateGuardrailRequest
[global::System.Diagnostics.CodeAnalysis.SetsRequiredMembers]
#endif
public UpdateGuardrailRequest(
+ bool? allowSafetyRetentionGoogle,
global::System.Collections.Generic.IList? allowedDataRegions,
global::System.Collections.Generic.IList? allowedModels,
global::System.Collections.Generic.IList? allowedProviders,
@@ -294,6 +307,7 @@ public UpdateGuardrailRequest(
string? name,
global::OpenRouter.GuardrailInterval? resetInterval)
{
+ this.AllowSafetyRetentionGoogle = allowSafetyRetentionGoogle;
this.AllowedDataRegions = allowedDataRegions;
this.AllowedModels = allowedModels;
this.AllowedProviders = allowedProviders;
diff --git a/src/libs/OpenRouter/Generated/OpenRouter.Models.UpdateGuardrailResponse.g.cs b/src/libs/OpenRouter/Generated/OpenRouter.Models.UpdateGuardrailResponse.g.cs
index b7f54a34..4b8556b9 100644
--- a/src/libs/OpenRouter/Generated/OpenRouter.Models.UpdateGuardrailResponse.g.cs
+++ b/src/libs/OpenRouter/Generated/OpenRouter.Models.UpdateGuardrailResponse.g.cs
@@ -4,7 +4,7 @@
namespace OpenRouter
{
///
- /// Example: {"data":{"allowed_models":null,"allowed_providers":["openai"],"content_filter_builtins":[{"action":"redact","label":"[EMAIL]","slug":"email"}],"content_filters":null,"created_at":"2025-08-24T10:30:00Z","description":"Updated description","enable_free_model_publication":false,"enable_free_model_training":true,"enable_paid_model_training":true,"enforce_zdr":null,"enforce_zdr_anthropic":true,"enforce_zdr_google":true,"enforce_zdr_openai":true,"enforce_zdr_other":true,"enforce_zdr_xai":true,"id":"550e8400-e29b-41d4-a716-446655440000","ignored_models":null,"ignored_providers":null,"include_byok_in_budgets":true,"limit_usd":75,"name":"Updated Guardrail Name","reset_interval":"weekly","updated_at":"2025-08-24T16:00:00Z","workspace_id":"0df9e665-d932-5740-b2c7-b52af166bc11"}}
+ /// Example: {"data":{"allow_safety_retention_google":null,"allowed_models":null,"allowed_providers":["openai"],"content_filter_builtins":[{"action":"redact","label":"[EMAIL]","slug":"email"}],"content_filters":null,"created_at":"2025-08-24T10:30:00Z","description":"Updated description","enable_free_model_publication":false,"enable_free_model_training":true,"enable_paid_model_training":true,"enforce_zdr":null,"enforce_zdr_anthropic":true,"enforce_zdr_google":true,"enforce_zdr_openai":true,"enforce_zdr_other":true,"enforce_zdr_xai":true,"id":"550e8400-e29b-41d4-a716-446655440000","ignored_models":null,"ignored_providers":null,"include_byok_in_budgets":true,"limit_usd":75,"name":"Updated Guardrail Name","reset_interval":"weekly","updated_at":"2025-08-24T16:00:00Z","workspace_id":"0df9e665-d932-5740-b2c7-b52af166bc11"}}
///
public sealed partial class UpdateGuardrailResponse
{
diff --git a/src/libs/OpenRouter/Generated/autosdk.generated-examples.json b/src/libs/OpenRouter/Generated/autosdk.generated-examples.json
index 8c21fb76..06e6117e 100644
--- a/src/libs/OpenRouter/Generated/autosdk.generated-examples.json
+++ b/src/libs/OpenRouter/Generated/autosdk.generated-examples.json
@@ -567,7 +567,7 @@
"Slug": "createguardrail",
"Description": "Create a new guardrail for the authenticated user. A newly created guardrail enforces nothing until it is assigned to API keys or organization members; \u0060workspace_id\u0060 places the guardrail in a workspace but does not apply it to that workspace\u0027s traffic. To restrict all traffic in a workspace, update the workspace\u0027s default guardrail instead. Set \u0060allowed_data_regions\u0060 to enforce [In-Region Routing](/docs/guides/features/in-region-routing#enforcing-in-region-routing-with-guardrails): governed requests must arrive through one of the listed OpenRouter domains and are rejected with a 403 otherwise. [Management key](/docs/guides/overview/auth/management-api-keys) required.",
"Language": "csharp",
- "Code": "using var client = new OpenRouterClient(apiKey);\n\nvar request = global::System.Text.Json.JsonSerializer.Deserialize\u003Cglobal::OpenRouter.DecisionsRequest\u003E(\n @\u0022{\n \u0022\u0022allowed_data_regions\u0022\u0022: [\n \u0022\u0022europe\u0022\u0022\n ],\n \u0022\u0022allowed_models\u0022\u0022: null,\n \u0022\u0022allowed_providers\u0022\u0022: [\n \u0022\u0022openai\u0022\u0022,\n \u0022\u0022anthropic\u0022\u0022,\n \u0022\u0022deepseek\u0022\u0022\n ],\n \u0022\u0022description\u0022\u0022: \u0022\u0022A guardrail for limiting API usage\u0022\u0022,\n \u0022\u0022enforce_zdr_anthropic\u0022\u0022: true,\n \u0022\u0022enforce_zdr_google\u0022\u0022: false,\n \u0022\u0022enforce_zdr_openai\u0022\u0022: true,\n \u0022\u0022enforce_zdr_other\u0022\u0022: false,\n \u0022\u0022enforce_zdr_xai\u0022\u0022: false,\n \u0022\u0022ignored_models\u0022\u0022: null,\n \u0022\u0022ignored_providers\u0022\u0022: null,\n \u0022\u0022limit_usd\u0022\u0022: 50,\n \u0022\u0022name\u0022\u0022: \u0022\u0022My New Guardrail\u0022\u0022,\n \u0022\u0022reset_interval\u0022\u0022: \u0022\u0022monthly\u0022\u0022\n}\u0022)!;\n\nvar response = await client.AlphaDecisions.CreateAsync(\n request: request\n);\n\n// Example response:\n// {\n// \u0022data\u0022: {\n// \u0022allowed_models\u0022: null,\n// \u0022allowed_providers\u0022: [\n// \u0022openai\u0022,\n// \u0022anthropic\u0022,\n// \u0022google\u0022\n// ],\n// \u0022created_at\u0022: \u00222025-08-24T10:30:00Z\u0022,\n// \u0022description\u0022: \u0022A guardrail for limiting API usage\u0022,\n// \u0022enforce_zdr\u0022: null,\n// \u0022enforce_zdr_anthropic\u0022: true,\n// \u0022enforce_zdr_google\u0022: false,\n// \u0022enforce_zdr_openai\u0022: true,\n// \u0022enforce_zdr_other\u0022: false,\n// \u0022enforce_zdr_xai\u0022: false,\n// \u0022id\u0022: \u0022550e8400-e29b-41d4-a716-446655440000\u0022,\n// \u0022ignored_models\u0022: null,\n// \u0022ignored_providers\u0022: null,\n// \u0022include_byok_in_budgets\u0022: false,\n// \u0022limit_usd\u0022: 50,\n// \u0022name\u0022: \u0022My New Guardrail\u0022,\n// \u0022reset_interval\u0022: \u0022monthly\u0022,\n// \u0022updated_at\u0022: null,\n// \u0022workspace_id\u0022: \u00220df9e665-d932-5740-b2c7-b52af166bc11\u0022\n// }\n// }",
+ "Code": "using var client = new OpenRouterClient(apiKey);\n\nvar request = global::System.Text.Json.JsonSerializer.Deserialize\u003Cglobal::OpenRouter.DecisionsRequest\u003E(\n @\u0022{\n \u0022\u0022allow_safety_retention_google\u0022\u0022: null,\n \u0022\u0022allowed_data_regions\u0022\u0022: [\n \u0022\u0022europe\u0022\u0022\n ],\n \u0022\u0022allowed_models\u0022\u0022: null,\n \u0022\u0022allowed_providers\u0022\u0022: [\n \u0022\u0022openai\u0022\u0022,\n \u0022\u0022anthropic\u0022\u0022,\n \u0022\u0022deepseek\u0022\u0022\n ],\n \u0022\u0022description\u0022\u0022: \u0022\u0022A guardrail for limiting API usage\u0022\u0022,\n \u0022\u0022enforce_zdr_anthropic\u0022\u0022: true,\n \u0022\u0022enforce_zdr_google\u0022\u0022: false,\n \u0022\u0022enforce_zdr_openai\u0022\u0022: true,\n \u0022\u0022enforce_zdr_other\u0022\u0022: false,\n \u0022\u0022enforce_zdr_xai\u0022\u0022: false,\n \u0022\u0022ignored_models\u0022\u0022: null,\n \u0022\u0022ignored_providers\u0022\u0022: null,\n \u0022\u0022limit_usd\u0022\u0022: 50,\n \u0022\u0022name\u0022\u0022: \u0022\u0022My New Guardrail\u0022\u0022,\n \u0022\u0022reset_interval\u0022\u0022: \u0022\u0022monthly\u0022\u0022\n}\u0022)!;\n\nvar response = await client.AlphaDecisions.CreateAsync(\n request: request\n);\n\n// Example response:\n// {\n// \u0022data\u0022: {\n// \u0022allow_safety_retention_google\u0022: null,\n// \u0022allowed_models\u0022: null,\n// \u0022allowed_providers\u0022: [\n// \u0022openai\u0022,\n// \u0022anthropic\u0022,\n// \u0022google\u0022\n// ],\n// \u0022created_at\u0022: \u00222025-08-24T10:30:00Z\u0022,\n// \u0022description\u0022: \u0022A guardrail for limiting API usage\u0022,\n// \u0022enforce_zdr\u0022: null,\n// \u0022enforce_zdr_anthropic\u0022: true,\n// \u0022enforce_zdr_google\u0022: false,\n// \u0022enforce_zdr_openai\u0022: true,\n// \u0022enforce_zdr_other\u0022: false,\n// \u0022enforce_zdr_xai\u0022: false,\n// \u0022id\u0022: \u0022550e8400-e29b-41d4-a716-446655440000\u0022,\n// \u0022ignored_models\u0022: null,\n// \u0022ignored_providers\u0022: null,\n// \u0022include_byok_in_budgets\u0022: false,\n// \u0022limit_usd\u0022: 50,\n// \u0022name\u0022: \u0022My New Guardrail\u0022,\n// \u0022reset_interval\u0022: \u0022monthly\u0022,\n// \u0022updated_at\u0022: null,\n// \u0022workspace_id\u0022: \u00220df9e665-d932-5740-b2c7-b52af166bc11\u0022\n// }\n// }",
"Format": "sdk",
"OperationId": "createGuardrail",
"Setup": "This example assumes \u0060using OpenRouter;\u0060 is in scope and \u0060apiKey\u0060 contains the required credential."
diff --git a/src/libs/OpenRouter/openapi.yaml b/src/libs/OpenRouter/openapi.yaml
index 91f6e886..3fee085e 100644
--- a/src/libs/OpenRouter/openapi.yaml
+++ b/src/libs/OpenRouter/openapi.yaml
@@ -13528,6 +13528,7 @@
},
"CreateGuardrailRequest": {
"example": {
+ "allow_safety_retention_google": null,
"allowed_models": null,
"allowed_providers": [
"openai",
@@ -13554,6 +13555,14 @@
"reset_interval": "monthly"
},
"properties": {
+ "allow_safety_retention_google": {
+ "description": "Whether ZDR requests for Google models may use Safety Retention endpoints, which keep only prompts flagged by safety classifiers. `false` requires strict ZDR for Google. `null` inherits the account setting, which is on by default. A guardrail cannot turn this on for an account that turned it off.",
+ "example": true,
+ "type": [
+ "boolean",
+ "null"
+ ]
+ },
"allowed_data_regions": {
"description": "Data regions through which requests governed by this guardrail must arrive. `global` is https://openrouter.ai, `europe` is https://eu.openrouter.ai, and `us` is https://us.openrouter.ai. Requests arriving through any other region are rejected. `null` leaves the ingress region unrestricted. When several guardrails apply (workspace default, member, API key), the effective regions are the intersection of every non-null value. An empty array is rejected.",
"example": [
@@ -13782,6 +13791,7 @@
"CreateGuardrailResponse": {
"example": {
"data": {
+ "allow_safety_retention_google": null,
"allowed_models": null,
"allowed_providers": [
"openai",
@@ -18292,6 +18302,7 @@
"GetGuardrailResponse": {
"example": {
"data": {
+ "allow_safety_retention_google": null,
"allowed_models": null,
"allowed_providers": [
"openai",
@@ -18623,6 +18634,7 @@
},
"Guardrail": {
"example": {
+ "allow_safety_retention_google": null,
"allowed_data_regions": null,
"allowed_models": null,
"allowed_providers": [
@@ -18660,6 +18672,14 @@
"workspace_id": "0df9e665-d932-5740-b2c7-b52af166bc11"
},
"properties": {
+ "allow_safety_retention_google": {
+ "description": "Whether ZDR requests for Google models may use Safety Retention endpoints, which keep only prompts flagged by safety classifiers. `false` requires strict ZDR for Google. `null` inherits the account setting, which is on by default. A guardrail cannot turn this on for an account that turned it off.",
+ "example": true,
+ "type": [
+ "boolean",
+ "null"
+ ]
+ },
"allowed_data_regions": {
"description": "Data regions through which requests governed by this guardrail must arrive. `global` is https://openrouter.ai, `europe` is https://eu.openrouter.ai, and `us` is https://us.openrouter.ai. Requests arriving through any other region are rejected. `null` leaves the ingress region unrestricted. When several guardrails apply (workspace default, member, API key), the effective regions are the intersection of every non-null value.",
"example": [
@@ -22599,6 +22619,7 @@
"example": {
"data": [
{
+ "allow_safety_retention_google": null,
"allowed_models": null,
"allowed_providers": [
"openai",
@@ -25584,7 +25605,7 @@
"$ref": "#/components/schemas/OpenRouterMetadata"
},
"provider": {
- "type": "string"
+ "$ref": "#/components/schemas/ProviderName"
},
"safeguard_results": {
"items": {
@@ -44454,6 +44475,14 @@
"reset_interval": "weekly"
},
"properties": {
+ "allow_safety_retention_google": {
+ "description": "Whether ZDR requests for Google models may use Safety Retention endpoints, which keep only prompts flagged by safety classifiers. `false` requires strict ZDR for Google. `null` inherits the account setting, which is on by default. A guardrail cannot turn this on for an account that turned it off.",
+ "example": true,
+ "type": [
+ "boolean",
+ "null"
+ ]
+ },
"allowed_data_regions": {
"description": "Data regions through which requests governed by this guardrail must arrive. `global` is https://openrouter.ai, `europe` is https://eu.openrouter.ai, and `us` is https://us.openrouter.ai. Requests arriving through any other region are rejected. `null` leaves the ingress region unrestricted. When several guardrails apply (workspace default, member, API key), the effective regions are the intersection of every non-null value. An empty array is rejected.",
"example": [
@@ -44665,6 +44694,7 @@
"UpdateGuardrailResponse": {
"example": {
"data": {
+ "allow_safety_retention_google": null,
"allowed_models": null,
"allowed_providers": [
"openai"
@@ -56865,6 +56895,7 @@
"content": {
"application/json": {
"example": {
+ "allow_safety_retention_google": null,
"allowed_data_regions": [
"europe"
],
@@ -56899,6 +56930,7 @@
"application/json": {
"example": {
"data": {
+ "allow_safety_retention_google": null,
"allowed_models": null,
"allowed_providers": [
"openai",
@@ -57246,6 +57278,7 @@
"application/json": {
"example": {
"data": {
+ "allow_safety_retention_google": null,
"allowed_models": null,
"allowed_providers": [
"openai"