> ## Documentation Index
> Fetch the complete documentation index at: https://bifrost-dev.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Create async image edit

> Submits an image edit request for asynchronous execution. Returns a job ID immediately
with HTTP 202. Poll the corresponding GET endpoint with the job ID to retrieve the result.
Streaming is not supported for async requests.




## OpenAPI

````yaml /openapi/openapi.json post /v1/async/images/edits
openapi: 3.1.0
info:
  title: Bifrost API
  description: >
    Bifrost HTTP Transport API for AI model inference and gateway management.


    This API provides a unified interface for interacting with multiple AI
    providers

    including OpenAI, Anthropic, Bedrock, Gemini, and more through a single API,

    along with comprehensive management APIs for configuring and monitoring the
    gateway.


    ## API Structure


    ### Unified Inference API (`/v1/*`)

    The primary API using Bifrost's unified format. Model parameters use the
    format

    `provider/model` (e.g., `openai/gpt-4`, `anthropic/claude-3-opus`).


    ### Async Inference API (`/v1/async/*`)

    Submit inference requests for asynchronous execution. Returns a job ID
    immediately

    and allows polling for results. Supports all inference types except batches,
    files,

    and containers.


    ### Provider Integration APIs

    Native provider-format APIs for drop-in compatibility:

    - `/openai/*` - OpenAI-compatible API

    - `/anthropic/*` - Anthropic-compatible API

    - `/genai/*` - Google GenAI (Gemini) compatible API

    - `/bedrock/*` - AWS Bedrock compatible API

    - `/cohere/*` - Cohere compatible API


    ### Framework Integration APIs

    Multi-provider proxy endpoints for AI frameworks:

    - `/litellm/*` - LiteLLM proxy with all provider formats

    - `/langchain/*` - LangChain compatible endpoints

    - `/pydanticai/*` - PydanticAI compatible endpoints


    ### Management APIs (`/api/*`)

    APIs for managing and monitoring the Bifrost gateway:

    - `/api/config` - Configuration management

    - `/api/providers` - Provider and API key management

    - `/api/plugins` - Plugin management

    - `/api/governance/*` - Virtual keys, teams, customers, budgets, rate
    limits, routing rules, and pricing overrides

    - `/api/logs` - Log search and analytics

    - `/api/mcp/*` - MCP (Model Context Protocol) client management

    - `/api/session/*` - Authentication and session management

    - `/api/cache/*` - Cache management

    - `/health` - Health check endpoint


    ## Fallbacks

    Requests can include fallback models that will be tried if the primary model
    fails.
  version: 1.0.0
  contact:
    name: Contact Us
    url: https://getmaxim.ai/bifrost
  license:
    name: Apache 2.0
    url: https://opensource.org/licenses/Apache-2.0
