diff --git a/src/libs/Ideogram/Generated/Ideogram.IImagesPreciseEditClient.PostPreciseEditImageV2Ideogram45.g.cs b/src/libs/Ideogram/Generated/Ideogram.IImagesPreciseEditClient.PostPreciseEditImageV2Ideogram45.g.cs
index 856dc9c..721e0ba 100644
--- a/src/libs/Ideogram/Generated/Ideogram.IImagesPreciseEditClient.PostPreciseEditImageV2Ideogram45.g.cs
+++ b/src/libs/Ideogram/Generated/Ideogram.IImagesPreciseEditClient.PostPreciseEditImageV2Ideogram45.g.cs
@@ -11,7 +11,11 @@ public partial interface IImagesPreciseEditClient
/// `multipart/form-data`, with optional `reference_images` and a `mask`.
/// Returns results directly by default; set `async` or supply a
/// `webhook_url` to get a `generation_id` and poll
- /// `GET /v2/generations/{generation_id}`.
+ /// `GET /v2/generations/{generation_id}`.
+ /// `context_window` narrows the edit to one region of the image, so a
+ /// large image keeps its detail: pass `x,y,width,height`, or `auto`
+ /// together with a `mask`. The result always keeps the image's own width
+ /// and height.
///
///
/// Default Value: false
@@ -33,7 +37,11 @@ public partial interface IImagesPreciseEditClient
/// `multipart/form-data`, with optional `reference_images` and a `mask`.
/// Returns results directly by default; set `async` or supply a
/// `webhook_url` to get a `generation_id` and poll
- /// `GET /v2/generations/{generation_id}`.
+ /// `GET /v2/generations/{generation_id}`.
+ /// `context_window` narrows the edit to one region of the image, so a
+ /// large image keeps its detail: pass `x,y,width,height`, or `auto`
+ /// together with a `mask`. The result always keeps the image's own width
+ /// and height.
///
///
/// Default Value: false
@@ -55,7 +63,11 @@ public partial interface IImagesPreciseEditClient
/// `multipart/form-data`, with optional `reference_images` and a `mask`.
/// Returns results directly by default; set `async` or supply a
/// `webhook_url` to get a `generation_id` and poll
- /// `GET /v2/generations/{generation_id}`.
+ /// `GET /v2/generations/{generation_id}`.
+ /// `context_window` narrows the edit to one region of the image, so a
+ /// large image keeps its detail: pass `x,y,width,height`, or `auto`
+ /// together with a `mask`. The result always keeps the image's own width
+ /// and height.
///
///
/// Default Value: false
@@ -69,22 +81,30 @@ public partial interface IImagesPreciseEditClient
/// The image to edit, as an existing upload or generated image asset. Supply this or `image`, never both. Takes priority over `image` if both are supplied. Cannot be combined with `mask`.
///
///
- /// The image to edit (max 25MB; JPEG, PNG, or WEBP). Multipart requests only. The output always matches this image's width and height, and pixels the edit did not meaningfully change are copied exactly from it. Images too large for the model are scaled down, keeping their proportions, and returned as rendered. Images with an aspect ratio outside 1:6 to 6:1 are rejected.
+ /// The image to edit, as raw bytes (max 50MB; JPEG, PNG, or WEBP). Multipart requests only; ignored if `image_asset_identifier` is also supplied. Required when supplying a `mask` or a `context_window`. The output always matches this image's width and height, and pixels the edit did not meaningfully change are copied exactly from it.
///
///
- /// The image to edit (max 25MB; JPEG, PNG, or WEBP). Multipart requests only. The output always matches this image's width and height, and pixels the edit did not meaningfully change are copied exactly from it. Images too large for the model are scaled down, keeping their proportions, and returned as rendered. Images with an aspect ratio outside 1:6 to 6:1 are rejected.
+ /// The image to edit, as raw bytes (max 50MB; JPEG, PNG, or WEBP). Multipart requests only; ignored if `image_asset_identifier` is also supplied. Required when supplying a `mask` or a `context_window`. The output always matches this image's width and height, and pixels the edit did not meaningfully change are copied exactly from it.
///
///
/// Optional additional images to guide the edit, by reference. These are never edited themselves; only `image_asset_identifier` or `image` is. Requires the image being edited to be supplied by reference too, and cannot be combined with `mask`.
///
///
- /// Optional images to guide the edit (max 4, max 25MB each; JPEG, PNG, or WEBP). They are never edited themselves; only `image` is. Multipart requests only. A request with a `mask` can include at most three, because the mask takes up one reference slot.
+ /// Optional images to guide the edit (max 4, max 50MB each; JPEG, PNG, or WEBP). They are never edited themselves; only `image` is. Multipart requests only; ignored if `reference_image_asset_identifiers` is also supplied. A request with a `mask` can include at most three, because the mask takes up one reference slot.
///
///
- /// An optional mask that limits the edit to part of `image` (max 25MB; JPEG, PNG, or WEBP). Multipart requests only. Black marks the area to edit and white the area to keep; values in between are rounded to the nearer of the two. The mask must have the same width and height as `image` and contain both black and white areas. A masked request can include at most three `reference_images`.
+ /// An optional mask that limits the edit to part of `image` (max 50MB; JPEG, PNG, or WEBP). Multipart requests only. Black marks the area to edit and white the area to keep; values in between are rounded to the nearer of the two. The mask must have the same width and height as `image` and contain both black and white areas. Requires `image` as raw bytes; masks cannot be combined with asset references. A masked request can include at most three `reference_images`.
///
///
- /// An optional mask that limits the edit to part of `image` (max 25MB; JPEG, PNG, or WEBP). Multipart requests only. Black marks the area to edit and white the area to keep; values in between are rounded to the nearer of the two. The mask must have the same width and height as `image` and contain both black and white areas. A masked request can include at most three `reference_images`.
+ /// An optional mask that limits the edit to part of `image` (max 50MB; JPEG, PNG, or WEBP). Multipart requests only. Black marks the area to edit and white the area to keep; values in between are rounded to the nearer of the two. The mask must have the same width and height as `image` and contain both black and white areas. Requires `image` as raw bytes; masks cannot be combined with asset references. A masked request can include at most three `reference_images`.
+ ///
+ ///
+ /// How much of the image being edited the model may see and change.
+ /// `none`, the default, edits the whole image. A large image may come back smaller than it was sent.
+ /// `auto` fits a region around what the `mask` selects and edits only that region, so its detail is kept. It requires a `mask`. A small enough image has no region to fit and is edited as it is.
+ /// `x,y,width,height` names the region explicitly, in the edited image's own pixels with the origin at its top-left corner — for example `1024,512,2048,1536`. The region must lie inside the image, measure at least 256px on each side, have an aspect ratio between 1:6 and 6:1, and cover no more than 4194304 pixels. A `mask` may select only pixels inside it.
+ /// With `auto` or an explicit region, every pixel outside the region is returned exactly as supplied and the output keeps the image's own width and height.
+ /// Default Value: none
///
///
/// The rendering quality to use. `very_low` is the fastest and cheapest, and `high` takes longer and is priced higher.
@@ -135,6 +155,7 @@ public partial interface IImagesPreciseEditClient
global::System.Collections.Generic.IList? referenceImages = default,
byte[]? mask = default,
string? maskname = default,
+ string? contextWindow = default,
global::Ideogram.PreciseEditImageIdeogram45RequestQuality? quality = default,
int? seed = default,
int? numImages = default,
diff --git a/src/libs/Ideogram/Generated/Ideogram.IImagesReframeClient.Auto.g.cs b/src/libs/Ideogram/Generated/Ideogram.IImagesReframeClient.Auto.g.cs
new file mode 100644
index 0000000..9085b4d
--- /dev/null
+++ b/src/libs/Ideogram/Generated/Ideogram.IImagesReframeClient.Auto.g.cs
@@ -0,0 +1,112 @@
+#nullable enable
+
+namespace Ideogram
+{
+ public partial interface IImagesReframeClient
+ {
+ ///
+ /// Reframe an image, letting Ideogram pick the model
+ /// Reframe one image to a new aspect ratio without choosing a model.
+ /// Ideogram selects the model best suited to the source and may route
+ /// different requests to different models; the request is billed at the
+ /// chosen model's price. Supply either an existing Ideogram image asset
+ /// or raw image bytes, but not both.
+ /// This operation is asynchronous. It returns as soon as the request is
+ /// accepted; poll `GET /v2/generations/{generation_id}` for completion
+ /// and results.
+ ///
+ ///
+ /// Default Value: false
+ ///
+ ///
+ /// Per-request overrides such as headers, query parameters, timeout, retries, and response buffering.
+ /// The token to cancel the operation with
+ ///
+ global::System.Threading.Tasks.Task AutoAsync(
+
+ global::Ideogram.ReframeImageAutoRequest request,
+ bool? dryRun = default,
+ global::Ideogram.AutoSDKRequestOptions? requestOptions = default,
+ global::System.Threading.CancellationToken cancellationToken = default);
+ ///
+ /// Reframe an image, letting Ideogram pick the model
+ /// Reframe one image to a new aspect ratio without choosing a model.
+ /// Ideogram selects the model best suited to the source and may route
+ /// different requests to different models; the request is billed at the
+ /// chosen model's price. Supply either an existing Ideogram image asset
+ /// or raw image bytes, but not both.
+ /// This operation is asynchronous. It returns as soon as the request is
+ /// accepted; poll `GET /v2/generations/{generation_id}` for completion
+ /// and results.
+ ///
+ ///
+ /// Default Value: false
+ ///
+ ///
+ /// Per-request overrides such as headers, query parameters, timeout, retries, and response buffering.
+ /// The token to cancel the operation with
+ ///
+ global::System.Threading.Tasks.Task> AutoAsResponseAsync(
+
+ global::Ideogram.ReframeImageAutoRequest request,
+ bool? dryRun = default,
+ global::Ideogram.AutoSDKRequestOptions? requestOptions = default,
+ global::System.Threading.CancellationToken cancellationToken = default);
+ ///
+ /// Reframe an image, letting Ideogram pick the model
+ /// Reframe one image to a new aspect ratio without choosing a model.
+ /// Ideogram selects the model best suited to the source and may route
+ /// different requests to different models; the request is billed at the
+ /// chosen model's price. Supply either an existing Ideogram image asset
+ /// or raw image bytes, but not both.
+ /// This operation is asynchronous. It returns as soon as the request is
+ /// accepted; poll `GET /v2/generations/{generation_id}` for completion
+ /// and results.
+ ///
+ ///
+ /// Default Value: false
+ ///
+ ///
+ /// An identifier for an ideogram asset.
+ /// Example: {"asset_type":"RESPONSE","asset_id":"7uS_VESkRI6O3-sVgHQp_A"}
+ ///
+ ///
+ /// The JPEG, PNG, or WEBP image to reframe (max 50MB).
+ ///
+ ///
+ /// The JPEG, PNG, or WEBP image to reframe (max 50MB).
+ ///
+ ///
+ /// The requested output aspect ratio, as `width:height`.
+ /// Example: 969
+ ///
+ ///
+ /// API-key requests are always private. For bearer-authenticated
+ /// requests, this controls whether the result is private; when
+ /// omitted, it follows the caller's plan entitlement. Enterprise
+ /// generations are always private.
+ ///
+ ///
+ /// The number of output images to generate.
+ /// Default Value: 1
+ ///
+ ///
+ /// Random seed. Set for reproducible generation.
+ /// Example: 12345
+ ///
+ /// Per-request overrides such as headers, query parameters, timeout, retries, and response buffering.
+ /// The token to cancel the operation with
+ ///
+ global::System.Threading.Tasks.Task AutoAsync(
+ string aspectRatio,
+ bool? dryRun = default,
+ global::Ideogram.AssetIdentifier? imageAssetIdentifier = default,
+ byte[]? image = default,
+ string? imagename = default,
+ bool? @private = default,
+ int? numImages = default,
+ int? seed = default,
+ global::Ideogram.AutoSDKRequestOptions? requestOptions = default,
+ global::System.Threading.CancellationToken cancellationToken = default);
+ }
+}
\ No newline at end of file
diff --git a/src/libs/Ideogram/Generated/Ideogram.IImagesReframeClient.BriaExpand.g.cs b/src/libs/Ideogram/Generated/Ideogram.IImagesReframeClient.BriaExpand.g.cs
new file mode 100644
index 0000000..5f6a769
--- /dev/null
+++ b/src/libs/Ideogram/Generated/Ideogram.IImagesReframeClient.BriaExpand.g.cs
@@ -0,0 +1,107 @@
+#nullable enable
+
+namespace Ideogram
+{
+ public partial interface IImagesReframeClient
+ {
+ ///
+ /// Reframe an image with Bria Expand
+ /// Extend one image to a new aspect ratio with Bria Expand. The source
+ /// pixels are kept exactly as they are, centered on the new canvas, and
+ /// the model paints only the added area. Supply either an existing
+ /// Ideogram image asset or raw image bytes, but not both. The canvas is
+ /// sized from the source so that the whole source fits.
+ /// This operation is asynchronous. It returns as soon as the request is
+ /// accepted; poll `GET /v2/generations/{generation_id}` for completion
+ /// and results.
+ ///
+ ///
+ /// Default Value: false
+ ///
+ ///
+ /// Per-request overrides such as headers, query parameters, timeout, retries, and response buffering.
+ /// The token to cancel the operation with
+ ///
+ global::System.Threading.Tasks.Task BriaExpandAsync(
+
+ global::Ideogram.ReframeImageBriaExpandRequest request,
+ bool? dryRun = default,
+ global::Ideogram.AutoSDKRequestOptions? requestOptions = default,
+ global::System.Threading.CancellationToken cancellationToken = default);
+ ///
+ /// Reframe an image with Bria Expand
+ /// Extend one image to a new aspect ratio with Bria Expand. The source
+ /// pixels are kept exactly as they are, centered on the new canvas, and
+ /// the model paints only the added area. Supply either an existing
+ /// Ideogram image asset or raw image bytes, but not both. The canvas is
+ /// sized from the source so that the whole source fits.
+ /// This operation is asynchronous. It returns as soon as the request is
+ /// accepted; poll `GET /v2/generations/{generation_id}` for completion
+ /// and results.
+ ///
+ ///
+ /// Default Value: false
+ ///
+ ///
+ /// Per-request overrides such as headers, query parameters, timeout, retries, and response buffering.
+ /// The token to cancel the operation with
+ ///
+ global::System.Threading.Tasks.Task> BriaExpandAsResponseAsync(
+
+ global::Ideogram.ReframeImageBriaExpandRequest request,
+ bool? dryRun = default,
+ global::Ideogram.AutoSDKRequestOptions? requestOptions = default,
+ global::System.Threading.CancellationToken cancellationToken = default);
+ ///
+ /// Reframe an image with Bria Expand
+ /// Extend one image to a new aspect ratio with Bria Expand. The source
+ /// pixels are kept exactly as they are, centered on the new canvas, and
+ /// the model paints only the added area. Supply either an existing
+ /// Ideogram image asset or raw image bytes, but not both. The canvas is
+ /// sized from the source so that the whole source fits.
+ /// This operation is asynchronous. It returns as soon as the request is
+ /// accepted; poll `GET /v2/generations/{generation_id}` for completion
+ /// and results.
+ ///
+ ///
+ /// Default Value: false
+ ///
+ ///
+ /// An identifier for an ideogram asset.
+ /// Example: {"asset_type":"RESPONSE","asset_id":"7uS_VESkRI6O3-sVgHQp_A"}
+ ///
+ ///
+ /// The JPEG, PNG, or WEBP image to reframe (max 50MB).
+ ///
+ ///
+ /// The JPEG, PNG, or WEBP image to reframe (max 50MB).
+ ///
+ ///
+ /// The requested output aspect ratio, as `width:height`.
+ /// Example: 969
+ ///
+ ///
+ /// API-key requests are always private. For bearer-authenticated
+ /// requests, this controls whether the result is private; when
+ /// omitted, it follows the caller's plan entitlement. Enterprise
+ /// generations are always private.
+ ///
+ ///
+ /// Random seed. Set for reproducible generation.
+ /// Example: 12345
+ ///
+ /// Per-request overrides such as headers, query parameters, timeout, retries, and response buffering.
+ /// The token to cancel the operation with
+ ///
+ global::System.Threading.Tasks.Task BriaExpandAsync(
+ string aspectRatio,
+ bool? dryRun = default,
+ global::Ideogram.AssetIdentifier? imageAssetIdentifier = default,
+ byte[]? image = default,
+ string? imagename = default,
+ bool? @private = default,
+ int? seed = default,
+ global::Ideogram.AutoSDKRequestOptions? requestOptions = default,
+ global::System.Threading.CancellationToken cancellationToken = default);
+ }
+}
\ No newline at end of file
diff --git a/src/libs/Ideogram/Generated/Ideogram.IImagesReframeClient.GptImage25Flare.g.cs b/src/libs/Ideogram/Generated/Ideogram.IImagesReframeClient.GptImage25Flare.g.cs
new file mode 100644
index 0000000..fee6987
--- /dev/null
+++ b/src/libs/Ideogram/Generated/Ideogram.IImagesReframeClient.GptImage25Flare.g.cs
@@ -0,0 +1,114 @@
+#nullable enable
+
+namespace Ideogram
+{
+ public partial interface IImagesReframeClient
+ {
+ ///
+ /// Reframe an image with GPT Image 2.5 Flare
+ /// Recompose one image for a new aspect ratio with GPT Image 2.5 Flare.
+ /// Supply either an existing Ideogram image asset or raw image bytes, but
+ /// not both. The requested aspect ratio is resolved to the closest output
+ /// size the model supports.
+ /// This operation is asynchronous. It returns as soon as the request is
+ /// accepted; poll `GET /v2/generations/{generation_id}` for completion
+ /// and results.
+ ///
+ ///
+ /// Default Value: false
+ ///
+ ///
+ /// Per-request overrides such as headers, query parameters, timeout, retries, and response buffering.
+ /// The token to cancel the operation with
+ ///
+ global::System.Threading.Tasks.Task GptImage25FlareAsync(
+
+ global::Ideogram.ReframeImageGptImage25FlareRequest request,
+ bool? dryRun = default,
+ global::Ideogram.AutoSDKRequestOptions? requestOptions = default,
+ global::System.Threading.CancellationToken cancellationToken = default);
+ ///
+ /// Reframe an image with GPT Image 2.5 Flare
+ /// Recompose one image for a new aspect ratio with GPT Image 2.5 Flare.
+ /// Supply either an existing Ideogram image asset or raw image bytes, but
+ /// not both. The requested aspect ratio is resolved to the closest output
+ /// size the model supports.
+ /// This operation is asynchronous. It returns as soon as the request is
+ /// accepted; poll `GET /v2/generations/{generation_id}` for completion
+ /// and results.
+ ///
+ ///
+ /// Default Value: false
+ ///
+ ///
+ /// Per-request overrides such as headers, query parameters, timeout, retries, and response buffering.
+ /// The token to cancel the operation with
+ ///
+ global::System.Threading.Tasks.Task> GptImage25FlareAsResponseAsync(
+
+ global::Ideogram.ReframeImageGptImage25FlareRequest request,
+ bool? dryRun = default,
+ global::Ideogram.AutoSDKRequestOptions? requestOptions = default,
+ global::System.Threading.CancellationToken cancellationToken = default);
+ ///
+ /// Reframe an image with GPT Image 2.5 Flare
+ /// Recompose one image for a new aspect ratio with GPT Image 2.5 Flare.
+ /// Supply either an existing Ideogram image asset or raw image bytes, but
+ /// not both. The requested aspect ratio is resolved to the closest output
+ /// size the model supports.
+ /// This operation is asynchronous. It returns as soon as the request is
+ /// accepted; poll `GET /v2/generations/{generation_id}` for completion
+ /// and results.
+ ///
+ ///
+ /// Default Value: false
+ ///
+ ///
+ /// An identifier for an ideogram asset.
+ /// Example: {"asset_type":"RESPONSE","asset_id":"7uS_VESkRI6O3-sVgHQp_A"}
+ ///
+ ///
+ /// The JPEG, PNG, or WEBP image to reframe (max 50MB).
+ ///
+ ///
+ /// The JPEG, PNG, or WEBP image to reframe (max 50MB).
+ ///
+ ///
+ /// The requested output aspect ratio, as `width:height`.
+ /// Example: 969
+ ///
+ ///
+ /// How much rendering effort the model spends. Lower tiers return sooner and cost less; `auto` lets the model choose.
+ /// Default Value: auto
+ ///
+ ///
+ /// API-key requests are always private. For bearer-authenticated
+ /// requests, this controls whether the result is private; when
+ /// omitted, it follows the caller's plan entitlement. Enterprise
+ /// generations are always private.
+ ///
+ ///
+ /// The number of output images to generate.
+ /// Default Value: 1
+ ///
+ ///
+ /// Random seed. Set for reproducible generation.
+ /// Example: 12345
+ ///
+ /// Per-request overrides such as headers, query parameters, timeout, retries, and response buffering.
+ /// The token to cancel the operation with
+ ///
+ global::System.Threading.Tasks.Task GptImage25FlareAsync(
+ string aspectRatio,
+ bool? dryRun = default,
+ global::Ideogram.AssetIdentifier? imageAssetIdentifier = default,
+ byte[]? image = default,
+ string? imagename = default,
+ global::Ideogram.ReframeImageGptImage25FlareRequestQuality? quality = default,
+ bool? @private = default,
+ int? numImages = default,
+ int? seed = default,
+ global::Ideogram.AutoSDKRequestOptions? requestOptions = default,
+ global::System.Threading.CancellationToken cancellationToken = default);
+ }
+}
\ No newline at end of file
diff --git a/src/libs/Ideogram/Generated/Ideogram.IImagesReframeClient.NanoBanana2.g.cs b/src/libs/Ideogram/Generated/Ideogram.IImagesReframeClient.NanoBanana2.g.cs
index 80729e9..dc1beae 100644
--- a/src/libs/Ideogram/Generated/Ideogram.IImagesReframeClient.NanoBanana2.g.cs
+++ b/src/libs/Ideogram/Generated/Ideogram.IImagesReframeClient.NanoBanana2.g.cs
@@ -65,7 +65,7 @@ public partial interface IImagesReframeClient
/// The JPEG, PNG, or WEBP image to reframe (max 50MB).
///
///
- /// The requested output aspect ratio. It resolves to the closest dimensions the model supports at the 1K output tier.
+ /// The requested output aspect ratio, as `width:height`.
/// Example: 969
///
///
diff --git a/src/libs/Ideogram/Generated/Ideogram.IImagesReframeClient.NanoBananaPro.g.cs b/src/libs/Ideogram/Generated/Ideogram.IImagesReframeClient.NanoBananaPro.g.cs
new file mode 100644
index 0000000..eb5f8d3
--- /dev/null
+++ b/src/libs/Ideogram/Generated/Ideogram.IImagesReframeClient.NanoBananaPro.g.cs
@@ -0,0 +1,114 @@
+#nullable enable
+
+namespace Ideogram
+{
+ public partial interface IImagesReframeClient
+ {
+ ///
+ /// Reframe an image with Nano Banana Pro
+ /// Recompose one image for a new aspect ratio with Nano Banana Pro, at a
+ /// 1K, 2K, or 4K output tier. Supply either an existing Ideogram image
+ /// asset or raw image bytes, but not both. The requested aspect ratio is
+ /// resolved to the closest dimensions the model supports at that tier.
+ /// This operation is asynchronous. It returns as soon as the request is
+ /// accepted; poll `GET /v2/generations/{generation_id}` for completion
+ /// and results.
+ ///
+ ///
+ /// Default Value: false
+ ///
+ ///
+ /// Per-request overrides such as headers, query parameters, timeout, retries, and response buffering.
+ /// The token to cancel the operation with
+ ///
+ global::System.Threading.Tasks.Task NanoBananaProAsync(
+
+ global::Ideogram.ReframeImageNanoBananaProRequest request,
+ bool? dryRun = default,
+ global::Ideogram.AutoSDKRequestOptions? requestOptions = default,
+ global::System.Threading.CancellationToken cancellationToken = default);
+ ///
+ /// Reframe an image with Nano Banana Pro
+ /// Recompose one image for a new aspect ratio with Nano Banana Pro, at a
+ /// 1K, 2K, or 4K output tier. Supply either an existing Ideogram image
+ /// asset or raw image bytes, but not both. The requested aspect ratio is
+ /// resolved to the closest dimensions the model supports at that tier.
+ /// This operation is asynchronous. It returns as soon as the request is
+ /// accepted; poll `GET /v2/generations/{generation_id}` for completion
+ /// and results.
+ ///
+ ///
+ /// Default Value: false
+ ///
+ ///
+ /// Per-request overrides such as headers, query parameters, timeout, retries, and response buffering.
+ /// The token to cancel the operation with
+ ///
+ global::System.Threading.Tasks.Task> NanoBananaProAsResponseAsync(
+
+ global::Ideogram.ReframeImageNanoBananaProRequest request,
+ bool? dryRun = default,
+ global::Ideogram.AutoSDKRequestOptions? requestOptions = default,
+ global::System.Threading.CancellationToken cancellationToken = default);
+ ///
+ /// Reframe an image with Nano Banana Pro
+ /// Recompose one image for a new aspect ratio with Nano Banana Pro, at a
+ /// 1K, 2K, or 4K output tier. Supply either an existing Ideogram image
+ /// asset or raw image bytes, but not both. The requested aspect ratio is
+ /// resolved to the closest dimensions the model supports at that tier.
+ /// This operation is asynchronous. It returns as soon as the request is
+ /// accepted; poll `GET /v2/generations/{generation_id}` for completion
+ /// and results.
+ ///
+ ///
+ /// Default Value: false
+ ///
+ ///
+ /// An identifier for an ideogram asset.
+ /// Example: {"asset_type":"RESPONSE","asset_id":"7uS_VESkRI6O3-sVgHQp_A"}
+ ///
+ ///
+ /// The JPEG, PNG, or WEBP image to reframe (max 50MB).
+ ///
+ ///
+ /// The JPEG, PNG, or WEBP image to reframe (max 50MB).
+ ///
+ ///
+ /// The requested output aspect ratio, as `width:height`.
+ /// Example: 969
+ ///
+ ///
+ /// The output resolution tier. The model sizes its output by tier at the requested aspect ratio; exact pixel dimensions cannot be requested.
+ /// Default Value: 1K
+ ///
+ ///
+ /// API-key requests are always private. For bearer-authenticated
+ /// requests, this controls whether the result is private; when
+ /// omitted, it follows the caller's plan entitlement. Enterprise
+ /// generations are always private.
+ ///
+ ///
+ /// The number of output images to generate.
+ /// Default Value: 1
+ ///
+ ///
+ /// Random seed. Set for reproducible generation.
+ /// Example: 12345
+ ///
+ /// Per-request overrides such as headers, query parameters, timeout, retries, and response buffering.
+ /// The token to cancel the operation with
+ ///
+ global::System.Threading.Tasks.Task NanoBananaProAsync(
+ string aspectRatio,
+ bool? dryRun = default,
+ global::Ideogram.AssetIdentifier? imageAssetIdentifier = default,
+ byte[]? image = default,
+ string? imagename = default,
+ global::Ideogram.ReframeImageNanoBananaProRequestResolutionTier? resolutionTier = default,
+ bool? @private = default,
+ int? numImages = default,
+ int? seed = default,
+ global::Ideogram.AutoSDKRequestOptions? requestOptions = default,
+ global::System.Threading.CancellationToken cancellationToken = default);
+ }
+}
\ No newline at end of file
diff --git a/src/libs/Ideogram/Generated/Ideogram.ImagesPreciseEditClient.PostPreciseEditImageV2Ideogram45.g.cs b/src/libs/Ideogram/Generated/Ideogram.ImagesPreciseEditClient.PostPreciseEditImageV2Ideogram45.g.cs
index 5fa3554..5cd2f27 100644
--- a/src/libs/Ideogram/Generated/Ideogram.ImagesPreciseEditClient.PostPreciseEditImageV2Ideogram45.g.cs
+++ b/src/libs/Ideogram/Generated/Ideogram.ImagesPreciseEditClient.PostPreciseEditImageV2Ideogram45.g.cs
@@ -50,7 +50,11 @@ partial void ProcessPostPreciseEditImageV2Ideogram45ResponseContent(
/// `multipart/form-data`, with optional `reference_images` and a `mask`.
/// Returns results directly by default; set `async` or supply a
/// `webhook_url` to get a `generation_id` and poll
- /// `GET /v2/generations/{generation_id}`.
+ /// `GET /v2/generations/{generation_id}`.
+ /// `context_window` narrows the edit to one region of the image, so a
+ /// large image keeps its detail: pass `x,y,width,height`, or `auto`
+ /// together with a `mask`. The result always keeps the image's own width
+ /// and height.
///
///
/// Default Value: false
@@ -83,7 +87,11 @@ partial void ProcessPostPreciseEditImageV2Ideogram45ResponseContent(
/// `multipart/form-data`, with optional `reference_images` and a `mask`.
/// Returns results directly by default; set `async` or supply a
/// `webhook_url` to get a `generation_id` and poll
- /// `GET /v2/generations/{generation_id}`.
+ /// `GET /v2/generations/{generation_id}`.
+ /// `context_window` narrows the edit to one region of the image, so a
+ /// large image keeps its detail: pass `x,y,width,height`, or `auto`
+ /// together with a `mask`. The result always keeps the image's own width
+ /// and height.
///
///
/// Default Value: false
@@ -289,6 +297,14 @@ request.Maskname is null
__contentMask.Headers.ContentDisposition.FileNameStar = null;
}
+ }
+ if (request.ContextWindow != default)
+ {
+
+ __httpRequestContent.Add(
+ content: new global::System.Net.Http.StringContent(request.ContextWindow ?? string.Empty),
+ name: "\"context_window\"");
+
}
if (request.Quality != default)
{
@@ -885,7 +901,11 @@ request.Maskname is null
/// `multipart/form-data`, with optional `reference_images` and a `mask`.
/// Returns results directly by default; set `async` or supply a
/// `webhook_url` to get a `generation_id` and poll
- /// `GET /v2/generations/{generation_id}`.
+ /// `GET /v2/generations/{generation_id}`.
+ /// `context_window` narrows the edit to one region of the image, so a
+ /// large image keeps its detail: pass `x,y,width,height`, or `auto`
+ /// together with a `mask`. The result always keeps the image's own width
+ /// and height.
///
///
/// Default Value: false
@@ -899,22 +919,30 @@ request.Maskname is null
/// The image to edit, as an existing upload or generated image asset. Supply this or `image`, never both. Takes priority over `image` if both are supplied. Cannot be combined with `mask`.
///
///
- /// The image to edit (max 25MB; JPEG, PNG, or WEBP). Multipart requests only. The output always matches this image's width and height, and pixels the edit did not meaningfully change are copied exactly from it. Images too large for the model are scaled down, keeping their proportions, and returned as rendered. Images with an aspect ratio outside 1:6 to 6:1 are rejected.
+ /// The image to edit, as raw bytes (max 50MB; JPEG, PNG, or WEBP). Multipart requests only; ignored if `image_asset_identifier` is also supplied. Required when supplying a `mask` or a `context_window`. The output always matches this image's width and height, and pixels the edit did not meaningfully change are copied exactly from it.
///
///
- /// The image to edit (max 25MB; JPEG, PNG, or WEBP). Multipart requests only. The output always matches this image's width and height, and pixels the edit did not meaningfully change are copied exactly from it. Images too large for the model are scaled down, keeping their proportions, and returned as rendered. Images with an aspect ratio outside 1:6 to 6:1 are rejected.
+ /// The image to edit, as raw bytes (max 50MB; JPEG, PNG, or WEBP). Multipart requests only; ignored if `image_asset_identifier` is also supplied. Required when supplying a `mask` or a `context_window`. The output always matches this image's width and height, and pixels the edit did not meaningfully change are copied exactly from it.
///
///
/// Optional additional images to guide the edit, by reference. These are never edited themselves; only `image_asset_identifier` or `image` is. Requires the image being edited to be supplied by reference too, and cannot be combined with `mask`.
///
///
- /// Optional images to guide the edit (max 4, max 25MB each; JPEG, PNG, or WEBP). They are never edited themselves; only `image` is. Multipart requests only. A request with a `mask` can include at most three, because the mask takes up one reference slot.
+ /// Optional images to guide the edit (max 4, max 50MB each; JPEG, PNG, or WEBP). They are never edited themselves; only `image` is. Multipart requests only; ignored if `reference_image_asset_identifiers` is also supplied. A request with a `mask` can include at most three, because the mask takes up one reference slot.
///
///
- /// An optional mask that limits the edit to part of `image` (max 25MB; JPEG, PNG, or WEBP). Multipart requests only. Black marks the area to edit and white the area to keep; values in between are rounded to the nearer of the two. The mask must have the same width and height as `image` and contain both black and white areas. A masked request can include at most three `reference_images`.
+ /// An optional mask that limits the edit to part of `image` (max 50MB; JPEG, PNG, or WEBP). Multipart requests only. Black marks the area to edit and white the area to keep; values in between are rounded to the nearer of the two. The mask must have the same width and height as `image` and contain both black and white areas. Requires `image` as raw bytes; masks cannot be combined with asset references. A masked request can include at most three `reference_images`.
///
///
- /// An optional mask that limits the edit to part of `image` (max 25MB; JPEG, PNG, or WEBP). Multipart requests only. Black marks the area to edit and white the area to keep; values in between are rounded to the nearer of the two. The mask must have the same width and height as `image` and contain both black and white areas. A masked request can include at most three `reference_images`.
+ /// An optional mask that limits the edit to part of `image` (max 50MB; JPEG, PNG, or WEBP). Multipart requests only. Black marks the area to edit and white the area to keep; values in between are rounded to the nearer of the two. The mask must have the same width and height as `image` and contain both black and white areas. Requires `image` as raw bytes; masks cannot be combined with asset references. A masked request can include at most three `reference_images`.
+ ///
+ ///
+ /// How much of the image being edited the model may see and change.
+ /// `none`, the default, edits the whole image. A large image may come back smaller than it was sent.
+ /// `auto` fits a region around what the `mask` selects and edits only that region, so its detail is kept. It requires a `mask`. A small enough image has no region to fit and is edited as it is.
+ /// `x,y,width,height` names the region explicitly, in the edited image's own pixels with the origin at its top-left corner — for example `1024,512,2048,1536`. The region must lie inside the image, measure at least 256px on each side, have an aspect ratio between 1:6 and 6:1, and cover no more than 4194304 pixels. A `mask` may select only pixels inside it.
+ /// With `auto` or an explicit region, every pixel outside the region is returned exactly as supplied and the output keeps the image's own width and height.
+ /// Default Value: none
///
///
/// The rendering quality to use. `very_low` is the fastest and cheapest, and `high` takes longer and is priced higher.
@@ -965,6 +993,7 @@ request.Maskname is null
global::System.Collections.Generic.IList? referenceImages = default,
byte[]? mask = default,
string? maskname = default,
+ string? contextWindow = default,
global::Ideogram.PreciseEditImageIdeogram45RequestQuality? quality = default,
int? seed = default,
int? numImages = default,
@@ -986,6 +1015,7 @@ request.Maskname is null
ReferenceImages = referenceImages,
Mask = mask,
Maskname = maskname,
+ ContextWindow = contextWindow,
Quality = quality,
Seed = seed,
NumImages = numImages,
diff --git a/src/libs/Ideogram/Generated/Ideogram.ImagesReframe.JsonSerializerContext.g.cs b/src/libs/Ideogram/Generated/Ideogram.ImagesReframe.JsonSerializerContext.g.cs
index 6ccb74f..3f8dfb0 100644
--- a/src/libs/Ideogram/Generated/Ideogram.ImagesReframe.JsonSerializerContext.g.cs
+++ b/src/libs/Ideogram/Generated/Ideogram.ImagesReframe.JsonSerializerContext.g.cs
@@ -35,6 +35,16 @@ namespace Ideogram
[global::System.Text.Json.Serialization.JsonSerializable(typeof(global::Ideogram.ReframeImageIdeogramV3RequestRenderingSpeed), TypeInfoPropertyName = "ReframeImageIdeogramV3RequestRenderingSpeed2")]
[global::System.Text.Json.Serialization.JsonSerializable(typeof(global::Ideogram.ReframeImageNanoBanana2Response))]
[global::System.Text.Json.Serialization.JsonSerializable(typeof(global::Ideogram.ReframeImageNanoBanana2Request))]
+ [global::System.Text.Json.Serialization.JsonSerializable(typeof(global::Ideogram.ReframeImageNanoBananaProResponse))]
+ [global::System.Text.Json.Serialization.JsonSerializable(typeof(global::Ideogram.ReframeImageNanoBananaProRequest))]
+ [global::System.Text.Json.Serialization.JsonSerializable(typeof(global::Ideogram.ReframeImageNanoBananaProRequestResolutionTier), TypeInfoPropertyName = "ReframeImageNanoBananaProRequestResolutionTier2")]
+ [global::System.Text.Json.Serialization.JsonSerializable(typeof(global::Ideogram.ReframeImageGptImage25FlareResponse))]
+ [global::System.Text.Json.Serialization.JsonSerializable(typeof(global::Ideogram.ReframeImageGptImage25FlareRequest))]
+ [global::System.Text.Json.Serialization.JsonSerializable(typeof(global::Ideogram.ReframeImageGptImage25FlareRequestQuality), TypeInfoPropertyName = "ReframeImageGptImage25FlareRequestQuality2")]
+ [global::System.Text.Json.Serialization.JsonSerializable(typeof(global::Ideogram.ReframeImageBriaExpandResponse))]
+ [global::System.Text.Json.Serialization.JsonSerializable(typeof(global::Ideogram.ReframeImageBriaExpandRequest))]
+ [global::System.Text.Json.Serialization.JsonSerializable(typeof(global::Ideogram.ReframeImageAutoResponse))]
+ [global::System.Text.Json.Serialization.JsonSerializable(typeof(global::Ideogram.ReframeImageAutoRequest))]
[global::System.Text.Json.Serialization.JsonSerializable(typeof(global::Ideogram.ColorPaletteWithMembers))]
[global::System.Text.Json.Serialization.JsonSerializable(typeof(global::System.Collections.Generic.IList))]
[global::System.Text.Json.Serialization.JsonSerializable(typeof(global::Ideogram.ColorPaletteMember))]
@@ -50,6 +60,8 @@ namespace Ideogram
[global::System.Text.Json.Serialization.JsonSerializable(typeof(global::Ideogram.IdeogramV3StylePreset?), TypeInfoPropertyName = "NullableIdeogramV3StylePreset2")]
[global::System.Text.Json.Serialization.JsonSerializable(typeof(double?))]
[global::System.Text.Json.Serialization.JsonSerializable(typeof(global::Ideogram.ReframeImageIdeogramV3RequestRenderingSpeed?), TypeInfoPropertyName = "NullableReframeImageIdeogramV3RequestRenderingSpeed2")]
+ [global::System.Text.Json.Serialization.JsonSerializable(typeof(global::Ideogram.ReframeImageNanoBananaProRequestResolutionTier?), TypeInfoPropertyName = "NullableReframeImageNanoBananaProRequestResolutionTier2")]
+ [global::System.Text.Json.Serialization.JsonSerializable(typeof(global::Ideogram.ReframeImageGptImage25FlareRequestQuality?), TypeInfoPropertyName = "NullableReframeImageGptImage25FlareRequestQuality2")]
[global::System.Text.Json.Serialization.JsonSerializable(typeof(global::Ideogram.AssetType?), TypeInfoPropertyName = "NullableAssetType2")]
[global::System.Text.Json.Serialization.JsonSerializable(typeof(global::Ideogram.IdeogramColorPalettePresetName?), TypeInfoPropertyName = "NullableIdeogramColorPalettePresetName2")]
[global::System.Text.Json.Serialization.JsonSerializable(typeof(global::System.Collections.Generic.List))]
@@ -139,6 +151,14 @@ public override bool CanConvert(global::System.Type typeToConvert)
|| typeToConvert == typeof(global::Ideogram.ReframeImageIdeogramV3RequestRenderingSpeed?)
+ || typeToConvert == typeof(global::Ideogram.ReframeImageNanoBananaProRequestResolutionTier)
+
+ || typeToConvert == typeof(global::Ideogram.ReframeImageNanoBananaProRequestResolutionTier?)
+
+ || typeToConvert == typeof(global::Ideogram.ReframeImageGptImage25FlareRequestQuality)
+
+ || typeToConvert == typeof(global::Ideogram.ReframeImageGptImage25FlareRequestQuality?)
+
|| typeToConvert == typeof(global::Ideogram.ResolutionV3)
|| typeToConvert == typeof(global::Ideogram.ResolutionV3?)
@@ -190,6 +210,26 @@ public override bool CanConvert(global::System.Type typeToConvert)
return new global::Ideogram.JsonConverters.ReframeImageIdeogramV3RequestRenderingSpeedNullableJsonConverter();
}
+ if (typeToConvert == typeof(global::Ideogram.ReframeImageNanoBananaProRequestResolutionTier))
+ {
+ return new global::Ideogram.JsonConverters.ReframeImageNanoBananaProRequestResolutionTierJsonConverter();
+ }
+
+ if (typeToConvert == typeof(global::Ideogram.ReframeImageNanoBananaProRequestResolutionTier?))
+ {
+ return new global::Ideogram.JsonConverters.ReframeImageNanoBananaProRequestResolutionTierNullableJsonConverter();
+ }
+
+ if (typeToConvert == typeof(global::Ideogram.ReframeImageGptImage25FlareRequestQuality))
+ {
+ return new global::Ideogram.JsonConverters.ReframeImageGptImage25FlareRequestQualityJsonConverter();
+ }
+
+ if (typeToConvert == typeof(global::Ideogram.ReframeImageGptImage25FlareRequestQuality?))
+ {
+ return new global::Ideogram.JsonConverters.ReframeImageGptImage25FlareRequestQualityNullableJsonConverter();
+ }
+
if (typeToConvert == typeof(global::Ideogram.ResolutionV3))
{
return new global::Ideogram.JsonConverters.ResolutionV3JsonConverter();
diff --git a/src/libs/Ideogram/Generated/Ideogram.ImagesReframeClient.Auto.g.cs b/src/libs/Ideogram/Generated/Ideogram.ImagesReframeClient.Auto.g.cs
new file mode 100644
index 0000000..098ef53
--- /dev/null
+++ b/src/libs/Ideogram/Generated/Ideogram.ImagesReframeClient.Auto.g.cs
@@ -0,0 +1,852 @@
+
+#nullable enable
+
+namespace Ideogram
+{
+ public partial class ImagesReframeClient
+ {
+
+
+ private static readonly global::Ideogram.EndPointSecurityRequirement s_AutoSecurityRequirement0 =
+ new global::Ideogram.EndPointSecurityRequirement
+ {
+ Authorizations = new global::Ideogram.EndPointAuthorizationRequirement[]
+ { new global::Ideogram.EndPointAuthorizationRequirement
+ {
+ Type = "Http",
+ SchemeId = "HttpBearer",
+ Location = "Header",
+ Name = "Bearer",
+ FriendlyName = "Bearer",
+ },
+ },
+ };
+ private static readonly global::Ideogram.EndPointSecurityRequirement[] s_AutoSecurityRequirements =
+ new global::Ideogram.EndPointSecurityRequirement[]
+ { s_AutoSecurityRequirement0,
+ };
+ partial void PrepareAutoArguments(
+ global::System.Net.Http.HttpClient httpClient,
+ ref bool? dryRun,
+ global::Ideogram.ReframeImageAutoRequest request);
+ partial void PrepareAutoRequest(
+ global::System.Net.Http.HttpClient httpClient,
+ global::System.Net.Http.HttpRequestMessage httpRequestMessage,
+ bool? dryRun,
+ global::Ideogram.ReframeImageAutoRequest request);
+ partial void ProcessAutoResponse(
+ global::System.Net.Http.HttpClient httpClient,
+ global::System.Net.Http.HttpResponseMessage httpResponseMessage);
+
+ partial void ProcessAutoResponseContent(
+ global::System.Net.Http.HttpClient httpClient,
+ global::System.Net.Http.HttpResponseMessage httpResponseMessage,
+ ref string content);
+
+ ///
+ /// Reframe an image, letting Ideogram pick the model
+ /// Reframe one image to a new aspect ratio without choosing a model.
+ /// Ideogram selects the model best suited to the source and may route
+ /// different requests to different models; the request is billed at the
+ /// chosen model's price. Supply either an existing Ideogram image asset
+ /// or raw image bytes, but not both.
+ /// This operation is asynchronous. It returns as soon as the request is
+ /// accepted; poll `GET /v2/generations/{generation_id}` for completion
+ /// and results.
+ ///
+ ///
+ /// Default Value: false
+ ///
+ ///
+ /// Per-request overrides such as headers, query parameters, timeout, retries, and response buffering.
+ /// The token to cancel the operation with
+ ///
+ public async global::System.Threading.Tasks.Task AutoAsync(
+
+ global::Ideogram.ReframeImageAutoRequest request,
+ bool? dryRun = default,
+ global::Ideogram.AutoSDKRequestOptions? requestOptions = default,
+ global::System.Threading.CancellationToken cancellationToken = default)
+ {
+ var __response = await AutoAsResponseAsync(
+
+ request: request,
+ dryRun: dryRun,
+ requestOptions: requestOptions,
+ cancellationToken: cancellationToken
+ ).ConfigureAwait(false);
+
+ return __response.Body;
+ }
+ ///
+ /// Reframe an image, letting Ideogram pick the model
+ /// Reframe one image to a new aspect ratio without choosing a model.
+ /// Ideogram selects the model best suited to the source and may route
+ /// different requests to different models; the request is billed at the
+ /// chosen model's price. Supply either an existing Ideogram image asset
+ /// or raw image bytes, but not both.
+ /// This operation is asynchronous. It returns as soon as the request is
+ /// accepted; poll `GET /v2/generations/{generation_id}` for completion
+ /// and results.
+ ///
+ ///
+ /// Default Value: false
+ ///
+ ///
+ /// Per-request overrides such as headers, query parameters, timeout, retries, and response buffering.
+ /// The token to cancel the operation with
+ ///
+ public async global::System.Threading.Tasks.Task> AutoAsResponseAsync(
+
+ global::Ideogram.ReframeImageAutoRequest request,
+ bool? dryRun = default,
+ global::Ideogram.AutoSDKRequestOptions? requestOptions = default,
+ global::System.Threading.CancellationToken cancellationToken = default)
+ {
+ request = request ?? throw new global::System.ArgumentNullException(nameof(request));
+
+ PrepareArguments(
+ client: HttpClient);
+ PrepareAutoArguments(
+ httpClient: HttpClient,
+ dryRun: ref dryRun,
+ request: request);
+
+
+ var __authorizations = global::Ideogram.EndPointSecurityResolver.ResolveAuthorizations(
+ availableAuthorizations: Authorizations,
+ securityRequirements: s_AutoSecurityRequirements,
+ operationName: "AutoAsync");
+
+ using var __timeoutCancellationTokenSource = global::Ideogram.AutoSDKRequestOptionsSupport.CreateTimeoutCancellationTokenSource(
+ clientOptions: Options,
+ requestOptions: requestOptions,
+ cancellationToken: cancellationToken);
+ var __effectiveCancellationToken = __timeoutCancellationTokenSource?.Token ?? cancellationToken;
+ var __effectiveReadResponseAsString = global::Ideogram.AutoSDKRequestOptionsSupport.GetReadResponseAsString(
+ clientOptions: Options,
+ requestOptions: requestOptions,
+ fallbackValue: ReadResponseAsString);
+ var __maxAttempts = global::Ideogram.AutoSDKRequestOptionsSupport.GetMaxAttempts(
+ clientOptions: Options,
+ requestOptions: requestOptions,
+ supportsRetry: false);
+
+ global::System.Net.Http.HttpRequestMessage __CreateHttpRequest()
+ {
+
+ var __pathBuilder = new global::Ideogram.PathBuilder(
+ path: "/v2/image/reframe/auto",
+ baseUri: HttpClient.BaseAddress);
+ __pathBuilder
+ .AddOptionalParameter("dry_run", dryRun?.ToString().ToLowerInvariant())
+ ;
+ var __path = __pathBuilder.ToString();
+ __path = global::Ideogram.AutoSDKRequestOptionsSupport.AppendQueryParameters(
+ path: __path,
+ clientParameters: Options.QueryParameters,
+ requestParameters: requestOptions?.QueryParameters);
+ var __httpRequest = new global::System.Net.Http.HttpRequestMessage(
+ method: global::System.Net.Http.HttpMethod.Post,
+ requestUri: new global::System.Uri(__path, global::System.UriKind.RelativeOrAbsolute));
+#if NET6_0_OR_GREATER
+ __httpRequest.Version = global::System.Net.HttpVersion.Version11;
+ __httpRequest.VersionPolicy = global::System.Net.Http.HttpVersionPolicy.RequestVersionOrHigher;
+#endif
+
+ foreach (var __authorization in __authorizations)
+ {
+ if (__authorization.Type == "Http" ||
+ __authorization.Type == "OAuth2" ||
+ __authorization.Type == "OpenIdConnect")
+ {
+ __httpRequest.Headers.Authorization = new global::System.Net.Http.Headers.AuthenticationHeaderValue(
+ scheme: __authorization.Name,
+ parameter: __authorization.Value);
+ }
+ else if (__authorization.Type == "ApiKey" &&
+ __authorization.Location == "Header")
+ {
+ __httpRequest.Headers.Add(__authorization.Name, __authorization.Value);
+ }
+ }
+
+ var __httpRequestContent = new global::System.Net.Http.MultipartFormDataContent();
+ if (request.ImageAssetIdentifier != default)
+ {
+
+ __httpRequestContent.Add(
+ content: new global::System.Net.Http.StringContent(request.ImageAssetIdentifier.ToJson(JsonSerializerContext)),
+ name: "\"image_asset_identifier\"");
+
+ }
+ if (request.Image != default)
+ {
+
+ var __contentImage = new global::System.Net.Http.ByteArrayContent(request.Image ?? global::System.Array.Empty());
+ __contentImage.Headers.ContentType = new global::System.Net.Http.Headers.MediaTypeHeaderValue(
+ request.Imagename is null
+ ? "application/octet-stream"
+ : (global::System.IO.Path.GetExtension(request.Imagename) ?? string.Empty).ToLowerInvariant() switch
+ {
+ ".aac" => "audio/aac",
+ ".flac" => "audio/flac",
+ ".gif" => "image/gif",
+ ".jpeg" => "image/jpeg",
+ ".jpg" => "image/jpeg",
+ ".json" => "application/json",
+ ".m4a" => "audio/mp4",
+ ".mp3" => "audio/mpeg",
+ ".mp4" => "video/mp4",
+ ".mpeg" => "audio/mpeg",
+ ".mpga" => "audio/mpeg",
+ ".oga" => "audio/ogg",
+ ".ogg" => "audio/ogg",
+ ".opus" => "audio/ogg",
+ ".pdf" => "application/pdf",
+ ".png" => "image/png",
+ ".txt" => "text/plain",
+ ".wav" => "audio/wav",
+ ".weba" => "audio/webm",
+ ".webm" => "video/webm",
+ ".webp" => "image/webp",
+ _ => "application/octet-stream",
+ });
+ __httpRequestContent.Add(
+ content: __contentImage,
+ name: "\"image\"",
+ fileName: request.Imagename != null ? $"\"{request.Imagename}\"" : string.Empty);
+ if (__contentImage.Headers.ContentDisposition != null)
+ {
+ __contentImage.Headers.ContentDisposition.FileNameStar = null;
+ }
+
+ }
+ __httpRequestContent.Add(
+ content: new global::System.Net.Http.StringContent(request.AspectRatio ?? string.Empty),
+ name: "\"aspect_ratio\"");
+
+ if (request.Private != default)
+ {
+
+ __httpRequestContent.Add(
+ content: new global::System.Net.Http.StringContent((global::System.Convert.ToString(request.Private, global::System.Globalization.CultureInfo.InvariantCulture) ?? string.Empty).ToLowerInvariant()),
+ name: "\"private\"");
+
+ }
+ if (request.NumImages != default)
+ {
+
+ __httpRequestContent.Add(
+ content: new global::System.Net.Http.StringContent(global::System.Convert.ToString(request.NumImages, global::System.Globalization.CultureInfo.InvariantCulture) ?? string.Empty),
+ name: "\"num_images\"");
+
+ }
+ if (request.Seed != default)
+ {
+
+ __httpRequestContent.Add(
+ content: new global::System.Net.Http.StringContent(global::System.Convert.ToString(request.Seed, global::System.Globalization.CultureInfo.InvariantCulture) ?? string.Empty),
+ name: "\"seed\"");
+
+ }
+
+ __httpRequest.Content = __httpRequestContent;
+
+ global::Ideogram.AutoSDKRequestOptionsSupport.ApplyHeaders(
+ request: __httpRequest,
+ clientHeaders: Options.Headers,
+ requestHeaders: requestOptions?.Headers);
+
+ PrepareRequest(
+ client: HttpClient,
+ request: __httpRequest);
+ PrepareAutoRequest(
+ httpClient: HttpClient,
+ httpRequestMessage: __httpRequest,
+ dryRun: dryRun,
+ request: request);
+
+ return __httpRequest;
+ }
+
+ global::System.Net.Http.HttpRequestMessage? __httpRequest = null;
+ global::System.Net.Http.HttpResponseMessage? __response = null;
+ var __attemptNumber = 0;
+ try
+ {
+ for (var __attempt = 1; __attempt <= __maxAttempts; __attempt++)
+ {
+ __attemptNumber = __attempt;
+ __httpRequest = __CreateHttpRequest();
+ await global::Ideogram.AutoSDKRequestOptionsSupport.OnBeforeRequestAsync(
+ clientOptions: Options,
+ context: global::Ideogram.AutoSDKRequestOptionsSupport.CreateHookContext(
+ operationId: "Auto",
+ methodName: "AutoAsync",
+ pathTemplate: "\"/v2/image/reframe/auto\"",
+ httpMethod: "POST",
+ baseUri: BaseUri,
+ request: __httpRequest ?? throw new global::System.InvalidOperationException("The HTTP request was not created before invoking a request hook."),
+ response: null,
+ exception: null,
+ clientOptions: Options,
+ requestOptions: requestOptions,
+ attempt: __attempt,
+ maxAttempts: __maxAttempts,
+ willRetry: false,
+ retryDelay: null,
+ retryReason: global::System.String.Empty,
+ cancellationToken: __effectiveCancellationToken)).ConfigureAwait(false);
+ try
+ {
+ __response = await HttpClient.SendAsync(
+ request: __httpRequest,
+ completionOption: global::System.Net.Http.HttpCompletionOption.ResponseContentRead,
+ cancellationToken: __effectiveCancellationToken).ConfigureAwait(false);
+ }
+ catch (global::System.Net.Http.HttpRequestException __exception)
+ {
+ var __retryDelay = global::Ideogram.AutoSDKRequestOptionsSupport.GetRetryDelay(
+ clientOptions: Options,
+ requestOptions: requestOptions,
+ response: null,
+ attempt: __attempt);
+ var __willRetry = __attempt < __maxAttempts && !__effectiveCancellationToken.IsCancellationRequested;
+ await global::Ideogram.AutoSDKRequestOptionsSupport.OnAfterErrorAsync(
+ clientOptions: Options,
+ context: global::Ideogram.AutoSDKRequestOptionsSupport.CreateHookContext(
+ operationId: "Auto",
+ methodName: "AutoAsync",
+ pathTemplate: "\"/v2/image/reframe/auto\"",
+ httpMethod: "POST",
+ baseUri: BaseUri,
+ request: __httpRequest ?? throw new global::System.InvalidOperationException("The HTTP request was not created before invoking a request hook."),
+ response: null,
+ exception: __exception,
+ clientOptions: Options,
+ requestOptions: requestOptions,
+ attempt: __attempt,
+ maxAttempts: __maxAttempts,
+ willRetry: __willRetry,
+ retryDelay: __willRetry ? __retryDelay : (global::System.TimeSpan?)null,
+ retryReason: "exception",
+ cancellationToken: __effectiveCancellationToken)).ConfigureAwait(false);
+ if (!__willRetry)
+ {
+ throw;
+ }
+
+ __httpRequest.Dispose();
+ __httpRequest = null;
+ await global::Ideogram.AutoSDKRequestOptionsSupport.DelayBeforeRetryAsync(
+ retryDelay: __retryDelay,
+ cancellationToken: __effectiveCancellationToken).ConfigureAwait(false);
+ continue;
+ }
+
+ if (__response != null &&
+ __attempt < __maxAttempts &&
+ global::Ideogram.AutoSDKRequestOptionsSupport.ShouldRetryStatusCode(__response.StatusCode))
+ {
+ var __retryDelay = global::Ideogram.AutoSDKRequestOptionsSupport.GetRetryDelay(
+ clientOptions: Options,
+ requestOptions: requestOptions,
+ response: __response,
+ attempt: __attempt);
+ await global::Ideogram.AutoSDKRequestOptionsSupport.OnAfterErrorAsync(
+ clientOptions: Options,
+ context: global::Ideogram.AutoSDKRequestOptionsSupport.CreateHookContext(
+ operationId: "Auto",
+ methodName: "AutoAsync",
+ pathTemplate: "\"/v2/image/reframe/auto\"",
+ httpMethod: "POST",
+ baseUri: BaseUri,
+ request: __httpRequest ?? throw new global::System.InvalidOperationException("The HTTP request was not created before invoking a request hook."),
+ response: __response,
+ exception: null,
+ clientOptions: Options,
+ requestOptions: requestOptions,
+ attempt: __attempt,
+ maxAttempts: __maxAttempts,
+ willRetry: true,
+ retryDelay: __retryDelay,
+ retryReason: "status:" + ((int)__response.StatusCode).ToString(global::System.Globalization.CultureInfo.InvariantCulture),
+ cancellationToken: __effectiveCancellationToken)).ConfigureAwait(false);
+ __response.Dispose();
+ __response = null;
+ __httpRequest.Dispose();
+ __httpRequest = null;
+ await global::Ideogram.AutoSDKRequestOptionsSupport.DelayBeforeRetryAsync(
+ retryDelay: __retryDelay,
+ cancellationToken: __effectiveCancellationToken).ConfigureAwait(false);
+ continue;
+ }
+
+ break;
+ }
+
+ if (__response == null)
+ {
+ throw new global::System.InvalidOperationException("No response received.");
+ }
+
+ using (__response)
+ {
+
+ ProcessResponse(
+ client: HttpClient,
+ response: __response);
+ ProcessAutoResponse(
+ httpClient: HttpClient,
+ httpResponseMessage: __response);
+ if (__response.IsSuccessStatusCode)
+ {
+ await global::Ideogram.AutoSDKRequestOptionsSupport.OnAfterSuccessAsync(
+ clientOptions: Options,
+ context: global::Ideogram.AutoSDKRequestOptionsSupport.CreateHookContext(
+ operationId: "Auto",
+ methodName: "AutoAsync",
+ pathTemplate: "\"/v2/image/reframe/auto\"",
+ httpMethod: "POST",
+ baseUri: BaseUri,
+ request: __httpRequest ?? throw new global::System.InvalidOperationException("The HTTP request was not created before invoking a request hook."),
+ response: __response,
+ exception: null,
+ clientOptions: Options,
+ requestOptions: requestOptions,
+ attempt: __attemptNumber,
+ maxAttempts: __maxAttempts,
+ willRetry: false,
+ retryDelay: null,
+ retryReason: global::System.String.Empty,
+ cancellationToken: __effectiveCancellationToken)).ConfigureAwait(false);
+ }
+ else
+ {
+ await global::Ideogram.AutoSDKRequestOptionsSupport.OnAfterErrorAsync(
+ clientOptions: Options,
+ context: global::Ideogram.AutoSDKRequestOptionsSupport.CreateHookContext(
+ operationId: "Auto",
+ methodName: "AutoAsync",
+ pathTemplate: "\"/v2/image/reframe/auto\"",
+ httpMethod: "POST",
+ baseUri: BaseUri,
+ request: __httpRequest ?? throw new global::System.InvalidOperationException("The HTTP request was not created before invoking a request hook."),
+ response: __response,
+ exception: null,
+ clientOptions: Options,
+ requestOptions: requestOptions,
+ attempt: __attemptNumber,
+ maxAttempts: __maxAttempts,
+ willRetry: false,
+ retryDelay: null,
+ retryReason: global::System.String.Empty,
+ cancellationToken: __effectiveCancellationToken)).ConfigureAwait(false);
+ }
+ //
+ if ((int)__response.StatusCode == 400)
+ {
+ string? __content_400 = null;
+ global::System.Exception? __exception_400 = null;
+ try
+ {
+ if (__effectiveReadResponseAsString)
+ {
+ __content_400 = await __response.Content.ReadAsStringAsync(__effectiveCancellationToken).ConfigureAwait(false);
+ }
+ else
+ {
+ __content_400 = await __response.Content.ReadAsStringAsync(__effectiveCancellationToken).ConfigureAwait(false);
+ }
+ }
+ catch (global::System.Exception __ex)
+ {
+ __exception_400 = __ex;
+ }
+
+
+ throw global::Ideogram.ApiException.Create(
+ statusCode: __response.StatusCode,
+ message: __content_400 ?? __response.ReasonPhrase ?? string.Empty,
+ innerException: __exception_400,
+ responseBody: __content_400,
+ responseHeaders: global::System.Linq.Enumerable.ToDictionary(
+ __response.Headers,
+ h => h.Key,
+ h => h.Value));
+ }
+ //
+ if ((int)__response.StatusCode == 401)
+ {
+ string? __content_401 = null;
+ global::System.Exception? __exception_401 = null;
+ try
+ {
+ if (__effectiveReadResponseAsString)
+ {
+ __content_401 = await __response.Content.ReadAsStringAsync(__effectiveCancellationToken).ConfigureAwait(false);
+ }
+ else
+ {
+ __content_401 = await __response.Content.ReadAsStringAsync(__effectiveCancellationToken).ConfigureAwait(false);
+ }
+ }
+ catch (global::System.Exception __ex)
+ {
+ __exception_401 = __ex;
+ }
+
+
+ throw global::Ideogram.ApiException.Create(
+ statusCode: __response.StatusCode,
+ message: __content_401 ?? __response.ReasonPhrase ?? string.Empty,
+ innerException: __exception_401,
+ responseBody: __content_401,
+ responseHeaders: global::System.Linq.Enumerable.ToDictionary(
+ __response.Headers,
+ h => h.Key,
+ h => h.Value));
+ }
+ // Insufficient credits or quota.
+ if ((int)__response.StatusCode == 402)
+ {
+ string? __content_402 = null;
+ global::System.Exception? __exception_402 = null;
+ global::Ideogram.GenerationErrorResponse? __value_402 = null;
+ try
+ {
+ if (__effectiveReadResponseAsString)
+ {
+ __content_402 = await __response.Content.ReadAsStringAsync(__effectiveCancellationToken).ConfigureAwait(false);
+ __value_402 = global::Ideogram.GenerationErrorResponse.FromJson(__content_402, JsonSerializerContext);
+ }
+ else
+ {
+ __content_402 = await __response.Content.ReadAsStringAsync(__effectiveCancellationToken).ConfigureAwait(false);
+
+ __value_402 = global::Ideogram.GenerationErrorResponse.FromJson(__content_402, JsonSerializerContext);
+ }
+ }
+ catch (global::System.Exception __ex)
+ {
+ __exception_402 = __ex;
+ }
+
+
+ throw global::Ideogram.ApiException.Create(
+ statusCode: __response.StatusCode,
+ message: __content_402 ?? __response.ReasonPhrase ?? string.Empty,
+ innerException: __exception_402,
+ responseBody: __content_402,
+ responseObject: __value_402,
+ responseHeaders: global::System.Linq.Enumerable.ToDictionary(
+ __response.Headers,
+ h => h.Key,
+ h => h.Value));
+ }
+ //
+ if ((int)__response.StatusCode == 404)
+ {
+ string? __content_404 = null;
+ global::System.Exception? __exception_404 = null;
+ try
+ {
+ if (__effectiveReadResponseAsString)
+ {
+ __content_404 = await __response.Content.ReadAsStringAsync(__effectiveCancellationToken).ConfigureAwait(false);
+ }
+ else
+ {
+ __content_404 = await __response.Content.ReadAsStringAsync(__effectiveCancellationToken).ConfigureAwait(false);
+ }
+ }
+ catch (global::System.Exception __ex)
+ {
+ __exception_404 = __ex;
+ }
+
+
+ throw global::Ideogram.ApiException.Create(
+ statusCode: __response.StatusCode,
+ message: __content_404 ?? __response.ReasonPhrase ?? string.Empty,
+ innerException: __exception_404,
+ responseBody: __content_404,
+ responseHeaders: global::System.Linq.Enumerable.ToDictionary(
+ __response.Headers,
+ h => h.Key,
+ h => h.Value));
+ }
+ // Too many requests.
+ if ((int)__response.StatusCode == 429)
+ {
+ string? __content_429 = null;
+ global::System.Exception? __exception_429 = null;
+ global::Ideogram.GenerationErrorResponse? __value_429 = null;
+ try
+ {
+ if (__effectiveReadResponseAsString)
+ {
+ __content_429 = await __response.Content.ReadAsStringAsync(__effectiveCancellationToken).ConfigureAwait(false);
+ __value_429 = global::Ideogram.GenerationErrorResponse.FromJson(__content_429, JsonSerializerContext);
+ }
+ else
+ {
+ __content_429 = await __response.Content.ReadAsStringAsync(__effectiveCancellationToken).ConfigureAwait(false);
+
+ __value_429 = global::Ideogram.GenerationErrorResponse.FromJson(__content_429, JsonSerializerContext);
+ }
+ }
+ catch (global::System.Exception __ex)
+ {
+ __exception_429 = __ex;
+ }
+
+
+ throw global::Ideogram.ApiException.Create(
+ statusCode: __response.StatusCode,
+ message: __content_429 ?? __response.ReasonPhrase ?? string.Empty,
+ innerException: __exception_429,
+ responseBody: __content_429,
+ responseObject: __value_429,
+ responseHeaders: global::System.Linq.Enumerable.ToDictionary(
+ __response.Headers,
+ h => h.Key,
+ h => h.Value));
+ }
+ //
+ if ((int)__response.StatusCode == 500)
+ {
+ string? __content_500 = null;
+ global::System.Exception? __exception_500 = null;
+ try
+ {
+ if (__effectiveReadResponseAsString)
+ {
+ __content_500 = await __response.Content.ReadAsStringAsync(__effectiveCancellationToken).ConfigureAwait(false);
+ }
+ else
+ {
+ __content_500 = await __response.Content.ReadAsStringAsync(__effectiveCancellationToken).ConfigureAwait(false);
+ }
+ }
+ catch (global::System.Exception __ex)
+ {
+ __exception_500 = __ex;
+ }
+
+
+ throw global::Ideogram.ApiException.Create(
+ statusCode: __response.StatusCode,
+ message: __content_500 ?? __response.ReasonPhrase ?? string.Empty,
+ innerException: __exception_500,
+ responseBody: __content_500,
+ responseHeaders: global::System.Linq.Enumerable.ToDictionary(
+ __response.Headers,
+ h => h.Key,
+ h => h.Value));
+ }
+ //
+ if ((int)__response.StatusCode == 503)
+ {
+ string? __content_503 = null;
+ global::System.Exception? __exception_503 = null;
+ try
+ {
+ if (__effectiveReadResponseAsString)
+ {
+ __content_503 = await __response.Content.ReadAsStringAsync(__effectiveCancellationToken).ConfigureAwait(false);
+ }
+ else
+ {
+ __content_503 = await __response.Content.ReadAsStringAsync(__effectiveCancellationToken).ConfigureAwait(false);
+ }
+ }
+ catch (global::System.Exception __ex)
+ {
+ __exception_503 = __ex;
+ }
+
+
+ throw global::Ideogram.ApiException.Create(
+ statusCode: __response.StatusCode,
+ message: __content_503 ?? __response.ReasonPhrase ?? string.Empty,
+ innerException: __exception_503,
+ responseBody: __content_503,
+ responseHeaders: global::System.Linq.Enumerable.ToDictionary(
+ __response.Headers,
+ h => h.Key,
+ h => h.Value));
+ }
+
+ if (__effectiveReadResponseAsString)
+ {
+ var __content = await __response.Content.ReadAsStringAsync(
+ #if NET5_0_OR_GREATER
+ __effectiveCancellationToken
+ #endif
+ ).ConfigureAwait(false);
+
+ ProcessResponseContent(
+ client: HttpClient,
+ response: __response,
+ content: ref __content);
+ ProcessAutoResponseContent(
+ httpClient: HttpClient,
+ httpResponseMessage: __response,
+ content: ref __content);
+
+ try
+ {
+ __response.EnsureSuccessStatusCode();
+
+ var __value = global::Ideogram.ReframeImageAutoResponse.FromJson(__content, JsonSerializerContext) ??
+ throw new global::System.InvalidOperationException($"Response deserialization failed for \"{__content}\" ");
+ return new global::Ideogram.AutoSDKHttpResponse(
+ statusCode: __response.StatusCode,
+ headers: global::Ideogram.AutoSDKHttpResponse.CreateHeaders(__response),
+ requestUri: __response.RequestMessage?.RequestUri,
+ body: __value);
+ }
+ catch (global::System.Exception __ex)
+ {
+ throw global::Ideogram.ApiException.Create(
+ statusCode: __response.StatusCode,
+ message: __content ?? __response.ReasonPhrase ?? string.Empty,
+ innerException: __ex,
+ responseBody: __content,
+ responseHeaders: global::System.Linq.Enumerable.ToDictionary(
+ __response.Headers,
+ h => h.Key,
+ h => h.Value));
+ }
+ }
+ else
+ {
+ try
+ {
+ __response.EnsureSuccessStatusCode();
+ using var __content = await __response.Content.ReadAsStreamAsync(
+ #if NET5_0_OR_GREATER
+ __effectiveCancellationToken
+ #endif
+ ).ConfigureAwait(false);
+
+ var __value = await global::Ideogram.ReframeImageAutoResponse.FromJsonStreamAsync(__content, JsonSerializerContext).ConfigureAwait(false) ??
+ throw new global::System.InvalidOperationException("Response deserialization failed.");
+ return new global::Ideogram.AutoSDKHttpResponse(
+ statusCode: __response.StatusCode,
+ headers: global::Ideogram.AutoSDKHttpResponse.CreateHeaders(__response),
+ requestUri: __response.RequestMessage?.RequestUri,
+ body: __value);
+ }
+ catch (global::System.Exception __ex)
+ {
+ string? __content = null;
+ try
+ {
+ __content = await __response.Content.ReadAsStringAsync(
+ #if NET5_0_OR_GREATER
+ __effectiveCancellationToken
+ #endif
+ ).ConfigureAwait(false);
+ }
+ catch (global::System.Exception)
+ {
+ }
+
+ throw global::Ideogram.ApiException.Create(
+ statusCode: __response.StatusCode,
+ message: __content ?? __response.ReasonPhrase ?? string.Empty,
+ innerException: __ex,
+ responseBody: __content,
+ responseHeaders: global::System.Linq.Enumerable.ToDictionary(
+ __response.Headers,
+ h => h.Key,
+ h => h.Value));
+ }
+ }
+
+ }
+ }
+ finally
+ {
+ __httpRequest?.Dispose();
+ }
+ }
+ ///
+ /// Reframe an image, letting Ideogram pick the model
+ /// Reframe one image to a new aspect ratio without choosing a model.
+ /// Ideogram selects the model best suited to the source and may route
+ /// different requests to different models; the request is billed at the
+ /// chosen model's price. Supply either an existing Ideogram image asset
+ /// or raw image bytes, but not both.
+ /// This operation is asynchronous. It returns as soon as the request is
+ /// accepted; poll `GET /v2/generations/{generation_id}` for completion
+ /// and results.
+ ///
+ ///
+ /// Default Value: false
+ ///
+ ///
+ /// An identifier for an ideogram asset.
+ /// Example: {"asset_type":"RESPONSE","asset_id":"7uS_VESkRI6O3-sVgHQp_A"}
+ ///
+ ///
+ /// The JPEG, PNG, or WEBP image to reframe (max 50MB).
+ ///
+ ///
+ /// The JPEG, PNG, or WEBP image to reframe (max 50MB).
+ ///
+ ///
+ /// The requested output aspect ratio, as `width:height`.
+ /// Example: 969
+ ///
+ ///
+ /// API-key requests are always private. For bearer-authenticated
+ /// requests, this controls whether the result is private; when
+ /// omitted, it follows the caller's plan entitlement. Enterprise
+ /// generations are always private.
+ ///
+ ///
+ /// The number of output images to generate.
+ /// Default Value: 1
+ ///
+ ///
+ /// Random seed. Set for reproducible generation.
+ /// Example: 12345
+ ///
+ /// Per-request overrides such as headers, query parameters, timeout, retries, and response buffering.
+ /// The token to cancel the operation with
+ ///
+ public async global::System.Threading.Tasks.Task AutoAsync(
+ string aspectRatio,
+ bool? dryRun = default,
+ global::Ideogram.AssetIdentifier? imageAssetIdentifier = default,
+ byte[]? image = default,
+ string? imagename = default,
+ bool? @private = default,
+ int? numImages = default,
+ int? seed = default,
+ global::Ideogram.AutoSDKRequestOptions? requestOptions = default,
+ global::System.Threading.CancellationToken cancellationToken = default)
+ {
+ var __request = new global::Ideogram.ReframeImageAutoRequest
+ {
+ ImageAssetIdentifier = imageAssetIdentifier,
+ Image = image,
+ Imagename = imagename,
+ AspectRatio = aspectRatio,
+ Private = @private,
+ NumImages = numImages,
+ Seed = seed,
+ };
+
+ return await AutoAsync(
+ dryRun: dryRun,
+ request: __request,
+ requestOptions: requestOptions,
+ cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/libs/Ideogram/Generated/Ideogram.ImagesReframeClient.BriaExpand.g.cs b/src/libs/Ideogram/Generated/Ideogram.ImagesReframeClient.BriaExpand.g.cs
new file mode 100644
index 0000000..65b5d7c
--- /dev/null
+++ b/src/libs/Ideogram/Generated/Ideogram.ImagesReframeClient.BriaExpand.g.cs
@@ -0,0 +1,838 @@
+
+#nullable enable
+
+namespace Ideogram
+{
+ public partial class ImagesReframeClient
+ {
+
+
+ private static readonly global::Ideogram.EndPointSecurityRequirement s_BriaExpandSecurityRequirement0 =
+ new global::Ideogram.EndPointSecurityRequirement
+ {
+ Authorizations = new global::Ideogram.EndPointAuthorizationRequirement[]
+ { new global::Ideogram.EndPointAuthorizationRequirement
+ {
+ Type = "Http",
+ SchemeId = "HttpBearer",
+ Location = "Header",
+ Name = "Bearer",
+ FriendlyName = "Bearer",
+ },
+ },
+ };
+ private static readonly global::Ideogram.EndPointSecurityRequirement[] s_BriaExpandSecurityRequirements =
+ new global::Ideogram.EndPointSecurityRequirement[]
+ { s_BriaExpandSecurityRequirement0,
+ };
+ partial void PrepareBriaExpandArguments(
+ global::System.Net.Http.HttpClient httpClient,
+ ref bool? dryRun,
+ global::Ideogram.ReframeImageBriaExpandRequest request);
+ partial void PrepareBriaExpandRequest(
+ global::System.Net.Http.HttpClient httpClient,
+ global::System.Net.Http.HttpRequestMessage httpRequestMessage,
+ bool? dryRun,
+ global::Ideogram.ReframeImageBriaExpandRequest request);
+ partial void ProcessBriaExpandResponse(
+ global::System.Net.Http.HttpClient httpClient,
+ global::System.Net.Http.HttpResponseMessage httpResponseMessage);
+
+ partial void ProcessBriaExpandResponseContent(
+ global::System.Net.Http.HttpClient httpClient,
+ global::System.Net.Http.HttpResponseMessage httpResponseMessage,
+ ref string content);
+
+ ///
+ /// Reframe an image with Bria Expand
+ /// Extend one image to a new aspect ratio with Bria Expand. The source
+ /// pixels are kept exactly as they are, centered on the new canvas, and
+ /// the model paints only the added area. Supply either an existing
+ /// Ideogram image asset or raw image bytes, but not both. The canvas is
+ /// sized from the source so that the whole source fits.
+ /// This operation is asynchronous. It returns as soon as the request is
+ /// accepted; poll `GET /v2/generations/{generation_id}` for completion
+ /// and results.
+ ///
+ ///
+ /// Default Value: false
+ ///
+ ///
+ /// Per-request overrides such as headers, query parameters, timeout, retries, and response buffering.
+ /// The token to cancel the operation with
+ ///
+ public async global::System.Threading.Tasks.Task BriaExpandAsync(
+
+ global::Ideogram.ReframeImageBriaExpandRequest request,
+ bool? dryRun = default,
+ global::Ideogram.AutoSDKRequestOptions? requestOptions = default,
+ global::System.Threading.CancellationToken cancellationToken = default)
+ {
+ var __response = await BriaExpandAsResponseAsync(
+
+ request: request,
+ dryRun: dryRun,
+ requestOptions: requestOptions,
+ cancellationToken: cancellationToken
+ ).ConfigureAwait(false);
+
+ return __response.Body;
+ }
+ ///
+ /// Reframe an image with Bria Expand
+ /// Extend one image to a new aspect ratio with Bria Expand. The source
+ /// pixels are kept exactly as they are, centered on the new canvas, and
+ /// the model paints only the added area. Supply either an existing
+ /// Ideogram image asset or raw image bytes, but not both. The canvas is
+ /// sized from the source so that the whole source fits.
+ /// This operation is asynchronous. It returns as soon as the request is
+ /// accepted; poll `GET /v2/generations/{generation_id}` for completion
+ /// and results.
+ ///
+ ///
+ /// Default Value: false
+ ///
+ ///
+ /// Per-request overrides such as headers, query parameters, timeout, retries, and response buffering.
+ /// The token to cancel the operation with
+ ///
+ public async global::System.Threading.Tasks.Task> BriaExpandAsResponseAsync(
+
+ global::Ideogram.ReframeImageBriaExpandRequest request,
+ bool? dryRun = default,
+ global::Ideogram.AutoSDKRequestOptions? requestOptions = default,
+ global::System.Threading.CancellationToken cancellationToken = default)
+ {
+ request = request ?? throw new global::System.ArgumentNullException(nameof(request));
+
+ PrepareArguments(
+ client: HttpClient);
+ PrepareBriaExpandArguments(
+ httpClient: HttpClient,
+ dryRun: ref dryRun,
+ request: request);
+
+
+ var __authorizations = global::Ideogram.EndPointSecurityResolver.ResolveAuthorizations(
+ availableAuthorizations: Authorizations,
+ securityRequirements: s_BriaExpandSecurityRequirements,
+ operationName: "BriaExpandAsync");
+
+ using var __timeoutCancellationTokenSource = global::Ideogram.AutoSDKRequestOptionsSupport.CreateTimeoutCancellationTokenSource(
+ clientOptions: Options,
+ requestOptions: requestOptions,
+ cancellationToken: cancellationToken);
+ var __effectiveCancellationToken = __timeoutCancellationTokenSource?.Token ?? cancellationToken;
+ var __effectiveReadResponseAsString = global::Ideogram.AutoSDKRequestOptionsSupport.GetReadResponseAsString(
+ clientOptions: Options,
+ requestOptions: requestOptions,
+ fallbackValue: ReadResponseAsString);
+ var __maxAttempts = global::Ideogram.AutoSDKRequestOptionsSupport.GetMaxAttempts(
+ clientOptions: Options,
+ requestOptions: requestOptions,
+ supportsRetry: false);
+
+ global::System.Net.Http.HttpRequestMessage __CreateHttpRequest()
+ {
+
+ var __pathBuilder = new global::Ideogram.PathBuilder(
+ path: "/v2/image/reframe/bria-expand",
+ baseUri: HttpClient.BaseAddress);
+ __pathBuilder
+ .AddOptionalParameter("dry_run", dryRun?.ToString().ToLowerInvariant())
+ ;
+ var __path = __pathBuilder.ToString();
+ __path = global::Ideogram.AutoSDKRequestOptionsSupport.AppendQueryParameters(
+ path: __path,
+ clientParameters: Options.QueryParameters,
+ requestParameters: requestOptions?.QueryParameters);
+ var __httpRequest = new global::System.Net.Http.HttpRequestMessage(
+ method: global::System.Net.Http.HttpMethod.Post,
+ requestUri: new global::System.Uri(__path, global::System.UriKind.RelativeOrAbsolute));
+#if NET6_0_OR_GREATER
+ __httpRequest.Version = global::System.Net.HttpVersion.Version11;
+ __httpRequest.VersionPolicy = global::System.Net.Http.HttpVersionPolicy.RequestVersionOrHigher;
+#endif
+
+ foreach (var __authorization in __authorizations)
+ {
+ if (__authorization.Type == "Http" ||
+ __authorization.Type == "OAuth2" ||
+ __authorization.Type == "OpenIdConnect")
+ {
+ __httpRequest.Headers.Authorization = new global::System.Net.Http.Headers.AuthenticationHeaderValue(
+ scheme: __authorization.Name,
+ parameter: __authorization.Value);
+ }
+ else if (__authorization.Type == "ApiKey" &&
+ __authorization.Location == "Header")
+ {
+ __httpRequest.Headers.Add(__authorization.Name, __authorization.Value);
+ }
+ }
+
+ var __httpRequestContent = new global::System.Net.Http.MultipartFormDataContent();
+ if (request.ImageAssetIdentifier != default)
+ {
+
+ __httpRequestContent.Add(
+ content: new global::System.Net.Http.StringContent(request.ImageAssetIdentifier.ToJson(JsonSerializerContext)),
+ name: "\"image_asset_identifier\"");
+
+ }
+ if (request.Image != default)
+ {
+
+ var __contentImage = new global::System.Net.Http.ByteArrayContent(request.Image ?? global::System.Array.Empty());
+ __contentImage.Headers.ContentType = new global::System.Net.Http.Headers.MediaTypeHeaderValue(
+ request.Imagename is null
+ ? "application/octet-stream"
+ : (global::System.IO.Path.GetExtension(request.Imagename) ?? string.Empty).ToLowerInvariant() switch
+ {
+ ".aac" => "audio/aac",
+ ".flac" => "audio/flac",
+ ".gif" => "image/gif",
+ ".jpeg" => "image/jpeg",
+ ".jpg" => "image/jpeg",
+ ".json" => "application/json",
+ ".m4a" => "audio/mp4",
+ ".mp3" => "audio/mpeg",
+ ".mp4" => "video/mp4",
+ ".mpeg" => "audio/mpeg",
+ ".mpga" => "audio/mpeg",
+ ".oga" => "audio/ogg",
+ ".ogg" => "audio/ogg",
+ ".opus" => "audio/ogg",
+ ".pdf" => "application/pdf",
+ ".png" => "image/png",
+ ".txt" => "text/plain",
+ ".wav" => "audio/wav",
+ ".weba" => "audio/webm",
+ ".webm" => "video/webm",
+ ".webp" => "image/webp",
+ _ => "application/octet-stream",
+ });
+ __httpRequestContent.Add(
+ content: __contentImage,
+ name: "\"image\"",
+ fileName: request.Imagename != null ? $"\"{request.Imagename}\"" : string.Empty);
+ if (__contentImage.Headers.ContentDisposition != null)
+ {
+ __contentImage.Headers.ContentDisposition.FileNameStar = null;
+ }
+
+ }
+ __httpRequestContent.Add(
+ content: new global::System.Net.Http.StringContent(request.AspectRatio ?? string.Empty),
+ name: "\"aspect_ratio\"");
+
+ if (request.Private != default)
+ {
+
+ __httpRequestContent.Add(
+ content: new global::System.Net.Http.StringContent((global::System.Convert.ToString(request.Private, global::System.Globalization.CultureInfo.InvariantCulture) ?? string.Empty).ToLowerInvariant()),
+ name: "\"private\"");
+
+ }
+ if (request.Seed != default)
+ {
+
+ __httpRequestContent.Add(
+ content: new global::System.Net.Http.StringContent(global::System.Convert.ToString(request.Seed, global::System.Globalization.CultureInfo.InvariantCulture) ?? string.Empty),
+ name: "\"seed\"");
+
+ }
+
+ __httpRequest.Content = __httpRequestContent;
+
+ global::Ideogram.AutoSDKRequestOptionsSupport.ApplyHeaders(
+ request: __httpRequest,
+ clientHeaders: Options.Headers,
+ requestHeaders: requestOptions?.Headers);
+
+ PrepareRequest(
+ client: HttpClient,
+ request: __httpRequest);
+ PrepareBriaExpandRequest(
+ httpClient: HttpClient,
+ httpRequestMessage: __httpRequest,
+ dryRun: dryRun,
+ request: request);
+
+ return __httpRequest;
+ }
+
+ global::System.Net.Http.HttpRequestMessage? __httpRequest = null;
+ global::System.Net.Http.HttpResponseMessage? __response = null;
+ var __attemptNumber = 0;
+ try
+ {
+ for (var __attempt = 1; __attempt <= __maxAttempts; __attempt++)
+ {
+ __attemptNumber = __attempt;
+ __httpRequest = __CreateHttpRequest();
+ await global::Ideogram.AutoSDKRequestOptionsSupport.OnBeforeRequestAsync(
+ clientOptions: Options,
+ context: global::Ideogram.AutoSDKRequestOptionsSupport.CreateHookContext(
+ operationId: "BriaExpand",
+ methodName: "BriaExpandAsync",
+ pathTemplate: "\"/v2/image/reframe/bria-expand\"",
+ httpMethod: "POST",
+ baseUri: BaseUri,
+ request: __httpRequest ?? throw new global::System.InvalidOperationException("The HTTP request was not created before invoking a request hook."),
+ response: null,
+ exception: null,
+ clientOptions: Options,
+ requestOptions: requestOptions,
+ attempt: __attempt,
+ maxAttempts: __maxAttempts,
+ willRetry: false,
+ retryDelay: null,
+ retryReason: global::System.String.Empty,
+ cancellationToken: __effectiveCancellationToken)).ConfigureAwait(false);
+ try
+ {
+ __response = await HttpClient.SendAsync(
+ request: __httpRequest,
+ completionOption: global::System.Net.Http.HttpCompletionOption.ResponseContentRead,
+ cancellationToken: __effectiveCancellationToken).ConfigureAwait(false);
+ }
+ catch (global::System.Net.Http.HttpRequestException __exception)
+ {
+ var __retryDelay = global::Ideogram.AutoSDKRequestOptionsSupport.GetRetryDelay(
+ clientOptions: Options,
+ requestOptions: requestOptions,
+ response: null,
+ attempt: __attempt);
+ var __willRetry = __attempt < __maxAttempts && !__effectiveCancellationToken.IsCancellationRequested;
+ await global::Ideogram.AutoSDKRequestOptionsSupport.OnAfterErrorAsync(
+ clientOptions: Options,
+ context: global::Ideogram.AutoSDKRequestOptionsSupport.CreateHookContext(
+ operationId: "BriaExpand",
+ methodName: "BriaExpandAsync",
+ pathTemplate: "\"/v2/image/reframe/bria-expand\"",
+ httpMethod: "POST",
+ baseUri: BaseUri,
+ request: __httpRequest ?? throw new global::System.InvalidOperationException("The HTTP request was not created before invoking a request hook."),
+ response: null,
+ exception: __exception,
+ clientOptions: Options,
+ requestOptions: requestOptions,
+ attempt: __attempt,
+ maxAttempts: __maxAttempts,
+ willRetry: __willRetry,
+ retryDelay: __willRetry ? __retryDelay : (global::System.TimeSpan?)null,
+ retryReason: "exception",
+ cancellationToken: __effectiveCancellationToken)).ConfigureAwait(false);
+ if (!__willRetry)
+ {
+ throw;
+ }
+
+ __httpRequest.Dispose();
+ __httpRequest = null;
+ await global::Ideogram.AutoSDKRequestOptionsSupport.DelayBeforeRetryAsync(
+ retryDelay: __retryDelay,
+ cancellationToken: __effectiveCancellationToken).ConfigureAwait(false);
+ continue;
+ }
+
+ if (__response != null &&
+ __attempt < __maxAttempts &&
+ global::Ideogram.AutoSDKRequestOptionsSupport.ShouldRetryStatusCode(__response.StatusCode))
+ {
+ var __retryDelay = global::Ideogram.AutoSDKRequestOptionsSupport.GetRetryDelay(
+ clientOptions: Options,
+ requestOptions: requestOptions,
+ response: __response,
+ attempt: __attempt);
+ await global::Ideogram.AutoSDKRequestOptionsSupport.OnAfterErrorAsync(
+ clientOptions: Options,
+ context: global::Ideogram.AutoSDKRequestOptionsSupport.CreateHookContext(
+ operationId: "BriaExpand",
+ methodName: "BriaExpandAsync",
+ pathTemplate: "\"/v2/image/reframe/bria-expand\"",
+ httpMethod: "POST",
+ baseUri: BaseUri,
+ request: __httpRequest ?? throw new global::System.InvalidOperationException("The HTTP request was not created before invoking a request hook."),
+ response: __response,
+ exception: null,
+ clientOptions: Options,
+ requestOptions: requestOptions,
+ attempt: __attempt,
+ maxAttempts: __maxAttempts,
+ willRetry: true,
+ retryDelay: __retryDelay,
+ retryReason: "status:" + ((int)__response.StatusCode).ToString(global::System.Globalization.CultureInfo.InvariantCulture),
+ cancellationToken: __effectiveCancellationToken)).ConfigureAwait(false);
+ __response.Dispose();
+ __response = null;
+ __httpRequest.Dispose();
+ __httpRequest = null;
+ await global::Ideogram.AutoSDKRequestOptionsSupport.DelayBeforeRetryAsync(
+ retryDelay: __retryDelay,
+ cancellationToken: __effectiveCancellationToken).ConfigureAwait(false);
+ continue;
+ }
+
+ break;
+ }
+
+ if (__response == null)
+ {
+ throw new global::System.InvalidOperationException("No response received.");
+ }
+
+ using (__response)
+ {
+
+ ProcessResponse(
+ client: HttpClient,
+ response: __response);
+ ProcessBriaExpandResponse(
+ httpClient: HttpClient,
+ httpResponseMessage: __response);
+ if (__response.IsSuccessStatusCode)
+ {
+ await global::Ideogram.AutoSDKRequestOptionsSupport.OnAfterSuccessAsync(
+ clientOptions: Options,
+ context: global::Ideogram.AutoSDKRequestOptionsSupport.CreateHookContext(
+ operationId: "BriaExpand",
+ methodName: "BriaExpandAsync",
+ pathTemplate: "\"/v2/image/reframe/bria-expand\"",
+ httpMethod: "POST",
+ baseUri: BaseUri,
+ request: __httpRequest ?? throw new global::System.InvalidOperationException("The HTTP request was not created before invoking a request hook."),
+ response: __response,
+ exception: null,
+ clientOptions: Options,
+ requestOptions: requestOptions,
+ attempt: __attemptNumber,
+ maxAttempts: __maxAttempts,
+ willRetry: false,
+ retryDelay: null,
+ retryReason: global::System.String.Empty,
+ cancellationToken: __effectiveCancellationToken)).ConfigureAwait(false);
+ }
+ else
+ {
+ await global::Ideogram.AutoSDKRequestOptionsSupport.OnAfterErrorAsync(
+ clientOptions: Options,
+ context: global::Ideogram.AutoSDKRequestOptionsSupport.CreateHookContext(
+ operationId: "BriaExpand",
+ methodName: "BriaExpandAsync",
+ pathTemplate: "\"/v2/image/reframe/bria-expand\"",
+ httpMethod: "POST",
+ baseUri: BaseUri,
+ request: __httpRequest ?? throw new global::System.InvalidOperationException("The HTTP request was not created before invoking a request hook."),
+ response: __response,
+ exception: null,
+ clientOptions: Options,
+ requestOptions: requestOptions,
+ attempt: __attemptNumber,
+ maxAttempts: __maxAttempts,
+ willRetry: false,
+ retryDelay: null,
+ retryReason: global::System.String.Empty,
+ cancellationToken: __effectiveCancellationToken)).ConfigureAwait(false);
+ }
+ //
+ if ((int)__response.StatusCode == 400)
+ {
+ string? __content_400 = null;
+ global::System.Exception? __exception_400 = null;
+ try
+ {
+ if (__effectiveReadResponseAsString)
+ {
+ __content_400 = await __response.Content.ReadAsStringAsync(__effectiveCancellationToken).ConfigureAwait(false);
+ }
+ else
+ {
+ __content_400 = await __response.Content.ReadAsStringAsync(__effectiveCancellationToken).ConfigureAwait(false);
+ }
+ }
+ catch (global::System.Exception __ex)
+ {
+ __exception_400 = __ex;
+ }
+
+
+ throw global::Ideogram.ApiException.Create(
+ statusCode: __response.StatusCode,
+ message: __content_400 ?? __response.ReasonPhrase ?? string.Empty,
+ innerException: __exception_400,
+ responseBody: __content_400,
+ responseHeaders: global::System.Linq.Enumerable.ToDictionary(
+ __response.Headers,
+ h => h.Key,
+ h => h.Value));
+ }
+ //
+ if ((int)__response.StatusCode == 401)
+ {
+ string? __content_401 = null;
+ global::System.Exception? __exception_401 = null;
+ try
+ {
+ if (__effectiveReadResponseAsString)
+ {
+ __content_401 = await __response.Content.ReadAsStringAsync(__effectiveCancellationToken).ConfigureAwait(false);
+ }
+ else
+ {
+ __content_401 = await __response.Content.ReadAsStringAsync(__effectiveCancellationToken).ConfigureAwait(false);
+ }
+ }
+ catch (global::System.Exception __ex)
+ {
+ __exception_401 = __ex;
+ }
+
+
+ throw global::Ideogram.ApiException.Create(
+ statusCode: __response.StatusCode,
+ message: __content_401 ?? __response.ReasonPhrase ?? string.Empty,
+ innerException: __exception_401,
+ responseBody: __content_401,
+ responseHeaders: global::System.Linq.Enumerable.ToDictionary(
+ __response.Headers,
+ h => h.Key,
+ h => h.Value));
+ }
+ // Insufficient credits or quota.
+ if ((int)__response.StatusCode == 402)
+ {
+ string? __content_402 = null;
+ global::System.Exception? __exception_402 = null;
+ global::Ideogram.GenerationErrorResponse? __value_402 = null;
+ try
+ {
+ if (__effectiveReadResponseAsString)
+ {
+ __content_402 = await __response.Content.ReadAsStringAsync(__effectiveCancellationToken).ConfigureAwait(false);
+ __value_402 = global::Ideogram.GenerationErrorResponse.FromJson(__content_402, JsonSerializerContext);
+ }
+ else
+ {
+ __content_402 = await __response.Content.ReadAsStringAsync(__effectiveCancellationToken).ConfigureAwait(false);
+
+ __value_402 = global::Ideogram.GenerationErrorResponse.FromJson(__content_402, JsonSerializerContext);
+ }
+ }
+ catch (global::System.Exception __ex)
+ {
+ __exception_402 = __ex;
+ }
+
+
+ throw global::Ideogram.ApiException.Create(
+ statusCode: __response.StatusCode,
+ message: __content_402 ?? __response.ReasonPhrase ?? string.Empty,
+ innerException: __exception_402,
+ responseBody: __content_402,
+ responseObject: __value_402,
+ responseHeaders: global::System.Linq.Enumerable.ToDictionary(
+ __response.Headers,
+ h => h.Key,
+ h => h.Value));
+ }
+ //
+ if ((int)__response.StatusCode == 404)
+ {
+ string? __content_404 = null;
+ global::System.Exception? __exception_404 = null;
+ try
+ {
+ if (__effectiveReadResponseAsString)
+ {
+ __content_404 = await __response.Content.ReadAsStringAsync(__effectiveCancellationToken).ConfigureAwait(false);
+ }
+ else
+ {
+ __content_404 = await __response.Content.ReadAsStringAsync(__effectiveCancellationToken).ConfigureAwait(false);
+ }
+ }
+ catch (global::System.Exception __ex)
+ {
+ __exception_404 = __ex;
+ }
+
+
+ throw global::Ideogram.ApiException.Create(
+ statusCode: __response.StatusCode,
+ message: __content_404 ?? __response.ReasonPhrase ?? string.Empty,
+ innerException: __exception_404,
+ responseBody: __content_404,
+ responseHeaders: global::System.Linq.Enumerable.ToDictionary(
+ __response.Headers,
+ h => h.Key,
+ h => h.Value));
+ }
+ // Too many requests.
+ if ((int)__response.StatusCode == 429)
+ {
+ string? __content_429 = null;
+ global::System.Exception? __exception_429 = null;
+ global::Ideogram.GenerationErrorResponse? __value_429 = null;
+ try
+ {
+ if (__effectiveReadResponseAsString)
+ {
+ __content_429 = await __response.Content.ReadAsStringAsync(__effectiveCancellationToken).ConfigureAwait(false);
+ __value_429 = global::Ideogram.GenerationErrorResponse.FromJson(__content_429, JsonSerializerContext);
+ }
+ else
+ {
+ __content_429 = await __response.Content.ReadAsStringAsync(__effectiveCancellationToken).ConfigureAwait(false);
+
+ __value_429 = global::Ideogram.GenerationErrorResponse.FromJson(__content_429, JsonSerializerContext);
+ }
+ }
+ catch (global::System.Exception __ex)
+ {
+ __exception_429 = __ex;
+ }
+
+
+ throw global::Ideogram.ApiException.Create(
+ statusCode: __response.StatusCode,
+ message: __content_429 ?? __response.ReasonPhrase ?? string.Empty,
+ innerException: __exception_429,
+ responseBody: __content_429,
+ responseObject: __value_429,
+ responseHeaders: global::System.Linq.Enumerable.ToDictionary(
+ __response.Headers,
+ h => h.Key,
+ h => h.Value));
+ }
+ //
+ if ((int)__response.StatusCode == 500)
+ {
+ string? __content_500 = null;
+ global::System.Exception? __exception_500 = null;
+ try
+ {
+ if (__effectiveReadResponseAsString)
+ {
+ __content_500 = await __response.Content.ReadAsStringAsync(__effectiveCancellationToken).ConfigureAwait(false);
+ }
+ else
+ {
+ __content_500 = await __response.Content.ReadAsStringAsync(__effectiveCancellationToken).ConfigureAwait(false);
+ }
+ }
+ catch (global::System.Exception __ex)
+ {
+ __exception_500 = __ex;
+ }
+
+
+ throw global::Ideogram.ApiException.Create(
+ statusCode: __response.StatusCode,
+ message: __content_500 ?? __response.ReasonPhrase ?? string.Empty,
+ innerException: __exception_500,
+ responseBody: __content_500,
+ responseHeaders: global::System.Linq.Enumerable.ToDictionary(
+ __response.Headers,
+ h => h.Key,
+ h => h.Value));
+ }
+ //
+ if ((int)__response.StatusCode == 503)
+ {
+ string? __content_503 = null;
+ global::System.Exception? __exception_503 = null;
+ try
+ {
+ if (__effectiveReadResponseAsString)
+ {
+ __content_503 = await __response.Content.ReadAsStringAsync(__effectiveCancellationToken).ConfigureAwait(false);
+ }
+ else
+ {
+ __content_503 = await __response.Content.ReadAsStringAsync(__effectiveCancellationToken).ConfigureAwait(false);
+ }
+ }
+ catch (global::System.Exception __ex)
+ {
+ __exception_503 = __ex;
+ }
+
+
+ throw global::Ideogram.ApiException.Create(
+ statusCode: __response.StatusCode,
+ message: __content_503 ?? __response.ReasonPhrase ?? string.Empty,
+ innerException: __exception_503,
+ responseBody: __content_503,
+ responseHeaders: global::System.Linq.Enumerable.ToDictionary(
+ __response.Headers,
+ h => h.Key,
+ h => h.Value));
+ }
+
+ if (__effectiveReadResponseAsString)
+ {
+ var __content = await __response.Content.ReadAsStringAsync(
+ #if NET5_0_OR_GREATER
+ __effectiveCancellationToken
+ #endif
+ ).ConfigureAwait(false);
+
+ ProcessResponseContent(
+ client: HttpClient,
+ response: __response,
+ content: ref __content);
+ ProcessBriaExpandResponseContent(
+ httpClient: HttpClient,
+ httpResponseMessage: __response,
+ content: ref __content);
+
+ try
+ {
+ __response.EnsureSuccessStatusCode();
+
+ var __value = global::Ideogram.ReframeImageBriaExpandResponse.FromJson(__content, JsonSerializerContext) ??
+ throw new global::System.InvalidOperationException($"Response deserialization failed for \"{__content}\" ");
+ return new global::Ideogram.AutoSDKHttpResponse(
+ statusCode: __response.StatusCode,
+ headers: global::Ideogram.AutoSDKHttpResponse.CreateHeaders(__response),
+ requestUri: __response.RequestMessage?.RequestUri,
+ body: __value);
+ }
+ catch (global::System.Exception __ex)
+ {
+ throw global::Ideogram.ApiException.Create(
+ statusCode: __response.StatusCode,
+ message: __content ?? __response.ReasonPhrase ?? string.Empty,
+ innerException: __ex,
+ responseBody: __content,
+ responseHeaders: global::System.Linq.Enumerable.ToDictionary(
+ __response.Headers,
+ h => h.Key,
+ h => h.Value));
+ }
+ }
+ else
+ {
+ try
+ {
+ __response.EnsureSuccessStatusCode();
+ using var __content = await __response.Content.ReadAsStreamAsync(
+ #if NET5_0_OR_GREATER
+ __effectiveCancellationToken
+ #endif
+ ).ConfigureAwait(false);
+
+ var __value = await global::Ideogram.ReframeImageBriaExpandResponse.FromJsonStreamAsync(__content, JsonSerializerContext).ConfigureAwait(false) ??
+ throw new global::System.InvalidOperationException("Response deserialization failed.");
+ return new global::Ideogram.AutoSDKHttpResponse(
+ statusCode: __response.StatusCode,
+ headers: global::Ideogram.AutoSDKHttpResponse.CreateHeaders(__response),
+ requestUri: __response.RequestMessage?.RequestUri,
+ body: __value);
+ }
+ catch (global::System.Exception __ex)
+ {
+ string? __content = null;
+ try
+ {
+ __content = await __response.Content.ReadAsStringAsync(
+ #if NET5_0_OR_GREATER
+ __effectiveCancellationToken
+ #endif
+ ).ConfigureAwait(false);
+ }
+ catch (global::System.Exception)
+ {
+ }
+
+ throw global::Ideogram.ApiException.Create(
+ statusCode: __response.StatusCode,
+ message: __content ?? __response.ReasonPhrase ?? string.Empty,
+ innerException: __ex,
+ responseBody: __content,
+ responseHeaders: global::System.Linq.Enumerable.ToDictionary(
+ __response.Headers,
+ h => h.Key,
+ h => h.Value));
+ }
+ }
+
+ }
+ }
+ finally
+ {
+ __httpRequest?.Dispose();
+ }
+ }
+ ///
+ /// Reframe an image with Bria Expand
+ /// Extend one image to a new aspect ratio with Bria Expand. The source
+ /// pixels are kept exactly as they are, centered on the new canvas, and
+ /// the model paints only the added area. Supply either an existing
+ /// Ideogram image asset or raw image bytes, but not both. The canvas is
+ /// sized from the source so that the whole source fits.
+ /// This operation is asynchronous. It returns as soon as the request is
+ /// accepted; poll `GET /v2/generations/{generation_id}` for completion
+ /// and results.
+ ///
+ ///
+ /// Default Value: false
+ ///
+ ///
+ /// An identifier for an ideogram asset.
+ /// Example: {"asset_type":"RESPONSE","asset_id":"7uS_VESkRI6O3-sVgHQp_A"}
+ ///
+ ///
+ /// The JPEG, PNG, or WEBP image to reframe (max 50MB).
+ ///
+ ///
+ /// The JPEG, PNG, or WEBP image to reframe (max 50MB).
+ ///
+ ///
+ /// The requested output aspect ratio, as `width:height`.
+ /// Example: 969
+ ///
+ ///
+ /// API-key requests are always private. For bearer-authenticated
+ /// requests, this controls whether the result is private; when
+ /// omitted, it follows the caller's plan entitlement. Enterprise
+ /// generations are always private.
+ ///
+ ///
+ /// Random seed. Set for reproducible generation.
+ /// Example: 12345
+ ///
+ /// Per-request overrides such as headers, query parameters, timeout, retries, and response buffering.
+ /// The token to cancel the operation with
+ ///
+ public async global::System.Threading.Tasks.Task BriaExpandAsync(
+ string aspectRatio,
+ bool? dryRun = default,
+ global::Ideogram.AssetIdentifier? imageAssetIdentifier = default,
+ byte[]? image = default,
+ string? imagename = default,
+ bool? @private = default,
+ int? seed = default,
+ global::Ideogram.AutoSDKRequestOptions? requestOptions = default,
+ global::System.Threading.CancellationToken cancellationToken = default)
+ {
+ var __request = new global::Ideogram.ReframeImageBriaExpandRequest
+ {
+ ImageAssetIdentifier = imageAssetIdentifier,
+ Image = image,
+ Imagename = imagename,
+ AspectRatio = aspectRatio,
+ Private = @private,
+ Seed = seed,
+ };
+
+ return await BriaExpandAsync(
+ dryRun: dryRun,
+ request: __request,
+ requestOptions: requestOptions,
+ cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/libs/Ideogram/Generated/Ideogram.ImagesReframeClient.GptImage25Flare.g.cs b/src/libs/Ideogram/Generated/Ideogram.ImagesReframeClient.GptImage25Flare.g.cs
new file mode 100644
index 0000000..6c04d27
--- /dev/null
+++ b/src/libs/Ideogram/Generated/Ideogram.ImagesReframeClient.GptImage25Flare.g.cs
@@ -0,0 +1,863 @@
+
+#nullable enable
+
+namespace Ideogram
+{
+ public partial class ImagesReframeClient
+ {
+
+
+ private static readonly global::Ideogram.EndPointSecurityRequirement s_GptImage25FlareSecurityRequirement0 =
+ new global::Ideogram.EndPointSecurityRequirement
+ {
+ Authorizations = new global::Ideogram.EndPointAuthorizationRequirement[]
+ { new global::Ideogram.EndPointAuthorizationRequirement
+ {
+ Type = "Http",
+ SchemeId = "HttpBearer",
+ Location = "Header",
+ Name = "Bearer",
+ FriendlyName = "Bearer",
+ },
+ },
+ };
+ private static readonly global::Ideogram.EndPointSecurityRequirement[] s_GptImage25FlareSecurityRequirements =
+ new global::Ideogram.EndPointSecurityRequirement[]
+ { s_GptImage25FlareSecurityRequirement0,
+ };
+ partial void PrepareGptImage25FlareArguments(
+ global::System.Net.Http.HttpClient httpClient,
+ ref bool? dryRun,
+ global::Ideogram.ReframeImageGptImage25FlareRequest request);
+ partial void PrepareGptImage25FlareRequest(
+ global::System.Net.Http.HttpClient httpClient,
+ global::System.Net.Http.HttpRequestMessage httpRequestMessage,
+ bool? dryRun,
+ global::Ideogram.ReframeImageGptImage25FlareRequest request);
+ partial void ProcessGptImage25FlareResponse(
+ global::System.Net.Http.HttpClient httpClient,
+ global::System.Net.Http.HttpResponseMessage httpResponseMessage);
+
+ partial void ProcessGptImage25FlareResponseContent(
+ global::System.Net.Http.HttpClient httpClient,
+ global::System.Net.Http.HttpResponseMessage httpResponseMessage,
+ ref string content);
+
+ ///
+ /// Reframe an image with GPT Image 2.5 Flare
+ /// Recompose one image for a new aspect ratio with GPT Image 2.5 Flare.
+ /// Supply either an existing Ideogram image asset or raw image bytes, but
+ /// not both. The requested aspect ratio is resolved to the closest output
+ /// size the model supports.
+ /// This operation is asynchronous. It returns as soon as the request is
+ /// accepted; poll `GET /v2/generations/{generation_id}` for completion
+ /// and results.
+ ///
+ ///
+ /// Default Value: false
+ ///
+ ///
+ /// Per-request overrides such as headers, query parameters, timeout, retries, and response buffering.
+ /// The token to cancel the operation with
+ ///
+ public async global::System.Threading.Tasks.Task GptImage25FlareAsync(
+
+ global::Ideogram.ReframeImageGptImage25FlareRequest request,
+ bool? dryRun = default,
+ global::Ideogram.AutoSDKRequestOptions? requestOptions = default,
+ global::System.Threading.CancellationToken cancellationToken = default)
+ {
+ var __response = await GptImage25FlareAsResponseAsync(
+
+ request: request,
+ dryRun: dryRun,
+ requestOptions: requestOptions,
+ cancellationToken: cancellationToken
+ ).ConfigureAwait(false);
+
+ return __response.Body;
+ }
+ ///
+ /// Reframe an image with GPT Image 2.5 Flare
+ /// Recompose one image for a new aspect ratio with GPT Image 2.5 Flare.
+ /// Supply either an existing Ideogram image asset or raw image bytes, but
+ /// not both. The requested aspect ratio is resolved to the closest output
+ /// size the model supports.
+ /// This operation is asynchronous. It returns as soon as the request is
+ /// accepted; poll `GET /v2/generations/{generation_id}` for completion
+ /// and results.
+ ///
+ ///
+ /// Default Value: false
+ ///
+ ///
+ /// Per-request overrides such as headers, query parameters, timeout, retries, and response buffering.
+ /// The token to cancel the operation with
+ ///
+ public async global::System.Threading.Tasks.Task> GptImage25FlareAsResponseAsync(
+
+ global::Ideogram.ReframeImageGptImage25FlareRequest request,
+ bool? dryRun = default,
+ global::Ideogram.AutoSDKRequestOptions? requestOptions = default,
+ global::System.Threading.CancellationToken cancellationToken = default)
+ {
+ request = request ?? throw new global::System.ArgumentNullException(nameof(request));
+
+ PrepareArguments(
+ client: HttpClient);
+ PrepareGptImage25FlareArguments(
+ httpClient: HttpClient,
+ dryRun: ref dryRun,
+ request: request);
+
+
+ var __authorizations = global::Ideogram.EndPointSecurityResolver.ResolveAuthorizations(
+ availableAuthorizations: Authorizations,
+ securityRequirements: s_GptImage25FlareSecurityRequirements,
+ operationName: "GptImage25FlareAsync");
+
+ using var __timeoutCancellationTokenSource = global::Ideogram.AutoSDKRequestOptionsSupport.CreateTimeoutCancellationTokenSource(
+ clientOptions: Options,
+ requestOptions: requestOptions,
+ cancellationToken: cancellationToken);
+ var __effectiveCancellationToken = __timeoutCancellationTokenSource?.Token ?? cancellationToken;
+ var __effectiveReadResponseAsString = global::Ideogram.AutoSDKRequestOptionsSupport.GetReadResponseAsString(
+ clientOptions: Options,
+ requestOptions: requestOptions,
+ fallbackValue: ReadResponseAsString);
+ var __maxAttempts = global::Ideogram.AutoSDKRequestOptionsSupport.GetMaxAttempts(
+ clientOptions: Options,
+ requestOptions: requestOptions,
+ supportsRetry: false);
+
+ global::System.Net.Http.HttpRequestMessage __CreateHttpRequest()
+ {
+
+ var __pathBuilder = new global::Ideogram.PathBuilder(
+ path: "/v2/image/reframe/gpt-image-2-5-flare",
+ baseUri: HttpClient.BaseAddress);
+ __pathBuilder
+ .AddOptionalParameter("dry_run", dryRun?.ToString().ToLowerInvariant())
+ ;
+ var __path = __pathBuilder.ToString();
+ __path = global::Ideogram.AutoSDKRequestOptionsSupport.AppendQueryParameters(
+ path: __path,
+ clientParameters: Options.QueryParameters,
+ requestParameters: requestOptions?.QueryParameters);
+ var __httpRequest = new global::System.Net.Http.HttpRequestMessage(
+ method: global::System.Net.Http.HttpMethod.Post,
+ requestUri: new global::System.Uri(__path, global::System.UriKind.RelativeOrAbsolute));
+#if NET6_0_OR_GREATER
+ __httpRequest.Version = global::System.Net.HttpVersion.Version11;
+ __httpRequest.VersionPolicy = global::System.Net.Http.HttpVersionPolicy.RequestVersionOrHigher;
+#endif
+
+ foreach (var __authorization in __authorizations)
+ {
+ if (__authorization.Type == "Http" ||
+ __authorization.Type == "OAuth2" ||
+ __authorization.Type == "OpenIdConnect")
+ {
+ __httpRequest.Headers.Authorization = new global::System.Net.Http.Headers.AuthenticationHeaderValue(
+ scheme: __authorization.Name,
+ parameter: __authorization.Value);
+ }
+ else if (__authorization.Type == "ApiKey" &&
+ __authorization.Location == "Header")
+ {
+ __httpRequest.Headers.Add(__authorization.Name, __authorization.Value);
+ }
+ }
+
+ var __httpRequestContent = new global::System.Net.Http.MultipartFormDataContent();
+ if (request.ImageAssetIdentifier != default)
+ {
+
+ __httpRequestContent.Add(
+ content: new global::System.Net.Http.StringContent(request.ImageAssetIdentifier.ToJson(JsonSerializerContext)),
+ name: "\"image_asset_identifier\"");
+
+ }
+ if (request.Image != default)
+ {
+
+ var __contentImage = new global::System.Net.Http.ByteArrayContent(request.Image ?? global::System.Array.Empty());
+ __contentImage.Headers.ContentType = new global::System.Net.Http.Headers.MediaTypeHeaderValue(
+ request.Imagename is null
+ ? "application/octet-stream"
+ : (global::System.IO.Path.GetExtension(request.Imagename) ?? string.Empty).ToLowerInvariant() switch
+ {
+ ".aac" => "audio/aac",
+ ".flac" => "audio/flac",
+ ".gif" => "image/gif",
+ ".jpeg" => "image/jpeg",
+ ".jpg" => "image/jpeg",
+ ".json" => "application/json",
+ ".m4a" => "audio/mp4",
+ ".mp3" => "audio/mpeg",
+ ".mp4" => "video/mp4",
+ ".mpeg" => "audio/mpeg",
+ ".mpga" => "audio/mpeg",
+ ".oga" => "audio/ogg",
+ ".ogg" => "audio/ogg",
+ ".opus" => "audio/ogg",
+ ".pdf" => "application/pdf",
+ ".png" => "image/png",
+ ".txt" => "text/plain",
+ ".wav" => "audio/wav",
+ ".weba" => "audio/webm",
+ ".webm" => "video/webm",
+ ".webp" => "image/webp",
+ _ => "application/octet-stream",
+ });
+ __httpRequestContent.Add(
+ content: __contentImage,
+ name: "\"image\"",
+ fileName: request.Imagename != null ? $"\"{request.Imagename}\"" : string.Empty);
+ if (__contentImage.Headers.ContentDisposition != null)
+ {
+ __contentImage.Headers.ContentDisposition.FileNameStar = null;
+ }
+
+ }
+ __httpRequestContent.Add(
+ content: new global::System.Net.Http.StringContent(request.AspectRatio ?? string.Empty),
+ name: "\"aspect_ratio\"");
+
+ if (request.Quality != default)
+ {
+
+ __httpRequestContent.Add(
+ content: new global::System.Net.Http.StringContent((request.Quality).HasValue ? (request.Quality).GetValueOrDefault().ToValueString() : string.Empty),
+ name: "\"quality\"");
+
+ }
+ if (request.Private != default)
+ {
+
+ __httpRequestContent.Add(
+ content: new global::System.Net.Http.StringContent((global::System.Convert.ToString(request.Private, global::System.Globalization.CultureInfo.InvariantCulture) ?? string.Empty).ToLowerInvariant()),
+ name: "\"private\"");
+
+ }
+ if (request.NumImages != default)
+ {
+
+ __httpRequestContent.Add(
+ content: new global::System.Net.Http.StringContent(global::System.Convert.ToString(request.NumImages, global::System.Globalization.CultureInfo.InvariantCulture) ?? string.Empty),
+ name: "\"num_images\"");
+
+ }
+ if (request.Seed != default)
+ {
+
+ __httpRequestContent.Add(
+ content: new global::System.Net.Http.StringContent(global::System.Convert.ToString(request.Seed, global::System.Globalization.CultureInfo.InvariantCulture) ?? string.Empty),
+ name: "\"seed\"");
+
+ }
+
+ __httpRequest.Content = __httpRequestContent;
+
+ global::Ideogram.AutoSDKRequestOptionsSupport.ApplyHeaders(
+ request: __httpRequest,
+ clientHeaders: Options.Headers,
+ requestHeaders: requestOptions?.Headers);
+
+ PrepareRequest(
+ client: HttpClient,
+ request: __httpRequest);
+ PrepareGptImage25FlareRequest(
+ httpClient: HttpClient,
+ httpRequestMessage: __httpRequest,
+ dryRun: dryRun,
+ request: request);
+
+ return __httpRequest;
+ }
+
+ global::System.Net.Http.HttpRequestMessage? __httpRequest = null;
+ global::System.Net.Http.HttpResponseMessage? __response = null;
+ var __attemptNumber = 0;
+ try
+ {
+ for (var __attempt = 1; __attempt <= __maxAttempts; __attempt++)
+ {
+ __attemptNumber = __attempt;
+ __httpRequest = __CreateHttpRequest();
+ await global::Ideogram.AutoSDKRequestOptionsSupport.OnBeforeRequestAsync(
+ clientOptions: Options,
+ context: global::Ideogram.AutoSDKRequestOptionsSupport.CreateHookContext(
+ operationId: "GptImage25Flare",
+ methodName: "GptImage25FlareAsync",
+ pathTemplate: "\"/v2/image/reframe/gpt-image-2-5-flare\"",
+ httpMethod: "POST",
+ baseUri: BaseUri,
+ request: __httpRequest ?? throw new global::System.InvalidOperationException("The HTTP request was not created before invoking a request hook."),
+ response: null,
+ exception: null,
+ clientOptions: Options,
+ requestOptions: requestOptions,
+ attempt: __attempt,
+ maxAttempts: __maxAttempts,
+ willRetry: false,
+ retryDelay: null,
+ retryReason: global::System.String.Empty,
+ cancellationToken: __effectiveCancellationToken)).ConfigureAwait(false);
+ try
+ {
+ __response = await HttpClient.SendAsync(
+ request: __httpRequest,
+ completionOption: global::System.Net.Http.HttpCompletionOption.ResponseContentRead,
+ cancellationToken: __effectiveCancellationToken).ConfigureAwait(false);
+ }
+ catch (global::System.Net.Http.HttpRequestException __exception)
+ {
+ var __retryDelay = global::Ideogram.AutoSDKRequestOptionsSupport.GetRetryDelay(
+ clientOptions: Options,
+ requestOptions: requestOptions,
+ response: null,
+ attempt: __attempt);
+ var __willRetry = __attempt < __maxAttempts && !__effectiveCancellationToken.IsCancellationRequested;
+ await global::Ideogram.AutoSDKRequestOptionsSupport.OnAfterErrorAsync(
+ clientOptions: Options,
+ context: global::Ideogram.AutoSDKRequestOptionsSupport.CreateHookContext(
+ operationId: "GptImage25Flare",
+ methodName: "GptImage25FlareAsync",
+ pathTemplate: "\"/v2/image/reframe/gpt-image-2-5-flare\"",
+ httpMethod: "POST",
+ baseUri: BaseUri,
+ request: __httpRequest ?? throw new global::System.InvalidOperationException("The HTTP request was not created before invoking a request hook."),
+ response: null,
+ exception: __exception,
+ clientOptions: Options,
+ requestOptions: requestOptions,
+ attempt: __attempt,
+ maxAttempts: __maxAttempts,
+ willRetry: __willRetry,
+ retryDelay: __willRetry ? __retryDelay : (global::System.TimeSpan?)null,
+ retryReason: "exception",
+ cancellationToken: __effectiveCancellationToken)).ConfigureAwait(false);
+ if (!__willRetry)
+ {
+ throw;
+ }
+
+ __httpRequest.Dispose();
+ __httpRequest = null;
+ await global::Ideogram.AutoSDKRequestOptionsSupport.DelayBeforeRetryAsync(
+ retryDelay: __retryDelay,
+ cancellationToken: __effectiveCancellationToken).ConfigureAwait(false);
+ continue;
+ }
+
+ if (__response != null &&
+ __attempt < __maxAttempts &&
+ global::Ideogram.AutoSDKRequestOptionsSupport.ShouldRetryStatusCode(__response.StatusCode))
+ {
+ var __retryDelay = global::Ideogram.AutoSDKRequestOptionsSupport.GetRetryDelay(
+ clientOptions: Options,
+ requestOptions: requestOptions,
+ response: __response,
+ attempt: __attempt);
+ await global::Ideogram.AutoSDKRequestOptionsSupport.OnAfterErrorAsync(
+ clientOptions: Options,
+ context: global::Ideogram.AutoSDKRequestOptionsSupport.CreateHookContext(
+ operationId: "GptImage25Flare",
+ methodName: "GptImage25FlareAsync",
+ pathTemplate: "\"/v2/image/reframe/gpt-image-2-5-flare\"",
+ httpMethod: "POST",
+ baseUri: BaseUri,
+ request: __httpRequest ?? throw new global::System.InvalidOperationException("The HTTP request was not created before invoking a request hook."),
+ response: __response,
+ exception: null,
+ clientOptions: Options,
+ requestOptions: requestOptions,
+ attempt: __attempt,
+ maxAttempts: __maxAttempts,
+ willRetry: true,
+ retryDelay: __retryDelay,
+ retryReason: "status:" + ((int)__response.StatusCode).ToString(global::System.Globalization.CultureInfo.InvariantCulture),
+ cancellationToken: __effectiveCancellationToken)).ConfigureAwait(false);
+ __response.Dispose();
+ __response = null;
+ __httpRequest.Dispose();
+ __httpRequest = null;
+ await global::Ideogram.AutoSDKRequestOptionsSupport.DelayBeforeRetryAsync(
+ retryDelay: __retryDelay,
+ cancellationToken: __effectiveCancellationToken).ConfigureAwait(false);
+ continue;
+ }
+
+ break;
+ }
+
+ if (__response == null)
+ {
+ throw new global::System.InvalidOperationException("No response received.");
+ }
+
+ using (__response)
+ {
+
+ ProcessResponse(
+ client: HttpClient,
+ response: __response);
+ ProcessGptImage25FlareResponse(
+ httpClient: HttpClient,
+ httpResponseMessage: __response);
+ if (__response.IsSuccessStatusCode)
+ {
+ await global::Ideogram.AutoSDKRequestOptionsSupport.OnAfterSuccessAsync(
+ clientOptions: Options,
+ context: global::Ideogram.AutoSDKRequestOptionsSupport.CreateHookContext(
+ operationId: "GptImage25Flare",
+ methodName: "GptImage25FlareAsync",
+ pathTemplate: "\"/v2/image/reframe/gpt-image-2-5-flare\"",
+ httpMethod: "POST",
+ baseUri: BaseUri,
+ request: __httpRequest ?? throw new global::System.InvalidOperationException("The HTTP request was not created before invoking a request hook."),
+ response: __response,
+ exception: null,
+ clientOptions: Options,
+ requestOptions: requestOptions,
+ attempt: __attemptNumber,
+ maxAttempts: __maxAttempts,
+ willRetry: false,
+ retryDelay: null,
+ retryReason: global::System.String.Empty,
+ cancellationToken: __effectiveCancellationToken)).ConfigureAwait(false);
+ }
+ else
+ {
+ await global::Ideogram.AutoSDKRequestOptionsSupport.OnAfterErrorAsync(
+ clientOptions: Options,
+ context: global::Ideogram.AutoSDKRequestOptionsSupport.CreateHookContext(
+ operationId: "GptImage25Flare",
+ methodName: "GptImage25FlareAsync",
+ pathTemplate: "\"/v2/image/reframe/gpt-image-2-5-flare\"",
+ httpMethod: "POST",
+ baseUri: BaseUri,
+ request: __httpRequest ?? throw new global::System.InvalidOperationException("The HTTP request was not created before invoking a request hook."),
+ response: __response,
+ exception: null,
+ clientOptions: Options,
+ requestOptions: requestOptions,
+ attempt: __attemptNumber,
+ maxAttempts: __maxAttempts,
+ willRetry: false,
+ retryDelay: null,
+ retryReason: global::System.String.Empty,
+ cancellationToken: __effectiveCancellationToken)).ConfigureAwait(false);
+ }
+ //
+ if ((int)__response.StatusCode == 400)
+ {
+ string? __content_400 = null;
+ global::System.Exception? __exception_400 = null;
+ try
+ {
+ if (__effectiveReadResponseAsString)
+ {
+ __content_400 = await __response.Content.ReadAsStringAsync(__effectiveCancellationToken).ConfigureAwait(false);
+ }
+ else
+ {
+ __content_400 = await __response.Content.ReadAsStringAsync(__effectiveCancellationToken).ConfigureAwait(false);
+ }
+ }
+ catch (global::System.Exception __ex)
+ {
+ __exception_400 = __ex;
+ }
+
+
+ throw global::Ideogram.ApiException.Create(
+ statusCode: __response.StatusCode,
+ message: __content_400 ?? __response.ReasonPhrase ?? string.Empty,
+ innerException: __exception_400,
+ responseBody: __content_400,
+ responseHeaders: global::System.Linq.Enumerable.ToDictionary(
+ __response.Headers,
+ h => h.Key,
+ h => h.Value));
+ }
+ //
+ if ((int)__response.StatusCode == 401)
+ {
+ string? __content_401 = null;
+ global::System.Exception? __exception_401 = null;
+ try
+ {
+ if (__effectiveReadResponseAsString)
+ {
+ __content_401 = await __response.Content.ReadAsStringAsync(__effectiveCancellationToken).ConfigureAwait(false);
+ }
+ else
+ {
+ __content_401 = await __response.Content.ReadAsStringAsync(__effectiveCancellationToken).ConfigureAwait(false);
+ }
+ }
+ catch (global::System.Exception __ex)
+ {
+ __exception_401 = __ex;
+ }
+
+
+ throw global::Ideogram.ApiException.Create(
+ statusCode: __response.StatusCode,
+ message: __content_401 ?? __response.ReasonPhrase ?? string.Empty,
+ innerException: __exception_401,
+ responseBody: __content_401,
+ responseHeaders: global::System.Linq.Enumerable.ToDictionary(
+ __response.Headers,
+ h => h.Key,
+ h => h.Value));
+ }
+ // Insufficient credits or quota.
+ if ((int)__response.StatusCode == 402)
+ {
+ string? __content_402 = null;
+ global::System.Exception? __exception_402 = null;
+ global::Ideogram.GenerationErrorResponse? __value_402 = null;
+ try
+ {
+ if (__effectiveReadResponseAsString)
+ {
+ __content_402 = await __response.Content.ReadAsStringAsync(__effectiveCancellationToken).ConfigureAwait(false);
+ __value_402 = global::Ideogram.GenerationErrorResponse.FromJson(__content_402, JsonSerializerContext);
+ }
+ else
+ {
+ __content_402 = await __response.Content.ReadAsStringAsync(__effectiveCancellationToken).ConfigureAwait(false);
+
+ __value_402 = global::Ideogram.GenerationErrorResponse.FromJson(__content_402, JsonSerializerContext);
+ }
+ }
+ catch (global::System.Exception __ex)
+ {
+ __exception_402 = __ex;
+ }
+
+
+ throw global::Ideogram.ApiException.Create(
+ statusCode: __response.StatusCode,
+ message: __content_402 ?? __response.ReasonPhrase ?? string.Empty,
+ innerException: __exception_402,
+ responseBody: __content_402,
+ responseObject: __value_402,
+ responseHeaders: global::System.Linq.Enumerable.ToDictionary(
+ __response.Headers,
+ h => h.Key,
+ h => h.Value));
+ }
+ //
+ if ((int)__response.StatusCode == 404)
+ {
+ string? __content_404 = null;
+ global::System.Exception? __exception_404 = null;
+ try
+ {
+ if (__effectiveReadResponseAsString)
+ {
+ __content_404 = await __response.Content.ReadAsStringAsync(__effectiveCancellationToken).ConfigureAwait(false);
+ }
+ else
+ {
+ __content_404 = await __response.Content.ReadAsStringAsync(__effectiveCancellationToken).ConfigureAwait(false);
+ }
+ }
+ catch (global::System.Exception __ex)
+ {
+ __exception_404 = __ex;
+ }
+
+
+ throw global::Ideogram.ApiException.Create(
+ statusCode: __response.StatusCode,
+ message: __content_404 ?? __response.ReasonPhrase ?? string.Empty,
+ innerException: __exception_404,
+ responseBody: __content_404,
+ responseHeaders: global::System.Linq.Enumerable.ToDictionary(
+ __response.Headers,
+ h => h.Key,
+ h => h.Value));
+ }
+ // Too many requests.
+ if ((int)__response.StatusCode == 429)
+ {
+ string? __content_429 = null;
+ global::System.Exception? __exception_429 = null;
+ global::Ideogram.GenerationErrorResponse? __value_429 = null;
+ try
+ {
+ if (__effectiveReadResponseAsString)
+ {
+ __content_429 = await __response.Content.ReadAsStringAsync(__effectiveCancellationToken).ConfigureAwait(false);
+ __value_429 = global::Ideogram.GenerationErrorResponse.FromJson(__content_429, JsonSerializerContext);
+ }
+ else
+ {
+ __content_429 = await __response.Content.ReadAsStringAsync(__effectiveCancellationToken).ConfigureAwait(false);
+
+ __value_429 = global::Ideogram.GenerationErrorResponse.FromJson(__content_429, JsonSerializerContext);
+ }
+ }
+ catch (global::System.Exception __ex)
+ {
+ __exception_429 = __ex;
+ }
+
+
+ throw global::Ideogram.ApiException.Create(
+ statusCode: __response.StatusCode,
+ message: __content_429 ?? __response.ReasonPhrase ?? string.Empty,
+ innerException: __exception_429,
+ responseBody: __content_429,
+ responseObject: __value_429,
+ responseHeaders: global::System.Linq.Enumerable.ToDictionary(
+ __response.Headers,
+ h => h.Key,
+ h => h.Value));
+ }
+ //
+ if ((int)__response.StatusCode == 500)
+ {
+ string? __content_500 = null;
+ global::System.Exception? __exception_500 = null;
+ try
+ {
+ if (__effectiveReadResponseAsString)
+ {
+ __content_500 = await __response.Content.ReadAsStringAsync(__effectiveCancellationToken).ConfigureAwait(false);
+ }
+ else
+ {
+ __content_500 = await __response.Content.ReadAsStringAsync(__effectiveCancellationToken).ConfigureAwait(false);
+ }
+ }
+ catch (global::System.Exception __ex)
+ {
+ __exception_500 = __ex;
+ }
+
+
+ throw global::Ideogram.ApiException.Create(
+ statusCode: __response.StatusCode,
+ message: __content_500 ?? __response.ReasonPhrase ?? string.Empty,
+ innerException: __exception_500,
+ responseBody: __content_500,
+ responseHeaders: global::System.Linq.Enumerable.ToDictionary(
+ __response.Headers,
+ h => h.Key,
+ h => h.Value));
+ }
+ //
+ if ((int)__response.StatusCode == 503)
+ {
+ string? __content_503 = null;
+ global::System.Exception? __exception_503 = null;
+ try
+ {
+ if (__effectiveReadResponseAsString)
+ {
+ __content_503 = await __response.Content.ReadAsStringAsync(__effectiveCancellationToken).ConfigureAwait(false);
+ }
+ else
+ {
+ __content_503 = await __response.Content.ReadAsStringAsync(__effectiveCancellationToken).ConfigureAwait(false);
+ }
+ }
+ catch (global::System.Exception __ex)
+ {
+ __exception_503 = __ex;
+ }
+
+
+ throw global::Ideogram.ApiException.Create(
+ statusCode: __response.StatusCode,
+ message: __content_503 ?? __response.ReasonPhrase ?? string.Empty,
+ innerException: __exception_503,
+ responseBody: __content_503,
+ responseHeaders: global::System.Linq.Enumerable.ToDictionary(
+ __response.Headers,
+ h => h.Key,
+ h => h.Value));
+ }
+
+ if (__effectiveReadResponseAsString)
+ {
+ var __content = await __response.Content.ReadAsStringAsync(
+ #if NET5_0_OR_GREATER
+ __effectiveCancellationToken
+ #endif
+ ).ConfigureAwait(false);
+
+ ProcessResponseContent(
+ client: HttpClient,
+ response: __response,
+ content: ref __content);
+ ProcessGptImage25FlareResponseContent(
+ httpClient: HttpClient,
+ httpResponseMessage: __response,
+ content: ref __content);
+
+ try
+ {
+ __response.EnsureSuccessStatusCode();
+
+ var __value = global::Ideogram.ReframeImageGptImage25FlareResponse.FromJson(__content, JsonSerializerContext) ??
+ throw new global::System.InvalidOperationException($"Response deserialization failed for \"{__content}\" ");
+ return new global::Ideogram.AutoSDKHttpResponse(
+ statusCode: __response.StatusCode,
+ headers: global::Ideogram.AutoSDKHttpResponse.CreateHeaders(__response),
+ requestUri: __response.RequestMessage?.RequestUri,
+ body: __value);
+ }
+ catch (global::System.Exception __ex)
+ {
+ throw global::Ideogram.ApiException.Create(
+ statusCode: __response.StatusCode,
+ message: __content ?? __response.ReasonPhrase ?? string.Empty,
+ innerException: __ex,
+ responseBody: __content,
+ responseHeaders: global::System.Linq.Enumerable.ToDictionary(
+ __response.Headers,
+ h => h.Key,
+ h => h.Value));
+ }
+ }
+ else
+ {
+ try
+ {
+ __response.EnsureSuccessStatusCode();
+ using var __content = await __response.Content.ReadAsStreamAsync(
+ #if NET5_0_OR_GREATER
+ __effectiveCancellationToken
+ #endif
+ ).ConfigureAwait(false);
+
+ var __value = await global::Ideogram.ReframeImageGptImage25FlareResponse.FromJsonStreamAsync(__content, JsonSerializerContext).ConfigureAwait(false) ??
+ throw new global::System.InvalidOperationException("Response deserialization failed.");
+ return new global::Ideogram.AutoSDKHttpResponse(
+ statusCode: __response.StatusCode,
+ headers: global::Ideogram.AutoSDKHttpResponse.CreateHeaders(__response),
+ requestUri: __response.RequestMessage?.RequestUri,
+ body: __value);
+ }
+ catch (global::System.Exception __ex)
+ {
+ string? __content = null;
+ try
+ {
+ __content = await __response.Content.ReadAsStringAsync(
+ #if NET5_0_OR_GREATER
+ __effectiveCancellationToken
+ #endif
+ ).ConfigureAwait(false);
+ }
+ catch (global::System.Exception)
+ {
+ }
+
+ throw global::Ideogram.ApiException.Create(
+ statusCode: __response.StatusCode,
+ message: __content ?? __response.ReasonPhrase ?? string.Empty,
+ innerException: __ex,
+ responseBody: __content,
+ responseHeaders: global::System.Linq.Enumerable.ToDictionary(
+ __response.Headers,
+ h => h.Key,
+ h => h.Value));
+ }
+ }
+
+ }
+ }
+ finally
+ {
+ __httpRequest?.Dispose();
+ }
+ }
+ ///
+ /// Reframe an image with GPT Image 2.5 Flare
+ /// Recompose one image for a new aspect ratio with GPT Image 2.5 Flare.
+ /// Supply either an existing Ideogram image asset or raw image bytes, but
+ /// not both. The requested aspect ratio is resolved to the closest output
+ /// size the model supports.
+ /// This operation is asynchronous. It returns as soon as the request is
+ /// accepted; poll `GET /v2/generations/{generation_id}` for completion
+ /// and results.
+ ///
+ ///
+ /// Default Value: false
+ ///
+ ///
+ /// An identifier for an ideogram asset.
+ /// Example: {"asset_type":"RESPONSE","asset_id":"7uS_VESkRI6O3-sVgHQp_A"}
+ ///
+ ///
+ /// The JPEG, PNG, or WEBP image to reframe (max 50MB).
+ ///
+ ///
+ /// The JPEG, PNG, or WEBP image to reframe (max 50MB).
+ ///
+ ///
+ /// The requested output aspect ratio, as `width:height`.
+ /// Example: 969
+ ///
+ ///
+ /// How much rendering effort the model spends. Lower tiers return sooner and cost less; `auto` lets the model choose.
+ /// Default Value: auto
+ ///
+ ///
+ /// API-key requests are always private. For bearer-authenticated
+ /// requests, this controls whether the result is private; when
+ /// omitted, it follows the caller's plan entitlement. Enterprise
+ /// generations are always private.
+ ///
+ ///
+ /// The number of output images to generate.
+ /// Default Value: 1
+ ///
+ ///
+ /// Random seed. Set for reproducible generation.
+ /// Example: 12345
+ ///
+ /// Per-request overrides such as headers, query parameters, timeout, retries, and response buffering.
+ /// The token to cancel the operation with
+ ///
+ public async global::System.Threading.Tasks.Task GptImage25FlareAsync(
+ string aspectRatio,
+ bool? dryRun = default,
+ global::Ideogram.AssetIdentifier? imageAssetIdentifier = default,
+ byte[]? image = default,
+ string? imagename = default,
+ global::Ideogram.ReframeImageGptImage25FlareRequestQuality? quality = default,
+ bool? @private = default,
+ int? numImages = default,
+ int? seed = default,
+ global::Ideogram.AutoSDKRequestOptions? requestOptions = default,
+ global::System.Threading.CancellationToken cancellationToken = default)
+ {
+ var __request = new global::Ideogram.ReframeImageGptImage25FlareRequest
+ {
+ ImageAssetIdentifier = imageAssetIdentifier,
+ Image = image,
+ Imagename = imagename,
+ AspectRatio = aspectRatio,
+ Quality = quality,
+ Private = @private,
+ NumImages = numImages,
+ Seed = seed,
+ };
+
+ return await GptImage25FlareAsync(
+ dryRun: dryRun,
+ request: __request,
+ requestOptions: requestOptions,
+ cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/libs/Ideogram/Generated/Ideogram.ImagesReframeClient.NanoBanana2.g.cs b/src/libs/Ideogram/Generated/Ideogram.ImagesReframeClient.NanoBanana2.g.cs
index de75033..6dafe23 100644
--- a/src/libs/Ideogram/Generated/Ideogram.ImagesReframeClient.NanoBanana2.g.cs
+++ b/src/libs/Ideogram/Generated/Ideogram.ImagesReframeClient.NanoBanana2.g.cs
@@ -787,7 +787,7 @@ request.Imagename is null
/// The JPEG, PNG, or WEBP image to reframe (max 50MB).
///
///
- /// The requested output aspect ratio. It resolves to the closest dimensions the model supports at the 1K output tier.
+ /// The requested output aspect ratio, as `width:height`.
/// Example: 969
///
///
diff --git a/src/libs/Ideogram/Generated/Ideogram.ImagesReframeClient.NanoBananaPro.g.cs b/src/libs/Ideogram/Generated/Ideogram.ImagesReframeClient.NanoBananaPro.g.cs
new file mode 100644
index 0000000..b55519b
--- /dev/null
+++ b/src/libs/Ideogram/Generated/Ideogram.ImagesReframeClient.NanoBananaPro.g.cs
@@ -0,0 +1,863 @@
+
+#nullable enable
+
+namespace Ideogram
+{
+ public partial class ImagesReframeClient
+ {
+
+
+ private static readonly global::Ideogram.EndPointSecurityRequirement s_NanoBananaProSecurityRequirement0 =
+ new global::Ideogram.EndPointSecurityRequirement
+ {
+ Authorizations = new global::Ideogram.EndPointAuthorizationRequirement[]
+ { new global::Ideogram.EndPointAuthorizationRequirement
+ {
+ Type = "Http",
+ SchemeId = "HttpBearer",
+ Location = "Header",
+ Name = "Bearer",
+ FriendlyName = "Bearer",
+ },
+ },
+ };
+ private static readonly global::Ideogram.EndPointSecurityRequirement[] s_NanoBananaProSecurityRequirements =
+ new global::Ideogram.EndPointSecurityRequirement[]
+ { s_NanoBananaProSecurityRequirement0,
+ };
+ partial void PrepareNanoBananaProArguments(
+ global::System.Net.Http.HttpClient httpClient,
+ ref bool? dryRun,
+ global::Ideogram.ReframeImageNanoBananaProRequest request);
+ partial void PrepareNanoBananaProRequest(
+ global::System.Net.Http.HttpClient httpClient,
+ global::System.Net.Http.HttpRequestMessage httpRequestMessage,
+ bool? dryRun,
+ global::Ideogram.ReframeImageNanoBananaProRequest request);
+ partial void ProcessNanoBananaProResponse(
+ global::System.Net.Http.HttpClient httpClient,
+ global::System.Net.Http.HttpResponseMessage httpResponseMessage);
+
+ partial void ProcessNanoBananaProResponseContent(
+ global::System.Net.Http.HttpClient httpClient,
+ global::System.Net.Http.HttpResponseMessage httpResponseMessage,
+ ref string content);
+
+ ///
+ /// Reframe an image with Nano Banana Pro
+ /// Recompose one image for a new aspect ratio with Nano Banana Pro, at a
+ /// 1K, 2K, or 4K output tier. Supply either an existing Ideogram image
+ /// asset or raw image bytes, but not both. The requested aspect ratio is
+ /// resolved to the closest dimensions the model supports at that tier.
+ /// This operation is asynchronous. It returns as soon as the request is
+ /// accepted; poll `GET /v2/generations/{generation_id}` for completion
+ /// and results.
+ ///
+ ///
+ /// Default Value: false
+ ///
+ ///
+ /// Per-request overrides such as headers, query parameters, timeout, retries, and response buffering.
+ /// The token to cancel the operation with
+ ///
+ public async global::System.Threading.Tasks.Task NanoBananaProAsync(
+
+ global::Ideogram.ReframeImageNanoBananaProRequest request,
+ bool? dryRun = default,
+ global::Ideogram.AutoSDKRequestOptions? requestOptions = default,
+ global::System.Threading.CancellationToken cancellationToken = default)
+ {
+ var __response = await NanoBananaProAsResponseAsync(
+
+ request: request,
+ dryRun: dryRun,
+ requestOptions: requestOptions,
+ cancellationToken: cancellationToken
+ ).ConfigureAwait(false);
+
+ return __response.Body;
+ }
+ ///
+ /// Reframe an image with Nano Banana Pro
+ /// Recompose one image for a new aspect ratio with Nano Banana Pro, at a
+ /// 1K, 2K, or 4K output tier. Supply either an existing Ideogram image
+ /// asset or raw image bytes, but not both. The requested aspect ratio is
+ /// resolved to the closest dimensions the model supports at that tier.
+ /// This operation is asynchronous. It returns as soon as the request is
+ /// accepted; poll `GET /v2/generations/{generation_id}` for completion
+ /// and results.
+ ///
+ ///
+ /// Default Value: false
+ ///
+ ///
+ /// Per-request overrides such as headers, query parameters, timeout, retries, and response buffering.
+ /// The token to cancel the operation with
+ ///
+ public async global::System.Threading.Tasks.Task> NanoBananaProAsResponseAsync(
+
+ global::Ideogram.ReframeImageNanoBananaProRequest request,
+ bool? dryRun = default,
+ global::Ideogram.AutoSDKRequestOptions? requestOptions = default,
+ global::System.Threading.CancellationToken cancellationToken = default)
+ {
+ request = request ?? throw new global::System.ArgumentNullException(nameof(request));
+
+ PrepareArguments(
+ client: HttpClient);
+ PrepareNanoBananaProArguments(
+ httpClient: HttpClient,
+ dryRun: ref dryRun,
+ request: request);
+
+
+ var __authorizations = global::Ideogram.EndPointSecurityResolver.ResolveAuthorizations(
+ availableAuthorizations: Authorizations,
+ securityRequirements: s_NanoBananaProSecurityRequirements,
+ operationName: "NanoBananaProAsync");
+
+ using var __timeoutCancellationTokenSource = global::Ideogram.AutoSDKRequestOptionsSupport.CreateTimeoutCancellationTokenSource(
+ clientOptions: Options,
+ requestOptions: requestOptions,
+ cancellationToken: cancellationToken);
+ var __effectiveCancellationToken = __timeoutCancellationTokenSource?.Token ?? cancellationToken;
+ var __effectiveReadResponseAsString = global::Ideogram.AutoSDKRequestOptionsSupport.GetReadResponseAsString(
+ clientOptions: Options,
+ requestOptions: requestOptions,
+ fallbackValue: ReadResponseAsString);
+ var __maxAttempts = global::Ideogram.AutoSDKRequestOptionsSupport.GetMaxAttempts(
+ clientOptions: Options,
+ requestOptions: requestOptions,
+ supportsRetry: false);
+
+ global::System.Net.Http.HttpRequestMessage __CreateHttpRequest()
+ {
+
+ var __pathBuilder = new global::Ideogram.PathBuilder(
+ path: "/v2/image/reframe/nano-banana-pro",
+ baseUri: HttpClient.BaseAddress);
+ __pathBuilder
+ .AddOptionalParameter("dry_run", dryRun?.ToString().ToLowerInvariant())
+ ;
+ var __path = __pathBuilder.ToString();
+ __path = global::Ideogram.AutoSDKRequestOptionsSupport.AppendQueryParameters(
+ path: __path,
+ clientParameters: Options.QueryParameters,
+ requestParameters: requestOptions?.QueryParameters);
+ var __httpRequest = new global::System.Net.Http.HttpRequestMessage(
+ method: global::System.Net.Http.HttpMethod.Post,
+ requestUri: new global::System.Uri(__path, global::System.UriKind.RelativeOrAbsolute));
+#if NET6_0_OR_GREATER
+ __httpRequest.Version = global::System.Net.HttpVersion.Version11;
+ __httpRequest.VersionPolicy = global::System.Net.Http.HttpVersionPolicy.RequestVersionOrHigher;
+#endif
+
+ foreach (var __authorization in __authorizations)
+ {
+ if (__authorization.Type == "Http" ||
+ __authorization.Type == "OAuth2" ||
+ __authorization.Type == "OpenIdConnect")
+ {
+ __httpRequest.Headers.Authorization = new global::System.Net.Http.Headers.AuthenticationHeaderValue(
+ scheme: __authorization.Name,
+ parameter: __authorization.Value);
+ }
+ else if (__authorization.Type == "ApiKey" &&
+ __authorization.Location == "Header")
+ {
+ __httpRequest.Headers.Add(__authorization.Name, __authorization.Value);
+ }
+ }
+
+ var __httpRequestContent = new global::System.Net.Http.MultipartFormDataContent();
+ if (request.ImageAssetIdentifier != default)
+ {
+
+ __httpRequestContent.Add(
+ content: new global::System.Net.Http.StringContent(request.ImageAssetIdentifier.ToJson(JsonSerializerContext)),
+ name: "\"image_asset_identifier\"");
+
+ }
+ if (request.Image != default)
+ {
+
+ var __contentImage = new global::System.Net.Http.ByteArrayContent(request.Image ?? global::System.Array.Empty());
+ __contentImage.Headers.ContentType = new global::System.Net.Http.Headers.MediaTypeHeaderValue(
+ request.Imagename is null
+ ? "application/octet-stream"
+ : (global::System.IO.Path.GetExtension(request.Imagename) ?? string.Empty).ToLowerInvariant() switch
+ {
+ ".aac" => "audio/aac",
+ ".flac" => "audio/flac",
+ ".gif" => "image/gif",
+ ".jpeg" => "image/jpeg",
+ ".jpg" => "image/jpeg",
+ ".json" => "application/json",
+ ".m4a" => "audio/mp4",
+ ".mp3" => "audio/mpeg",
+ ".mp4" => "video/mp4",
+ ".mpeg" => "audio/mpeg",
+ ".mpga" => "audio/mpeg",
+ ".oga" => "audio/ogg",
+ ".ogg" => "audio/ogg",
+ ".opus" => "audio/ogg",
+ ".pdf" => "application/pdf",
+ ".png" => "image/png",
+ ".txt" => "text/plain",
+ ".wav" => "audio/wav",
+ ".weba" => "audio/webm",
+ ".webm" => "video/webm",
+ ".webp" => "image/webp",
+ _ => "application/octet-stream",
+ });
+ __httpRequestContent.Add(
+ content: __contentImage,
+ name: "\"image\"",
+ fileName: request.Imagename != null ? $"\"{request.Imagename}\"" : string.Empty);
+ if (__contentImage.Headers.ContentDisposition != null)
+ {
+ __contentImage.Headers.ContentDisposition.FileNameStar = null;
+ }
+
+ }
+ __httpRequestContent.Add(
+ content: new global::System.Net.Http.StringContent(request.AspectRatio ?? string.Empty),
+ name: "\"aspect_ratio\"");
+
+ if (request.ResolutionTier != default)
+ {
+
+ __httpRequestContent.Add(
+ content: new global::System.Net.Http.StringContent((request.ResolutionTier).HasValue ? (request.ResolutionTier).GetValueOrDefault().ToValueString() : string.Empty),
+ name: "\"resolution_tier\"");
+
+ }
+ if (request.Private != default)
+ {
+
+ __httpRequestContent.Add(
+ content: new global::System.Net.Http.StringContent((global::System.Convert.ToString(request.Private, global::System.Globalization.CultureInfo.InvariantCulture) ?? string.Empty).ToLowerInvariant()),
+ name: "\"private\"");
+
+ }
+ if (request.NumImages != default)
+ {
+
+ __httpRequestContent.Add(
+ content: new global::System.Net.Http.StringContent(global::System.Convert.ToString(request.NumImages, global::System.Globalization.CultureInfo.InvariantCulture) ?? string.Empty),
+ name: "\"num_images\"");
+
+ }
+ if (request.Seed != default)
+ {
+
+ __httpRequestContent.Add(
+ content: new global::System.Net.Http.StringContent(global::System.Convert.ToString(request.Seed, global::System.Globalization.CultureInfo.InvariantCulture) ?? string.Empty),
+ name: "\"seed\"");
+
+ }
+
+ __httpRequest.Content = __httpRequestContent;
+
+ global::Ideogram.AutoSDKRequestOptionsSupport.ApplyHeaders(
+ request: __httpRequest,
+ clientHeaders: Options.Headers,
+ requestHeaders: requestOptions?.Headers);
+
+ PrepareRequest(
+ client: HttpClient,
+ request: __httpRequest);
+ PrepareNanoBananaProRequest(
+ httpClient: HttpClient,
+ httpRequestMessage: __httpRequest,
+ dryRun: dryRun,
+ request: request);
+
+ return __httpRequest;
+ }
+
+ global::System.Net.Http.HttpRequestMessage? __httpRequest = null;
+ global::System.Net.Http.HttpResponseMessage? __response = null;
+ var __attemptNumber = 0;
+ try
+ {
+ for (var __attempt = 1; __attempt <= __maxAttempts; __attempt++)
+ {
+ __attemptNumber = __attempt;
+ __httpRequest = __CreateHttpRequest();
+ await global::Ideogram.AutoSDKRequestOptionsSupport.OnBeforeRequestAsync(
+ clientOptions: Options,
+ context: global::Ideogram.AutoSDKRequestOptionsSupport.CreateHookContext(
+ operationId: "NanoBananaPro",
+ methodName: "NanoBananaProAsync",
+ pathTemplate: "\"/v2/image/reframe/nano-banana-pro\"",
+ httpMethod: "POST",
+ baseUri: BaseUri,
+ request: __httpRequest ?? throw new global::System.InvalidOperationException("The HTTP request was not created before invoking a request hook."),
+ response: null,
+ exception: null,
+ clientOptions: Options,
+ requestOptions: requestOptions,
+ attempt: __attempt,
+ maxAttempts: __maxAttempts,
+ willRetry: false,
+ retryDelay: null,
+ retryReason: global::System.String.Empty,
+ cancellationToken: __effectiveCancellationToken)).ConfigureAwait(false);
+ try
+ {
+ __response = await HttpClient.SendAsync(
+ request: __httpRequest,
+ completionOption: global::System.Net.Http.HttpCompletionOption.ResponseContentRead,
+ cancellationToken: __effectiveCancellationToken).ConfigureAwait(false);
+ }
+ catch (global::System.Net.Http.HttpRequestException __exception)
+ {
+ var __retryDelay = global::Ideogram.AutoSDKRequestOptionsSupport.GetRetryDelay(
+ clientOptions: Options,
+ requestOptions: requestOptions,
+ response: null,
+ attempt: __attempt);
+ var __willRetry = __attempt < __maxAttempts && !__effectiveCancellationToken.IsCancellationRequested;
+ await global::Ideogram.AutoSDKRequestOptionsSupport.OnAfterErrorAsync(
+ clientOptions: Options,
+ context: global::Ideogram.AutoSDKRequestOptionsSupport.CreateHookContext(
+ operationId: "NanoBananaPro",
+ methodName: "NanoBananaProAsync",
+ pathTemplate: "\"/v2/image/reframe/nano-banana-pro\"",
+ httpMethod: "POST",
+ baseUri: BaseUri,
+ request: __httpRequest ?? throw new global::System.InvalidOperationException("The HTTP request was not created before invoking a request hook."),
+ response: null,
+ exception: __exception,
+ clientOptions: Options,
+ requestOptions: requestOptions,
+ attempt: __attempt,
+ maxAttempts: __maxAttempts,
+ willRetry: __willRetry,
+ retryDelay: __willRetry ? __retryDelay : (global::System.TimeSpan?)null,
+ retryReason: "exception",
+ cancellationToken: __effectiveCancellationToken)).ConfigureAwait(false);
+ if (!__willRetry)
+ {
+ throw;
+ }
+
+ __httpRequest.Dispose();
+ __httpRequest = null;
+ await global::Ideogram.AutoSDKRequestOptionsSupport.DelayBeforeRetryAsync(
+ retryDelay: __retryDelay,
+ cancellationToken: __effectiveCancellationToken).ConfigureAwait(false);
+ continue;
+ }
+
+ if (__response != null &&
+ __attempt < __maxAttempts &&
+ global::Ideogram.AutoSDKRequestOptionsSupport.ShouldRetryStatusCode(__response.StatusCode))
+ {
+ var __retryDelay = global::Ideogram.AutoSDKRequestOptionsSupport.GetRetryDelay(
+ clientOptions: Options,
+ requestOptions: requestOptions,
+ response: __response,
+ attempt: __attempt);
+ await global::Ideogram.AutoSDKRequestOptionsSupport.OnAfterErrorAsync(
+ clientOptions: Options,
+ context: global::Ideogram.AutoSDKRequestOptionsSupport.CreateHookContext(
+ operationId: "NanoBananaPro",
+ methodName: "NanoBananaProAsync",
+ pathTemplate: "\"/v2/image/reframe/nano-banana-pro\"",
+ httpMethod: "POST",
+ baseUri: BaseUri,
+ request: __httpRequest ?? throw new global::System.InvalidOperationException("The HTTP request was not created before invoking a request hook."),
+ response: __response,
+ exception: null,
+ clientOptions: Options,
+ requestOptions: requestOptions,
+ attempt: __attempt,
+ maxAttempts: __maxAttempts,
+ willRetry: true,
+ retryDelay: __retryDelay,
+ retryReason: "status:" + ((int)__response.StatusCode).ToString(global::System.Globalization.CultureInfo.InvariantCulture),
+ cancellationToken: __effectiveCancellationToken)).ConfigureAwait(false);
+ __response.Dispose();
+ __response = null;
+ __httpRequest.Dispose();
+ __httpRequest = null;
+ await global::Ideogram.AutoSDKRequestOptionsSupport.DelayBeforeRetryAsync(
+ retryDelay: __retryDelay,
+ cancellationToken: __effectiveCancellationToken).ConfigureAwait(false);
+ continue;
+ }
+
+ break;
+ }
+
+ if (__response == null)
+ {
+ throw new global::System.InvalidOperationException("No response received.");
+ }
+
+ using (__response)
+ {
+
+ ProcessResponse(
+ client: HttpClient,
+ response: __response);
+ ProcessNanoBananaProResponse(
+ httpClient: HttpClient,
+ httpResponseMessage: __response);
+ if (__response.IsSuccessStatusCode)
+ {
+ await global::Ideogram.AutoSDKRequestOptionsSupport.OnAfterSuccessAsync(
+ clientOptions: Options,
+ context: global::Ideogram.AutoSDKRequestOptionsSupport.CreateHookContext(
+ operationId: "NanoBananaPro",
+ methodName: "NanoBananaProAsync",
+ pathTemplate: "\"/v2/image/reframe/nano-banana-pro\"",
+ httpMethod: "POST",
+ baseUri: BaseUri,
+ request: __httpRequest ?? throw new global::System.InvalidOperationException("The HTTP request was not created before invoking a request hook."),
+ response: __response,
+ exception: null,
+ clientOptions: Options,
+ requestOptions: requestOptions,
+ attempt: __attemptNumber,
+ maxAttempts: __maxAttempts,
+ willRetry: false,
+ retryDelay: null,
+ retryReason: global::System.String.Empty,
+ cancellationToken: __effectiveCancellationToken)).ConfigureAwait(false);
+ }
+ else
+ {
+ await global::Ideogram.AutoSDKRequestOptionsSupport.OnAfterErrorAsync(
+ clientOptions: Options,
+ context: global::Ideogram.AutoSDKRequestOptionsSupport.CreateHookContext(
+ operationId: "NanoBananaPro",
+ methodName: "NanoBananaProAsync",
+ pathTemplate: "\"/v2/image/reframe/nano-banana-pro\"",
+ httpMethod: "POST",
+ baseUri: BaseUri,
+ request: __httpRequest ?? throw new global::System.InvalidOperationException("The HTTP request was not created before invoking a request hook."),
+ response: __response,
+ exception: null,
+ clientOptions: Options,
+ requestOptions: requestOptions,
+ attempt: __attemptNumber,
+ maxAttempts: __maxAttempts,
+ willRetry: false,
+ retryDelay: null,
+ retryReason: global::System.String.Empty,
+ cancellationToken: __effectiveCancellationToken)).ConfigureAwait(false);
+ }
+ //
+ if ((int)__response.StatusCode == 400)
+ {
+ string? __content_400 = null;
+ global::System.Exception? __exception_400 = null;
+ try
+ {
+ if (__effectiveReadResponseAsString)
+ {
+ __content_400 = await __response.Content.ReadAsStringAsync(__effectiveCancellationToken).ConfigureAwait(false);
+ }
+ else
+ {
+ __content_400 = await __response.Content.ReadAsStringAsync(__effectiveCancellationToken).ConfigureAwait(false);
+ }
+ }
+ catch (global::System.Exception __ex)
+ {
+ __exception_400 = __ex;
+ }
+
+
+ throw global::Ideogram.ApiException.Create(
+ statusCode: __response.StatusCode,
+ message: __content_400 ?? __response.ReasonPhrase ?? string.Empty,
+ innerException: __exception_400,
+ responseBody: __content_400,
+ responseHeaders: global::System.Linq.Enumerable.ToDictionary(
+ __response.Headers,
+ h => h.Key,
+ h => h.Value));
+ }
+ //
+ if ((int)__response.StatusCode == 401)
+ {
+ string? __content_401 = null;
+ global::System.Exception? __exception_401 = null;
+ try
+ {
+ if (__effectiveReadResponseAsString)
+ {
+ __content_401 = await __response.Content.ReadAsStringAsync(__effectiveCancellationToken).ConfigureAwait(false);
+ }
+ else
+ {
+ __content_401 = await __response.Content.ReadAsStringAsync(__effectiveCancellationToken).ConfigureAwait(false);
+ }
+ }
+ catch (global::System.Exception __ex)
+ {
+ __exception_401 = __ex;
+ }
+
+
+ throw global::Ideogram.ApiException.Create(
+ statusCode: __response.StatusCode,
+ message: __content_401 ?? __response.ReasonPhrase ?? string.Empty,
+ innerException: __exception_401,
+ responseBody: __content_401,
+ responseHeaders: global::System.Linq.Enumerable.ToDictionary(
+ __response.Headers,
+ h => h.Key,
+ h => h.Value));
+ }
+ // Insufficient credits or quota.
+ if ((int)__response.StatusCode == 402)
+ {
+ string? __content_402 = null;
+ global::System.Exception? __exception_402 = null;
+ global::Ideogram.GenerationErrorResponse? __value_402 = null;
+ try
+ {
+ if (__effectiveReadResponseAsString)
+ {
+ __content_402 = await __response.Content.ReadAsStringAsync(__effectiveCancellationToken).ConfigureAwait(false);
+ __value_402 = global::Ideogram.GenerationErrorResponse.FromJson(__content_402, JsonSerializerContext);
+ }
+ else
+ {
+ __content_402 = await __response.Content.ReadAsStringAsync(__effectiveCancellationToken).ConfigureAwait(false);
+
+ __value_402 = global::Ideogram.GenerationErrorResponse.FromJson(__content_402, JsonSerializerContext);
+ }
+ }
+ catch (global::System.Exception __ex)
+ {
+ __exception_402 = __ex;
+ }
+
+
+ throw global::Ideogram.ApiException.Create(
+ statusCode: __response.StatusCode,
+ message: __content_402 ?? __response.ReasonPhrase ?? string.Empty,
+ innerException: __exception_402,
+ responseBody: __content_402,
+ responseObject: __value_402,
+ responseHeaders: global::System.Linq.Enumerable.ToDictionary(
+ __response.Headers,
+ h => h.Key,
+ h => h.Value));
+ }
+ //
+ if ((int)__response.StatusCode == 404)
+ {
+ string? __content_404 = null;
+ global::System.Exception? __exception_404 = null;
+ try
+ {
+ if (__effectiveReadResponseAsString)
+ {
+ __content_404 = await __response.Content.ReadAsStringAsync(__effectiveCancellationToken).ConfigureAwait(false);
+ }
+ else
+ {
+ __content_404 = await __response.Content.ReadAsStringAsync(__effectiveCancellationToken).ConfigureAwait(false);
+ }
+ }
+ catch (global::System.Exception __ex)
+ {
+ __exception_404 = __ex;
+ }
+
+
+ throw global::Ideogram.ApiException.Create(
+ statusCode: __response.StatusCode,
+ message: __content_404 ?? __response.ReasonPhrase ?? string.Empty,
+ innerException: __exception_404,
+ responseBody: __content_404,
+ responseHeaders: global::System.Linq.Enumerable.ToDictionary(
+ __response.Headers,
+ h => h.Key,
+ h => h.Value));
+ }
+ // Too many requests.
+ if ((int)__response.StatusCode == 429)
+ {
+ string? __content_429 = null;
+ global::System.Exception? __exception_429 = null;
+ global::Ideogram.GenerationErrorResponse? __value_429 = null;
+ try
+ {
+ if (__effectiveReadResponseAsString)
+ {
+ __content_429 = await __response.Content.ReadAsStringAsync(__effectiveCancellationToken).ConfigureAwait(false);
+ __value_429 = global::Ideogram.GenerationErrorResponse.FromJson(__content_429, JsonSerializerContext);
+ }
+ else
+ {
+ __content_429 = await __response.Content.ReadAsStringAsync(__effectiveCancellationToken).ConfigureAwait(false);
+
+ __value_429 = global::Ideogram.GenerationErrorResponse.FromJson(__content_429, JsonSerializerContext);
+ }
+ }
+ catch (global::System.Exception __ex)
+ {
+ __exception_429 = __ex;
+ }
+
+
+ throw global::Ideogram.ApiException.Create(
+ statusCode: __response.StatusCode,
+ message: __content_429 ?? __response.ReasonPhrase ?? string.Empty,
+ innerException: __exception_429,
+ responseBody: __content_429,
+ responseObject: __value_429,
+ responseHeaders: global::System.Linq.Enumerable.ToDictionary(
+ __response.Headers,
+ h => h.Key,
+ h => h.Value));
+ }
+ //
+ if ((int)__response.StatusCode == 500)
+ {
+ string? __content_500 = null;
+ global::System.Exception? __exception_500 = null;
+ try
+ {
+ if (__effectiveReadResponseAsString)
+ {
+ __content_500 = await __response.Content.ReadAsStringAsync(__effectiveCancellationToken).ConfigureAwait(false);
+ }
+ else
+ {
+ __content_500 = await __response.Content.ReadAsStringAsync(__effectiveCancellationToken).ConfigureAwait(false);
+ }
+ }
+ catch (global::System.Exception __ex)
+ {
+ __exception_500 = __ex;
+ }
+
+
+ throw global::Ideogram.ApiException.Create(
+ statusCode: __response.StatusCode,
+ message: __content_500 ?? __response.ReasonPhrase ?? string.Empty,
+ innerException: __exception_500,
+ responseBody: __content_500,
+ responseHeaders: global::System.Linq.Enumerable.ToDictionary(
+ __response.Headers,
+ h => h.Key,
+ h => h.Value));
+ }
+ //
+ if ((int)__response.StatusCode == 503)
+ {
+ string? __content_503 = null;
+ global::System.Exception? __exception_503 = null;
+ try
+ {
+ if (__effectiveReadResponseAsString)
+ {
+ __content_503 = await __response.Content.ReadAsStringAsync(__effectiveCancellationToken).ConfigureAwait(false);
+ }
+ else
+ {
+ __content_503 = await __response.Content.ReadAsStringAsync(__effectiveCancellationToken).ConfigureAwait(false);
+ }
+ }
+ catch (global::System.Exception __ex)
+ {
+ __exception_503 = __ex;
+ }
+
+
+ throw global::Ideogram.ApiException.Create(
+ statusCode: __response.StatusCode,
+ message: __content_503 ?? __response.ReasonPhrase ?? string.Empty,
+ innerException: __exception_503,
+ responseBody: __content_503,
+ responseHeaders: global::System.Linq.Enumerable.ToDictionary(
+ __response.Headers,
+ h => h.Key,
+ h => h.Value));
+ }
+
+ if (__effectiveReadResponseAsString)
+ {
+ var __content = await __response.Content.ReadAsStringAsync(
+ #if NET5_0_OR_GREATER
+ __effectiveCancellationToken
+ #endif
+ ).ConfigureAwait(false);
+
+ ProcessResponseContent(
+ client: HttpClient,
+ response: __response,
+ content: ref __content);
+ ProcessNanoBananaProResponseContent(
+ httpClient: HttpClient,
+ httpResponseMessage: __response,
+ content: ref __content);
+
+ try
+ {
+ __response.EnsureSuccessStatusCode();
+
+ var __value = global::Ideogram.ReframeImageNanoBananaProResponse.FromJson(__content, JsonSerializerContext) ??
+ throw new global::System.InvalidOperationException($"Response deserialization failed for \"{__content}\" ");
+ return new global::Ideogram.AutoSDKHttpResponse(
+ statusCode: __response.StatusCode,
+ headers: global::Ideogram.AutoSDKHttpResponse.CreateHeaders(__response),
+ requestUri: __response.RequestMessage?.RequestUri,
+ body: __value);
+ }
+ catch (global::System.Exception __ex)
+ {
+ throw global::Ideogram.ApiException.Create(
+ statusCode: __response.StatusCode,
+ message: __content ?? __response.ReasonPhrase ?? string.Empty,
+ innerException: __ex,
+ responseBody: __content,
+ responseHeaders: global::System.Linq.Enumerable.ToDictionary(
+ __response.Headers,
+ h => h.Key,
+ h => h.Value));
+ }
+ }
+ else
+ {
+ try
+ {
+ __response.EnsureSuccessStatusCode();
+ using var __content = await __response.Content.ReadAsStreamAsync(
+ #if NET5_0_OR_GREATER
+ __effectiveCancellationToken
+ #endif
+ ).ConfigureAwait(false);
+
+ var __value = await global::Ideogram.ReframeImageNanoBananaProResponse.FromJsonStreamAsync(__content, JsonSerializerContext).ConfigureAwait(false) ??
+ throw new global::System.InvalidOperationException("Response deserialization failed.");
+ return new global::Ideogram.AutoSDKHttpResponse(
+ statusCode: __response.StatusCode,
+ headers: global::Ideogram.AutoSDKHttpResponse.CreateHeaders(__response),
+ requestUri: __response.RequestMessage?.RequestUri,
+ body: __value);
+ }
+ catch (global::System.Exception __ex)
+ {
+ string? __content = null;
+ try
+ {
+ __content = await __response.Content.ReadAsStringAsync(
+ #if NET5_0_OR_GREATER
+ __effectiveCancellationToken
+ #endif
+ ).ConfigureAwait(false);
+ }
+ catch (global::System.Exception)
+ {
+ }
+
+ throw global::Ideogram.ApiException.Create(
+ statusCode: __response.StatusCode,
+ message: __content ?? __response.ReasonPhrase ?? string.Empty,
+ innerException: __ex,
+ responseBody: __content,
+ responseHeaders: global::System.Linq.Enumerable.ToDictionary(
+ __response.Headers,
+ h => h.Key,
+ h => h.Value));
+ }
+ }
+
+ }
+ }
+ finally
+ {
+ __httpRequest?.Dispose();
+ }
+ }
+ ///
+ /// Reframe an image with Nano Banana Pro
+ /// Recompose one image for a new aspect ratio with Nano Banana Pro, at a
+ /// 1K, 2K, or 4K output tier. Supply either an existing Ideogram image
+ /// asset or raw image bytes, but not both. The requested aspect ratio is
+ /// resolved to the closest dimensions the model supports at that tier.
+ /// This operation is asynchronous. It returns as soon as the request is
+ /// accepted; poll `GET /v2/generations/{generation_id}` for completion
+ /// and results.
+ ///
+ ///
+ /// Default Value: false
+ ///
+ ///
+ /// An identifier for an ideogram asset.
+ /// Example: {"asset_type":"RESPONSE","asset_id":"7uS_VESkRI6O3-sVgHQp_A"}
+ ///
+ ///
+ /// The JPEG, PNG, or WEBP image to reframe (max 50MB).
+ ///
+ ///
+ /// The JPEG, PNG, or WEBP image to reframe (max 50MB).
+ ///
+ ///
+ /// The requested output aspect ratio, as `width:height`.
+ /// Example: 969
+ ///
+ ///
+ /// The output resolution tier. The model sizes its output by tier at the requested aspect ratio; exact pixel dimensions cannot be requested.
+ /// Default Value: 1K
+ ///
+ ///
+ /// API-key requests are always private. For bearer-authenticated
+ /// requests, this controls whether the result is private; when
+ /// omitted, it follows the caller's plan entitlement. Enterprise
+ /// generations are always private.
+ ///
+ ///
+ /// The number of output images to generate.
+ /// Default Value: 1
+ ///
+ ///
+ /// Random seed. Set for reproducible generation.
+ /// Example: 12345
+ ///
+ /// Per-request overrides such as headers, query parameters, timeout, retries, and response buffering.
+ /// The token to cancel the operation with
+ ///
+ public async global::System.Threading.Tasks.Task NanoBananaProAsync(
+ string aspectRatio,
+ bool? dryRun = default,
+ global::Ideogram.AssetIdentifier? imageAssetIdentifier = default,
+ byte[]? image = default,
+ string? imagename = default,
+ global::Ideogram.ReframeImageNanoBananaProRequestResolutionTier? resolutionTier = default,
+ bool? @private = default,
+ int? numImages = default,
+ int? seed = default,
+ global::Ideogram.AutoSDKRequestOptions? requestOptions = default,
+ global::System.Threading.CancellationToken cancellationToken = default)
+ {
+ var __request = new global::Ideogram.ReframeImageNanoBananaProRequest
+ {
+ ImageAssetIdentifier = imageAssetIdentifier,
+ Image = image,
+ Imagename = imagename,
+ AspectRatio = aspectRatio,
+ ResolutionTier = resolutionTier,
+ Private = @private,
+ NumImages = numImages,
+ Seed = seed,
+ };
+
+ return await NanoBananaProAsync(
+ dryRun: dryRun,
+ request: __request,
+ requestOptions: requestOptions,
+ cancellationToken: cancellationToken).ConfigureAwait(false);
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/libs/Ideogram/Generated/Ideogram.JsonConverters.ReframeImageGptImage25FlareRequestQuality.g.cs b/src/libs/Ideogram/Generated/Ideogram.JsonConverters.ReframeImageGptImage25FlareRequestQuality.g.cs
new file mode 100644
index 0000000..c4ac004
--- /dev/null
+++ b/src/libs/Ideogram/Generated/Ideogram.JsonConverters.ReframeImageGptImage25FlareRequestQuality.g.cs
@@ -0,0 +1,53 @@
+#nullable enable
+
+namespace Ideogram.JsonConverters
+{
+ ///
+ public sealed class ReframeImageGptImage25FlareRequestQualityJsonConverter : global::System.Text.Json.Serialization.JsonConverter
+ {
+ ///
+ public override global::Ideogram.ReframeImageGptImage25FlareRequestQuality 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::Ideogram.ReframeImageGptImage25FlareRequestQualityExtensions.ToEnum(stringValue) ?? default;
+ }
+
+ break;
+ }
+ case global::System.Text.Json.JsonTokenType.Number:
+ {
+ var numValue = reader.GetInt32();
+ return (global::Ideogram.ReframeImageGptImage25FlareRequestQuality)numValue;
+ }
+ case global::System.Text.Json.JsonTokenType.Null:
+ {
+ return default(global::Ideogram.ReframeImageGptImage25FlareRequestQuality);
+ }
+ default:
+ throw new global::System.ArgumentOutOfRangeException(nameof(reader));
+ }
+
+ return default;
+ }
+
+ ///
+ public override void Write(
+ global::System.Text.Json.Utf8JsonWriter writer,
+ global::Ideogram.ReframeImageGptImage25FlareRequestQuality value,
+ global::System.Text.Json.JsonSerializerOptions options)
+ {
+ writer = writer ?? throw new global::System.ArgumentNullException(nameof(writer));
+
+ writer.WriteStringValue(global::Ideogram.ReframeImageGptImage25FlareRequestQualityExtensions.ToValueString(value));
+ }
+ }
+}
diff --git a/src/libs/Ideogram/Generated/Ideogram.JsonConverters.ReframeImageGptImage25FlareRequestQualityNullable.g.cs b/src/libs/Ideogram/Generated/Ideogram.JsonConverters.ReframeImageGptImage25FlareRequestQualityNullable.g.cs
new file mode 100644
index 0000000..09748ea
--- /dev/null
+++ b/src/libs/Ideogram/Generated/Ideogram.JsonConverters.ReframeImageGptImage25FlareRequestQualityNullable.g.cs
@@ -0,0 +1,60 @@
+#nullable enable
+
+namespace Ideogram.JsonConverters
+{
+ ///
+ public sealed class ReframeImageGptImage25FlareRequestQualityNullableJsonConverter : global::System.Text.Json.Serialization.JsonConverter
+ {
+ ///
+ public override global::Ideogram.ReframeImageGptImage25FlareRequestQuality? 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::Ideogram.ReframeImageGptImage25FlareRequestQualityExtensions.ToEnum(stringValue);
+ }
+
+ break;
+ }
+ case global::System.Text.Json.JsonTokenType.Number:
+ {
+ var numValue = reader.GetInt32();
+ return (global::Ideogram.ReframeImageGptImage25FlareRequestQuality)numValue;
+ }
+ case global::System.Text.Json.JsonTokenType.Null:
+ {
+ return default(global::Ideogram.ReframeImageGptImage25FlareRequestQuality?);
+ }
+ default:
+ throw new global::System.ArgumentOutOfRangeException(nameof(reader));
+ }
+
+ return default;
+ }
+
+ ///
+ public override void Write(
+ global::System.Text.Json.Utf8JsonWriter writer,
+ global::Ideogram.ReframeImageGptImage25FlareRequestQuality? 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::Ideogram.ReframeImageGptImage25FlareRequestQualityExtensions.ToValueString(value.Value));
+ }
+ }
+ }
+}
diff --git a/src/libs/Ideogram/Generated/Ideogram.JsonConverters.ReframeImageNanoBananaProRequestResolutionTier.g.cs b/src/libs/Ideogram/Generated/Ideogram.JsonConverters.ReframeImageNanoBananaProRequestResolutionTier.g.cs
new file mode 100644
index 0000000..242037f
--- /dev/null
+++ b/src/libs/Ideogram/Generated/Ideogram.JsonConverters.ReframeImageNanoBananaProRequestResolutionTier.g.cs
@@ -0,0 +1,53 @@
+#nullable enable
+
+namespace Ideogram.JsonConverters
+{
+ ///
+ public sealed class ReframeImageNanoBananaProRequestResolutionTierJsonConverter : global::System.Text.Json.Serialization.JsonConverter
+ {
+ ///
+ public override global::Ideogram.ReframeImageNanoBananaProRequestResolutionTier 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::Ideogram.ReframeImageNanoBananaProRequestResolutionTierExtensions.ToEnum(stringValue) ?? default;
+ }
+
+ break;
+ }
+ case global::System.Text.Json.JsonTokenType.Number:
+ {
+ var numValue = reader.GetInt32();
+ return (global::Ideogram.ReframeImageNanoBananaProRequestResolutionTier)numValue;
+ }
+ case global::System.Text.Json.JsonTokenType.Null:
+ {
+ return default(global::Ideogram.ReframeImageNanoBananaProRequestResolutionTier);
+ }
+ default:
+ throw new global::System.ArgumentOutOfRangeException(nameof(reader));
+ }
+
+ return default;
+ }
+
+ ///
+ public override void Write(
+ global::System.Text.Json.Utf8JsonWriter writer,
+ global::Ideogram.ReframeImageNanoBananaProRequestResolutionTier value,
+ global::System.Text.Json.JsonSerializerOptions options)
+ {
+ writer = writer ?? throw new global::System.ArgumentNullException(nameof(writer));
+
+ writer.WriteStringValue(global::Ideogram.ReframeImageNanoBananaProRequestResolutionTierExtensions.ToValueString(value));
+ }
+ }
+}
diff --git a/src/libs/Ideogram/Generated/Ideogram.JsonConverters.ReframeImageNanoBananaProRequestResolutionTierNullable.g.cs b/src/libs/Ideogram/Generated/Ideogram.JsonConverters.ReframeImageNanoBananaProRequestResolutionTierNullable.g.cs
new file mode 100644
index 0000000..0e3b133
--- /dev/null
+++ b/src/libs/Ideogram/Generated/Ideogram.JsonConverters.ReframeImageNanoBananaProRequestResolutionTierNullable.g.cs
@@ -0,0 +1,60 @@
+#nullable enable
+
+namespace Ideogram.JsonConverters
+{
+ ///
+ public sealed class ReframeImageNanoBananaProRequestResolutionTierNullableJsonConverter : global::System.Text.Json.Serialization.JsonConverter
+ {
+ ///
+ public override global::Ideogram.ReframeImageNanoBananaProRequestResolutionTier? 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::Ideogram.ReframeImageNanoBananaProRequestResolutionTierExtensions.ToEnum(stringValue);
+ }
+
+ break;
+ }
+ case global::System.Text.Json.JsonTokenType.Number:
+ {
+ var numValue = reader.GetInt32();
+ return (global::Ideogram.ReframeImageNanoBananaProRequestResolutionTier)numValue;
+ }
+ case global::System.Text.Json.JsonTokenType.Null:
+ {
+ return default(global::Ideogram.ReframeImageNanoBananaProRequestResolutionTier?);
+ }
+ default:
+ throw new global::System.ArgumentOutOfRangeException(nameof(reader));
+ }
+
+ return default;
+ }
+
+ ///
+ public override void Write(
+ global::System.Text.Json.Utf8JsonWriter writer,
+ global::Ideogram.ReframeImageNanoBananaProRequestResolutionTier? 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::Ideogram.ReframeImageNanoBananaProRequestResolutionTierExtensions.ToValueString(value.Value));
+ }
+ }
+ }
+}
diff --git a/src/libs/Ideogram/Generated/Ideogram.JsonSerializerContext.g.cs b/src/libs/Ideogram/Generated/Ideogram.JsonSerializerContext.g.cs
index 7e2fbd0..d74ff81 100644
--- a/src/libs/Ideogram/Generated/Ideogram.JsonSerializerContext.g.cs
+++ b/src/libs/Ideogram/Generated/Ideogram.JsonSerializerContext.g.cs
@@ -451,6 +451,16 @@ namespace Ideogram
[global::System.Text.Json.Serialization.JsonSerializable(typeof(global::Ideogram.ReframeImageIdeogramV3RequestRenderingSpeed), TypeInfoPropertyName = "ReframeImageIdeogramV3RequestRenderingSpeed2")]
[global::System.Text.Json.Serialization.JsonSerializable(typeof(global::Ideogram.ReframeImageNanoBanana2Response))]
[global::System.Text.Json.Serialization.JsonSerializable(typeof(global::Ideogram.ReframeImageNanoBanana2Request))]
+ [global::System.Text.Json.Serialization.JsonSerializable(typeof(global::Ideogram.ReframeImageNanoBananaProResponse))]
+ [global::System.Text.Json.Serialization.JsonSerializable(typeof(global::Ideogram.ReframeImageNanoBananaProRequest))]
+ [global::System.Text.Json.Serialization.JsonSerializable(typeof(global::Ideogram.ReframeImageNanoBananaProRequestResolutionTier), TypeInfoPropertyName = "ReframeImageNanoBananaProRequestResolutionTier2")]
+ [global::System.Text.Json.Serialization.JsonSerializable(typeof(global::Ideogram.ReframeImageGptImage25FlareResponse))]
+ [global::System.Text.Json.Serialization.JsonSerializable(typeof(global::Ideogram.ReframeImageGptImage25FlareRequest))]
+ [global::System.Text.Json.Serialization.JsonSerializable(typeof(global::Ideogram.ReframeImageGptImage25FlareRequestQuality), TypeInfoPropertyName = "ReframeImageGptImage25FlareRequestQuality2")]
+ [global::System.Text.Json.Serialization.JsonSerializable(typeof(global::Ideogram.ReframeImageBriaExpandResponse))]
+ [global::System.Text.Json.Serialization.JsonSerializable(typeof(global::Ideogram.ReframeImageBriaExpandRequest))]
+ [global::System.Text.Json.Serialization.JsonSerializable(typeof(global::Ideogram.ReframeImageAutoResponse))]
+ [global::System.Text.Json.Serialization.JsonSerializable(typeof(global::Ideogram.ReframeImageAutoRequest))]
[global::System.Text.Json.Serialization.JsonSerializable(typeof(global::Ideogram.GenerateImageIdeogramV3CharacterResponse))]
[global::System.Text.Json.Serialization.JsonSerializable(typeof(global::Ideogram.GenerateImageIdeogramV3CharacterRequest))]
[global::System.Text.Json.Serialization.JsonSerializable(typeof(global::Ideogram.GenerateImageIdeogramV3CharacterRequestRenderingSpeed), TypeInfoPropertyName = "GenerateImageIdeogramV3CharacterRequestRenderingSpeed2")]
@@ -499,16 +509,6 @@ namespace Ideogram
[global::System.Text.Json.Serialization.JsonSerializable(typeof(global::Ideogram.ApiTerms))]
[global::System.Text.Json.Serialization.JsonSerializable(typeof(global::Ideogram.PostApiTermsRequest))]
[global::System.Text.Json.Serialization.JsonSerializable(typeof(global::Ideogram.PostAddCreditsResponse))]
- [global::System.Text.Json.Serialization.JsonSerializable(typeof(global::Ideogram.PostAddCreditsError))]
- [global::System.Text.Json.Serialization.JsonSerializable(typeof(global::Ideogram.PostAddCreditsRequest))]
- [global::System.Text.Json.Serialization.JsonSerializable(typeof(global::Ideogram.GetUserCreditsResponse))]
- [global::System.Text.Json.Serialization.JsonSerializable(typeof(global::Ideogram.SpendCommitInfoResponse))]
- [global::System.Text.Json.Serialization.JsonSerializable(typeof(global::System.Collections.Generic.IList))]
- [global::System.Text.Json.Serialization.JsonSerializable(typeof(global::Ideogram.SpendCommitInfo))]
- [global::System.Text.Json.Serialization.JsonSerializable(typeof(global::Ideogram.GetUsageInfoResponse))]
- [global::System.Text.Json.Serialization.JsonSerializable(typeof(global::System.Collections.Generic.IList))]
- [global::System.Text.Json.Serialization.JsonSerializable(typeof(global::Ideogram.UsageSegment))]
- [global::System.Text.Json.Serialization.JsonSerializable(typeof(global::System.Collections.Generic.IList))]
internal sealed partial class SourceGenerationContextChunk0 : global::System.Text.Json.Serialization.JsonSerializerContext
{
}
@@ -519,6 +519,16 @@ internal sealed partial class SourceGenerationContextChunk0 : global::System.Tex
[global::System.Text.Json.Serialization.JsonSourceGenerationOptions(
DefaultIgnoreCondition = global::System.Text.Json.Serialization.JsonIgnoreCondition.WhenWritingNull
)]
+ [global::System.Text.Json.Serialization.JsonSerializable(typeof(global::Ideogram.PostAddCreditsError))]
+ [global::System.Text.Json.Serialization.JsonSerializable(typeof(global::Ideogram.PostAddCreditsRequest))]
+ [global::System.Text.Json.Serialization.JsonSerializable(typeof(global::Ideogram.GetUserCreditsResponse))]
+ [global::System.Text.Json.Serialization.JsonSerializable(typeof(global::Ideogram.SpendCommitInfoResponse))]
+ [global::System.Text.Json.Serialization.JsonSerializable(typeof(global::System.Collections.Generic.IList))]
+ [global::System.Text.Json.Serialization.JsonSerializable(typeof(global::Ideogram.SpendCommitInfo))]
+ [global::System.Text.Json.Serialization.JsonSerializable(typeof(global::Ideogram.GetUsageInfoResponse))]
+ [global::System.Text.Json.Serialization.JsonSerializable(typeof(global::System.Collections.Generic.IList))]
+ [global::System.Text.Json.Serialization.JsonSerializable(typeof(global::Ideogram.UsageSegment))]
+ [global::System.Text.Json.Serialization.JsonSerializable(typeof(global::System.Collections.Generic.IList))]
[global::System.Text.Json.Serialization.JsonSerializable(typeof(global::Ideogram.ToolUsage))]
[global::System.Text.Json.Serialization.JsonSerializable(typeof(global::Ideogram.ToolType), TypeInfoPropertyName = "ToolType2")]
[global::System.Text.Json.Serialization.JsonSerializable(typeof(global::Ideogram.ModelVersion), TypeInfoPropertyName = "ModelVersion2")]
@@ -800,6 +810,8 @@ internal sealed partial class SourceGenerationContextChunk0 : global::System.Tex
[global::System.Text.Json.Serialization.JsonSerializable(typeof(global::Ideogram.InpaintImageIdeogramV3RequestRenderingSpeed?), TypeInfoPropertyName = "NullableInpaintImageIdeogramV3RequestRenderingSpeed2")]
[global::System.Text.Json.Serialization.JsonSerializable(typeof(global::Ideogram.InpaintImageIdeogramV3CustomModelRequestRenderingSpeed?), TypeInfoPropertyName = "NullableInpaintImageIdeogramV3CustomModelRequestRenderingSpeed2")]
[global::System.Text.Json.Serialization.JsonSerializable(typeof(global::Ideogram.ReframeImageIdeogramV3RequestRenderingSpeed?), TypeInfoPropertyName = "NullableReframeImageIdeogramV3RequestRenderingSpeed2")]
+ [global::System.Text.Json.Serialization.JsonSerializable(typeof(global::Ideogram.ReframeImageNanoBananaProRequestResolutionTier?), TypeInfoPropertyName = "NullableReframeImageNanoBananaProRequestResolutionTier2")]
+ [global::System.Text.Json.Serialization.JsonSerializable(typeof(global::Ideogram.ReframeImageGptImage25FlareRequestQuality?), TypeInfoPropertyName = "NullableReframeImageGptImage25FlareRequestQuality2")]
[global::System.Text.Json.Serialization.JsonSerializable(typeof(global::Ideogram.GenerateImageIdeogramV3CharacterRequestRenderingSpeed?), TypeInfoPropertyName = "NullableGenerateImageIdeogramV3CharacterRequestRenderingSpeed2")]
[global::System.Text.Json.Serialization.JsonSerializable(typeof(global::Ideogram.GenerateImageIdeogramV3CharacterRequestStyleType?), TypeInfoPropertyName = "NullableGenerateImageIdeogramV3CharacterRequestStyleType2")]
[global::System.Text.Json.Serialization.JsonSerializable(typeof(global::Ideogram.InpaintImageIdeogramV3CharacterRequestRenderingSpeed?), TypeInfoPropertyName = "NullableInpaintImageIdeogramV3CharacterRequestRenderingSpeed2")]
@@ -1413,6 +1425,14 @@ public override bool CanConvert(global::System.Type typeToConvert)
|| typeToConvert == typeof(global::Ideogram.ReframeImageIdeogramV3RequestRenderingSpeed?)
+ || typeToConvert == typeof(global::Ideogram.ReframeImageNanoBananaProRequestResolutionTier)
+
+ || typeToConvert == typeof(global::Ideogram.ReframeImageNanoBananaProRequestResolutionTier?)
+
+ || typeToConvert == typeof(global::Ideogram.ReframeImageGptImage25FlareRequestQuality)
+
+ || typeToConvert == typeof(global::Ideogram.ReframeImageGptImage25FlareRequestQuality?)
+
|| typeToConvert == typeof(global::Ideogram.GenerateImageIdeogramV3CharacterRequestRenderingSpeed)
|| typeToConvert == typeof(global::Ideogram.GenerateImageIdeogramV3CharacterRequestRenderingSpeed?)
@@ -2794,6 +2814,26 @@ public override bool CanConvert(global::System.Type typeToConvert)
return new global::Ideogram.JsonConverters.ReframeImageIdeogramV3RequestRenderingSpeedNullableJsonConverter();
}
+ if (typeToConvert == typeof(global::Ideogram.ReframeImageNanoBananaProRequestResolutionTier))
+ {
+ return new global::Ideogram.JsonConverters.ReframeImageNanoBananaProRequestResolutionTierJsonConverter();
+ }
+
+ if (typeToConvert == typeof(global::Ideogram.ReframeImageNanoBananaProRequestResolutionTier?))
+ {
+ return new global::Ideogram.JsonConverters.ReframeImageNanoBananaProRequestResolutionTierNullableJsonConverter();
+ }
+
+ if (typeToConvert == typeof(global::Ideogram.ReframeImageGptImage25FlareRequestQuality))
+ {
+ return new global::Ideogram.JsonConverters.ReframeImageGptImage25FlareRequestQualityJsonConverter();
+ }
+
+ if (typeToConvert == typeof(global::Ideogram.ReframeImageGptImage25FlareRequestQuality?))
+ {
+ return new global::Ideogram.JsonConverters.ReframeImageGptImage25FlareRequestQualityNullableJsonConverter();
+ }
+
if (typeToConvert == typeof(global::Ideogram.GenerateImageIdeogramV3CharacterRequestRenderingSpeed))
{
return new global::Ideogram.JsonConverters.GenerateImageIdeogramV3CharacterRequestRenderingSpeedJsonConverter();
diff --git a/src/libs/Ideogram/Generated/Ideogram.JsonSerializerContextTypes.g.cs b/src/libs/Ideogram/Generated/Ideogram.JsonSerializerContextTypes.g.cs
index a8aa7ff..fcace05 100644
--- a/src/libs/Ideogram/Generated/Ideogram.JsonSerializerContextTypes.g.cs
+++ b/src/libs/Ideogram/Generated/Ideogram.JsonSerializerContextTypes.g.cs
@@ -1789,767 +1789,807 @@ public sealed partial class JsonSerializerContextTypes
///
///
///
- public global::Ideogram.GenerateImageIdeogramV3CharacterResponse? Type439 { get; set; }
+ public global::Ideogram.ReframeImageNanoBananaProResponse? Type439 { get; set; }
///
///
///
- public global::Ideogram.GenerateImageIdeogramV3CharacterRequest? Type440 { get; set; }
+ public global::Ideogram.ReframeImageNanoBananaProRequest? Type440 { get; set; }
///
///
///
- public global::Ideogram.GenerateImageIdeogramV3CharacterRequestRenderingSpeed? Type441 { get; set; }
+ public global::Ideogram.ReframeImageNanoBananaProRequestResolutionTier? Type441 { get; set; }
///
///
///
- public global::Ideogram.GenerateImageIdeogramV3CharacterRequestStyleType? Type442 { get; set; }
+ public global::Ideogram.ReframeImageGptImage25FlareResponse? Type442 { get; set; }
///
///
///
- public global::Ideogram.InpaintImageIdeogramV3CharacterResponse? Type443 { get; set; }
+ public global::Ideogram.ReframeImageGptImage25FlareRequest? Type443 { get; set; }
///
///
///
- public global::Ideogram.InpaintImageIdeogramV3CharacterRequest? Type444 { get; set; }
+ public global::Ideogram.ReframeImageGptImage25FlareRequestQuality? Type444 { get; set; }
///
///
///
- public global::Ideogram.InpaintImageIdeogramV3CharacterRequestRenderingSpeed? Type445 { get; set; }
+ public global::Ideogram.ReframeImageBriaExpandResponse? Type445 { get; set; }
///
///
///
- public global::Ideogram.InpaintImageIdeogramV3CharacterRequestStyleType? Type446 { get; set; }
+ public global::Ideogram.ReframeImageBriaExpandRequest? Type446 { get; set; }
///
///
///
- public global::Ideogram.GenerateImageV2AutoResponse? Type447 { get; set; }
+ public global::Ideogram.ReframeImageAutoResponse? Type447 { get; set; }
///
///
///
- public global::Ideogram.GenerateImageV2AutoRequest? Type448 { get; set; }
+ public global::Ideogram.ReframeImageAutoRequest? Type448 { get; set; }
///
///
///
- public global::Ideogram.GenerateImageV2AutoRequestResolutionTier? Type449 { get; set; }
+ public global::Ideogram.GenerateImageIdeogramV3CharacterResponse? Type449 { get; set; }
///
///
///
- public global::Ideogram.ToolRemixResponse? Type450 { get; set; }
+ public global::Ideogram.GenerateImageIdeogramV3CharacterRequest? Type450 { get; set; }
///
///
///
- public global::Ideogram.ToolRemixRequest? Type451 { get; set; }
+ public global::Ideogram.GenerateImageIdeogramV3CharacterRequestRenderingSpeed? Type451 { get; set; }
///
///
///
- public global::Ideogram.ToolRemixRequestResolutionTier? Type452 { get; set; }
+ public global::Ideogram.GenerateImageIdeogramV3CharacterRequestStyleType? Type452 { get; set; }
///
///
///
- public global::Ideogram.ResizeAdImageRequest? Type453 { get; set; }
+ public global::Ideogram.InpaintImageIdeogramV3CharacterResponse? Type453 { get; set; }
///
///
///
- public global::Ideogram.ResizeAdImageRequestResolution? Type454 { get; set; }
+ public global::Ideogram.InpaintImageIdeogramV3CharacterRequest? Type454 { get; set; }
///
///
///
- public global::Ideogram.ResizeAdImageQuality? Type455 { get; set; }
+ public global::Ideogram.InpaintImageIdeogramV3CharacterRequestRenderingSpeed? Type455 { get; set; }
///
///
///
- public global::Ideogram.WebhookSigningJwks? Type456 { get; set; }
+ public global::Ideogram.InpaintImageIdeogramV3CharacterRequestStyleType? Type456 { get; set; }
///
///
///
- public global::System.Collections.Generic.IList? Type457 { get; set; }
+ public global::Ideogram.GenerateImageV2AutoResponse? Type457 { get; set; }
///
///
///
- public global::Ideogram.WebhookSigningJwk? Type458 { get; set; }
+ public global::Ideogram.GenerateImageV2AutoRequest? Type458 { get; set; }
///
///
///
- public global::Ideogram.ProvenanceVerifyResponse? Type459 { get; set; }
+ public global::Ideogram.GenerateImageV2AutoRequestResolutionTier? Type459 { get; set; }
///
///
///
- public global::Ideogram.ProvenanceVerifyResponseValidationState? Type460 { get; set; }
+ public global::Ideogram.ToolRemixResponse? Type460 { get; set; }
///
///
///
- public global::Ideogram.ProvenanceVerifyRequest? Type461 { get; set; }
+ public global::Ideogram.ToolRemixRequest? Type461 { get; set; }
///
///
///
- public global::Ideogram.ManageApiSubscriptionResponse? Type462 { get; set; }
+ public global::Ideogram.ToolRemixRequestResolutionTier? Type462 { get; set; }
///
///
///
- public global::Ideogram.MetronomeLinks? Type463 { get; set; }
+ public global::Ideogram.ResizeAdImageRequest? Type463 { get; set; }
///
///
///
- public global::Ideogram.RechargeSettingsResponse? Type464 { get; set; }
+ public global::Ideogram.ResizeAdImageRequestResolution? Type464 { get; set; }
///
///
///
- public global::Ideogram.Price? Type465 { get; set; }
+ public global::Ideogram.ResizeAdImageQuality? Type465 { get; set; }
///
///
///
- public global::Ideogram.RechargeSettings? Type466 { get; set; }
+ public global::Ideogram.WebhookSigningJwks? Type466 { get; set; }
///
///
///
- public global::Ideogram.PostApiSubscriptionResponse? Type467 { get; set; }
+ public global::System.Collections.Generic.IList? Type467 { get; set; }
///
///
///
- public global::Ideogram.PostApiSubscriptionError? Type468 { get; set; }
+ public global::Ideogram.WebhookSigningJwk? Type468 { get; set; }
///
///
///
- public global::Ideogram.PostApiSubscriptionRequest? Type469 { get; set; }
+ public global::Ideogram.ProvenanceVerifyResponse? Type469 { get; set; }
///
///
///
- public global::Ideogram.ManageApiCreditSummaryResponse? Type470 { get; set; }
+ public global::Ideogram.ProvenanceVerifyResponseValidationState? Type470 { get; set; }
///
///
///
- public global::System.Collections.Generic.IList? Type471 { get; set; }
+ public global::Ideogram.ProvenanceVerifyRequest? Type471 { get; set; }
///
///
///
- public global::Ideogram.CreditGrant? Type472 { get; set; }
+ public global::Ideogram.ManageApiSubscriptionResponse? Type472 { get; set; }
///
///
///
- public global::Ideogram.GetApiKeysResponse? Type473 { get; set; }
+ public global::Ideogram.MetronomeLinks? Type473 { get; set; }
///
///
///
- public global::System.Collections.Generic.IList? Type474 { get; set; }
+ public global::Ideogram.RechargeSettingsResponse? Type474 { get; set; }
///
///
///
- public global::Ideogram.RedactedApiKey? Type475 { get; set; }
+ public global::Ideogram.Price? Type475 { get; set; }
///
///
///
- public global::Ideogram.PostApiKeyResponse? Type476 { get; set; }
+ public global::Ideogram.RechargeSettings? Type476 { get; set; }
///
///
///
- public global::Ideogram.CreateApiKeyRequest? Type477 { get; set; }
+ public global::Ideogram.PostApiSubscriptionResponse? Type477 { get; set; }
///
///
///
- public global::Ideogram.ApiProfileApiKey? Type478 { get; set; }
+ public global::Ideogram.PostApiSubscriptionError? Type478 { get; set; }
///
///
///
- public global::Ideogram.ApiKeyStatus? Type479 { get; set; }
+ public global::Ideogram.PostApiSubscriptionRequest? Type479 { get; set; }
///
///
///
- public global::Ideogram.PatchApiKeyRequest? Type480 { get; set; }
+ public global::Ideogram.ManageApiCreditSummaryResponse? Type480 { get; set; }
///
///
///
- public global::Ideogram.ManageApiStripeSubscriptionResponse? Type481 { get; set; }
+ public global::System.Collections.Generic.IList? Type481 { get; set; }
///
///
///
- public global::Ideogram.ManageApiPaymentResponse? Type482 { get; set; }
+ public global::Ideogram.CreditGrant? Type482 { get; set; }
///
///
///
- public global::Ideogram.GetApiTermsResponse? Type483 { get; set; }
+ public global::Ideogram.GetApiKeysResponse? Type483 { get; set; }
///
///
///
- public global::Ideogram.ApiTerms? Type484 { get; set; }
+ public global::System.Collections.Generic.IList? Type484 { get; set; }
///
///
///
- public global::Ideogram.PostApiTermsRequest? Type485 { get; set; }
+ public global::Ideogram.RedactedApiKey? Type485 { get; set; }
///
///
///
- public global::Ideogram.PostAddCreditsResponse? Type486 { get; set; }
+ public global::Ideogram.PostApiKeyResponse? Type486 { get; set; }
///
///
///
- public global::Ideogram.PostAddCreditsError? Type487 { get; set; }
+ public global::Ideogram.CreateApiKeyRequest? Type487 { get; set; }
///
///
///
- public global::Ideogram.PostAddCreditsRequest? Type488 { get; set; }
+ public global::Ideogram.ApiProfileApiKey? Type488 { get; set; }
///
///
///
- public global::Ideogram.GetUserCreditsResponse? Type489 { get; set; }
+ public global::Ideogram.ApiKeyStatus? Type489 { get; set; }
///
///
///
- public global::Ideogram.SpendCommitInfoResponse? Type490 { get; set; }
+ public global::Ideogram.PatchApiKeyRequest? Type490 { get; set; }
///
///
///
- public global::System.Collections.Generic.IList? Type491 { get; set; }
+ public global::Ideogram.ManageApiStripeSubscriptionResponse? Type491 { get; set; }
///
///
///
- public global::Ideogram.SpendCommitInfo? Type492 { get; set; }
+ public global::Ideogram.ManageApiPaymentResponse? Type492 { get; set; }
///
///
///
- public global::Ideogram.GetUsageInfoResponse? Type493 { get; set; }
+ public global::Ideogram.GetApiTermsResponse? Type493 { get; set; }
///
///
///
- public global::System.Collections.Generic.IList? Type494 { get; set; }
+ public global::Ideogram.ApiTerms? Type494 { get; set; }
///
///
///
- public global::Ideogram.UsageSegment? Type495 { get; set; }
+ public global::Ideogram.PostApiTermsRequest? Type495 { get; set; }
///
///
///
- public global::System.Collections.Generic.IList? Type496 { get; set; }
+ public global::Ideogram.PostAddCreditsResponse? Type496 { get; set; }
///
///
///
- public global::Ideogram.ToolUsage? Type497 { get; set; }
+ public global::Ideogram.PostAddCreditsError? Type497 { get; set; }
///
///
///
- public global::Ideogram.ToolType? Type498 { get; set; }
+ public global::Ideogram.PostAddCreditsRequest? Type498 { get; set; }
///
///
///
- public global::Ideogram.ModelVersion? Type499 { get; set; }
+ public global::Ideogram.GetUserCreditsResponse? Type499 { get; set; }
///
///
///
- public global::Ideogram.SegmentBy? Type500 { get; set; }
+ public global::Ideogram.SpendCommitInfoResponse? Type500 { get; set; }
///
///
///
- public global::Ideogram.UsageSource? Type501 { get; set; }
+ public global::System.Collections.Generic.IList? Type501 { get; set; }
///
///
///
- public global::Ideogram.GetApiProfilesResponse? Type502 { get; set; }
+ public global::Ideogram.SpendCommitInfo? Type502 { get; set; }
///
///
///
- public global::System.Collections.Generic.IList? Type503 { get; set; }
+ public global::Ideogram.GetUsageInfoResponse? Type503 { get; set; }
///
///
///
- public global::Ideogram.ApiProfile? Type504 { get; set; }
+ public global::System.Collections.Generic.IList? Type504 { get; set; }
///
///
///
- public global::Ideogram.ApiProfileType? Type505 { get; set; }
+ public global::Ideogram.UsageSegment? Type505 { get; set; }
///
///
///
- public global::Ideogram.ApiProfileRole? Type506 { get; set; }
+ public global::System.Collections.Generic.IList? Type506 { get; set; }
///
///
///
- public global::System.Collections.Generic.IList? Type507 { get; set; }
+ public global::Ideogram.ToolUsage? Type507 { get; set; }
///
///
///
- public global::Ideogram.UpdateOrganizationApiPropertiesResponse? Type508 { get; set; }
+ public global::Ideogram.ToolType? Type508 { get; set; }
///
///
///
- public global::Ideogram.UpdateOrganizationApiPropertiesRequest? Type509 { get; set; }
+ public global::Ideogram.ModelVersion? Type509 { get; set; }
///
///
///
- public global::Ideogram.GetApiOrganizationUserSuggestionsResponse? Type510 { get; set; }
+ public global::Ideogram.SegmentBy? Type510 { get; set; }
///
///
///
- public global::System.Collections.Generic.IList? Type511 { get; set; }
+ public global::Ideogram.UsageSource? Type511 { get; set; }
///
///
///
- public global::Ideogram.ApiOrganizationUserSuggestion? Type512 { get; set; }
+ public global::Ideogram.GetApiProfilesResponse? Type512 { get; set; }
///
///
///
- public global::Ideogram.GetOrganizationMembersResponse? Type513 { get; set; }
+ public global::System.Collections.Generic.IList? Type513 { get; set; }
///
///
///
- public global::System.Collections.Generic.IList? Type514 { get; set; }
+ public global::Ideogram.ApiProfile? Type514 { get; set; }
///
///
///
- public global::Ideogram.OrganizationMember? Type515 { get; set; }
+ public global::Ideogram.ApiProfileType? Type515 { get; set; }
///
///
///
- public global::Ideogram.CreateApiKeyResponse? Type516 { get; set; }
+ public global::Ideogram.ApiProfileRole? Type516 { get; set; }
///
///
///
- public global::Ideogram.GetApiKeysV2Response? Type517 { get; set; }
+ public global::System.Collections.Generic.IList? Type517 { get; set; }
///
///
///
- public global::Ideogram.OrganizationMemberOperationResponse? Type518 { get; set; }
+ public global::Ideogram.UpdateOrganizationApiPropertiesResponse? Type518 { get; set; }
///
///
///
- public global::System.Collections.Generic.IList? Type519 { get; set; }
+ public global::Ideogram.UpdateOrganizationApiPropertiesRequest? Type519 { get; set; }
///
///
///
- public global::Ideogram.OrganizationMemberOperationResult? Type520 { get; set; }
+ public global::Ideogram.GetApiOrganizationUserSuggestionsResponse? Type520 { get; set; }
///
///
///
- public global::Ideogram.AddOrganizationMembersRequest? Type521 { get; set; }
+ public global::System.Collections.Generic.IList? Type521 { get; set; }
///
///
///
- public global::System.Collections.Generic.IList? Type522 { get; set; }
+ public global::Ideogram.ApiOrganizationUserSuggestion? Type522 { get; set; }
///
///
///
- public global::Ideogram.LiteOrganizationMember? Type523 { get; set; }
+ public global::Ideogram.GetOrganizationMembersResponse? Type523 { get; set; }
///
///
///
- public global::Ideogram.RemoveOrganizationMembersRequest? Type524 { get; set; }
+ public global::System.Collections.Generic.IList? Type524 { get; set; }
///
///
///
- public global::Ideogram.PromoteOrganizationAdminsRequest? Type525 { get; set; }
+ public global::Ideogram.OrganizationMember? Type525 { get; set; }
///
///
///
- public global::Ideogram.DemoteOrganizationAdminsRequest? Type526 { get; set; }
+ public global::Ideogram.CreateApiKeyResponse? Type526 { get; set; }
///
///
///
- public global::Ideogram.CancelOrganizationInviteRequest? Type527 { get; set; }
+ public global::Ideogram.GetApiKeysV2Response? Type527 { get; set; }
///
///
///
- public global::Ideogram.ResendOrganizationInviteRequest? Type528 { get; set; }
+ public global::Ideogram.OrganizationMemberOperationResponse? Type528 { get; set; }
///
///
///
- public global::Ideogram.ListOrganizationInvoicesResponse? Type529 { get; set; }
+ public global::System.Collections.Generic.IList? Type529 { get; set; }
///
///
///
- public global::System.Collections.Generic.IList? Type530 { get; set; }
+ public global::Ideogram.OrganizationMemberOperationResult? Type530 { get; set; }
///
///
///
- public global::Ideogram.Invoice? Type531 { get; set; }
+ public global::Ideogram.AddOrganizationMembersRequest? Type531 { get; set; }
///
///
///
- public global::Ideogram.InvoiceStatus? Type532 { get; set; }
+ public global::System.Collections.Generic.IList? Type532 { get; set; }
///
///
///
- public global::System.Collections.Generic.IList? Type533 { get; set; }
+ public global::Ideogram.LiteOrganizationMember? Type533 { get; set; }
///
///
///
- public global::Ideogram.InvoiceLineItem? Type534 { get; set; }
+ public global::Ideogram.RemoveOrganizationMembersRequest? Type534 { get; set; }
///
///
///
- public global::Ideogram.GetOrganizationBillingPortalResponse? Type535 { get; set; }
+ public global::Ideogram.PromoteOrganizationAdminsRequest? Type535 { get; set; }
///
///
///
- public global::Ideogram.ListDatasetsResponse? Type536 { get; set; }
+ public global::Ideogram.DemoteOrganizationAdminsRequest? Type536 { get; set; }
///
///
///
- public global::System.Collections.Generic.IList? Type537 { get; set; }
+ public global::Ideogram.CancelOrganizationInviteRequest? Type537 { get; set; }
///
///
///
- public global::Ideogram.Dataset? Type538 { get; set; }
+ public global::Ideogram.ResendOrganizationInviteRequest? Type538 { get; set; }
///
///
///
- public global::Ideogram.CreateDatasetRequest? Type539 { get; set; }
+ public global::Ideogram.ListOrganizationInvoicesResponse? Type539 { get; set; }
///
///
///
- public global::Ideogram.GetDatasetResponse? Type540 { get; set; }
+ public global::System.Collections.Generic.IList? Type540 { get; set; }
///
///
///
- public global::System.Collections.Generic.IList? Type541 { get; set; }
+ public global::Ideogram.Invoice? Type541 { get; set; }
///
///
///
- public global::Ideogram.DatasetFile? Type542 { get; set; }
+ public global::Ideogram.InvoiceStatus? Type542 { get; set; }
///
///
///
- public global::Ideogram.UploadDatasetAssetsResponse? Type543 { get; set; }
+ public global::System.Collections.Generic.IList? Type543 { get; set; }
///
///
///
- public global::System.Collections.Generic.IList? Type544 { get; set; }
+ public global::Ideogram.InvoiceLineItem? Type544 { get; set; }
///
///
///
- public global::Ideogram.DatasetUploadSucceededAsset? Type545 { get; set; }
+ public global::Ideogram.GetOrganizationBillingPortalResponse? Type545 { get; set; }
///
///
///
- public global::System.Collections.Generic.IList? Type546 { get; set; }
+ public global::Ideogram.ListDatasetsResponse? Type546 { get; set; }
///
///
///
- public global::Ideogram.DatasetUploadFailedAsset? Type547 { get; set; }
+ public global::System.Collections.Generic.IList? Type547 { get; set; }
///
///
///
- public global::Ideogram.DatasetAssetFailureReason? Type548 { get; set; }
+ public global::Ideogram.Dataset? Type548 { get; set; }
///
///
///
- public global::Ideogram.UploadDatasetAssetsRequest? Type549 { get; set; }
+ public global::Ideogram.CreateDatasetRequest? Type549 { get; set; }
///
///
///
- public global::Ideogram.TrainDatasetModelResponse? Type550 { get; set; }
+ public global::Ideogram.GetDatasetResponse? Type550 { get; set; }
///
///
///
- public global::Ideogram.TrainDatasetModelRequest? Type551 { get; set; }
+ public global::System.Collections.Generic.IList? Type551 { get; set; }
///
///
///
- public global::Ideogram.ListModelsResponse? Type552 { get; set; }
+ public global::Ideogram.DatasetFile? Type552 { get; set; }
///
///
///
- public global::System.Collections.Generic.IList? Type553 { get; set; }
+ public global::Ideogram.UploadDatasetAssetsResponse? Type553 { get; set; }
///
///
///
- public global::Ideogram.CustomModel? Type554 { get; set; }
+ public global::System.Collections.Generic.IList? Type554 { get; set; }
///
///
///
- public global::Ideogram.ModelStatus? Type555 { get; set; }
+ public global::Ideogram.DatasetUploadSucceededAsset? Type555 { get; set; }
///
///
///
- public global::System.Collections.Generic.IList? Type556 { get; set; }
+ public global::System.Collections.Generic.IList? Type556 { get; set; }
///
///
///
- public global::Ideogram.TrainingRun? Type557 { get; set; }
+ public global::Ideogram.DatasetUploadFailedAsset? Type557 { get; set; }
///
///
///
- public global::Ideogram.TrainingRunStatus? Type558 { get; set; }
+ public global::Ideogram.DatasetAssetFailureReason? Type558 { get; set; }
///
///
///
- public global::Ideogram.GetModelResponse? Type559 { get; set; }
+ public global::Ideogram.UploadDatasetAssetsRequest? Type559 { get; set; }
///
///
///
- public global::Ideogram.TrainModelV3Request? Type560 { get; set; }
+ public global::Ideogram.TrainDatasetModelResponse? Type560 { get; set; }
///
///
///
- public global::Ideogram.TrainModelV3AdvancedRequest? Type561 { get; set; }
+ public global::Ideogram.TrainDatasetModelRequest? Type561 { get; set; }
///
///
///
- public global::Ideogram.TrainModelV4Request? Type562 { get; set; }
+ public global::Ideogram.ListModelsResponse? Type562 { get; set; }
///
///
///
- public global::Ideogram.TrainModelV4AdvancedRequest? Type563 { get; set; }
+ public global::System.Collections.Generic.IList? Type563 { get; set; }
///
///
///
- public global::Ideogram.PublishMiniAppResponse? Type564 { get; set; }
+ public global::Ideogram.CustomModel? Type564 { get; set; }
///
///
///
- public global::Ideogram.PublishMiniAppRequest? Type565 { get; set; }
+ public global::Ideogram.ModelStatus? Type565 { get; set; }
///
///
///
- public global::Ideogram.PublishMiniAppRequestEmbed? Type566 { get; set; }
+ public global::System.Collections.Generic.IList? Type566 { get; set; }
///
///
///
- public object? Type567 { get; set; }
+ public global::Ideogram.TrainingRun? Type567 { get; set; }
///
///
///
- public global::Ideogram.MiniAppArtwork? Type568 { get; set; }
+ public global::Ideogram.TrainingRunStatus? Type568 { get; set; }
///
///
///
- public global::Ideogram.PublishMiniAppPreviewResponse? Type569 { get; set; }
+ public global::Ideogram.GetModelResponse? Type569 { get; set; }
///
///
///
- public global::Ideogram.PublishMiniAppPreviewRequest? Type570 { get; set; }
+ public global::Ideogram.TrainModelV3Request? Type570 { get; set; }
///
///
///
- public global::Ideogram.PublishMiniAppPreviewRequestEmbed? Type571 { get; set; }
+ public global::Ideogram.TrainModelV3AdvancedRequest? Type571 { get; set; }
///
///
///
- public global::Ideogram.UnpublishMiniAppPreviewResponse? Type572 { get; set; }
+ public global::Ideogram.TrainModelV4Request? Type572 { get; set; }
///
///
///
- public global::Ideogram.GetStaleMiniAppPreviewsResponse? Type573 { get; set; }
+ public global::Ideogram.TrainModelV4AdvancedRequest? Type573 { get; set; }
///
///
///
- public global::System.Collections.Generic.IList? Type574 { get; set; }
+ public global::Ideogram.PublishMiniAppResponse? Type574 { get; set; }
///
///
///
- public global::Ideogram.MiniAppMarketingProjectionEntry? Type575 { get; set; }
+ public global::Ideogram.PublishMiniAppRequest? Type575 { get; set; }
///
///
///
- public global::Ideogram.MiniAppMarketingProjectionEntryEmbed? Type576 { get; set; }
+ public global::Ideogram.PublishMiniAppRequestEmbed? Type576 { get; set; }
///
///
///
- public global::Ideogram.GetIntegrationsResponse? Type577 { get; set; }
+ public object? Type577 { get; set; }
///
///
///
- public global::System.Collections.Generic.IList? Type578 { get; set; }
+ public global::Ideogram.MiniAppArtwork? Type578 { get; set; }
///
///
///
- public global::Ideogram.IntegrationType? Type579 { get; set; }
+ public global::Ideogram.PublishMiniAppPreviewResponse? Type579 { get; set; }
///
///
///
- public global::Ideogram.IntegrationErrorResponse? Type580 { get; set; }
+ public global::Ideogram.PublishMiniAppPreviewRequest? Type580 { get; set; }
///
///
///
- public global::Ideogram.IntegrationErrorResponseError? Type581 { get; set; }
+ public global::Ideogram.PublishMiniAppPreviewRequestEmbed? Type581 { get; set; }
///
///
///
- public global::Ideogram.IntegrationAssetSearchResponse? Type582 { get; set; }
+ public global::Ideogram.UnpublishMiniAppPreviewResponse? Type582 { get; set; }
///
///
///
- public global::System.Collections.Generic.IList? Type583 { get; set; }
+ public global::Ideogram.GetStaleMiniAppPreviewsResponse? Type583 { get; set; }
///
///
///
- public global::Ideogram.IntegrationAsset? Type584 { get; set; }
+ public global::System.Collections.Generic.IList? Type584 { get; set; }
///
///
///
- public global::Ideogram.IntegrationAssetDelivery? Type585 { get; set; }
+ public global::Ideogram.MiniAppMarketingProjectionEntry? Type585 { get; set; }
///
///
///
- public global::Ideogram.IntegrationAssetSearchRequest? Type586 { get; set; }
+ public global::Ideogram.MiniAppMarketingProjectionEntryEmbed? Type586 { get; set; }
///
///
///
- public global::Ideogram.V4StyleDescription? Type587 { get; set; }
+ public global::Ideogram.GetIntegrationsResponse? Type587 { get; set; }
///
///
///
- public global::Ideogram.V4CompositionalDeconstruction? Type588 { get; set; }
+ public global::System.Collections.Generic.IList? Type588 { get; set; }
///
///
///
- public global::System.Collections.Generic.IList? Type589 { get; set; }
+ public global::Ideogram.IntegrationType? Type589 { get; set; }
///
///
///
- public global::Ideogram.V4PromptElement? Type590 { get; set; }
+ public global::Ideogram.IntegrationErrorResponse? Type590 { get; set; }
///
///
///
- public global::Ideogram.V4ObjPromptElement? Type591 { get; set; }
+ public global::Ideogram.IntegrationErrorResponseError? Type591 { get; set; }
///
///
///
- public global::Ideogram.V4TextPromptElement? Type592 { get; set; }
+ public global::Ideogram.IntegrationAssetSearchResponse? Type592 { get; set; }
///
///
///
- public global::Ideogram.V4PromptElementDiscriminator? Type593 { get; set; }
+ public global::System.Collections.Generic.IList? Type593 { get; set; }
///
///
///
- public global::Ideogram.V4PromptElementDiscriminatorType? Type594 { get; set; }
+ public global::Ideogram.IntegrationAsset? Type594 { get; set; }
///
///
///
- public global::Ideogram.V4ObjPromptElementType? Type595 { get; set; }
+ public global::Ideogram.IntegrationAssetDelivery? Type595 { get; set; }
///
///
///
- public global::System.Collections.Generic.IList? Type596 { get; set; }
+ public global::Ideogram.IntegrationAssetSearchRequest? Type596 { get; set; }
///
///
///
- public global::Ideogram.V4TextPromptElementType? Type597 { get; set; }
+ public global::Ideogram.V4StyleDescription? Type597 { get; set; }
///
///
///
- public global::Ideogram.ColorPaletteWithPresetName? Type598 { get; set; }
+ public global::Ideogram.V4CompositionalDeconstruction? Type598 { get; set; }
///
///
///
- public global::Ideogram.ColorPaletteWithMembers? Type599 { get; set; }
+ public global::System.Collections.Generic.IList? Type599 { get; set; }
///
///
///
- public global::Ideogram.ColorPalettePresetName? Type600 { get; set; }
+ public global::Ideogram.V4PromptElement? Type600 { get; set; }
///
///
///
- public global::System.Collections.Generic.IList? Type601 { get; set; }
+ public global::Ideogram.V4ObjPromptElement? Type601 { get; set; }
///
///
///
- public global::Ideogram.ColorPaletteMember? Type602 { get; set; }
+ public global::Ideogram.V4TextPromptElement? Type602 { get; set; }
///
///
///
- public global::Ideogram.SvgGenerationObject? Type603 { get; set; }
+ public global::Ideogram.V4PromptElementDiscriminator? Type603 { get; set; }
///
///
///
- public global::Ideogram.SvgGenerationObjectObjectType? Type604 { get; set; }
+ public global::Ideogram.V4PromptElementDiscriminatorType? Type604 { get; set; }
///
///
///
- public global::Ideogram.SvgGenerationObjectMimeType? Type605 { get; set; }
+ public global::Ideogram.V4ObjPromptElementType? Type605 { get; set; }
///
///
///
- public global::Ideogram.VideoObject? Type606 { get; set; }
+ public global::System.Collections.Generic.IList? Type606 { get; set; }
///
///
///
- public global::Ideogram.VideoObjectObjectType? Type607 { get; set; }
+ public global::Ideogram.V4TextPromptElementType? Type607 { get; set; }
///
///
///
- public global::Ideogram.DetectedTextBlockAlignment? Type608 { get; set; }
+ public global::Ideogram.ColorPaletteWithPresetName? Type608 { get; set; }
///
///
///
- public global::System.Collections.Generic.IList? Type609 { get; set; }
+ public global::Ideogram.ColorPaletteWithMembers? Type609 { get; set; }
///
///
///
- public global::Ideogram.DetectedTextBlockFormattingItem? Type610 { get; set; }
+ public global::Ideogram.ColorPalettePresetName? Type610 { get; set; }
///
///
///
- public global::Ideogram.DetectedTextBlockRole? Type611 { get; set; }
+ public global::System.Collections.Generic.IList? Type611 { get; set; }
///
///
///
- public global::Ideogram.AssetType? Type612 { get; set; }
+ public global::Ideogram.ColorPaletteMember? Type612 { get; set; }
///
///
///
- public global::Ideogram.IdeogramColorPaletteWithPresetName? Type613 { get; set; }
+ public global::Ideogram.SvgGenerationObject? Type613 { get; set; }
///
///
///
- public global::Ideogram.IdeogramColorPalettePresetName? Type614 { get; set; }
+ public global::Ideogram.SvgGenerationObjectObjectType? Type614 { get; set; }
///
///
///
- public global::Ideogram.PostGenerateDesignV4200Response? Type615 { get; set; }
+ public global::Ideogram.SvgGenerationObjectMimeType? Type615 { get; set; }
///
///
///
- public global::Ideogram.PostGenerateDesignV4200ResponseDiscriminator? Type616 { get; set; }
+ public global::Ideogram.VideoObject? Type616 { get; set; }
///
///
///
- public global::Ideogram.PostGenerateDesignV4200ResponseDiscriminatorResponseType? Type617 { get; set; }
+ public global::Ideogram.VideoObjectObjectType? Type617 { get; set; }
///
///
///
- public global::Ideogram.PostInternalTesting200Response? Type618 { get; set; }
+ public global::Ideogram.DetectedTextBlockAlignment? Type618 { get; set; }
///
///
///
- public global::Ideogram.GenerationResponseDataInnerDiscriminator? Type619 { get; set; }
+ public global::System.Collections.Generic.IList? Type619 { get; set; }
///
///
///
- public global::Ideogram.GenerationResponseDataInnerDiscriminatorObjectType? Type620 { get; set; }
+ public global::Ideogram.DetectedTextBlockFormattingItem? Type620 { get; set; }
///
///
///
- public global::Ideogram.MagicPromptRequestMessagesInnerRole? Type621 { get; set; }
+ public global::Ideogram.DetectedTextBlockRole? Type621 { get; set; }
///
///
///
- public global::Ideogram.DatasetCoverAssetIdentifier? Type622 { get; set; }
+ public global::Ideogram.AssetType? Type622 { get; set; }
///
///
///
- public global::System.Collections.Generic.IList? Type623 { get; set; }
+ public global::Ideogram.IdeogramColorPaletteWithPresetName? Type623 { get; set; }
///
///
///
- public global::System.Collections.Generic.IList? Type624 { get; set; }
+ public global::Ideogram.IdeogramColorPalettePresetName? Type624 { get; set; }
///
///
///
- public global::Ideogram.ListCustomModelsScope? Type625 { get; set; }
+ public global::Ideogram.PostGenerateDesignV4200Response? Type625 { get; set; }
///
///
///
- public global::System.Collections.Generic.IList? Type626 { get; set; }
+ public global::Ideogram.PostGenerateDesignV4200ResponseDiscriminator? Type626 { get; set; }
///
///
///
- public global::Ideogram.GetAccountUsageBucketWidth? Type627 { get; set; }
+ public global::Ideogram.PostGenerateDesignV4200ResponseDiscriminatorResponseType? Type627 { get; set; }
///
///
///
- public global::System.Collections.Generic.IList? Type628 { get; set; }
+ public global::Ideogram.PostInternalTesting200Response? Type628 { get; set; }
///
///
///
- public global::Ideogram.GetAccountUsageSource? Type629 { get; set; }
+ public global::Ideogram.GenerationResponseDataInnerDiscriminator? Type629 { get; set; }
+ ///
+ ///
+ ///
+ public global::Ideogram.GenerationResponseDataInnerDiscriminatorObjectType? Type630 { get; set; }
+ ///
+ ///
+ ///
+ public global::Ideogram.MagicPromptRequestMessagesInnerRole? Type631 { get; set; }
+ ///
+ ///
+ ///
+ public global::Ideogram.DatasetCoverAssetIdentifier? Type632 { get; set; }
+ ///
+ ///
+ ///
+ public global::System.Collections.Generic.IList? Type633 { get; set; }
+ ///
+ ///
+ ///
+ public global::System.Collections.Generic.IList? Type634 { get; set; }
+ ///
+ ///
+ ///
+ public global::Ideogram.ListCustomModelsScope? Type635 { get; set; }
+ ///
+ ///
+ ///
+ public global::System.Collections.Generic.IList? Type636 { get; set; }
+ ///
+ ///
+ ///
+ public global::Ideogram.GetAccountUsageBucketWidth? Type637 { get; set; }
+ ///
+ ///
+ ///
+ public global::System.Collections.Generic.IList? Type638 { get; set; }
+ ///
+ ///
+ ///
+ public global::Ideogram.GetAccountUsageSource? Type639 { get; set; }
///
///
diff --git a/src/libs/Ideogram/Generated/Ideogram.Models.PreciseEditImageIdeogram45Request.g.cs b/src/libs/Ideogram/Generated/Ideogram.Models.PreciseEditImageIdeogram45Request.g.cs
index bc402aa..fbcad63 100644
--- a/src/libs/Ideogram/Generated/Ideogram.Models.PreciseEditImageIdeogram45Request.g.cs
+++ b/src/libs/Ideogram/Generated/Ideogram.Models.PreciseEditImageIdeogram45Request.g.cs
@@ -26,13 +26,13 @@ public sealed partial class PreciseEditImageIdeogram45Request
public global::Ideogram.AssetIdentifier? ImageAssetIdentifier { get; set; }
///
- /// The image to edit (max 25MB; JPEG, PNG, or WEBP). Multipart requests only. The output always matches this image's width and height, and pixels the edit did not meaningfully change are copied exactly from it. Images too large for the model are scaled down, keeping their proportions, and returned as rendered. Images with an aspect ratio outside 1:6 to 6:1 are rejected.
+ /// The image to edit, as raw bytes (max 50MB; JPEG, PNG, or WEBP). Multipart requests only; ignored if `image_asset_identifier` is also supplied. Required when supplying a `mask` or a `context_window`. The output always matches this image's width and height, and pixels the edit did not meaningfully change are copied exactly from it.
///
[global::System.Text.Json.Serialization.JsonPropertyName("image")]
public byte[]? Image { get; set; }
///
- /// The image to edit (max 25MB; JPEG, PNG, or WEBP). Multipart requests only. The output always matches this image's width and height, and pixels the edit did not meaningfully change are copied exactly from it. Images too large for the model are scaled down, keeping their proportions, and returned as rendered. Images with an aspect ratio outside 1:6 to 6:1 are rejected.
+ /// The image to edit, as raw bytes (max 50MB; JPEG, PNG, or WEBP). Multipart requests only; ignored if `image_asset_identifier` is also supplied. Required when supplying a `mask` or a `context_window`. The output always matches this image's width and height, and pixels the edit did not meaningfully change are copied exactly from it.
///
[global::System.Text.Json.Serialization.JsonPropertyName("imagename")]
public string? Imagename { get; set; }
@@ -44,23 +44,34 @@ public sealed partial class PreciseEditImageIdeogram45Request
public global::System.Collections.Generic.IList? ReferenceImageAssetIdentifiers { get; set; }
///
- /// Optional images to guide the edit (max 4, max 25MB each; JPEG, PNG, or WEBP). They are never edited themselves; only `image` is. Multipart requests only. A request with a `mask` can include at most three, because the mask takes up one reference slot.
+ /// Optional images to guide the edit (max 4, max 50MB each; JPEG, PNG, or WEBP). They are never edited themselves; only `image` is. Multipart requests only; ignored if `reference_image_asset_identifiers` is also supplied. A request with a `mask` can include at most three, because the mask takes up one reference slot.
///
[global::System.Text.Json.Serialization.JsonPropertyName("reference_images")]
public global::System.Collections.Generic.IList? ReferenceImages { get; set; }
///
- /// An optional mask that limits the edit to part of `image` (max 25MB; JPEG, PNG, or WEBP). Multipart requests only. Black marks the area to edit and white the area to keep; values in between are rounded to the nearer of the two. The mask must have the same width and height as `image` and contain both black and white areas. A masked request can include at most three `reference_images`.
+ /// An optional mask that limits the edit to part of `image` (max 50MB; JPEG, PNG, or WEBP). Multipart requests only. Black marks the area to edit and white the area to keep; values in between are rounded to the nearer of the two. The mask must have the same width and height as `image` and contain both black and white areas. Requires `image` as raw bytes; masks cannot be combined with asset references. A masked request can include at most three `reference_images`.
///
[global::System.Text.Json.Serialization.JsonPropertyName("mask")]
public byte[]? Mask { get; set; }
///
- /// An optional mask that limits the edit to part of `image` (max 25MB; JPEG, PNG, or WEBP). Multipart requests only. Black marks the area to edit and white the area to keep; values in between are rounded to the nearer of the two. The mask must have the same width and height as `image` and contain both black and white areas. A masked request can include at most three `reference_images`.
+ /// An optional mask that limits the edit to part of `image` (max 50MB; JPEG, PNG, or WEBP). Multipart requests only. Black marks the area to edit and white the area to keep; values in between are rounded to the nearer of the two. The mask must have the same width and height as `image` and contain both black and white areas. Requires `image` as raw bytes; masks cannot be combined with asset references. A masked request can include at most three `reference_images`.
///
[global::System.Text.Json.Serialization.JsonPropertyName("maskname")]
public string? Maskname { get; set; }
+ ///
+ /// How much of the image being edited the model may see and change.
+ /// `none`, the default, edits the whole image. A large image may come back smaller than it was sent.
+ /// `auto` fits a region around what the `mask` selects and edits only that region, so its detail is kept. It requires a `mask`. A small enough image has no region to fit and is edited as it is.
+ /// `x,y,width,height` names the region explicitly, in the edited image's own pixels with the origin at its top-left corner — for example `1024,512,2048,1536`. The region must lie inside the image, measure at least 256px on each side, have an aspect ratio between 1:6 and 6:1, and cover no more than 4194304 pixels. A `mask` may select only pixels inside it.
+ /// With `auto` or an explicit region, every pixel outside the region is returned exactly as supplied and the output keeps the image's own width and height.
+ /// Default Value: none
+ ///
+ [global::System.Text.Json.Serialization.JsonPropertyName("context_window")]
+ public string? ContextWindow { get; set; }
+
///
/// The rendering quality to use. `very_low` is the fastest and cheapest, and `high` takes longer and is priced higher.
/// Default Value: medium
@@ -142,22 +153,30 @@ public sealed partial class PreciseEditImageIdeogram45Request
/// The image to edit, as an existing upload or generated image asset. Supply this or `image`, never both. Takes priority over `image` if both are supplied. Cannot be combined with `mask`.
///
///
- /// The image to edit (max 25MB; JPEG, PNG, or WEBP). Multipart requests only. The output always matches this image's width and height, and pixels the edit did not meaningfully change are copied exactly from it. Images too large for the model are scaled down, keeping their proportions, and returned as rendered. Images with an aspect ratio outside 1:6 to 6:1 are rejected.
+ /// The image to edit, as raw bytes (max 50MB; JPEG, PNG, or WEBP). Multipart requests only; ignored if `image_asset_identifier` is also supplied. Required when supplying a `mask` or a `context_window`. The output always matches this image's width and height, and pixels the edit did not meaningfully change are copied exactly from it.
///
///
- /// The image to edit (max 25MB; JPEG, PNG, or WEBP). Multipart requests only. The output always matches this image's width and height, and pixels the edit did not meaningfully change are copied exactly from it. Images too large for the model are scaled down, keeping their proportions, and returned as rendered. Images with an aspect ratio outside 1:6 to 6:1 are rejected.
+ /// The image to edit, as raw bytes (max 50MB; JPEG, PNG, or WEBP). Multipart requests only; ignored if `image_asset_identifier` is also supplied. Required when supplying a `mask` or a `context_window`. The output always matches this image's width and height, and pixels the edit did not meaningfully change are copied exactly from it.
///
///
/// Optional additional images to guide the edit, by reference. These are never edited themselves; only `image_asset_identifier` or `image` is. Requires the image being edited to be supplied by reference too, and cannot be combined with `mask`.
///
///
- /// Optional images to guide the edit (max 4, max 25MB each; JPEG, PNG, or WEBP). They are never edited themselves; only `image` is. Multipart requests only. A request with a `mask` can include at most three, because the mask takes up one reference slot.
+ /// Optional images to guide the edit (max 4, max 50MB each; JPEG, PNG, or WEBP). They are never edited themselves; only `image` is. Multipart requests only; ignored if `reference_image_asset_identifiers` is also supplied. A request with a `mask` can include at most three, because the mask takes up one reference slot.
///
///
- /// An optional mask that limits the edit to part of `image` (max 25MB; JPEG, PNG, or WEBP). Multipart requests only. Black marks the area to edit and white the area to keep; values in between are rounded to the nearer of the two. The mask must have the same width and height as `image` and contain both black and white areas. A masked request can include at most three `reference_images`.
+ /// An optional mask that limits the edit to part of `image` (max 50MB; JPEG, PNG, or WEBP). Multipart requests only. Black marks the area to edit and white the area to keep; values in between are rounded to the nearer of the two. The mask must have the same width and height as `image` and contain both black and white areas. Requires `image` as raw bytes; masks cannot be combined with asset references. A masked request can include at most three `reference_images`.
///
///
- /// An optional mask that limits the edit to part of `image` (max 25MB; JPEG, PNG, or WEBP). Multipart requests only. Black marks the area to edit and white the area to keep; values in between are rounded to the nearer of the two. The mask must have the same width and height as `image` and contain both black and white areas. A masked request can include at most three `reference_images`.
+ /// An optional mask that limits the edit to part of `image` (max 50MB; JPEG, PNG, or WEBP). Multipart requests only. Black marks the area to edit and white the area to keep; values in between are rounded to the nearer of the two. The mask must have the same width and height as `image` and contain both black and white areas. Requires `image` as raw bytes; masks cannot be combined with asset references. A masked request can include at most three `reference_images`.
+ ///
+ ///
+ /// How much of the image being edited the model may see and change.
+ /// `none`, the default, edits the whole image. A large image may come back smaller than it was sent.
+ /// `auto` fits a region around what the `mask` selects and edits only that region, so its detail is kept. It requires a `mask`. A small enough image has no region to fit and is edited as it is.
+ /// `x,y,width,height` names the region explicitly, in the edited image's own pixels with the origin at its top-left corner — for example `1024,512,2048,1536`. The region must lie inside the image, measure at least 256px on each side, have an aspect ratio between 1:6 and 6:1, and cover no more than 4194304 pixels. A `mask` may select only pixels inside it.
+ /// With `auto` or an explicit region, every pixel outside the region is returned exactly as supplied and the output keeps the image's own width and height.
+ /// Default Value: none
///
///
/// The rendering quality to use. `very_low` is the fastest and cheapest, and `high` takes longer and is priced higher.
@@ -207,6 +226,7 @@ public PreciseEditImageIdeogram45Request(
global::System.Collections.Generic.IList? referenceImages,
byte[]? mask,
string? maskname,
+ string? contextWindow,
global::Ideogram.PreciseEditImageIdeogram45RequestQuality? quality,
int? seed,
int? numImages,
@@ -224,6 +244,7 @@ public PreciseEditImageIdeogram45Request(
this.ReferenceImages = referenceImages;
this.Mask = mask;
this.Maskname = maskname;
+ this.ContextWindow = contextWindow;
this.Quality = quality;
this.Seed = seed;
this.NumImages = numImages;
diff --git a/src/libs/Ideogram/Generated/Ideogram.Models.ReframeImageAutoRequest.Json.g.cs b/src/libs/Ideogram/Generated/Ideogram.Models.ReframeImageAutoRequest.Json.g.cs
new file mode 100644
index 0000000..d35ef63
--- /dev/null
+++ b/src/libs/Ideogram/Generated/Ideogram.Models.ReframeImageAutoRequest.Json.g.cs
@@ -0,0 +1,141 @@
+#nullable enable
+
+namespace Ideogram
+{
+ public sealed partial class ReframeImageAutoRequest
+ {
+ ///
+ /// Serializes the current instance to a JSON string using the provided JsonSerializerContext.
+ ///
+ public string ToJson(
+ global::System.Text.Json.Serialization.JsonSerializerContext jsonSerializerContext)
+ {
+ return global::System.Text.Json.JsonSerializer.Serialize(
+ this,
+ this.GetType(),
+ jsonSerializerContext);
+ }
+
+ ///
+ /// Serializes the current instance to a JSON string using the generated default JsonSerializerContext.
+ ///
+ public string ToJson()
+ {
+ return ToJson(global::Ideogram.SourceGenerationContext.Default);
+ }
+
+ ///
+ /// Serializes the current instance to a JSON string using the provided JsonSerializerOptions.
+ ///
+#if NET8_0_OR_GREATER
+ [global::System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("JSON serialization and deserialization might require types that cannot be statically analyzed. Use the overload that takes a JsonTypeInfo or JsonSerializerContext, or make sure all of the required types are preserved.")]
+ [global::System.Diagnostics.CodeAnalysis.RequiresDynamicCode("JSON serialization and deserialization might require types that cannot be statically analyzed and might need runtime code generation. Use System.Text.Json source generation for native AOT applications.")]
+#endif
+ public string ToJson(
+ global::System.Text.Json.JsonSerializerOptions? jsonSerializerOptions = null)
+ {
+ if (jsonSerializerOptions is null)
+ {
+ return ToJson(global::Ideogram.SourceGenerationContext.Default);
+ }
+
+ return global::System.Text.Json.JsonSerializer.Serialize(
+ this,
+ jsonSerializerOptions);
+ }
+
+ ///
+ /// Deserializes a JSON string using the provided JsonSerializerContext.
+ ///
+ public static global::Ideogram.ReframeImageAutoRequest? FromJson(
+ string json,
+ global::System.Text.Json.Serialization.JsonSerializerContext jsonSerializerContext)
+ {
+ return global::System.Text.Json.JsonSerializer.Deserialize(
+ json,
+ typeof(global::Ideogram.ReframeImageAutoRequest),
+ jsonSerializerContext) as global::Ideogram.ReframeImageAutoRequest;
+ }
+
+ ///
+ /// Deserializes a JSON string using the generated default JsonSerializerContext.
+ ///
+ public static global::Ideogram.ReframeImageAutoRequest? FromJson(
+ string json)
+ {
+ return FromJson(
+ json,
+ global::Ideogram.SourceGenerationContext.Default);
+ }
+
+ ///
+ /// Deserializes a JSON string using the provided JsonSerializerOptions.
+ ///
+#if NET8_0_OR_GREATER
+ [global::System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("JSON serialization and deserialization might require types that cannot be statically analyzed. Use the overload that takes a JsonTypeInfo or JsonSerializerContext, or make sure all of the required types are preserved.")]
+ [global::System.Diagnostics.CodeAnalysis.RequiresDynamicCode("JSON serialization and deserialization might require types that cannot be statically analyzed and might need runtime code generation. Use System.Text.Json source generation for native AOT applications.")]
+#endif
+ public static global::Ideogram.ReframeImageAutoRequest? FromJson(
+ string json,
+ global::System.Text.Json.JsonSerializerOptions? jsonSerializerOptions = null)
+ {
+ if (jsonSerializerOptions is null)
+ {
+ return FromJson(
+ json,
+ global::Ideogram.SourceGenerationContext.Default);
+ }
+
+ return global::System.Text.Json.JsonSerializer.Deserialize(
+ json,
+ jsonSerializerOptions);
+ }
+
+ ///
+ /// Deserializes a JSON stream using the provided JsonSerializerContext.
+ ///
+ public static async global::System.Threading.Tasks.ValueTask FromJsonStreamAsync(
+ global::System.IO.Stream jsonStream,
+ global::System.Text.Json.Serialization.JsonSerializerContext jsonSerializerContext)
+ {
+ return (await global::System.Text.Json.JsonSerializer.DeserializeAsync(
+ jsonStream,
+ typeof(global::Ideogram.ReframeImageAutoRequest),
+ jsonSerializerContext).ConfigureAwait(false)) as global::Ideogram.ReframeImageAutoRequest;
+ }
+
+ ///
+ /// Deserializes a JSON stream using the generated default JsonSerializerContext.
+ ///
+ public static global::System.Threading.Tasks.ValueTask FromJsonStreamAsync(
+ global::System.IO.Stream jsonStream)
+ {
+ return FromJsonStreamAsync(
+ jsonStream,
+ global::Ideogram.SourceGenerationContext.Default);
+ }
+
+ ///
+ /// Deserializes a JSON stream using the provided JsonSerializerOptions.
+ ///
+#if NET8_0_OR_GREATER
+ [global::System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("JSON serialization and deserialization might require types that cannot be statically analyzed. Use the overload that takes a JsonTypeInfo or JsonSerializerContext, or make sure all of the required types are preserved.")]
+ [global::System.Diagnostics.CodeAnalysis.RequiresDynamicCode("JSON serialization and deserialization might require types that cannot be statically analyzed and might need runtime code generation. Use System.Text.Json source generation for native AOT applications.")]
+#endif
+ public static global::System.Threading.Tasks.ValueTask FromJsonStreamAsync(
+ global::System.IO.Stream jsonStream,
+ global::System.Text.Json.JsonSerializerOptions? jsonSerializerOptions = null)
+ {
+ if (jsonSerializerOptions is null)
+ {
+ return FromJsonStreamAsync(
+ jsonStream,
+ global::Ideogram.SourceGenerationContext.Default);
+ }
+
+ return global::System.Text.Json.JsonSerializer.DeserializeAsync(
+ jsonStream,
+ jsonSerializerOptions);
+ }
+ }
+}
diff --git a/src/libs/Ideogram/Generated/Ideogram.Models.ReframeImageAutoRequest.g.cs b/src/libs/Ideogram/Generated/Ideogram.Models.ReframeImageAutoRequest.g.cs
new file mode 100644
index 0000000..7802f0e
--- /dev/null
+++ b/src/libs/Ideogram/Generated/Ideogram.Models.ReframeImageAutoRequest.g.cs
@@ -0,0 +1,132 @@
+
+#nullable enable
+
+namespace Ideogram
+{
+ ///
+ /// Supply exactly one source: `image_asset_identifier` for an existing
+ /// Ideogram asset, or `image` for a raw upload. Supplying both or neither
+ /// is rejected with a 400.
+ ///
+ public sealed partial class ReframeImageAutoRequest
+ {
+ ///
+ /// An identifier for an ideogram asset.
+ /// Example: {"asset_type":"RESPONSE","asset_id":"7uS_VESkRI6O3-sVgHQp_A"}
+ ///
+ /// {"asset_type":"RESPONSE","asset_id":"7uS_VESkRI6O3-sVgHQp_A"}
+ [global::System.Text.Json.Serialization.JsonPropertyName("image_asset_identifier")]
+ public global::Ideogram.AssetIdentifier? ImageAssetIdentifier { get; set; }
+
+ ///
+ /// The JPEG, PNG, or WEBP image to reframe (max 50MB).
+ ///
+ [global::System.Text.Json.Serialization.JsonPropertyName("image")]
+ public byte[]? Image { get; set; }
+
+ ///
+ /// The JPEG, PNG, or WEBP image to reframe (max 50MB).
+ ///
+ [global::System.Text.Json.Serialization.JsonPropertyName("imagename")]
+ public string? Imagename { get; set; }
+
+ ///
+ /// The requested output aspect ratio, as `width:height`.
+ /// Example: 969
+ ///
+ /// 969
+ [global::System.Text.Json.Serialization.JsonPropertyName("aspect_ratio")]
+ [global::System.Text.Json.Serialization.JsonRequired]
+ public required string AspectRatio { get; set; }
+
+ ///
+ /// API-key requests are always private. For bearer-authenticated
+ /// requests, this controls whether the result is private; when
+ /// omitted, it follows the caller's plan entitlement. Enterprise
+ /// generations are always private.
+ ///
+ [global::System.Text.Json.Serialization.JsonPropertyName("private")]
+ public bool? Private { get; set; }
+
+ ///
+ /// The number of output images to generate.
+ /// Default Value: 1
+ ///
+ [global::System.Text.Json.Serialization.JsonPropertyName("num_images")]
+ public int? NumImages { get; set; }
+
+ ///
+ /// Random seed. Set for reproducible generation.
+ /// Example: 12345
+ ///
+ /// 12345
+ [global::System.Text.Json.Serialization.JsonPropertyName("seed")]
+ public int? Seed { get; set; }
+
+ ///
+ /// Additional properties that are not explicitly defined in the schema
+ ///
+ [global::System.Text.Json.Serialization.JsonExtensionData]
+ public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary();
+
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ ///
+ /// The requested output aspect ratio, as `width:height`.
+ /// Example: 969
+ ///
+ ///
+ /// An identifier for an ideogram asset.
+ /// Example: {"asset_type":"RESPONSE","asset_id":"7uS_VESkRI6O3-sVgHQp_A"}
+ ///
+ ///
+ /// The JPEG, PNG, or WEBP image to reframe (max 50MB).
+ ///
+ ///
+ /// The JPEG, PNG, or WEBP image to reframe (max 50MB).
+ ///
+ ///
+ /// API-key requests are always private. For bearer-authenticated
+ /// requests, this controls whether the result is private; when
+ /// omitted, it follows the caller's plan entitlement. Enterprise
+ /// generations are always private.
+ ///
+ ///
+ /// The number of output images to generate.
+ /// Default Value: 1
+ ///
+ ///
+ /// Random seed. Set for reproducible generation.
+ /// Example: 12345
+ ///
+#if NET7_0_OR_GREATER
+ [global::System.Diagnostics.CodeAnalysis.SetsRequiredMembers]
+#endif
+ public ReframeImageAutoRequest(
+ string aspectRatio,
+ global::Ideogram.AssetIdentifier? imageAssetIdentifier,
+ byte[]? image,
+ string? imagename,
+ bool? @private,
+ int? numImages,
+ int? seed)
+ {
+ this.ImageAssetIdentifier = imageAssetIdentifier;
+ this.Image = image;
+ this.Imagename = imagename;
+ this.AspectRatio = aspectRatio ?? throw new global::System.ArgumentNullException(nameof(aspectRatio));
+ this.Private = @private;
+ this.NumImages = numImages;
+ this.Seed = seed;
+ }
+
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ public ReframeImageAutoRequest()
+ {
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/src/libs/Ideogram/Generated/Ideogram.Models.ReframeImageAutoResponse.Json.g.cs b/src/libs/Ideogram/Generated/Ideogram.Models.ReframeImageAutoResponse.Json.g.cs
new file mode 100644
index 0000000..24923ad
--- /dev/null
+++ b/src/libs/Ideogram/Generated/Ideogram.Models.ReframeImageAutoResponse.Json.g.cs
@@ -0,0 +1,141 @@
+#nullable enable
+
+namespace Ideogram
+{
+ public sealed partial class ReframeImageAutoResponse
+ {
+ ///
+ /// Serializes the current instance to a JSON string using the provided JsonSerializerContext.
+ ///
+ public string ToJson(
+ global::System.Text.Json.Serialization.JsonSerializerContext jsonSerializerContext)
+ {
+ return global::System.Text.Json.JsonSerializer.Serialize(
+ this,
+ this.GetType(),
+ jsonSerializerContext);
+ }
+
+ ///
+ /// Serializes the current instance to a JSON string using the generated default JsonSerializerContext.
+ ///
+ public string ToJson()
+ {
+ return ToJson(global::Ideogram.SourceGenerationContext.Default);
+ }
+
+ ///
+ /// Serializes the current instance to a JSON string using the provided JsonSerializerOptions.
+ ///
+#if NET8_0_OR_GREATER
+ [global::System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("JSON serialization and deserialization might require types that cannot be statically analyzed. Use the overload that takes a JsonTypeInfo or JsonSerializerContext, or make sure all of the required types are preserved.")]
+ [global::System.Diagnostics.CodeAnalysis.RequiresDynamicCode("JSON serialization and deserialization might require types that cannot be statically analyzed and might need runtime code generation. Use System.Text.Json source generation for native AOT applications.")]
+#endif
+ public string ToJson(
+ global::System.Text.Json.JsonSerializerOptions? jsonSerializerOptions = null)
+ {
+ if (jsonSerializerOptions is null)
+ {
+ return ToJson(global::Ideogram.SourceGenerationContext.Default);
+ }
+
+ return global::System.Text.Json.JsonSerializer.Serialize(
+ this,
+ jsonSerializerOptions);
+ }
+
+ ///
+ /// Deserializes a JSON string using the provided JsonSerializerContext.
+ ///
+ public static global::Ideogram.ReframeImageAutoResponse? FromJson(
+ string json,
+ global::System.Text.Json.Serialization.JsonSerializerContext jsonSerializerContext)
+ {
+ return global::System.Text.Json.JsonSerializer.Deserialize(
+ json,
+ typeof(global::Ideogram.ReframeImageAutoResponse),
+ jsonSerializerContext) as global::Ideogram.ReframeImageAutoResponse;
+ }
+
+ ///
+ /// Deserializes a JSON string using the generated default JsonSerializerContext.
+ ///
+ public static global::Ideogram.ReframeImageAutoResponse? FromJson(
+ string json)
+ {
+ return FromJson(
+ json,
+ global::Ideogram.SourceGenerationContext.Default);
+ }
+
+ ///
+ /// Deserializes a JSON string using the provided JsonSerializerOptions.
+ ///
+#if NET8_0_OR_GREATER
+ [global::System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("JSON serialization and deserialization might require types that cannot be statically analyzed. Use the overload that takes a JsonTypeInfo or JsonSerializerContext, or make sure all of the required types are preserved.")]
+ [global::System.Diagnostics.CodeAnalysis.RequiresDynamicCode("JSON serialization and deserialization might require types that cannot be statically analyzed and might need runtime code generation. Use System.Text.Json source generation for native AOT applications.")]
+#endif
+ public static global::Ideogram.ReframeImageAutoResponse? FromJson(
+ string json,
+ global::System.Text.Json.JsonSerializerOptions? jsonSerializerOptions = null)
+ {
+ if (jsonSerializerOptions is null)
+ {
+ return FromJson(
+ json,
+ global::Ideogram.SourceGenerationContext.Default);
+ }
+
+ return global::System.Text.Json.JsonSerializer.Deserialize(
+ json,
+ jsonSerializerOptions);
+ }
+
+ ///
+ /// Deserializes a JSON stream using the provided JsonSerializerContext.
+ ///
+ public static async global::System.Threading.Tasks.ValueTask FromJsonStreamAsync(
+ global::System.IO.Stream jsonStream,
+ global::System.Text.Json.Serialization.JsonSerializerContext jsonSerializerContext)
+ {
+ return (await global::System.Text.Json.JsonSerializer.DeserializeAsync(
+ jsonStream,
+ typeof(global::Ideogram.ReframeImageAutoResponse),
+ jsonSerializerContext).ConfigureAwait(false)) as global::Ideogram.ReframeImageAutoResponse;
+ }
+
+ ///
+ /// Deserializes a JSON stream using the generated default JsonSerializerContext.
+ ///
+ public static global::System.Threading.Tasks.ValueTask FromJsonStreamAsync(
+ global::System.IO.Stream jsonStream)
+ {
+ return FromJsonStreamAsync(
+ jsonStream,
+ global::Ideogram.SourceGenerationContext.Default);
+ }
+
+ ///
+ /// Deserializes a JSON stream using the provided JsonSerializerOptions.
+ ///
+#if NET8_0_OR_GREATER
+ [global::System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("JSON serialization and deserialization might require types that cannot be statically analyzed. Use the overload that takes a JsonTypeInfo or JsonSerializerContext, or make sure all of the required types are preserved.")]
+ [global::System.Diagnostics.CodeAnalysis.RequiresDynamicCode("JSON serialization and deserialization might require types that cannot be statically analyzed and might need runtime code generation. Use System.Text.Json source generation for native AOT applications.")]
+#endif
+ public static global::System.Threading.Tasks.ValueTask FromJsonStreamAsync(
+ global::System.IO.Stream jsonStream,
+ global::System.Text.Json.JsonSerializerOptions? jsonSerializerOptions = null)
+ {
+ if (jsonSerializerOptions is null)
+ {
+ return FromJsonStreamAsync(
+ jsonStream,
+ global::Ideogram.SourceGenerationContext.Default);
+ }
+
+ return global::System.Text.Json.JsonSerializer.DeserializeAsync(
+ jsonStream,
+ jsonSerializerOptions);
+ }
+ }
+}
diff --git a/src/libs/Ideogram/Generated/Ideogram.Models.ReframeImageAutoResponse.g.cs b/src/libs/Ideogram/Generated/Ideogram.Models.ReframeImageAutoResponse.g.cs
new file mode 100644
index 0000000..ba7c4ca
--- /dev/null
+++ b/src/libs/Ideogram/Generated/Ideogram.Models.ReframeImageAutoResponse.g.cs
@@ -0,0 +1,91 @@
+
+#nullable enable
+
+namespace Ideogram
+{
+ ///
+ /// Acknowledges an accepted asynchronous Reframe request. Poll
+ /// `GET /v2/generations/{generation_id}` for completion and output
+ /// images. The seed, width, and height report the values the request resolved to when the caller left them unset.
+ /// Example: {"seed":12345,"generation_id":"generation_id","width":0,"height":6}
+ ///
+ public sealed partial class ReframeImageAutoResponse
+ {
+ ///
+ /// URL-safe base64 ID of the accepted generation. Accepted by the
+ /// `GET /v2/generations/{generation_id}` polling endpoint.
+ ///
+ [global::System.Text.Json.Serialization.JsonPropertyName("generation_id")]
+ [global::System.Text.Json.Serialization.JsonRequired]
+ public required string GenerationId { get; set; }
+
+ ///
+ /// Random seed. Set for reproducible generation.
+ /// Example: 12345
+ ///
+ /// 12345
+ [global::System.Text.Json.Serialization.JsonPropertyName("seed")]
+ [global::System.Text.Json.Serialization.JsonRequired]
+ public required int Seed { get; set; }
+
+ ///
+ /// The resolved output width in pixels.
+ ///
+ [global::System.Text.Json.Serialization.JsonPropertyName("width")]
+ [global::System.Text.Json.Serialization.JsonRequired]
+ public required int Width { get; set; }
+
+ ///
+ /// The resolved output height in pixels.
+ ///
+ [global::System.Text.Json.Serialization.JsonPropertyName("height")]
+ [global::System.Text.Json.Serialization.JsonRequired]
+ public required int Height { get; set; }
+
+ ///
+ /// Additional properties that are not explicitly defined in the schema
+ ///
+ [global::System.Text.Json.Serialization.JsonExtensionData]
+ public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary();
+
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ ///
+ /// URL-safe base64 ID of the accepted generation. Accepted by the
+ /// `GET /v2/generations/{generation_id}` polling endpoint.
+ ///
+ ///
+ /// Random seed. Set for reproducible generation.
+ /// Example: 12345
+ ///
+ ///
+ /// The resolved output width in pixels.
+ ///
+ ///
+ /// The resolved output height in pixels.
+ ///
+#if NET7_0_OR_GREATER
+ [global::System.Diagnostics.CodeAnalysis.SetsRequiredMembers]
+#endif
+ public ReframeImageAutoResponse(
+ string generationId,
+ int seed,
+ int width,
+ int height)
+ {
+ this.GenerationId = generationId ?? throw new global::System.ArgumentNullException(nameof(generationId));
+ this.Seed = seed;
+ this.Width = width;
+ this.Height = height;
+ }
+
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ public ReframeImageAutoResponse()
+ {
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/src/libs/Ideogram/Generated/Ideogram.Models.ReframeImageBriaExpandRequest.Json.g.cs b/src/libs/Ideogram/Generated/Ideogram.Models.ReframeImageBriaExpandRequest.Json.g.cs
new file mode 100644
index 0000000..08a404d
--- /dev/null
+++ b/src/libs/Ideogram/Generated/Ideogram.Models.ReframeImageBriaExpandRequest.Json.g.cs
@@ -0,0 +1,141 @@
+#nullable enable
+
+namespace Ideogram
+{
+ public sealed partial class ReframeImageBriaExpandRequest
+ {
+ ///
+ /// Serializes the current instance to a JSON string using the provided JsonSerializerContext.
+ ///
+ public string ToJson(
+ global::System.Text.Json.Serialization.JsonSerializerContext jsonSerializerContext)
+ {
+ return global::System.Text.Json.JsonSerializer.Serialize(
+ this,
+ this.GetType(),
+ jsonSerializerContext);
+ }
+
+ ///
+ /// Serializes the current instance to a JSON string using the generated default JsonSerializerContext.
+ ///
+ public string ToJson()
+ {
+ return ToJson(global::Ideogram.SourceGenerationContext.Default);
+ }
+
+ ///
+ /// Serializes the current instance to a JSON string using the provided JsonSerializerOptions.
+ ///
+#if NET8_0_OR_GREATER
+ [global::System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("JSON serialization and deserialization might require types that cannot be statically analyzed. Use the overload that takes a JsonTypeInfo or JsonSerializerContext, or make sure all of the required types are preserved.")]
+ [global::System.Diagnostics.CodeAnalysis.RequiresDynamicCode("JSON serialization and deserialization might require types that cannot be statically analyzed and might need runtime code generation. Use System.Text.Json source generation for native AOT applications.")]
+#endif
+ public string ToJson(
+ global::System.Text.Json.JsonSerializerOptions? jsonSerializerOptions = null)
+ {
+ if (jsonSerializerOptions is null)
+ {
+ return ToJson(global::Ideogram.SourceGenerationContext.Default);
+ }
+
+ return global::System.Text.Json.JsonSerializer.Serialize(
+ this,
+ jsonSerializerOptions);
+ }
+
+ ///
+ /// Deserializes a JSON string using the provided JsonSerializerContext.
+ ///
+ public static global::Ideogram.ReframeImageBriaExpandRequest? FromJson(
+ string json,
+ global::System.Text.Json.Serialization.JsonSerializerContext jsonSerializerContext)
+ {
+ return global::System.Text.Json.JsonSerializer.Deserialize(
+ json,
+ typeof(global::Ideogram.ReframeImageBriaExpandRequest),
+ jsonSerializerContext) as global::Ideogram.ReframeImageBriaExpandRequest;
+ }
+
+ ///
+ /// Deserializes a JSON string using the generated default JsonSerializerContext.
+ ///
+ public static global::Ideogram.ReframeImageBriaExpandRequest? FromJson(
+ string json)
+ {
+ return FromJson(
+ json,
+ global::Ideogram.SourceGenerationContext.Default);
+ }
+
+ ///
+ /// Deserializes a JSON string using the provided JsonSerializerOptions.
+ ///
+#if NET8_0_OR_GREATER
+ [global::System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("JSON serialization and deserialization might require types that cannot be statically analyzed. Use the overload that takes a JsonTypeInfo or JsonSerializerContext, or make sure all of the required types are preserved.")]
+ [global::System.Diagnostics.CodeAnalysis.RequiresDynamicCode("JSON serialization and deserialization might require types that cannot be statically analyzed and might need runtime code generation. Use System.Text.Json source generation for native AOT applications.")]
+#endif
+ public static global::Ideogram.ReframeImageBriaExpandRequest? FromJson(
+ string json,
+ global::System.Text.Json.JsonSerializerOptions? jsonSerializerOptions = null)
+ {
+ if (jsonSerializerOptions is null)
+ {
+ return FromJson(
+ json,
+ global::Ideogram.SourceGenerationContext.Default);
+ }
+
+ return global::System.Text.Json.JsonSerializer.Deserialize(
+ json,
+ jsonSerializerOptions);
+ }
+
+ ///
+ /// Deserializes a JSON stream using the provided JsonSerializerContext.
+ ///
+ public static async global::System.Threading.Tasks.ValueTask FromJsonStreamAsync(
+ global::System.IO.Stream jsonStream,
+ global::System.Text.Json.Serialization.JsonSerializerContext jsonSerializerContext)
+ {
+ return (await global::System.Text.Json.JsonSerializer.DeserializeAsync(
+ jsonStream,
+ typeof(global::Ideogram.ReframeImageBriaExpandRequest),
+ jsonSerializerContext).ConfigureAwait(false)) as global::Ideogram.ReframeImageBriaExpandRequest;
+ }
+
+ ///
+ /// Deserializes a JSON stream using the generated default JsonSerializerContext.
+ ///
+ public static global::System.Threading.Tasks.ValueTask FromJsonStreamAsync(
+ global::System.IO.Stream jsonStream)
+ {
+ return FromJsonStreamAsync(
+ jsonStream,
+ global::Ideogram.SourceGenerationContext.Default);
+ }
+
+ ///
+ /// Deserializes a JSON stream using the provided JsonSerializerOptions.
+ ///
+#if NET8_0_OR_GREATER
+ [global::System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("JSON serialization and deserialization might require types that cannot be statically analyzed. Use the overload that takes a JsonTypeInfo or JsonSerializerContext, or make sure all of the required types are preserved.")]
+ [global::System.Diagnostics.CodeAnalysis.RequiresDynamicCode("JSON serialization and deserialization might require types that cannot be statically analyzed and might need runtime code generation. Use System.Text.Json source generation for native AOT applications.")]
+#endif
+ public static global::System.Threading.Tasks.ValueTask FromJsonStreamAsync(
+ global::System.IO.Stream jsonStream,
+ global::System.Text.Json.JsonSerializerOptions? jsonSerializerOptions = null)
+ {
+ if (jsonSerializerOptions is null)
+ {
+ return FromJsonStreamAsync(
+ jsonStream,
+ global::Ideogram.SourceGenerationContext.Default);
+ }
+
+ return global::System.Text.Json.JsonSerializer.DeserializeAsync(
+ jsonStream,
+ jsonSerializerOptions);
+ }
+ }
+}
diff --git a/src/libs/Ideogram/Generated/Ideogram.Models.ReframeImageBriaExpandRequest.g.cs b/src/libs/Ideogram/Generated/Ideogram.Models.ReframeImageBriaExpandRequest.g.cs
new file mode 100644
index 0000000..bb75020
--- /dev/null
+++ b/src/libs/Ideogram/Generated/Ideogram.Models.ReframeImageBriaExpandRequest.g.cs
@@ -0,0 +1,119 @@
+
+#nullable enable
+
+namespace Ideogram
+{
+ ///
+ /// Supply exactly one source: `image_asset_identifier` for an existing
+ /// Ideogram asset, or `image` for a raw upload. Supplying both or neither
+ /// is rejected with a 400.
+ ///
+ public sealed partial class ReframeImageBriaExpandRequest
+ {
+ ///
+ /// An identifier for an ideogram asset.
+ /// Example: {"asset_type":"RESPONSE","asset_id":"7uS_VESkRI6O3-sVgHQp_A"}
+ ///
+ /// {"asset_type":"RESPONSE","asset_id":"7uS_VESkRI6O3-sVgHQp_A"}
+ [global::System.Text.Json.Serialization.JsonPropertyName("image_asset_identifier")]
+ public global::Ideogram.AssetIdentifier? ImageAssetIdentifier { get; set; }
+
+ ///
+ /// The JPEG, PNG, or WEBP image to reframe (max 50MB).
+ ///
+ [global::System.Text.Json.Serialization.JsonPropertyName("image")]
+ public byte[]? Image { get; set; }
+
+ ///
+ /// The JPEG, PNG, or WEBP image to reframe (max 50MB).
+ ///
+ [global::System.Text.Json.Serialization.JsonPropertyName("imagename")]
+ public string? Imagename { get; set; }
+
+ ///
+ /// The requested output aspect ratio, as `width:height`.
+ /// Example: 969
+ ///
+ /// 969
+ [global::System.Text.Json.Serialization.JsonPropertyName("aspect_ratio")]
+ [global::System.Text.Json.Serialization.JsonRequired]
+ public required string AspectRatio { get; set; }
+
+ ///
+ /// API-key requests are always private. For bearer-authenticated
+ /// requests, this controls whether the result is private; when
+ /// omitted, it follows the caller's plan entitlement. Enterprise
+ /// generations are always private.
+ ///
+ [global::System.Text.Json.Serialization.JsonPropertyName("private")]
+ public bool? Private { get; set; }
+
+ ///
+ /// Random seed. Set for reproducible generation.
+ /// Example: 12345
+ ///
+ /// 12345
+ [global::System.Text.Json.Serialization.JsonPropertyName("seed")]
+ public int? Seed { get; set; }
+
+ ///
+ /// Additional properties that are not explicitly defined in the schema
+ ///
+ [global::System.Text.Json.Serialization.JsonExtensionData]
+ public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary();
+
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ ///
+ /// The requested output aspect ratio, as `width:height`.
+ /// Example: 969
+ ///
+ ///
+ /// An identifier for an ideogram asset.
+ /// Example: {"asset_type":"RESPONSE","asset_id":"7uS_VESkRI6O3-sVgHQp_A"}
+ ///
+ ///
+ /// The JPEG, PNG, or WEBP image to reframe (max 50MB).
+ ///
+ ///
+ /// The JPEG, PNG, or WEBP image to reframe (max 50MB).
+ ///
+ ///
+ /// API-key requests are always private. For bearer-authenticated
+ /// requests, this controls whether the result is private; when
+ /// omitted, it follows the caller's plan entitlement. Enterprise
+ /// generations are always private.
+ ///
+ ///
+ /// Random seed. Set for reproducible generation.
+ /// Example: 12345
+ ///
+#if NET7_0_OR_GREATER
+ [global::System.Diagnostics.CodeAnalysis.SetsRequiredMembers]
+#endif
+ public ReframeImageBriaExpandRequest(
+ string aspectRatio,
+ global::Ideogram.AssetIdentifier? imageAssetIdentifier,
+ byte[]? image,
+ string? imagename,
+ bool? @private,
+ int? seed)
+ {
+ this.ImageAssetIdentifier = imageAssetIdentifier;
+ this.Image = image;
+ this.Imagename = imagename;
+ this.AspectRatio = aspectRatio ?? throw new global::System.ArgumentNullException(nameof(aspectRatio));
+ this.Private = @private;
+ this.Seed = seed;
+ }
+
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ public ReframeImageBriaExpandRequest()
+ {
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/src/libs/Ideogram/Generated/Ideogram.Models.ReframeImageBriaExpandResponse.Json.g.cs b/src/libs/Ideogram/Generated/Ideogram.Models.ReframeImageBriaExpandResponse.Json.g.cs
new file mode 100644
index 0000000..fdbbaba
--- /dev/null
+++ b/src/libs/Ideogram/Generated/Ideogram.Models.ReframeImageBriaExpandResponse.Json.g.cs
@@ -0,0 +1,141 @@
+#nullable enable
+
+namespace Ideogram
+{
+ public sealed partial class ReframeImageBriaExpandResponse
+ {
+ ///
+ /// Serializes the current instance to a JSON string using the provided JsonSerializerContext.
+ ///
+ public string ToJson(
+ global::System.Text.Json.Serialization.JsonSerializerContext jsonSerializerContext)
+ {
+ return global::System.Text.Json.JsonSerializer.Serialize(
+ this,
+ this.GetType(),
+ jsonSerializerContext);
+ }
+
+ ///
+ /// Serializes the current instance to a JSON string using the generated default JsonSerializerContext.
+ ///
+ public string ToJson()
+ {
+ return ToJson(global::Ideogram.SourceGenerationContext.Default);
+ }
+
+ ///
+ /// Serializes the current instance to a JSON string using the provided JsonSerializerOptions.
+ ///
+#if NET8_0_OR_GREATER
+ [global::System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("JSON serialization and deserialization might require types that cannot be statically analyzed. Use the overload that takes a JsonTypeInfo or JsonSerializerContext, or make sure all of the required types are preserved.")]
+ [global::System.Diagnostics.CodeAnalysis.RequiresDynamicCode("JSON serialization and deserialization might require types that cannot be statically analyzed and might need runtime code generation. Use System.Text.Json source generation for native AOT applications.")]
+#endif
+ public string ToJson(
+ global::System.Text.Json.JsonSerializerOptions? jsonSerializerOptions = null)
+ {
+ if (jsonSerializerOptions is null)
+ {
+ return ToJson(global::Ideogram.SourceGenerationContext.Default);
+ }
+
+ return global::System.Text.Json.JsonSerializer.Serialize(
+ this,
+ jsonSerializerOptions);
+ }
+
+ ///
+ /// Deserializes a JSON string using the provided JsonSerializerContext.
+ ///
+ public static global::Ideogram.ReframeImageBriaExpandResponse? FromJson(
+ string json,
+ global::System.Text.Json.Serialization.JsonSerializerContext jsonSerializerContext)
+ {
+ return global::System.Text.Json.JsonSerializer.Deserialize(
+ json,
+ typeof(global::Ideogram.ReframeImageBriaExpandResponse),
+ jsonSerializerContext) as global::Ideogram.ReframeImageBriaExpandResponse;
+ }
+
+ ///
+ /// Deserializes a JSON string using the generated default JsonSerializerContext.
+ ///
+ public static global::Ideogram.ReframeImageBriaExpandResponse? FromJson(
+ string json)
+ {
+ return FromJson(
+ json,
+ global::Ideogram.SourceGenerationContext.Default);
+ }
+
+ ///
+ /// Deserializes a JSON string using the provided JsonSerializerOptions.
+ ///
+#if NET8_0_OR_GREATER
+ [global::System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("JSON serialization and deserialization might require types that cannot be statically analyzed. Use the overload that takes a JsonTypeInfo or JsonSerializerContext, or make sure all of the required types are preserved.")]
+ [global::System.Diagnostics.CodeAnalysis.RequiresDynamicCode("JSON serialization and deserialization might require types that cannot be statically analyzed and might need runtime code generation. Use System.Text.Json source generation for native AOT applications.")]
+#endif
+ public static global::Ideogram.ReframeImageBriaExpandResponse? FromJson(
+ string json,
+ global::System.Text.Json.JsonSerializerOptions? jsonSerializerOptions = null)
+ {
+ if (jsonSerializerOptions is null)
+ {
+ return FromJson(
+ json,
+ global::Ideogram.SourceGenerationContext.Default);
+ }
+
+ return global::System.Text.Json.JsonSerializer.Deserialize(
+ json,
+ jsonSerializerOptions);
+ }
+
+ ///
+ /// Deserializes a JSON stream using the provided JsonSerializerContext.
+ ///
+ public static async global::System.Threading.Tasks.ValueTask FromJsonStreamAsync(
+ global::System.IO.Stream jsonStream,
+ global::System.Text.Json.Serialization.JsonSerializerContext jsonSerializerContext)
+ {
+ return (await global::System.Text.Json.JsonSerializer.DeserializeAsync(
+ jsonStream,
+ typeof(global::Ideogram.ReframeImageBriaExpandResponse),
+ jsonSerializerContext).ConfigureAwait(false)) as global::Ideogram.ReframeImageBriaExpandResponse;
+ }
+
+ ///
+ /// Deserializes a JSON stream using the generated default JsonSerializerContext.
+ ///
+ public static global::System.Threading.Tasks.ValueTask FromJsonStreamAsync(
+ global::System.IO.Stream jsonStream)
+ {
+ return FromJsonStreamAsync(
+ jsonStream,
+ global::Ideogram.SourceGenerationContext.Default);
+ }
+
+ ///
+ /// Deserializes a JSON stream using the provided JsonSerializerOptions.
+ ///
+#if NET8_0_OR_GREATER
+ [global::System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("JSON serialization and deserialization might require types that cannot be statically analyzed. Use the overload that takes a JsonTypeInfo or JsonSerializerContext, or make sure all of the required types are preserved.")]
+ [global::System.Diagnostics.CodeAnalysis.RequiresDynamicCode("JSON serialization and deserialization might require types that cannot be statically analyzed and might need runtime code generation. Use System.Text.Json source generation for native AOT applications.")]
+#endif
+ public static global::System.Threading.Tasks.ValueTask FromJsonStreamAsync(
+ global::System.IO.Stream jsonStream,
+ global::System.Text.Json.JsonSerializerOptions? jsonSerializerOptions = null)
+ {
+ if (jsonSerializerOptions is null)
+ {
+ return FromJsonStreamAsync(
+ jsonStream,
+ global::Ideogram.SourceGenerationContext.Default);
+ }
+
+ return global::System.Text.Json.JsonSerializer.DeserializeAsync(
+ jsonStream,
+ jsonSerializerOptions);
+ }
+ }
+}
diff --git a/src/libs/Ideogram/Generated/Ideogram.Models.ReframeImageBriaExpandResponse.g.cs b/src/libs/Ideogram/Generated/Ideogram.Models.ReframeImageBriaExpandResponse.g.cs
new file mode 100644
index 0000000..371ad8a
--- /dev/null
+++ b/src/libs/Ideogram/Generated/Ideogram.Models.ReframeImageBriaExpandResponse.g.cs
@@ -0,0 +1,91 @@
+
+#nullable enable
+
+namespace Ideogram
+{
+ ///
+ /// Acknowledges an accepted asynchronous Reframe request. Poll
+ /// `GET /v2/generations/{generation_id}` for completion and output
+ /// images. The width and height are the canvas the source was placed on.
+ /// Example: {"seed":12345,"generation_id":"generation_id","width":0,"height":6}
+ ///
+ public sealed partial class ReframeImageBriaExpandResponse
+ {
+ ///
+ /// URL-safe base64 ID of the accepted generation. Accepted by the
+ /// `GET /v2/generations/{generation_id}` polling endpoint.
+ ///
+ [global::System.Text.Json.Serialization.JsonPropertyName("generation_id")]
+ [global::System.Text.Json.Serialization.JsonRequired]
+ public required string GenerationId { get; set; }
+
+ ///
+ /// Random seed. Set for reproducible generation.
+ /// Example: 12345
+ ///
+ /// 12345
+ [global::System.Text.Json.Serialization.JsonPropertyName("seed")]
+ [global::System.Text.Json.Serialization.JsonRequired]
+ public required int Seed { get; set; }
+
+ ///
+ /// The resolved output width in pixels.
+ ///
+ [global::System.Text.Json.Serialization.JsonPropertyName("width")]
+ [global::System.Text.Json.Serialization.JsonRequired]
+ public required int Width { get; set; }
+
+ ///
+ /// The resolved output height in pixels.
+ ///
+ [global::System.Text.Json.Serialization.JsonPropertyName("height")]
+ [global::System.Text.Json.Serialization.JsonRequired]
+ public required int Height { get; set; }
+
+ ///
+ /// Additional properties that are not explicitly defined in the schema
+ ///
+ [global::System.Text.Json.Serialization.JsonExtensionData]
+ public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary();
+
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ ///
+ /// URL-safe base64 ID of the accepted generation. Accepted by the
+ /// `GET /v2/generations/{generation_id}` polling endpoint.
+ ///
+ ///
+ /// Random seed. Set for reproducible generation.
+ /// Example: 12345
+ ///
+ ///
+ /// The resolved output width in pixels.
+ ///
+ ///
+ /// The resolved output height in pixels.
+ ///
+#if NET7_0_OR_GREATER
+ [global::System.Diagnostics.CodeAnalysis.SetsRequiredMembers]
+#endif
+ public ReframeImageBriaExpandResponse(
+ string generationId,
+ int seed,
+ int width,
+ int height)
+ {
+ this.GenerationId = generationId ?? throw new global::System.ArgumentNullException(nameof(generationId));
+ this.Seed = seed;
+ this.Width = width;
+ this.Height = height;
+ }
+
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ public ReframeImageBriaExpandResponse()
+ {
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/src/libs/Ideogram/Generated/Ideogram.Models.ReframeImageGptImage25FlareRequest.Json.g.cs b/src/libs/Ideogram/Generated/Ideogram.Models.ReframeImageGptImage25FlareRequest.Json.g.cs
new file mode 100644
index 0000000..8b5ce82
--- /dev/null
+++ b/src/libs/Ideogram/Generated/Ideogram.Models.ReframeImageGptImage25FlareRequest.Json.g.cs
@@ -0,0 +1,141 @@
+#nullable enable
+
+namespace Ideogram
+{
+ public sealed partial class ReframeImageGptImage25FlareRequest
+ {
+ ///
+ /// Serializes the current instance to a JSON string using the provided JsonSerializerContext.
+ ///
+ public string ToJson(
+ global::System.Text.Json.Serialization.JsonSerializerContext jsonSerializerContext)
+ {
+ return global::System.Text.Json.JsonSerializer.Serialize(
+ this,
+ this.GetType(),
+ jsonSerializerContext);
+ }
+
+ ///
+ /// Serializes the current instance to a JSON string using the generated default JsonSerializerContext.
+ ///
+ public string ToJson()
+ {
+ return ToJson(global::Ideogram.SourceGenerationContext.Default);
+ }
+
+ ///
+ /// Serializes the current instance to a JSON string using the provided JsonSerializerOptions.
+ ///
+#if NET8_0_OR_GREATER
+ [global::System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("JSON serialization and deserialization might require types that cannot be statically analyzed. Use the overload that takes a JsonTypeInfo or JsonSerializerContext, or make sure all of the required types are preserved.")]
+ [global::System.Diagnostics.CodeAnalysis.RequiresDynamicCode("JSON serialization and deserialization might require types that cannot be statically analyzed and might need runtime code generation. Use System.Text.Json source generation for native AOT applications.")]
+#endif
+ public string ToJson(
+ global::System.Text.Json.JsonSerializerOptions? jsonSerializerOptions = null)
+ {
+ if (jsonSerializerOptions is null)
+ {
+ return ToJson(global::Ideogram.SourceGenerationContext.Default);
+ }
+
+ return global::System.Text.Json.JsonSerializer.Serialize(
+ this,
+ jsonSerializerOptions);
+ }
+
+ ///
+ /// Deserializes a JSON string using the provided JsonSerializerContext.
+ ///
+ public static global::Ideogram.ReframeImageGptImage25FlareRequest? FromJson(
+ string json,
+ global::System.Text.Json.Serialization.JsonSerializerContext jsonSerializerContext)
+ {
+ return global::System.Text.Json.JsonSerializer.Deserialize(
+ json,
+ typeof(global::Ideogram.ReframeImageGptImage25FlareRequest),
+ jsonSerializerContext) as global::Ideogram.ReframeImageGptImage25FlareRequest;
+ }
+
+ ///
+ /// Deserializes a JSON string using the generated default JsonSerializerContext.
+ ///
+ public static global::Ideogram.ReframeImageGptImage25FlareRequest? FromJson(
+ string json)
+ {
+ return FromJson(
+ json,
+ global::Ideogram.SourceGenerationContext.Default);
+ }
+
+ ///
+ /// Deserializes a JSON string using the provided JsonSerializerOptions.
+ ///
+#if NET8_0_OR_GREATER
+ [global::System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("JSON serialization and deserialization might require types that cannot be statically analyzed. Use the overload that takes a JsonTypeInfo or JsonSerializerContext, or make sure all of the required types are preserved.")]
+ [global::System.Diagnostics.CodeAnalysis.RequiresDynamicCode("JSON serialization and deserialization might require types that cannot be statically analyzed and might need runtime code generation. Use System.Text.Json source generation for native AOT applications.")]
+#endif
+ public static global::Ideogram.ReframeImageGptImage25FlareRequest? FromJson(
+ string json,
+ global::System.Text.Json.JsonSerializerOptions? jsonSerializerOptions = null)
+ {
+ if (jsonSerializerOptions is null)
+ {
+ return FromJson(
+ json,
+ global::Ideogram.SourceGenerationContext.Default);
+ }
+
+ return global::System.Text.Json.JsonSerializer.Deserialize(
+ json,
+ jsonSerializerOptions);
+ }
+
+ ///
+ /// Deserializes a JSON stream using the provided JsonSerializerContext.
+ ///
+ public static async global::System.Threading.Tasks.ValueTask FromJsonStreamAsync(
+ global::System.IO.Stream jsonStream,
+ global::System.Text.Json.Serialization.JsonSerializerContext jsonSerializerContext)
+ {
+ return (await global::System.Text.Json.JsonSerializer.DeserializeAsync(
+ jsonStream,
+ typeof(global::Ideogram.ReframeImageGptImage25FlareRequest),
+ jsonSerializerContext).ConfigureAwait(false)) as global::Ideogram.ReframeImageGptImage25FlareRequest;
+ }
+
+ ///
+ /// Deserializes a JSON stream using the generated default JsonSerializerContext.
+ ///
+ public static global::System.Threading.Tasks.ValueTask FromJsonStreamAsync(
+ global::System.IO.Stream jsonStream)
+ {
+ return FromJsonStreamAsync(
+ jsonStream,
+ global::Ideogram.SourceGenerationContext.Default);
+ }
+
+ ///
+ /// Deserializes a JSON stream using the provided JsonSerializerOptions.
+ ///
+#if NET8_0_OR_GREATER
+ [global::System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("JSON serialization and deserialization might require types that cannot be statically analyzed. Use the overload that takes a JsonTypeInfo or JsonSerializerContext, or make sure all of the required types are preserved.")]
+ [global::System.Diagnostics.CodeAnalysis.RequiresDynamicCode("JSON serialization and deserialization might require types that cannot be statically analyzed and might need runtime code generation. Use System.Text.Json source generation for native AOT applications.")]
+#endif
+ public static global::System.Threading.Tasks.ValueTask FromJsonStreamAsync(
+ global::System.IO.Stream jsonStream,
+ global::System.Text.Json.JsonSerializerOptions? jsonSerializerOptions = null)
+ {
+ if (jsonSerializerOptions is null)
+ {
+ return FromJsonStreamAsync(
+ jsonStream,
+ global::Ideogram.SourceGenerationContext.Default);
+ }
+
+ return global::System.Text.Json.JsonSerializer.DeserializeAsync(
+ jsonStream,
+ jsonSerializerOptions);
+ }
+ }
+}
diff --git a/src/libs/Ideogram/Generated/Ideogram.Models.ReframeImageGptImage25FlareRequest.g.cs b/src/libs/Ideogram/Generated/Ideogram.Models.ReframeImageGptImage25FlareRequest.g.cs
new file mode 100644
index 0000000..a6d30d5
--- /dev/null
+++ b/src/libs/Ideogram/Generated/Ideogram.Models.ReframeImageGptImage25FlareRequest.g.cs
@@ -0,0 +1,146 @@
+
+#nullable enable
+
+namespace Ideogram
+{
+ ///
+ /// Supply exactly one source: `image_asset_identifier` for an existing
+ /// Ideogram asset, or `image` for a raw upload. Supplying both or neither
+ /// is rejected with a 400.
+ ///
+ public sealed partial class ReframeImageGptImage25FlareRequest
+ {
+ ///
+ /// An identifier for an ideogram asset.
+ /// Example: {"asset_type":"RESPONSE","asset_id":"7uS_VESkRI6O3-sVgHQp_A"}
+ ///
+ /// {"asset_type":"RESPONSE","asset_id":"7uS_VESkRI6O3-sVgHQp_A"}
+ [global::System.Text.Json.Serialization.JsonPropertyName("image_asset_identifier")]
+ public global::Ideogram.AssetIdentifier? ImageAssetIdentifier { get; set; }
+
+ ///
+ /// The JPEG, PNG, or WEBP image to reframe (max 50MB).
+ ///
+ [global::System.Text.Json.Serialization.JsonPropertyName("image")]
+ public byte[]? Image { get; set; }
+
+ ///
+ /// The JPEG, PNG, or WEBP image to reframe (max 50MB).
+ ///
+ [global::System.Text.Json.Serialization.JsonPropertyName("imagename")]
+ public string? Imagename { get; set; }
+
+ ///
+ /// The requested output aspect ratio, as `width:height`.
+ /// Example: 969
+ ///
+ /// 969
+ [global::System.Text.Json.Serialization.JsonPropertyName("aspect_ratio")]
+ [global::System.Text.Json.Serialization.JsonRequired]
+ public required string AspectRatio { get; set; }
+
+ ///
+ /// How much rendering effort the model spends. Lower tiers return sooner and cost less; `auto` lets the model choose.
+ /// Default Value: auto
+ ///
+ [global::System.Text.Json.Serialization.JsonPropertyName("quality")]
+ [global::System.Text.Json.Serialization.JsonConverter(typeof(global::Ideogram.JsonConverters.ReframeImageGptImage25FlareRequestQualityJsonConverter))]
+ public global::Ideogram.ReframeImageGptImage25FlareRequestQuality? Quality { get; set; }
+
+ ///
+ /// API-key requests are always private. For bearer-authenticated
+ /// requests, this controls whether the result is private; when
+ /// omitted, it follows the caller's plan entitlement. Enterprise
+ /// generations are always private.
+ ///
+ [global::System.Text.Json.Serialization.JsonPropertyName("private")]
+ public bool? Private { get; set; }
+
+ ///
+ /// The number of output images to generate.
+ /// Default Value: 1
+ ///
+ [global::System.Text.Json.Serialization.JsonPropertyName("num_images")]
+ public int? NumImages { get; set; }
+
+ ///
+ /// Random seed. Set for reproducible generation.
+ /// Example: 12345
+ ///
+ /// 12345
+ [global::System.Text.Json.Serialization.JsonPropertyName("seed")]
+ public int? Seed { get; set; }
+
+ ///
+ /// Additional properties that are not explicitly defined in the schema
+ ///
+ [global::System.Text.Json.Serialization.JsonExtensionData]
+ public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary();
+
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ ///
+ /// The requested output aspect ratio, as `width:height`.
+ /// Example: 969
+ ///
+ ///
+ /// An identifier for an ideogram asset.
+ /// Example: {"asset_type":"RESPONSE","asset_id":"7uS_VESkRI6O3-sVgHQp_A"}
+ ///
+ ///
+ /// The JPEG, PNG, or WEBP image to reframe (max 50MB).
+ ///
+ ///
+ /// The JPEG, PNG, or WEBP image to reframe (max 50MB).
+ ///
+ ///
+ /// How much rendering effort the model spends. Lower tiers return sooner and cost less; `auto` lets the model choose.
+ /// Default Value: auto
+ ///
+ ///
+ /// API-key requests are always private. For bearer-authenticated
+ /// requests, this controls whether the result is private; when
+ /// omitted, it follows the caller's plan entitlement. Enterprise
+ /// generations are always private.
+ ///
+ ///
+ /// The number of output images to generate.
+ /// Default Value: 1
+ ///
+ ///
+ /// Random seed. Set for reproducible generation.
+ /// Example: 12345
+ ///
+#if NET7_0_OR_GREATER
+ [global::System.Diagnostics.CodeAnalysis.SetsRequiredMembers]
+#endif
+ public ReframeImageGptImage25FlareRequest(
+ string aspectRatio,
+ global::Ideogram.AssetIdentifier? imageAssetIdentifier,
+ byte[]? image,
+ string? imagename,
+ global::Ideogram.ReframeImageGptImage25FlareRequestQuality? quality,
+ bool? @private,
+ int? numImages,
+ int? seed)
+ {
+ this.ImageAssetIdentifier = imageAssetIdentifier;
+ this.Image = image;
+ this.Imagename = imagename;
+ this.AspectRatio = aspectRatio ?? throw new global::System.ArgumentNullException(nameof(aspectRatio));
+ this.Quality = quality;
+ this.Private = @private;
+ this.NumImages = numImages;
+ this.Seed = seed;
+ }
+
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ public ReframeImageGptImage25FlareRequest()
+ {
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/src/libs/Ideogram/Generated/Ideogram.Models.ReframeImageGptImage25FlareRequestQuality.g.cs b/src/libs/Ideogram/Generated/Ideogram.Models.ReframeImageGptImage25FlareRequestQuality.g.cs
new file mode 100644
index 0000000..26bdfde
--- /dev/null
+++ b/src/libs/Ideogram/Generated/Ideogram.Models.ReframeImageGptImage25FlareRequestQuality.g.cs
@@ -0,0 +1,64 @@
+
+#nullable enable
+
+namespace Ideogram
+{
+ ///
+ /// How much rendering effort the model spends. Lower tiers return sooner and cost less; `auto` lets the model choose.
+ /// Default Value: auto
+ ///
+ public enum ReframeImageGptImage25FlareRequestQuality
+ {
+ ///
+ ///
+ ///
+ Auto,
+ ///
+ ///
+ ///
+ High,
+ ///
+ ///
+ ///
+ Low,
+ ///
+ ///
+ ///
+ Medium,
+ }
+
+ ///
+ /// Enum extensions to do fast conversions without the reflection.
+ ///
+ public static class ReframeImageGptImage25FlareRequestQualityExtensions
+ {
+ ///
+ /// Converts an enum to a string.
+ ///
+ public static string ToValueString(this ReframeImageGptImage25FlareRequestQuality value)
+ {
+ return value switch
+ {
+ ReframeImageGptImage25FlareRequestQuality.Auto => "auto",
+ ReframeImageGptImage25FlareRequestQuality.High => "high",
+ ReframeImageGptImage25FlareRequestQuality.Low => "low",
+ ReframeImageGptImage25FlareRequestQuality.Medium => "medium",
+ _ => throw new global::System.ArgumentOutOfRangeException(nameof(value), value, null),
+ };
+ }
+ ///
+ /// Converts an string to a enum.
+ ///
+ public static ReframeImageGptImage25FlareRequestQuality? ToEnum(string value)
+ {
+ return value switch
+ {
+ "auto" => ReframeImageGptImage25FlareRequestQuality.Auto,
+ "high" => ReframeImageGptImage25FlareRequestQuality.High,
+ "low" => ReframeImageGptImage25FlareRequestQuality.Low,
+ "medium" => ReframeImageGptImage25FlareRequestQuality.Medium,
+ _ => null,
+ };
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/libs/Ideogram/Generated/Ideogram.Models.ReframeImageGptImage25FlareResponse.Json.g.cs b/src/libs/Ideogram/Generated/Ideogram.Models.ReframeImageGptImage25FlareResponse.Json.g.cs
new file mode 100644
index 0000000..af7f6d8
--- /dev/null
+++ b/src/libs/Ideogram/Generated/Ideogram.Models.ReframeImageGptImage25FlareResponse.Json.g.cs
@@ -0,0 +1,141 @@
+#nullable enable
+
+namespace Ideogram
+{
+ public sealed partial class ReframeImageGptImage25FlareResponse
+ {
+ ///
+ /// Serializes the current instance to a JSON string using the provided JsonSerializerContext.
+ ///
+ public string ToJson(
+ global::System.Text.Json.Serialization.JsonSerializerContext jsonSerializerContext)
+ {
+ return global::System.Text.Json.JsonSerializer.Serialize(
+ this,
+ this.GetType(),
+ jsonSerializerContext);
+ }
+
+ ///
+ /// Serializes the current instance to a JSON string using the generated default JsonSerializerContext.
+ ///
+ public string ToJson()
+ {
+ return ToJson(global::Ideogram.SourceGenerationContext.Default);
+ }
+
+ ///
+ /// Serializes the current instance to a JSON string using the provided JsonSerializerOptions.
+ ///
+#if NET8_0_OR_GREATER
+ [global::System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("JSON serialization and deserialization might require types that cannot be statically analyzed. Use the overload that takes a JsonTypeInfo or JsonSerializerContext, or make sure all of the required types are preserved.")]
+ [global::System.Diagnostics.CodeAnalysis.RequiresDynamicCode("JSON serialization and deserialization might require types that cannot be statically analyzed and might need runtime code generation. Use System.Text.Json source generation for native AOT applications.")]
+#endif
+ public string ToJson(
+ global::System.Text.Json.JsonSerializerOptions? jsonSerializerOptions = null)
+ {
+ if (jsonSerializerOptions is null)
+ {
+ return ToJson(global::Ideogram.SourceGenerationContext.Default);
+ }
+
+ return global::System.Text.Json.JsonSerializer.Serialize(
+ this,
+ jsonSerializerOptions);
+ }
+
+ ///
+ /// Deserializes a JSON string using the provided JsonSerializerContext.
+ ///
+ public static global::Ideogram.ReframeImageGptImage25FlareResponse? FromJson(
+ string json,
+ global::System.Text.Json.Serialization.JsonSerializerContext jsonSerializerContext)
+ {
+ return global::System.Text.Json.JsonSerializer.Deserialize(
+ json,
+ typeof(global::Ideogram.ReframeImageGptImage25FlareResponse),
+ jsonSerializerContext) as global::Ideogram.ReframeImageGptImage25FlareResponse;
+ }
+
+ ///
+ /// Deserializes a JSON string using the generated default JsonSerializerContext.
+ ///
+ public static global::Ideogram.ReframeImageGptImage25FlareResponse? FromJson(
+ string json)
+ {
+ return FromJson(
+ json,
+ global::Ideogram.SourceGenerationContext.Default);
+ }
+
+ ///
+ /// Deserializes a JSON string using the provided JsonSerializerOptions.
+ ///
+#if NET8_0_OR_GREATER
+ [global::System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("JSON serialization and deserialization might require types that cannot be statically analyzed. Use the overload that takes a JsonTypeInfo or JsonSerializerContext, or make sure all of the required types are preserved.")]
+ [global::System.Diagnostics.CodeAnalysis.RequiresDynamicCode("JSON serialization and deserialization might require types that cannot be statically analyzed and might need runtime code generation. Use System.Text.Json source generation for native AOT applications.")]
+#endif
+ public static global::Ideogram.ReframeImageGptImage25FlareResponse? FromJson(
+ string json,
+ global::System.Text.Json.JsonSerializerOptions? jsonSerializerOptions = null)
+ {
+ if (jsonSerializerOptions is null)
+ {
+ return FromJson(
+ json,
+ global::Ideogram.SourceGenerationContext.Default);
+ }
+
+ return global::System.Text.Json.JsonSerializer.Deserialize(
+ json,
+ jsonSerializerOptions);
+ }
+
+ ///
+ /// Deserializes a JSON stream using the provided JsonSerializerContext.
+ ///
+ public static async global::System.Threading.Tasks.ValueTask FromJsonStreamAsync(
+ global::System.IO.Stream jsonStream,
+ global::System.Text.Json.Serialization.JsonSerializerContext jsonSerializerContext)
+ {
+ return (await global::System.Text.Json.JsonSerializer.DeserializeAsync(
+ jsonStream,
+ typeof(global::Ideogram.ReframeImageGptImage25FlareResponse),
+ jsonSerializerContext).ConfigureAwait(false)) as global::Ideogram.ReframeImageGptImage25FlareResponse;
+ }
+
+ ///
+ /// Deserializes a JSON stream using the generated default JsonSerializerContext.
+ ///
+ public static global::System.Threading.Tasks.ValueTask FromJsonStreamAsync(
+ global::System.IO.Stream jsonStream)
+ {
+ return FromJsonStreamAsync(
+ jsonStream,
+ global::Ideogram.SourceGenerationContext.Default);
+ }
+
+ ///
+ /// Deserializes a JSON stream using the provided JsonSerializerOptions.
+ ///
+#if NET8_0_OR_GREATER
+ [global::System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("JSON serialization and deserialization might require types that cannot be statically analyzed. Use the overload that takes a JsonTypeInfo or JsonSerializerContext, or make sure all of the required types are preserved.")]
+ [global::System.Diagnostics.CodeAnalysis.RequiresDynamicCode("JSON serialization and deserialization might require types that cannot be statically analyzed and might need runtime code generation. Use System.Text.Json source generation for native AOT applications.")]
+#endif
+ public static global::System.Threading.Tasks.ValueTask FromJsonStreamAsync(
+ global::System.IO.Stream jsonStream,
+ global::System.Text.Json.JsonSerializerOptions? jsonSerializerOptions = null)
+ {
+ if (jsonSerializerOptions is null)
+ {
+ return FromJsonStreamAsync(
+ jsonStream,
+ global::Ideogram.SourceGenerationContext.Default);
+ }
+
+ return global::System.Text.Json.JsonSerializer.DeserializeAsync(
+ jsonStream,
+ jsonSerializerOptions);
+ }
+ }
+}
diff --git a/src/libs/Ideogram/Generated/Ideogram.Models.ReframeImageGptImage25FlareResponse.g.cs b/src/libs/Ideogram/Generated/Ideogram.Models.ReframeImageGptImage25FlareResponse.g.cs
new file mode 100644
index 0000000..14a6d51
--- /dev/null
+++ b/src/libs/Ideogram/Generated/Ideogram.Models.ReframeImageGptImage25FlareResponse.g.cs
@@ -0,0 +1,91 @@
+
+#nullable enable
+
+namespace Ideogram
+{
+ ///
+ /// Acknowledges an accepted asynchronous Reframe request. Poll
+ /// `GET /v2/generations/{generation_id}` for completion and output
+ /// images. The seed, width, and height report the values the request resolved to when the caller left them unset.
+ /// Example: {"seed":12345,"generation_id":"generation_id","width":0,"height":6}
+ ///
+ public sealed partial class ReframeImageGptImage25FlareResponse
+ {
+ ///
+ /// URL-safe base64 ID of the accepted generation. Accepted by the
+ /// `GET /v2/generations/{generation_id}` polling endpoint.
+ ///
+ [global::System.Text.Json.Serialization.JsonPropertyName("generation_id")]
+ [global::System.Text.Json.Serialization.JsonRequired]
+ public required string GenerationId { get; set; }
+
+ ///
+ /// Random seed. Set for reproducible generation.
+ /// Example: 12345
+ ///
+ /// 12345
+ [global::System.Text.Json.Serialization.JsonPropertyName("seed")]
+ [global::System.Text.Json.Serialization.JsonRequired]
+ public required int Seed { get; set; }
+
+ ///
+ /// The resolved output width in pixels.
+ ///
+ [global::System.Text.Json.Serialization.JsonPropertyName("width")]
+ [global::System.Text.Json.Serialization.JsonRequired]
+ public required int Width { get; set; }
+
+ ///
+ /// The resolved output height in pixels.
+ ///
+ [global::System.Text.Json.Serialization.JsonPropertyName("height")]
+ [global::System.Text.Json.Serialization.JsonRequired]
+ public required int Height { get; set; }
+
+ ///
+ /// Additional properties that are not explicitly defined in the schema
+ ///
+ [global::System.Text.Json.Serialization.JsonExtensionData]
+ public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary();
+
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ ///
+ /// URL-safe base64 ID of the accepted generation. Accepted by the
+ /// `GET /v2/generations/{generation_id}` polling endpoint.
+ ///
+ ///
+ /// Random seed. Set for reproducible generation.
+ /// Example: 12345
+ ///
+ ///
+ /// The resolved output width in pixels.
+ ///
+ ///
+ /// The resolved output height in pixels.
+ ///
+#if NET7_0_OR_GREATER
+ [global::System.Diagnostics.CodeAnalysis.SetsRequiredMembers]
+#endif
+ public ReframeImageGptImage25FlareResponse(
+ string generationId,
+ int seed,
+ int width,
+ int height)
+ {
+ this.GenerationId = generationId ?? throw new global::System.ArgumentNullException(nameof(generationId));
+ this.Seed = seed;
+ this.Width = width;
+ this.Height = height;
+ }
+
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ public ReframeImageGptImage25FlareResponse()
+ {
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/src/libs/Ideogram/Generated/Ideogram.Models.ReframeImageNanoBanana2Request.g.cs b/src/libs/Ideogram/Generated/Ideogram.Models.ReframeImageNanoBanana2Request.g.cs
index 6ad1c74..e226ea5 100644
--- a/src/libs/Ideogram/Generated/Ideogram.Models.ReframeImageNanoBanana2Request.g.cs
+++ b/src/libs/Ideogram/Generated/Ideogram.Models.ReframeImageNanoBanana2Request.g.cs
@@ -30,7 +30,7 @@ public sealed partial class ReframeImageNanoBanana2Request
public string? Imagename { get; set; }
///
- /// The requested output aspect ratio. It resolves to the closest dimensions the model supports at the 1K output tier.
+ /// The requested output aspect ratio, as `width:height`.
/// Example: 969
///
/// 969
@@ -72,7 +72,7 @@ public sealed partial class ReframeImageNanoBanana2Request
/// Initializes a new instance of the class.
///
///
- /// The requested output aspect ratio. It resolves to the closest dimensions the model supports at the 1K output tier.
+ /// The requested output aspect ratio, as `width:height`.
/// Example: 969
///
///
diff --git a/src/libs/Ideogram/Generated/Ideogram.Models.ReframeImageNanoBananaProRequest.Json.g.cs b/src/libs/Ideogram/Generated/Ideogram.Models.ReframeImageNanoBananaProRequest.Json.g.cs
new file mode 100644
index 0000000..db95699
--- /dev/null
+++ b/src/libs/Ideogram/Generated/Ideogram.Models.ReframeImageNanoBananaProRequest.Json.g.cs
@@ -0,0 +1,141 @@
+#nullable enable
+
+namespace Ideogram
+{
+ public sealed partial class ReframeImageNanoBananaProRequest
+ {
+ ///
+ /// Serializes the current instance to a JSON string using the provided JsonSerializerContext.
+ ///
+ public string ToJson(
+ global::System.Text.Json.Serialization.JsonSerializerContext jsonSerializerContext)
+ {
+ return global::System.Text.Json.JsonSerializer.Serialize(
+ this,
+ this.GetType(),
+ jsonSerializerContext);
+ }
+
+ ///
+ /// Serializes the current instance to a JSON string using the generated default JsonSerializerContext.
+ ///
+ public string ToJson()
+ {
+ return ToJson(global::Ideogram.SourceGenerationContext.Default);
+ }
+
+ ///
+ /// Serializes the current instance to a JSON string using the provided JsonSerializerOptions.
+ ///
+#if NET8_0_OR_GREATER
+ [global::System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("JSON serialization and deserialization might require types that cannot be statically analyzed. Use the overload that takes a JsonTypeInfo or JsonSerializerContext, or make sure all of the required types are preserved.")]
+ [global::System.Diagnostics.CodeAnalysis.RequiresDynamicCode("JSON serialization and deserialization might require types that cannot be statically analyzed and might need runtime code generation. Use System.Text.Json source generation for native AOT applications.")]
+#endif
+ public string ToJson(
+ global::System.Text.Json.JsonSerializerOptions? jsonSerializerOptions = null)
+ {
+ if (jsonSerializerOptions is null)
+ {
+ return ToJson(global::Ideogram.SourceGenerationContext.Default);
+ }
+
+ return global::System.Text.Json.JsonSerializer.Serialize(
+ this,
+ jsonSerializerOptions);
+ }
+
+ ///
+ /// Deserializes a JSON string using the provided JsonSerializerContext.
+ ///
+ public static global::Ideogram.ReframeImageNanoBananaProRequest? FromJson(
+ string json,
+ global::System.Text.Json.Serialization.JsonSerializerContext jsonSerializerContext)
+ {
+ return global::System.Text.Json.JsonSerializer.Deserialize(
+ json,
+ typeof(global::Ideogram.ReframeImageNanoBananaProRequest),
+ jsonSerializerContext) as global::Ideogram.ReframeImageNanoBananaProRequest;
+ }
+
+ ///
+ /// Deserializes a JSON string using the generated default JsonSerializerContext.
+ ///
+ public static global::Ideogram.ReframeImageNanoBananaProRequest? FromJson(
+ string json)
+ {
+ return FromJson(
+ json,
+ global::Ideogram.SourceGenerationContext.Default);
+ }
+
+ ///
+ /// Deserializes a JSON string using the provided JsonSerializerOptions.
+ ///
+#if NET8_0_OR_GREATER
+ [global::System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("JSON serialization and deserialization might require types that cannot be statically analyzed. Use the overload that takes a JsonTypeInfo or JsonSerializerContext, or make sure all of the required types are preserved.")]
+ [global::System.Diagnostics.CodeAnalysis.RequiresDynamicCode("JSON serialization and deserialization might require types that cannot be statically analyzed and might need runtime code generation. Use System.Text.Json source generation for native AOT applications.")]
+#endif
+ public static global::Ideogram.ReframeImageNanoBananaProRequest? FromJson(
+ string json,
+ global::System.Text.Json.JsonSerializerOptions? jsonSerializerOptions = null)
+ {
+ if (jsonSerializerOptions is null)
+ {
+ return FromJson(
+ json,
+ global::Ideogram.SourceGenerationContext.Default);
+ }
+
+ return global::System.Text.Json.JsonSerializer.Deserialize(
+ json,
+ jsonSerializerOptions);
+ }
+
+ ///
+ /// Deserializes a JSON stream using the provided JsonSerializerContext.
+ ///
+ public static async global::System.Threading.Tasks.ValueTask FromJsonStreamAsync(
+ global::System.IO.Stream jsonStream,
+ global::System.Text.Json.Serialization.JsonSerializerContext jsonSerializerContext)
+ {
+ return (await global::System.Text.Json.JsonSerializer.DeserializeAsync(
+ jsonStream,
+ typeof(global::Ideogram.ReframeImageNanoBananaProRequest),
+ jsonSerializerContext).ConfigureAwait(false)) as global::Ideogram.ReframeImageNanoBananaProRequest;
+ }
+
+ ///
+ /// Deserializes a JSON stream using the generated default JsonSerializerContext.
+ ///
+ public static global::System.Threading.Tasks.ValueTask FromJsonStreamAsync(
+ global::System.IO.Stream jsonStream)
+ {
+ return FromJsonStreamAsync(
+ jsonStream,
+ global::Ideogram.SourceGenerationContext.Default);
+ }
+
+ ///
+ /// Deserializes a JSON stream using the provided JsonSerializerOptions.
+ ///
+#if NET8_0_OR_GREATER
+ [global::System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("JSON serialization and deserialization might require types that cannot be statically analyzed. Use the overload that takes a JsonTypeInfo or JsonSerializerContext, or make sure all of the required types are preserved.")]
+ [global::System.Diagnostics.CodeAnalysis.RequiresDynamicCode("JSON serialization and deserialization might require types that cannot be statically analyzed and might need runtime code generation. Use System.Text.Json source generation for native AOT applications.")]
+#endif
+ public static global::System.Threading.Tasks.ValueTask FromJsonStreamAsync(
+ global::System.IO.Stream jsonStream,
+ global::System.Text.Json.JsonSerializerOptions? jsonSerializerOptions = null)
+ {
+ if (jsonSerializerOptions is null)
+ {
+ return FromJsonStreamAsync(
+ jsonStream,
+ global::Ideogram.SourceGenerationContext.Default);
+ }
+
+ return global::System.Text.Json.JsonSerializer.DeserializeAsync(
+ jsonStream,
+ jsonSerializerOptions);
+ }
+ }
+}
diff --git a/src/libs/Ideogram/Generated/Ideogram.Models.ReframeImageNanoBananaProRequest.g.cs b/src/libs/Ideogram/Generated/Ideogram.Models.ReframeImageNanoBananaProRequest.g.cs
new file mode 100644
index 0000000..9a7a97b
--- /dev/null
+++ b/src/libs/Ideogram/Generated/Ideogram.Models.ReframeImageNanoBananaProRequest.g.cs
@@ -0,0 +1,146 @@
+
+#nullable enable
+
+namespace Ideogram
+{
+ ///
+ /// Supply exactly one source: `image_asset_identifier` for an existing
+ /// Ideogram asset, or `image` for a raw upload. Supplying both or neither
+ /// is rejected with a 400.
+ ///
+ public sealed partial class ReframeImageNanoBananaProRequest
+ {
+ ///
+ /// An identifier for an ideogram asset.
+ /// Example: {"asset_type":"RESPONSE","asset_id":"7uS_VESkRI6O3-sVgHQp_A"}
+ ///
+ /// {"asset_type":"RESPONSE","asset_id":"7uS_VESkRI6O3-sVgHQp_A"}
+ [global::System.Text.Json.Serialization.JsonPropertyName("image_asset_identifier")]
+ public global::Ideogram.AssetIdentifier? ImageAssetIdentifier { get; set; }
+
+ ///
+ /// The JPEG, PNG, or WEBP image to reframe (max 50MB).
+ ///
+ [global::System.Text.Json.Serialization.JsonPropertyName("image")]
+ public byte[]? Image { get; set; }
+
+ ///
+ /// The JPEG, PNG, or WEBP image to reframe (max 50MB).
+ ///
+ [global::System.Text.Json.Serialization.JsonPropertyName("imagename")]
+ public string? Imagename { get; set; }
+
+ ///
+ /// The requested output aspect ratio, as `width:height`.
+ /// Example: 969
+ ///
+ /// 969
+ [global::System.Text.Json.Serialization.JsonPropertyName("aspect_ratio")]
+ [global::System.Text.Json.Serialization.JsonRequired]
+ public required string AspectRatio { get; set; }
+
+ ///
+ /// The output resolution tier. The model sizes its output by tier at the requested aspect ratio; exact pixel dimensions cannot be requested.
+ /// Default Value: 1K
+ ///
+ [global::System.Text.Json.Serialization.JsonPropertyName("resolution_tier")]
+ [global::System.Text.Json.Serialization.JsonConverter(typeof(global::Ideogram.JsonConverters.ReframeImageNanoBananaProRequestResolutionTierJsonConverter))]
+ public global::Ideogram.ReframeImageNanoBananaProRequestResolutionTier? ResolutionTier { get; set; }
+
+ ///
+ /// API-key requests are always private. For bearer-authenticated
+ /// requests, this controls whether the result is private; when
+ /// omitted, it follows the caller's plan entitlement. Enterprise
+ /// generations are always private.
+ ///
+ [global::System.Text.Json.Serialization.JsonPropertyName("private")]
+ public bool? Private { get; set; }
+
+ ///
+ /// The number of output images to generate.
+ /// Default Value: 1
+ ///
+ [global::System.Text.Json.Serialization.JsonPropertyName("num_images")]
+ public int? NumImages { get; set; }
+
+ ///
+ /// Random seed. Set for reproducible generation.
+ /// Example: 12345
+ ///
+ /// 12345
+ [global::System.Text.Json.Serialization.JsonPropertyName("seed")]
+ public int? Seed { get; set; }
+
+ ///
+ /// Additional properties that are not explicitly defined in the schema
+ ///
+ [global::System.Text.Json.Serialization.JsonExtensionData]
+ public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary();
+
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ ///
+ /// The requested output aspect ratio, as `width:height`.
+ /// Example: 969
+ ///
+ ///
+ /// An identifier for an ideogram asset.
+ /// Example: {"asset_type":"RESPONSE","asset_id":"7uS_VESkRI6O3-sVgHQp_A"}
+ ///
+ ///
+ /// The JPEG, PNG, or WEBP image to reframe (max 50MB).
+ ///
+ ///
+ /// The JPEG, PNG, or WEBP image to reframe (max 50MB).
+ ///
+ ///
+ /// The output resolution tier. The model sizes its output by tier at the requested aspect ratio; exact pixel dimensions cannot be requested.
+ /// Default Value: 1K
+ ///
+ ///
+ /// API-key requests are always private. For bearer-authenticated
+ /// requests, this controls whether the result is private; when
+ /// omitted, it follows the caller's plan entitlement. Enterprise
+ /// generations are always private.
+ ///
+ ///
+ /// The number of output images to generate.
+ /// Default Value: 1
+ ///
+ ///
+ /// Random seed. Set for reproducible generation.
+ /// Example: 12345
+ ///
+#if NET7_0_OR_GREATER
+ [global::System.Diagnostics.CodeAnalysis.SetsRequiredMembers]
+#endif
+ public ReframeImageNanoBananaProRequest(
+ string aspectRatio,
+ global::Ideogram.AssetIdentifier? imageAssetIdentifier,
+ byte[]? image,
+ string? imagename,
+ global::Ideogram.ReframeImageNanoBananaProRequestResolutionTier? resolutionTier,
+ bool? @private,
+ int? numImages,
+ int? seed)
+ {
+ this.ImageAssetIdentifier = imageAssetIdentifier;
+ this.Image = image;
+ this.Imagename = imagename;
+ this.AspectRatio = aspectRatio ?? throw new global::System.ArgumentNullException(nameof(aspectRatio));
+ this.ResolutionTier = resolutionTier;
+ this.Private = @private;
+ this.NumImages = numImages;
+ this.Seed = seed;
+ }
+
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ public ReframeImageNanoBananaProRequest()
+ {
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/src/libs/Ideogram/Generated/Ideogram.Models.ReframeImageNanoBananaProRequestResolutionTier.g.cs b/src/libs/Ideogram/Generated/Ideogram.Models.ReframeImageNanoBananaProRequestResolutionTier.g.cs
new file mode 100644
index 0000000..80534c2
--- /dev/null
+++ b/src/libs/Ideogram/Generated/Ideogram.Models.ReframeImageNanoBananaProRequestResolutionTier.g.cs
@@ -0,0 +1,58 @@
+
+#nullable enable
+
+namespace Ideogram
+{
+ ///
+ /// The output resolution tier. The model sizes its output by tier at the requested aspect ratio; exact pixel dimensions cannot be requested.
+ /// Default Value: 1K
+ ///
+ public enum ReframeImageNanoBananaProRequestResolutionTier
+ {
+ ///
+ ///
+ ///
+ x1k,
+ ///
+ ///
+ ///
+ x2k,
+ ///
+ ///
+ ///
+ x4k,
+ }
+
+ ///
+ /// Enum extensions to do fast conversions without the reflection.
+ ///
+ public static class ReframeImageNanoBananaProRequestResolutionTierExtensions
+ {
+ ///
+ /// Converts an enum to a string.
+ ///
+ public static string ToValueString(this ReframeImageNanoBananaProRequestResolutionTier value)
+ {
+ return value switch
+ {
+ ReframeImageNanoBananaProRequestResolutionTier.x1k => "1K",
+ ReframeImageNanoBananaProRequestResolutionTier.x2k => "2K",
+ ReframeImageNanoBananaProRequestResolutionTier.x4k => "4K",
+ _ => throw new global::System.ArgumentOutOfRangeException(nameof(value), value, null),
+ };
+ }
+ ///
+ /// Converts an string to a enum.
+ ///
+ public static ReframeImageNanoBananaProRequestResolutionTier? ToEnum(string value)
+ {
+ return value switch
+ {
+ "1K" => ReframeImageNanoBananaProRequestResolutionTier.x1k,
+ "2K" => ReframeImageNanoBananaProRequestResolutionTier.x2k,
+ "4K" => ReframeImageNanoBananaProRequestResolutionTier.x4k,
+ _ => null,
+ };
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/libs/Ideogram/Generated/Ideogram.Models.ReframeImageNanoBananaProResponse.Json.g.cs b/src/libs/Ideogram/Generated/Ideogram.Models.ReframeImageNanoBananaProResponse.Json.g.cs
new file mode 100644
index 0000000..4fb9ec6
--- /dev/null
+++ b/src/libs/Ideogram/Generated/Ideogram.Models.ReframeImageNanoBananaProResponse.Json.g.cs
@@ -0,0 +1,141 @@
+#nullable enable
+
+namespace Ideogram
+{
+ public sealed partial class ReframeImageNanoBananaProResponse
+ {
+ ///
+ /// Serializes the current instance to a JSON string using the provided JsonSerializerContext.
+ ///
+ public string ToJson(
+ global::System.Text.Json.Serialization.JsonSerializerContext jsonSerializerContext)
+ {
+ return global::System.Text.Json.JsonSerializer.Serialize(
+ this,
+ this.GetType(),
+ jsonSerializerContext);
+ }
+
+ ///
+ /// Serializes the current instance to a JSON string using the generated default JsonSerializerContext.
+ ///
+ public string ToJson()
+ {
+ return ToJson(global::Ideogram.SourceGenerationContext.Default);
+ }
+
+ ///
+ /// Serializes the current instance to a JSON string using the provided JsonSerializerOptions.
+ ///
+#if NET8_0_OR_GREATER
+ [global::System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("JSON serialization and deserialization might require types that cannot be statically analyzed. Use the overload that takes a JsonTypeInfo or JsonSerializerContext, or make sure all of the required types are preserved.")]
+ [global::System.Diagnostics.CodeAnalysis.RequiresDynamicCode("JSON serialization and deserialization might require types that cannot be statically analyzed and might need runtime code generation. Use System.Text.Json source generation for native AOT applications.")]
+#endif
+ public string ToJson(
+ global::System.Text.Json.JsonSerializerOptions? jsonSerializerOptions = null)
+ {
+ if (jsonSerializerOptions is null)
+ {
+ return ToJson(global::Ideogram.SourceGenerationContext.Default);
+ }
+
+ return global::System.Text.Json.JsonSerializer.Serialize(
+ this,
+ jsonSerializerOptions);
+ }
+
+ ///
+ /// Deserializes a JSON string using the provided JsonSerializerContext.
+ ///
+ public static global::Ideogram.ReframeImageNanoBananaProResponse? FromJson(
+ string json,
+ global::System.Text.Json.Serialization.JsonSerializerContext jsonSerializerContext)
+ {
+ return global::System.Text.Json.JsonSerializer.Deserialize(
+ json,
+ typeof(global::Ideogram.ReframeImageNanoBananaProResponse),
+ jsonSerializerContext) as global::Ideogram.ReframeImageNanoBananaProResponse;
+ }
+
+ ///
+ /// Deserializes a JSON string using the generated default JsonSerializerContext.
+ ///
+ public static global::Ideogram.ReframeImageNanoBananaProResponse? FromJson(
+ string json)
+ {
+ return FromJson(
+ json,
+ global::Ideogram.SourceGenerationContext.Default);
+ }
+
+ ///
+ /// Deserializes a JSON string using the provided JsonSerializerOptions.
+ ///
+#if NET8_0_OR_GREATER
+ [global::System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("JSON serialization and deserialization might require types that cannot be statically analyzed. Use the overload that takes a JsonTypeInfo or JsonSerializerContext, or make sure all of the required types are preserved.")]
+ [global::System.Diagnostics.CodeAnalysis.RequiresDynamicCode("JSON serialization and deserialization might require types that cannot be statically analyzed and might need runtime code generation. Use System.Text.Json source generation for native AOT applications.")]
+#endif
+ public static global::Ideogram.ReframeImageNanoBananaProResponse? FromJson(
+ string json,
+ global::System.Text.Json.JsonSerializerOptions? jsonSerializerOptions = null)
+ {
+ if (jsonSerializerOptions is null)
+ {
+ return FromJson(
+ json,
+ global::Ideogram.SourceGenerationContext.Default);
+ }
+
+ return global::System.Text.Json.JsonSerializer.Deserialize(
+ json,
+ jsonSerializerOptions);
+ }
+
+ ///
+ /// Deserializes a JSON stream using the provided JsonSerializerContext.
+ ///
+ public static async global::System.Threading.Tasks.ValueTask FromJsonStreamAsync(
+ global::System.IO.Stream jsonStream,
+ global::System.Text.Json.Serialization.JsonSerializerContext jsonSerializerContext)
+ {
+ return (await global::System.Text.Json.JsonSerializer.DeserializeAsync(
+ jsonStream,
+ typeof(global::Ideogram.ReframeImageNanoBananaProResponse),
+ jsonSerializerContext).ConfigureAwait(false)) as global::Ideogram.ReframeImageNanoBananaProResponse;
+ }
+
+ ///
+ /// Deserializes a JSON stream using the generated default JsonSerializerContext.
+ ///
+ public static global::System.Threading.Tasks.ValueTask FromJsonStreamAsync(
+ global::System.IO.Stream jsonStream)
+ {
+ return FromJsonStreamAsync(
+ jsonStream,
+ global::Ideogram.SourceGenerationContext.Default);
+ }
+
+ ///
+ /// Deserializes a JSON stream using the provided JsonSerializerOptions.
+ ///
+#if NET8_0_OR_GREATER
+ [global::System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("JSON serialization and deserialization might require types that cannot be statically analyzed. Use the overload that takes a JsonTypeInfo or JsonSerializerContext, or make sure all of the required types are preserved.")]
+ [global::System.Diagnostics.CodeAnalysis.RequiresDynamicCode("JSON serialization and deserialization might require types that cannot be statically analyzed and might need runtime code generation. Use System.Text.Json source generation for native AOT applications.")]
+#endif
+ public static global::System.Threading.Tasks.ValueTask FromJsonStreamAsync(
+ global::System.IO.Stream jsonStream,
+ global::System.Text.Json.JsonSerializerOptions? jsonSerializerOptions = null)
+ {
+ if (jsonSerializerOptions is null)
+ {
+ return FromJsonStreamAsync(
+ jsonStream,
+ global::Ideogram.SourceGenerationContext.Default);
+ }
+
+ return global::System.Text.Json.JsonSerializer.DeserializeAsync(
+ jsonStream,
+ jsonSerializerOptions);
+ }
+ }
+}
diff --git a/src/libs/Ideogram/Generated/Ideogram.Models.ReframeImageNanoBananaProResponse.g.cs b/src/libs/Ideogram/Generated/Ideogram.Models.ReframeImageNanoBananaProResponse.g.cs
new file mode 100644
index 0000000..35431a6
--- /dev/null
+++ b/src/libs/Ideogram/Generated/Ideogram.Models.ReframeImageNanoBananaProResponse.g.cs
@@ -0,0 +1,91 @@
+
+#nullable enable
+
+namespace Ideogram
+{
+ ///
+ /// Acknowledges an accepted asynchronous Reframe request. Poll
+ /// `GET /v2/generations/{generation_id}` for completion and output
+ /// images. The seed, width, and height report the values the request resolved to when the caller left them unset.
+ /// Example: {"seed":12345,"generation_id":"generation_id","width":0,"height":6}
+ ///
+ public sealed partial class ReframeImageNanoBananaProResponse
+ {
+ ///
+ /// URL-safe base64 ID of the accepted generation. Accepted by the
+ /// `GET /v2/generations/{generation_id}` polling endpoint.
+ ///
+ [global::System.Text.Json.Serialization.JsonPropertyName("generation_id")]
+ [global::System.Text.Json.Serialization.JsonRequired]
+ public required string GenerationId { get; set; }
+
+ ///
+ /// Random seed. Set for reproducible generation.
+ /// Example: 12345
+ ///
+ /// 12345
+ [global::System.Text.Json.Serialization.JsonPropertyName("seed")]
+ [global::System.Text.Json.Serialization.JsonRequired]
+ public required int Seed { get; set; }
+
+ ///
+ /// The resolved output width in pixels.
+ ///
+ [global::System.Text.Json.Serialization.JsonPropertyName("width")]
+ [global::System.Text.Json.Serialization.JsonRequired]
+ public required int Width { get; set; }
+
+ ///
+ /// The resolved output height in pixels.
+ ///
+ [global::System.Text.Json.Serialization.JsonPropertyName("height")]
+ [global::System.Text.Json.Serialization.JsonRequired]
+ public required int Height { get; set; }
+
+ ///
+ /// Additional properties that are not explicitly defined in the schema
+ ///
+ [global::System.Text.Json.Serialization.JsonExtensionData]
+ public global::System.Collections.Generic.IDictionary AdditionalProperties { get; set; } = new global::System.Collections.Generic.Dictionary();
+
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ ///
+ /// URL-safe base64 ID of the accepted generation. Accepted by the
+ /// `GET /v2/generations/{generation_id}` polling endpoint.
+ ///
+ ///
+ /// Random seed. Set for reproducible generation.
+ /// Example: 12345
+ ///
+ ///
+ /// The resolved output width in pixels.
+ ///
+ ///
+ /// The resolved output height in pixels.
+ ///
+#if NET7_0_OR_GREATER
+ [global::System.Diagnostics.CodeAnalysis.SetsRequiredMembers]
+#endif
+ public ReframeImageNanoBananaProResponse(
+ string generationId,
+ int seed,
+ int width,
+ int height)
+ {
+ this.GenerationId = generationId ?? throw new global::System.ArgumentNullException(nameof(generationId));
+ this.Seed = seed;
+ this.Width = width;
+ this.Height = height;
+ }
+
+ ///
+ /// Initializes a new instance of the class.
+ ///
+ public ReframeImageNanoBananaProResponse()
+ {
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/src/libs/Ideogram/Generated/autosdk.generated-examples.json b/src/libs/Ideogram/Generated/autosdk.generated-examples.json
index f578e70..aea6699 100644
--- a/src/libs/Ideogram/Generated/autosdk.generated-examples.json
+++ b/src/libs/Ideogram/Generated/autosdk.generated-examples.json
@@ -1192,15 +1192,48 @@
"Order": 109,
"Title": "Precise edit with Ideogram 4.5",
"Slug": "post-precise-edit-image-v2-ideogram45",
- "Description": "Edit an image with Ideogram 4.5 and get the result back at that image\u0027s\nexact width and height. Upload the image as \u0060image\u0060 using\n\u0060multipart/form-data\u0060, with optional \u0060reference_images\u0060 and a \u0060mask\u0060.\nReturns results directly by default; set \u0060async\u0060 or supply a\n\u0060webhook_url\u0060 to get a \u0060generation_id\u0060 and poll\n\u0060GET /v2/generations/{generation_id}\u0060.",
+ "Description": "Edit an image with Ideogram 4.5 and get the result back at that image\u0027s\nexact width and height. Upload the image as \u0060image\u0060 using\n\u0060multipart/form-data\u0060, with optional \u0060reference_images\u0060 and a \u0060mask\u0060.\nReturns results directly by default; set \u0060async\u0060 or supply a\n\u0060webhook_url\u0060 to get a \u0060generation_id\u0060 and poll\n\u0060GET /v2/generations/{generation_id}\u0060.\n\n\u0060context_window\u0060 narrows the edit to one region of the image, so a\nlarge image keeps its detail: pass \u0060x,y,width,height\u0060, or \u0060auto\u0060\ntogether with a \u0060mask\u0060. The result always keeps the image\u0027s own width\nand height.",
"Language": "http",
- "Code": "### Precise edit with Ideogram 4.5\n# @name post_precise_edit_image_v2_ideogram45\nPOST {{host}}/v2/image/precise-edit/ideogram-4-5?dry_run=false\nAuthorization: Bearer {{token}}\nContent-Type: multipart/form-data; boundary=AutoSDKBoundary\nAccept: application/json\n\n--AutoSDKBoundary\nContent-Disposition: form-data; name=\u0022prompt\u0022\n\nstring\n--AutoSDKBoundary\nContent-Disposition: form-data; name=\u0022image_asset_identifier\u0022\n\nstring\n--AutoSDKBoundary\nContent-Disposition: form-data; name=\u0022image\u0022; filename=\u0022image.bin\u0022\nContent-Type: application/octet-stream\n\n\u003C ./image.bin\n--AutoSDKBoundary\nContent-Disposition: form-data; name=\u0022reference_image_asset_identifiers\u0022\n\n{\u0022asset_type\u0022:\u0022RESPONSE\u0022,\u0022asset_id\u0022:\u00227uS_VESkRI6O3-sVgHQp_A\u0022}\n--AutoSDKBoundary\nContent-Disposition: form-data; name=\u0022reference_images\u0022; filename=\u0022reference_images.bin\u0022\nContent-Type: application/octet-stream\n\n\u003C ./reference_images.bin\n--AutoSDKBoundary\nContent-Disposition: form-data; name=\u0022mask\u0022; filename=\u0022mask.bin\u0022\nContent-Type: application/octet-stream\n\n\u003C ./mask.bin\n--AutoSDKBoundary\nContent-Disposition: form-data; name=\u0022quality\u0022\n\nmedium\n--AutoSDKBoundary\nContent-Disposition: form-data; name=\u0022seed\u0022\n\n12345\n--AutoSDKBoundary\nContent-Disposition: form-data; name=\u0022num_images\u0022\n\n1\n--AutoSDKBoundary\nContent-Disposition: form-data; name=\u0022enable_copyright_detection\u0022\n\ntrue\n--AutoSDKBoundary\nContent-Disposition: form-data; name=\u0022async\u0022\n\nfalse\n--AutoSDKBoundary\nContent-Disposition: form-data; name=\u0022webhook_url\u0022\n\nhttps://api.example.com/webhooks/ideogram\n--AutoSDKBoundary\nContent-Disposition: form-data; name=\u0022private\u0022\n\ntrue\n--AutoSDKBoundary\nContent-Disposition: form-data; name=\u0022target_collection_id\u0022\n\nstring\n--AutoSDKBoundary--\n\n## Responses\n# 200\n# Description: The edited images (synchronous requests), or an acknowledgement to poll with \u0060GET /v2/generations/{generation_id}\u0060 (\u0060async\u0060 requests).\n# Content-Type: application/json\n# 400\n# Description: Invalid input provided.\n# 401\n# Description: Unauthorized.\n# 402\n# Description: Insufficient credits or quota.\n# Content-Type: application/json\n# 422\n# Description: The prompt did not pass safety checks.\n# 429\n# Description: Too many requests.\n# Content-Type: application/json\n# 500\n# Description: Internal server error.\n# 503\n# Description: The endpoint is temporarily unavailable.",
+ "Code": "### Precise edit with Ideogram 4.5\n# @name post_precise_edit_image_v2_ideogram45\nPOST {{host}}/v2/image/precise-edit/ideogram-4-5?dry_run=false\nAuthorization: Bearer {{token}}\nContent-Type: multipart/form-data; boundary=AutoSDKBoundary\nAccept: application/json\n\n--AutoSDKBoundary\nContent-Disposition: form-data; name=\u0022prompt\u0022\n\nstring\n--AutoSDKBoundary\nContent-Disposition: form-data; name=\u0022image_asset_identifier\u0022\n\nstring\n--AutoSDKBoundary\nContent-Disposition: form-data; name=\u0022image\u0022; filename=\u0022image.bin\u0022\nContent-Type: application/octet-stream\n\n\u003C ./image.bin\n--AutoSDKBoundary\nContent-Disposition: form-data; name=\u0022reference_image_asset_identifiers\u0022\n\n{\u0022asset_type\u0022:\u0022RESPONSE\u0022,\u0022asset_id\u0022:\u00227uS_VESkRI6O3-sVgHQp_A\u0022}\n--AutoSDKBoundary\nContent-Disposition: form-data; name=\u0022reference_images\u0022; filename=\u0022reference_images.bin\u0022\nContent-Type: application/octet-stream\n\n\u003C ./reference_images.bin\n--AutoSDKBoundary\nContent-Disposition: form-data; name=\u0022mask\u0022; filename=\u0022mask.bin\u0022\nContent-Type: application/octet-stream\n\n\u003C ./mask.bin\n--AutoSDKBoundary\nContent-Disposition: form-data; name=\u0022context_window\u0022\n\nnone\n--AutoSDKBoundary\nContent-Disposition: form-data; name=\u0022quality\u0022\n\nmedium\n--AutoSDKBoundary\nContent-Disposition: form-data; name=\u0022seed\u0022\n\n12345\n--AutoSDKBoundary\nContent-Disposition: form-data; name=\u0022num_images\u0022\n\n1\n--AutoSDKBoundary\nContent-Disposition: form-data; name=\u0022enable_copyright_detection\u0022\n\ntrue\n--AutoSDKBoundary\nContent-Disposition: form-data; name=\u0022async\u0022\n\nfalse\n--AutoSDKBoundary\nContent-Disposition: form-data; name=\u0022webhook_url\u0022\n\nhttps://api.example.com/webhooks/ideogram\n--AutoSDKBoundary\nContent-Disposition: form-data; name=\u0022private\u0022\n\ntrue\n--AutoSDKBoundary\nContent-Disposition: form-data; name=\u0022target_collection_id\u0022\n\nstring\n--AutoSDKBoundary--\n\n## Responses\n# 200\n# Description: The edited images (synchronous requests), or an acknowledgement to poll with \u0060GET /v2/generations/{generation_id}\u0060 (\u0060async\u0060 requests).\n# Content-Type: application/json\n# 400\n# Description: Invalid input provided.\n# 401\n# Description: Unauthorized.\n# 402\n# Description: Insufficient credits or quota.\n# Content-Type: application/json\n# 422\n# Description: The prompt did not pass safety checks.\n# 429\n# Description: Too many requests.\n# Content-Type: application/json\n# 500\n# Description: Internal server error.\n# 503\n# Description: The endpoint is temporarily unavailable.",
"Format": "http",
"OperationId": "post_precise_edit_image_v2_ideogram45",
"Setup": null
},
{
"Order": 110,
+ "Title": "Reframe an image, letting Ideogram pick the model",
+ "Slug": "post-reframe-image-auto",
+ "Description": "Reframe one image to a new aspect ratio without choosing a model.\nIdeogram selects the model best suited to the source and may route\ndifferent requests to different models; the request is billed at the\nchosen model\u0027s price. Supply either an existing Ideogram image asset\nor raw image bytes, but not both.\n\nThis operation is asynchronous. It returns as soon as the request is\naccepted; poll \u0060GET /v2/generations/{generation_id}\u0060 for completion\nand results.",
+ "Language": "http",
+ "Code": "### Reframe an image, letting Ideogram pick the model\n# @name post_reframe_image_auto\nPOST {{host}}/v2/image/reframe/auto?dry_run=false\nAuthorization: Bearer {{token}}\nContent-Type: multipart/form-data; boundary=AutoSDKBoundary\nAccept: application/json\n\n--AutoSDKBoundary\nContent-Disposition: form-data; name=\u0022image_asset_identifier\u0022\n\n{\u0022asset_type\u0022:\u0022RESPONSE\u0022,\u0022asset_id\u0022:\u00227uS_VESkRI6O3-sVgHQp_A\u0022}\n--AutoSDKBoundary\nContent-Disposition: form-data; name=\u0022image\u0022; filename=\u0022image.bin\u0022\nContent-Type: application/octet-stream\n\n\u003C ./image.bin\n--AutoSDKBoundary\nContent-Disposition: form-data; name=\u0022aspect_ratio\u0022\n\n969\n--AutoSDKBoundary\nContent-Disposition: form-data; name=\u0022private\u0022\n\ntrue\n--AutoSDKBoundary\nContent-Disposition: form-data; name=\u0022num_images\u0022\n\n1\n--AutoSDKBoundary\nContent-Disposition: form-data; name=\u0022seed\u0022\n\n12345\n--AutoSDKBoundary--\n\n## Responses\n# 200\n# Description: An acknowledgement to poll with \u0060GET /v2/generations/{generation_id}\u0060.\n# Content-Type: application/json\n# 400\n# Description: Invalid input provided.\n# 401\n# Description: Unauthorized.\n# 402\n# Description: Insufficient credits or quota.\n# Content-Type: application/json\n# 404\n# Description: The referenced source asset was not found.\n# 429\n# Description: Too many requests.\n# Content-Type: application/json\n# 500\n# Description: Internal server error.\n# 503\n# Description: The endpoint is temporarily unavailable.",
+ "Format": "http",
+ "OperationId": "post_reframe_image_auto",
+ "Setup": null
+ },
+ {
+ "Order": 111,
+ "Title": "Reframe an image with Bria Expand",
+ "Slug": "post-reframe-image-bria-expand",
+ "Description": "Extend one image to a new aspect ratio with Bria Expand. The source\npixels are kept exactly as they are, centered on the new canvas, and\nthe model paints only the added area. Supply either an existing\nIdeogram image asset or raw image bytes, but not both. The canvas is\nsized from the source so that the whole source fits.\n\nThis operation is asynchronous. It returns as soon as the request is\naccepted; poll \u0060GET /v2/generations/{generation_id}\u0060 for completion\nand results.",
+ "Language": "http",
+ "Code": "### Reframe an image with Bria Expand\n# @name post_reframe_image_bria_expand\nPOST {{host}}/v2/image/reframe/bria-expand?dry_run=false\nAuthorization: Bearer {{token}}\nContent-Type: multipart/form-data; boundary=AutoSDKBoundary\nAccept: application/json\n\n--AutoSDKBoundary\nContent-Disposition: form-data; name=\u0022image_asset_identifier\u0022\n\n{\u0022asset_type\u0022:\u0022RESPONSE\u0022,\u0022asset_id\u0022:\u00227uS_VESkRI6O3-sVgHQp_A\u0022}\n--AutoSDKBoundary\nContent-Disposition: form-data; name=\u0022image\u0022; filename=\u0022image.bin\u0022\nContent-Type: application/octet-stream\n\n\u003C ./image.bin\n--AutoSDKBoundary\nContent-Disposition: form-data; name=\u0022aspect_ratio\u0022\n\n969\n--AutoSDKBoundary\nContent-Disposition: form-data; name=\u0022private\u0022\n\ntrue\n--AutoSDKBoundary\nContent-Disposition: form-data; name=\u0022seed\u0022\n\n12345\n--AutoSDKBoundary--\n\n## Responses\n# 200\n# Description: An acknowledgement to poll with \u0060GET /v2/generations/{generation_id}\u0060.\n# Content-Type: application/json\n# 400\n# Description: Invalid input provided.\n# 401\n# Description: Unauthorized.\n# 402\n# Description: Insufficient credits or quota.\n# Content-Type: application/json\n# 404\n# Description: The referenced source asset was not found.\n# 429\n# Description: Too many requests.\n# Content-Type: application/json\n# 500\n# Description: Internal server error.\n# 503\n# Description: The endpoint is temporarily unavailable.",
+ "Format": "http",
+ "OperationId": "post_reframe_image_bria_expand",
+ "Setup": null
+ },
+ {
+ "Order": 112,
+ "Title": "Reframe an image with GPT Image 2.5 Flare",
+ "Slug": "post-reframe-image-gpt-image25-flare",
+ "Description": "Recompose one image for a new aspect ratio with GPT Image 2.5 Flare.\nSupply either an existing Ideogram image asset or raw image bytes, but\nnot both. The requested aspect ratio is resolved to the closest output\nsize the model supports.\n\nThis operation is asynchronous. It returns as soon as the request is\naccepted; poll \u0060GET /v2/generations/{generation_id}\u0060 for completion\nand results.",
+ "Language": "http",
+ "Code": "### Reframe an image with GPT Image 2.5 Flare\n# @name post_reframe_image_gpt_image25_flare\nPOST {{host}}/v2/image/reframe/gpt-image-2-5-flare?dry_run=false\nAuthorization: Bearer {{token}}\nContent-Type: multipart/form-data; boundary=AutoSDKBoundary\nAccept: application/json\n\n--AutoSDKBoundary\nContent-Disposition: form-data; name=\u0022image_asset_identifier\u0022\n\n{\u0022asset_type\u0022:\u0022RESPONSE\u0022,\u0022asset_id\u0022:\u00227uS_VESkRI6O3-sVgHQp_A\u0022}\n--AutoSDKBoundary\nContent-Disposition: form-data; name=\u0022image\u0022; filename=\u0022image.bin\u0022\nContent-Type: application/octet-stream\n\n\u003C ./image.bin\n--AutoSDKBoundary\nContent-Disposition: form-data; name=\u0022aspect_ratio\u0022\n\n969\n--AutoSDKBoundary\nContent-Disposition: form-data; name=\u0022quality\u0022\n\nauto\n--AutoSDKBoundary\nContent-Disposition: form-data; name=\u0022private\u0022\n\ntrue\n--AutoSDKBoundary\nContent-Disposition: form-data; name=\u0022num_images\u0022\n\n1\n--AutoSDKBoundary\nContent-Disposition: form-data; name=\u0022seed\u0022\n\n12345\n--AutoSDKBoundary--\n\n## Responses\n# 200\n# Description: An acknowledgement to poll with \u0060GET /v2/generations/{generation_id}\u0060.\n# Content-Type: application/json\n# 400\n# Description: Invalid input provided.\n# 401\n# Description: Unauthorized.\n# 402\n# Description: Insufficient credits or quota.\n# Content-Type: application/json\n# 404\n# Description: The referenced source asset was not found.\n# 429\n# Description: Too many requests.\n# Content-Type: application/json\n# 500\n# Description: Internal server error.\n# 503\n# Description: The endpoint is temporarily unavailable.",
+ "Format": "http",
+ "OperationId": "post_reframe_image_gpt_image25_flare",
+ "Setup": null
+ },
+ {
+ "Order": 113,
"Title": "Reframe with Ideogram 3.0",
"Slug": "post-reframe-image-v2-ideogram-v3",
"Description": "Expand an image to a new Ideogram 3.0 resolution, keeping the source\npixels in the center and filling the new area. Upload the source\n\u0060image\u0060 using \u0060multipart/form-data\u0060. Returns results directly by\ndefault; set \u0060async\u0060 to get a \u0060generation_id\u0060 and poll\n\u0060GET /v2/generations/{generation_id}\u0060.",
@@ -1211,7 +1244,7 @@
"Setup": null
},
{
- "Order": 111,
+ "Order": 114,
"Title": "Reframe with Nano Banana 2",
"Slug": "post-reframe-image-nano-banana2",
"Description": "Expand an image to a new aspect ratio with Nano Banana 2. Upload the\nsource \u0060image\u0060 using \u0060multipart/form-data\u0060. Always asynchronous:\nreturns a \u0060generation_id\u0060; poll \u0060GET /v2/generations/{generation_id}\u0060\nfor results.",
@@ -1222,7 +1255,18 @@
"Setup": null
},
{
- "Order": 112,
+ "Order": 115,
+ "Title": "Reframe an image with Nano Banana Pro",
+ "Slug": "post-reframe-image-nano-banana-pro",
+ "Description": "Recompose one image for a new aspect ratio with Nano Banana Pro, at a\n1K, 2K, or 4K output tier. Supply either an existing Ideogram image\nasset or raw image bytes, but not both. The requested aspect ratio is\nresolved to the closest dimensions the model supports at that tier.\n\nThis operation is asynchronous. It returns as soon as the request is\naccepted; poll \u0060GET /v2/generations/{generation_id}\u0060 for completion\nand results.",
+ "Language": "http",
+ "Code": "### Reframe an image with Nano Banana Pro\n# @name post_reframe_image_nano_banana_pro\nPOST {{host}}/v2/image/reframe/nano-banana-pro?dry_run=false\nAuthorization: Bearer {{token}}\nContent-Type: multipart/form-data; boundary=AutoSDKBoundary\nAccept: application/json\n\n--AutoSDKBoundary\nContent-Disposition: form-data; name=\u0022image_asset_identifier\u0022\n\n{\u0022asset_type\u0022:\u0022RESPONSE\u0022,\u0022asset_id\u0022:\u00227uS_VESkRI6O3-sVgHQp_A\u0022}\n--AutoSDKBoundary\nContent-Disposition: form-data; name=\u0022image\u0022; filename=\u0022image.bin\u0022\nContent-Type: application/octet-stream\n\n\u003C ./image.bin\n--AutoSDKBoundary\nContent-Disposition: form-data; name=\u0022aspect_ratio\u0022\n\n969\n--AutoSDKBoundary\nContent-Disposition: form-data; name=\u0022resolution_tier\u0022\n\n1K\n--AutoSDKBoundary\nContent-Disposition: form-data; name=\u0022private\u0022\n\ntrue\n--AutoSDKBoundary\nContent-Disposition: form-data; name=\u0022num_images\u0022\n\n1\n--AutoSDKBoundary\nContent-Disposition: form-data; name=\u0022seed\u0022\n\n12345\n--AutoSDKBoundary--\n\n## Responses\n# 200\n# Description: An acknowledgement to poll with \u0060GET /v2/generations/{generation_id}\u0060.\n# Content-Type: application/json\n# 400\n# Description: Invalid input provided.\n# 401\n# Description: Unauthorized.\n# 402\n# Description: Insufficient credits or quota.\n# Content-Type: application/json\n# 404\n# Description: The referenced source asset was not found.\n# 429\n# Description: Too many requests.\n# Content-Type: application/json\n# 500\n# Description: Internal server error.\n# 503\n# Description: The endpoint is temporarily unavailable.",
+ "Format": "http",
+ "OperationId": "post_reframe_image_nano_banana_pro",
+ "Setup": null
+ },
+ {
+ "Order": 116,
"Title": "Remix with Ideogram 3.0",
"Slug": "post-remix-image-v2-ideogram-v3",
"Description": "Transform an existing image with Ideogram 3.0, guided by a text\nprompt. Upload the source \u0060image\u0060 using \u0060multipart/form-data\u0060.\nReturns results directly by default; set \u0060async\u0060 or supply a\n\u0060webhook_url\u0060 to get a \u0060generation_id\u0060 and poll\n\u0060GET /v2/generations/{generation_id}\u0060.",
@@ -1233,7 +1277,7 @@
"Setup": null
},
{
- "Order": 113,
+ "Order": 117,
"Title": "Remix a consistent character with Ideogram 3.0",
"Slug": "post-remix-image-v2-ideogram-v3-character",
"Description": "Transform an existing image with Ideogram 3.0 so it features a\nconsistent character, guided by a text prompt. Upload the source\n\u0060image\u0060 and a \u0060character_reference_images\u0060 image (or use a saved\ncharacter) using \u0060multipart/form-data\u0060.\nReturns results directly by default; set \u0060async\u0060 or supply a\n\u0060webhook_url\u0060 to get a \u0060generation_id\u0060 and poll\n\u0060GET /v2/generations/{generation_id}\u0060.",
@@ -1244,7 +1288,7 @@
"Setup": null
},
{
- "Order": 114,
+ "Order": 118,
"Title": "Remix with a custom Ideogram 3.0 model",
"Slug": "post-remix-image-v2-ideogram-v3-custom-model",
"Description": "Transform an existing image with a custom Ideogram 3.0 model that your\nuser or organization can access, guided by a text prompt. Upload the\nsource \u0060image\u0060 using \u0060multipart/form-data\u0060.\nReturns results directly by default; set \u0060async\u0060 or supply a\n\u0060webhook_url\u0060 to get a \u0060generation_id\u0060 and poll\n\u0060GET /v2/generations/{generation_id}\u0060.",
@@ -1255,7 +1299,7 @@
"Setup": null
},
{
- "Order": 115,
+ "Order": 119,
"Title": "Remix with Ideogram 4.0",
"Slug": "post-remix-image-v2-ideogram-v4",
"Description": "Transform an existing image with Ideogram 4.0, guided by a text\nprompt. Upload the source \u0060image\u0060 using \u0060multipart/form-data\u0060.\nReturns results directly by default; set \u0060async\u0060 or supply a\n\u0060webhook_url\u0060 to get a \u0060generation_id\u0060 and poll\n\u0060GET /v2/generations/{generation_id}\u0060.",
@@ -1266,7 +1310,7 @@
"Setup": null
},
{
- "Order": 116,
+ "Order": 120,
"Title": "Upscale with Nano Banana Pro",
"Slug": "post-upscale-image-nano-banana-pro",
"Description": "Regenerate an image at a higher \u0060resolution_tier\u0060 (1K, 2K, or 4K) while\npreserving its content, composition, and style. Upload the source\n\u0060image\u0060 using \u0060multipart/form-data\u0060.\nReturns results directly by default; set \u0060async\u0060 or supply a\n\u0060webhook_url\u0060 to get a \u0060generation_id\u0060 and poll\n\u0060GET /v2/generations/{generation_id}\u0060.",
@@ -1277,7 +1321,7 @@
"Setup": null
},
{
- "Order": 117,
+ "Order": 121,
"Title": "Upscale with Topaz Bloom 2",
"Slug": "post-upscale-image-topaz-bloom2",
"Description": "Creatively upscale an image to 2x, 4x, or 8x its original resolution,\noptionally guided by a \u0060prompt\u0060. Upload the source \u0060image\u0060 using\n\u0060multipart/form-data\u0060.\nReturns results directly by default; set \u0060async\u0060 or supply a\n\u0060webhook_url\u0060 to get a \u0060generation_id\u0060 and poll\n\u0060GET /v2/generations/{generation_id}\u0060.",
@@ -1288,7 +1332,7 @@
"Setup": null
},
{
- "Order": 118,
+ "Order": 122,
"Title": "Upscale with Topaz Redefine",
"Slug": "post-upscale-image-topaz-redefine",
"Description": "Creatively upscale an image to 2x, 4x, or 8x its original resolution,\nguided by an optional \u0060prompt\u0060 or \u0060autoprompt\u0060. Upload the source\n\u0060image\u0060 using \u0060multipart/form-data\u0060.\nReturns results directly by default; set \u0060async\u0060 or supply a\n\u0060webhook_url\u0060 to get a \u0060generation_id\u0060 and poll\n\u0060GET /v2/generations/{generation_id}\u0060.",
@@ -1299,7 +1343,7 @@
"Setup": null
},
{
- "Order": 119,
+ "Order": 123,
"Title": "Upscale with Topaz Standard V2",
"Slug": "post-upscale-image-topaz-standard-v2",
"Description": "Upscale an image to 2x, 4x, or 8x its original resolution; no prompt is\nneeded. Upload the source \u0060image\u0060 using \u0060multipart/form-data\u0060.\nReturns results directly by default; set \u0060async\u0060 or supply a\n\u0060webhook_url\u0060 to get a \u0060generation_id\u0060 and poll\n\u0060GET /v2/generations/{generation_id}\u0060.",
@@ -1310,7 +1354,7 @@
"Setup": null
},
{
- "Order": 120,
+ "Order": 124,
"Title": "Upscale with Topaz Text Refine",
"Slug": "post-upscale-image-topaz-text-refine",
"Description": "Upscale an image to 2x, 4x, or 8x its original resolution; no prompt is\nneeded. Upload the source \u0060image\u0060 using \u0060multipart/form-data\u0060.\nReturns results directly by default; set \u0060async\u0060 or supply a\n\u0060webhook_url\u0060 to get a \u0060generation_id\u0060 and poll\n\u0060GET /v2/generations/{generation_id}\u0060.",
@@ -1321,7 +1365,7 @@
"Setup": null
},
{
- "Order": 121,
+ "Order": 125,
"Title": "Upscale with Topaz Wonder 3.5",
"Slug": "post-upscale-image-topaz-wonder35",
"Description": "Upscale an image to 2x, 4x, or 8x its original resolution, with\n\u0060enhancement_strength\u0060 controlling how strongly detail is reconstructed.\nUpload the source \u0060image\u0060 using \u0060multipart/form-data\u0060.\nReturns results directly by default; set \u0060async\u0060 or supply a\n\u0060webhook_url\u0060 to get a \u0060generation_id\u0060 and poll\n\u0060GET /v2/generations/{generation_id}\u0060.",
@@ -1332,7 +1376,7 @@
"Setup": null
},
{
- "Order": 122,
+ "Order": 126,
"Title": "Fetch the media bytes for an integration asset",
"Slug": "get-integration-asset-delivery",
"Description": "Redeems the short-lived signed delivery reference returned by an integration asset search and streams the asset\u0027s media bytes. The signed reference is the sole authorization for this endpoint; it is rejected once it expires or when the integration it names has changed.",
@@ -1343,7 +1387,7 @@
"Setup": null
},
{
- "Order": 123,
+ "Order": 127,
"Title": "List enabled integration types",
"Slug": "get-integrations",
"Description": "Lists the distinct integration types enabled for the authenticated organization. The response does not expose configured integration rows, provider details, configuration, or credentials.",
@@ -1354,7 +1398,7 @@
"Setup": "This example assumes \u0060using Ideogram;\u0060 is in scope and \u0060apiKey\u0060 contains the required credential."
},
{
- "Order": 124,
+ "Order": 128,
"Title": "Search assets from an enabled integration type",
"Slug": "post-integration-assets-search",
"Description": "Generated from OpenAPI examples.",
@@ -1365,7 +1409,7 @@
"Setup": "This example assumes \u0060using Ideogram;\u0060 is in scope and \u0060apiKey\u0060 contains the required credential."
},
{
- "Order": 125,
+ "Order": 129,
"Title": "Testing",
"Slug": "post-internal-testing",
"Description": "Just a testing endpoint",
@@ -1376,7 +1420,7 @@
"Setup": null
},
{
- "Order": 126,
+ "Order": 130,
"Title": "Add members to a specific organization",
"Slug": "add-organization-members",
"Description": "Generated from OpenAPI examples.",
@@ -1387,7 +1431,7 @@
"Setup": null
},
{
- "Order": 127,
+ "Order": 131,
"Title": "Cancel a pending invite for an organization",
"Slug": "cancel-organization-invite",
"Description": "Generated from OpenAPI examples.",
@@ -1398,7 +1442,7 @@
"Setup": null
},
{
- "Order": 128,
+ "Order": 132,
"Title": "Creates an API key.",
"Slug": "create-api-key",
"Description": "Generated from OpenAPI examples.",
@@ -1409,7 +1453,7 @@
"Setup": "This example assumes \u0060using Ideogram;\u0060 is in scope and \u0060apiKey\u0060 contains the required credential."
},
{
- "Order": 129,
+ "Order": 133,
"Title": "Create an API key for a specific organization",
"Slug": "create-api-key-v2",
"Description": "Generated from OpenAPI examples.",
@@ -1420,7 +1464,7 @@
"Setup": null
},
{
- "Order": 130,
+ "Order": 134,
"Title": "Create a payment setup session for inline card collection.",
"Slug": "create-api-payment",
"Description": "Returns a client_secret for the org\u0027s payment customer so the inline payment\nmodal can save a card without leaving the app.\n\nSoft-deprecated: the inline Elements flow was removed in the Stripe.js\neager-bundle incident (2026-05-20). New clients should use the\nstripe_payment_setup_url field on ManageApiStripeSubscriptionResponse, which\nreturns a hosted Stripe Checkout URL instead. This endpoint will be formally\ndeprecated and then removed once no callers reference it.",
@@ -1431,7 +1475,7 @@
"Setup": null
},
{
- "Order": 131,
+ "Order": 135,
"Title": "Delete an API key.",
"Slug": "delete-single-api-key",
"Description": "Generated from OpenAPI examples.",
@@ -1442,7 +1486,7 @@
"Setup": "This example assumes \u0060using Ideogram;\u0060 is in scope and \u0060apiKey\u0060 contains the required credential."
},
{
- "Order": 132,
+ "Order": 136,
"Title": "Demote admins back to member role in an ENTERPRISE_PREPAID or ENTERPRISE_API organization",
"Slug": "demote-organization-admins",
"Description": "Generated from OpenAPI examples.",
@@ -1453,7 +1497,7 @@
"Setup": null
},
{
- "Order": 133,
+ "Order": 137,
"Title": "Lifetime credit totals for the API user\u0027s account.",
"Slug": "get-api-credit-summary",
"Description": "Returns the lifetime credit KPIs (consumed, expired, issued) used to\nrender the API credit dashboard strip. All values default to $0 when\nMetronome is unavailable so the FE can always render.",
@@ -1464,7 +1508,7 @@
"Setup": null
},
{
- "Order": 134,
+ "Order": 138,
"Title": "Retrieve current API keys and their respective data.",
"Slug": "get-api-keys",
"Description": "Generated from OpenAPI examples.",
@@ -1475,7 +1519,7 @@
"Setup": "This example assumes \u0060using Ideogram;\u0060 is in scope and \u0060apiKey\u0060 contains the required credential."
},
{
- "Order": 135,
+ "Order": 139,
"Title": "Retrieve API keys for a specific organization",
"Slug": "get-api-keys-v2",
"Description": "Generated from OpenAPI examples.",
@@ -1486,7 +1530,7 @@
"Setup": null
},
{
- "Order": 136,
+ "Order": 140,
"Title": "Get search results for user handles with suggestions for a particular organization.",
"Slug": "get-api-organization-user-suggestions",
"Description": "Generated from OpenAPI examples.",
@@ -1497,7 +1541,7 @@
"Setup": null
},
{
- "Order": 137,
+ "Order": 141,
"Title": "Retrieve the user\u0027s current API profiles",
"Slug": "get-api-profiles",
"Description": "Generated from OpenAPI examples.",
@@ -1508,7 +1552,7 @@
"Setup": "This example assumes \u0060using Ideogram;\u0060 is in scope and \u0060apiKey\u0060 contains the required credential."
},
{
- "Order": 138,
+ "Order": 142,
"Title": "Retrieve data relevant to connecting to Stripe.",
"Slug": "get-api-stripe-subscription",
"Description": "Generated from OpenAPI examples.",
@@ -1519,7 +1563,7 @@
"Setup": null
},
{
- "Order": 139,
+ "Order": 143,
"Title": "Retrieve data relevant to creating an API subscription.",
"Slug": "get-api-subscription",
"Description": "Generated from OpenAPI examples.",
@@ -1530,7 +1574,7 @@
"Setup": null
},
{
- "Order": 140,
+ "Order": 144,
"Title": "Retrieve the latest terms of service for API usage.",
"Slug": "get-api-terms",
"Description": "Generated from OpenAPI examples.",
@@ -1541,7 +1585,7 @@
"Setup": "This example assumes \u0060using Ideogram;\u0060 is in scope and \u0060apiKey\u0060 contains the required credential."
},
{
- "Order": 141,
+ "Order": 145,
"Title": "Retrieve the Stripe billing portal URL for a specific organization",
"Slug": "get-organization-billing-portal",
"Description": "Generated from OpenAPI examples.",
@@ -1552,7 +1596,7 @@
"Setup": null
},
{
- "Order": 142,
+ "Order": 146,
"Title": "Retrieve members of a specific organization",
"Slug": "get-organization-members",
"Description": "Returns both active members and pending invites for the organization. A pending invite is identified by a non-null invite_status (e.g. PENDING); active members have a null invite_status.",
@@ -1563,7 +1607,7 @@
"Setup": null
},
{
- "Order": 143,
+ "Order": 147,
"Title": "Retrieve usage information segmented by time period with tool-specific breakdowns",
"Slug": "get-usage-info",
"Description": "Generated from OpenAPI examples.",
@@ -1574,7 +1618,7 @@
"Setup": null
},
{
- "Order": 144,
+ "Order": 148,
"Title": "Retrieve user credit information and spending metrics",
"Slug": "get-user-credits",
"Description": "Generated from OpenAPI examples.",
@@ -1585,7 +1629,7 @@
"Setup": null
},
{
- "Order": 145,
+ "Order": 149,
"Title": "Retrieve user spend commit information",
"Slug": "get-user-spend-commit-info",
"Description": "Generated from OpenAPI examples.",
@@ -1596,7 +1640,7 @@
"Setup": null
},
{
- "Order": 146,
+ "Order": 150,
"Title": "Retrieve invoices for a specific organization",
"Slug": "list-organization-invoices",
"Description": "Generated from OpenAPI examples.",
@@ -1607,7 +1651,7 @@
"Setup": null
},
{
- "Order": 147,
+ "Order": 151,
"Title": "Add credits to an API user\u0027s account.",
"Slug": "post-add-credits-for-api",
"Description": "Generated from OpenAPI examples.",
@@ -1618,7 +1662,7 @@
"Setup": null
},
{
- "Order": 148,
+ "Order": 152,
"Title": "Update API subscription settings",
"Slug": "post-api-subscription",
"Description": "Generated from OpenAPI examples.",
@@ -1629,7 +1673,7 @@
"Setup": null
},
{
- "Order": 149,
+ "Order": 153,
"Title": "Accept terms",
"Slug": "post-api-terms",
"Description": "Generated from OpenAPI examples.",
@@ -1640,7 +1684,7 @@
"Setup": "This example assumes \u0060using Ideogram;\u0060 is in scope and \u0060apiKey\u0060 contains the required credential."
},
{
- "Order": 150,
+ "Order": 154,
"Title": "Promote members to ADMIN role in an ENTERPRISE_PREPAID or ENTERPRISE_API organization",
"Slug": "promote-organization-admins",
"Description": "Generated from OpenAPI examples.",
@@ -1651,7 +1695,7 @@
"Setup": null
},
{
- "Order": 151,
+ "Order": 155,
"Title": "Remove members from a specific organization",
"Slug": "remove-organization-members",
"Description": "Generated from OpenAPI examples.",
@@ -1662,7 +1706,7 @@
"Setup": null
},
{
- "Order": 152,
+ "Order": 156,
"Title": "Resend a pending invite for an organization",
"Slug": "resend-organization-invite",
"Description": "Generated from OpenAPI examples.",
@@ -1673,7 +1717,7 @@
"Setup": null
},
{
- "Order": 153,
+ "Order": 157,
"Title": "Update a single field on an organization\u0027s API properties.",
"Slug": "update-organization-api-properties",
"Description": "Lets an organization owner toggle API-only settings such as\ncopyright_detection_enabled. Updates only the fields explicitly present\nin the request body; absent fields are left unchanged.",
@@ -1684,7 +1728,7 @@
"Setup": null
},
{
- "Order": 154,
+ "Order": 158,
"Title": "Update an API key\u0027s user-supplied label.",
"Slug": "update-single-api-key",
"Description": "Generated from OpenAPI examples.",
@@ -1695,7 +1739,7 @@
"Setup": "This example assumes \u0060using Ideogram;\u0060 is in scope and \u0060apiKey\u0060 contains the required credential."
},
{
- "Order": 155,
+ "Order": 159,
"Title": "Get stale mini-app preview entries",
"Slug": "get-stale-preview-mini-apps",
"Description": "Returns preview ids whose most recent successful publish is older than the cutoff. This read-only endpoint does not delete preview entries.",
@@ -1706,7 +1750,7 @@
"Setup": null
},
{
- "Order": 156,
+ "Order": 160,
"Title": "Publish a mini-app catalog entry",
"Slug": "publish-mini-app",
"Description": "Publishes a mini-app\u0027s catalog entry. Called by the mini-apps deploy pipeline after a deploy to register or refresh a single app, keyed by its unique slug. Re-publishing an existing app refreshes the deploy-managed fields (label, description, embed mode, scopes, image-input support, deployment details, and website) while leaving administrator-managed settings and artwork untouched. Artwork from the request is used only when creating a new app.",
@@ -1717,7 +1761,7 @@
"Setup": "This example assumes \u0060using Ideogram;\u0060 is in scope and \u0060apiKey\u0060 contains the required credential."
},
{
- "Order": 157,
+ "Order": 161,
"Title": "Publish a mini-app preview entry",
"Slug": "publish-preview-mini-app",
"Description": "Publishes a mini-app preview entry. Called by the mini-apps preview deploy pipeline to register a throwaway preview deploy, keyed by its unique preview id. Re-publishing an existing preview id refreshes every deploy-managed field. Preview entries are independent from the main catalog: they carry no slug, owner, or membership gating, and anyone with the preview link can access the app.",
@@ -1728,7 +1772,7 @@
"Setup": "This example assumes \u0060using Ideogram;\u0060 is in scope and \u0060apiKey\u0060 contains the required credential."
},
{
- "Order": 158,
+ "Order": 162,
"Title": "Unpublish a mini-app preview entry",
"Slug": "unpublish-preview-mini-app",
"Description": "Deletes a mini-app preview entry by its preview id. Repeated requests succeed when the entry is already absent, so preview teardown can retry safely.",
@@ -1739,7 +1783,7 @@
"Setup": null
},
{
- "Order": 159,
+ "Order": 163,
"Title": "Get model details",
"Slug": "get-custom-model",
"Description": "Get detailed information about a specific custom model. The user must either own the model or the model must be shared with the user\u0027s organization via the model registry. Returns 404 if the model is not found or not accessible.",
@@ -1750,7 +1794,7 @@
"Setup": null
},
{
- "Order": 160,
+ "Order": 164,
"Title": "List models",
"Slug": "list-custom-models",
"Description": "Lists custom models for the authenticated user. Use the \u0060scope\u0060 parameter to control which models are returned. If omitted, returns both owned models and models shared with the user\u0027s organization via the model registry. \u0060owned\u0060 returns only models created by the user. \u0060shared\u0060 returns only models shared via the model registry, excluding the user\u0027s own models.",
@@ -1761,7 +1805,7 @@
"Setup": "This example assumes \u0060using Ideogram;\u0060 is in scope and \u0060apiKey\u0060 contains the required credential."
},
{
- "Order": 161,
+ "Order": 165,
"Title": "Train a custom Ideogram v3 model",
"Slug": "train-model-v3",
"Description": "Start training a custom Ideogram v3 model from a dataset using default hyperparameters. The dataset must contain at least 15 images and a maximum of 100 images.",
@@ -1772,7 +1816,7 @@
"Setup": "This example assumes \u0060using Ideogram;\u0060 is in scope and \u0060apiKey\u0060 contains the required credential."
},
{
- "Order": 162,
+ "Order": 166,
"Title": "Train a custom Ideogram v3 model with advanced hyperparameters",
"Slug": "train-model-v3-advanced",
"Description": "Start training a custom Ideogram v3 model from a dataset with caller-supplied hyperparameters (training steps, LoRA rank, EMA decay, learning rate). All hyperparameters are optional and fall back to defaults when omitted. The dataset must contain at least 15 images and a maximum of 100 images. Returns the model ID and training status.",
@@ -1783,7 +1827,7 @@
"Setup": "This example assumes \u0060using Ideogram;\u0060 is in scope and \u0060apiKey\u0060 contains the required credential."
},
{
- "Order": 163,
+ "Order": 167,
"Title": "Train a custom Ideogram v4 model",
"Slug": "train-model-v4",
"Description": "Start training a custom Ideogram v4 model from a dataset using default hyperparameters. The dataset must contain at least 15 images and a maximum of 100 images.",
@@ -1794,7 +1838,7 @@
"Setup": "This example assumes \u0060using Ideogram;\u0060 is in scope and \u0060apiKey\u0060 contains the required credential."
},
{
- "Order": 164,
+ "Order": 168,
"Title": "Train a custom Ideogram v4 model with advanced hyperparameters",
"Slug": "train-model-v4-advanced",
"Description": "Start training a custom Ideogram v4 model from a dataset with caller-supplied hyperparameters (training steps, LoRA rank, EMA decay, learning rate). All hyperparameters are optional and fall back to defaults when omitted. The dataset must contain at least 15 images and a maximum of 100 images. Returns the model ID and training status.",
@@ -1805,7 +1849,7 @@
"Setup": "This example assumes \u0060using Ideogram;\u0060 is in scope and \u0060apiKey\u0060 contains the required credential."
},
{
- "Order": 165,
+ "Order": 169,
"Title": "Remove an object",
"Slug": "post-remove-object-from-v2-assets",
"Description": "Remove a masked object from an image. Upload the source \u0060image\u0060 and a\n\u0060mask\u0060 of the same size using \u0060multipart/form-data\u0060. Returns a\n\u0060generation_id\u0060; poll \u0060GET /v2/generations/{generation_id}\u0060 for the\nresult.",
@@ -1816,7 +1860,7 @@
"Setup": null
},
{
- "Order": 166,
+ "Order": 170,
"Title": "Generate Magic Prompt",
"Slug": "post-magic-prompt",
"Description": "Transforms basic prompts into a magic prompt. Internal use only (feature flagged). TODO: update description if enabled externally.",
@@ -1827,7 +1871,7 @@
"Setup": null
},
{
- "Order": 167,
+ "Order": 171,
"Title": "Generate a Magic Prompt with Ideogram 4.0",
"Slug": "post-magic-prompt-v4",
"Description": "Transforms a basic prompt into an enhanced Ideogram 4.0 magic prompt.\nThe magic prompt model version is fixed; callers cannot select it.\nWhen \u0060aspect_ratio\u0060 is \u0060AUTO\u0060 (the default), the model selects the most\nsuitable aspect ratio for the prompt and returns it in the response.",
@@ -1838,7 +1882,7 @@
"Setup": "This example assumes \u0060using Ideogram;\u0060 is in scope and \u0060apiKey\u0060 contains the required credential."
},
{
- "Order": 168,
+ "Order": 172,
"Title": "Check whether content was created by Ideogram",
"Slug": "post-provenance-verify",
"Description": "Checks image content for an Ideogram provenance manifest (C2PA Content\nCredentials) and returns the disclosure it carries: the provider name,\nthe generating system and its version, the creation time, and the\ncontent\u0027s unique identifier.\n\nUpload the image to verify as the \u0060content\u0060 part.\n\nThis endpoint is public and unauthenticated \u2014 no API key is required.\nSubmitted content is analyzed in memory and never stored.",
@@ -1849,7 +1893,7 @@
"Setup": null
},
{
- "Order": 169,
+ "Order": 173,
"Title": "Remove background",
"Slug": "post-remove-background-v2",
"Description": "Remove the background from an image and return the foreground as a\ntransparent PNG. Upload the source \u0060image\u0060 using \u0060multipart/form-data\u0060.\nReturns the result directly by default; set \u0060async\u0060 to get a\n\u0060generation_id\u0060 and poll \u0060GET /v2/generations/{generation_id}\u0060.",
@@ -1860,7 +1904,7 @@
"Setup": null
},
{
- "Order": 170,
+ "Order": 174,
"Title": "Replace background with GPT Image 2",
"Slug": "post-replace-background",
"Description": "Replace the background of an image from a text prompt while keeping the\nautomatically detected foreground subject; no mask is needed. Upload\nthe source \u0060image\u0060 using \u0060multipart/form-data\u0060.\nReturns a \u0060generation_id\u0060; poll \u0060GET /v2/generations/{generation_id}\u0060\nor supply a \u0060webhook_url\u0060.",
@@ -1871,7 +1915,7 @@
"Setup": null
},
{
- "Order": 171,
+ "Order": 175,
"Title": "Replace background with Ideogram 3.0",
"Slug": "post-replace-background-ideogram-v3",
"Description": "Replace the background of an image from a text prompt with Ideogram 3.0,\nkeeping the automatically detected foreground subject; no mask is\nneeded. Upload the source \u0060image\u0060 using \u0060multipart/form-data\u0060.\nReturns a \u0060generation_id\u0060; poll \u0060GET /v2/generations/{generation_id}\u0060\nor supply a \u0060webhook_url\u0060.",
@@ -1882,7 +1926,7 @@
"Setup": null
},
{
- "Order": 172,
+ "Order": 176,
"Title": "Upscale with automatic model selection",
"Slug": "post-upscale",
"Description": "Upscale an image to 2x, 4x, or 8x its original resolution with a model\nIdeogram picks per request; the choice may change over time. Upload the\nsource \u0060image\u0060 using \u0060multipart/form-data\u0060.\nReturns results directly by default; set \u0060async\u0060 or supply a\n\u0060webhook_url\u0060 to get a \u0060generation_id\u0060 and poll\n\u0060GET /v2/generations/{generation_id}\u0060.",
@@ -1893,7 +1937,7 @@
"Setup": null
},
{
- "Order": 173,
+ "Order": 177,
"Title": "Reference to video with MiniMax H3",
"Slug": "post-edit-video-minimax-h3-reference-to-video",
"Description": "Produce a video from a text prompt and optional reference media with\nMiniMax H3. Upload \u0060reference_images\u0060 and \u0060reference_audios\u0060 using\n\u0060multipart/form-data\u0060, and address them in the prompt by position\n(\u0060Image 1\u0060, \u0060Audio 1\u0060, \u2026). Returns a \u0060generation_id\u0060; poll\n\u0060GET /v2/generations/{generation_id}\u0060 or supply a \u0060webhook_url\u0060.",
@@ -1904,7 +1948,7 @@
"Setup": null
},
{
- "Order": 174,
+ "Order": 178,
"Title": "Edit video with Seedance 2.0",
"Slug": "post-edit-video-seed-dance2",
"Description": "Edit a video you already have stored with Ideogram by replacing part of\nit. Reference the source video with \u0060video_asset_identifier\u0060 and mark the\nspan to replace with \u0060start_frame_time\u0060 and \u0060end_frame_time\u0060, in seconds.\nSeedance 2.0 generates a new clip for that span from your prompt, and the\nresult is the source video with the generated clip spliced in over the\nspan: everything before \u0060start_frame_time\u0060, then the generated clip, then\neverything from \u0060end_frame_time\u0060 on. That edited video is the asset the\nrequest produces.\n\n\u0060is_start_frame_included\u0060 and \u0060is_end_frame_included\u0060 anchor the generated\nclip on the span\u0027s own end frames, so it joins the surrounding footage\ninstead of cutting to something unrelated. Anchoring the start opens the\nclip on the frame already at \u0060start_frame_time\u0060; anchoring the end lands\nit on the frame at \u0060end_frame_time\u0060; anchoring both joins at each seam. At\nleast one must be anchored.\n\nThe generated clip is used at its own length, which the model rarely makes\nexactly the span\u0027s, so the edited video is usually a different length from\nthe source. Request a \u0060duration\u0060 close to the span to keep them near each\nother. The clip is scaled and cropped to fill the source\u0027s frame and\nconformed to its frame rate, so resolution and aspect ratio follow the\nsource rather than being requested.\n\nVideo generation always runs asynchronously: the response returns as\nsoon as the request is accepted and carries only a \u0060generation_id\u0060.\nPoll for completion and results with\n\u0060GET /v2/generations/{generation_id}\u0060 using that id, or supply a\n\u0060webhook_url\u0060 to have the finished result POSTed to your server\ninstead.\n\nVideo links are available for a limited period of time; download the\nvideo if you want to keep it.",
@@ -1915,7 +1959,7 @@
"Setup": "This example assumes \u0060using Ideogram;\u0060 is in scope and \u0060apiKey\u0060 contains the required credential."
},
{
- "Order": 175,
+ "Order": 179,
"Title": "Image to video with Kling v3 Standard",
"Slug": "post-generate-video-kling-v3-standard-image-to-video",
"Description": "Generate a video from a first-frame image and a text prompt with Kling\nv3 Standard. Upload the first frame as \u0060image\u0060, and optionally a final\nframe as \u0060end_image\u0060, using \u0060multipart/form-data\u0060.\nReturns a \u0060generation_id\u0060; poll \u0060GET /v2/generations/{generation_id}\u0060\nor supply a \u0060webhook_url\u0060.",
@@ -1926,7 +1970,7 @@
"Setup": null
},
{
- "Order": 176,
+ "Order": 180,
"Title": "Text to video with Kling v3 Standard",
"Slug": "post-generate-video-kling-v3-standard-text-to-video",
"Description": "Generate a video from a text prompt with Kling v3 Standard.\nReturns a \u0060generation_id\u0060; poll \u0060GET /v2/generations/{generation_id}\u0060\nor supply a \u0060webhook_url\u0060.",
@@ -1937,7 +1981,7 @@
"Setup": "This example assumes \u0060using Ideogram;\u0060 is in scope and \u0060apiKey\u0060 contains the required credential."
},
{
- "Order": 177,
+ "Order": 181,
"Title": "Image to video with MiniMax H3",
"Slug": "post-generate-video-minimax-h3-image-to-video",
"Description": "Generate a video from a first-frame image and a text prompt with\nMiniMax H3. Upload the first frame as \u0060image\u0060, and optionally a final\nframe as \u0060end_image\u0060, using \u0060multipart/form-data\u0060.\nReturns a \u0060generation_id\u0060; poll \u0060GET /v2/generations/{generation_id}\u0060\nor supply a \u0060webhook_url\u0060.",
@@ -1948,7 +1992,7 @@
"Setup": null
},
{
- "Order": 178,
+ "Order": 182,
"Title": "Text to video with MiniMax H3",
"Slug": "post-generate-video-minimax-h3-text-to-video",
"Description": "Generate a video from a text prompt with MiniMax H3.\nReturns a \u0060generation_id\u0060; poll \u0060GET /v2/generations/{generation_id}\u0060\nor supply a \u0060webhook_url\u0060.",
@@ -1959,7 +2003,7 @@
"Setup": "This example assumes \u0060using Ideogram;\u0060 is in scope and \u0060apiKey\u0060 contains the required credential."
},
{
- "Order": 179,
+ "Order": 183,
"Title": "Image to video with Seedance 2.5",
"Slug": "post-generate-video-seed-dance25-image-to-video",
"Description": "Generate a video from a first-frame image and a text prompt with\nSeedance 2.5. Upload the first frame as \u0060image\u0060, and optionally a final\nframe as \u0060end_image\u0060, using \u0060multipart/form-data\u0060.\nReturns a \u0060generation_id\u0060; poll \u0060GET /v2/generations/{generation_id}\u0060\nor supply a \u0060webhook_url\u0060.",
@@ -1970,7 +2014,7 @@
"Setup": null
},
{
- "Order": 180,
+ "Order": 184,
"Title": "Reference to video with Seedance 2.5",
"Slug": "post-generate-video-seed-dance25-reference-to-video",
"Description": "Generate a video from a text prompt and reference media with\nSeedance 2.5. Upload at least one image in \u0060reference_images\u0060, plus optional\n\u0060reference_audios\u0060, using \u0060multipart/form-data\u0060.\nReturns a \u0060generation_id\u0060; poll \u0060GET /v2/generations/{generation_id}\u0060\nor supply a \u0060webhook_url\u0060.",
@@ -1981,7 +2025,7 @@
"Setup": null
},
{
- "Order": 181,
+ "Order": 185,
"Title": "Text to video with Seedance 2.5",
"Slug": "post-generate-video-seed-dance25-text-to-video",
"Description": "Generate a video from a text prompt with Seedance 2.5, at up to 1080p and\n30 seconds. Returns a \u0060generation_id\u0060; poll \u0060GET /v2/generations/{generation_id}\u0060\nor supply a \u0060webhook_url\u0060.",
@@ -1992,7 +2036,7 @@
"Setup": "This example assumes \u0060using Ideogram;\u0060 is in scope and \u0060apiKey\u0060 contains the required credential."
},
{
- "Order": 182,
+ "Order": 186,
"Title": "Image to video with Seedance 2.0",
"Slug": "post-generate-video-seed-dance2-image-to-video",
"Description": "Generate one or more videos from a first-frame image and a text prompt\nwith Seedance 2.0. Upload the first frame as \u0060image\u0060, and optionally a final\nframe as \u0060end_image\u0060, using \u0060multipart/form-data\u0060.\nReturns a \u0060generation_id\u0060; poll \u0060GET /v2/generations/{generation_id}\u0060\nor supply a \u0060webhook_url\u0060.",
@@ -2003,7 +2047,7 @@
"Setup": null
},
{
- "Order": 183,
+ "Order": 187,
"Title": "Reference to video with Seedance 2.0",
"Slug": "post-generate-video-seed-dance2-reference-to-video",
"Description": "Generate a video from a text prompt and reference media with\nSeedance 2.0. Upload at least one image in \u0060reference_images\u0060, plus optional\n\u0060reference_audios\u0060, using \u0060multipart/form-data\u0060.\nReturns a \u0060generation_id\u0060; poll \u0060GET /v2/generations/{generation_id}\u0060\nor supply a \u0060webhook_url\u0060.",
@@ -2014,7 +2058,7 @@
"Setup": null
},
{
- "Order": 184,
+ "Order": 188,
"Title": "Text to video with Seedance 2.0",
"Slug": "post-generate-video-seed-dance2-text-to-video",
"Description": "Generate one or more videos from a text prompt with Seedance 2.0.\nReturns a \u0060generation_id\u0060; poll \u0060GET /v2/generations/{generation_id}\u0060\nor supply a \u0060webhook_url\u0060.",
@@ -2025,7 +2069,7 @@
"Setup": "This example assumes \u0060using Ideogram;\u0060 is in scope and \u0060apiKey\u0060 contains the required credential."
},
{
- "Order": 185,
+ "Order": 189,
"Title": "Turn a still image into a subtle looping video",
"Slug": "post-living-image",
"Description": "Animates one image into a short, loop-ready clip for use as a living background. The camera stays fixed and only the parts of the scene that would move in real life move: water, light, mist, particles, fabric, creatures. Ideogram inspects the image and writes the motion prompt, so the request needs only the image.\nVideo generation runs asynchronously. Poll \u0060GET /v1/generations/{generation_id}\u0060 with the returned \u0060generation_id\u0060 until the generation completes or fails.",
@@ -2036,7 +2080,7 @@
"Setup": "This example assumes \u0060using Ideogram;\u0060 is in scope and \u0060apiKey\u0060 contains the required credential."
},
{
- "Order": 186,
+ "Order": 190,
"Title": "Product 360 Video",
"Slug": "post-product360-video",
"Description": "Animates one product image through a complete turntable revolution and returns to the starting pose so the result loops cleanly.\nVideo generation runs asynchronously. Poll \u0060GET /v2/generations/{generation_id}\u0060 with the returned \u0060generation_id\u0060 until the generation completes or fails.",
@@ -2047,7 +2091,7 @@
"Setup": "This example assumes \u0060using Ideogram;\u0060 is in scope and \u0060apiKey\u0060 contains the required credential."
},
{
- "Order": 187,
+ "Order": 191,
"Title": "Describe",
"Slug": "post-describe",
"Description": "Describe an image.\n\nSupported image formats include JPEG, PNG, and WebP.",
@@ -2058,7 +2102,7 @@
"Setup": null
},
{
- "Order": 188,
+ "Order": 192,
"Title": "Describe with Ideogram 4.0",
"Slug": "post-describe-v4",
"Description": "Describe an image with Ideogram 4.0 and return a structured\n\u0060V4JsonPrompt\u0060. The returned \u0060json_prompt\u0060 is a working JSON prompt\nthat can be passed directly as \u0060json_prompt\u0060 to the\n\u0060/v1/ideogram-v4/generate\u0060 family of endpoints.\n\nSupported image formats include JPEG, PNG, and WebP.",
@@ -2069,7 +2113,7 @@
"Setup": null
},
{
- "Order": 189,
+ "Order": 193,
"Title": "Get the public keys used to verify webhook signatures",
"Slug": "get-webhook-signing-jwks",
"Description": "Returns the set of Ed25519 public keys Ideogram uses to sign outbound\nwebhook payloads. Customers verify incoming webhooks by recomputing the\ncanonical signed message (\u0060request_id\\nuser_id\\ntimestamp\\nsha256_hex(body)\u0060)\nand checking the \u0060X-Ideogram-Webhook-Signature\u0060 header against any key\nin this document.\n\nThe document includes the current signing key plus any keys recently\nrotated out, so signatures already in flight remain verifiable across\nrotations. Cache for up to 24 hours; refresh sooner if a signature\nfails to verify against the cached set.\n\nThis endpoint is public and unauthenticated \u2014 no API key is required.",
diff --git a/src/libs/Ideogram/openapi.json b/src/libs/Ideogram/openapi.json
index bd2e5d3..ba185c7 100644
--- a/src/libs/Ideogram/openapi.json
+++ b/src/libs/Ideogram/openapi.json
@@ -9702,7 +9702,7 @@
},
"/v2/image/precise-edit/ideogram-4-5": {
"post": {
- "description": "Edit an image with Ideogram 4.5 and get the result back at that image's\nexact width and height. Upload the image as `image` using\n`multipart/form-data`, with optional `reference_images` and a `mask`.\nReturns results directly by default; set `async` or supply a\n`webhook_url` to get a `generation_id` and poll\n`GET /v2/generations/{generation_id}`.\n",
+ "description": "Edit an image with Ideogram 4.5 and get the result back at that image's\nexact width and height. Upload the image as `image` using\n`multipart/form-data`, with optional `reference_images` and a `mask`.\nReturns results directly by default; set `async` or supply a\n`webhook_url` to get a `generation_id` and poll\n`GET /v2/generations/{generation_id}`.\n\n`context_window` narrows the edit to one region of the image, so a\nlarge image keeps its detail: pass `x,y,width,height`, or `auto`\ntogether with a `mask`. The result always keeps the image's own width\nand height.\n",
"operationId": "post_precise_edit_image_v2_ideogram45",
"parameters": [
{
@@ -9796,10 +9796,10 @@
"x-openapi-router-controller": "external_api.generated.openapi.controllers.images_precise_edit_controller"
}
},
- "/v2/image/reframe/ideogram-3": {
+ "/v2/image/reframe/auto": {
"post": {
- "description": "Expand an image to a new Ideogram 3.0 resolution, keeping the source\npixels in the center and filling the new area. Upload the source\n`image` using `multipart/form-data`. Returns results directly by\ndefault; set `async` to get a `generation_id` and poll\n`GET /v2/generations/{generation_id}`.\n",
- "operationId": "post_reframe_image_v2_ideogram_v3",
+ "description": "Reframe one image to a new aspect ratio without choosing a model.\nIdeogram selects the model best suited to the source and may route\ndifferent requests to different models; the request is billed at the\nchosen model's price. Supply either an existing Ideogram image asset\nor raw image bytes, but not both.\n\nThis operation is asynchronous. It returns as soon as the request is\naccepted; poll `GET /v2/generations/{generation_id}` for completion\nand results.\n",
+ "operationId": "post_reframe_image_auto",
"parameters": [
{
"description": "When true, the request is validated and priced but not run: nothing is\ngenerated, stored, or billed, and no safety review is performed. The\nresponse is a `PriceQuote` object instead of the usual response for this\nendpoint. Send exactly the request you would send to generate, so the\nquote reflects the same options.\n",
@@ -9819,25 +9819,18 @@
"encoding": {
"image_asset_identifier": {
"contentType": "application/json"
- },
- "style_reference_asset_identifiers": {
- "contentType": "application/json"
- },
- "color_palette": {
- "contentType": "application/json"
}
},
"schema": {
- "$ref": "#/components/schemas/ReframeImageIdeogramV3Request"
+ "$ref": "#/components/schemas/ReframeImageAutoRequest"
}
},
"application/json": {
"schema": {
- "$ref": "#/components/schemas/ReframeImageIdeogramV3Request"
+ "$ref": "#/components/schemas/ReframeImageAutoRequest"
}
}
},
- "description": "Use `multipart/form-data` to upload the source `image` and any `style_reference_images`.",
"required": true,
"x-body-name": "body"
},
@@ -9846,11 +9839,11 @@
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/ReframeImageIdeogramV3Response"
+ "$ref": "#/components/schemas/ReframeImageAutoResponse"
}
}
},
- "description": "The reframed images, or an acknowledgement for an asynchronous request."
+ "description": "An acknowledgement to poll with `GET /v2/generations/{generation_id}`."
},
"400": {
"description": "Invalid input provided."
@@ -9869,7 +9862,7 @@
"description": "Insufficient credits or quota."
},
"404": {
- "description": "A referenced resource was not found."
+ "description": "The referenced source asset was not found."
},
"429": {
"content": {
@@ -9888,7 +9881,7 @@
"description": "The endpoint is temporarily unavailable."
}
},
- "summary": "Reframe with Ideogram 3.0",
+ "summary": "Reframe an image, letting Ideogram pick the model",
"tags": [
"images-reframe"
],
@@ -9896,15 +9889,14 @@
"image",
"reframe"
],
- "x-fern-sdk-method-name": "ideogramV3",
- "x-tool-description": "Expand an image asset with Ideogram 3.0, preserving source pixels in the center. Use at most one style control: style_preset, style_codes, or style_reference_asset_identifiers.",
+ "x-fern-sdk-method-name": "auto",
"x-openapi-router-controller": "external_api.generated.openapi.controllers.images_reframe_controller"
}
},
- "/v2/image/reframe/nano-banana-2": {
+ "/v2/image/reframe/bria-expand": {
"post": {
- "description": "Expand an image to a new aspect ratio with Nano Banana 2. Upload the\nsource `image` using `multipart/form-data`. Always asynchronous:\nreturns a `generation_id`; poll `GET /v2/generations/{generation_id}`\nfor results.\n",
- "operationId": "post_reframe_image_nano_banana2",
+ "description": "Extend one image to a new aspect ratio with Bria Expand. The source\npixels are kept exactly as they are, centered on the new canvas, and\nthe model paints only the added area. Supply either an existing\nIdeogram image asset or raw image bytes, but not both. The canvas is\nsized from the source so that the whole source fits.\n\nThis operation is asynchronous. It returns as soon as the request is\naccepted; poll `GET /v2/generations/{generation_id}` for completion\nand results.\n",
+ "operationId": "post_reframe_image_bria_expand",
"parameters": [
{
"description": "When true, the request is validated and priced but not run: nothing is\ngenerated, stored, or billed, and no safety review is performed. The\nresponse is a `PriceQuote` object instead of the usual response for this\nendpoint. Send exactly the request you would send to generate, so the\nquote reflects the same options.\n",
@@ -9927,12 +9919,12 @@
}
},
"schema": {
- "$ref": "#/components/schemas/ReframeImageNanoBanana2Request"
+ "$ref": "#/components/schemas/ReframeImageBriaExpandRequest"
}
},
"application/json": {
"schema": {
- "$ref": "#/components/schemas/ReframeImageNanoBanana2Request"
+ "$ref": "#/components/schemas/ReframeImageBriaExpandRequest"
}
}
},
@@ -9944,7 +9936,7 @@
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/ReframeImageNanoBanana2Response"
+ "$ref": "#/components/schemas/ReframeImageBriaExpandResponse"
}
}
},
@@ -9967,7 +9959,7 @@
"description": "Insufficient credits or quota."
},
"404": {
- "description": "A referenced resource was not found."
+ "description": "The referenced source asset was not found."
},
"429": {
"content": {
@@ -9986,7 +9978,7 @@
"description": "The endpoint is temporarily unavailable."
}
},
- "summary": "Reframe with Nano Banana 2",
+ "summary": "Reframe an image with Bria Expand",
"tags": [
"images-reframe"
],
@@ -9994,15 +9986,14 @@
"image",
"reframe"
],
- "x-fern-sdk-method-name": "nanoBanana2",
- "x-tool-description": "Expand an image asset to a new aspect ratio with Nano Banana 2, using the closest supported 1K dimensions.",
+ "x-fern-sdk-method-name": "briaExpand",
"x-openapi-router-controller": "external_api.generated.openapi.controllers.images_reframe_controller"
}
},
- "/v2/image/remix/auto": {
+ "/v2/image/reframe/gpt-image-2-5-flare": {
"post": {
- "description": "Remix an image guided by a text prompt, with Ideogram choosing the\nmodel. Upload the source image as `image` using `multipart/form-data`.\nReturns results directly by default; set `async` or supply a\n`webhook_url` to get a `generation_id` and poll\n`GET /v2/generations/{generation_id}`.",
- "operationId": "post_tool_remix",
+ "description": "Recompose one image for a new aspect ratio with GPT Image 2.5 Flare.\nSupply either an existing Ideogram image asset or raw image bytes, but\nnot both. The requested aspect ratio is resolved to the closest output\nsize the model supports.\n\nThis operation is asynchronous. It returns as soon as the request is\naccepted; poll `GET /v2/generations/{generation_id}` for completion\nand results.\n",
+ "operationId": "post_reframe_image_gpt_image25_flare",
"parameters": [
{
"description": "When true, the request is validated and priced but not run: nothing is\ngenerated, stored, or billed, and no safety review is performed. The\nresponse is a `PriceQuote` object instead of the usual response for this\nendpoint. Send exactly the request you would send to generate, so the\nquote reflects the same options.\n",
@@ -10022,25 +10013,18 @@
"encoding": {
"image_asset_identifier": {
"contentType": "application/json"
- },
- "style_reference_asset_identifiers": {
- "contentType": "application/json"
- },
- "color_palette": {
- "contentType": "application/json"
}
},
"schema": {
- "$ref": "#/components/schemas/ToolRemixRequest"
+ "$ref": "#/components/schemas/ReframeImageGptImage25FlareRequest"
}
},
"application/json": {
"schema": {
- "$ref": "#/components/schemas/ToolRemixRequest"
+ "$ref": "#/components/schemas/ReframeImageGptImage25FlareRequest"
}
}
},
- "description": "A request to remix one image with an automatically selected model. Send it as `multipart/form-data` with the source `image`.",
"required": true,
"x-body-name": "body"
},
@@ -10049,11 +10033,11 @@
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/ToolRemixResponse"
+ "$ref": "#/components/schemas/ReframeImageGptImage25FlareResponse"
}
}
},
- "description": "The remixed images (synchronous requests), or an acknowledgement to poll with `GET /v2/generations/{generation_id}` (`async` requests)."
+ "description": "An acknowledgement to poll with `GET /v2/generations/{generation_id}`."
},
"400": {
"description": "Invalid input provided."
@@ -10072,10 +10056,7 @@
"description": "Insufficient credits or quota."
},
"404": {
- "description": "A referenced resource was not found."
- },
- "422": {
- "description": "The prompt did not pass safety checks."
+ "description": "The referenced source asset was not found."
},
"429": {
"content": {
@@ -10094,18 +10075,22 @@
"description": "The endpoint is temporarily unavailable."
}
},
- "summary": "Remix with automatic model selection",
+ "summary": "Reframe an image with GPT Image 2.5 Flare",
"tags": [
- "auto-model"
+ "images-reframe"
],
- "x-tool-description": "Remix an image asset with a server-selected model. Omit resolution and aspect_ratio to preserve the source shape. Style controls and shape changes combined with image_weight require the 1K tier; seed reproducibility depends on the selected model.",
- "x-openapi-router-controller": "external_api.generated.openapi.controllers.auto_model_controller"
+ "x-fern-sdk-group-name": [
+ "image",
+ "reframe"
+ ],
+ "x-fern-sdk-method-name": "gptImage25Flare",
+ "x-openapi-router-controller": "external_api.generated.openapi.controllers.images_reframe_controller"
}
},
- "/v2/image/remix/ideogram-3": {
+ "/v2/image/reframe/ideogram-3": {
"post": {
- "description": "Transform an existing image with Ideogram 3.0, guided by a text\nprompt. Upload the source `image` using `multipart/form-data`.\nReturns results directly by default; set `async` or supply a\n`webhook_url` to get a `generation_id` and poll\n`GET /v2/generations/{generation_id}`.\n",
- "operationId": "post_remix_image_v2_ideogram_v3",
+ "description": "Expand an image to a new Ideogram 3.0 resolution, keeping the source\npixels in the center and filling the new area. Upload the source\n`image` using `multipart/form-data`. Returns results directly by\ndefault; set `async` to get a `generation_id` and poll\n`GET /v2/generations/{generation_id}`.\n",
+ "operationId": "post_reframe_image_v2_ideogram_v3",
"parameters": [
{
"description": "When true, the request is validated and priced but not run: nothing is\ngenerated, stored, or billed, and no safety review is performed. The\nresponse is a `PriceQuote` object instead of the usual response for this\nendpoint. Send exactly the request you would send to generate, so the\nquote reflects the same options.\n",
@@ -10126,20 +10111,20 @@
"image_asset_identifier": {
"contentType": "application/json"
},
- "color_palette": {
+ "style_reference_asset_identifiers": {
"contentType": "application/json"
},
- "style_reference_asset_identifiers": {
+ "color_palette": {
"contentType": "application/json"
}
},
"schema": {
- "$ref": "#/components/schemas/RemixImageIdeogramV3Request"
+ "$ref": "#/components/schemas/ReframeImageIdeogramV3Request"
}
},
"application/json": {
"schema": {
- "$ref": "#/components/schemas/RemixImageIdeogramV3Request"
+ "$ref": "#/components/schemas/ReframeImageIdeogramV3Request"
}
}
},
@@ -10152,11 +10137,11 @@
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/RemixImageIdeogramV3Response"
+ "$ref": "#/components/schemas/ReframeImageIdeogramV3Response"
}
}
},
- "description": "The remixed images (synchronous requests), or an acknowledgement to poll with `GET /v2/generations/{generation_id}` (`async` requests)."
+ "description": "The reframed images, or an acknowledgement for an asynchronous request."
},
"400": {
"description": "Invalid input provided."
@@ -10177,9 +10162,6 @@
"404": {
"description": "A referenced resource was not found."
},
- "422": {
- "description": "The prompt did not pass safety checks."
- },
"429": {
"content": {
"application/json": {
@@ -10197,18 +10179,23 @@
"description": "The endpoint is temporarily unavailable."
}
},
- "summary": "Remix with Ideogram 3.0",
+ "summary": "Reframe with Ideogram 3.0",
"tags": [
- "images-remix"
+ "images-reframe"
],
- "x-tool-description": "Remix an image asset with Ideogram 3.0. Omit resolution and aspect_ratio to preserve its shape; changing shape center-crops the source.",
- "x-openapi-router-controller": "external_api.generated.openapi.controllers.images_remix_controller"
+ "x-fern-sdk-group-name": [
+ "image",
+ "reframe"
+ ],
+ "x-fern-sdk-method-name": "ideogramV3",
+ "x-tool-description": "Expand an image asset with Ideogram 3.0, preserving source pixels in the center. Use at most one style control: style_preset, style_codes, or style_reference_asset_identifiers.",
+ "x-openapi-router-controller": "external_api.generated.openapi.controllers.images_reframe_controller"
}
},
- "/v2/image/remix/ideogram-3-character": {
+ "/v2/image/reframe/nano-banana-2": {
"post": {
- "description": "Transform an existing image with Ideogram 3.0 so it features a\nconsistent character, guided by a text prompt. Upload the source\n`image` and a `character_reference_images` image (or use a saved\ncharacter) using `multipart/form-data`.\nReturns results directly by default; set `async` or supply a\n`webhook_url` to get a `generation_id` and poll\n`GET /v2/generations/{generation_id}`.\n",
- "operationId": "post_remix_image_v2_ideogram_v3_character",
+ "description": "Expand an image to a new aspect ratio with Nano Banana 2. Upload the\nsource `image` using `multipart/form-data`. Always asynchronous:\nreturns a `generation_id`; poll `GET /v2/generations/{generation_id}`\nfor results.\n",
+ "operationId": "post_reframe_image_nano_banana2",
"parameters": [
{
"description": "When true, the request is validated and priced but not run: nothing is\ngenerated, stored, or billed, and no safety review is performed. The\nresponse is a `PriceQuote` object instead of the usual response for this\nendpoint. Send exactly the request you would send to generate, so the\nquote reflects the same options.\n",
@@ -10228,25 +10215,18 @@
"encoding": {
"image_asset_identifier": {
"contentType": "application/json"
- },
- "character_reference_asset_identifiers": {
- "contentType": "application/json"
- },
- "style_reference_asset_identifiers": {
- "contentType": "application/json"
}
},
"schema": {
- "$ref": "#/components/schemas/RemixImageIdeogramV3CharacterRequest"
+ "$ref": "#/components/schemas/ReframeImageNanoBanana2Request"
}
},
"application/json": {
"schema": {
- "$ref": "#/components/schemas/RemixImageIdeogramV3CharacterRequest"
+ "$ref": "#/components/schemas/ReframeImageNanoBanana2Request"
}
}
},
- "description": "Use `multipart/form-data` to upload the source `image` and any `character_reference_images` or `style_reference_images`.",
"required": true,
"x-body-name": "body"
},
@@ -10255,11 +10235,11 @@
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/RemixImageIdeogramV3CharacterResponse"
+ "$ref": "#/components/schemas/ReframeImageNanoBanana2Response"
}
}
},
- "description": "The remixed images (synchronous requests), or an acknowledgement to poll with `GET /v2/generations/{generation_id}` (`async` requests)."
+ "description": "An acknowledgement to poll with `GET /v2/generations/{generation_id}`."
},
"400": {
"description": "Invalid input provided."
@@ -10280,9 +10260,6 @@
"404": {
"description": "A referenced resource was not found."
},
- "422": {
- "description": "The prompt did not pass safety checks."
- },
"429": {
"content": {
"application/json": {
@@ -10300,18 +10277,23 @@
"description": "The endpoint is temporarily unavailable."
}
},
- "summary": "Remix a consistent character with Ideogram 3.0",
+ "summary": "Reframe with Nano Banana 2",
"tags": [
- "images-remix"
+ "images-reframe"
],
- "x-tool-description": "Remix an image asset with Ideogram 3.0 and one character reference. Saved character/style collections take priority over their asset references. Changing shape center-crops the source.",
- "x-openapi-router-controller": "external_api.generated.openapi.controllers.images_remix_controller"
+ "x-fern-sdk-group-name": [
+ "image",
+ "reframe"
+ ],
+ "x-fern-sdk-method-name": "nanoBanana2",
+ "x-tool-description": "Expand an image asset to a new aspect ratio with Nano Banana 2, using the closest supported 1K dimensions.",
+ "x-openapi-router-controller": "external_api.generated.openapi.controllers.images_reframe_controller"
}
},
- "/v2/image/remix/ideogram-3-custom-model": {
+ "/v2/image/reframe/nano-banana-pro": {
"post": {
- "description": "Transform an existing image with a custom Ideogram 3.0 model that your\nuser or organization can access, guided by a text prompt. Upload the\nsource `image` using `multipart/form-data`.\nReturns results directly by default; set `async` or supply a\n`webhook_url` to get a `generation_id` and poll\n`GET /v2/generations/{generation_id}`.\n",
- "operationId": "post_remix_image_v2_ideogram_v3_custom_model",
+ "description": "Recompose one image for a new aspect ratio with Nano Banana Pro, at a\n1K, 2K, or 4K output tier. Supply either an existing Ideogram image\nasset or raw image bytes, but not both. The requested aspect ratio is\nresolved to the closest dimensions the model supports at that tier.\n\nThis operation is asynchronous. It returns as soon as the request is\naccepted; poll `GET /v2/generations/{generation_id}` for completion\nand results.\n",
+ "operationId": "post_reframe_image_nano_banana_pro",
"parameters": [
{
"description": "When true, the request is validated and priced but not run: nothing is\ngenerated, stored, or billed, and no safety review is performed. The\nresponse is a `PriceQuote` object instead of the usual response for this\nendpoint. Send exactly the request you would send to generate, so the\nquote reflects the same options.\n",
@@ -10331,25 +10313,18 @@
"encoding": {
"image_asset_identifier": {
"contentType": "application/json"
- },
- "color_palette": {
- "contentType": "application/json"
- },
- "style_reference_asset_identifiers": {
- "contentType": "application/json"
}
},
"schema": {
- "$ref": "#/components/schemas/RemixImageIdeogramV3CustomModelRequest"
+ "$ref": "#/components/schemas/ReframeImageNanoBananaProRequest"
}
},
"application/json": {
"schema": {
- "$ref": "#/components/schemas/RemixImageIdeogramV3CustomModelRequest"
+ "$ref": "#/components/schemas/ReframeImageNanoBananaProRequest"
}
}
},
- "description": "Use `multipart/form-data` to upload the source `image` and any `style_reference_images`.",
"required": true,
"x-body-name": "body"
},
@@ -10358,14 +10333,14 @@
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/RemixImageIdeogramV3CustomModelResponse"
+ "$ref": "#/components/schemas/ReframeImageNanoBananaProResponse"
}
}
},
- "description": "The remixed images (synchronous requests), or an acknowledgement to poll with `GET /v2/generations/{generation_id}` (`async` requests)."
+ "description": "An acknowledgement to poll with `GET /v2/generations/{generation_id}`."
},
"400": {
- "description": "Invalid input or an unsupported model option."
+ "description": "Invalid input provided."
},
"401": {
"description": "Unauthorized."
@@ -10380,14 +10355,8 @@
},
"description": "Insufficient credits or quota."
},
- "403": {
- "description": "The custom model does not exist or is not accessible to this user or organization."
- },
"404": {
- "description": "A referenced resource was not found."
- },
- "422": {
- "description": "The prompt did not pass safety checks."
+ "description": "The referenced source asset was not found."
},
"429": {
"content": {
@@ -10406,18 +10375,22 @@
"description": "The endpoint is temporarily unavailable."
}
},
- "summary": "Remix with a custom Ideogram 3.0 model",
+ "summary": "Reframe an image with Nano Banana Pro",
"tags": [
- "images-remix"
+ "images-reframe"
],
- "x-tool-description": "Remix an image asset with an accessible custom Ideogram 3.0 model. Omit resolution and aspect_ratio to preserve its shape; changing shape center-crops the source.",
- "x-openapi-router-controller": "external_api.generated.openapi.controllers.images_remix_controller"
+ "x-fern-sdk-group-name": [
+ "image",
+ "reframe"
+ ],
+ "x-fern-sdk-method-name": "nanoBananaPro",
+ "x-openapi-router-controller": "external_api.generated.openapi.controllers.images_reframe_controller"
}
},
- "/v2/image/remix/ideogram-4": {
+ "/v2/image/remix/auto": {
"post": {
- "description": "Transform an existing image with Ideogram 4.0, guided by a text\nprompt. Upload the source `image` using `multipart/form-data`.\nReturns results directly by default; set `async` or supply a\n`webhook_url` to get a `generation_id` and poll\n`GET /v2/generations/{generation_id}`.\n",
- "operationId": "post_remix_image_v2_ideogram_v4",
+ "description": "Remix an image guided by a text prompt, with Ideogram choosing the\nmodel. Upload the source image as `image` using `multipart/form-data`.\nReturns results directly by default; set `async` or supply a\n`webhook_url` to get a `generation_id` and poll\n`GET /v2/generations/{generation_id}`.",
+ "operationId": "post_tool_remix",
"parameters": [
{
"description": "When true, the request is validated and priced but not run: nothing is\ngenerated, stored, or billed, and no safety review is performed. The\nresponse is a `PriceQuote` object instead of the usual response for this\nendpoint. Send exactly the request you would send to generate, so the\nquote reflects the same options.\n",
@@ -10437,19 +10410,25 @@
"encoding": {
"image_asset_identifier": {
"contentType": "application/json"
+ },
+ "style_reference_asset_identifiers": {
+ "contentType": "application/json"
+ },
+ "color_palette": {
+ "contentType": "application/json"
}
},
"schema": {
- "$ref": "#/components/schemas/RemixImageIdeogramV4Request"
+ "$ref": "#/components/schemas/ToolRemixRequest"
}
},
"application/json": {
"schema": {
- "$ref": "#/components/schemas/RemixImageIdeogramV4Request"
+ "$ref": "#/components/schemas/ToolRemixRequest"
}
}
},
- "description": "Use `multipart/form-data` to upload the source `image`.",
+ "description": "A request to remix one image with an automatically selected model. Send it as `multipart/form-data` with the source `image`.",
"required": true,
"x-body-name": "body"
},
@@ -10458,7 +10437,7 @@
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/RemixImageIdeogramV4Response"
+ "$ref": "#/components/schemas/ToolRemixResponse"
}
}
},
@@ -10503,23 +10482,18 @@
"description": "The endpoint is temporarily unavailable."
}
},
- "summary": "Remix with Ideogram 4.0",
+ "summary": "Remix with automatic model selection",
"tags": [
- "images-remix"
+ "auto-model"
],
- "x-playground-endpoint": {
- "id": "remix-v4",
- "label": "Remix",
- "order": 2
- },
- "x-tool-description": "Remix an image asset with Ideogram 4.0. Omit resolution to preserve its shape; shape changes cannot be combined with image_weight. No prompt rewriting or reproducible seed.",
- "x-openapi-router-controller": "external_api.generated.openapi.controllers.images_remix_controller"
+ "x-tool-description": "Remix an image asset with a server-selected model. Omit resolution and aspect_ratio to preserve the source shape. Style controls and shape changes combined with image_weight require the 1K tier; seed reproducibility depends on the selected model.",
+ "x-openapi-router-controller": "external_api.generated.openapi.controllers.auto_model_controller"
}
},
- "/v2/image/remove-background/ideogram-1": {
+ "/v2/image/remix/ideogram-3": {
"post": {
- "description": "Remove the background from an image and return the foreground as a\ntransparent PNG. Upload the source `image` using `multipart/form-data`.\nReturns the result directly by default; set `async` to get a\n`generation_id` and poll `GET /v2/generations/{generation_id}`.\n",
- "operationId": "post_remove_background_v2",
+ "description": "Transform an existing image with Ideogram 3.0, guided by a text\nprompt. Upload the source `image` using `multipart/form-data`.\nReturns results directly by default; set `async` or supply a\n`webhook_url` to get a `generation_id` and poll\n`GET /v2/generations/{generation_id}`.\n",
+ "operationId": "post_remix_image_v2_ideogram_v3",
"parameters": [
{
"description": "When true, the request is validated and priced but not run: nothing is\ngenerated, stored, or billed, and no safety review is performed. The\nresponse is a `PriceQuote` object instead of the usual response for this\nendpoint. Send exactly the request you would send to generate, so the\nquote reflects the same options.\n",
@@ -10539,18 +10513,25 @@
"encoding": {
"image_asset_identifier": {
"contentType": "application/json"
+ },
+ "color_palette": {
+ "contentType": "application/json"
+ },
+ "style_reference_asset_identifiers": {
+ "contentType": "application/json"
}
},
"schema": {
- "$ref": "#/components/schemas/RemoveBackgroundV2Request"
+ "$ref": "#/components/schemas/RemixImageIdeogramV3Request"
}
},
"application/json": {
"schema": {
- "$ref": "#/components/schemas/RemoveBackgroundV2AssetRequest"
+ "$ref": "#/components/schemas/RemixImageIdeogramV3Request"
}
}
},
+ "description": "Use `multipart/form-data` to upload the source `image` and any `style_reference_images`.",
"required": true,
"x-body-name": "body"
},
@@ -10559,11 +10540,11 @@
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/RemoveBackgroundV2Response"
+ "$ref": "#/components/schemas/RemixImageIdeogramV3Response"
}
}
},
- "description": "The foreground image (synchronous requests), or an acknowledgement to poll (`async` requests). If a synchronous request fails after the response has started streaming, the HTTP status is already 200; the body contains `error` and `status_code` instead."
+ "description": "The remixed images (synchronous requests), or an acknowledgement to poll with `GET /v2/generations/{generation_id}` (`async` requests)."
},
"400": {
"description": "Invalid input provided."
@@ -10581,11 +10562,11 @@
},
"description": "Insufficient credits or quota."
},
- "403": {
- "description": "Not authorized to remove backgrounds."
- },
"404": {
- "description": "The source image was not found or is not readable."
+ "description": "A referenced resource was not found."
+ },
+ "422": {
+ "description": "The prompt did not pass safety checks."
},
"429": {
"content": {
@@ -10598,31 +10579,24 @@
"description": "Too many requests."
},
"500": {
- "description": "The background-removal request failed."
+ "description": "Internal server error."
},
"503": {
- "description": "Background removal is temporarily unavailable."
+ "description": "The endpoint is temporarily unavailable."
}
},
- "summary": "Remove background",
+ "summary": "Remix with Ideogram 3.0",
"tags": [
- "tool"
+ "images-remix"
],
- "x-fern-sdk-group-name": "tool",
- "x-fern-sdk-method-name": "removeBackground",
- "x-playground-endpoint": {
- "id": "remove-background",
- "label": "Remove background",
- "order": 3
- },
- "x-tool-description": "Remove an image asset’s background and return a foreground PNG with transparency.",
- "x-openapi-router-controller": "external_api.generated.openapi.controllers.tool_controller"
+ "x-tool-description": "Remix an image asset with Ideogram 3.0. Omit resolution and aspect_ratio to preserve its shape; changing shape center-crops the source.",
+ "x-openapi-router-controller": "external_api.generated.openapi.controllers.images_remix_controller"
}
},
- "/v2/image/remove-object/ideogram-1": {
+ "/v2/image/remix/ideogram-3-character": {
"post": {
- "description": "Remove a masked object from an image. Upload the source `image` and a\n`mask` of the same size using `multipart/form-data`. Returns a\n`generation_id`; poll `GET /v2/generations/{generation_id}` for the\nresult.\n",
- "operationId": "post_remove_object_from_v2_assets",
+ "description": "Transform an existing image with Ideogram 3.0 so it features a\nconsistent character, guided by a text prompt. Upload the source\n`image` and a `character_reference_images` image (or use a saved\ncharacter) using `multipart/form-data`.\nReturns results directly by default; set `async` or supply a\n`webhook_url` to get a `generation_id` and poll\n`GET /v2/generations/{generation_id}`.\n",
+ "operationId": "post_remix_image_v2_ideogram_v3_character",
"parameters": [
{
"description": "When true, the request is validated and priced but not run: nothing is\ngenerated, stored, or billed, and no safety review is performed. The\nresponse is a `PriceQuote` object instead of the usual response for this\nendpoint. Send exactly the request you would send to generate, so the\nquote reflects the same options.\n",
@@ -10643,21 +10617,24 @@
"image_asset_identifier": {
"contentType": "application/json"
},
- "mask_asset_identifier": {
+ "character_reference_asset_identifiers": {
+ "contentType": "application/json"
+ },
+ "style_reference_asset_identifiers": {
"contentType": "application/json"
}
},
"schema": {
- "$ref": "#/components/schemas/RemoveObjectFromV2AssetsRequest"
+ "$ref": "#/components/schemas/RemixImageIdeogramV3CharacterRequest"
}
},
"application/json": {
"schema": {
- "$ref": "#/components/schemas/RemoveObjectFromV2AssetsRequest"
+ "$ref": "#/components/schemas/RemixImageIdeogramV3CharacterRequest"
}
}
},
- "description": "The source `image` and `mask`, uploaded using `multipart/form-data`.",
+ "description": "Use `multipart/form-data` to upload the source `image` and any `character_reference_images` or `style_reference_images`.",
"required": true,
"x-body-name": "body"
},
@@ -10666,11 +10643,11 @@
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/RemoveObjectFromV2AssetsResponse"
+ "$ref": "#/components/schemas/RemixImageIdeogramV3CharacterResponse"
}
}
},
- "description": "Object removal request accepted; poll for completion with `GET /v2/generations/{generation_id}`."
+ "description": "The remixed images (synchronous requests), or an acknowledgement to poll with `GET /v2/generations/{generation_id}` (`async` requests)."
},
"400": {
"description": "Invalid input provided."
@@ -10688,14 +10665,11 @@
},
"description": "Insufficient credits or quota."
},
- "403": {
- "description": "Not authorized to remove an object."
- },
"404": {
- "description": "The source image or mask was not found."
+ "description": "A referenced resource was not found."
},
- "413": {
- "description": "An uploaded source or mask image is too large."
+ "422": {
+ "description": "The prompt did not pass safety checks."
},
"429": {
"content": {
@@ -10707,21 +10681,25 @@
},
"description": "Too many requests."
},
+ "500": {
+ "description": "Internal server error."
+ },
"503": {
"description": "The endpoint is temporarily unavailable."
}
},
- "summary": "Remove an object",
+ "summary": "Remix a consistent character with Ideogram 3.0",
"tags": [
- "object-removal"
+ "images-remix"
],
- "x-openapi-router-controller": "external_api.generated.openapi.controllers.object_removal_controller"
+ "x-tool-description": "Remix an image asset with Ideogram 3.0 and one character reference. Saved character/style collections take priority over their asset references. Changing shape center-crops the source.",
+ "x-openapi-router-controller": "external_api.generated.openapi.controllers.images_remix_controller"
}
},
- "/v2/image/replace-background/gpt-image-2": {
+ "/v2/image/remix/ideogram-3-custom-model": {
"post": {
- "description": "Replace the background of an image from a text prompt while keeping the\nautomatically detected foreground subject; no mask is needed. Upload\nthe source `image` using `multipart/form-data`.\nReturns a `generation_id`; poll `GET /v2/generations/{generation_id}`\nor supply a `webhook_url`.\n",
- "operationId": "post_replace_background",
+ "description": "Transform an existing image with a custom Ideogram 3.0 model that your\nuser or organization can access, guided by a text prompt. Upload the\nsource `image` using `multipart/form-data`.\nReturns results directly by default; set `async` or supply a\n`webhook_url` to get a `generation_id` and poll\n`GET /v2/generations/{generation_id}`.\n",
+ "operationId": "post_remix_image_v2_ideogram_v3_custom_model",
"parameters": [
{
"description": "When true, the request is validated and priced but not run: nothing is\ngenerated, stored, or billed, and no safety review is performed. The\nresponse is a `PriceQuote` object instead of the usual response for this\nendpoint. Send exactly the request you would send to generate, so the\nquote reflects the same options.\n",
@@ -10741,19 +10719,25 @@
"encoding": {
"image_asset_identifier": {
"contentType": "application/json"
+ },
+ "color_palette": {
+ "contentType": "application/json"
+ },
+ "style_reference_asset_identifiers": {
+ "contentType": "application/json"
}
},
"schema": {
- "$ref": "#/components/schemas/ReplaceBackgroundRequest"
+ "$ref": "#/components/schemas/RemixImageIdeogramV3CustomModelRequest"
}
},
"application/json": {
"schema": {
- "$ref": "#/components/schemas/ReplaceBackgroundRequest"
+ "$ref": "#/components/schemas/RemixImageIdeogramV3CustomModelRequest"
}
}
},
- "description": "The source image and a prompt describing its new background.",
+ "description": "Use `multipart/form-data` to upload the source `image` and any `style_reference_images`.",
"required": true,
"x-body-name": "body"
},
@@ -10762,14 +10746,14 @@
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/ReplaceBackgroundResponse"
+ "$ref": "#/components/schemas/RemixImageIdeogramV3CustomModelResponse"
}
}
},
- "description": "Background replacement accepted for asynchronous processing."
+ "description": "The remixed images (synchronous requests), or an acknowledgement to poll with `GET /v2/generations/{generation_id}` (`async` requests)."
},
"400": {
- "description": "Invalid input provided."
+ "description": "Invalid input or an unsupported model option."
},
"401": {
"description": "Unauthorized."
@@ -10785,10 +10769,10 @@
"description": "Insufficient credits or quota."
},
"403": {
- "description": "Not authorized to replace backgrounds."
+ "description": "The custom model does not exist or is not accessible to this user or organization."
},
"404": {
- "description": "The source image was not found or is not readable."
+ "description": "A referenced resource was not found."
},
"422": {
"description": "The prompt did not pass safety checks."
@@ -10803,24 +10787,25 @@
},
"description": "Too many requests."
},
+ "500": {
+ "description": "Internal server error."
+ },
"503": {
- "description": "Background replacement is temporarily unavailable."
+ "description": "The endpoint is temporarily unavailable."
}
},
- "summary": "Replace background with GPT Image 2",
+ "summary": "Remix with a custom Ideogram 3.0 model",
"tags": [
- "edit-workflow"
+ "images-remix"
],
- "x-fern-sdk-group-name": "tool",
- "x-fern-sdk-method-name": "replaceBackground",
- "x-tool-description": "Replace an image asset’s background from a prompt, preserving the foreground subject automatically. No mask needed.",
- "x-openapi-router-controller": "external_api.generated.openapi.controllers.edit_workflow_controller"
+ "x-tool-description": "Remix an image asset with an accessible custom Ideogram 3.0 model. Omit resolution and aspect_ratio to preserve its shape; changing shape center-crops the source.",
+ "x-openapi-router-controller": "external_api.generated.openapi.controllers.images_remix_controller"
}
},
- "/v2/image/replace-background/ideogram-3": {
+ "/v2/image/remix/ideogram-4": {
"post": {
- "description": "Replace the background of an image from a text prompt with Ideogram 3.0,\nkeeping the automatically detected foreground subject; no mask is\nneeded. Upload the source `image` using `multipart/form-data`.\nReturns a `generation_id`; poll `GET /v2/generations/{generation_id}`\nor supply a `webhook_url`.\n",
- "operationId": "post_replace_background_ideogram_v3",
+ "description": "Transform an existing image with Ideogram 4.0, guided by a text\nprompt. Upload the source `image` using `multipart/form-data`.\nReturns results directly by default; set `async` or supply a\n`webhook_url` to get a `generation_id` and poll\n`GET /v2/generations/{generation_id}`.\n",
+ "operationId": "post_remix_image_v2_ideogram_v4",
"parameters": [
{
"description": "When true, the request is validated and priced but not run: nothing is\ngenerated, stored, or billed, and no safety review is performed. The\nresponse is a `PriceQuote` object instead of the usual response for this\nendpoint. Send exactly the request you would send to generate, so the\nquote reflects the same options.\n",
@@ -10843,16 +10828,16 @@
}
},
"schema": {
- "$ref": "#/components/schemas/ReplaceBackgroundIdeogramV3Request"
+ "$ref": "#/components/schemas/RemixImageIdeogramV4Request"
}
},
"application/json": {
"schema": {
- "$ref": "#/components/schemas/ReplaceBackgroundIdeogramV3Request"
+ "$ref": "#/components/schemas/RemixImageIdeogramV4Request"
}
}
},
- "description": "The source image and a prompt describing its new background.",
+ "description": "Use `multipart/form-data` to upload the source `image`.",
"required": true,
"x-body-name": "body"
},
@@ -10861,11 +10846,11 @@
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/ReplaceBackgroundResponse"
+ "$ref": "#/components/schemas/RemixImageIdeogramV4Response"
}
}
},
- "description": "Background replacement accepted for asynchronous processing."
+ "description": "The remixed images (synchronous requests), or an acknowledgement to poll with `GET /v2/generations/{generation_id}` (`async` requests)."
},
"400": {
"description": "Invalid input provided."
@@ -10883,11 +10868,8 @@
},
"description": "Insufficient credits or quota."
},
- "403": {
- "description": "Not authorized to replace backgrounds."
- },
"404": {
- "description": "The source image was not found or is not readable."
+ "description": "A referenced resource was not found."
},
"422": {
"description": "The prompt did not pass safety checks."
@@ -10902,23 +10884,30 @@
},
"description": "Too many requests."
},
+ "500": {
+ "description": "Internal server error."
+ },
"503": {
- "description": "Background replacement is temporarily unavailable."
+ "description": "The endpoint is temporarily unavailable."
}
},
- "summary": "Replace background with Ideogram 3.0",
+ "summary": "Remix with Ideogram 4.0",
"tags": [
- "edit-workflow"
+ "images-remix"
],
- "x-fern-sdk-group-name": "tool",
- "x-fern-sdk-method-name": "replaceBackgroundIdeogramV3",
- "x-openapi-router-controller": "external_api.generated.openapi.controllers.edit_workflow_controller"
+ "x-playground-endpoint": {
+ "id": "remix-v4",
+ "label": "Remix",
+ "order": 2
+ },
+ "x-tool-description": "Remix an image asset with Ideogram 4.0. Omit resolution to preserve its shape; shape changes cannot be combined with image_weight. No prompt rewriting or reproducible seed.",
+ "x-openapi-router-controller": "external_api.generated.openapi.controllers.images_remix_controller"
}
},
- "/v2/image/upscale/auto": {
+ "/v2/image/remove-background/ideogram-1": {
"post": {
- "description": "Upscale an image to 2x, 4x, or 8x its original resolution with a model\nIdeogram picks per request; the choice may change over time. Upload the\nsource `image` using `multipart/form-data`.\nReturns results directly by default; set `async` or supply a\n`webhook_url` to get a `generation_id` and poll\n`GET /v2/generations/{generation_id}`.\n",
- "operationId": "post_upscale",
+ "description": "Remove the background from an image and return the foreground as a\ntransparent PNG. Upload the source `image` using `multipart/form-data`.\nReturns the result directly by default; set `async` to get a\n`generation_id` and poll `GET /v2/generations/{generation_id}`.\n",
+ "operationId": "post_remove_background_v2",
"parameters": [
{
"description": "When true, the request is validated and priced but not run: nothing is\ngenerated, stored, or billed, and no safety review is performed. The\nresponse is a `PriceQuote` object instead of the usual response for this\nendpoint. Send exactly the request you would send to generate, so the\nquote reflects the same options.\n",
@@ -10941,16 +10930,15 @@
}
},
"schema": {
- "$ref": "#/components/schemas/UpscaleToolRequest"
+ "$ref": "#/components/schemas/RemoveBackgroundV2Request"
}
},
"application/json": {
"schema": {
- "$ref": "#/components/schemas/UpscaleToolRequest"
+ "$ref": "#/components/schemas/RemoveBackgroundV2AssetRequest"
}
}
},
- "description": "A request to upscale one image. Upload the source `image` using `multipart/form-data`.",
"required": true,
"x-body-name": "body"
},
@@ -10959,14 +10947,14 @@
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/UpscaleToolResponse"
+ "$ref": "#/components/schemas/RemoveBackgroundV2Response"
}
}
},
- "description": "The upscaled image (synchronous requests), or an acknowledgement to poll with `GET /v2/generations/{generation_id}` (`async` requests)."
+ "description": "The foreground image (synchronous requests), or an acknowledgement to poll (`async` requests). If a synchronous request fails after the response has started streaming, the HTTP status is already 200; the body contains `error` and `status_code` instead."
},
"400": {
- "description": "Invalid input provided, or the output would exceed the 8K limit."
+ "description": "Invalid input provided."
},
"401": {
"description": "Unauthorized."
@@ -10982,10 +10970,10 @@
"description": "Insufficient credits or quota."
},
"403": {
- "description": "Not authorized to upscale images."
+ "description": "Not authorized to remove backgrounds."
},
"404": {
- "description": "The source image was not found."
+ "description": "The source image was not found or is not readable."
},
"429": {
"content": {
@@ -10998,24 +10986,31 @@
"description": "Too many requests."
},
"500": {
- "description": "Internal server error."
+ "description": "The background-removal request failed."
},
"503": {
- "description": "The endpoint is temporarily unavailable."
+ "description": "Background removal is temporarily unavailable."
}
},
- "summary": "Upscale with automatic model selection",
+ "summary": "Remove background",
"tags": [
- "tools"
+ "tool"
],
- "x-tool-description": "Upscale an image asset with a server-selected model. No prompt; output is limited to 8192 pixels per side.",
- "x-openapi-router-controller": "external_api.generated.openapi.controllers.tools_controller"
+ "x-fern-sdk-group-name": "tool",
+ "x-fern-sdk-method-name": "removeBackground",
+ "x-playground-endpoint": {
+ "id": "remove-background",
+ "label": "Remove background",
+ "order": 3
+ },
+ "x-tool-description": "Remove an image asset’s background and return a foreground PNG with transparency.",
+ "x-openapi-router-controller": "external_api.generated.openapi.controllers.tool_controller"
}
},
- "/v2/image/upscale/nano-banana-pro": {
+ "/v2/image/remove-object/ideogram-1": {
"post": {
- "description": "Regenerate an image at a higher `resolution_tier` (1K, 2K, or 4K) while\npreserving its content, composition, and style. Upload the source\n`image` using `multipart/form-data`.\nReturns results directly by default; set `async` or supply a\n`webhook_url` to get a `generation_id` and poll\n`GET /v2/generations/{generation_id}`.\n",
- "operationId": "post_upscale_image_nano_banana_pro",
+ "description": "Remove a masked object from an image. Upload the source `image` and a\n`mask` of the same size using `multipart/form-data`. Returns a\n`generation_id`; poll `GET /v2/generations/{generation_id}` for the\nresult.\n",
+ "operationId": "post_remove_object_from_v2_assets",
"parameters": [
{
"description": "When true, the request is validated and priced but not run: nothing is\ngenerated, stored, or billed, and no safety review is performed. The\nresponse is a `PriceQuote` object instead of the usual response for this\nendpoint. Send exactly the request you would send to generate, so the\nquote reflects the same options.\n",
@@ -11035,19 +11030,22 @@
"encoding": {
"image_asset_identifier": {
"contentType": "application/json"
+ },
+ "mask_asset_identifier": {
+ "contentType": "application/json"
}
},
"schema": {
- "$ref": "#/components/schemas/UpscaleImageNanoBananaProRequest"
+ "$ref": "#/components/schemas/RemoveObjectFromV2AssetsRequest"
}
},
"application/json": {
"schema": {
- "$ref": "#/components/schemas/UpscaleImageNanoBananaProRequest"
+ "$ref": "#/components/schemas/RemoveObjectFromV2AssetsRequest"
}
}
},
- "description": "A request to upscale one image with Nano Banana Pro. Upload the source `image` using `multipart/form-data`.",
+ "description": "The source `image` and `mask`, uploaded using `multipart/form-data`.",
"required": true,
"x-body-name": "body"
},
@@ -11056,11 +11054,11 @@
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/UpscaleImageNanoBananaProResponse"
+ "$ref": "#/components/schemas/RemoveObjectFromV2AssetsResponse"
}
}
},
- "description": "The upscaled image (synchronous requests), or an acknowledgement to poll with `GET /v2/generations/{generation_id}` (`async` requests)."
+ "description": "Object removal request accepted; poll for completion with `GET /v2/generations/{generation_id}`."
},
"400": {
"description": "Invalid input provided."
@@ -11078,11 +11076,14 @@
},
"description": "Insufficient credits or quota."
},
+ "403": {
+ "description": "Not authorized to remove an object."
+ },
"404": {
- "description": "The source image was not found."
+ "description": "The source image or mask was not found."
},
- "422": {
- "description": "The prompt did not pass safety checks."
+ "413": {
+ "description": "An uploaded source or mask image is too large."
},
"429": {
"content": {
@@ -11094,25 +11095,22 @@
},
"description": "Too many requests."
},
- "500": {
- "description": "Internal server error."
- },
"503": {
"description": "The endpoint is temporarily unavailable."
}
},
- "summary": "Upscale with Nano Banana Pro",
+ "summary": "Remove an object",
"tags": [
- "images-upscale"
+ "object-removal"
],
- "x-tool-description": "Upscale an image asset with Nano Banana Pro, preserving content, composition, and style. The source must be smaller than the requested resolution tier. An optional prompt guides enhancement.",
- "x-openapi-router-controller": "external_api.generated.openapi.controllers.images_upscale_controller"
+ "x-tool-description": "Remove the masked object from an image asset and fill the area to match its surroundings. Returns a generation reference.",
+ "x-openapi-router-controller": "external_api.generated.openapi.controllers.object_removal_controller"
}
},
- "/v2/image/upscale/topaz-bloom-2": {
+ "/v2/image/replace-background/gpt-image-2": {
"post": {
- "description": "Creatively upscale an image to 2x, 4x, or 8x its original resolution,\noptionally guided by a `prompt`. Upload the source `image` using\n`multipart/form-data`.\nReturns results directly by default; set `async` or supply a\n`webhook_url` to get a `generation_id` and poll\n`GET /v2/generations/{generation_id}`.\n",
- "operationId": "post_upscale_image_topaz_bloom2",
+ "description": "Replace the background of an image from a text prompt while keeping the\nautomatically detected foreground subject; no mask is needed. Upload\nthe source `image` using `multipart/form-data`.\nReturns a `generation_id`; poll `GET /v2/generations/{generation_id}`\nor supply a `webhook_url`.\n",
+ "operationId": "post_replace_background",
"parameters": [
{
"description": "When true, the request is validated and priced but not run: nothing is\ngenerated, stored, or billed, and no safety review is performed. The\nresponse is a `PriceQuote` object instead of the usual response for this\nendpoint. Send exactly the request you would send to generate, so the\nquote reflects the same options.\n",
@@ -11135,16 +11133,16 @@
}
},
"schema": {
- "$ref": "#/components/schemas/UpscaleImageTopazBloom2Request"
+ "$ref": "#/components/schemas/ReplaceBackgroundRequest"
}
},
"application/json": {
"schema": {
- "$ref": "#/components/schemas/UpscaleImageTopazBloom2Request"
+ "$ref": "#/components/schemas/ReplaceBackgroundRequest"
}
}
},
- "description": "A request to upscale one image with Topaz Bloom 2. Upload the source `image` using `multipart/form-data`.",
+ "description": "The source image and a prompt describing its new background.",
"required": true,
"x-body-name": "body"
},
@@ -11153,14 +11151,14 @@
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/UpscaleImageTopazBloom2Response"
+ "$ref": "#/components/schemas/ReplaceBackgroundResponse"
}
}
},
- "description": "The upscaled image (synchronous requests), or an acknowledgement to poll with `GET /v2/generations/{generation_id}` (`async` requests)."
+ "description": "Background replacement accepted for asynchronous processing."
},
"400": {
- "description": "Invalid input provided, or the output would exceed the 8K limit."
+ "description": "Invalid input provided."
},
"401": {
"description": "Unauthorized."
@@ -11175,8 +11173,11 @@
},
"description": "Insufficient credits or quota."
},
+ "403": {
+ "description": "Not authorized to replace backgrounds."
+ },
"404": {
- "description": "The source image was not found."
+ "description": "The source image was not found or is not readable."
},
"422": {
"description": "The prompt did not pass safety checks."
@@ -11191,25 +11192,24 @@
},
"description": "Too many requests."
},
- "500": {
- "description": "Internal server error."
- },
"503": {
- "description": "The endpoint is temporarily unavailable."
+ "description": "Background replacement is temporarily unavailable."
}
},
- "summary": "Upscale with Topaz Bloom 2",
+ "summary": "Replace background with GPT Image 2",
"tags": [
- "images-upscale"
+ "edit-workflow"
],
- "x-tool-description": "Creatively upscale an image asset with Topaz Bloom 2. An optional prompt guides detail; creativity controls reinterpretation. Output is limited to 8192 pixels per side.",
- "x-openapi-router-controller": "external_api.generated.openapi.controllers.images_upscale_controller"
+ "x-fern-sdk-group-name": "tool",
+ "x-fern-sdk-method-name": "replaceBackground",
+ "x-tool-description": "Replace an image asset’s background from a prompt, preserving the foreground subject automatically. No mask needed.",
+ "x-openapi-router-controller": "external_api.generated.openapi.controllers.edit_workflow_controller"
}
},
- "/v2/image/upscale/topaz-redefine": {
+ "/v2/image/replace-background/ideogram-3": {
"post": {
- "description": "Creatively upscale an image to 2x, 4x, or 8x its original resolution,\nguided by an optional `prompt` or `autoprompt`. Upload the source\n`image` using `multipart/form-data`.\nReturns results directly by default; set `async` or supply a\n`webhook_url` to get a `generation_id` and poll\n`GET /v2/generations/{generation_id}`.\n",
- "operationId": "post_upscale_image_topaz_redefine",
+ "description": "Replace the background of an image from a text prompt with Ideogram 3.0,\nkeeping the automatically detected foreground subject; no mask is\nneeded. Upload the source `image` using `multipart/form-data`.\nReturns a `generation_id`; poll `GET /v2/generations/{generation_id}`\nor supply a `webhook_url`.\n",
+ "operationId": "post_replace_background_ideogram_v3",
"parameters": [
{
"description": "When true, the request is validated and priced but not run: nothing is\ngenerated, stored, or billed, and no safety review is performed. The\nresponse is a `PriceQuote` object instead of the usual response for this\nendpoint. Send exactly the request you would send to generate, so the\nquote reflects the same options.\n",
@@ -11232,16 +11232,16 @@
}
},
"schema": {
- "$ref": "#/components/schemas/UpscaleImageTopazRedefineRequest"
+ "$ref": "#/components/schemas/ReplaceBackgroundIdeogramV3Request"
}
},
"application/json": {
"schema": {
- "$ref": "#/components/schemas/UpscaleImageTopazRedefineRequest"
+ "$ref": "#/components/schemas/ReplaceBackgroundIdeogramV3Request"
}
}
},
- "description": "A request to upscale one image with Topaz Redefine. Upload the source `image` using `multipart/form-data`.",
+ "description": "The source image and a prompt describing its new background.",
"required": true,
"x-body-name": "body"
},
@@ -11250,14 +11250,14 @@
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/UpscaleImageTopazRedefineResponse"
+ "$ref": "#/components/schemas/ReplaceBackgroundResponse"
}
}
},
- "description": "The upscaled image (synchronous requests), or an acknowledgement to poll with `GET /v2/generations/{generation_id}` (`async` requests)."
+ "description": "Background replacement accepted for asynchronous processing."
},
"400": {
- "description": "Invalid input provided, or the output would exceed the 8K limit."
+ "description": "Invalid input provided."
},
"401": {
"description": "Unauthorized."
@@ -11272,8 +11272,11 @@
},
"description": "Insufficient credits or quota."
},
+ "403": {
+ "description": "Not authorized to replace backgrounds."
+ },
"404": {
- "description": "The source image was not found."
+ "description": "The source image was not found or is not readable."
},
"422": {
"description": "The prompt did not pass safety checks."
@@ -11288,24 +11291,23 @@
},
"description": "Too many requests."
},
- "500": {
- "description": "Internal server error."
- },
"503": {
- "description": "The endpoint is temporarily unavailable."
+ "description": "Background replacement is temporarily unavailable."
}
},
- "summary": "Upscale with Topaz Redefine",
+ "summary": "Replace background with Ideogram 3.0",
"tags": [
- "images-upscale"
+ "edit-workflow"
],
- "x-openapi-router-controller": "external_api.generated.openapi.controllers.images_upscale_controller"
+ "x-fern-sdk-group-name": "tool",
+ "x-fern-sdk-method-name": "replaceBackgroundIdeogramV3",
+ "x-openapi-router-controller": "external_api.generated.openapi.controllers.edit_workflow_controller"
}
},
- "/v2/image/upscale/topaz-standard-2": {
+ "/v2/image/upscale/auto": {
"post": {
- "description": "Upscale an image to 2x, 4x, or 8x its original resolution; no prompt is\nneeded. Upload the source `image` using `multipart/form-data`.\nReturns results directly by default; set `async` or supply a\n`webhook_url` to get a `generation_id` and poll\n`GET /v2/generations/{generation_id}`.\n",
- "operationId": "post_upscale_image_topaz_standard_v2",
+ "description": "Upscale an image to 2x, 4x, or 8x its original resolution with a model\nIdeogram picks per request; the choice may change over time. Upload the\nsource `image` using `multipart/form-data`.\nReturns results directly by default; set `async` or supply a\n`webhook_url` to get a `generation_id` and poll\n`GET /v2/generations/{generation_id}`.\n",
+ "operationId": "post_upscale",
"parameters": [
{
"description": "When true, the request is validated and priced but not run: nothing is\ngenerated, stored, or billed, and no safety review is performed. The\nresponse is a `PriceQuote` object instead of the usual response for this\nendpoint. Send exactly the request you would send to generate, so the\nquote reflects the same options.\n",
@@ -11328,16 +11330,16 @@
}
},
"schema": {
- "$ref": "#/components/schemas/UpscaleImageTopazStandardV2Request"
+ "$ref": "#/components/schemas/UpscaleToolRequest"
}
},
"application/json": {
"schema": {
- "$ref": "#/components/schemas/UpscaleImageTopazStandardV2Request"
+ "$ref": "#/components/schemas/UpscaleToolRequest"
}
}
},
- "description": "A request to upscale one image with Topaz Standard V2. Upload the source `image` using `multipart/form-data`.",
+ "description": "A request to upscale one image. Upload the source `image` using `multipart/form-data`.",
"required": true,
"x-body-name": "body"
},
@@ -11346,7 +11348,7 @@
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/UpscaleImageTopazStandardV2Response"
+ "$ref": "#/components/schemas/UpscaleToolResponse"
}
}
},
@@ -11368,6 +11370,9 @@
},
"description": "Insufficient credits or quota."
},
+ "403": {
+ "description": "Not authorized to upscale images."
+ },
"404": {
"description": "The source image was not found."
},
@@ -11388,18 +11393,18 @@
"description": "The endpoint is temporarily unavailable."
}
},
- "summary": "Upscale with Topaz Standard V2",
+ "summary": "Upscale with automatic model selection",
"tags": [
- "images-upscale"
+ "tools"
],
- "x-tool-description": "Upscale an image asset with Topaz Standard V2. No prompt; output is limited to 8192 pixels per side.",
- "x-openapi-router-controller": "external_api.generated.openapi.controllers.images_upscale_controller"
+ "x-tool-description": "Upscale an image asset with a server-selected model. No prompt; output is limited to 8192 pixels per side.",
+ "x-openapi-router-controller": "external_api.generated.openapi.controllers.tools_controller"
}
},
- "/v2/image/upscale/topaz-text-refine": {
+ "/v2/image/upscale/nano-banana-pro": {
"post": {
- "description": "Upscale an image to 2x, 4x, or 8x its original resolution; no prompt is\nneeded. Upload the source `image` using `multipart/form-data`.\nReturns results directly by default; set `async` or supply a\n`webhook_url` to get a `generation_id` and poll\n`GET /v2/generations/{generation_id}`.\n",
- "operationId": "post_upscale_image_topaz_text_refine",
+ "description": "Regenerate an image at a higher `resolution_tier` (1K, 2K, or 4K) while\npreserving its content, composition, and style. Upload the source\n`image` using `multipart/form-data`.\nReturns results directly by default; set `async` or supply a\n`webhook_url` to get a `generation_id` and poll\n`GET /v2/generations/{generation_id}`.\n",
+ "operationId": "post_upscale_image_nano_banana_pro",
"parameters": [
{
"description": "When true, the request is validated and priced but not run: nothing is\ngenerated, stored, or billed, and no safety review is performed. The\nresponse is a `PriceQuote` object instead of the usual response for this\nendpoint. Send exactly the request you would send to generate, so the\nquote reflects the same options.\n",
@@ -11422,16 +11427,16 @@
}
},
"schema": {
- "$ref": "#/components/schemas/UpscaleImageTopazTextRefineRequest"
+ "$ref": "#/components/schemas/UpscaleImageNanoBananaProRequest"
}
},
"application/json": {
"schema": {
- "$ref": "#/components/schemas/UpscaleImageTopazTextRefineRequest"
+ "$ref": "#/components/schemas/UpscaleImageNanoBananaProRequest"
}
}
},
- "description": "A request to upscale one image with Topaz Text Refine. Upload the source `image` using `multipart/form-data`.",
+ "description": "A request to upscale one image with Nano Banana Pro. Upload the source `image` using `multipart/form-data`.",
"required": true,
"x-body-name": "body"
},
@@ -11440,14 +11445,14 @@
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/UpscaleImageTopazTextRefineResponse"
+ "$ref": "#/components/schemas/UpscaleImageNanoBananaProResponse"
}
}
},
"description": "The upscaled image (synchronous requests), or an acknowledgement to poll with `GET /v2/generations/{generation_id}` (`async` requests)."
},
"400": {
- "description": "Invalid input provided, or the output would exceed the 8K limit."
+ "description": "Invalid input provided."
},
"401": {
"description": "Unauthorized."
@@ -11465,6 +11470,9 @@
"404": {
"description": "The source image was not found."
},
+ "422": {
+ "description": "The prompt did not pass safety checks."
+ },
"429": {
"content": {
"application/json": {
@@ -11482,18 +11490,18 @@
"description": "The endpoint is temporarily unavailable."
}
},
- "summary": "Upscale with Topaz Text Refine",
+ "summary": "Upscale with Nano Banana Pro",
"tags": [
"images-upscale"
],
- "x-tool-description": "Upscale an image asset with Topaz Text Refine. No prompt; output is limited to 8192 pixels per side.",
+ "x-tool-description": "Upscale an image asset with Nano Banana Pro, preserving content, composition, and style. The source must be smaller than the requested resolution tier. An optional prompt guides enhancement.",
"x-openapi-router-controller": "external_api.generated.openapi.controllers.images_upscale_controller"
}
},
- "/v2/image/upscale/topaz-wonder-3-5": {
+ "/v2/image/upscale/topaz-bloom-2": {
"post": {
- "description": "Upscale an image to 2x, 4x, or 8x its original resolution, with\n`enhancement_strength` controlling how strongly detail is reconstructed.\nUpload the source `image` using `multipart/form-data`.\nReturns results directly by default; set `async` or supply a\n`webhook_url` to get a `generation_id` and poll\n`GET /v2/generations/{generation_id}`.\n",
- "operationId": "post_upscale_image_topaz_wonder35",
+ "description": "Creatively upscale an image to 2x, 4x, or 8x its original resolution,\noptionally guided by a `prompt`. Upload the source `image` using\n`multipart/form-data`.\nReturns results directly by default; set `async` or supply a\n`webhook_url` to get a `generation_id` and poll\n`GET /v2/generations/{generation_id}`.\n",
+ "operationId": "post_upscale_image_topaz_bloom2",
"parameters": [
{
"description": "When true, the request is validated and priced but not run: nothing is\ngenerated, stored, or billed, and no safety review is performed. The\nresponse is a `PriceQuote` object instead of the usual response for this\nendpoint. Send exactly the request you would send to generate, so the\nquote reflects the same options.\n",
@@ -11516,16 +11524,16 @@
}
},
"schema": {
- "$ref": "#/components/schemas/UpscaleImageTopazWonder35Request"
+ "$ref": "#/components/schemas/UpscaleImageTopazBloom2Request"
}
},
"application/json": {
"schema": {
- "$ref": "#/components/schemas/UpscaleImageTopazWonder35Request"
+ "$ref": "#/components/schemas/UpscaleImageTopazBloom2Request"
}
}
},
- "description": "A request to upscale one image with Topaz Wonder 3.5. Upload the source `image` using `multipart/form-data`.",
+ "description": "A request to upscale one image with Topaz Bloom 2. Upload the source `image` using `multipart/form-data`.",
"required": true,
"x-body-name": "body"
},
@@ -11534,7 +11542,7 @@
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/UpscaleImageTopazWonder35Response"
+ "$ref": "#/components/schemas/UpscaleImageTopazBloom2Response"
}
}
},
@@ -11559,6 +11567,9 @@
"404": {
"description": "The source image was not found."
},
+ "422": {
+ "description": "The prompt did not pass safety checks."
+ },
"429": {
"content": {
"application/json": {
@@ -11576,151 +11587,114 @@
"description": "The endpoint is temporarily unavailable."
}
},
- "summary": "Upscale with Topaz Wonder 3.5",
+ "summary": "Upscale with Topaz Bloom 2",
"tags": [
"images-upscale"
],
- "x-tool-description": "Upscale an image asset with Topaz Wonder 3.5. enhancement_strength controls detail reconstruction. No prompt; output is limited to 8192 pixels per side.",
+ "x-tool-description": "Creatively upscale an image asset with Topaz Bloom 2. An optional prompt guides detail; creativity controls reinterpretation. Output is limited to 8192 pixels per side.",
"x-openapi-router-controller": "external_api.generated.openapi.controllers.images_upscale_controller"
}
},
- "/v2/integrations": {
- "get": {
- "description": "Lists the distinct integration types enabled for the authenticated organization. The response does not expose configured integration rows, provider details, configuration, or credentials.",
- "operationId": "get_integrations",
- "responses": {
- "200": {
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/GetIntegrationsResponse"
- }
- }
- },
- "description": "Enabled integration types for the authenticated organization."
- },
- "401": {
- "description": "Authentication is required."
- },
- "403": {
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/IntegrationErrorResponse"
- }
- }
- },
- "description": "The caller is not allowed to discover integrations or the mini-app token lacks the required existing asset-browsing scope."
- }
- },
- "security": [
- {
- "BearerAuth": []
- }
- ],
- "summary": "List enabled integration types",
- "tags": [
- "integrations"
- ],
- "x-openapi-router-controller": "external_api.generated.openapi.controllers.integrations_controller"
- }
- },
- "/v2/integrations/{integration_type}/assets/search": {
+ "/v2/image/upscale/topaz-redefine": {
"post": {
- "operationId": "post_integration_assets_search",
+ "description": "Creatively upscale an image to 2x, 4x, or 8x its original resolution,\nguided by an optional `prompt` or `autoprompt`. Upload the source\n`image` using `multipart/form-data`.\nReturns results directly by default; set `async` or supply a\n`webhook_url` to get a `generation_id` and poll\n`GET /v2/generations/{generation_id}`.\n",
+ "operationId": "post_upscale_image_topaz_redefine",
"parameters": [
{
- "description": "The integration operation family to search.",
- "in": "path",
- "name": "integration_type",
- "required": true,
+ "description": "When true, the request is validated and priced but not run: nothing is\ngenerated, stored, or billed, and no safety review is performed. The\nresponse is a `PriceQuote` object instead of the usual response for this\nendpoint. Send exactly the request you would send to generate, so the\nquote reflects the same options.\n",
+ "in": "query",
+ "name": "dry_run",
+ "required": false,
"schema": {
- "$ref": "#/components/schemas/IntegrationType"
- }
+ "default": false,
+ "type": "boolean"
+ },
+ "x-tool-description": "Validate and quote only; no generation, storage, billing, or safety review."
}
],
"requestBody": {
"content": {
+ "multipart/form-data": {
+ "encoding": {
+ "image_asset_identifier": {
+ "contentType": "application/json"
+ }
+ },
+ "schema": {
+ "$ref": "#/components/schemas/UpscaleImageTopazRedefineRequest"
+ }
+ },
"application/json": {
"schema": {
- "$ref": "#/components/schemas/IntegrationAssetSearchRequest"
+ "$ref": "#/components/schemas/UpscaleImageTopazRedefineRequest"
}
}
},
+ "description": "A request to upscale one image with Topaz Redefine. Upload the source `image` using `multipart/form-data`.",
"required": true,
- "x-body-name": "integration_asset_search_request"
+ "x-body-name": "body"
},
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/IntegrationAssetSearchResponse"
+ "$ref": "#/components/schemas/UpscaleImageTopazRedefineResponse"
}
}
},
- "description": "A normalized, bounded set of assets from configured integrations."
+ "description": "The upscaled image (synchronous requests), or an acknowledgement to poll with `GET /v2/generations/{generation_id}` (`async` requests)."
},
"400": {
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/IntegrationErrorResponse"
- }
- }
- },
- "description": "The integration type or search request is invalid."
+ "description": "Invalid input provided, or the output would exceed the 8K limit."
},
"401": {
- "description": "Authentication is required."
+ "description": "Unauthorized."
},
- "403": {
+ "402": {
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/IntegrationErrorResponse"
+ "$ref": "#/components/schemas/GenerationErrorResponse"
}
}
},
- "description": "The caller is not allowed to search integrations or the mini-app token lacks the required existing asset-browsing scope."
+ "description": "Insufficient credits or quota."
},
"404": {
+ "description": "The source image was not found."
+ },
+ "422": {
+ "description": "The prompt did not pass safety checks."
+ },
+ "429": {
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/IntegrationErrorResponse"
+ "$ref": "#/components/schemas/GenerationErrorResponse"
}
}
},
- "description": "The requested integration type is not configured."
+ "description": "Too many requests."
+ },
+ "500": {
+ "description": "Internal server error."
},
"503": {
- "content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/IntegrationErrorResponse"
- }
- }
- },
- "description": "Integration search is not available."
+ "description": "The endpoint is temporarily unavailable."
}
},
- "security": [
- {
- "BearerAuth": []
- }
- ],
- "summary": "Search assets from an enabled integration type",
+ "summary": "Upscale with Topaz Redefine",
"tags": [
- "integrations"
+ "images-upscale"
],
- "x-openapi-router-controller": "external_api.generated.openapi.controllers.integrations_controller"
+ "x-openapi-router-controller": "external_api.generated.openapi.controllers.images_upscale_controller"
}
},
- "/v2/tool/ad-localizer": {
+ "/v2/image/upscale/topaz-standard-2": {
"post": {
- "description": "Rebuilds an ad in one target language, preserving its layout, logos,\nbrand type, and product so only the visible marketing copy changes.\nUpload the source ad as `image` using `multipart/form-data`; the copy\nis translated unless you supply `exact_copy`.\nReturns a `generation_id`; poll `GET /v2/generations/{generation_id}` or\nsupply a `webhook_url`.\n",
- "operationId": "post_ad_localizer",
+ "description": "Upscale an image to 2x, 4x, or 8x its original resolution; no prompt is\nneeded. Upload the source `image` using `multipart/form-data`.\nReturns results directly by default; set `async` or supply a\n`webhook_url` to get a `generation_id` and poll\n`GET /v2/generations/{generation_id}`.\n",
+ "operationId": "post_upscale_image_topaz_standard_v2",
"parameters": [
{
"description": "When true, the request is validated and priced but not run: nothing is\ngenerated, stored, or billed, and no safety review is performed. The\nresponse is a `PriceQuote` object instead of the usual response for this\nendpoint. Send exactly the request you would send to generate, so the\nquote reflects the same options.\n",
@@ -11743,16 +11717,16 @@
}
},
"schema": {
- "$ref": "#/components/schemas/AdLocalizerRequest"
+ "$ref": "#/components/schemas/UpscaleImageTopazStandardV2Request"
}
},
"application/json": {
"schema": {
- "$ref": "#/components/schemas/AdLocalizerRequest"
+ "$ref": "#/components/schemas/UpscaleImageTopazStandardV2Request"
}
}
},
- "description": "The source ad and the target language.",
+ "description": "A request to upscale one image with Topaz Standard V2. Upload the source `image` using `multipart/form-data`.",
"required": true,
"x-body-name": "body"
},
@@ -11761,14 +11735,14 @@
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/AdLocalizerResponse"
+ "$ref": "#/components/schemas/UpscaleImageTopazStandardV2Response"
}
}
},
- "description": "Ad localization accepted for asynchronous processing."
+ "description": "The upscaled image (synchronous requests), or an acknowledgement to poll with `GET /v2/generations/{generation_id}` (`async` requests)."
},
"400": {
- "description": "Invalid input provided."
+ "description": "Invalid input provided, or the output would exceed the 8K limit."
},
"401": {
"description": "Unauthorized."
@@ -11783,14 +11757,8 @@
},
"description": "Insufficient credits or quota."
},
- "403": {
- "description": "Not authorized to use Ad Localizer."
- },
"404": {
- "description": "An input asset was not found or is not readable."
- },
- "422": {
- "description": "The instruction did not pass prompt safety checks."
+ "description": "The source image was not found."
},
"429": {
"content": {
@@ -11801,19 +11769,26 @@
}
},
"description": "Too many requests."
+ },
+ "500": {
+ "description": "Internal server error."
+ },
+ "503": {
+ "description": "The endpoint is temporarily unavailable."
}
},
- "summary": "Ad Localizer",
+ "summary": "Upscale with Topaz Standard V2",
"tags": [
- "edit-workflow"
+ "images-upscale"
],
- "x-openapi-router-controller": "external_api.generated.openapi.controllers.edit_workflow_controller"
+ "x-tool-description": "Upscale an image asset with Topaz Standard V2. No prompt; output is limited to 8192 pixels per side.",
+ "x-openapi-router-controller": "external_api.generated.openapi.controllers.images_upscale_controller"
}
},
- "/v2/tool/ad-resizer": {
+ "/v2/image/upscale/topaz-text-refine": {
"post": {
- "description": "Reframes an ad creative to an exact ad resolution, regenerating the\nlayout so text and key elements stay legible at the new size. Upload\nthe source creative as `image` using `multipart/form-data`, and supply\n`platform` to keep the ad inside that platform's safe zone.\nReturns a `generation_id`; poll `GET /v2/generations/{generation_id}` or\nsupply a `webhook_url`.",
- "operationId": "post_ad_resizer",
+ "description": "Upscale an image to 2x, 4x, or 8x its original resolution; no prompt is\nneeded. Upload the source `image` using `multipart/form-data`.\nReturns results directly by default; set `async` or supply a\n`webhook_url` to get a `generation_id` and poll\n`GET /v2/generations/{generation_id}`.\n",
+ "operationId": "post_upscale_image_topaz_text_refine",
"parameters": [
{
"description": "When true, the request is validated and priced but not run: nothing is\ngenerated, stored, or billed, and no safety review is performed. The\nresponse is a `PriceQuote` object instead of the usual response for this\nendpoint. Send exactly the request you would send to generate, so the\nquote reflects the same options.\n",
@@ -11836,16 +11811,16 @@
}
},
"schema": {
- "$ref": "#/components/schemas/AdResizerRequest"
+ "$ref": "#/components/schemas/UpscaleImageTopazTextRefineRequest"
}
},
"application/json": {
"schema": {
- "$ref": "#/components/schemas/AdResizerRequest"
+ "$ref": "#/components/schemas/UpscaleImageTopazTextRefineRequest"
}
}
},
- "description": "The source creative, the target ad resolution, and optionally the platform whose safe zone the ad must stay inside.",
+ "description": "A request to upscale one image with Topaz Text Refine. Upload the source `image` using `multipart/form-data`.",
"required": true,
"x-body-name": "body"
},
@@ -11854,14 +11829,14 @@
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/AdResizerResponse"
+ "$ref": "#/components/schemas/UpscaleImageTopazTextRefineResponse"
}
}
},
- "description": "Ad resize accepted for asynchronous processing."
+ "description": "The upscaled image (synchronous requests), or an acknowledgement to poll with `GET /v2/generations/{generation_id}` (`async` requests)."
},
"400": {
- "description": "Invalid input provided."
+ "description": "Invalid input provided, or the output would exceed the 8K limit."
},
"401": {
"description": "Unauthorized."
@@ -11876,14 +11851,8 @@
},
"description": "Insufficient credits or quota."
},
- "403": {
- "description": "Not authorized to resize an ad."
- },
"404": {
- "description": "Source asset not found."
- },
- "422": {
- "description": "The prompt was rejected by safety checks."
+ "description": "The source image was not found."
},
"429": {
"content": {
@@ -11894,44 +11863,39 @@
}
},
"description": "Too many requests."
+ },
+ "500": {
+ "description": "Internal server error."
+ },
+ "503": {
+ "description": "The endpoint is temporarily unavailable."
}
},
- "summary": "Ad Resizer",
+ "summary": "Upscale with Topaz Text Refine",
"tags": [
- "edit-workflow"
+ "images-upscale"
],
- "x-fern-examples": [
+ "x-tool-description": "Upscale an image asset with Topaz Text Refine. No prompt; output is limited to 8192 pixels per side.",
+ "x-openapi-router-controller": "external_api.generated.openapi.controllers.images_upscale_controller"
+ }
+ },
+ "/v2/image/upscale/topaz-wonder-3-5": {
+ "post": {
+ "description": "Upscale an image to 2x, 4x, or 8x its original resolution, with\n`enhancement_strength` controlling how strongly detail is reconstructed.\nUpload the source `image` using `multipart/form-data`.\nReturns results directly by default; set `async` or supply a\n`webhook_url` to get a `generation_id` and poll\n`GET /v2/generations/{generation_id}`.\n",
+ "operationId": "post_upscale_image_topaz_wonder35",
+ "parameters": [
{
- "request": {
- "resolution": "1080x1920",
- "platform": "tiktok",
- "quality": "high",
- "num_images": 1
- },
- "response": {
- "body": {
- "generation_id": "ZGVtb19nZW5lcmF0aW9uX2lk"
- }
+ "description": "When true, the request is validated and priced but not run: nothing is\ngenerated, stored, or billed, and no safety review is performed. The\nresponse is a `PriceQuote` object instead of the usual response for this\nendpoint. Send exactly the request you would send to generate, so the\nquote reflects the same options.\n",
+ "in": "query",
+ "name": "dry_run",
+ "required": false,
+ "schema": {
+ "default": false,
+ "type": "boolean"
},
- "code-samples": [
- {
- "sdk": "curl",
- "code": "curl -X POST https://api.ideogram.ai/v2/tool/ad-resizer \\\n -H \"Api-Key: \" \\\n -H \"Content-Type: multipart/form-data\" \\\n -F image=@ \\\n -F resolution=1080x1920 \\\n -F platform=tiktok \\\n -F quality=high \\\n -F num_images=1\n"
- },
- {
- "sdk": "python",
- "code": "import requests\n\nresponse = requests.post(\n \"https://api.ideogram.ai/v2/tool/ad-resizer\",\n headers={\"Api-Key\": \"\"},\n data={\n \"resolution\": \"1080x1920\",\n \"platform\": \"tiktok\",\n \"quality\": \"high\",\n \"num_images\": 1,\n },\n files={\"image\": open(\"\", \"rb\")},\n)\nprint(response.json())\n"
- }
- ]
+ "x-tool-description": "Validate and quote only; no generation, storage, billing, or safety review."
}
],
- "x-openapi-router-controller": "external_api.generated.openapi.controllers.edit_workflow_controller"
- }
- },
- "/v2/tool/ad-variations": {
- "post": {
- "description": "Creates on-brand variations of an ad along one axis, preserving logos,\nbrand colors, the product, and all on-image text. Upload the source\ncreative as `image` using `multipart/form-data` and choose a\n`variation_type`.\nReturns a `generation_id`; poll `GET /v2/generations/{generation_id}` or\nsupply a `webhook_url`.\n",
- "operationId": "post_ad_variations",
"requestBody": {
"content": {
"multipart/form-data": {
@@ -11941,16 +11905,16 @@
}
},
"schema": {
- "$ref": "#/components/schemas/AdVariationsRequest"
+ "$ref": "#/components/schemas/UpscaleImageTopazWonder35Request"
}
},
"application/json": {
"schema": {
- "$ref": "#/components/schemas/AdVariationsRequest"
+ "$ref": "#/components/schemas/UpscaleImageTopazWonder35Request"
}
}
},
- "description": "The source creative and the variation axis.",
+ "description": "A request to upscale one image with Topaz Wonder 3.5. Upload the source `image` using `multipart/form-data`.",
"required": true,
"x-body-name": "body"
},
@@ -11959,14 +11923,14 @@
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/AdVariationsResponse"
+ "$ref": "#/components/schemas/UpscaleImageTopazWonder35Response"
}
}
},
- "description": "Ad variation accepted for asynchronous processing."
+ "description": "The upscaled image (synchronous requests), or an acknowledgement to poll with `GET /v2/generations/{generation_id}` (`async` requests)."
},
"400": {
- "description": "Invalid input provided."
+ "description": "Invalid input provided, or the output would exceed the 8K limit."
},
"401": {
"description": "Unauthorized."
@@ -11981,14 +11945,8 @@
},
"description": "Insufficient credits or quota."
},
- "403": {
- "description": "Not authorized to generate ad variations."
- },
"404": {
- "description": "Source asset not found."
- },
- "422": {
- "description": "The prompt was rejected by safety checks."
+ "description": "The source image was not found."
},
"429": {
"content": {
@@ -11999,109 +11957,159 @@
}
},
"description": "Too many requests."
+ },
+ "500": {
+ "description": "Internal server error."
+ },
+ "503": {
+ "description": "The endpoint is temporarily unavailable."
}
},
- "summary": "Ad Variations",
+ "summary": "Upscale with Topaz Wonder 3.5",
"tags": [
- "edit-workflow"
+ "images-upscale"
],
- "x-openapi-router-controller": "external_api.generated.openapi.controllers.edit_workflow_controller"
+ "x-tool-description": "Upscale an image asset with Topaz Wonder 3.5. enhancement_strength controls detail reconstruction. No prompt; output is limited to 8192 pixels per side.",
+ "x-openapi-router-controller": "external_api.generated.openapi.controllers.images_upscale_controller"
}
},
- "/v2/tool/colorways": {
+ "/v2/integrations": {
+ "get": {
+ "description": "Lists the distinct integration types enabled for the authenticated organization. The response does not expose configured integration rows, provider details, configuration, or credentials.",
+ "operationId": "get_integrations",
+ "responses": {
+ "200": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/GetIntegrationsResponse"
+ }
+ }
+ },
+ "description": "Enabled integration types for the authenticated organization."
+ },
+ "401": {
+ "description": "Authentication is required."
+ },
+ "403": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/IntegrationErrorResponse"
+ }
+ }
+ },
+ "description": "The caller is not allowed to discover integrations or the mini-app token lacks the required existing asset-browsing scope."
+ }
+ },
+ "security": [
+ {
+ "BearerAuth": []
+ }
+ ],
+ "summary": "List enabled integration types",
+ "tags": [
+ "integrations"
+ ],
+ "x-openapi-router-controller": "external_api.generated.openapi.controllers.integrations_controller"
+ }
+ },
+ "/v2/integrations/{integration_type}/assets/search": {
"post": {
- "description": "Recolors masked regions of a product photo, each to its own target\ncolor, preserving the product's geometry, materials, prints, logos, and\neverything outside the masks. Upload the `image` and up to 4 `masks`\nusing `multipart/form-data`, with one entry in `colors` per mask.\nReturns a `generation_id`; poll `GET /v2/generations/{generation_id}` or\nsupply a `webhook_url`.\n",
- "operationId": "post_colorways",
+ "operationId": "post_integration_assets_search",
"parameters": [
{
- "description": "When true, the request is validated and priced but not run: nothing is\ngenerated, stored, or billed, and no safety review is performed. The\nresponse is a `PriceQuote` object instead of the usual response for this\nendpoint. Send exactly the request you would send to generate, so the\nquote reflects the same options.\n",
- "in": "query",
- "name": "dry_run",
- "required": false,
+ "description": "The integration operation family to search.",
+ "in": "path",
+ "name": "integration_type",
+ "required": true,
"schema": {
- "default": false,
- "type": "boolean"
- },
- "x-tool-description": "Validate and quote only; no generation, storage, billing, or safety review."
+ "$ref": "#/components/schemas/IntegrationType"
+ }
}
],
"requestBody": {
"content": {
- "multipart/form-data": {
- "encoding": {
- "image_asset_identifier": {
- "contentType": "application/json"
- },
- "mask_asset_identifiers": {
- "contentType": "application/json"
- }
- },
- "schema": {
- "$ref": "#/components/schemas/ColorwaysRequest"
- }
- },
"application/json": {
"schema": {
- "$ref": "#/components/schemas/ColorwaysRequest"
+ "$ref": "#/components/schemas/IntegrationAssetSearchRequest"
}
}
},
- "description": "The product photo, one mask or several masks marking the regions to recolor, and one target color per mask.",
"required": true,
- "x-body-name": "body"
+ "x-body-name": "integration_asset_search_request"
},
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/ColorwaysResponse"
+ "$ref": "#/components/schemas/IntegrationAssetSearchResponse"
}
}
},
- "description": "Colorway accepted for asynchronous processing."
+ "description": "A normalized, bounded set of assets from configured integrations."
},
"400": {
- "description": "Invalid input provided."
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/IntegrationErrorResponse"
+ }
+ }
+ },
+ "description": "The integration type or search request is invalid."
},
"401": {
- "description": "Unauthorized."
+ "description": "Authentication is required."
},
- "402": {
+ "403": {
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/GenerationErrorResponse"
+ "$ref": "#/components/schemas/IntegrationErrorResponse"
}
}
},
- "description": "Insufficient credits or quota."
+ "description": "The caller is not allowed to search integrations or the mini-app token lacks the required existing asset-browsing scope."
},
- "403": {
- "description": "Not authorized to create a colorway."
+ "404": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/IntegrationErrorResponse"
+ }
+ }
+ },
+ "description": "The requested integration type is not configured."
},
- "429": {
+ "503": {
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/GenerationErrorResponse"
+ "$ref": "#/components/schemas/IntegrationErrorResponse"
}
}
},
- "description": "Too many requests."
+ "description": "Integration search is not available."
}
},
- "summary": "Colorways",
+ "security": [
+ {
+ "BearerAuth": []
+ }
+ ],
+ "summary": "Search assets from an enabled integration type",
"tags": [
- "edit-workflow"
+ "integrations"
],
- "x-openapi-router-controller": "external_api.generated.openapi.controllers.edit_workflow_controller"
+ "x-openapi-router-controller": "external_api.generated.openapi.controllers.integrations_controller"
}
},
- "/v2/tool/ghost-mannequin": {
+ "/v2/tool/ad-localizer": {
"post": {
- "description": "Turns photos of one garment into a ghost-mannequin product image on a\nclean white studio background, removing the person, mannequin, hanger,\nand other clothing. Upload the photos using `multipart/form-data`, in\nthe directional fields (such as `front_image`) when the camera\ndirection is known and in `garment_images` otherwise.\nReturns a `generation_id`; poll `GET /v2/generations/{generation_id}` or\nsupply a `webhook_url`.\n",
- "operationId": "post_ghost_mannequin",
+ "description": "Rebuilds an ad in one target language, preserving its layout, logos,\nbrand type, and product so only the visible marketing copy changes.\nUpload the source ad as `image` using `multipart/form-data`; the copy\nis translated unless you supply `exact_copy`.\nReturns a `generation_id`; poll `GET /v2/generations/{generation_id}` or\nsupply a `webhook_url`.\n",
+ "operationId": "post_ad_localizer",
"parameters": [
{
"description": "When true, the request is validated and priced but not run: nothing is\ngenerated, stored, or billed, and no safety review is performed. The\nresponse is a `PriceQuote` object instead of the usual response for this\nendpoint. Send exactly the request you would send to generate, so the\nquote reflects the same options.\n",
@@ -12119,39 +12127,21 @@
"content": {
"multipart/form-data": {
"encoding": {
- "garment_asset_identifiers": {
- "contentType": "application/json"
- },
- "front_asset_identifier": {
- "contentType": "application/json"
- },
- "back_asset_identifier": {
- "contentType": "application/json"
- },
- "left_asset_identifier": {
- "contentType": "application/json"
- },
- "right_asset_identifier": {
- "contentType": "application/json"
- },
- "top_asset_identifier": {
- "contentType": "application/json"
- },
- "bottom_asset_identifier": {
+ "image_asset_identifier": {
"contentType": "application/json"
}
},
"schema": {
- "$ref": "#/components/schemas/GhostMannequinRequest"
+ "$ref": "#/components/schemas/AdLocalizerRequest"
}
},
"application/json": {
"schema": {
- "$ref": "#/components/schemas/GhostMannequinRequest"
+ "$ref": "#/components/schemas/AdLocalizerRequest"
}
}
},
- "description": "The garment photos and the requested output view.",
+ "description": "The source ad and the target language.",
"required": true,
"x-body-name": "body"
},
@@ -12160,11 +12150,11 @@
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/GhostMannequinResponse"
+ "$ref": "#/components/schemas/AdLocalizerResponse"
}
}
},
- "description": "Ghost-mannequin generation accepted for asynchronous processing."
+ "description": "Ad localization accepted for asynchronous processing."
},
"400": {
"description": "Invalid input provided."
@@ -12183,16 +12173,13 @@
"description": "Insufficient credits or quota."
},
"403": {
- "description": "Not authorized to create ghost-mannequin images."
+ "description": "Not authorized to use Ad Localizer."
},
"404": {
"description": "An input asset was not found or is not readable."
},
- "413": {
- "description": "The combined raw image uploads exceed 100 MB."
- },
"422": {
- "description": "The instruction did not pass prompt safety validation."
+ "description": "The instruction did not pass prompt safety checks."
},
"429": {
"content": {
@@ -12205,17 +12192,17 @@
"description": "Too many requests."
}
},
- "summary": "Ghost Mannequin",
+ "summary": "Ad Localizer",
"tags": [
"edit-workflow"
],
"x-openapi-router-controller": "external_api.generated.openapi.controllers.edit_workflow_controller"
}
},
- "/v2/tool/living-image": {
+ "/v2/tool/ad-resizer": {
"post": {
- "description": "Animates one image into a short, loop-ready clip for use as a living background. The camera stays fixed and only the parts of the scene that would move in real life move: water, light, mist, particles, fabric, creatures. Ideogram inspects the image and writes the motion prompt, so the request needs only the image.\nVideo generation runs asynchronously. Poll `GET /v1/generations/{generation_id}` with the returned `generation_id` until the generation completes or fails.",
- "operationId": "post_living_image",
+ "description": "Reframes an ad creative to an exact ad resolution, regenerating the\nlayout so text and key elements stay legible at the new size. Upload\nthe source creative as `image` using `multipart/form-data`, and supply\n`platform` to keep the ad inside that platform's safe zone.\nReturns a `generation_id`; poll `GET /v2/generations/{generation_id}` or\nsupply a `webhook_url`.",
+ "operationId": "post_ad_resizer",
"parameters": [
{
"description": "When true, the request is validated and priced but not run: nothing is\ngenerated, stored, or billed, and no safety review is performed. The\nresponse is a `PriceQuote` object instead of the usual response for this\nendpoint. Send exactly the request you would send to generate, so the\nquote reflects the same options.\n",
@@ -12231,26 +12218,36 @@
],
"requestBody": {
"content": {
+ "multipart/form-data": {
+ "encoding": {
+ "image_asset_identifier": {
+ "contentType": "application/json"
+ }
+ },
+ "schema": {
+ "$ref": "#/components/schemas/AdResizerRequest"
+ }
+ },
"application/json": {
"schema": {
- "$ref": "#/components/schemas/LivingImageRequest"
+ "$ref": "#/components/schemas/AdResizerRequest"
}
}
},
- "description": "The image to bring to life and the output options.",
+ "description": "The source creative, the target ad resolution, and optionally the platform whose safe zone the ad must stay inside.",
"required": true,
- "x-body-name": "living_image_request"
+ "x-body-name": "body"
},
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/LivingImageResponse"
+ "$ref": "#/components/schemas/AdResizerResponse"
}
}
},
- "description": "Living image accepted for asynchronous processing."
+ "description": "Ad resize accepted for asynchronous processing."
},
"400": {
"description": "Invalid input provided."
@@ -12269,10 +12266,13 @@
"description": "Insufficient credits or quota."
},
"403": {
- "description": "This account does not have access to video generation."
+ "description": "Not authorized to resize an ad."
},
"404": {
- "description": "The image was not found or is not readable."
+ "description": "Source asset not found."
+ },
+ "422": {
+ "description": "The prompt was rejected by safety checks."
},
"429": {
"content": {
@@ -12283,60 +12283,64 @@
}
},
"description": "Too many requests."
- },
- "503": {
- "description": "The endpoint is temporarily unavailable."
}
},
- "summary": "Turn a still image into a subtle looping video",
+ "summary": "Ad Resizer",
"tags": [
- "video-generate"
+ "edit-workflow"
],
- "x-openapi-router-controller": "external_api.generated.openapi.controllers.video_generate_controller"
- }
- },
- "/v2/tool/material-swap": {
- "post": {
- "description": "Re-renders masked regions of a product photo in the materials shown in\nreference images, preserving the product's construction and everything\noutside the masks. Upload the `image`, up to 4 `masks`, and the\n`materials` using `multipart/form-data`.\nReturns a `generation_id`; poll `GET /v2/generations/{generation_id}` or\nsupply a `webhook_url`.\n",
- "operationId": "post_material_swap",
- "parameters": [
+ "x-tool-description": "Reframe an ad creative image asset to an exact ad resolution, regenerating the layout so text and key elements stay legible; set `platform` to keep it inside that platform's safe zone. Returns a generation reference.",
+ "x-fern-examples": [
{
- "description": "When true, the request is validated and priced but not run: nothing is\ngenerated, stored, or billed, and no safety review is performed. The\nresponse is a `PriceQuote` object instead of the usual response for this\nendpoint. Send exactly the request you would send to generate, so the\nquote reflects the same options.\n",
- "in": "query",
- "name": "dry_run",
- "required": false,
- "schema": {
- "default": false,
- "type": "boolean"
+ "request": {
+ "resolution": "1080x1920",
+ "platform": "tiktok",
+ "quality": "high",
+ "num_images": 1
},
- "x-tool-description": "Validate and quote only; no generation, storage, billing, or safety review."
+ "response": {
+ "body": {
+ "generation_id": "ZGVtb19nZW5lcmF0aW9uX2lk"
+ }
+ },
+ "code-samples": [
+ {
+ "sdk": "curl",
+ "code": "curl -X POST https://api.ideogram.ai/v2/tool/ad-resizer \\\n -H \"Api-Key: \" \\\n -H \"Content-Type: multipart/form-data\" \\\n -F image=@ \\\n -F resolution=1080x1920 \\\n -F platform=tiktok \\\n -F quality=high \\\n -F num_images=1\n"
+ },
+ {
+ "sdk": "python",
+ "code": "import requests\n\nresponse = requests.post(\n \"https://api.ideogram.ai/v2/tool/ad-resizer\",\n headers={\"Api-Key\": \"\"},\n data={\n \"resolution\": \"1080x1920\",\n \"platform\": \"tiktok\",\n \"quality\": \"high\",\n \"num_images\": 1,\n },\n files={\"image\": open(\"\", \"rb\")},\n)\nprint(response.json())\n"
+ }
+ ]
}
],
+ "x-openapi-router-controller": "external_api.generated.openapi.controllers.edit_workflow_controller"
+ }
+ },
+ "/v2/tool/ad-variations": {
+ "post": {
+ "description": "Creates on-brand variations of an ad along one axis, preserving logos,\nbrand colors, the product, and all on-image text. Upload the source\ncreative as `image` using `multipart/form-data` and choose a\n`variation_type`.\nReturns a `generation_id`; poll `GET /v2/generations/{generation_id}` or\nsupply a `webhook_url`.\n",
+ "operationId": "post_ad_variations",
"requestBody": {
"content": {
"multipart/form-data": {
"encoding": {
"image_asset_identifier": {
"contentType": "application/json"
- },
- "mask_asset_identifiers": {
- "contentType": "application/json"
- },
- "material_asset_identifiers": {
- "contentType": "application/json"
}
},
"schema": {
- "$ref": "#/components/schemas/MaterialSwapRequest"
+ "$ref": "#/components/schemas/AdVariationsRequest"
}
},
"application/json": {
"schema": {
- "$ref": "#/components/schemas/MaterialSwapRequest"
+ "$ref": "#/components/schemas/AdVariationsRequest"
}
}
},
- "description": "The product photo, one mask or several masks marking the regions to change, and either one shared material reference or one per mask.",
+ "description": "The source creative and the variation axis.",
"required": true,
"x-body-name": "body"
},
@@ -12345,11 +12349,11 @@
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/MaterialSwapResponse"
+ "$ref": "#/components/schemas/AdVariationsResponse"
}
}
},
- "description": "Material swap accepted for asynchronous processing."
+ "description": "Ad variation accepted for asynchronous processing."
},
"400": {
"description": "Invalid input provided."
@@ -12368,7 +12372,13 @@
"description": "Insufficient credits or quota."
},
"403": {
- "description": "Not authorized to create a material swap."
+ "description": "Not authorized to generate ad variations."
+ },
+ "404": {
+ "description": "Source asset not found."
+ },
+ "422": {
+ "description": "The prompt was rejected by safety checks."
},
"429": {
"content": {
@@ -12381,39 +12391,52 @@
"description": "Too many requests."
}
},
- "summary": "Material Swap",
+ "summary": "Ad Variations",
"tags": [
"edit-workflow"
],
"x-openapi-router-controller": "external_api.generated.openapi.controllers.edit_workflow_controller"
}
},
- "/v2/tool/model-pose-variants": {
+ "/v2/tool/colorways": {
"post": {
- "description": "Changes the model's pose or camera angle in a fashion image while\npreserving the model, garment, styling, and scene. Upload the\n`source_image` using `multipart/form-data` and describe the new pose in\n`instruction`.\nReturns a `generation_id`; poll `GET /v2/generations/{generation_id}` or\nsupply a `webhook_url`.\n",
- "operationId": "post_model_pose_variants",
+ "description": "Recolors masked regions of a product photo, each to its own target\ncolor, preserving the product's geometry, materials, prints, logos, and\neverything outside the masks. Upload the `image` and up to 4 `masks`\nusing `multipart/form-data`, with one entry in `colors` per mask.\nReturns a `generation_id`; poll `GET /v2/generations/{generation_id}` or\nsupply a `webhook_url`.\n",
+ "operationId": "post_colorways",
+ "parameters": [
+ {
+ "description": "When true, the request is validated and priced but not run: nothing is\ngenerated, stored, or billed, and no safety review is performed. The\nresponse is a `PriceQuote` object instead of the usual response for this\nendpoint. Send exactly the request you would send to generate, so the\nquote reflects the same options.\n",
+ "in": "query",
+ "name": "dry_run",
+ "required": false,
+ "schema": {
+ "default": false,
+ "type": "boolean"
+ },
+ "x-tool-description": "Validate and quote only; no generation, storage, billing, or safety review."
+ }
+ ],
"requestBody": {
"content": {
"multipart/form-data": {
"encoding": {
- "source_asset_identifier": {
+ "image_asset_identifier": {
"contentType": "application/json"
},
- "pose_reference_asset_identifier": {
+ "mask_asset_identifiers": {
"contentType": "application/json"
}
},
"schema": {
- "$ref": "#/components/schemas/ModelPoseVariantsRequest"
+ "$ref": "#/components/schemas/ColorwaysRequest"
}
},
"application/json": {
"schema": {
- "$ref": "#/components/schemas/ModelPoseVariantsRequest"
+ "$ref": "#/components/schemas/ColorwaysRequest"
}
}
},
- "description": "The fashion image to edit and the pose direction.",
+ "description": "The product photo, one mask or several masks marking the regions to recolor, and one target color per mask.",
"required": true,
"x-body-name": "body"
},
@@ -12422,11 +12445,11 @@
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/ModelPoseVariantsResponse"
+ "$ref": "#/components/schemas/ColorwaysResponse"
}
}
},
- "description": "Pose-variant generation accepted for asynchronous processing."
+ "description": "Colorway accepted for asynchronous processing."
},
"400": {
"description": "Invalid input provided."
@@ -12445,13 +12468,7 @@
"description": "Insufficient credits or quota."
},
"403": {
- "description": "Not authorized to generate pose variants."
- },
- "404": {
- "description": "An input asset was not found or is not readable."
- },
- "422": {
- "description": "The instruction did not pass prompt safety checks."
+ "description": "Not authorized to create a colorway."
},
"429": {
"content": {
@@ -12464,39 +12481,68 @@
"description": "Too many requests."
}
},
- "summary": "Model Pose Variants",
+ "summary": "Colorways",
"tags": [
"edit-workflow"
],
+ "x-tool-description": "Recolor masked regions of a product photo asset, each to its own target color, preserving geometry, materials, prints, logos, and everything outside the masks. Returns a generation reference.",
"x-openapi-router-controller": "external_api.generated.openapi.controllers.edit_workflow_controller"
}
},
- "/v2/tool/model-swap": {
+ "/v2/tool/ghost-mannequin": {
"post": {
- "description": "Replaces the model in a fashion image with the person shown in one to\nfour target-model references, keeping the product, pose, scene,\nlighting, and framing. Upload the working image as `source_image` using\n`multipart/form-data`.\nReturns a `generation_id`; poll `GET /v2/generations/{generation_id}` or\nsupply a `webhook_url`.\n",
- "operationId": "post_model_swap",
+ "description": "Turns photos of one garment into a ghost-mannequin product image on a\nclean white studio background, removing the person, mannequin, hanger,\nand other clothing. Upload the photos using `multipart/form-data`, in\nthe directional fields (such as `front_image`) when the camera\ndirection is known and in `garment_images` otherwise.\nReturns a `generation_id`; poll `GET /v2/generations/{generation_id}` or\nsupply a `webhook_url`.\n",
+ "operationId": "post_ghost_mannequin",
+ "parameters": [
+ {
+ "description": "When true, the request is validated and priced but not run: nothing is\ngenerated, stored, or billed, and no safety review is performed. The\nresponse is a `PriceQuote` object instead of the usual response for this\nendpoint. Send exactly the request you would send to generate, so the\nquote reflects the same options.\n",
+ "in": "query",
+ "name": "dry_run",
+ "required": false,
+ "schema": {
+ "default": false,
+ "type": "boolean"
+ },
+ "x-tool-description": "Validate and quote only; no generation, storage, billing, or safety review."
+ }
+ ],
"requestBody": {
"content": {
"multipart/form-data": {
"encoding": {
- "source_asset_identifier": {
+ "garment_asset_identifiers": {
"contentType": "application/json"
},
- "model_asset_identifiers": {
+ "front_asset_identifier": {
+ "contentType": "application/json"
+ },
+ "back_asset_identifier": {
+ "contentType": "application/json"
+ },
+ "left_asset_identifier": {
+ "contentType": "application/json"
+ },
+ "right_asset_identifier": {
+ "contentType": "application/json"
+ },
+ "top_asset_identifier": {
+ "contentType": "application/json"
+ },
+ "bottom_asset_identifier": {
"contentType": "application/json"
}
},
"schema": {
- "$ref": "#/components/schemas/ModelSwapRequest"
+ "$ref": "#/components/schemas/GhostMannequinRequest"
}
},
"application/json": {
"schema": {
- "$ref": "#/components/schemas/ModelSwapRequest"
+ "$ref": "#/components/schemas/GhostMannequinRequest"
}
}
},
- "description": "The working image and one to four ordered target-model references.",
+ "description": "The garment photos and the requested output view.",
"required": true,
"x-body-name": "body"
},
@@ -12505,11 +12551,11 @@
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/ModelSwapResponse"
+ "$ref": "#/components/schemas/GhostMannequinResponse"
}
}
},
- "description": "Model swap accepted for asynchronous processing."
+ "description": "Ghost-mannequin generation accepted for asynchronous processing."
},
"400": {
"description": "Invalid input provided."
@@ -12528,13 +12574,16 @@
"description": "Insufficient credits or quota."
},
"403": {
- "description": "Not authorized to use model swap."
+ "description": "Not authorized to create ghost-mannequin images."
},
"404": {
"description": "An input asset was not found or is not readable."
},
+ "413": {
+ "description": "The combined raw image uploads exceed 100 MB."
+ },
"422": {
- "description": "The instruction did not pass prompt safety checks."
+ "description": "The instruction did not pass prompt safety validation."
},
"429": {
"content": {
@@ -12547,39 +12596,52 @@
"description": "Too many requests."
}
},
- "summary": "Model Swap",
+ "summary": "Ghost Mannequin",
"tags": [
"edit-workflow"
],
"x-openapi-router-controller": "external_api.generated.openapi.controllers.edit_workflow_controller"
}
},
- "/v2/tool/packshots": {
+ "/v2/tool/living-image": {
"post": {
- "description": "Creates one polished product photograph from one or more ordered product\nreferences. An optional style reference may guide framing, crop,\nbackground, and lighting without changing the product's identity.\n\nThe request is processed asynchronously. Poll\n`GET /v2/generations/{generation_id}` with the returned `generation_id`\nuntil the generation is completed or failed. Product fidelity is\nbest-effort and details absent from every reference may be reconstructed.\n",
- "operationId": "post_packshots",
+ "description": "Animates one image into a short, loop-ready clip for use as a living background. The camera stays fixed and only the parts of the scene that would move in real life move: water, light, mist, particles, fabric, creatures. Ideogram inspects the image and writes the motion prompt, so the request needs only the image.\nVideo generation runs asynchronously. Poll `GET /v1/generations/{generation_id}` with the returned `generation_id` until the generation completes or fails.",
+ "operationId": "post_living_image",
+ "parameters": [
+ {
+ "description": "When true, the request is validated and priced but not run: nothing is\ngenerated, stored, or billed, and no safety review is performed. The\nresponse is a `PriceQuote` object instead of the usual response for this\nendpoint. Send exactly the request you would send to generate, so the\nquote reflects the same options.\n",
+ "in": "query",
+ "name": "dry_run",
+ "required": false,
+ "schema": {
+ "default": false,
+ "type": "boolean"
+ },
+ "x-tool-description": "Validate and quote only; no generation, storage, billing, or safety review."
+ }
+ ],
"requestBody": {
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/PackshotsRequest"
+ "$ref": "#/components/schemas/LivingImageRequest"
}
}
},
- "description": "Product references, one requested view, and studio art direction.",
+ "description": "The image to bring to life and the output options.",
"required": true,
- "x-body-name": "packshots_request"
+ "x-body-name": "living_image_request"
},
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/PackshotsResponse"
+ "$ref": "#/components/schemas/LivingImageResponse"
}
}
},
- "description": "Packshot accepted for asynchronous processing."
+ "description": "Living image accepted for asynchronous processing."
},
"400": {
"description": "Invalid input provided."
@@ -12598,7 +12660,10 @@
"description": "Insufficient credits or quota."
},
"403": {
- "description": "Not authorized to create packshots."
+ "description": "This account does not have access to video generation."
+ },
+ "404": {
+ "description": "The image was not found or is not readable."
},
"429": {
"content": {
@@ -12609,19 +12674,22 @@
}
},
"description": "Too many requests."
+ },
+ "503": {
+ "description": "The endpoint is temporarily unavailable."
}
},
- "summary": "Packshots",
+ "summary": "Turn a still image into a subtle looping video",
"tags": [
- "edit-workflow"
+ "video-generate"
],
- "x-openapi-router-controller": "external_api.generated.openapi.controllers.edit_workflow_controller"
+ "x-openapi-router-controller": "external_api.generated.openapi.controllers.video_generate_controller"
}
},
- "/v2/tool/product-360-video": {
+ "/v2/tool/material-swap": {
"post": {
- "description": "Animates one product image through a complete turntable revolution and returns to the starting pose so the result loops cleanly.\nVideo generation runs asynchronously. Poll `GET /v2/generations/{generation_id}` with the returned `generation_id` until the generation completes or fails.",
- "operationId": "post_product360_video",
+ "description": "Re-renders masked regions of a product photo in the materials shown in\nreference images, preserving the product's construction and everything\noutside the masks. Upload the `image`, up to 4 `masks`, and the\n`materials` using `multipart/form-data`.\nReturns a `generation_id`; poll `GET /v2/generations/{generation_id}` or\nsupply a `webhook_url`.\n",
+ "operationId": "post_material_swap",
"parameters": [
{
"description": "When true, the request is validated and priced but not run: nothing is\ngenerated, stored, or billed, and no safety review is performed. The\nresponse is a `PriceQuote` object instead of the usual response for this\nendpoint. Send exactly the request you would send to generate, so the\nquote reflects the same options.\n",
@@ -12637,26 +12705,42 @@
],
"requestBody": {
"content": {
+ "multipart/form-data": {
+ "encoding": {
+ "image_asset_identifier": {
+ "contentType": "application/json"
+ },
+ "mask_asset_identifiers": {
+ "contentType": "application/json"
+ },
+ "material_asset_identifiers": {
+ "contentType": "application/json"
+ }
+ },
+ "schema": {
+ "$ref": "#/components/schemas/MaterialSwapRequest"
+ }
+ },
"application/json": {
"schema": {
- "$ref": "#/components/schemas/Product360VideoRequest"
+ "$ref": "#/components/schemas/MaterialSwapRequest"
}
}
},
- "description": "The product image and requested turntable motion.",
+ "description": "The product photo, one mask or several masks marking the regions to change, and either one shared material reference or one per mask.",
"required": true,
- "x-body-name": "product360_video_request"
+ "x-body-name": "body"
},
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/GenerateVideoSeedDance25Response"
+ "$ref": "#/components/schemas/MaterialSwapResponse"
}
}
},
- "description": "Product video accepted for asynchronous processing."
+ "description": "Material swap accepted for asynchronous processing."
},
"400": {
"description": "Invalid input provided."
@@ -12675,13 +12759,7 @@
"description": "Insufficient credits or quota."
},
"403": {
- "description": "This account does not have access to product video generation."
- },
- "404": {
- "description": "The product image was not found or is not readable."
- },
- "422": {
- "description": "The product description did not pass safety checks."
+ "description": "Not authorized to create a material swap."
},
"429": {
"content": {
@@ -12692,47 +12770,58 @@
}
},
"description": "Too many requests."
- },
- "503": {
- "description": "The endpoint is temporarily unavailable."
}
},
- "summary": "Product 360 Video",
+ "summary": "Material Swap",
"tags": [
- "video-generate"
+ "edit-workflow"
],
- "x-tool-description": "Animate a product image through one complete turntable revolution, returning to the starting pose for a seamless loop.",
- "x-openapi-router-controller": "external_api.generated.openapi.controllers.video_generate_controller"
+ "x-tool-description": "Re-render masked regions of a product photo asset in the materials shown in reference image assets, preserving the product's construction and everything outside the masks. Returns a generation reference.",
+ "x-openapi-router-controller": "external_api.generated.openapi.controllers.edit_workflow_controller"
}
},
- "/v2/tool/skechers-style-editor": {
+ "/v2/tool/model-pose-variants": {
"post": {
- "description": "Edits the base image while preserving details the instruction does not\nchange. Image 1 is the base; reference images are numbered from image 2\nin the supplied order. Resolve image mentions to these numbers before\nsubmitting. Descriptions identify the selected view or reference.\n\nPoll GET /v2/generations/{generation_id} with the returned generation_id\nuntil the workflow completes or fails.\n",
- "operationId": "post_skechers_style_edit",
+ "description": "Changes the model's pose or camera angle in a fashion image while\npreserving the model, garment, styling, and scene. Upload the\n`source_image` using `multipart/form-data` and describe the new pose in\n`instruction`.\nReturns a `generation_id`; poll `GET /v2/generations/{generation_id}` or\nsupply a `webhook_url`.\n",
+ "operationId": "post_model_pose_variants",
"requestBody": {
"content": {
+ "multipart/form-data": {
+ "encoding": {
+ "source_asset_identifier": {
+ "contentType": "application/json"
+ },
+ "pose_reference_asset_identifier": {
+ "contentType": "application/json"
+ }
+ },
+ "schema": {
+ "$ref": "#/components/schemas/ModelPoseVariantsRequest"
+ }
+ },
"application/json": {
"schema": {
- "$ref": "#/components/schemas/SkechersStyleEditRequest"
+ "$ref": "#/components/schemas/ModelPoseVariantsRequest"
}
}
},
+ "description": "The fashion image to edit and the pose direction.",
"required": true,
- "x-body-name": "skechers_style_edit_request"
+ "x-body-name": "body"
},
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/SkechersStyleEditResponse"
+ "$ref": "#/components/schemas/ModelPoseVariantsResponse"
}
}
},
- "description": "Style edit accepted for asynchronous processing."
+ "description": "Pose-variant generation accepted for asynchronous processing."
},
"400": {
- "description": "Invalid instruction, references, or output settings."
+ "description": "Invalid input provided."
},
"401": {
"description": "Unauthorized."
@@ -12748,13 +12837,13 @@
"description": "Insufficient credits or quota."
},
"403": {
- "description": "This account or mini app is not authorized to use Style Editor."
+ "description": "Not authorized to generate pose variants."
},
"404": {
"description": "An input asset was not found or is not readable."
},
"422": {
- "description": "The instruction or image descriptions did not pass prompt safety checks."
+ "description": "The instruction did not pass prompt safety checks."
},
"429": {
"content": {
@@ -12767,36 +12856,39 @@
"description": "Too many requests."
}
},
- "summary": "Edit a product image using an instruction and ordered references",
+ "summary": "Model Pose Variants",
"tags": [
"edit-workflow"
],
"x-openapi-router-controller": "external_api.generated.openapi.controllers.edit_workflow_controller"
}
},
- "/v2/tool/sketch-to-render": {
+ "/v2/tool/model-swap": {
"post": {
- "description": "Turns a fashion sketch into photorealistic garment or product imagery,\npreserving its silhouette, construction, colors, and design details.\nUpload the `sketch_image` using `multipart/form-data` and describe\nmaterials and rendering in `instruction`.\nReturns a `generation_id`; poll `GET /v2/generations/{generation_id}` or\nsupply a `webhook_url`.\n",
- "operationId": "post_sketch_to_render",
+ "description": "Replaces the model in a fashion image with the person shown in one to\nfour target-model references, keeping the product, pose, scene,\nlighting, and framing. Upload the working image as `source_image` using\n`multipart/form-data`.\nReturns a `generation_id`; poll `GET /v2/generations/{generation_id}` or\nsupply a `webhook_url`.\n",
+ "operationId": "post_model_swap",
"requestBody": {
"content": {
"multipart/form-data": {
"encoding": {
- "sketch_asset_identifier": {
+ "source_asset_identifier": {
+ "contentType": "application/json"
+ },
+ "model_asset_identifiers": {
"contentType": "application/json"
}
},
"schema": {
- "$ref": "#/components/schemas/SketchToRenderRequest"
+ "$ref": "#/components/schemas/ModelSwapRequest"
}
},
"application/json": {
"schema": {
- "$ref": "#/components/schemas/SketchToRenderRequest"
+ "$ref": "#/components/schemas/ModelSwapRequest"
}
}
},
- "description": "The source sketch and the material and rendering direction to apply.",
+ "description": "The working image and one to four ordered target-model references.",
"required": true,
"x-body-name": "body"
},
@@ -12805,11 +12897,11 @@
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/SketchToRenderResponse"
+ "$ref": "#/components/schemas/ModelSwapResponse"
}
}
},
- "description": "Sketch rendering accepted for asynchronous processing."
+ "description": "Model swap accepted for asynchronous processing."
},
"400": {
"description": "Invalid input provided."
@@ -12828,13 +12920,13 @@
"description": "Insufficient credits or quota."
},
"403": {
- "description": "Not authorized to render sketches."
+ "description": "Not authorized to use model swap."
},
"404": {
- "description": "The referenced sketch was not found or is not readable."
+ "description": "An input asset was not found or is not readable."
},
"422": {
- "description": "The instruction did not pass prompt safety validation."
+ "description": "The instruction did not pass prompt safety checks."
},
"429": {
"content": {
@@ -12847,38 +12939,39 @@
"description": "Too many requests."
}
},
- "summary": "Sketch to Render",
+ "summary": "Model Swap",
"tags": [
"edit-workflow"
],
"x-openapi-router-controller": "external_api.generated.openapi.controllers.edit_workflow_controller"
}
},
- "/v2/tool/sole-swap": {
+ "/v2/tool/packshots": {
"post": {
- "description": "Uses the sole-donor shoe as the output canvas, preserving its sole, camera,\nbackground, and lighting while transferring the upper from ordered references.\n\nThe request is processed asynchronously. Poll\n`GET /v2/generations/{generation_id}` with the returned\n`generation_id` until the generation is completed or failed.\n",
- "operationId": "post_sole_swap",
+ "description": "Creates one polished product photograph from one or more ordered product\nreferences. An optional style reference may guide framing, crop,\nbackground, and lighting without changing the product's identity.\n\nThe request is processed asynchronously. Poll\n`GET /v2/generations/{generation_id}` with the returned `generation_id`\nuntil the generation is completed or failed. Product fidelity is\nbest-effort and details absent from every reference may be reconstructed.\n",
+ "operationId": "post_packshots",
"requestBody": {
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/SoleSwapRequest"
+ "$ref": "#/components/schemas/PackshotsRequest"
}
}
},
+ "description": "Product references, one requested view, and studio art direction.",
"required": true,
- "x-body-name": "sole_swap_request"
+ "x-body-name": "packshots_request"
},
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/SoleSwapResponse"
+ "$ref": "#/components/schemas/PackshotsResponse"
}
}
},
- "description": "Sole swap accepted for asynchronous processing."
+ "description": "Packshot accepted for asynchronous processing."
},
"400": {
"description": "Invalid input provided."
@@ -12897,13 +12990,7 @@
"description": "Insufficient credits or quota."
},
"403": {
- "description": "This account or mini app is not authorized to use Sole Swap."
- },
- "404": {
- "description": "An input asset was not found or is not readable."
- },
- "422": {
- "description": "The instruction did not pass prompt safety checks."
+ "description": "Not authorized to create packshots."
},
"429": {
"content": {
@@ -12916,50 +13003,58 @@
"description": "Too many requests."
}
},
- "summary": "Sole Swap",
+ "summary": "Packshots",
"tags": [
"edit-workflow"
],
"x-openapi-router-controller": "external_api.generated.openapi.controllers.edit_workflow_controller"
}
},
- "/v2/tool/swan-s-logo-design": {
+ "/v2/tool/product-360-video": {
"post": {
- "description": "Creates one isolated logo candidate using either a shoe swatch or a supplied style reference. For 3D reference designs, choose split or full coverage with design_variant. Send a separate request for each candidate; each request completes and is billed independently. Processing is asynchronous. Poll GET /v2/generations/{generation_id} until completed or failed.",
- "operationId": "post_swan_s_logo_design",
+ "description": "Animates one product image through a complete turntable revolution and returns to the starting pose so the result loops cleanly.\nVideo generation runs asynchronously. Poll `GET /v2/generations/{generation_id}` with the returned `generation_id` until the generation completes or fails.",
+ "operationId": "post_product360_video",
+ "parameters": [
+ {
+ "description": "When true, the request is validated and priced but not run: nothing is\ngenerated, stored, or billed, and no safety review is performed. The\nresponse is a `PriceQuote` object instead of the usual response for this\nendpoint. Send exactly the request you would send to generate, so the\nquote reflects the same options.\n",
+ "in": "query",
+ "name": "dry_run",
+ "required": false,
+ "schema": {
+ "default": false,
+ "type": "boolean"
+ },
+ "x-tool-description": "Validate and quote only; no generation, storage, billing, or safety review."
+ }
+ ],
"requestBody": {
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/SwanSLogoDesignRequest"
+ "$ref": "#/components/schemas/Product360VideoRequest"
}
}
},
+ "description": "The product image and requested turntable motion.",
"required": true,
- "x-body-name": "swan_s_logo_design_request"
+ "x-body-name": "product360_video_request"
},
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/SwanSLogoDesignResponse"
+ "$ref": "#/components/schemas/GenerateVideoSeedDance25Response"
}
}
},
- "description": "Accepted for asynchronous processing."
+ "description": "Product video accepted for asynchronous processing."
},
"400": {
- "description": "Invalid asset roles, count, or options."
+ "description": "Invalid input provided."
},
"401": {
- "description": "Authentication required."
- },
- "403": {
- "description": "This account or app is not authorized."
- },
- "404": {
- "description": "An input asset was not found or is not readable."
+ "description": "Unauthorized."
},
"402": {
"content": {
@@ -12971,6 +13066,15 @@
},
"description": "Insufficient credits or quota."
},
+ "403": {
+ "description": "This account does not have access to product video generation."
+ },
+ "404": {
+ "description": "The product image was not found or is not readable."
+ },
+ "422": {
+ "description": "The product description did not pass safety checks."
+ },
"429": {
"content": {
"application/json": {
@@ -12980,52 +13084,50 @@
}
},
"description": "Too many requests."
+ },
+ "503": {
+ "description": "The endpoint is temporarily unavailable."
}
},
- "summary": "Design one Swan S logo candidate",
+ "summary": "Product 360 Video",
"tags": [
- "edit-workflow"
+ "video-generate"
],
- "x-openapi-router-controller": "external_api.generated.openapi.controllers.edit_workflow_controller"
+ "x-tool-description": "Animate a product image through one complete turntable revolution, returning to the starting pose for a seamless loop.",
+ "x-openapi-router-controller": "external_api.generated.openapi.controllers.video_generate_controller"
}
},
- "/v2/tool/swan-s-logo-install": {
+ "/v2/tool/skechers-style-editor": {
"post": {
- "description": "Installs the selected logo onto the ordered shoe views, preserving the shoe and chosen camera framing. Processing is asynchronous. Poll GET /v2/generations/{generation_id} until completed or failed.",
- "operationId": "post_swan_s_logo_install",
+ "description": "Edits the base image while preserving details the instruction does not\nchange. Image 1 is the base; reference images are numbered from image 2\nin the supplied order. Resolve image mentions to these numbers before\nsubmitting. Descriptions identify the selected view or reference.\n\nPoll GET /v2/generations/{generation_id} with the returned generation_id\nuntil the workflow completes or fails.\n",
+ "operationId": "post_skechers_style_edit",
"requestBody": {
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/SwanSLogoInstallRequest"
+ "$ref": "#/components/schemas/SkechersStyleEditRequest"
}
}
},
"required": true,
- "x-body-name": "swan_s_logo_install_request"
+ "x-body-name": "skechers_style_edit_request"
},
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/SwanSLogoInstallResponse"
+ "$ref": "#/components/schemas/SkechersStyleEditResponse"
}
}
},
- "description": "Accepted for asynchronous processing."
+ "description": "Style edit accepted for asynchronous processing."
},
"400": {
- "description": "Invalid asset roles, count, or options."
+ "description": "Invalid instruction, references, or output settings."
},
"401": {
- "description": "Authentication required."
- },
- "403": {
- "description": "This account or app is not authorized."
- },
- "404": {
- "description": "An input asset was not found or is not readable."
+ "description": "Unauthorized."
},
"402": {
"content": {
@@ -13037,6 +13139,15 @@
},
"description": "Insufficient credits or quota."
},
+ "403": {
+ "description": "This account or mini app is not authorized to use Style Editor."
+ },
+ "404": {
+ "description": "An input asset was not found or is not readable."
+ },
+ "422": {
+ "description": "The instruction or image descriptions did not pass prompt safety checks."
+ },
"429": {
"content": {
"application/json": {
@@ -13048,38 +13159,49 @@
"description": "Too many requests."
}
},
- "summary": "Install a Swan S logo on a shoe",
+ "summary": "Edit a product image using an instruction and ordered references",
"tags": [
"edit-workflow"
],
"x-openapi-router-controller": "external_api.generated.openapi.controllers.edit_workflow_controller"
}
},
- "/v2/tool/swap-product": {
+ "/v2/tool/sketch-to-render": {
"post": {
- "description": "Edits the footwear in a source advertisement using ordered product references.\nPoll `GET /v2/generations/{generation_id}` for status and image results.\n",
- "operationId": "post_swap_product",
+ "description": "Turns a fashion sketch into photorealistic garment or product imagery,\npreserving its silhouette, construction, colors, and design details.\nUpload the `sketch_image` using `multipart/form-data` and describe\nmaterials and rendering in `instruction`.\nReturns a `generation_id`; poll `GET /v2/generations/{generation_id}` or\nsupply a `webhook_url`.\n",
+ "operationId": "post_sketch_to_render",
"requestBody": {
"content": {
- "application/json": {
- "schema": {
- "$ref": "#/components/schemas/SwapProductRequest"
+ "multipart/form-data": {
+ "encoding": {
+ "sketch_asset_identifier": {
+ "contentType": "application/json"
+ }
+ },
+ "schema": {
+ "$ref": "#/components/schemas/SketchToRenderRequest"
+ }
+ },
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/SketchToRenderRequest"
}
}
},
+ "description": "The source sketch and the material and rendering direction to apply.",
"required": true,
- "x-body-name": "swap_product_request"
+ "x-body-name": "body"
},
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/SwapProductResponse"
+ "$ref": "#/components/schemas/SketchToRenderResponse"
}
}
},
- "description": "Footwear edit accepted for asynchronous processing."
+ "description": "Sketch rendering accepted for asynchronous processing."
},
"400": {
"description": "Invalid input provided."
@@ -13087,15 +13209,6 @@
"401": {
"description": "Unauthorized."
},
- "403": {
- "description": "Not authorized to use this workflow."
- },
- "404": {
- "description": "An input image was not found or is not readable."
- },
- "422": {
- "description": "The instruction did not pass safety checks."
- },
"402": {
"content": {
"application/json": {
@@ -13106,6 +13219,15 @@
},
"description": "Insufficient credits or quota."
},
+ "403": {
+ "description": "Not authorized to render sketches."
+ },
+ "404": {
+ "description": "The referenced sketch was not found or is not readable."
+ },
+ "422": {
+ "description": "The instruction did not pass prompt safety validation."
+ },
"429": {
"content": {
"application/json": {
@@ -13117,67 +13239,44 @@
"description": "Too many requests."
}
},
- "summary": "Swap Product",
+ "summary": "Sketch to Render",
"tags": [
"edit-workflow"
],
"x-openapi-router-controller": "external_api.generated.openapi.controllers.edit_workflow_controller"
}
},
- "/v2/tool/vectorizer": {
+ "/v2/tool/sole-swap": {
"post": {
- "description": "Converts an image to SVG asynchronously.",
- "operationId": "post_vectorizer",
- "parameters": [
- {
- "description": "When true, the request is validated and priced but not run: nothing is\ngenerated, stored, or billed, and no safety review is performed. The\nresponse is a `PriceQuote` object instead of the usual response for this\nendpoint. Send exactly the request you would send to generate, so the\nquote reflects the same options.\n",
- "in": "query",
- "name": "dry_run",
- "required": false,
- "schema": {
- "default": false,
- "type": "boolean"
- },
- "x-tool-description": "Validate and quote only; no generation, storage, billing, or safety review."
- }
- ],
+ "description": "Uses the sole-donor shoe as the output canvas, preserving its sole, camera,\nbackground, and lighting while transferring the upper from ordered references.\n\nThe request is processed asynchronously. Poll\n`GET /v2/generations/{generation_id}` with the returned\n`generation_id` until the generation is completed or failed.\n",
+ "operationId": "post_sole_swap",
"requestBody": {
"content": {
- "multipart/form-data": {
- "encoding": {
- "image_asset_identifier": {
- "contentType": "application/json"
- }
- },
- "schema": {
- "$ref": "#/components/schemas/VectorizerRequest"
- }
- },
"application/json": {
"schema": {
- "$ref": "#/components/schemas/VectorizerRequest"
+ "$ref": "#/components/schemas/SoleSwapRequest"
}
}
},
"required": true,
- "x-body-name": "body"
+ "x-body-name": "sole_swap_request"
},
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/VectorizerResponse"
+ "$ref": "#/components/schemas/SoleSwapResponse"
}
}
},
- "description": "Conversion accepted; dry runs return the shared PriceQuote response."
+ "description": "Sole swap accepted for asynchronous processing."
},
"400": {
- "description": "Invalid source image or input combination."
+ "description": "Invalid input provided."
},
"401": {
- "description": "Authentication required."
+ "description": "Unauthorized."
},
"402": {
"content": {
@@ -13187,13 +13286,16 @@
}
}
},
- "description": "Insufficient credits."
+ "description": "Insufficient credits or quota."
},
"403": {
- "description": "Access denied."
+ "description": "This account or mini app is not authorized to use Sole Swap."
},
"404": {
- "description": "Source not found."
+ "description": "An input asset was not found or is not readable."
+ },
+ "422": {
+ "description": "The instruction did not pass prompt safety checks."
},
"429": {
"content": {
@@ -13204,63 +13306,52 @@
}
},
"description": "Too many requests."
- },
- "503": {
- "description": "Conversion is unavailable."
}
},
- "summary": "Vectorizer",
+ "summary": "Sole Swap",
"tags": [
"edit-workflow"
],
"x-openapi-router-controller": "external_api.generated.openapi.controllers.edit_workflow_controller"
}
},
- "/v2/video/edit/seedance-2": {
+ "/v2/tool/swan-s-logo-design": {
"post": {
- "description": "Edit a video you already have stored with Ideogram by replacing part of\nit. Reference the source video with `video_asset_identifier` and mark the\nspan to replace with `start_frame_time` and `end_frame_time`, in seconds.\nSeedance 2.0 generates a new clip for that span from your prompt, and the\nresult is the source video with the generated clip spliced in over the\nspan: everything before `start_frame_time`, then the generated clip, then\neverything from `end_frame_time` on. That edited video is the asset the\nrequest produces.\n\n`is_start_frame_included` and `is_end_frame_included` anchor the generated\nclip on the span's own end frames, so it joins the surrounding footage\ninstead of cutting to something unrelated. Anchoring the start opens the\nclip on the frame already at `start_frame_time`; anchoring the end lands\nit on the frame at `end_frame_time`; anchoring both joins at each seam. At\nleast one must be anchored.\n\nThe generated clip is used at its own length, which the model rarely makes\nexactly the span's, so the edited video is usually a different length from\nthe source. Request a `duration` close to the span to keep them near each\nother. The clip is scaled and cropped to fill the source's frame and\nconformed to its frame rate, so resolution and aspect ratio follow the\nsource rather than being requested.\n\nVideo generation always runs asynchronously: the response returns as\nsoon as the request is accepted and carries only a `generation_id`.\nPoll for completion and results with\n`GET /v2/generations/{generation_id}` using that id, or supply a\n`webhook_url` to have the finished result POSTed to your server\ninstead.\n\nVideo links are available for a limited period of time; download the\nvideo if you want to keep it.\n",
- "operationId": "post_edit_video_seed_dance2",
- "parameters": [
- {
- "description": "When true, the request is validated and priced but not run: nothing is\ngenerated, stored, or billed, and no safety review is performed. The\nresponse is a `PriceQuote` object instead of the usual response for this\nendpoint. Send exactly the request you would send to generate, so the\nquote reflects the same options.\n",
- "in": "query",
- "name": "dry_run",
- "required": false,
- "schema": {
- "default": false,
- "type": "boolean"
- },
- "x-tool-description": "Validate and quote only; no generation, storage, billing, or safety review."
- }
- ],
+ "description": "Creates one isolated logo candidate using either a shoe swatch or a supplied style reference. For 3D reference designs, choose split or full coverage with design_variant. Send a separate request for each candidate; each request completes and is billed independently. Processing is asynchronous. Poll GET /v2/generations/{generation_id} until completed or failed.",
+ "operationId": "post_swan_s_logo_design",
"requestBody": {
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/EditVideoSeedDance2Request"
+ "$ref": "#/components/schemas/SwanSLogoDesignRequest"
}
}
},
- "description": "A request to edit a video with Seedance 2.0, regenerating it from frames of the source video.",
"required": true,
- "x-body-name": "edit_video_seed_dance2_request"
+ "x-body-name": "swan_s_logo_design_request"
},
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/GenerateVideoSeedDance2Response"
+ "$ref": "#/components/schemas/SwanSLogoDesignResponse"
}
}
},
- "description": "An acknowledgement to poll with `GET /v2/generations/{generation_id}`."
+ "description": "Accepted for asynchronous processing."
},
"400": {
- "description": "Invalid input provided."
+ "description": "Invalid asset roles, count, or options."
},
"401": {
- "description": "Unauthorized."
+ "description": "Authentication required."
+ },
+ "403": {
+ "description": "This account or app is not authorized."
+ },
+ "404": {
+ "description": "An input asset was not found or is not readable."
},
"402": {
"content": {
@@ -13272,15 +13363,6 @@
},
"description": "Insufficient credits or quota."
},
- "403": {
- "description": "This account does not have access to this model."
- },
- "404": {
- "description": "The referenced source video was not found."
- },
- "422": {
- "description": "The prompt did not pass safety checks."
- },
"429": {
"content": {
"application/json": {
@@ -13290,79 +13372,52 @@
}
},
"description": "Too many requests."
- },
- "500": {
- "description": "Internal server error."
- },
- "503": {
- "description": "The endpoint is temporarily unavailable."
}
},
- "summary": "Edit video with Seedance 2.0",
+ "summary": "Design one Swan S logo candidate",
"tags": [
- "video-edit"
+ "edit-workflow"
],
- "x-openapi-router-controller": "external_api.generated.openapi.controllers.video_edit_controller"
+ "x-openapi-router-controller": "external_api.generated.openapi.controllers.edit_workflow_controller"
}
},
- "/v2/video/generate/kling-3-standard-image-to-video": {
+ "/v2/tool/swan-s-logo-install": {
"post": {
- "description": "Generate a video from a first-frame image and a text prompt with Kling\nv3 Standard. Upload the first frame as `image`, and optionally a final\nframe as `end_image`, using `multipart/form-data`.\nReturns a `generation_id`; poll `GET /v2/generations/{generation_id}`\nor supply a `webhook_url`.\n",
- "operationId": "post_generate_video_kling_v3_standard_image_to_video",
- "parameters": [
- {
- "description": "When true, the request is validated and priced but not run: nothing is\ngenerated, stored, or billed, and no safety review is performed. The\nresponse is a `PriceQuote` object instead of the usual response for this\nendpoint. Send exactly the request you would send to generate, so the\nquote reflects the same options.\n",
- "in": "query",
- "name": "dry_run",
- "required": false,
- "schema": {
- "default": false,
- "type": "boolean"
- },
- "x-tool-description": "Validate and quote only; no generation, storage, billing, or safety review."
- }
- ],
+ "description": "Installs the selected logo onto the ordered shoe views, preserving the shoe and chosen camera framing. Processing is asynchronous. Poll GET /v2/generations/{generation_id} until completed or failed.",
+ "operationId": "post_swan_s_logo_install",
"requestBody": {
"content": {
- "multipart/form-data": {
- "encoding": {
- "image_asset_identifier": {
- "contentType": "application/json"
- },
- "end_image_asset_identifier": {
- "contentType": "application/json"
- }
- },
- "schema": {
- "$ref": "#/components/schemas/GenerateVideoKlingV3StandardImageToVideoRequest"
- }
- },
"application/json": {
"schema": {
- "$ref": "#/components/schemas/GenerateVideoKlingV3StandardImageToVideoRequest"
+ "$ref": "#/components/schemas/SwanSLogoInstallRequest"
}
}
},
- "description": "A request to generate a video from a first-frame image with Kling v3 Standard. Upload the first frame as `image` using `multipart/form-data`.",
"required": true,
- "x-body-name": "body"
+ "x-body-name": "swan_s_logo_install_request"
},
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/GenerateVideoKlingV3Response"
+ "$ref": "#/components/schemas/SwanSLogoInstallResponse"
}
}
},
- "description": "An acknowledgement to poll with `GET /v2/generations/{generation_id}`."
+ "description": "Accepted for asynchronous processing."
},
"400": {
- "description": "Invalid input provided."
+ "description": "Invalid asset roles, count, or options."
},
"401": {
- "description": "Unauthorized."
+ "description": "Authentication required."
+ },
+ "403": {
+ "description": "This account or app is not authorized."
+ },
+ "404": {
+ "description": "An input asset was not found or is not readable."
},
"402": {
"content": {
@@ -13374,15 +13429,6 @@
},
"description": "Insufficient credits or quota."
},
- "403": {
- "description": "This account does not have access to this model."
- },
- "404": {
- "description": "The first-frame image was not found."
- },
- "422": {
- "description": "The prompt did not pass safety checks."
- },
"429": {
"content": {
"application/json": {
@@ -13392,61 +13438,40 @@
}
},
"description": "Too many requests."
- },
- "500": {
- "description": "Internal server error."
- },
- "503": {
- "description": "The endpoint is temporarily unavailable."
}
},
- "summary": "Image to video with Kling v3 Standard",
+ "summary": "Install a Swan S logo on a shoe",
"tags": [
- "video-generate"
+ "edit-workflow"
],
- "x-tool-description": "Animate a first-frame image asset with Kling v3 Standard. Supply end_image_asset_identifier for a transition to a final frame. Video download links expire.",
- "x-openapi-router-controller": "external_api.generated.openapi.controllers.video_generate_controller"
+ "x-openapi-router-controller": "external_api.generated.openapi.controllers.edit_workflow_controller"
}
},
- "/v2/video/generate/kling-3-standard-text-to-video": {
+ "/v2/tool/swap-product": {
"post": {
- "description": "Generate a video from a text prompt with Kling v3 Standard.\nReturns a `generation_id`; poll `GET /v2/generations/{generation_id}`\nor supply a `webhook_url`.\n",
- "operationId": "post_generate_video_kling_v3_standard_text_to_video",
- "parameters": [
- {
- "description": "When true, the request is validated and priced but not run: nothing is\ngenerated, stored, or billed, and no safety review is performed. The\nresponse is a `PriceQuote` object instead of the usual response for this\nendpoint. Send exactly the request you would send to generate, so the\nquote reflects the same options.\n",
- "in": "query",
- "name": "dry_run",
- "required": false,
- "schema": {
- "default": false,
- "type": "boolean"
- },
- "x-tool-description": "Validate and quote only; no generation, storage, billing, or safety review."
- }
- ],
+ "description": "Edits the footwear in a source advertisement using ordered product references.\nPoll `GET /v2/generations/{generation_id}` for status and image results.\n",
+ "operationId": "post_swap_product",
"requestBody": {
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/GenerateVideoKlingV3StandardTextToVideoRequest"
+ "$ref": "#/components/schemas/SwapProductRequest"
}
}
},
- "description": "A request to generate a video from a text prompt with Kling v3 Standard.",
"required": true,
- "x-body-name": "generate_video_kling_v3_standard_text_to_video_request"
+ "x-body-name": "swap_product_request"
},
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/GenerateVideoKlingV3Response"
+ "$ref": "#/components/schemas/SwapProductResponse"
}
}
},
- "description": "An acknowledgement to poll with `GET /v2/generations/{generation_id}`."
+ "description": "Footwear edit accepted for asynchronous processing."
},
"400": {
"description": "Invalid input provided."
@@ -13454,7 +13479,16 @@
"401": {
"description": "Unauthorized."
},
- "402": {
+ "403": {
+ "description": "Not authorized to use this workflow."
+ },
+ "404": {
+ "description": "An input image was not found or is not readable."
+ },
+ "422": {
+ "description": "The instruction did not pass safety checks."
+ },
+ "402": {
"content": {
"application/json": {
"schema": {
@@ -13464,12 +13498,6 @@
},
"description": "Insufficient credits or quota."
},
- "403": {
- "description": "This account does not have access to this model."
- },
- "422": {
- "description": "The prompt did not pass safety checks."
- },
"429": {
"content": {
"application/json": {
@@ -13479,26 +13507,19 @@
}
},
"description": "Too many requests."
- },
- "500": {
- "description": "Internal server error."
- },
- "503": {
- "description": "The endpoint is temporarily unavailable."
}
},
- "summary": "Text to video with Kling v3 Standard",
+ "summary": "Swap Product",
"tags": [
- "video-generate"
+ "edit-workflow"
],
- "x-tool-description": "Generate a video from text with Kling v3 Standard. Video download links expire.",
- "x-openapi-router-controller": "external_api.generated.openapi.controllers.video_generate_controller"
+ "x-openapi-router-controller": "external_api.generated.openapi.controllers.edit_workflow_controller"
}
},
- "/v2/video/generate/minimax-h3-image-to-video": {
+ "/v2/tool/vectorizer": {
"post": {
- "description": "Generate a video from a first-frame image and a text prompt with\nMiniMax H3. Upload the first frame as `image`, and optionally a final\nframe as `end_image`, using `multipart/form-data`.\nReturns a `generation_id`; poll `GET /v2/generations/{generation_id}`\nor supply a `webhook_url`.\n",
- "operationId": "post_generate_video_minimax_h3_image_to_video",
+ "description": "Converts an image to SVG asynchronously.",
+ "operationId": "post_vectorizer",
"parameters": [
{
"description": "When true, the request is validated and priced but not run: nothing is\ngenerated, stored, or billed, and no safety review is performed. The\nresponse is a `PriceQuote` object instead of the usual response for this\nendpoint. Send exactly the request you would send to generate, so the\nquote reflects the same options.\n",
@@ -13518,22 +13539,18 @@
"encoding": {
"image_asset_identifier": {
"contentType": "application/json"
- },
- "end_image_asset_identifier": {
- "contentType": "application/json"
}
},
"schema": {
- "$ref": "#/components/schemas/GenerateVideoMinimaxH3ImageToVideoRequest"
+ "$ref": "#/components/schemas/VectorizerRequest"
}
},
"application/json": {
"schema": {
- "$ref": "#/components/schemas/GenerateVideoMinimaxH3ImageToVideoRequest"
+ "$ref": "#/components/schemas/VectorizerRequest"
}
}
},
- "description": "A request to generate a video from a first-frame image with MiniMax H3. Upload the first frame as `image` using `multipart/form-data`.",
"required": true,
"x-body-name": "body"
},
@@ -13542,7 +13559,90 @@
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/GenerateVideoMinimaxH3Response"
+ "$ref": "#/components/schemas/VectorizerResponse"
+ }
+ }
+ },
+ "description": "Conversion accepted; dry runs return the shared PriceQuote response."
+ },
+ "400": {
+ "description": "Invalid source image or input combination."
+ },
+ "401": {
+ "description": "Authentication required."
+ },
+ "402": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/GenerationErrorResponse"
+ }
+ }
+ },
+ "description": "Insufficient credits."
+ },
+ "403": {
+ "description": "Access denied."
+ },
+ "404": {
+ "description": "Source not found."
+ },
+ "429": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/GenerationErrorResponse"
+ }
+ }
+ },
+ "description": "Too many requests."
+ },
+ "503": {
+ "description": "Conversion is unavailable."
+ }
+ },
+ "summary": "Vectorizer",
+ "tags": [
+ "edit-workflow"
+ ],
+ "x-openapi-router-controller": "external_api.generated.openapi.controllers.edit_workflow_controller"
+ }
+ },
+ "/v2/video/edit/seedance-2": {
+ "post": {
+ "description": "Edit a video you already have stored with Ideogram by replacing part of\nit. Reference the source video with `video_asset_identifier` and mark the\nspan to replace with `start_frame_time` and `end_frame_time`, in seconds.\nSeedance 2.0 generates a new clip for that span from your prompt, and the\nresult is the source video with the generated clip spliced in over the\nspan: everything before `start_frame_time`, then the generated clip, then\neverything from `end_frame_time` on. That edited video is the asset the\nrequest produces.\n\n`is_start_frame_included` and `is_end_frame_included` anchor the generated\nclip on the span's own end frames, so it joins the surrounding footage\ninstead of cutting to something unrelated. Anchoring the start opens the\nclip on the frame already at `start_frame_time`; anchoring the end lands\nit on the frame at `end_frame_time`; anchoring both joins at each seam. At\nleast one must be anchored.\n\nThe generated clip is used at its own length, which the model rarely makes\nexactly the span's, so the edited video is usually a different length from\nthe source. Request a `duration` close to the span to keep them near each\nother. The clip is scaled and cropped to fill the source's frame and\nconformed to its frame rate, so resolution and aspect ratio follow the\nsource rather than being requested.\n\nVideo generation always runs asynchronously: the response returns as\nsoon as the request is accepted and carries only a `generation_id`.\nPoll for completion and results with\n`GET /v2/generations/{generation_id}` using that id, or supply a\n`webhook_url` to have the finished result POSTed to your server\ninstead.\n\nVideo links are available for a limited period of time; download the\nvideo if you want to keep it.\n",
+ "operationId": "post_edit_video_seed_dance2",
+ "parameters": [
+ {
+ "description": "When true, the request is validated and priced but not run: nothing is\ngenerated, stored, or billed, and no safety review is performed. The\nresponse is a `PriceQuote` object instead of the usual response for this\nendpoint. Send exactly the request you would send to generate, so the\nquote reflects the same options.\n",
+ "in": "query",
+ "name": "dry_run",
+ "required": false,
+ "schema": {
+ "default": false,
+ "type": "boolean"
+ },
+ "x-tool-description": "Validate and quote only; no generation, storage, billing, or safety review."
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/EditVideoSeedDance2Request"
+ }
+ }
+ },
+ "description": "A request to edit a video with Seedance 2.0, regenerating it from frames of the source video.",
+ "required": true,
+ "x-body-name": "edit_video_seed_dance2_request"
+ },
+ "responses": {
+ "200": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/GenerateVideoSeedDance2Response"
}
}
},
@@ -13568,7 +13668,7 @@
"description": "This account does not have access to this model."
},
"404": {
- "description": "The first-frame image was not found."
+ "description": "The referenced source video was not found."
},
"422": {
"description": "The prompt did not pass safety checks."
@@ -13590,18 +13690,17 @@
"description": "The endpoint is temporarily unavailable."
}
},
- "summary": "Image to video with MiniMax H3",
+ "summary": "Edit video with Seedance 2.0",
"tags": [
- "video-generate"
+ "video-edit"
],
- "x-tool-description": "Animate a first-frame image asset with MiniMax H3. Supply end_image_asset_identifier for a transition to a final frame. Video download links expire.",
- "x-openapi-router-controller": "external_api.generated.openapi.controllers.video_generate_controller"
+ "x-openapi-router-controller": "external_api.generated.openapi.controllers.video_edit_controller"
}
},
- "/v2/video/generate/minimax-h3-reference-to-video": {
+ "/v2/video/generate/kling-3-standard-image-to-video": {
"post": {
- "description": "Produce a video from a text prompt and optional reference media with\nMiniMax H3. Upload `reference_images` and `reference_audios` using\n`multipart/form-data`, and address them in the prompt by position\n(`Image 1`, `Audio 1`, …). Returns a `generation_id`; poll\n`GET /v2/generations/{generation_id}` or supply a `webhook_url`.\n",
- "operationId": "post_edit_video_minimax_h3_reference_to_video",
+ "description": "Generate a video from a first-frame image and a text prompt with Kling\nv3 Standard. Upload the first frame as `image`, and optionally a final\nframe as `end_image`, using `multipart/form-data`.\nReturns a `generation_id`; poll `GET /v2/generations/{generation_id}`\nor supply a `webhook_url`.\n",
+ "operationId": "post_generate_video_kling_v3_standard_image_to_video",
"parameters": [
{
"description": "When true, the request is validated and priced but not run: nothing is\ngenerated, stored, or billed, and no safety review is performed. The\nresponse is a `PriceQuote` object instead of the usual response for this\nendpoint. Send exactly the request you would send to generate, so the\nquote reflects the same options.\n",
@@ -13619,24 +13718,24 @@
"content": {
"multipart/form-data": {
"encoding": {
- "reference_image_asset_identifiers": {
+ "image_asset_identifier": {
"contentType": "application/json"
},
- "reference_video_asset_identifiers": {
+ "end_image_asset_identifier": {
"contentType": "application/json"
}
},
"schema": {
- "$ref": "#/components/schemas/EditVideoMinimaxH3ReferenceToVideoRequest"
+ "$ref": "#/components/schemas/GenerateVideoKlingV3StandardImageToVideoRequest"
}
},
"application/json": {
"schema": {
- "$ref": "#/components/schemas/EditVideoMinimaxH3ReferenceToVideoRequest"
+ "$ref": "#/components/schemas/GenerateVideoKlingV3StandardImageToVideoRequest"
}
}
},
- "description": "A request to produce a video from reference media with MiniMax H3. Use `multipart/form-data` to upload reference media.",
+ "description": "A request to generate a video from a first-frame image with Kling v3 Standard. Upload the first frame as `image` using `multipart/form-data`.",
"required": true,
"x-body-name": "body"
},
@@ -13645,7 +13744,7 @@
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/GenerateVideoMinimaxH3Response"
+ "$ref": "#/components/schemas/GenerateVideoKlingV3Response"
}
}
},
@@ -13671,7 +13770,7 @@
"description": "This account does not have access to this model."
},
"404": {
- "description": "A referenced asset was not found."
+ "description": "The first-frame image was not found."
},
"422": {
"description": "The prompt did not pass safety checks."
@@ -13693,18 +13792,18 @@
"description": "The endpoint is temporarily unavailable."
}
},
- "summary": "Reference to video with MiniMax H3",
+ "summary": "Image to video with Kling v3 Standard",
"tags": [
- "video-edit"
+ "video-generate"
],
- "x-tool-description": "Generate a video with MiniMax H3 from text and optional reference image/video assets. Address references as Image 1 and Video 1 in prompt order. Video download links expire.",
- "x-openapi-router-controller": "external_api.generated.openapi.controllers.video_edit_controller"
+ "x-tool-description": "Animate a first-frame image asset with Kling v3 Standard. Supply end_image_asset_identifier for a transition to a final frame. Video download links expire.",
+ "x-openapi-router-controller": "external_api.generated.openapi.controllers.video_generate_controller"
}
},
- "/v2/video/generate/minimax-h3-text-to-video": {
+ "/v2/video/generate/kling-3-standard-text-to-video": {
"post": {
- "description": "Generate a video from a text prompt with MiniMax H3.\nReturns a `generation_id`; poll `GET /v2/generations/{generation_id}`\nor supply a `webhook_url`.\n",
- "operationId": "post_generate_video_minimax_h3_text_to_video",
+ "description": "Generate a video from a text prompt with Kling v3 Standard.\nReturns a `generation_id`; poll `GET /v2/generations/{generation_id}`\nor supply a `webhook_url`.\n",
+ "operationId": "post_generate_video_kling_v3_standard_text_to_video",
"parameters": [
{
"description": "When true, the request is validated and priced but not run: nothing is\ngenerated, stored, or billed, and no safety review is performed. The\nresponse is a `PriceQuote` object instead of the usual response for this\nendpoint. Send exactly the request you would send to generate, so the\nquote reflects the same options.\n",
@@ -13722,20 +13821,20 @@
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/GenerateVideoMinimaxH3TextToVideoRequest"
+ "$ref": "#/components/schemas/GenerateVideoKlingV3StandardTextToVideoRequest"
}
}
},
- "description": "A request to generate a video from a text prompt with MiniMax H3.",
+ "description": "A request to generate a video from a text prompt with Kling v3 Standard.",
"required": true,
- "x-body-name": "generate_video_minimax_h3_text_to_video_request"
+ "x-body-name": "generate_video_kling_v3_standard_text_to_video_request"
},
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/GenerateVideoMinimaxH3Response"
+ "$ref": "#/components/schemas/GenerateVideoKlingV3Response"
}
}
},
@@ -13780,18 +13879,18 @@
"description": "The endpoint is temporarily unavailable."
}
},
- "summary": "Text to video with MiniMax H3",
+ "summary": "Text to video with Kling v3 Standard",
"tags": [
"video-generate"
],
- "x-tool-description": "Generate a video from text with MiniMax H3. Video download links expire.",
+ "x-tool-description": "Generate a video from text with Kling v3 Standard. Video download links expire.",
"x-openapi-router-controller": "external_api.generated.openapi.controllers.video_generate_controller"
}
},
- "/v2/video/generate/seedance-2-5-image-to-video": {
+ "/v2/video/generate/minimax-h3-image-to-video": {
"post": {
- "description": "Generate a video from a first-frame image and a text prompt with\nSeedance 2.5. Upload the first frame as `image`, and optionally a final\nframe as `end_image`, using `multipart/form-data`.\nReturns a `generation_id`; poll `GET /v2/generations/{generation_id}`\nor supply a `webhook_url`.\n",
- "operationId": "post_generate_video_seed_dance25_image_to_video",
+ "description": "Generate a video from a first-frame image and a text prompt with\nMiniMax H3. Upload the first frame as `image`, and optionally a final\nframe as `end_image`, using `multipart/form-data`.\nReturns a `generation_id`; poll `GET /v2/generations/{generation_id}`\nor supply a `webhook_url`.\n",
+ "operationId": "post_generate_video_minimax_h3_image_to_video",
"parameters": [
{
"description": "When true, the request is validated and priced but not run: nothing is\ngenerated, stored, or billed, and no safety review is performed. The\nresponse is a `PriceQuote` object instead of the usual response for this\nendpoint. Send exactly the request you would send to generate, so the\nquote reflects the same options.\n",
@@ -13817,16 +13916,16 @@
}
},
"schema": {
- "$ref": "#/components/schemas/GenerateVideoSeedDance25ImageToVideoRequest"
+ "$ref": "#/components/schemas/GenerateVideoMinimaxH3ImageToVideoRequest"
}
},
"application/json": {
"schema": {
- "$ref": "#/components/schemas/GenerateVideoSeedDance25ImageToVideoRequest"
+ "$ref": "#/components/schemas/GenerateVideoMinimaxH3ImageToVideoRequest"
}
}
},
- "description": "A request to generate a video from a first-frame image with Seedance 2.5. Upload the first frame as `image` using `multipart/form-data`.",
+ "description": "A request to generate a video from a first-frame image with MiniMax H3. Upload the first frame as `image` using `multipart/form-data`.",
"required": true,
"x-body-name": "body"
},
@@ -13835,7 +13934,7 @@
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/GenerateVideoSeedDance25Response"
+ "$ref": "#/components/schemas/GenerateVideoMinimaxH3Response"
}
}
},
@@ -13883,18 +13982,18 @@
"description": "The endpoint is temporarily unavailable."
}
},
- "summary": "Image to video with Seedance 2.5",
+ "summary": "Image to video with MiniMax H3",
"tags": [
"video-generate"
],
- "x-tool-description": "Animate a first-frame image asset with Seedance 2.5. Supply end_image_asset_identifier for a transition to a final frame. Video download links expire.",
+ "x-tool-description": "Animate a first-frame image asset with MiniMax H3. Supply end_image_asset_identifier for a transition to a final frame. Video download links expire.",
"x-openapi-router-controller": "external_api.generated.openapi.controllers.video_generate_controller"
}
},
- "/v2/video/generate/seedance-2-5-reference-to-video": {
+ "/v2/video/generate/minimax-h3-reference-to-video": {
"post": {
- "description": "Generate a video from a text prompt and reference media with\nSeedance 2.5. Upload at least one image in `reference_images`, plus optional\n`reference_audios`, using `multipart/form-data`.\nReturns a `generation_id`; poll `GET /v2/generations/{generation_id}`\nor supply a `webhook_url`.\n",
- "operationId": "post_generate_video_seed_dance25_reference_to_video",
+ "description": "Produce a video from a text prompt and optional reference media with\nMiniMax H3. Upload `reference_images` and `reference_audios` using\n`multipart/form-data`, and address them in the prompt by position\n(`Image 1`, `Audio 1`, …). Returns a `generation_id`; poll\n`GET /v2/generations/{generation_id}` or supply a `webhook_url`.\n",
+ "operationId": "post_edit_video_minimax_h3_reference_to_video",
"parameters": [
{
"description": "When true, the request is validated and priced but not run: nothing is\ngenerated, stored, or billed, and no safety review is performed. The\nresponse is a `PriceQuote` object instead of the usual response for this\nendpoint. Send exactly the request you would send to generate, so the\nquote reflects the same options.\n",
@@ -13920,16 +14019,16 @@
}
},
"schema": {
- "$ref": "#/components/schemas/GenerateVideoSeedDance25ReferenceToVideoRequest"
+ "$ref": "#/components/schemas/EditVideoMinimaxH3ReferenceToVideoRequest"
}
},
"application/json": {
"schema": {
- "$ref": "#/components/schemas/GenerateVideoSeedDance25ReferenceToVideoRequest"
+ "$ref": "#/components/schemas/EditVideoMinimaxH3ReferenceToVideoRequest"
}
}
},
- "description": "A request to produce a video from reference media with Seedance 2.5. Upload the references using `multipart/form-data`.",
+ "description": "A request to produce a video from reference media with MiniMax H3. Use `multipart/form-data` to upload reference media.",
"required": true,
"x-body-name": "body"
},
@@ -13938,7 +14037,7 @@
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/GenerateVideoSeedDance25Response"
+ "$ref": "#/components/schemas/GenerateVideoMinimaxH3Response"
}
}
},
@@ -13964,7 +14063,7 @@
"description": "This account does not have access to this model."
},
"404": {
- "description": "A reference was not found."
+ "description": "A referenced asset was not found."
},
"422": {
"description": "The prompt did not pass safety checks."
@@ -13986,18 +14085,18 @@
"description": "The endpoint is temporarily unavailable."
}
},
- "summary": "Reference to video with Seedance 2.5",
+ "summary": "Reference to video with MiniMax H3",
"tags": [
- "video-generate"
+ "video-edit"
],
- "x-tool-description": "Generate a video with Seedance 2.5 using at least one reference image or video asset. Address references as [Image1] and [Video1] in prompt order. Video download links expire.",
- "x-openapi-router-controller": "external_api.generated.openapi.controllers.video_generate_controller"
+ "x-tool-description": "Generate a video with MiniMax H3 from text and optional reference image/video assets. Address references as Image 1 and Video 1 in prompt order. Video download links expire.",
+ "x-openapi-router-controller": "external_api.generated.openapi.controllers.video_edit_controller"
}
},
- "/v2/video/generate/seedance-2-5-text-to-video": {
+ "/v2/video/generate/minimax-h3-text-to-video": {
"post": {
- "description": "Generate a video from a text prompt with Seedance 2.5, at up to 1080p and\n30 seconds. Returns a `generation_id`; poll `GET /v2/generations/{generation_id}`\nor supply a `webhook_url`.\n",
- "operationId": "post_generate_video_seed_dance25_text_to_video",
+ "description": "Generate a video from a text prompt with MiniMax H3.\nReturns a `generation_id`; poll `GET /v2/generations/{generation_id}`\nor supply a `webhook_url`.\n",
+ "operationId": "post_generate_video_minimax_h3_text_to_video",
"parameters": [
{
"description": "When true, the request is validated and priced but not run: nothing is\ngenerated, stored, or billed, and no safety review is performed. The\nresponse is a `PriceQuote` object instead of the usual response for this\nendpoint. Send exactly the request you would send to generate, so the\nquote reflects the same options.\n",
@@ -14015,20 +14114,20 @@
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/GenerateVideoSeedDance25TextToVideoRequest"
+ "$ref": "#/components/schemas/GenerateVideoMinimaxH3TextToVideoRequest"
}
}
},
- "description": "A request to generate a video from a text prompt with Seedance 2.5.",
+ "description": "A request to generate a video from a text prompt with MiniMax H3.",
"required": true,
- "x-body-name": "generate_video_seed_dance25_text_to_video_request"
+ "x-body-name": "generate_video_minimax_h3_text_to_video_request"
},
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/GenerateVideoSeedDance25Response"
+ "$ref": "#/components/schemas/GenerateVideoMinimaxH3Response"
}
}
},
@@ -14073,18 +14172,18 @@
"description": "The endpoint is temporarily unavailable."
}
},
- "summary": "Text to video with Seedance 2.5",
+ "summary": "Text to video with MiniMax H3",
"tags": [
"video-generate"
],
- "x-tool-description": "Generate a video from text with Seedance 2.5. Video download links expire.",
+ "x-tool-description": "Generate a video from text with MiniMax H3. Video download links expire.",
"x-openapi-router-controller": "external_api.generated.openapi.controllers.video_generate_controller"
}
},
- "/v2/video/generate/seedance-2-image-to-video": {
+ "/v2/video/generate/seedance-2-5-image-to-video": {
"post": {
- "description": "Generate one or more videos from a first-frame image and a text prompt\nwith Seedance 2.0. Upload the first frame as `image`, and optionally a final\nframe as `end_image`, using `multipart/form-data`.\nReturns a `generation_id`; poll `GET /v2/generations/{generation_id}`\nor supply a `webhook_url`.\n",
- "operationId": "post_generate_video_seed_dance2_image_to_video",
+ "description": "Generate a video from a first-frame image and a text prompt with\nSeedance 2.5. Upload the first frame as `image`, and optionally a final\nframe as `end_image`, using `multipart/form-data`.\nReturns a `generation_id`; poll `GET /v2/generations/{generation_id}`\nor supply a `webhook_url`.\n",
+ "operationId": "post_generate_video_seed_dance25_image_to_video",
"parameters": [
{
"description": "When true, the request is validated and priced but not run: nothing is\ngenerated, stored, or billed, and no safety review is performed. The\nresponse is a `PriceQuote` object instead of the usual response for this\nendpoint. Send exactly the request you would send to generate, so the\nquote reflects the same options.\n",
@@ -14110,16 +14209,16 @@
}
},
"schema": {
- "$ref": "#/components/schemas/GenerateVideoSeedDance2ImageToVideoRequest"
+ "$ref": "#/components/schemas/GenerateVideoSeedDance25ImageToVideoRequest"
}
},
"application/json": {
"schema": {
- "$ref": "#/components/schemas/GenerateVideoSeedDance2ImageToVideoRequest"
+ "$ref": "#/components/schemas/GenerateVideoSeedDance25ImageToVideoRequest"
}
}
},
- "description": "A request to generate videos from a first-frame image with Seedance 2.0. Upload the first frame as `image` using `multipart/form-data`.",
+ "description": "A request to generate a video from a first-frame image with Seedance 2.5. Upload the first frame as `image` using `multipart/form-data`.",
"required": true,
"x-body-name": "body"
},
@@ -14128,7 +14227,7 @@
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/GenerateVideoSeedDance2Response"
+ "$ref": "#/components/schemas/GenerateVideoSeedDance25Response"
}
}
},
@@ -14176,18 +14275,18 @@
"description": "The endpoint is temporarily unavailable."
}
},
- "summary": "Image to video with Seedance 2.0",
+ "summary": "Image to video with Seedance 2.5",
"tags": [
"video-generate"
],
- "x-tool-description": "Animate a first-frame image asset with Seedance 2.0. Supply end_image_asset_identifier for a transition to a final frame. Video download links expire.",
+ "x-tool-description": "Animate a first-frame image asset with Seedance 2.5. Supply end_image_asset_identifier for a transition to a final frame. Video download links expire.",
"x-openapi-router-controller": "external_api.generated.openapi.controllers.video_generate_controller"
}
},
- "/v2/video/generate/seedance-2-reference-to-video": {
+ "/v2/video/generate/seedance-2-5-reference-to-video": {
"post": {
- "description": "Generate a video from a text prompt and reference media with\nSeedance 2.0. Upload at least one image in `reference_images`, plus optional\n`reference_audios`, using `multipart/form-data`.\nReturns a `generation_id`; poll `GET /v2/generations/{generation_id}`\nor supply a `webhook_url`.\n",
- "operationId": "post_generate_video_seed_dance2_reference_to_video",
+ "description": "Generate a video from a text prompt and reference media with\nSeedance 2.5. Upload at least one image in `reference_images`, plus optional\n`reference_audios`, using `multipart/form-data`.\nReturns a `generation_id`; poll `GET /v2/generations/{generation_id}`\nor supply a `webhook_url`.\n",
+ "operationId": "post_generate_video_seed_dance25_reference_to_video",
"parameters": [
{
"description": "When true, the request is validated and priced but not run: nothing is\ngenerated, stored, or billed, and no safety review is performed. The\nresponse is a `PriceQuote` object instead of the usual response for this\nendpoint. Send exactly the request you would send to generate, so the\nquote reflects the same options.\n",
@@ -14213,16 +14312,16 @@
}
},
"schema": {
- "$ref": "#/components/schemas/GenerateVideoSeedDance2ReferenceToVideoRequest"
+ "$ref": "#/components/schemas/GenerateVideoSeedDance25ReferenceToVideoRequest"
}
},
"application/json": {
"schema": {
- "$ref": "#/components/schemas/GenerateVideoSeedDance2ReferenceToVideoRequest"
+ "$ref": "#/components/schemas/GenerateVideoSeedDance25ReferenceToVideoRequest"
}
}
},
- "description": "A request to produce a video from reference media with Seedance 2.0. Upload the references using `multipart/form-data`.",
+ "description": "A request to produce a video from reference media with Seedance 2.5. Upload the references using `multipart/form-data`.",
"required": true,
"x-body-name": "body"
},
@@ -14231,7 +14330,7 @@
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/GenerateVideoSeedDance2Response"
+ "$ref": "#/components/schemas/GenerateVideoSeedDance25Response"
}
}
},
@@ -14279,18 +14378,18 @@
"description": "The endpoint is temporarily unavailable."
}
},
- "summary": "Reference to video with Seedance 2.0",
+ "summary": "Reference to video with Seedance 2.5",
"tags": [
"video-generate"
],
- "x-tool-description": "Generate a video with Seedance 2.0 using at least one reference image or video asset. Address references as @Image1 and @Video1 in prompt order. Video download links expire.",
+ "x-tool-description": "Generate a video with Seedance 2.5 using at least one reference image or video asset. Address references as [Image1] and [Video1] in prompt order. Video download links expire.",
"x-openapi-router-controller": "external_api.generated.openapi.controllers.video_generate_controller"
}
},
- "/v2/video/generate/seedance-2-text-to-video": {
+ "/v2/video/generate/seedance-2-5-text-to-video": {
"post": {
- "description": "Generate one or more videos from a text prompt with Seedance 2.0.\nReturns a `generation_id`; poll `GET /v2/generations/{generation_id}`\nor supply a `webhook_url`.\n",
- "operationId": "post_generate_video_seed_dance2_text_to_video",
+ "description": "Generate a video from a text prompt with Seedance 2.5, at up to 1080p and\n30 seconds. Returns a `generation_id`; poll `GET /v2/generations/{generation_id}`\nor supply a `webhook_url`.\n",
+ "operationId": "post_generate_video_seed_dance25_text_to_video",
"parameters": [
{
"description": "When true, the request is validated and priced but not run: nothing is\ngenerated, stored, or billed, and no safety review is performed. The\nresponse is a `PriceQuote` object instead of the usual response for this\nendpoint. Send exactly the request you would send to generate, so the\nquote reflects the same options.\n",
@@ -14308,20 +14407,20 @@
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/GenerateVideoSeedDance2TextToVideoRequest"
+ "$ref": "#/components/schemas/GenerateVideoSeedDance25TextToVideoRequest"
}
}
},
- "description": "A request to generate videos from a text prompt with Seedance 2.0.",
+ "description": "A request to generate a video from a text prompt with Seedance 2.5.",
"required": true,
- "x-body-name": "generate_video_seed_dance2_text_to_video_request"
+ "x-body-name": "generate_video_seed_dance25_text_to_video_request"
},
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/GenerateVideoSeedDance2Response"
+ "$ref": "#/components/schemas/GenerateVideoSeedDance25Response"
}
}
},
@@ -14366,40 +14465,66 @@
"description": "The endpoint is temporarily unavailable."
}
},
- "summary": "Text to video with Seedance 2.0",
+ "summary": "Text to video with Seedance 2.5",
"tags": [
"video-generate"
],
- "x-tool-description": "Generate a video from text with Seedance 2.0. Video download links expire.",
+ "x-tool-description": "Generate a video from text with Seedance 2.5. Video download links expire.",
"x-openapi-router-controller": "external_api.generated.openapi.controllers.video_generate_controller"
}
},
- "/v2/workflow/lookbook": {
+ "/v2/video/generate/seedance-2-image-to-video": {
"post": {
- "description": "Creates polished fashion product imagery from one or more product\nreferences and an aesthetic reference. Each generated shoot is returned\nas four individual lookbook images.\n\nThe request is processed asynchronously. Poll\n`GET /v2/generations/{generation_id}` with the returned `generation_id`\nuntil the generation is completed or failed.\n",
- "operationId": "post_lookbook",
+ "description": "Generate one or more videos from a first-frame image and a text prompt\nwith Seedance 2.0. Upload the first frame as `image`, and optionally a final\nframe as `end_image`, using `multipart/form-data`.\nReturns a `generation_id`; poll `GET /v2/generations/{generation_id}`\nor supply a `webhook_url`.\n",
+ "operationId": "post_generate_video_seed_dance2_image_to_video",
+ "parameters": [
+ {
+ "description": "When true, the request is validated and priced but not run: nothing is\ngenerated, stored, or billed, and no safety review is performed. The\nresponse is a `PriceQuote` object instead of the usual response for this\nendpoint. Send exactly the request you would send to generate, so the\nquote reflects the same options.\n",
+ "in": "query",
+ "name": "dry_run",
+ "required": false,
+ "schema": {
+ "default": false,
+ "type": "boolean"
+ },
+ "x-tool-description": "Validate and quote only; no generation, storage, billing, or safety review."
+ }
+ ],
"requestBody": {
"content": {
+ "multipart/form-data": {
+ "encoding": {
+ "image_asset_identifier": {
+ "contentType": "application/json"
+ },
+ "end_image_asset_identifier": {
+ "contentType": "application/json"
+ }
+ },
+ "schema": {
+ "$ref": "#/components/schemas/GenerateVideoSeedDance2ImageToVideoRequest"
+ }
+ },
"application/json": {
"schema": {
- "$ref": "#/components/schemas/LookbookRequest"
+ "$ref": "#/components/schemas/GenerateVideoSeedDance2ImageToVideoRequest"
}
}
},
- "description": "Product references and presentation options for the lookbook.",
+ "description": "A request to generate videos from a first-frame image with Seedance 2.0. Upload the first frame as `image` using `multipart/form-data`.",
"required": true,
- "x-body-name": "lookbook_request"
+ "x-body-name": "body"
},
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/LookbookResponse"
+ "$ref": "#/components/schemas/GenerateVideoSeedDance2Response"
}
}
},
- "description": "Lookbook accepted for asynchronous processing."
+ "description": "An acknowledgement to poll with `GET /v2/generations/{generation_id}`."
},
"400": {
"description": "Invalid input provided."
@@ -14418,7 +14543,13 @@
"description": "Insufficient credits or quota."
},
"403": {
- "description": "Not authorized to create a lookbook."
+ "description": "This account does not have access to this model."
+ },
+ "404": {
+ "description": "The first-frame image was not found."
+ },
+ "422": {
+ "description": "The prompt did not pass safety checks."
},
"429": {
"content": {
@@ -14429,44 +14560,61 @@
}
},
"description": "Too many requests."
+ },
+ "500": {
+ "description": "Internal server error."
+ },
+ "503": {
+ "description": "The endpoint is temporarily unavailable."
}
},
- "summary": "Create a fashion lookbook",
+ "summary": "Image to video with Seedance 2.0",
"tags": [
- "edit-workflow"
+ "video-generate"
],
- "x-openapi-router-controller": "external_api.generated.openapi.controllers.edit_workflow_controller"
+ "x-tool-description": "Animate a first-frame image asset with Seedance 2.0. Supply end_image_asset_identifier for a transition to a final frame. Video download links expire.",
+ "x-openapi-router-controller": "external_api.generated.openapi.controllers.video_generate_controller"
}
},
- "/v2/workflow/precise-masked-edit": {
+ "/v2/video/generate/seedance-2-reference-to-video": {
"post": {
- "description": "Applies an instruction to an image. When a mask is supplied, it identifies\nthe primary edit region. Without a mask, the model edits the full image.\nOptional reference images can guide the requested appearance. Set\n`preserve_unmasked_pixels` to keep decoded pixels outside a supplied mask\nunchanged in the final image.\n\nThe request runs asynchronously. Poll\n`GET /v2/generations/{generation_id}` with the returned `generation_id`\nuntil the generation is completed or failed.\n",
- "operationId": "post_precise_masked_edit",
+ "description": "Generate a video from a text prompt and reference media with\nSeedance 2.0. Upload at least one image in `reference_images`, plus optional\n`reference_audios`, using `multipart/form-data`.\nReturns a `generation_id`; poll `GET /v2/generations/{generation_id}`\nor supply a `webhook_url`.\n",
+ "operationId": "post_generate_video_seed_dance2_reference_to_video",
+ "parameters": [
+ {
+ "description": "When true, the request is validated and priced but not run: nothing is\ngenerated, stored, or billed, and no safety review is performed. The\nresponse is a `PriceQuote` object instead of the usual response for this\nendpoint. Send exactly the request you would send to generate, so the\nquote reflects the same options.\n",
+ "in": "query",
+ "name": "dry_run",
+ "required": false,
+ "schema": {
+ "default": false,
+ "type": "boolean"
+ },
+ "x-tool-description": "Validate and quote only; no generation, storage, billing, or safety review."
+ }
+ ],
"requestBody": {
"content": {
"multipart/form-data": {
"encoding": {
- "source_asset_identifier": {
- "contentType": "application/json"
- },
- "mask_asset_identifier": {
+ "reference_image_asset_identifiers": {
"contentType": "application/json"
},
- "reference_asset_identifiers": {
+ "reference_video_asset_identifiers": {
"contentType": "application/json"
}
},
"schema": {
- "$ref": "#/components/schemas/PreciseMaskedEditRequest"
+ "$ref": "#/components/schemas/GenerateVideoSeedDance2ReferenceToVideoRequest"
}
},
"application/json": {
"schema": {
- "$ref": "#/components/schemas/PreciseMaskedEditRequest"
+ "$ref": "#/components/schemas/GenerateVideoSeedDance2ReferenceToVideoRequest"
}
}
},
- "description": "Supply `source_asset_identifier` to reuse an existing Ideogram asset, or send `source_image` bytes using `multipart/form-data`. If both are supplied, the asset identifier takes precedence.",
+ "description": "A request to produce a video from reference media with Seedance 2.0. Upload the references using `multipart/form-data`.",
"required": true,
"x-body-name": "body"
},
@@ -14475,11 +14623,11 @@
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/PreciseMaskedEditResponse"
+ "$ref": "#/components/schemas/GenerateVideoSeedDance2Response"
}
}
},
- "description": "Precise masked edit accepted for asynchronous processing."
+ "description": "An acknowledgement to poll with `GET /v2/generations/{generation_id}`."
},
"400": {
"description": "Invalid input provided."
@@ -14498,10 +14646,13 @@
"description": "Insufficient credits or quota."
},
"403": {
- "description": "Not authorized to use precise masked editing."
+ "description": "This account does not have access to this model."
},
"404": {
- "description": "An input asset was not found or is not readable."
+ "description": "A reference was not found."
+ },
+ "422": {
+ "description": "The prompt did not pass safety checks."
},
"429": {
"content": {
@@ -14513,56 +14664,60 @@
},
"description": "Too many requests."
},
+ "500": {
+ "description": "Internal server error."
+ },
"503": {
- "description": "Precise masked editing is temporarily unavailable."
+ "description": "The endpoint is temporarily unavailable."
}
},
- "summary": "Edit an image, optionally using a mask",
+ "summary": "Reference to video with Seedance 2.0",
"tags": [
- "edit-workflow"
+ "video-generate"
],
- "x-openapi-router-controller": "external_api.generated.openapi.controllers.edit_workflow_controller"
+ "x-tool-description": "Generate a video with Seedance 2.0 using at least one reference image or video asset. Address references as @Image1 and @Video1 in prompt order. Video download links expire.",
+ "x-openapi-router-controller": "external_api.generated.openapi.controllers.video_generate_controller"
}
},
- "/v2/workflow/virtual-try-on": {
+ "/v2/video/generate/seedance-2-text-to-video": {
"post": {
- "description": "Generates a photorealistic image of the person in the supplied photo\nwearing the supplied garments, preserving their face, body, and\nbackground.\n\nThe request is processed asynchronously. Poll\n`GET /v2/generations/{generation_id}` with the returned `generation_id`\nuntil the generation is completed or failed.\n\nSupply the person as either an `AssetIdentifier` reference\n(`person_asset_identifier`) or the raw image bytes directly\n(`person_image`, multipart requests only), and likewise the garments as\neither `garment_asset_identifiers` or `garment_images`. For each of the\ntwo sources, provide exactly one of the two forms; supplying both, or\nneither, is rejected with a 400.\n",
- "operationId": "post_virtual_try_on",
+ "description": "Generate one or more videos from a text prompt with Seedance 2.0.\nReturns a `generation_id`; poll `GET /v2/generations/{generation_id}`\nor supply a `webhook_url`.\n",
+ "operationId": "post_generate_video_seed_dance2_text_to_video",
+ "parameters": [
+ {
+ "description": "When true, the request is validated and priced but not run: nothing is\ngenerated, stored, or billed, and no safety review is performed. The\nresponse is a `PriceQuote` object instead of the usual response for this\nendpoint. Send exactly the request you would send to generate, so the\nquote reflects the same options.\n",
+ "in": "query",
+ "name": "dry_run",
+ "required": false,
+ "schema": {
+ "default": false,
+ "type": "boolean"
+ },
+ "x-tool-description": "Validate and quote only; no generation, storage, billing, or safety review."
+ }
+ ],
"requestBody": {
"content": {
- "multipart/form-data": {
- "encoding": {
- "person_asset_identifier": {
- "contentType": "application/json"
- },
- "garment_asset_identifiers": {
- "contentType": "application/json"
- }
- },
- "schema": {
- "$ref": "#/components/schemas/VirtualTryOnRequest"
- }
- },
"application/json": {
"schema": {
- "$ref": "#/components/schemas/VirtualTryOnRequest"
+ "$ref": "#/components/schemas/GenerateVideoSeedDance2TextToVideoRequest"
}
}
},
- "description": "The person to dress, the garments to put on them, and how to present them. Use `multipart/form-data` to upload `person_image` / `garment_images` bytes directly, or `application/json` (or multipart with the asset-identifier fields) to reference existing assets instead.",
+ "description": "A request to generate videos from a text prompt with Seedance 2.0.",
"required": true,
- "x-body-name": "body"
+ "x-body-name": "generate_video_seed_dance2_text_to_video_request"
},
"responses": {
"200": {
"content": {
"application/json": {
"schema": {
- "$ref": "#/components/schemas/VirtualTryOnResponse"
+ "$ref": "#/components/schemas/GenerateVideoSeedDance2Response"
}
}
},
- "description": "Try-on accepted for asynchronous processing."
+ "description": "An acknowledgement to poll with `GET /v2/generations/{generation_id}`."
},
"400": {
"description": "Invalid input provided."
@@ -14581,7 +14736,10 @@
"description": "Insufficient credits or quota."
},
"403": {
- "description": "Not authorized to create a try-on."
+ "description": "This account does not have access to this model."
+ },
+ "422": {
+ "description": "The prompt did not pass safety checks."
},
"429": {
"content": {
@@ -14592,42 +14750,276 @@
}
},
"description": "Too many requests."
+ },
+ "500": {
+ "description": "Internal server error."
+ },
+ "503": {
+ "description": "The endpoint is temporarily unavailable."
}
},
- "summary": "Dress a person in one or more garments",
+ "summary": "Text to video with Seedance 2.0",
"tags": [
- "edit-workflow"
+ "video-generate"
],
- "x-openapi-router-controller": "external_api.generated.openapi.controllers.edit_workflow_controller"
- }
- }
- },
- "components": {
- "parameters": {
- "DryRun": {
- "description": "When true, the request is validated and priced but not run: nothing is\ngenerated, stored, or billed, and no safety review is performed. The\nresponse is a `PriceQuote` object instead of the usual response for this\nendpoint. Send exactly the request you would send to generate, so the\nquote reflects the same options.\n",
- "in": "query",
- "name": "dry_run",
- "required": false,
- "schema": {
- "default": false,
- "type": "boolean"
- },
- "x-tool-description": "Validate and quote only; no generation, storage, billing, or safety review."
+ "x-tool-description": "Generate a video from text with Seedance 2.0. Video download links expire.",
+ "x-openapi-router-controller": "external_api.generated.openapi.controllers.video_generate_controller"
}
},
- "schemas": {
- "PriceQuote": {
- "description": "The price a request would cost, returned in place of the endpoint's\nusual response when `dry_run=true`. Money is in millionths of a US\ndollar and credits in thousandths of a credit, so a quote can be\ncompared against `usage_cost_usd_micros` and credit balances without\nrounding.\n",
- "properties": {
- "object": {
- "description": "Always \"price_quote\".",
- "enum": [
- "price_quote"
- ],
- "type": "string"
+ "/v2/workflow/lookbook": {
+ "post": {
+ "description": "Creates polished fashion product imagery from one or more product\nreferences and an aesthetic reference. Each generated shoot is returned\nas four individual lookbook images.\n\nThe request is processed asynchronously. Poll\n`GET /v2/generations/{generation_id}` with the returned `generation_id`\nuntil the generation is completed or failed.\n",
+ "operationId": "post_lookbook",
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/LookbookRequest"
+ }
+ }
},
- "billing_identifier": {
+ "description": "Product references and presentation options for the lookbook.",
+ "required": true,
+ "x-body-name": "lookbook_request"
+ },
+ "responses": {
+ "200": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/LookbookResponse"
+ }
+ }
+ },
+ "description": "Lookbook accepted for asynchronous processing."
+ },
+ "400": {
+ "description": "Invalid input provided."
+ },
+ "401": {
+ "description": "Unauthorized."
+ },
+ "402": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/GenerationErrorResponse"
+ }
+ }
+ },
+ "description": "Insufficient credits or quota."
+ },
+ "403": {
+ "description": "Not authorized to create a lookbook."
+ },
+ "429": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/GenerationErrorResponse"
+ }
+ }
+ },
+ "description": "Too many requests."
+ }
+ },
+ "summary": "Create a fashion lookbook",
+ "tags": [
+ "edit-workflow"
+ ],
+ "x-openapi-router-controller": "external_api.generated.openapi.controllers.edit_workflow_controller"
+ }
+ },
+ "/v2/workflow/precise-masked-edit": {
+ "post": {
+ "description": "Applies an instruction to an image. When a mask is supplied, it identifies\nthe primary edit region. Without a mask, the model edits the full image.\nOptional reference images can guide the requested appearance. Set\n`preserve_unmasked_pixels` to keep decoded pixels outside a supplied mask\nunchanged in the final image.\n\nThe request runs asynchronously. Poll\n`GET /v2/generations/{generation_id}` with the returned `generation_id`\nuntil the generation is completed or failed.\n",
+ "operationId": "post_precise_masked_edit",
+ "requestBody": {
+ "content": {
+ "multipart/form-data": {
+ "encoding": {
+ "source_asset_identifier": {
+ "contentType": "application/json"
+ },
+ "mask_asset_identifier": {
+ "contentType": "application/json"
+ },
+ "reference_asset_identifiers": {
+ "contentType": "application/json"
+ }
+ },
+ "schema": {
+ "$ref": "#/components/schemas/PreciseMaskedEditRequest"
+ }
+ },
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/PreciseMaskedEditRequest"
+ }
+ }
+ },
+ "description": "Supply `source_asset_identifier` to reuse an existing Ideogram asset, or send `source_image` bytes using `multipart/form-data`. If both are supplied, the asset identifier takes precedence.",
+ "required": true,
+ "x-body-name": "body"
+ },
+ "responses": {
+ "200": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/PreciseMaskedEditResponse"
+ }
+ }
+ },
+ "description": "Precise masked edit accepted for asynchronous processing."
+ },
+ "400": {
+ "description": "Invalid input provided."
+ },
+ "401": {
+ "description": "Unauthorized."
+ },
+ "402": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/GenerationErrorResponse"
+ }
+ }
+ },
+ "description": "Insufficient credits or quota."
+ },
+ "403": {
+ "description": "Not authorized to use precise masked editing."
+ },
+ "404": {
+ "description": "An input asset was not found or is not readable."
+ },
+ "429": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/GenerationErrorResponse"
+ }
+ }
+ },
+ "description": "Too many requests."
+ },
+ "503": {
+ "description": "Precise masked editing is temporarily unavailable."
+ }
+ },
+ "summary": "Edit an image, optionally using a mask",
+ "tags": [
+ "edit-workflow"
+ ],
+ "x-openapi-router-controller": "external_api.generated.openapi.controllers.edit_workflow_controller"
+ }
+ },
+ "/v2/workflow/virtual-try-on": {
+ "post": {
+ "description": "Generates a photorealistic image of the person in the supplied photo\nwearing the supplied garments, preserving their face, body, and\nbackground.\n\nThe request is processed asynchronously. Poll\n`GET /v2/generations/{generation_id}` with the returned `generation_id`\nuntil the generation is completed or failed.\n\nSupply the person as either an `AssetIdentifier` reference\n(`person_asset_identifier`) or the raw image bytes directly\n(`person_image`, multipart requests only), and likewise the garments as\neither `garment_asset_identifiers` or `garment_images`. For each of the\ntwo sources, provide exactly one of the two forms; supplying both, or\nneither, is rejected with a 400.\n",
+ "operationId": "post_virtual_try_on",
+ "requestBody": {
+ "content": {
+ "multipart/form-data": {
+ "encoding": {
+ "person_asset_identifier": {
+ "contentType": "application/json"
+ },
+ "garment_asset_identifiers": {
+ "contentType": "application/json"
+ }
+ },
+ "schema": {
+ "$ref": "#/components/schemas/VirtualTryOnRequest"
+ }
+ },
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/VirtualTryOnRequest"
+ }
+ }
+ },
+ "description": "The person to dress, the garments to put on them, and how to present them. Use `multipart/form-data` to upload `person_image` / `garment_images` bytes directly, or `application/json` (or multipart with the asset-identifier fields) to reference existing assets instead.",
+ "required": true,
+ "x-body-name": "body"
+ },
+ "responses": {
+ "200": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/VirtualTryOnResponse"
+ }
+ }
+ },
+ "description": "Try-on accepted for asynchronous processing."
+ },
+ "400": {
+ "description": "Invalid input provided."
+ },
+ "401": {
+ "description": "Unauthorized."
+ },
+ "402": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/GenerationErrorResponse"
+ }
+ }
+ },
+ "description": "Insufficient credits or quota."
+ },
+ "403": {
+ "description": "Not authorized to create a try-on."
+ },
+ "429": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/GenerationErrorResponse"
+ }
+ }
+ },
+ "description": "Too many requests."
+ }
+ },
+ "summary": "Dress a person in one or more garments",
+ "tags": [
+ "edit-workflow"
+ ],
+ "x-openapi-router-controller": "external_api.generated.openapi.controllers.edit_workflow_controller"
+ }
+ }
+ },
+ "components": {
+ "parameters": {
+ "DryRun": {
+ "description": "When true, the request is validated and priced but not run: nothing is\ngenerated, stored, or billed, and no safety review is performed. The\nresponse is a `PriceQuote` object instead of the usual response for this\nendpoint. Send exactly the request you would send to generate, so the\nquote reflects the same options.\n",
+ "in": "query",
+ "name": "dry_run",
+ "required": false,
+ "schema": {
+ "default": false,
+ "type": "boolean"
+ },
+ "x-tool-description": "Validate and quote only; no generation, storage, billing, or safety review."
+ }
+ },
+ "schemas": {
+ "PriceQuote": {
+ "description": "The price a request would cost, returned in place of the endpoint's\nusual response when `dry_run=true`. Money is in millionths of a US\ndollar and credits in thousandths of a credit, so a quote can be\ncompared against `usage_cost_usd_micros` and credit balances without\nrounding.\n",
+ "properties": {
+ "object": {
+ "description": "Always \"price_quote\".",
+ "enum": [
+ "price_quote"
+ ],
+ "type": "string"
+ },
+ "billing_identifier": {
"description": "The catalog product the request would bill.",
"example": "ideogram_v3_generation",
"type": "string"
@@ -21301,7 +21693,8 @@
"type": "boolean"
}
},
- "type": "object"
+ "type": "object",
+ "x-tool-description": "The source image and a same-size black-and-white mask, as asset identifiers; white marks the region to remove."
},
"RemoveBackgroundV2Response": {
"description": "Synchronous requests include exactly one foreground image in `data`.\nAsync requests omit `data`; poll with `generation_id` for the result.\nIf a synchronous request fails after the response has started\nstreaming, the body contains `error` and `status_code` instead of\n`generation_id`.\n",
@@ -24212,7 +24605,8 @@
"required": [
"colors"
],
- "type": "object"
+ "type": "object",
+ "x-tool-description": "The product photo as `image_asset_identifier`, up to 4 masks as `mask_asset_identifiers`, and one entry in `colors` per mask."
},
"ColorwaysQuality": {
"description": "The quality tier for the edit. Higher tiers may improve detail and\ntake longer to complete.\n",
@@ -24498,7 +24892,8 @@
"required": [
"resolution"
],
- "type": "object"
+ "type": "object",
+ "x-tool-description": "The source creative as `image_asset_identifier` and the target `resolution`."
},
"AdResizerQuality": {
"description": "The quality tier for the reframe. Higher tiers may improve detail and\ntake longer to complete.\n",
@@ -25567,7 +25962,8 @@
"x-tool-description": "Signed completion callback; public HTTPS only (no private/internal hosts)."
}
},
- "type": "object"
+ "type": "object",
+ "x-tool-description": "The product photo as `image_asset_identifier`, up to 4 masks as `mask_asset_identifiers`, and either one entry in `material_asset_identifiers` for all masks or one per mask, paired by position."
},
"MaterialSwapQuality": {
"description": "The quality tier for the edit. Higher tiers may improve detail and\ntake longer to complete.\n",
@@ -29034,7 +29430,7 @@
"description": "The image to edit, as an existing upload or generated image asset. Supply this or `image`, never both. Takes priority over `image` if both are supplied. Cannot be combined with `mask`."
},
"image": {
- "description": "The image to edit (max 25MB; JPEG, PNG, or WEBP). Multipart requests only. The output always matches this image's width and height, and pixels the edit did not meaningfully change are copied exactly from it. Images too large for the model are scaled down, keeping their proportions, and returned as rendered. Images with an aspect ratio outside 1:6 to 6:1 are rejected.",
+ "description": "The image to edit, as raw bytes (max 50MB; JPEG, PNG, or WEBP). Multipart requests only; ignored if `image_asset_identifier` is also supplied. Required when supplying a `mask` or a `context_window`. The output always matches this image's width and height, and pixels the edit did not meaningfully change are copied exactly from it.",
"format": "binary",
"type": "string"
},
@@ -29048,7 +29444,7 @@
"type": "array"
},
"reference_images": {
- "description": "Optional images to guide the edit (max 4, max 25MB each; JPEG, PNG, or WEBP). They are never edited themselves; only `image` is. Multipart requests only. A request with a `mask` can include at most three, because the mask takes up one reference slot.",
+ "description": "Optional images to guide the edit (max 4, max 50MB each; JPEG, PNG, or WEBP). They are never edited themselves; only `image` is. Multipart requests only; ignored if `reference_image_asset_identifiers` is also supplied. A request with a `mask` can include at most three, because the mask takes up one reference slot.",
"items": {
"format": "binary",
"type": "string"
@@ -29057,10 +29453,16 @@
"type": "array"
},
"mask": {
- "description": "An optional mask that limits the edit to part of `image` (max 25MB; JPEG, PNG, or WEBP). Multipart requests only. Black marks the area to edit and white the area to keep; values in between are rounded to the nearer of the two. The mask must have the same width and height as `image` and contain both black and white areas. A masked request can include at most three `reference_images`.",
+ "description": "An optional mask that limits the edit to part of `image` (max 50MB; JPEG, PNG, or WEBP). Multipart requests only. Black marks the area to edit and white the area to keep; values in between are rounded to the nearer of the two. The mask must have the same width and height as `image` and contain both black and white areas. Requires `image` as raw bytes; masks cannot be combined with asset references. A masked request can include at most three `reference_images`.",
"format": "binary",
"type": "string"
},
+ "context_window": {
+ "default": "none",
+ "description": "How much of the image being edited the model may see and change.\n`none`, the default, edits the whole image. A large image may come back smaller than it was sent.\n`auto` fits a region around what the `mask` selects and edits only that region, so its detail is kept. It requires a `mask`. A small enough image has no region to fit and is edited as it is.\n`x,y,width,height` names the region explicitly, in the edited image's own pixels with the origin at its top-left corner — for example `1024,512,2048,1536`. The region must lie inside the image, measure at least 256px on each side, have an aspect ratio between 1:6 and 6:1, and cover no more than 4194304 pixels. A `mask` may select only pixels inside it.\nWith `auto` or an explicit region, every pixel outside the region is returned exactly as supplied and the output keeps the image's own width and height.",
+ "pattern": "^(none|auto|[0-9]+,[0-9]+,[0-9]+,[0-9]+)$",
+ "type": "string"
+ },
"quality": {
"default": "medium",
"description": "The rendering quality to use. `very_low` is the fastest and cheapest, and `high` takes longer and is priced higher.",
@@ -30908,7 +31310,7 @@
"type": "string"
},
"aspect_ratio": {
- "description": "The requested output aspect ratio. It resolves to the closest dimensions the model supports at the 1K output tier.",
+ "description": "The requested output aspect ratio, as `width:height`.",
"example": 969,
"maxLength": 21,
"minLength": 3,
@@ -30942,6 +31344,384 @@
"type": "object",
"x-tool-description": "Requires image_asset_identifier for the source image."
},
+ "ReframeAspectRatio": {
+ "description": "The requested output aspect ratio, as `width:height`.",
+ "example": 969,
+ "maxLength": 21,
+ "minLength": 3,
+ "pattern": "^[1-9][0-9]*:[1-9][0-9]*$",
+ "type": "string"
+ },
+ "ReframeImageNanoBananaProResponse": {
+ "description": "Acknowledges an accepted asynchronous Reframe request. Poll\n`GET /v2/generations/{generation_id}` for completion and output\nimages. The seed, width, and height report the values the request resolved to when the caller left them unset.\n",
+ "example": {
+ "seed": 12345,
+ "generation_id": "generation_id",
+ "width": 0,
+ "height": 6
+ },
+ "properties": {
+ "generation_id": {
+ "description": "URL-safe base64 ID of the accepted generation. Accepted by the\n`GET /v2/generations/{generation_id}` polling endpoint.\n",
+ "title": "generation_id",
+ "type": "string"
+ },
+ "seed": {
+ "description": "Random seed. Set for reproducible generation.",
+ "example": 12345,
+ "maximum": 2147483647,
+ "minimum": 0,
+ "title": "Seed",
+ "type": "integer",
+ "x-tool-description": "Set for reproducible generation."
+ },
+ "width": {
+ "description": "The resolved output width in pixels.",
+ "title": "width",
+ "type": "integer"
+ },
+ "height": {
+ "description": "The resolved output height in pixels.",
+ "title": "height",
+ "type": "integer"
+ }
+ },
+ "required": [
+ "generation_id",
+ "height",
+ "seed",
+ "width"
+ ],
+ "title": "ReframeImageNanoBananaProResponse",
+ "type": "object"
+ },
+ "ReframeImageNanoBananaProRequest": {
+ "additionalProperties": false,
+ "description": "Supply exactly one source: `image_asset_identifier` for an existing\nIdeogram asset, or `image` for a raw upload. Supplying both or neither\nis rejected with a 400.\n",
+ "properties": {
+ "image_asset_identifier": {
+ "$ref": "#/components/schemas/AssetIdentifier"
+ },
+ "image": {
+ "description": "The JPEG, PNG, or WEBP image to reframe (max 50MB).",
+ "format": "binary",
+ "type": "string"
+ },
+ "aspect_ratio": {
+ "description": "The requested output aspect ratio, as `width:height`.",
+ "example": 969,
+ "maxLength": 21,
+ "minLength": 3,
+ "pattern": "^[1-9][0-9]*:[1-9][0-9]*$",
+ "type": "string"
+ },
+ "resolution_tier": {
+ "default": "1K",
+ "description": "The output resolution tier. The model sizes its output by tier at the requested aspect ratio; exact pixel dimensions cannot be requested.",
+ "enum": [
+ "1K",
+ "2K",
+ "4K"
+ ],
+ "type": "string"
+ },
+ "private": {
+ "description": "API-key requests are always private. For bearer-authenticated\nrequests, this controls whether the result is private; when\nomitted, it follows the caller's plan entitlement. Enterprise\ngenerations are always private.\n",
+ "type": "boolean"
+ },
+ "num_images": {
+ "default": 1,
+ "description": "The number of output images to generate.",
+ "maximum": 4,
+ "minimum": 1,
+ "type": "integer"
+ },
+ "seed": {
+ "description": "Random seed. Set for reproducible generation.",
+ "example": 12345,
+ "maximum": 2147483647,
+ "minimum": 0,
+ "title": "Seed",
+ "type": "integer",
+ "x-tool-description": "Set for reproducible generation."
+ }
+ },
+ "required": [
+ "aspect_ratio"
+ ],
+ "type": "object"
+ },
+ "ReframeImageGptImage25FlareResponse": {
+ "description": "Acknowledges an accepted asynchronous Reframe request. Poll\n`GET /v2/generations/{generation_id}` for completion and output\nimages. The seed, width, and height report the values the request resolved to when the caller left them unset.\n",
+ "example": {
+ "seed": 12345,
+ "generation_id": "generation_id",
+ "width": 0,
+ "height": 6
+ },
+ "properties": {
+ "generation_id": {
+ "description": "URL-safe base64 ID of the accepted generation. Accepted by the\n`GET /v2/generations/{generation_id}` polling endpoint.\n",
+ "title": "generation_id",
+ "type": "string"
+ },
+ "seed": {
+ "description": "Random seed. Set for reproducible generation.",
+ "example": 12345,
+ "maximum": 2147483647,
+ "minimum": 0,
+ "title": "Seed",
+ "type": "integer",
+ "x-tool-description": "Set for reproducible generation."
+ },
+ "width": {
+ "description": "The resolved output width in pixels.",
+ "title": "width",
+ "type": "integer"
+ },
+ "height": {
+ "description": "The resolved output height in pixels.",
+ "title": "height",
+ "type": "integer"
+ }
+ },
+ "required": [
+ "generation_id",
+ "height",
+ "seed",
+ "width"
+ ],
+ "title": "ReframeImageGptImage25FlareResponse",
+ "type": "object"
+ },
+ "ReframeImageGptImage25FlareRequest": {
+ "additionalProperties": false,
+ "description": "Supply exactly one source: `image_asset_identifier` for an existing\nIdeogram asset, or `image` for a raw upload. Supplying both or neither\nis rejected with a 400.\n",
+ "properties": {
+ "image_asset_identifier": {
+ "$ref": "#/components/schemas/AssetIdentifier"
+ },
+ "image": {
+ "description": "The JPEG, PNG, or WEBP image to reframe (max 50MB).",
+ "format": "binary",
+ "type": "string"
+ },
+ "aspect_ratio": {
+ "description": "The requested output aspect ratio, as `width:height`.",
+ "example": 969,
+ "maxLength": 21,
+ "minLength": 3,
+ "pattern": "^[1-9][0-9]*:[1-9][0-9]*$",
+ "type": "string"
+ },
+ "quality": {
+ "default": "auto",
+ "description": "How much rendering effort the model spends. Lower tiers return sooner and cost less; `auto` lets the model choose.",
+ "enum": [
+ "auto",
+ "low",
+ "medium",
+ "high"
+ ],
+ "type": "string"
+ },
+ "private": {
+ "description": "API-key requests are always private. For bearer-authenticated\nrequests, this controls whether the result is private; when\nomitted, it follows the caller's plan entitlement. Enterprise\ngenerations are always private.\n",
+ "type": "boolean"
+ },
+ "num_images": {
+ "default": 1,
+ "description": "The number of output images to generate.",
+ "maximum": 4,
+ "minimum": 1,
+ "type": "integer"
+ },
+ "seed": {
+ "description": "Random seed. Set for reproducible generation.",
+ "example": 12345,
+ "maximum": 2147483647,
+ "minimum": 0,
+ "title": "Seed",
+ "type": "integer",
+ "x-tool-description": "Set for reproducible generation."
+ }
+ },
+ "required": [
+ "aspect_ratio"
+ ],
+ "type": "object"
+ },
+ "ReframeImageBriaExpandResponse": {
+ "description": "Acknowledges an accepted asynchronous Reframe request. Poll\n`GET /v2/generations/{generation_id}` for completion and output\nimages. The width and height are the canvas the source was placed on.\n",
+ "example": {
+ "seed": 12345,
+ "generation_id": "generation_id",
+ "width": 0,
+ "height": 6
+ },
+ "properties": {
+ "generation_id": {
+ "description": "URL-safe base64 ID of the accepted generation. Accepted by the\n`GET /v2/generations/{generation_id}` polling endpoint.\n",
+ "title": "generation_id",
+ "type": "string"
+ },
+ "seed": {
+ "description": "Random seed. Set for reproducible generation.",
+ "example": 12345,
+ "maximum": 2147483647,
+ "minimum": 0,
+ "title": "Seed",
+ "type": "integer",
+ "x-tool-description": "Set for reproducible generation."
+ },
+ "width": {
+ "description": "The resolved output width in pixels.",
+ "title": "width",
+ "type": "integer"
+ },
+ "height": {
+ "description": "The resolved output height in pixels.",
+ "title": "height",
+ "type": "integer"
+ }
+ },
+ "required": [
+ "generation_id",
+ "height",
+ "seed",
+ "width"
+ ],
+ "title": "ReframeImageBriaExpandResponse",
+ "type": "object"
+ },
+ "ReframeImageBriaExpandRequest": {
+ "additionalProperties": false,
+ "description": "Supply exactly one source: `image_asset_identifier` for an existing\nIdeogram asset, or `image` for a raw upload. Supplying both or neither\nis rejected with a 400.\n",
+ "properties": {
+ "image_asset_identifier": {
+ "$ref": "#/components/schemas/AssetIdentifier"
+ },
+ "image": {
+ "description": "The JPEG, PNG, or WEBP image to reframe (max 50MB).",
+ "format": "binary",
+ "type": "string"
+ },
+ "aspect_ratio": {
+ "description": "The requested output aspect ratio, as `width:height`.",
+ "example": 969,
+ "maxLength": 21,
+ "minLength": 3,
+ "pattern": "^[1-9][0-9]*:[1-9][0-9]*$",
+ "type": "string"
+ },
+ "private": {
+ "description": "API-key requests are always private. For bearer-authenticated\nrequests, this controls whether the result is private; when\nomitted, it follows the caller's plan entitlement. Enterprise\ngenerations are always private.\n",
+ "type": "boolean"
+ },
+ "seed": {
+ "description": "Random seed. Set for reproducible generation.",
+ "example": 12345,
+ "maximum": 2147483647,
+ "minimum": 0,
+ "title": "Seed",
+ "type": "integer",
+ "x-tool-description": "Set for reproducible generation."
+ }
+ },
+ "required": [
+ "aspect_ratio"
+ ],
+ "type": "object"
+ },
+ "ReframeImageAutoResponse": {
+ "description": "Acknowledges an accepted asynchronous Reframe request. Poll\n`GET /v2/generations/{generation_id}` for completion and output\nimages. The seed, width, and height report the values the request resolved to when the caller left them unset.\n",
+ "example": {
+ "seed": 12345,
+ "generation_id": "generation_id",
+ "width": 0,
+ "height": 6
+ },
+ "properties": {
+ "generation_id": {
+ "description": "URL-safe base64 ID of the accepted generation. Accepted by the\n`GET /v2/generations/{generation_id}` polling endpoint.\n",
+ "title": "generation_id",
+ "type": "string"
+ },
+ "seed": {
+ "description": "Random seed. Set for reproducible generation.",
+ "example": 12345,
+ "maximum": 2147483647,
+ "minimum": 0,
+ "title": "Seed",
+ "type": "integer",
+ "x-tool-description": "Set for reproducible generation."
+ },
+ "width": {
+ "description": "The resolved output width in pixels.",
+ "title": "width",
+ "type": "integer"
+ },
+ "height": {
+ "description": "The resolved output height in pixels.",
+ "title": "height",
+ "type": "integer"
+ }
+ },
+ "required": [
+ "generation_id",
+ "height",
+ "seed",
+ "width"
+ ],
+ "title": "ReframeImageAutoResponse",
+ "type": "object"
+ },
+ "ReframeImageAutoRequest": {
+ "additionalProperties": false,
+ "description": "Supply exactly one source: `image_asset_identifier` for an existing\nIdeogram asset, or `image` for a raw upload. Supplying both or neither\nis rejected with a 400.\n",
+ "properties": {
+ "image_asset_identifier": {
+ "$ref": "#/components/schemas/AssetIdentifier"
+ },
+ "image": {
+ "description": "The JPEG, PNG, or WEBP image to reframe (max 50MB).",
+ "format": "binary",
+ "type": "string"
+ },
+ "aspect_ratio": {
+ "description": "The requested output aspect ratio, as `width:height`.",
+ "example": 969,
+ "maxLength": 21,
+ "minLength": 3,
+ "pattern": "^[1-9][0-9]*:[1-9][0-9]*$",
+ "type": "string"
+ },
+ "private": {
+ "description": "API-key requests are always private. For bearer-authenticated\nrequests, this controls whether the result is private; when\nomitted, it follows the caller's plan entitlement. Enterprise\ngenerations are always private.\n",
+ "type": "boolean"
+ },
+ "num_images": {
+ "default": 1,
+ "description": "The number of output images to generate.",
+ "maximum": 4,
+ "minimum": 1,
+ "type": "integer"
+ },
+ "seed": {
+ "description": "Random seed. Set for reproducible generation.",
+ "example": 12345,
+ "maximum": 2147483647,
+ "minimum": 0,
+ "title": "Seed",
+ "type": "integer",
+ "x-tool-description": "Set for reproducible generation."
+ }
+ },
+ "required": [
+ "aspect_ratio"
+ ],
+ "type": "object"
+ },
"GenerateImageIdeogramV3CharacterResponse": {
"description": "Response returned by `POST /v2/image/generate/ideogram-3-character`.\nSynchronous requests (the default) include the generated images in\n`data`. Asynchronous requests omit `data`; poll\n`GET /v2/generations/{generation_id}` with the returned\n`generation_id`. `seed` is the seed that was used, including when you\ndid not set one.\n",
"example": {