diff --git a/src/libs/Shotstack/Generated/Shotstack.EditClient.GetModels.g.cs b/src/libs/Shotstack/Generated/Shotstack.EditClient.GetModels.g.cs
index f2cc4b5..4cb17c1 100644
--- a/src/libs/Shotstack/Generated/Shotstack.EditClient.GetModels.g.cs
+++ b/src/libs/Shotstack/Generated/Shotstack.EditClient.GetModels.g.cs
@@ -48,6 +48,8 @@ partial void ProcessGetModelsResponseContent(
/// on your side. Each entry carries the asset type it generates, so filter the list
/// client side when a picker only needs one kind.
/// Option schemas are omitted by default. Request them with `expand=options`.
+ /// Each model's `available` reflects the plan of the account behind the calling API
+ /// key, so offer only the models it marks available.
/// **Base URL:** <a href="#">https://api.shotstack.io/edit/{version}</a>
///
/// Per-request overrides such as headers, query parameters, timeout, retries, and response buffering.
@@ -73,6 +75,8 @@ partial void ProcessGetModelsResponseContent(
/// on your side. Each entry carries the asset type it generates, so filter the list
/// client side when a picker only needs one kind.
/// Option schemas are omitted by default. Request them with `expand=options`.
+ /// Each model's `available` reflects the plan of the account behind the calling API
+ /// key, so offer only the models it marks available.
/// **Base URL:** <a href="#">https://api.shotstack.io/edit/{version}</a>
///
/// Per-request overrides such as headers, query parameters, timeout, retries, and response buffering.
diff --git a/src/libs/Shotstack/Generated/Shotstack.IEditClient.GetModels.g.cs b/src/libs/Shotstack/Generated/Shotstack.IEditClient.GetModels.g.cs
index 6d66aae..78cbe95 100644
--- a/src/libs/Shotstack/Generated/Shotstack.IEditClient.GetModels.g.cs
+++ b/src/libs/Shotstack/Generated/Shotstack.IEditClient.GetModels.g.cs
@@ -13,6 +13,8 @@ public partial interface IEditClient
/// on your side. Each entry carries the asset type it generates, so filter the list
/// client side when a picker only needs one kind.
/// Option schemas are omitted by default. Request them with `expand=options`.
+ /// Each model's `available` reflects the plan of the account behind the calling API
+ /// key, so offer only the models it marks available.
/// **Base URL:** <a href="#">https://api.shotstack.io/edit/{version}</a>
///
/// Per-request overrides such as headers, query parameters, timeout, retries, and response buffering.
@@ -30,6 +32,8 @@ public partial interface IEditClient
/// on your side. Each entry carries the asset type it generates, so filter the list
/// client side when a picker only needs one kind.
/// Option schemas are omitted by default. Request them with `expand=options`.
+ /// Each model's `available` reflects the plan of the account behind the calling API
+ /// key, so offer only the models it marks available.
/// **Base URL:** <a href="#">https://api.shotstack.io/edit/{version}</a>
///
/// Per-request overrides such as headers, query parameters, timeout, retries, and response buffering.
diff --git a/src/libs/Shotstack/Generated/Shotstack.JsonConverters.GenerationModelUnavailableReason.g.cs b/src/libs/Shotstack/Generated/Shotstack.JsonConverters.GenerationModelUnavailableReason.g.cs
new file mode 100644
index 0000000..3bf5fc3
--- /dev/null
+++ b/src/libs/Shotstack/Generated/Shotstack.JsonConverters.GenerationModelUnavailableReason.g.cs
@@ -0,0 +1,53 @@
+#nullable enable
+
+namespace Shotstack.JsonConverters
+{
+ ///
+ public sealed class GenerationModelUnavailableReasonJsonConverter : global::System.Text.Json.Serialization.JsonConverter
+ {
+ ///
+ public override global::Shotstack.GenerationModelUnavailableReason Read(
+ ref global::System.Text.Json.Utf8JsonReader reader,
+ global::System.Type typeToConvert,
+ global::System.Text.Json.JsonSerializerOptions options)
+ {
+ switch (reader.TokenType)
+ {
+ case global::System.Text.Json.JsonTokenType.String:
+ {
+ var stringValue = reader.GetString();
+ if (stringValue != null)
+ {
+ return global::Shotstack.GenerationModelUnavailableReasonExtensions.ToEnum(stringValue) ?? default;
+ }
+
+ break;
+ }
+ case global::System.Text.Json.JsonTokenType.Number:
+ {
+ var numValue = reader.GetInt32();
+ return (global::Shotstack.GenerationModelUnavailableReason)numValue;
+ }
+ case global::System.Text.Json.JsonTokenType.Null:
+ {
+ return default(global::Shotstack.GenerationModelUnavailableReason);
+ }
+ default:
+ throw new global::System.ArgumentOutOfRangeException(nameof(reader));
+ }
+
+ return default;
+ }
+
+ ///
+ public override void Write(
+ global::System.Text.Json.Utf8JsonWriter writer,
+ global::Shotstack.GenerationModelUnavailableReason value,
+ global::System.Text.Json.JsonSerializerOptions options)
+ {
+ writer = writer ?? throw new global::System.ArgumentNullException(nameof(writer));
+
+ writer.WriteStringValue(global::Shotstack.GenerationModelUnavailableReasonExtensions.ToValueString(value));
+ }
+ }
+}
diff --git a/src/libs/Shotstack/Generated/Shotstack.JsonConverters.GenerationModelUnavailableReasonNullable.g.cs b/src/libs/Shotstack/Generated/Shotstack.JsonConverters.GenerationModelUnavailableReasonNullable.g.cs
new file mode 100644
index 0000000..25276ea
--- /dev/null
+++ b/src/libs/Shotstack/Generated/Shotstack.JsonConverters.GenerationModelUnavailableReasonNullable.g.cs
@@ -0,0 +1,60 @@
+#nullable enable
+
+namespace Shotstack.JsonConverters
+{
+ ///
+ public sealed class GenerationModelUnavailableReasonNullableJsonConverter : global::System.Text.Json.Serialization.JsonConverter
+ {
+ ///
+ public override global::Shotstack.GenerationModelUnavailableReason? Read(
+ ref global::System.Text.Json.Utf8JsonReader reader,
+ global::System.Type typeToConvert,
+ global::System.Text.Json.JsonSerializerOptions options)
+ {
+ switch (reader.TokenType)
+ {
+ case global::System.Text.Json.JsonTokenType.String:
+ {
+ var stringValue = reader.GetString();
+ if (stringValue != null)
+ {
+ return global::Shotstack.GenerationModelUnavailableReasonExtensions.ToEnum(stringValue);
+ }
+
+ break;
+ }
+ case global::System.Text.Json.JsonTokenType.Number:
+ {
+ var numValue = reader.GetInt32();
+ return (global::Shotstack.GenerationModelUnavailableReason)numValue;
+ }
+ case global::System.Text.Json.JsonTokenType.Null:
+ {
+ return default(global::Shotstack.GenerationModelUnavailableReason?);
+ }
+ default:
+ throw new global::System.ArgumentOutOfRangeException(nameof(reader));
+ }
+
+ return default;
+ }
+
+ ///
+ public override void Write(
+ global::System.Text.Json.Utf8JsonWriter writer,
+ global::Shotstack.GenerationModelUnavailableReason? value,
+ global::System.Text.Json.JsonSerializerOptions options)
+ {
+ writer = writer ?? throw new global::System.ArgumentNullException(nameof(writer));
+
+ if (value == null)
+ {
+ writer.WriteNullValue();
+ }
+ else
+ {
+ writer.WriteStringValue(global::Shotstack.GenerationModelUnavailableReasonExtensions.ToValueString(value.Value));
+ }
+ }
+ }
+}
diff --git a/src/libs/Shotstack/Generated/Shotstack.JsonSerializerContext.g.cs b/src/libs/Shotstack/Generated/Shotstack.JsonSerializerContext.g.cs
index b5188fe..29f12b3 100644
--- a/src/libs/Shotstack/Generated/Shotstack.JsonSerializerContext.g.cs
+++ b/src/libs/Shotstack/Generated/Shotstack.JsonSerializerContext.g.cs
@@ -337,6 +337,10 @@ namespace Shotstack
typeof(global::Shotstack.JsonConverters.GenerationModelTypeNullableJsonConverter),
+ typeof(global::Shotstack.JsonConverters.GenerationModelUnavailableReasonJsonConverter),
+
+ typeof(global::Shotstack.JsonConverters.GenerationModelUnavailableReasonNullableJsonConverter),
+
typeof(global::Shotstack.JsonConverters.AssetJsonConverter),
typeof(global::Shotstack.JsonConverters.DestinationsJsonConverter),
@@ -629,6 +633,7 @@ namespace Shotstack
[global::System.Text.Json.Serialization.JsonSerializable(typeof(global::Shotstack.GenerationModelPricingQuantityRound), TypeInfoPropertyName = "GenerationModelPricingQuantityRound2")]
[global::System.Text.Json.Serialization.JsonSerializable(typeof(global::Shotstack.GenerationModel))]
[global::System.Text.Json.Serialization.JsonSerializable(typeof(global::Shotstack.GenerationModelType), TypeInfoPropertyName = "GenerationModelType2")]
+ [global::System.Text.Json.Serialization.JsonSerializable(typeof(global::Shotstack.GenerationModelUnavailableReason), TypeInfoPropertyName = "GenerationModelUnavailableReason2")]
[global::System.Text.Json.Serialization.JsonSerializable(typeof(global::Shotstack.GenerationModelListResponse))]
[global::System.Text.Json.Serialization.JsonSerializable(typeof(global::System.Collections.Generic.IList))]
[global::System.Text.Json.Serialization.JsonSerializable(typeof(global::Shotstack.PostGenerateRequest))]
diff --git a/src/libs/Shotstack/Generated/Shotstack.JsonSerializerContextTypes.g.cs b/src/libs/Shotstack/Generated/Shotstack.JsonSerializerContextTypes.g.cs
index ace7b3e..690b5e6 100644
--- a/src/libs/Shotstack/Generated/Shotstack.JsonSerializerContextTypes.g.cs
+++ b/src/libs/Shotstack/Generated/Shotstack.JsonSerializerContextTypes.g.cs
@@ -1017,19 +1017,23 @@ public sealed partial class JsonSerializerContextTypes
///
///
///
- public global::Shotstack.GenerationModelListResponse? Type246 { get; set; }
+ public global::Shotstack.GenerationModelUnavailableReason? Type246 { get; set; }
///
///
///
- public global::System.Collections.Generic.IList? Type247 { get; set; }
+ public global::Shotstack.GenerationModelListResponse? Type247 { get; set; }
///
///
///
- public global::Shotstack.PostGenerateRequest? Type248 { get; set; }
+ public global::System.Collections.Generic.IList? Type248 { get; set; }
///
///
///
- public global::Shotstack.OneOf? Type249 { get; set; }
+ public global::Shotstack.PostGenerateRequest? Type249 { get; set; }
+ ///
+ ///
+ ///
+ public global::Shotstack.OneOf? Type250 { get; set; }
///
///
diff --git a/src/libs/Shotstack/Generated/Shotstack.Models.GenerationModel.g.cs b/src/libs/Shotstack/Generated/Shotstack.Models.GenerationModel.g.cs
index 11a20fa..6c809a8 100644
--- a/src/libs/Shotstack/Generated/Shotstack.Models.GenerationModel.g.cs
+++ b/src/libs/Shotstack/Generated/Shotstack.Models.GenerationModel.g.cs
@@ -27,6 +27,22 @@ public sealed partial class GenerationModel
[global::System.Text.Json.Serialization.JsonRequired]
public required global::Shotstack.GenerationModelType Type { get; set; }
+ ///
+ /// The model's display name, for a model picker.
+ /// Example: Seedance 2.0 · Text to video
+ ///
+ /// Seedance 2.0 · Text to video
+ [global::System.Text.Json.Serialization.JsonPropertyName("name")]
+ public string? Name { get; set; }
+
+ ///
+ /// What the model is suited to, in a sentence or two.
+ /// Example: Generate cinematic video with realistic motion, prompt-directed camera movement and optional synchronised audio.
+ ///
+ /// Generate cinematic video with realistic motion, prompt-directed camera movement and optional synchronised audio.
+ [global::System.Text.Json.Serialization.JsonPropertyName("description")]
+ public string? Description { get; set; }
+
///
/// What one generation costs, in credits: the rate multiplied by the units consumed. `quantity` says how to count the units, and is absent when one generation is one unit. Where a model charges differently per option value, `credits` is an object keyed by that value and `tieredBy` names the option that selects it.
///
@@ -39,6 +55,23 @@ public sealed partial class GenerationModel
[global::System.Text.Json.Serialization.JsonPropertyName("options")]
public object? Options { get; set; }
+ ///
+ /// Whether the account behind the calling API key can generate with this model. Omitted when that cannot be determined; treat a missing value as unknown, not as available. Generation requests are checked either way.
+ /// Example: false
+ ///
+ /// false
+ [global::System.Text.Json.Serialization.JsonPropertyName("available")]
+ public bool? Available { get; set; }
+
+ ///
+ /// Why `available` is false. `AiCapabilityNotIncluded`: the account's plan does not include this kind of generation. `AiDisabled`: AI generation is turned off for the account. `AiAccessUnavailable`: access could not be confirmed; try again later.
+ /// Example: AiCapabilityNotIncluded
+ ///
+ /// AiCapabilityNotIncluded
+ [global::System.Text.Json.Serialization.JsonPropertyName("unavailableReason")]
+ [global::System.Text.Json.Serialization.JsonConverter(typeof(global::Shotstack.JsonConverters.GenerationModelUnavailableReasonJsonConverter))]
+ public global::Shotstack.GenerationModelUnavailableReason? UnavailableReason { get; set; }
+
///
/// Additional properties that are not explicitly defined in the schema
///
@@ -56,25 +89,49 @@ public sealed partial class GenerationModel
/// The asset type this model generates.
/// Example: video
///
+ ///
+ /// The model's display name, for a model picker.
+ /// Example: Seedance 2.0 · Text to video
+ ///
+ ///
+ /// What the model is suited to, in a sentence or two.
+ /// Example: Generate cinematic video with realistic motion, prompt-directed camera movement and optional synchronised audio.
+ ///
///
/// What one generation costs, in credits: the rate multiplied by the units consumed. `quantity` says how to count the units, and is absent when one generation is one unit. Where a model charges differently per option value, `credits` is an object keyed by that value and `tieredBy` names the option that selects it.
///
///
/// JSON Schema for the model's `options` object. Only returned for a single model, or for a list requested with `expand=options`. Values outside this schema are rejected.
///
+ ///
+ /// Whether the account behind the calling API key can generate with this model. Omitted when that cannot be determined; treat a missing value as unknown, not as available. Generation requests are checked either way.
+ /// Example: false
+ ///
+ ///
+ /// Why `available` is false. `AiCapabilityNotIncluded`: the account's plan does not include this kind of generation. `AiDisabled`: AI generation is turned off for the account. `AiAccessUnavailable`: access could not be confirmed; try again later.
+ /// Example: AiCapabilityNotIncluded
+ ///
#if NET7_0_OR_GREATER
[global::System.Diagnostics.CodeAnalysis.SetsRequiredMembers]
#endif
public GenerationModel(
string model,
global::Shotstack.GenerationModelType type,
+ string? name,
+ string? description,
global::Shotstack.GenerationModelPricing? pricing,
- object? options)
+ object? options,
+ bool? available,
+ global::Shotstack.GenerationModelUnavailableReason? unavailableReason)
{
this.Model = model ?? throw new global::System.ArgumentNullException(nameof(model));
this.Type = type;
+ this.Name = name;
+ this.Description = description;
this.Pricing = pricing;
this.Options = options;
+ this.Available = available;
+ this.UnavailableReason = unavailableReason;
}
///
diff --git a/src/libs/Shotstack/Generated/Shotstack.Models.GenerationModelUnavailableReason.g.cs b/src/libs/Shotstack/Generated/Shotstack.Models.GenerationModelUnavailableReason.g.cs
new file mode 100644
index 0000000..5088143
--- /dev/null
+++ b/src/libs/Shotstack/Generated/Shotstack.Models.GenerationModelUnavailableReason.g.cs
@@ -0,0 +1,58 @@
+
+#nullable enable
+
+namespace Shotstack
+{
+ ///
+ /// Why `available` is false. `AiCapabilityNotIncluded`: the account's plan does not include this kind of generation. `AiDisabled`: AI generation is turned off for the account. `AiAccessUnavailable`: access could not be confirmed; try again later.
+ /// Example: AiCapabilityNotIncluded
+ ///
+ public enum GenerationModelUnavailableReason
+ {
+ ///
+ /// the account's plan does not include this kind of generation. `AiDisabled`: AI generation is turned off for the account. `AiAccessUnavailable`: access could not be confirmed; try again later.
+ ///
+ AiAccessUnavailable,
+ ///
+ /// the account's plan does not include this kind of generation. `AiDisabled`: AI generation is turned off for the account. `AiAccessUnavailable`: access could not be confirmed; try again later.
+ ///
+ AiCapabilityNotIncluded,
+ ///
+ /// the account's plan does not include this kind of generation. `AiDisabled`: AI generation is turned off for the account. `AiAccessUnavailable`: access could not be confirmed; try again later.
+ ///
+ AiDisabled,
+ }
+
+ ///
+ /// Enum extensions to do fast conversions without the reflection.
+ ///
+ public static class GenerationModelUnavailableReasonExtensions
+ {
+ ///
+ /// Converts an enum to a string.
+ ///
+ public static string ToValueString(this GenerationModelUnavailableReason value)
+ {
+ return value switch
+ {
+ GenerationModelUnavailableReason.AiAccessUnavailable => "AiAccessUnavailable",
+ GenerationModelUnavailableReason.AiCapabilityNotIncluded => "AiCapabilityNotIncluded",
+ GenerationModelUnavailableReason.AiDisabled => "AiDisabled",
+ _ => throw new global::System.ArgumentOutOfRangeException(nameof(value), value, null),
+ };
+ }
+ ///
+ /// Converts an string to a enum.
+ ///
+ public static GenerationModelUnavailableReason? ToEnum(string value)
+ {
+ return value switch
+ {
+ "AiAccessUnavailable" => GenerationModelUnavailableReason.AiAccessUnavailable,
+ "AiCapabilityNotIncluded" => GenerationModelUnavailableReason.AiCapabilityNotIncluded,
+ "AiDisabled" => GenerationModelUnavailableReason.AiDisabled,
+ _ => null,
+ };
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/libs/Shotstack/openapi.json b/src/libs/Shotstack/openapi.json
index 59e78c4..e5e1434 100644
--- a/src/libs/Shotstack/openapi.json
+++ b/src/libs/Shotstack/openapi.json
@@ -571,7 +571,7 @@
},
"/edit/v1/models": {
"get": {
- "description": "List the generation models available for `prompt`-bearing image, video and audio\nassets, with the options each accepts and what it costs in credits.\n\nUse this to populate a model picker and render its option fields, rather than\nhard coding a model list. A newly launched model appears here without any change\non your side. Each entry carries the asset type it generates, so filter the list\nclient side when a picker only needs one kind.\n\nOption schemas are omitted by default. Request them with `expand=options`.\n\n**Base URL:** https://api.shotstack.io/edit/{version}\n",
+ "description": "List the generation models available for `prompt`-bearing image, video and audio\nassets, with the options each accepts and what it costs in credits.\n\nUse this to populate a model picker and render its option fields, rather than\nhard coding a model list. A newly launched model appears here without any change\non your side. Each entry carries the asset type it generates, so filter the list\nclient side when a picker only needs one kind.\n\nOption schemas are omitted by default. Request them with `expand=options`.\n\nEach model's `available` reflects the plan of the account behind the calling API\nkey, so offer only the models it marks available.\n\n**Base URL:** https://api.shotstack.io/edit/{version}\n",
"summary": "List Generation Models",
"operationId": "getModels",
"responses": {
@@ -5855,6 +5855,16 @@
],
"example": "video"
},
+ "name": {
+ "description": "The model's display name, for a model picker.",
+ "type": "string",
+ "example": "Seedance 2.0 \u00b7 Text to video"
+ },
+ "description": {
+ "description": "What the model is suited to, in a sentence or two.",
+ "type": "string",
+ "example": "Generate cinematic video with realistic motion, prompt-directed camera movement and optional synchronised audio."
+ },
"pricing": {
"description": "What one generation with this model costs.",
"$ref": "#/components/schemas/GenerationModelPricing"
@@ -5863,6 +5873,21 @@
"description": "JSON Schema for the model's `options` object. Only returned for a single model, or for a list requested with `expand=options`. Values outside this schema are rejected.",
"type": "object",
"additionalProperties": true
+ },
+ "available": {
+ "description": "Whether the account behind the calling API key can generate with this model. Omitted when that cannot be determined; treat a missing value as unknown, not as available. Generation requests are checked either way.",
+ "type": "boolean",
+ "example": false
+ },
+ "unavailableReason": {
+ "description": "Why `available` is false. `AiCapabilityNotIncluded`: the account's plan does not include this kind of generation. `AiDisabled`: AI generation is turned off for the account. `AiAccessUnavailable`: access could not be confirmed; try again later.",
+ "type": "string",
+ "enum": [
+ "AiCapabilityNotIncluded",
+ "AiDisabled",
+ "AiAccessUnavailable"
+ ],
+ "example": "AiCapabilityNotIncluded"
}
},
"required": [