{ "openapi": "3.1.0", "info": { "version": "3.0.0", "title": "Firefly API", "description": "REST API for Adobe Firefly services including image generation, image alteration, video generation, and other related services." }, "servers": [ { "url": "https://firefly-api.adobe.io", "description": "Production server." } ], "security": [ { "X-Api-Key": [], "AccessToken": [] } ], "tags": [ { "name": "Common Operations", "description": "Core Firefly API operations for generating and manipulating images and videos." }, { "name": "Manage jobs", "description": "Endpoints for managing running asynchronous jobs." } ], "paths": { "/v3/images/generate-async": { "post": { "operationId": "generateImagesV3Async", "summary": "Generate images", "description": "Generate images based on a text prompt. You may also include a reference image and Firefly will try to mimic the characteristics, such as color scheme, lighting, layout of objects in the image, etc.", "tags": ["Common Operations"], "parameters": [ { "name": "x-model-version", "in": "header", "description": "Specify the Firefly model version to use for the image generation. When a custom model is used, a `customModelId` must also be passed in the request body.", "required": false, "schema": { "type": "string", "default": "image3", "enum": [ "image3", "image3_custom", "image4_standard", "image4_ultra", "image4_custom" ] } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GenerateImagesRequestV3" } }, "multipart/form-data": { "schema": { "$ref": "#/components/schemas/Body_generateImagesV3Async" } } }, "required": true }, "responses": { "202": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AsyncAcceptResponseV3" } } }, "description": "Accepted", "headers": { "Link": { "description": "Links to check the job status or cancel the job.", "schema": { "type": "string" } } } }, "400": { "content": { "application/json": { "examples": { "bad_request": { "value": { "error_code": "bad_request" } }, "empty_input_body": { "value": { "error_code": "empty_input_body" } } }, "schema": { "$ref": "#/components/schemas/ApiError" } } }, "description": "Bad Request" }, "403": { "content": { "application/json": { "examples": { "access_error": { "value": { "error_code": "access_error" } } }, "schema": { "$ref": "#/components/schemas/ApiError" } } }, "description": "Forbidden", "headers": { "x-access-error": { "description": "Indicates the reason access is not authorized.", "schema": { "type": "string", "enum": [ "quota_exhausted", "user_non_entitled", "user_profile_denied", "invalid_ims_scope" ] } } } }, "408": { "content": { "application/json": { "examples": { "timeout_error": { "value": { "error_code": "timeout_error" } } }, "schema": { "$ref": "#/components/schemas/ApiError" } } }, "description": "Request Timeout" }, "413": { "content": { "text/html": { "schema": { "type": "string" } } }, "description": "Request Entity Too Large" }, "415": { "content": { "application/json": { "examples": { "invalid_content_type": { "value": { "error_code": "invalid_content_type" } } }, "schema": { "$ref": "#/components/schemas/ApiError" } } }, "description": "Unsupported Media Type" }, "422": { "content": { "application/json": { "examples": { "validation_error": { "value": { "error_code": "validation_error", "validation_errors": [ { "ctx": { "enum_values": [ "photo", "art" ] }, "loc": [ "body", "contentClass" ], "msg": "value is not a valid enumeration member; permitted: 'photo', 'art'", "type": "type_error.enum" } ] } } }, "schema": { "$ref": "#/components/schemas/ApiError" } } }, "description": "Unprocessable Entity" }, "429": { "content": { "application/json": { "examples": { "rate_limited": { "value": { "error_code": "rate_limited" } } }, "schema": { "$ref": "#/components/schemas/ApiError" } } }, "description": "Too Many Requests", "headers": { "retry-after": { "description": "Indicates the date after which the client should retry the request.", "schema": { "type": "string" } }, "x-access-rate-limit-level": { "description": "Indicates the level at which the rate limit was applied. Possible values are:\n- org: The rate limit was applied to the organization\n- account: The rate limit was applied to the organization's tech account.", "schema": { "type": "string" } } } }, "500": { "content": { "application/json": { "examples": { "runtime_error": { "value": { "error_code": "runtime_error" } } }, "schema": { "$ref": "#/components/schemas/ApiError" } } }, "description": "Internal Server Error" } } } }, "/v3/images/generate-similar-async": { "post": { "operationId": "generateSimilarImagesV3Async", "summary": "Generate similar images", "description": "Generate similar images based on a reference image that you provide as a parameter.", "tags": ["Common Operations"], "parameters": [ { "name": "x-model-version", "in": "header", "description": "Specify the Firefly model version to use for the image generation.", "required": false, "schema": { "type": "string", "default": "image3", "enum": [ "image3", "image4_standard", "image4_ultra" ] } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GenerateSimilarImagesRequestV3" } }, "multipart/form-data": { "schema": { "$ref": "#/components/schemas/Body_generateSimilarImagesV3Async" } } }, "required": true }, "responses": { "202": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AsyncAcceptResponseV3" } } }, "description": "Accepted", "headers": { "Link": { "description": "Links to check the job status or cancel the job.", "schema": { "type": "string" } } } }, "400": { "content": { "application/json": { "examples": { "bad_request": { "value": { "error_code": "bad_request" } }, "empty_input_body": { "value": { "error_code": "empty_input_body" } } }, "schema": { "$ref": "#/components/schemas/ApiError" } } }, "description": "Bad Request" }, "403": { "content": { "application/json": { "examples": { "access_error": { "value": { "error_code": "access_error" } } }, "schema": { "$ref": "#/components/schemas/ApiError" } } }, "description": "Forbidden", "headers": { "x-access-error": { "description": "Indicates the reason access is not authorized.", "schema": { "type": "string", "enum": [ "quota_exhausted", "user_non_entitled", "user_profile_denied", "invalid_ims_scope" ] } } } }, "408": { "content": { "application/json": { "examples": { "timeout_error": { "value": { "error_code": "timeout_error" } } }, "schema": { "$ref": "#/components/schemas/ApiError" } } }, "description": "Request Timeout" }, "413": { "content": { "text/html": { "schema": { "type": "string" } } }, "description": "Request Entity Too Large" }, "415": { "content": { "application/json": { "examples": { "invalid_content_type": { "value": { "error_code": "invalid_content_type" } } }, "schema": { "$ref": "#/components/schemas/ApiError" } } }, "description": "Unsupported Media Type" }, "422": { "content": { "application/json": { "examples": { "validation_error": { "value": { "error_code": "validation_error", "validation_errors": [ { "ctx": { "enum_values": [ "photo", "art" ] }, "loc": [ "body", "contentClass" ], "msg": "value is not a valid enumeration member; permitted: 'photo', 'art'", "type": "type_error.enum" } ] } } }, "schema": { "$ref": "#/components/schemas/ApiError" } } }, "description": "Unprocessable Entity" }, "429": { "content": { "application/json": { "examples": { "rate_limited": { "value": { "error_code": "rate_limited" } } }, "schema": { "$ref": "#/components/schemas/ApiError" } } }, "description": "Too Many Requests", "headers": { "retry-after": { "description": "Indicates the date after which the client should retry the request.", "schema": { "type": "string" } }, "x-access-rate-limit-level": { "description": "Indicates the level at which the rate limit was applied. Possible values are:\n- org: The rate limit was applied to the organization\n- account: The rate limit was applied to the organization's tech account.", "schema": { "type": "string" } } } }, "500": { "content": { "application/json": { "examples": { "runtime_error": { "value": { "error_code": "runtime_error" } } }, "schema": { "$ref": "#/components/schemas/ApiError" } } }, "description": "Internal Server Error" } } } }, "/v3/images/expand-async": { "post": { "operationId": "expandImagesV3Async", "summary": "Expand image", "description": "Change the aspect ratio or size of an image to expand it. Optionally, provide a text prompt to generate additional imagery for the expansion.", "tags": ["Common Operations"], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ExpandImageRequestV3" } }, "multipart/form-data": { "schema": { "$ref": "#/components/schemas/Body_expandImagesV3Async" } } }, "required": true }, "responses": { "202": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AsyncAcceptResponseV3" } } }, "description": "Accepted", "headers": { "Link": { "description": "Links to check the job status or cancel the job.", "schema": { "type": "string" } } } }, "400": { "content": { "application/json": { "examples": { "bad_request": { "value": { "error_code": "bad_request" } }, "empty_input_body": { "value": { "error_code": "empty_input_body" } } }, "schema": { "$ref": "#/components/schemas/ApiError" } } }, "description": "Bad Request" }, "403": { "content": { "application/json": { "examples": { "access_error": { "value": { "error_code": "access_error" } } }, "schema": { "$ref": "#/components/schemas/ApiError" } } }, "description": "Forbidden", "headers": { "x-access-error": { "description": "Indicates the reason access is not authorized.", "schema": { "type": "string", "enum": [ "quota_exhausted", "user_non_entitled", "user_profile_denied", "invalid_ims_scope" ] } } } }, "408": { "content": { "application/json": { "examples": { "timeout_error": { "value": { "error_code": "timeout_error" } } }, "schema": { "$ref": "#/components/schemas/ApiError" } } }, "description": "Request Timeout" }, "413": { "content": { "text/html": { "schema": { "type": "string" } } }, "description": "Request Entity Too Large" }, "415": { "content": { "application/json": { "examples": { "invalid_content_type": { "value": { "error_code": "invalid_content_type" } } }, "schema": { "$ref": "#/components/schemas/ApiError" } } }, "description": "Unsupported Media Type" }, "422": { "content": { "application/json": { "examples": { "validation_error": { "value": { "error_code": "validation_error", "validation_errors": [ { "ctx": { "enum_values": [ "photo", "art" ] }, "loc": [ "body", "contentClass" ], "msg": "value is not a valid enumeration member; permitted: 'photo', 'art'", "type": "type_error.enum" } ] } } }, "schema": { "$ref": "#/components/schemas/ApiError" } } }, "description": "Unprocessable Entity" }, "429": { "content": { "application/json": { "examples": { "rate_limited": { "value": { "error_code": "rate_limited" } } }, "schema": { "$ref": "#/components/schemas/ApiError" } } }, "description": "Too Many Requests", "headers": { "retry-after": { "description": "Indicates the date after which the client should retry the request.", "schema": { "type": "string" } }, "x-access-rate-limit-level": { "description": "Indicates the level at which the rate limit was applied. Possible values are:\n- org: The rate limit was applied to the organization\n- account: The rate limit was applied to the organization's tech account.", "schema": { "type": "string" } } } }, "500": { "content": { "application/json": { "examples": { "runtime_error": { "value": { "error_code": "runtime_error" } } }, "schema": { "$ref": "#/components/schemas/ApiError" } } }, "description": "Internal Server Error" } } } }, "/v3/images/fill-async": { "post": { "operationId": "fillImagesV3Async", "summary": "Fill image", "description": "Generates a fill in an area of an image based on a text prompt. A mask defines the area of the image to be filled.", "tags": ["Common Operations"], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/FillImageRequestV3" } }, "multipart/form-data": { "schema": { "$ref": "#/components/schemas/Body_fillImagesV3Async" } } }, "required": true }, "responses": { "202": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AsyncAcceptResponseV3" } } }, "description": "Accepted", "headers": { "Link": { "description": "Links to check the job status or cancel the job.", "schema": { "type": "string" } } } }, "400": { "content": { "application/json": { "examples": { "bad_request": { "value": { "error_code": "bad_request" } }, "empty_input_body": { "value": { "error_code": "empty_input_body" } } }, "schema": { "$ref": "#/components/schemas/ApiError" } } }, "description": "Bad Request" }, "403": { "content": { "application/json": { "examples": { "access_error": { "value": { "error_code": "access_error" } } }, "schema": { "$ref": "#/components/schemas/ApiError" } } }, "description": "Forbidden", "headers": { "x-access-error": { "description": "Indicates the reason access is not authorized.", "schema": { "type": "string", "enum": [ "quota_exhausted", "user_non_entitled", "user_profile_denied", "invalid_ims_scope" ] } } } }, "408": { "content": { "application/json": { "examples": { "timeout_error": { "value": { "error_code": "timeout_error" } } }, "schema": { "$ref": "#/components/schemas/ApiError" } } }, "description": "Request Timeout" }, "413": { "content": { "text/html": { "schema": { "type": "string" } } }, "description": "Request Entity Too Large" }, "415": { "content": { "application/json": { "examples": { "invalid_content_type": { "value": { "error_code": "invalid_content_type" } } }, "schema": { "$ref": "#/components/schemas/ApiError" } } }, "description": "Unsupported Media Type" }, "422": { "content": { "application/json": { "examples": { "validation_error": { "value": { "error_code": "validation_error", "validation_errors": [ { "ctx": { "enum_values": [ "photo", "art" ] }, "loc": [ "body", "contentClass" ], "msg": "value is not a valid enumeration member; permitted: 'photo', 'art'", "type": "type_error.enum" } ] } } }, "schema": { "$ref": "#/components/schemas/ApiError" } } }, "description": "Unprocessable Entity" }, "429": { "content": { "application/json": { "examples": { "rate_limited": { "value": { "error_code": "rate_limited" } } }, "schema": { "$ref": "#/components/schemas/ApiError" } } }, "description": "Too Many Requests", "headers": { "retry-after": { "description": "Indicates the date after which the client should retry the request.", "schema": { "type": "string" } }, "x-access-rate-limit-level": { "description": "Indicates the level at which the rate limit was applied. Possible values are:\n- org: The rate limit was applied to the organization\n- account: The rate limit was applied to the organization's tech account.", "schema": { "type": "string" } } } }, "500": { "content": { "application/json": { "examples": { "runtime_error": { "value": { "error_code": "runtime_error" } } }, "schema": { "$ref": "#/components/schemas/ApiError" } } }, "description": "Internal Server Error" } } } }, "/v3/images/generate-object-composite-async": { "post": { "operationId": "generateObjectCompositeV3Async", "summary": "Generate object composite", "description": "Combines your image and images generated by Firefly to create an image composite, or scene. The images that Firefly generates are based on a text prompt that you provide. You can upload an image with or without an image mask, such as a product photo, but for a successful result one of the following conditions must be true: ", "tags": ["Common Operations"], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GenerateObjectCompositeRequestV3" } }, "multipart/form-data": { "schema": { "$ref": "#/components/schemas/Body_generateObjectCompositeV3Async" } } }, "required": true }, "responses": { "202": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AsyncAcceptResponseV3" } } }, "description": "Accepted", "headers": { "Link": { "description": "Links to check the job status or cancel the job.", "schema": { "type": "string" } } } }, "400": { "content": { "application/json": { "examples": { "bad_request": { "value": { "error_code": "bad_request" } }, "empty_input_body": { "value": { "error_code": "empty_input_body" } } }, "schema": { "$ref": "#/components/schemas/ApiError" } } }, "description": "Bad Request" }, "403": { "content": { "application/json": { "examples": { "access_error": { "value": { "error_code": "access_error" } } }, "schema": { "$ref": "#/components/schemas/ApiError" } } }, "description": "Forbidden", "headers": { "x-access-error": { "description": "Indicates the reason access is not authorized.", "schema": { "type": "string", "enum": [ "quota_exhausted", "user_non_entitled", "user_profile_denied", "invalid_ims_scope" ] } } } }, "408": { "content": { "application/json": { "examples": { "timeout_error": { "value": { "error_code": "timeout_error" } } }, "schema": { "$ref": "#/components/schemas/ApiError" } } }, "description": "Request Timeout" }, "415": { "content": { "application/json": { "examples": { "invalid_content_type": { "value": { "error_code": "invalid_content_type" } } }, "schema": { "$ref": "#/components/schemas/ApiError" } } }, "description": "Unsupported Media Type" }, "422": { "content": { "application/json": { "examples": { "validation_error": { "value": { "error_code": "validation_error", "validation_errors": [ { "ctx": { "enum_values": [ "photo", "art" ] }, "loc": [ "body", "contentClass" ], "msg": "value is not a valid enumeration member; permitted: 'photo', 'art'", "type": "type_error.enum" } ] } } }, "schema": { "$ref": "#/components/schemas/ApiError" } } }, "description": "Unprocessable Entity" }, "429": { "content": { "application/json": { "examples": { "rate_limited": { "value": { "error_code": "rate_limited" } } }, "schema": { "$ref": "#/components/schemas/ApiError" } } }, "description": "Too Many Requests", "headers": { "retry-after": { "description": "Indicates the date after which the client should retry the request.", "schema": { "type": "string" } }, "x-access-rate-limit-level": { "description": "Indicates the level at which the rate limit was applied. Possible values are:\n- org: The rate limit was applied to the organization\n- account: The rate limit was applied to the organization's tech account.", "schema": { "type": "string" } } } }, "500": { "content": { "application/json": { "examples": { "runtime_error": { "value": { "error_code": "runtime_error" } } }, "schema": { "$ref": "#/components/schemas/ApiError" } } }, "description": "Internal Server Error" } } } }, "/v4/images/generate-object-composite-async": { "post": { "operationId": "generateObjectCompositeAsync", "summary": "Generate object composite v4", "description": "Create a composite image using either PixelPerfect or X-Stitch mode. Mode is selected with the `x-model-version` header (pixelperfect or x-stitch). PixelPerfect places the subject in the masked region and applies generative harmonization. X-Stitch composites the subject seamlessly into the background at the masked location.", "tags": ["Common Operations"], "parameters": [ { "name": "content-type", "in": "header", "required": true, "description": "Must be application/json for JSON request body.", "schema": { "type": "string", "enum": ["application/json"] } }, { "name": "x-model-version", "in": "header", "required": false, "description": "Model mode.", "schema": { "type": "string", "enum": ["pixelperfect", "x-stitch"], "default": "pixelperfect" } }, { "name": "x-request-id", "in": "header", "required": false, "description": "Client-provided request ID. Auto-generated if omitted.", "schema": { "type": "string" } } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/OCAPIRequest" } } } }, "responses": { "202": { "description": "Accepted", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/OCAPIResponse" } } } }, "400": { "description": "Bad Request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiErrorGeneric" } } } }, "403": { "description": "Forbidden", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiErrorGeneric" } } } }, "429": { "description": "Too Many Requests", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiErrorGeneric" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiErrorGeneric" } } } }, "503": { "description": "Service Unavailable", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiErrorGeneric" } } } } } } }, "/v3/videos/generate": { "post": { "operationId": "generateVideoV3", "summary": "Generate video", "description": "Generate a five second video using a text prompt.", "tags": ["Common Operations"], "parameters": [ { "name": "x-model-version", "in": "header", "description": "Specify the Firefly model version to use for the video generation.", "required": true, "schema": { "type": "string", "enum": [ "video1_standard" ] } } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GenerateVideoRequestV3" } } }, "required": true, "description": "The request body for the video generation." }, "responses": { "202": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AsyncAcceptResponseV3" } } }, "description": "Accepted", "headers": { "Link": { "description": "Links to check the job status or cancel the job.", "schema": { "type": "string" } } } }, "400": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } }, "description": "Bad Request" }, "403": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } }, "description": "Forbidden", "headers": { "x-access-error": { "description": "Indicates the reason access is not authorized.", "schema": { "type": "string", "enum": [ "quota_exhausted", "user_non_entitled", "user_profile_denied", "invalid_ims_scope" ] } } } }, "408": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } }, "description": "Request Timeout" }, "415": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } }, "description": "Unsupported Media Type" }, "422": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } }, "description": "Unprocessable Entity" }, "429": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } }, "description": "Too Many Requests", "headers": { "retry-after": { "description": "Indicates the date after which the client should retry the request.", "schema": { "type": "string" } }, "x-access-rate-limit-level": { "description": "Indicates the level at which the rate limit was applied. Possible values are:\n- org: The rate limit was applied to the organization\n- account: The rate limit was applied to the organization's tech account.", "schema": { "type": "string" } } } }, "500": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApiError" } } }, "description": "Internal Server Error" } } } }, "/v3/custom-models": { "get": { "summary": "Retrieve custom models", "description": "Retrieve the custom models for a user.", "operationId": "getCustomModels", "tags": ["Common Operations"], "parameters": [ { "name": "x-user-token", "in": "header", "description": "A user token referencing the user's individual account, obtained using their credentials. The user token must be preceded by `Bearer`.", "schema": { "type": "string" } }, { "name": "x-request-id", "in": "header", "description": "A unique request identifier defined by you. This is used by Adobe Support to trace the request in logs. This header is automatically generated by the server if not explicitly set.", "required": true, "schema": { "type": "string" } }, { "name": "sortBy", "in": "query", "description": "A sorting option for the response list. For a reverse sort, use `-` (e.g., `-modifiedDate`). Multi-vector sorting is not currently supported.", "schema": { "type": "string", "default": "modifiedDate", "enum": [ "assetName", "createdDate", "modifiedDate" ] } }, { "name": "start", "in": "query", "description": "The first result to include in a paginated response. Required if a `limit` is specified.", "schema": { "type": "string", "default": "0" } }, { "name": "limit", "in": "query", "description": "The number of custom models to return in a paginated response.", "schema": { "type": "string", "maximum": 50, "minimum": 1 } }, { "name": "publishedState", "in": "query", "description": "This filters custom models by published state.", "schema": { "type": "string", "default": "published", "enum": [ "all", "ready", "published", "unpublished", "queued", "training", "failed", "cancelled" ] } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CustomModelsFF3pInfo" } } } }, "400": { "description": "Bad Request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "403": { "description": "Forbidden", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "406": { "description": "Not Acceptable", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "503": { "description": "Service Unavailable", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } } }, "/v2/storage/image": { "post": { "summary": "Upload image", "description": "Upload source image or mask for image-to-image operations, such as fill, expand. This API returns an identifier that is used to refer to uploaded content. The uploaded assets will be valid for 7 days from the date you upload them.", "operationId": "storageImageV2", "tags": ["Common Operations"], "requestBody": { "content": { "image/jpeg": { "schema": { "type": "string", "format": "binary" } }, "image/png": { "schema": { "type": "string", "format": "binary" } }, "image/webp": { "schema": { "type": "string", "format": "binary" } } }, "description": "The PNG/JPEG/WEBP image to be stored (binary data). The maximum file size supported for uploading an image is 15MB.", "required": true }, "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/StorageImageResponse" } } } }, "400": { "description": "Bad Request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorBody" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorBody" } } } }, "403": { "description": "Forbidden", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorBody" } } } }, "429": { "description": "Too Many Requests", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorBody" } } } }, "451": { "description": "Unavailable for Legal Reasons", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorBody" } } } }, "500": { "description": "Internal Server Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorBody" } } } } } } }, "/v3/status/{jobId}": { "get": { "operationId": "jobResultV3", "summary": "Get job result", "description": "Get the result of the job.", "tags": [ "Manage jobs" ], "parameters": [ { "description": "Unique identifier for the submitted job.", "in": "path", "name": "jobId", "required": true, "schema": { "description": "Unique identifier for the submitted job.", "title": "Job URN ID", "type": "string" } } ], "responses": { "200": { "content": { "application/json": { "examples": { "cancel_pending": { "value": { "error_code": "some_error_code", "jobId": "ede28272-5726-4179-84f0-020250966e32", "message": "some_message", "status": "cancel_pending" } }, "cancelled": { "value": { "error_code": "some_error_code", "jobId": "ede28272-5726-4179-84f0-020250966e32", "message": "some_message", "status": "cancelled" } }, "failed": { "value": { "error_code": "some_error_code", "jobId": "ede28272-5726-4179-84f0-020250966e32", "message": "some_message", "status": "failed" } }, "running": { "value": { "jobId": "ede28272-5726-4179-84f0-020250966e32", "status": "running" } }, "succeeded": { "value": { "jobId": "ede28272-5726-4179-84f0-020250966e32", "result": { "outputs": [ { "image": { "url": "https://example.com" }, "seed": 1 } ], "size": { "height": 1024, "width": 1024 } }, "status": "succeeded" } }, "timeout": { "value": { "error_code": "some_error_code", "jobId": "ede28272-5726-4179-84f0-020250966e32", "message": "some_message", "status": "timeout" } } }, "schema": { "anyOf": [ { "$ref": "#/components/schemas/AsyncTaskResponseV3" }, { "$ref": "#/components/schemas/AsyncApiErrorV3" } ], "title": "Response JobResultV3" } } }, "description": "Success", "headers": { "Link": { "description": "Links to check the job status or cancel the job.", "schema": { "type": "string" } } } }, "404": { "content": { "application/json": { "example": { "error_code": "unknown_job_id", "message": "The job id is unknown." }, "schema": { "$ref": "#/components/schemas/AsyncApiErrorV3" } } }, "description": "Requested Resource Was Not Found" }, "422": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } }, "description": "Unprocessable Entity" } } } }, "/v3/cancel/{jobId}": { "put": { "operationId": "cancelJobV3", "summary": "Cancel job", "description": "Cancel the asynchronous job.", "tags": [ "Manage jobs" ], "parameters": [ { "description": "Unique identifier for the submitted job.", "in": "path", "name": "jobId", "required": true, "schema": { "description": "Unique identifier for the submitted job.", "title": "Job URN ID", "type": "string" } } ], "responses": { "200": { "content": { "application/json": { "schema": {} } }, "description": "Success" }, "404": { "content": { "application/json": { "examples": { "unknown_job_id": { "value": { "error_code": "unknown_job_id", "message": "The job id is unknown." } } }, "schema": { "$ref": "#/components/schemas/AsyncApiErrorV3" } } }, "description": "Not Found" }, "409": { "content": { "application/json": { "examples": { "job_already_canceled": { "value": { "error_code": "job_already_canceled", "message": "The job was already canceled." } }, "job_cancel_failed": { "value": { "error_code": "job_cancel_failed", "message": "The job failed to cancel." } }, "job_completed": { "value": { "error_code": "job_completed", "message": "The job was already completed." } } }, "schema": { "$ref": "#/components/schemas/AsyncApiErrorV3" } } }, "description": "Conflict" }, "410": { "content": { "application/json": { "examples": { "job_timeout": { "value": { "error_code": "job_timeout", "message": "The job timed out." } } }, "schema": { "$ref": "#/components/schemas/AsyncApiErrorV3" } } }, "description": "Gone" }, "422": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } }, "description": "Unprocessable Entity" } } } } }, "components": { "schemas": { "AlignmentHorizontal": { "description": "An enumeration.", "enum": [ "center", "left", "right" ], "title": "AlignmentHorizontal" }, "AlignmentVertical": { "description": "An enumeration.", "enum": [ "center", "top", "bottom" ], "title": "AlignmentVertical" }, "ApiError": { "description": "The error within the error response.", "properties": { "error_code": { "$ref": "#/components/schemas/ColligoErrorCodeAsyncV3" }, "message": { "title": "Message", "type": "string" }, "stack_trace": { "items": { "type": "string" }, "title": "Stack Trace", "type": "array" }, "validation_errors": { "items": { "$ref": "#/components/schemas/ValidationErrorMessage" }, "title": "Validation Errors", "type": "array" } }, "required": [ "error_code" ], "title": "ApiError", "type": "object" }, "ApiErrorGeneric": { "type": "object", "title": "ApiErrorGeneric", "description": "The error within the error response for non-400 failure responses.", "properties": { "error_code": { "type": "string", "description": "The error code." }, "message": { "title": "Message", "description": "A human-readable error message.", "type": "string" } } }, "AsyncAcceptResponseV3": { "properties": { "cancelUrl": { "description": "The URL to cancel the job.", "title": "Cancel URL", "type": "string" }, "jobId": { "description": "The ID of the job.", "title": "Job ID", "type": "string" }, "statusUrl": { "description": "The URL to check the status of the job.", "title": "Status URL", "type": "string" } }, "required": [ "jobId", "statusUrl", "cancelUrl" ], "title": "AsyncAcceptResponseV3", "type": "object" }, "AsyncApiErrorV3": { "description": "The error within the error response.", "properties": { "error_code": { "anyOf": [ { "type": "string" }, { "$ref": "#/components/schemas/ColligoErrorCodeAsyncV3" }, { "$ref": "#/components/schemas/ColliogAsyncStatusErrorCodeV3" }, { "$ref": "#/components/schemas/ColligoAsyncCancelErrorCodeV3" } ], "title": "Error Code" }, "jobId": { "title": "Job ID", "type": "string" }, "message": { "title": "Message", "type": "string" }, "status": { "title": "Status", "type": "string" }, "validation_errors": { "items": { "$ref": "#/components/schemas/ValidationErrorMessage" }, "title": "Validation Errors", "type": "array" } }, "title": "AsyncApiErrorV3", "type": "object" }, "AsyncTaskResponseV3": { "properties": { "jobId": { "description": "The ID of the async job.", "title": "Job ID", "type": "string" }, "progress": { "title": "Progress", "type": "number" }, "result": { "anyOf": [ { "$ref": "#/components/schemas/GenerateImagesResponseV3" }, { "$ref": "#/components/schemas/GenerateSimilarImagesResponseV3" }, { "$ref": "#/components/schemas/ExpandImageResponseV3" }, { "$ref": "#/components/schemas/FillImageResponseV3" }, { "$ref": "#/components/schemas/GenerateObjectCompositeResponseV3" } ], "description": "The result of the job, if the job has completed.", "title": "Result" }, "status": { "description": "The status of the job.", "title": "Status of the job", "type": "string", "enum": [ "pending", "running", "succeeded", "failed", "canceled" ] } }, "required": [ "status", "jobId" ], "title": "AsyncTaskResponseV3", "type": "object" }, "BaseInputImageV3": { "properties": { "source": { "$ref": "#/components/schemas/PublicBinaryInputV3", "description": "Source image that Firefly expands, fills or uses to generate similar images." } }, "required": [ "source" ], "title": "BaseInputImageV3", "type": "object" }, "BaseInputMaskV3": { "properties": { "source": { "$ref": "#/components/schemas/PublicBinaryInputV3", "description": "Original mask image." } }, "title": "BaseInputMaskV3", "type": "object" }, "Body_expandImagesV3Async": { "properties": { "files": { "items": { "format": "binary", "type": "string" }, "title": "Files", "type": "array" }, "request": { "$ref": "#/components/schemas/ExpandImageRequestV3" } }, "required": [ "request", "files" ], "title": "Body_expandImagesV3Async", "type": "object" }, "Body_fillImagesV3Async": { "properties": { "files": { "items": { "format": "binary", "type": "string" }, "title": "Files", "type": "array" }, "request": { "$ref": "#/components/schemas/FillImageRequestV3" } }, "required": [ "request", "files" ], "title": "Body_fillImagesV3Async", "type": "object" }, "Body_generateImagesV3Async": { "properties": { "files": { "items": { "format": "binary", "type": "string" }, "title": "Files", "type": "array" }, "request": { "$ref": "#/components/schemas/GenerateImagesRequestV3" } }, "required": [ "request", "files" ], "title": "Body_generateImagesV3Async", "type": "object" }, "Body_generateObjectCompositeV3Async": { "properties": { "files": { "items": { "format": "binary", "type": "string" }, "title": "Files", "type": "array" }, "request": { "$ref": "#/components/schemas/GenerateObjectCompositeRequestV3" } }, "required": [ "request", "files" ], "title": "Body_generateObjectCompositeV3Async", "type": "object" }, "Body_generateSimilarImagesV3Async": { "properties": { "files": { "items": { "format": "binary", "type": "string" }, "title": "Files", "type": "array" }, "request": { "$ref": "#/components/schemas/GenerateSimilarImagesRequestV3" } }, "required": [ "request", "files" ], "title": "Body_generateSimilarImagesV3Async", "type": "object" }, "ColligoAsyncCancelErrorCodeV3": { "description": "An enumeration.", "enum": [ "job_timeout", "job_completed", "unknown_job_id", "job_already_canceled", "job_cancel_failed" ], "title": "ColligoAsyncCancelErrorCodeV3", "type": "string" }, "ColligoErrorCodeAsyncV3": { "description": "An enumeration.", "enum": [ "validation_error", "runtime_error", "timeout_error", "rate_limited", "access_error", "invalid_content_type", "empty_input_body", "bad_request" ], "type": "string" }, "ColliogAsyncStatusErrorCodeV3": { "description": "An enumeration.", "enum": [ "unknown_job_id" ], "type": "string" }, "ContentClassV3": { "description": "An enumeration.", "enum": [ "photo", "art" ], "type": "string" }, "ExpandImageRequestV3": { "properties": { "image": { "$ref": "#/components/schemas/InputImageV3", "description": "The image to expand. Use a URL or an uploadID as the source for the image. Firefly only allows these listed domains for input URLs in the request: ." }, "mask": { "$ref": "#/components/schemas/InputMaskV3", "description": "Mask image which will be used to expand the given image." }, "numVariations": { "description": "Generate this number of variations. numVariations defaults to the number of seed images, or to 1 if you do not specify seeds.", "maximum": 4, "minimum": 1, "title": "The number of variations to generate", "type": "integer" }, "placement": { "$ref": "#/components/schemas/Placement", "description": "The position of the source image after Firefly resizes it. The value describes the horizontal and vertical placement and dimensions of the image in the output. Note you cannot use placement for source images when you also apply a mask image." }, "prompt": { "description": "An optional text prompt up to 1024 characters. The longer the prompt the better Firefly performs.", "maxLength": 1024, "minLength": 1, "title": "The prompt", "type": "string" }, "seeds": { "description": "Array of seed image IDs. These reference images help ensure consistent image generation across multiple API calls. For example, you can use the same seed to generate a similar image with different styles. If specified along with numVariations, the number of seeds must equal numVariations.", "items": { "type": "integer" }, "maxItems": 4, "minItems": 1, "title": "The seed image for each variation", "type": "array", "uniqueItems": true }, "size": { "allOf": [ { "$ref": "#/components/schemas/Size" } ], "default": { "height": 2048, "width": 2048 }, "description": "The desired width and height for the final expanded image in pixels. The maximum size for the output images is 3999px by 3999px.", "title": "The size" } }, "required": [ "image" ], "title": "Images expand payload", "type": "object" }, "ExpandImageResponseV3": { "properties": { "outputs": { "description": "Each image ID.", "items": { "$ref": "#/components/schemas/OutputImageV3" }, "minItems": 1, "title": "The list of images", "type": "array" }, "size": { "$ref": "#/components/schemas/Size", "description": "When you provide size as input, this value is the same." } }, "required": [ "size", "outputs" ], "title": "Images expand response", "type": "object" }, "FillImageRequestV3": { "properties": { "image": { "$ref": "#/components/schemas/InputImageV3", "description": "The image to expand. Use a URL or an uploadID as the source for the image. Firefly only allows these listed domains for input URLs in the request: ." }, "mask": { "$ref": "#/components/schemas/InputMaskV3", "description": "Required. Selected areas of a background image that Firefly uses to fill the source image." }, "negativePrompt": { "description": "An optional text prompt up to 1024 characters. Avoid these characteristics in the generated image.", "maxLength": 1024, "title": "Avoid prompt", "type": "string" }, "numVariations": { "description": "Generate this number of variations. numVariations defaults to the number of seed images, or to 1 if you do not specify seeds.", "maximum": 4, "minimum": 1, "title": "The number of variations", "type": "integer" }, "prompt": { "description": "An optional text prompt up to 1024 characters. The longer the prompt the better Firefly performs.", "maxLength": 1024, "minLength": 1, "title": "The prompt", "type": "string" }, "promptBiasingLocaleCode": { "description": "A hyphen-separated string combining the ISO 639-1 language code and the ISO 3166-1 region, such as en-US. When a locale is set, the prompt will be biased to generate more relevant content for that region. The locale will be auto-detected if not specified based on your profile and the accepted language header.", "title": "The locale used to generate an image", "type": "string" }, "seeds": { "description": "Array of seed image IDs. These reference images help ensure consistent image generation across multiple API calls. For example, you can use the same seed to generate a similar image with different styles. If specified along with numVariations, the number of seeds must equal numVariations.", "items": { "type": "integer" }, "maxItems": 4, "minItems": 1, "title": "The seed of each variation", "type": "array", "uniqueItems": true }, "size": { "allOf": [ { "$ref": "#/components/schemas/Size" } ], "default": { "height": 2048, "width": 2048 }, "description": "The desired width and height for the final expanded image in pixels. The supported sizes for the output images are: .", "title": "The size" } }, "required": [ "image", "mask" ], "title": "Fill images payload", "type": "object" }, "FillImageResponseV3": { "properties": { "outputs": { "description": "Each image ID.", "items": { "$ref": "#/components/schemas/OutputImageV3" }, "minItems": 1, "title": "The list of images", "type": "array" }, "size": { "$ref": "#/components/schemas/Size", "description": "When you provide size as input, this value is the same." } }, "required": [ "size", "outputs" ], "title": "Fill images response.", "type": "object" }, "GenerateImagesRequestV3": { "properties": { "contentClass": { "$ref": "#/components/schemas/ContentClassV3", "description": "Directs the style of a generated image to be photographic or like fine art." }, "customModelId": { "type": "string", "description": "Include the specific custom model ID when a custom model type is designated in the `x-model-version` header parameter." }, "negativePrompt": { "description": "A negative prompt of things Firefly will try to avoid generating in the image.", "maxLength": 1024, "type": "string" }, "numVariations": { "description": "The number of variations to generate. numVariations defaults to the number of seed images, or to 1 if you do not specify `seeds`.", "maximum": 4, "minimum": 1, "type": "integer" }, "prompt": { "description": "A text prompt to support the generation of an image. The longer the prompt the better Firefly performs.", "maxLength": 1024, "minLength": 1, "type": "string" }, "promptBiasingLocaleCode": { "description": "A hyphen-separated string combining the ISO 639-1 language code and the ISO 3166-1 region (like en-US). When a locale is set, the prompt will be biased to generate more relevant content for that region. If not specified, the locale will be auto-detected based on your profile and the accepted language header.", "type": "string" }, "seeds": { "description": "An array of seed image IDs. These reference images help ensure consistent image generation across multiple API calls. For example, use the same seed to generate a similar image in different styles. If specified along with numVariations, the number of seeds provided must equal numVariations.", "items": { "type": "integer" }, "maxItems": 4, "minItems": 1, "type": "array", "uniqueItems": true }, "size": { "allOf": [ { "$ref": "#/components/schemas/Size" } ], "default": { "height": 2048, "width": 2048 }, "description": "The desired width and height for the final image, in pixels. Supported sizes for the output images with `image3` are: Supported sizes for the output images with `image4` are: ." }, "structure": { "description": "An object with the reference image details for structure.", "$ref": "#/components/schemas/StructureReferenceV3" }, "style": { "description": "An object with the reference image details for style.", "$ref": "#/components/schemas/StylesV3" }, "upsamplerType": { "description": "Only supported with the model version `image4_custom`. The `default` setting upscales generated images to 2k. The `low_creativity` setting refines the image generation by removing distortions, smoothing textures, and sometimes adding details (like freckles to faces in close-up). This setting is recommended for generating images with human subjects.", "enum": [ "default", "low_creativity" ], "default": "default", "type": "string" }, "visualIntensity": { "description": "Adjust the overall intensity of your photo's characteristics, such as contrast, shadow, and hue. This is not supported with the model version `image4_custom`.", "maximum": 10, "minimum": 2, "type": "integer" } }, "required": [ "prompt" ], "title": "Generating images from prompt", "type": "object" }, "GenerateImagesResponseV3": { "properties": { "contentClass": { "$ref": "#/components/schemas/ContentClassV3", "description": "Generate an image to being more photographic or more like art. Either photo or art." }, "outputs": { "description": "Each image ID.", "items": { "$ref": "#/components/schemas/OutputImageV3" }, "minItems": 1, "title": "List of images", "type": "array" }, "promptHasBlockedArtists": { "description": "The generated image does not comply with its full prompt if the prompt names artists that are blocked.", "title": "The prompt had artists that were blocked", "type": "boolean" }, "promptHasDeniedWords": { "description": "The generated image does not comply with its full prompt if the prompt contains blocked words or descriptions.", "title": "The prompt had denied words", "type": "boolean" }, "size": { "$ref": "#/components/schemas/Size" } }, "required": [ "size", "outputs" ], "title": "Generating images from prompt", "type": "object" }, "GenerateObjectCompositeRequestV3": { "properties": { "contentClass": { "$ref": "#/components/schemas/ContentClassV3" }, "image": { "$ref": "#/components/schemas/InputImageV3", "description": "The image to expand. Use a URL or an uploadID as the source for the image. Firefly only allows these listed domains for input URLs in the request: ." }, "mask": { "$ref": "#/components/schemas/BaseInputMaskV3", "description": "Selected areas of a background image that Firefly uses to fill the source image." }, "numVariations": { "description": "Generate this number of variations. Defaults to the number of seed images, or to 1 if you do not specify seeds.", "maximum": 4, "minimum": 1, "title": "The number of variations to generate", "type": "integer" }, "placement": { "$ref": "#/components/schemas/Placement", "description": "The position of the source image after Firefly adjusts it. The value describes the horizontal and vertical placement and dimensions of the image in the output. Note you cannot use placement for source images when you also apply a mask image." }, "prompt": { "description": "A text prompt up to 1024 characters. The longer the prompt the better Firefly performs.", "maxLength": 1024, "minLength": 1, "title": "The prompt", "type": "string" }, "seeds": { "description": "Array of seed image IDs. These reference images help ensure consistent image generation across multiple API calls.\n\nIf specified along with numVariations, the number of seeds must equal numVariations.", "items": { "type": "integer" }, "maxItems": 4, "minItems": 1, "title": "The seed image for each variation", "type": "array", "uniqueItems": true }, "size": { "allOf": [ { "$ref": "#/components/schemas/Size" } ], "default": { "height": 2048, "width": 2048 }, "description": "The desired width and height for the final image in pixels. The supported sizes for the output images are: .", "title": "The size" }, "style": { "$ref": "#/components/schemas/StylesV3" } }, "required": [ "image", "prompt" ], "title": "Generate object composite from prompt request", "type": "object" }, "GenerateObjectCompositeResponseV3": { "properties": { "contentClass": { "$ref": "#/components/schemas/ContentClassV3" }, "outputs": { "description": "Each image ID.", "items": { "$ref": "#/components/schemas/OutputImageV3" }, "minItems": 1, "title": "The list of images", "type": "array" }, "size": { "$ref": "#/components/schemas/Size", "description": "When you provide size as input, this value is the same." } }, "required": [ "size", "outputs" ], "title": "Generate object composite from prompt response", "type": "object" }, "Background": { "type": "object", "title": "Background", "description": "Defines the destination scene and placement area for object compositing. Requires both a background image and a fill area mask.", "required": ["image", "fillAreaMask"], "properties": { "image": { "$ref": "#/components/schemas/OCImage", "description": "The destination scene where the object will be placed." }, "fillAreaMask": { "$ref": "#/components/schemas/OCImage", "description": "Mask indicating the area of the destination scene where the object will be composited. White painted areas define the regions where AI performs the composite." } } }, "OCAPIRequest": { "type": "object", "title": "OCAPIRequest", "description": "Request structure for the Generate Object Composite endpoint. Supports PixelPerfect and X-Stitch modes via the x-model-version header.", "required": ["background"], "properties": { "background": { "$ref": "#/components/schemas/Background", "description": "The background scene and placement mask for object compositing." }, "object": { "$ref": "#/components/schemas/OCInput" }, "output": { "$ref": "#/components/schemas/OCOutput" }, "seeds": { "description": "Array of seed image IDs. These reference images help ensure consistent image generation across multiple API calls. If specified alongside `numVariations`, the number of seeds must equal `numVariations`.", "type": "array", "items": { "type": "integer" }, "minItems": 1, "maxItems": 3, "default": [333] }, "numVariations": { "type": "integer", "description": "The number of variations to generate. Defaults to the number of seed images, or to 1 if you do not specify `seeds`.", "default": 1, "minimum": 1, "maximum": 3 }, "preserveBackground": { "type": "boolean", "description": "For X-Stitch operations only. When `true`, preserves the original background details within the masked area during compositing.", "default": false }, "blend": { "type": "number", "format": "float", "minimum": 0, "maximum": 1, "default": 0.5, "description": "For PixelPerfect operations only. Controls the blend between harmonized and original object appearance (0.0 = fully harmonized, 1.0 = original preserved)." }, "shadowIntensity": { "type": "number", "format": "float", "minimum": 0, "maximum": 1, "default": 1, "description": "For X-Stitch operations only. Controls how strongly shadows are applied to the composited result. Lower values reduce shadow intensity." }, "harmonization": { "type": "number", "format": "float", "minimum": 0, "maximum": 1, "default": 0.6, "description": "Controls how much the object's colors and lighting are adjusted to match the background scene." } } }, "OCAPIResponse": { "type": "object", "title": "OCAPIResponse", "required": ["jobId", "status"], "properties": { "jobId": { "type": "string", "title": "Job ID" }, "status": { "type": "string", "title": "Status", "description": "The status of the submitted job." }, "statusUrl": { "type": "string", "title": "Status URL" }, "cancelUrl": { "type": "string", "title": "Cancel URL" } } }, "OCImage": { "type": "object", "title": "OCImage", "required": ["source"], "properties": { "source": { "$ref": "#/components/schemas/OCPublicBinaryInput", "description": "A single source reference, either `url` or `uploadId`, must be provided in the request." } } }, "OCInput": { "type": "object", "title": "OCInput", "description": "Defines an input image with optional mask for object compositing operations.", "required": ["image"], "properties": { "image": { "$ref": "#/components/schemas/OCImage", "description": "Presigned URL or uploadId of the image to be processed." }, "mask": { "$ref": "#/components/schemas/OCImage", "description": "Pre-signed URL or uploadId of the mask. x-stitch only; not used for PixelPerfect." } } }, "OCOutput": { "type": "object", "title": "OCOutput", "properties": { "mediaType": { "type": "string", "title": "Output Media Type", "description": "The MIME type for the output image format.", "enum": ["image/png", "image/jpeg", "image/webp", "image/jxl"], "default": "image/png" } } }, "OCPublicBinaryInput": { "type": "object", "title": "OCPublicBinaryInput", "description": "A single source reference, either `url` or `uploadId`, must be provided in the request.", "properties": { "uploadId": { "description": "A pre-signed URL pointing to the object." }, "url": { "description": "Pre-signed URL valid for a limited time." } } }, "GenerateSimilarImagesRequestV3": { "properties": { "image": { "$ref": "#/components/schemas/BaseInputImageV3", "description": "Firefly will create similar variations. Use a URL or an uploadID as the source for the image. Firefly only allows these listed domains: ." }, "numVariations": { "description": "Generate this number of variations. numVariations defaults to the number of seed images, or to 1 if you do not specify `seeds`.", "maximum": 4, "minimum": 1, "title": "The number of variations", "type": "integer" }, "seeds": { "description": "Array of seed image IDs. These reference images help ensure consistent image generation across multiple API calls. If specified along with numVariations, the number of seeds must equal numVariations.", "items": { "type": "integer" }, "maxItems": 4, "minItems": 1, "title": "The seed image for each variation", "type": "array", "uniqueItems": true }, "size": { "allOf": [ { "$ref": "#/components/schemas/Size" } ], "default": { "height": 2048, "width": 2048 }, "description": "The desired width and height for the final image in pixels. The supported sizes for the output images are: .", "title": "The size" } }, "required": [ "image" ], "title": "Generating similar images from a reference image", "type": "object" }, "GenerateSimilarImagesResponseV3": { "properties": { "outputs": { "description": "Each image ID.", "items": { "$ref": "#/components/schemas/OutputImageV3" }, "minItems": 1, "title": "The list of images", "type": "array" }, "size": { "$ref": "#/components/schemas/Size", "description": "When you provide size as input, this value is the same." } }, "required": [ "size", "outputs" ], "title": "Generating similar images response", "type": "object" }, "HTTPValidationError": { "properties": { "detail": { "items": { "$ref": "#/components/schemas/ValidationError" }, "title": "Detail", "type": "array" } }, "title": "HTTPValidationError", "type": "object" }, "InputImageV3": { "properties": { "mask": { "allOf": [ { "$ref": "#/components/schemas/PublicBinaryInputV3" } ], "deprecated": true, "description": "This is a deprecated property. Use mask instead.", "title": "Deprecated mask image" }, "source": { "$ref": "#/components/schemas/PublicBinaryInputV3", "description": "Source image that Firefly expands, fills, or uses to generate similar images." } }, "required": [ "source" ], "title": "InputImageV3", "type": "object" }, "InputMaskV3": { "properties": { "invert": { "description": "Invert mask is an optional boolen property, use true if you want take an image mask, invert it and apply it.", "title": "Invert mask", "type": "boolean" }, "source": { "$ref": "#/components/schemas/PublicBinaryInputV3" } }, "required": [ "source" ], "title": "InputMaskV3", "type": "object" }, "OutputImageV3": { "properties": { "image": { "$ref": "#/components/schemas/PublicBinaryOutputV3" }, "seed": { "title": "Seed", "type": "integer" } }, "required": [ "seed", "image" ], "title": "OutputImageV3", "type": "object" }, "Placement": { "properties": { "alignment": { "allOf": [ { "$ref": "#/components/schemas/PlacementAlignment" } ], "description": "Specify horizontal and vertical alignment. Possible values for horizontal=(center|left|right) and for vertical=(center|top|bottom).", "title": "Alignment" }, "inset": { "allOf": [ { "$ref": "#/components/schemas/PlacementInset" } ], "description": "Margin values in target size.", "title": "Margin values in target size" } }, "title": "Placement", "type": "object" }, "PlacementAlignment": { "properties": { "horizontal": { "allOf": [ { "$ref": "#/components/schemas/AlignmentHorizontal" } ], "default": "center" }, "vertical": { "allOf": [ { "$ref": "#/components/schemas/AlignmentVertical" } ], "default": "center" } }, "title": "PlacementAlignment", "type": "object" }, "PlacementInset": { "properties": { "bottom": { "description": "The space between bottom edge of the result image and bottom edge of the placed object image.", "title": "Bottom Inset", "type": "integer" }, "left": { "description": "The space between left edge of the result image and left edge of the placed object image.", "title": "Left Inset", "type": "integer" }, "right": { "description": "The space between right edge of the result image and right edge of the placed object image.", "title": "Right Inset", "type": "integer" }, "top": { "description": "The space between top edge of the result image and top edge of the placed object image.", "title": "Top Inset", "type": "integer" } }, "title": "PlacementInset", "type": "object" }, "PublicBinaryInputV3": { "properties": { "uploadId": { "description": "The `uploadId` from the storage API response.", "format": "uuid4", "title": "The upload ID", "type": "string" }, "url": { "description": "The pre-signed URL of an uploaded file. Use a URL or an `uploadID` as the source for the image. Firefly only allows these listed domains in the request: .", "format": "uri", "maxLength": 2083, "minLength": 1, "title": "The pre-signed URL", "type": "string" } }, "title": "PublicBinaryInputV3", "type": "object" }, "PublicBinaryOutputV3": { "properties": { "url": { "description": "This URL expires in one hour.", "format": "uri", "maxLength": 2083, "minLength": 1, "title": "The pre-signed URL", "type": "string" } }, "title": "PublicBinaryOutputV3", "type": "object" }, "Size": { "properties": { "height": { "maximum": 4096, "minimum": 1, "type": "integer" }, "width": { "maximum": 4096, "minimum": 1, "type": "integer" } }, "required": [ "width", "height" ], "type": "object" }, "StructureImageReferenceV3": { "properties": { "source": { "$ref": "#/components/schemas/PublicBinaryInputV3" } }, "type": "object" }, "StructureReferenceV3": { "properties": { "imageReference": { "$ref": "#/components/schemas/StructureImageReferenceV3" }, "strength": { "description": "Control how strictly Firefly adheres to the reference image when it generates the image variations. 0 means no adherence. 100 means full adherence.", "maximum": 100, "minimum": 0, "title": "Adherence Threshold", "type": "integer" } }, "type": "object" }, "StylesImageReferenceV3": { "properties": { "source": { "$ref": "#/components/schemas/PublicBinaryInputV3" } }, "type": "object" }, "StylesV3": { "properties": { "imageReference": { "$ref": "#/components/schemas/StylesImageReferenceV3" }, "presets": { "description": "The style presets. Specify an ID for a style of image to generate.", "items": { "type": "string" }, "type": "array", "uniqueItems": true }, "strength": { "description": "How strictly Firefly should adhere to the style you provide. 0 means no adherence. 100 means full adherence.", "exclusiveMinimum": 0, "maximum": 100, "type": "integer" } }, "type": "object" }, "ValidationError": { "properties": { "loc": { "items": { "anyOf": [ { "type": "string" }, { "type": "integer" } ] }, "title": "Location", "type": "array" }, "msg": { "title": "Message", "type": "string" }, "type": { "title": "Error Type", "type": "string" } }, "required": [ "loc", "msg", "type" ], "title": "ValidationError", "type": "object" }, "ValidationErrorMessage": { "properties": { "ctx": { "title": "Ctx", "type": "object" }, "loc": { "items": { "anyOf": [ { "type": "integer" }, { "type": "string" } ] }, "title": "Loc", "type": "array" }, "msg": { "title": "Msg", "type": "string" }, "type": { "title": "Type", "type": "string" } }, "required": [ "loc", "msg", "type" ], "title": "ValidationErrorMessage", "type": "object" }, "GenerateVideoRequestV3": { "properties": { "bitRateFactor": { "description": "The constant rate factor for encoding video. 0 indicates a lossless generation, with the highest quality and largest file size. 63 indicates the worst quality generation with the smallest file size. The suggested value range is 17-23.", "maximum": 63, "minimum": 0, "default": 18, "type": "integer" }, "image": { "description": "The details of the image used as a keyframe for the generated video. Provided images are used as a first frame or final frame to guide the video generation.", "$ref": "#/components/schemas/InputImageVideoV3" }, "prompt": { "description": "The prompt used to generate the video. The longer the prompt, the better.", "type": "string", "example": "A lone figure stands in the middle of a vast desert, looking up at the sky, with a sense of awe and wonder." }, "seeds": { "description": "The seed reference value. Currently only 1 seed is supported.", "items": { "type": "integer" }, "maxItems": 1, "minItems": 1, "type": "array", "example": [ 1842533538 ] }, "sizes": { "description": "The dimensions of the generated video.", "items": { "$ref": "#/components/schemas/ClinetoSize" }, "type": "array" }, "videoSettings": { "description": "The camera and shot control settings.", "$ref": "#/components/schemas/VideoSettingsV3" } }, "title": "Generating video from prompt", "type": "object" }, "ClinetoSize": { "properties": { "height": { "maximum": 8192, "minimum": 1, "description": "The height of the output video.", "type": "integer", "example": 720 }, "width": { "maximum": 8192, "minimum": 1, "description": "The width of the output video.", "type": "integer", "example": 720 } }, "required": [ "width", "height" ], "title": "ClinetoSize", "type": "object" }, "InputImageVideoV3": { "properties": { "conditions": { "default": [], "description": "The details about the keyframe images used for the video generation.", "items": { "$ref": "#/components/schemas/ImageConditionV3" }, "type": "array" } }, "title": "InputImageVideoV3", "type": "object" }, "ImageConditionV3": { "properties": { "placement": { "$ref": "#/components/schemas/PlacementStart", "description": "Details about the timeline placement of the image." }, "source": { "$ref": "#/components/schemas/PublicBinaryInputV3", "description": "The source details of the image." } }, "required": [ "source", "placement" ], "title": "ImageConditionV3", "type": "object" }, "PlacementStart": { "properties": { "position": { "description": "The position of the image on the timeline for the generated video, 0 being the first frame and 1 being the last frame.", "maximum": 1, "minimum": 0, "type": "number" } }, "required": [ "position" ], "title": "PlacementStart", "type": "object" }, "VideoSettingsV3": { "properties": { "cameraMotion": { "$ref": "#/components/schemas/CameraMotion", "description": "The camera motion control." }, "promptStyle": { "$ref": "#/components/schemas/VideoPromptStyle", "description": "The style of the generated video." }, "shotAngle": { "$ref": "#/components/schemas/ShotAngle", "description": "The shot angle control." }, "shotSize": { "$ref": "#/components/schemas/ShotSize", "description": "The shot size control." } }, "type": "object" }, "CameraMotion": { "enum": [ "camera pan left", "camera pan right", "camera zoom in", "camera zoom out", "camera tilt up", "camera tilt down", "camera locked down", "camera handheld" ], "title": "CameraMotion", "type": "string" }, "VideoPromptStyle": { "enum": [ "anime", "3d", "fantasy", "cinematic", "claymation", "line art", "stop motion", "2d", "vector art", "black and white" ], "title": "VideoPromptStyle", "type": "string" }, "ShotAngle": { "enum": [ "aerial shot", "eye_level shot", "high angle shot", "low angle shot", "top-down shot" ], "title": "ShotAngle", "type": "string" }, "ShotSize": { "enum": [ "close-up shot", "extreme close-up", "medium shot", "long shot", "extreme long shot" ], "title": "ShotSize", "type": "string" }, "VideoResult": { "properties": { "url": { "type": "string", "description": "The pre-signed URL for the generated video file." } }, "required": [ "url" ], "title": "VideoResult", "type": "object" }, "VideoOutput": { "properties": { "seed": { "type": "integer", "description": "The seed value used for generating this video output." }, "video": { "$ref": "#/components/schemas/VideoResult" } }, "required": [ "seed", "video" ], "title": "VideoOutput", "type": "object" }, "AsyncResult": { "properties": { "size": { "$ref": "#/components/schemas/ClinetoSize" }, "outputs": { "type": "array", "items": { "$ref": "#/components/schemas/VideoOutput" }, "description": "Array of generated video outputs." } }, "required": [ "size", "outputs" ], "title": "AsyncResult", "type": "object" }, "AsyncResponseV3": { "properties": { "cancelUrl": { "title": "Cancel URL", "description": "A URL to cancel the job.", "type": "string" }, "jobId": { "title": "Job ID", "description": "The ID for the asynchronous job.", "type": "string" }, "progress": { "description": "The progress of the running job. The value is the percentage of the job that has been completed.", "type": "integer" }, "result": { "description": "The result of the completed job.", "$ref": "#/components/schemas/AsyncResult" }, "status": { "title": "Status", "description": "The status of the job.", "type": "string" }, "statusUrl": { "title": "Status URL", "description": "A URL to show the status of the current job.", "type": "string" } }, "required": [ "jobId" ], "title": "AsyncResponseV3", "type": "object" }, "ErrorResponse": { "type": "object", "properties": { "reason": { "type": "string", "description": "The type of error that occurred." }, "message": { "type": "string", "description": "A message describing the error." } }, "title": "ErrorResponse" }, "CustomModelsFF3pInfo": { "type": "object", "properties": { "custom_models": { "type": "array", "description": "List of custom models.", "items": { "$ref": "#/components/schemas/CustomModelFF3pInfo" } }, "_links": { "$ref": "#/components/schemas/Links" }, "total_count": { "type": "integer", "description": "Total number of results for the query.", "format": "int32" } }, "title": "CustomModelsFF3pInfo" }, "CustomModelFF3pInfo": { "type": "object", "properties": { "version": { "type": "string", "description": "Custom Model version." }, "assetName": { "type": "string", "description": "Custom Model name." }, "size": { "type": "integer", "description": "The storage amount used.", "format": "int64" }, "etag": { "type": "string", "description": "An identifier for the specific version of the asset." }, "trainingMode": { "type": "string", "enum": [ "subject", "style" ], "description": "The training mode of the model. When this is 'subject', the 'conceptId' must be mentioned in the prompt." }, "assetId": { "type": "string", "description": "A unique identifier for the asset." }, "mediaType": { "type": "string", "description": "The media type specific to the asset." }, "createdDate": { "type": "string", "format": "date-time" }, "modifiedDate": { "type": "string", "format": "date-time" }, "publishedState": { "type": "string", "enum": [ "never", "published", "unpublished" ], "description": "Status for the asset. The 'unpublished' value applies when an asset is published and then subsequently revoked." }, "baseModel": { "$ref": "#/components/schemas/BaseModel", "description": "The underlying GenAI model used to train the Custom Model." }, "samplePrompt": { "type": "string", "description": "Example string provided by the custom model's trainer." }, "displayName": { "type": "string", "description": "The asset name provided by the user, mapped from the name of the training set library." }, "conceptId": { "type": "string", "description": "When 'trainingMode' is 'subject', this string specifies the subject for the prompt." } }, "description": "Custom Model info.", "title": "CustomModelFF3pInfo" }, "BaseModel": { "type": "object", "properties": { "name": { "type": "string", "description": "The name of the base model." }, "version": { "type": "string", "description": "The version of the base model." } }, "title": "BaseModel" }, "Links": { "type": "object", "properties": { "page": { "$ref": "#/components/schemas/Link" }, "next": { "$ref": "#/components/schemas/Link" } }, "description": "Collection of hypermedia links for pagination, navigation, etc.", "title": "Links" }, "Link": { "type": "object", "properties": { "href": { "type": "string", "description": "Fully qualified URI or relative path for the link." }, "rel": { "type": "string", "description": "Describes the relationship or function of the link (e.g. `next`, `page`, `self`)." }, "templated": { "type": "boolean", "description": "Indicates whether or not the `href` supports URI template parameters." } }, "description": "Standard representation of a hypermedia link.", "title": "Link" }, "PageSpec": { "type": "object", "properties": { "orderBy": { "type": "string", "description": "List order-by." }, "start": { "type": "string", "description": "List start position." }, "next": { "type": "string", "description": "List next position." }, "count": { "type": "integer", "description": "List page size.", "format": "int32" }, "type": { "type": "string", "description": "List page type." }, "property": { "type": "string", "description": "List page property." } }, "description": "List Page.", "title": "PageSpec" }, "StorageImageResponse": { "description": "Storage response.", "type": "object", "properties": { "images": { "type": "array", "description": "Array of objects containing asset ID.", "items": { "$ref": "#/components/schemas/StorageImage" } } }, "title": "StorageImageResponse" }, "StorageImage": { "type": "object", "description": "Source image.", "required": [ "id" ], "properties": { "id": { "type": "string", "description": "ID associated with the asset. The id will be valid for 7 days from the date of creation." } }, "title": "StorageImage" }, "ErrorBody": { "type": "object", "properties": { "message": { "type": "string", "description": "Error message." }, "error_code": { "type": "string", "description": "Associated error code." } }, "title": "ErrorBody" } }, "securitySchemes": { "AccessToken": { "bearerFormat": "JWT", "scheme": "bearer", "type": "http" }, "X-Api-Key": { "type": "apiKey", "name": "x-api-key", "in": "header" } } } }