servers:
  - url: '{baseUrl}'
    description: Your Bifrost instance
    variables:
      baseUrl:
        default: http://localhost:8080
        description: Base URL of your Bifrost instance (e.g. https://bifrost.mycompany.com)
security:
  - BearerAuth: []
  - BasicAuth: []
  - ApiKeyAuth: []
tags:
  - name: Models
    description: Model listing and information
  - name: Chat Completions
    description: Chat-based text generation
  - name: Text Completions
    description: Text completion generation
  - name: Responses
    description: OpenAI Responses API compatible endpoints
  - name: OCR
    description: Optical character recognition for documents and images
  - name: Rerank
    description: Document reranking by relevance to a query
  - name: Embeddings
    description: Text embedding generation
  - name: Images
    description: Image generations, editing, and variations
  - name: Videos
    description: Video generation and management
  - name: Audio
    description: Speech synthesis and transcription
  - name: Count Tokens
    description: Token counting utilities
  - name: Batch
    description: Batch processing operations
  - name: Files
    description: File management operations
  - name: Containers
    description: Container management operations
  - name: Async Jobs
    description: Asynchronous job submission and retrieval endpoints
  - name: Realtime
    description: Realtime WebSocket and WebRTC endpoints
  - name: OpenAI Integration
    description: OpenAI-compatible API endpoints (/openai/*)
  - name: Azure Integration
    description: Azure OpenAI integration endpoints
  - name: Anthropic Integration
    description: Anthropic-compatible API endpoints (/anthropic/*)
  - name: GenAI Integration
    description: Google GenAI (Gemini) compatible API endpoints (/genai/*)
  - name: Bedrock Integration
    description: AWS Bedrock compatible API endpoints (/bedrock/*)
  - name: Cohere Integration
    description: Cohere compatible API endpoints (/cohere/*)
  - name: LiteLLM Integration
    description: LiteLLM proxy endpoints with multi-provider support (/litellm/*)
  - name: LangChain Integration
    description: LangChain compatible endpoints with multi-provider support (/langchain/*)
  - name: PydanticAI Integration
    description: >-
      PydanticAI compatible endpoints with multi-provider support
      (/pydanticai/*)
  - name: Health
    description: Health check endpoints
  - name: Configuration
    description: Configuration management endpoints
  - name: Session
    description: Session and authentication endpoints
  - name: Providers
    description: Provider management endpoints
  - name: Plugins
    description: Plugin management endpoints
  - name: MCP
    description: Model Context Protocol endpoints
  - name: Governance
    description: Virtual keys, teams, and customers management
  - name: Routing
    description: Routing rules and complexity analyzer configuration
  - name: Logging
    description: Log search and management endpoints
  - name: Cache
    description: Cache management endpoints
  - name: Vault
    description: Vault secret management endpoints
  - name: Skills
    description: Skills Repository management, marketplace, and download endpoints
  - name: Audit Logs
    description: >-
      CADF-compliant audit log search, export, and signature verification
      endpoints
  - name: Webhooks
    description: Webhook endpoint management and signed async-job delivery history
  - name: Notifications
    description: >-
      Role-targeted dashboard notifications, delivered over the dashboard
      WebSocket
paths:
  /v1/async/images/edits:
    post:
      tags:
        - Async Jobs
      summary: Create async image edit
      description: >
        Submits an image edit request for asynchronous execution. Returns a job
        ID immediately

        with HTTP 202. Poll the corresponding GET endpoint with the job ID to
        retrieve the result.

        Streaming is not supported for async requests.
      operationId: createAsyncImageEdit
      parameters:
        - $ref: '#/components/parameters/AsyncResultTTL'
        - $ref: '#/components/parameters/AsyncWebhookEndpoint'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              description: >
                JSON encoding of an image edit. Sources are supplied as an
                `images` array, the same nested form

                /v1/videos/edits uses for its source video. Unrecognised
                top-level fields are forwarded to the

                provider as extra params with their JSON types intact, which is
                what a model's nested tuning

                object needs (e.g. Runware's `settings` and `providerSettings`).
                To upload the image as a file,

                post `multipart/form-data` instead - see
                `ImageEditMultipartRequest`.
              required:
                - model
                - images
              properties:
                model:
                  type: string
                  description: Model identifier in format `provider/model`
                images:
                  type: array
                  items:
                    description: >
                      One source image, either as a bare string - the form
                      `input_images` takes on

                      /v1/images/generations - or as an object naming which arm
                      it fills. Providers that cannot accept

                      a given form reject it.
                    oneOf:
                      - type: string
                        description: >
                          Public URL, data URI, base64 payload, or provider-side
                          asset ID. Equivalent to the object

                          form's `url`.
                      - type: object
                        description: Exactly one of the two properties is expected.
                        properties:
                          url:
                            type: string
                            description: >
                              Public URL, data URI, or provider-side asset ID,
                              for providers whose upstream fetches

                              the asset itself (e.g. Runware). Avoids
                              round-tripping the asset through the gateway as

                              base64.
                          image:
                            type: string
                            format: byte
                            description: Base64-encoded image bytes
                  description: >
                    Source images. Entries carrying neither a URL nor bytes are
                    dropped; a request left with no

                    usable image is rejected. Providers treat the first image as
                    the primary one (Runware's seed

                    image, Bedrock's style-transfer base), so the order is part
                    of the contract. Only the

                    reference-image models accept more than one; elsewhere
                    images after the first are dropped.
                prompt:
                  type: string
                  description: >
                    Text prompt describing the edit. Required except for the
                    operation types that are driven

                    purely by the input image: `background_removal`,
                    `erase_object`, `upscale`, `upscale_fast`,

                    `mask`, `segmentation`, `vectorize` and
                    `controlnet_preprocess`.
                mask:
                  type: string
                  format: byte
                  description: >
                    Optional base64-encoded mask image for inpainting
                    (transparent areas indicate regions to

                    edit). Dropped for models that declare no mask input.
                type:
                  type: string
                  enum:
                    - inpainting
                    - outpainting
                    - background_removal
                    - remove_background
                    - remove_bg
                    - erase_object
                    - recolor
                    - search_replace
                    - control_sketch
                    - control_structure
                    - style_guide
                    - style_transfer
                    - upscale
                    - upscale_fast
                    - upscale_creative
                    - upscale_conservative
                    - mask
                    - segmentation
                    - vectorize
                    - controlnet_preprocess
                    - controlnet
                    - preprocess
                  description: >
                    Type of edit operation. Support varies by provider;
                    unsupported values are dropped and the

                    request runs as a standard edit.
                upscale_factor:
                  type: integer
                  description: >
                    Multiply each dimension by this factor. `type: "upscale"`
                    only; mutually exclusive with

                    `target_megapixels`.
                target_megapixels:
                  type: integer
                  description: >
                    Target output size in megapixels. `type: "upscale"` only;
                    mutually exclusive with

                    `upscale_factor`.
                'n':
                  type: integer
                  minimum: 1
                  maximum: 10
                  description: Number of images to generate
                size:
                  type: string
                  enum:
                    - 256x256
                    - 512x512
                    - 1024x1024
                    - 1536x1024
                    - 1024x1536
                    - auto
                  description: Size of the output image
                response_format:
                  type: string
                  enum:
                    - url
                    - b64_json
                    - data_uri
                  default: url
                  description: >
                    Format of the response. `data_uri` is supported by providers
                    that return an inline

                    data URI (e.g. Runware).
                stream:
                  type: boolean
                  default: false
                  description: When true, stream the response via Server-Sent Events
                background:
                  type: string
                  enum:
                    - transparent
                    - opaque
                    - auto
                  description: Background type for the image
                input_fidelity:
                  type: string
                  enum:
                    - low
                    - high
                  description: How closely to follow the original image
                partial_images:
                  type: integer
                  minimum: 0
                  maximum: 3
                  description: Number of partial images to generate when streaming
                quality:
                  type: string
                  enum:
                    - auto
                    - high
                    - medium
                    - low
                    - standard
                  description: Quality of the output image
                output_format:
                  type: string
                  enum:
                    - png
                    - webp
                    - jpeg
                    - tiff
                    - svg
                  description: Output image format. `svg` applies to vectorize operations
                num_inference_steps:
                  type: integer
                  description: Number of inference steps
                seed:
                  type: integer
                  description: Seed for reproducible editing
                output_compression:
                  type: integer
                  minimum: 0
                  maximum: 100
                  description: Compression level (0-100%)
                negative_prompt:
                  type: string
                  description: What to avoid in the edit
                user:
                  type: string
                  description: User identifier for tracking
                fallbacks:
                  type: array
                  items:
                    $ref: '#/components/schemas/Fallback'
                  description: Fallback models to try if primary model fails
          multipart/form-data:
            schema:
              type: object
              description: >
                Multipart encoding of an image edit, and the only encoding that
                can upload the image as a file.

                This is what the official OpenAI SDKs send unconditionally.
                Every value crosses the wire as a

                string, so provider-native extra params arrive as strings; post
                `application/json` instead when

                a provider expects them as numbers, booleans or nested objects -
                see `ImageEditRequest`.
              required:
                - model
              properties:
                model:
                  type: string
                  description: Model identifier in format `provider/model`
                prompt:
                  type: string
                  description: >
                    Text prompt describing the edit. Required except for the
                    operation types that are driven

                    purely by the input image: `background_removal`,
                    `erase_object`, `upscale`, `upscale_fast`,

                    `mask`, `segmentation`, `vectorize` and
                    `controlnet_preprocess`.
                image:
                  type: string
                  format: binary
                  description: >
                    Image file to edit. Use field name `image` for a single file
                    or `image[]` for multiple files.

                    Either `image` or `image_url` is required.
                image_url:
                  type: string
                  description: >
                    Input image as a public URL or provider-side asset ID, for
                    providers whose upstream fetches

                    the asset itself (e.g. Runware). Use `image_url` for one or
                    `image_url[]` for several; this

                    avoids round-tripping the asset through the gateway as
                    base64. Uploads keep their leading

                    position, and providers treat the first image as the primary
                    one.
                mask:
                  type: string
                  format: binary
                  description: >
                    Optional mask image for inpainting (transparent areas
                    indicate regions to edit). Dropped for

                    models that declare no mask input.
                type:
                  type: string
                  enum:
                    - inpainting
                    - outpainting
                    - background_removal
                    - remove_background
                    - remove_bg
                    - erase_object
                    - recolor
                    - search_replace
                    - control_sketch
                    - control_structure
                    - style_guide
                    - style_transfer
                    - upscale
                    - upscale_fast
                    - upscale_creative
                    - upscale_conservative
                    - mask
                    - segmentation
                    - vectorize
                    - controlnet_preprocess
                    - controlnet
                    - preprocess
                  description: >
                    Type of edit operation. Support varies by provider;
                    unsupported values are dropped and the

                    request runs as a standard edit.
                upscale_factor:
                  type: integer
                  description: >
                    Multiply each dimension by this factor. `type: "upscale"`
                    only; mutually exclusive with

                    `target_megapixels`.
                target_megapixels:
                  type: integer
                  description: >
                    Target output size in megapixels. `type: "upscale"` only;
                    mutually exclusive with

                    `upscale_factor`.
                'n':
                  type: integer
                  minimum: 1
                  maximum: 10
                  description: Number of images to generate
                size:
                  type: string
                  enum:
                    - 256x256
                    - 512x512
                    - 1024x1024
                    - 1536x1024
                    - 1024x1536
                    - auto
                  description: Size of the output image
                response_format:
                  type: string
                  enum:
                    - url
                    - b64_json
                    - data_uri
                  default: url
                  description: >
                    Format of the response. `data_uri` is supported by providers
                    that return an inline

                    data URI (e.g. Runware).
                stream:
                  type: boolean
                  default: false
                  description: When true, stream the response via Server-Sent Events
                background:
                  type: string
                  enum:
                    - transparent
                    - opaque
                    - auto
                  description: Background type for the image
                input_fidelity:
                  type: string
                  enum:
                    - low
                    - high
                  description: How closely to follow the original image
                partial_images:
                  type: integer
                  minimum: 0
                  maximum: 3
                  description: Number of partial images to generate when streaming
                quality:
                  type: string
                  enum:
                    - auto
                    - high
                    - medium
                    - low
                    - standard
                  description: Quality of the output image
                output_format:
                  type: string
                  enum:
                    - png
                    - webp
                    - jpeg
                    - tiff
                    - svg
                  description: Output image format. `svg` applies to vectorize operations
                num_inference_steps:
                  type: integer
                  description: Number of inference steps
                seed:
                  type: integer
                  description: Seed for reproducible editing
                output_compression:
                  type: integer
                  minimum: 0
                  maximum: 100
                  description: Compression level (0-100%)
                negative_prompt:
                  type: string
                  description: What to avoid in the edit
                user:
                  type: string
                  description: User identifier for tracking
                fallbacks:
                  type: array
                  items:
                    $ref: '#/components/schemas/Fallback'
                  description: Fallback models to try if primary model fails
      responses:
        '202':
          description: Job accepted for processing
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AsyncJobResponse'
        '400':
          description: Bad request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BifrostError'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BifrostError'
      security:
        - BearerAuth: []
        - BasicAuth: []
        - VirtualKeyAuth: []
        - ApiKeyAuth: []
components:
  parameters:
    AsyncResultTTL:
      name: x-bf-async-job-result-ttl
      in: header
      required: false
      description: >
        Time-to-live in seconds for the job result after completion. Defaults to
        3600 (1 hour).

        After expiry, the job result is automatically cleaned up.
      schema:
        type: integer
        default: 3600
    AsyncWebhookEndpoint:
      name: x-bf-async-webhook
      in: header
      required: false
      description: >
        Name of a registered webhook endpoint to notify when this job reaches a
        terminal

        state (`completed` or `failed`). The endpoint must already exist and be
        enabled;

        otherwise the submission is rejected with HTTP 400. If the endpoint is
        not subscribed

        to the resulting event, the job still completes normally but no delivery
        is enqueued.

        When omitted, no webhook is sent for the job and results are retrieved
        by polling.

        See the Webhooks management API to register endpoints.
      schema:
        type: string
  schemas:
    Fallback:
      type: object
      description: Fallback model configuration
      required:
        - provider
        - model
      properties:
        provider:
          $ref: '#/components/schemas/ModelProvider'
        model:
          type: string
          description: Model name
    AsyncJobResponse:
      type: object
      description: Response returned when creating or polling an async job
      required:
        - id
        - status
        - created_at
      properties:
        id:
          type: string
          description: Unique identifier for the async job
        status:
          $ref: '#/components/schemas/AsyncJobStatus'
        expires_at:
          type: string
          format: date-time
          description: When the job result expires and will be cleaned up
        created_at:
          type: string
          format: date-time
          description: When the job was created
        completed_at:
          type: string
          format: date-time
          description: When the job completed (successfully or with failure)
        status_code:
          type: integer
          description: HTTP status code of the completed operation
        result:
          description: >-
            The result of the completed operation (shape depends on the request
            type)
        error:
          $ref: '#/components/schemas/BifrostError'
    BifrostError:
      type: object
      description: Error response from Bifrost
      properties:
        event_id:
          type: string
        type:
          type: string
        is_bifrost_error:
          type: boolean
        status_code:
          type: integer
        error:
          $ref: '#/components/schemas/ErrorField'
        extra_fields:
          $ref: '#/components/schemas/BifrostErrorExtraFields'
    ModelProvider:
      type: string
      description: AI model provider identifier
      enum:
        - openai
        - azure
        - anthropic
        - bedrock
        - cohere
        - vertex
        - vllm
        - mistral
        - ollama
        - groq
        - sgl
        - parasail
        - perplexity
        - replicate
        - cerebras
        - deepseek
        - gemini
        - openrouter
        - elevenlabs
        - huggingface
        - nebius
        - xai
        - runway
        - fireworks
    AsyncJobStatus:
      type: string
      description: The status of an async job
      enum:
        - pending
        - processing
        - completed
        - failed
    ErrorField:
      type: object
      properties:
        type:
          type: string
        code:
          type: string
        message:
          type: string
        param:
          type: string
        event_id:
          type: string
    BifrostErrorExtraFields:
      type: object
      properties:
        provider:
          $ref: '#/components/schemas/ModelProvider'
        model_requested:
          type: string
        request_type:
          type: string
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      description: >
        Bearer token authentication. Use your provider API key or Bifrost
        authentication token.

        Virtual keys (prefixed with `sk-bf-`) can also be passed here.
    BasicAuth:
      type: http
      scheme: basic
      description: |
        Basic authentication using username and password.
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: |
        API key authentication via the `x-api-key` header.
        Virtual keys (prefixed with `sk-bf-`) can also be passed here.
    VirtualKeyAuth:
      type: apiKey
      in: header
      name: x-bf-vk
      description: >
        Bifrost Virtual Key for governance, routing, and access control.
        Supported on all inference endpoints (`/v1/*`, `/openai/*`,
        `/anthropic/*`, `/bedrock/*`, `/cohere/*`, `/genai/*`, `/langchain/*`,
        `/litellm/*`, `/pydanticai/*`, `/mcp`), not on management APIs
        (`/api/*`).

        Example: `sk-bf-*` prefixed keys.

````