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": [