{
  "openapi": "3.1.0",
  "info": {
    "title": "ImageOps Image Processing API",
    "description": "ImageOps is a high-performance image processing API designed for AI agents and automated workflows. It accepts public HTTPS image URLs and provides controlled operations for image inspection, transformation, optimization and format handling. Supported capabilities include image metadata inspection, statistics, resizing, thumbnails, cropping, smart cropping, canvas padding, rotation, automatic orientation correction, flipping, format conversion, compression, metadata removal, grayscale conversion, brightness and contrast adjustment, gamma correction, blur, sharpening, automatic trimming and background flattening. Responses are returned as structured JSON. Operations that generate a new image return metadata and a temporary HTTPS result URL instead of image binary data.\n\nUse ImageOps when an agent needs to:\n\n- inspect image dimensions or format\n- determine whether an image has transparency\n- resize an image or create thumbnails\n- crop an image or automatically crop to target dimensions\n- rotate, correct orientation, or flip an image\n- add canvas or background padding\n- convert common web and photographic formats to JPEG, PNG, WebP, AVIF, or HEIC/HEIF\n- compress images or remove metadata\n- create grayscale images\n- adjust brightness, contrast, or gamma\n- blur or sharpen an image\n- trim borders or flatten transparency onto a background\n- obtain basic image statistics\n\nInput: a public HTTPS image URL. Primary endpoint: `POST /v1/image`. Output: a JSON object. Transform output: a temporary HTTPS result URL plus image metadata. Image binary data is not returned through the Relay response.\n\nProduction version 0.4.0: 72 controlled image operations.  Single active image job; result TTL one hour. Multi-input maximum eight images and combined 20 MP. Animation at most 64 frames and combined 20 MP; pages at most 32, PDF DPI at most 150 and rendered page at most 10 MP. Tile package at most 256 tiles and 25 MB including archive duplication. Heavy-operation limits are enforced safety caps.",
    "version": "0.4.0-rc1"
  },
  "paths": {
    "/": {
      "get": {
        "summary": "Root",
        "operationId": "root__get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IdentityResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "405": {
            "description": "Method Not Allowed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "413": {
            "description": "Request Entity Too Large",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Entity",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "502": {
            "description": "Bad Gateway",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "503": {
            "description": "Service Busy",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "504": {
            "description": "Gateway Timeout",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "507": {
            "description": "Insufficient Storage",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v1/health": {
      "get": {
        "summary": "Health",
        "operationId": "health_v1_health_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StatusResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "405": {
            "description": "Method Not Allowed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "413": {
            "description": "Request Entity Too Large",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Entity",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "502": {
            "description": "Bad Gateway",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "503": {
            "description": "Service Busy",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "504": {
            "description": "Gateway Timeout",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "507": {
            "description": "Insufficient Storage",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v1/identity": {
      "get": {
        "summary": "Identity",
        "operationId": "identity_v1_identity_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IdentityResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "405": {
            "description": "Method Not Allowed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "413": {
            "description": "Request Entity Too Large",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Entity",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "502": {
            "description": "Bad Gateway",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "503": {
            "description": "Service Busy",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "504": {
            "description": "Gateway Timeout",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "507": {
            "description": "Insufficient Storage",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v1/version": {
      "get": {
        "summary": "Version",
        "operationId": "version_v1_version_get",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/IdentityResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "405": {
            "description": "Method Not Allowed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "413": {
            "description": "Request Entity Too Large",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Entity",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "502": {
            "description": "Bad Gateway",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "503": {
            "description": "Service Busy",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "504": {
            "description": "Gateway Timeout",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "507": {
            "description": "Insufficient Storage",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v1/self-test": {
      "post": {
        "summary": "Self Test",
        "operationId": "self_test_v1_self_test_post",
        "responses": {
          "200": {
            "description": "Successful Response",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StatusResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "405": {
            "description": "Method Not Allowed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "413": {
            "description": "Request Entity Too Large",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Entity",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "502": {
            "description": "Bad Gateway",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "503": {
            "description": "Service Busy",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "504": {
            "description": "Gateway Timeout",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "507": {
            "description": "Insufficient Storage",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    },
    "/v1/image": {
      "post": {
        "summary": "Inspect or transform one HTTPS image",
        "description": "Select a documented operation to inspect, analyze or transform safe public HTTPS inputs. Responses are JSON only. Analyses use data; single transforms use output metadata and URL; tile packages return bounded manifest/archive URLs, not binary data. See discriminator schemas and operation examples for parameters. First frame/page is default outside extraction operations. Pixel-lossless optimize is limited to PNG/WebP; other modes support JPEG, PNG and WebP. Colorspace output is rendered back to display sRGB. Multi-input max eight and combined 20 MP; global 50 MB download, 50 MP decoded, 25 MB output, concurrency one. Results expire after one hour. Enforced operation pixel caps: {\"local_equalize\": 5000000, \"median\": 5000000, \"rank_filter\": 5000000, \"adaptive_threshold\": 5000000, \"erode\": 5000000, \"dilate\": 5000000, \"morphology\": 5000000, \"composite\": 20000000, \"overlay\": 20000000, \"watermark\": 20000000, \"deepzoom\": 20000000, \"pyramid\": 20000000, \"tile\": 20000000, \"pdf_to_image\": 10000000, \"extract_page\": 10000000}",
        "operationId": "image_v1_image_post",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "anyOf": [
                  {
                    "$ref": "#/components/schemas/InspectRequest"
                  },
                  {
                    "$ref": "#/components/schemas/StatsRequest"
                  },
                  {
                    "$ref": "#/components/schemas/ResizeRequest"
                  },
                  {
                    "$ref": "#/components/schemas/ThumbnailRequest"
                  },
                  {
                    "$ref": "#/components/schemas/SmartcropRequest"
                  },
                  {
                    "$ref": "#/components/schemas/CropRequest"
                  },
                  {
                    "$ref": "#/components/schemas/RotateRequest"
                  },
                  {
                    "$ref": "#/components/schemas/ConvertRequest"
                  },
                  {
                    "$ref": "#/components/schemas/PadRequest"
                  },
                  {
                    "$ref": "#/components/schemas/AutoOrientRequest"
                  },
                  {
                    "$ref": "#/components/schemas/FlipRequest"
                  },
                  {
                    "$ref": "#/components/schemas/CompressRequest"
                  },
                  {
                    "$ref": "#/components/schemas/StripMetadataRequest"
                  },
                  {
                    "$ref": "#/components/schemas/GrayscaleRequest"
                  },
                  {
                    "$ref": "#/components/schemas/BrightnessRequest"
                  },
                  {
                    "$ref": "#/components/schemas/ContrastRequest"
                  },
                  {
                    "$ref": "#/components/schemas/GammaRequest"
                  },
                  {
                    "$ref": "#/components/schemas/BlurRequest"
                  },
                  {
                    "$ref": "#/components/schemas/SharpenRequest"
                  },
                  {
                    "$ref": "#/components/schemas/TrimRequest"
                  },
                  {
                    "$ref": "#/components/schemas/FlattenRequest"
                  },
                  {
                    "$ref": "#/components/schemas/DetectFormatExpandedRequest"
                  },
                  {
                    "$ref": "#/components/schemas/MetadataExpandedRequest"
                  },
                  {
                    "$ref": "#/components/schemas/OptimizeExpandedRequest"
                  },
                  {
                    "$ref": "#/components/schemas/SaturationExpandedRequest"
                  },
                  {
                    "$ref": "#/components/schemas/HueExpandedRequest"
                  },
                  {
                    "$ref": "#/components/schemas/TintExpandedRequest"
                  },
                  {
                    "$ref": "#/components/schemas/InvertExpandedRequest"
                  },
                  {
                    "$ref": "#/components/schemas/NormalizeExpandedRequest"
                  },
                  {
                    "$ref": "#/components/schemas/HistEqualizeExpandedRequest"
                  },
                  {
                    "$ref": "#/components/schemas/LocalEqualizeExpandedRequest"
                  },
                  {
                    "$ref": "#/components/schemas/ColorspaceExpandedRequest"
                  },
                  {
                    "$ref": "#/components/schemas/HistogramExpandedRequest"
                  },
                  {
                    "$ref": "#/components/schemas/EntropyExpandedRequest"
                  },
                  {
                    "$ref": "#/components/schemas/DominantColorExpandedRequest"
                  },
                  {
                    "$ref": "#/components/schemas/PixelSampleExpandedRequest"
                  },
                  {
                    "$ref": "#/components/schemas/CompareExpandedRequest"
                  },
                  {
                    "$ref": "#/components/schemas/DifferenceExpandedRequest"
                  },
                  {
                    "$ref": "#/components/schemas/MedianExpandedRequest"
                  },
                  {
                    "$ref": "#/components/schemas/RankFilterExpandedRequest"
                  },
                  {
                    "$ref": "#/components/schemas/EdgeDetectExpandedRequest"
                  },
                  {
                    "$ref": "#/components/schemas/EmbossExpandedRequest"
                  },
                  {
                    "$ref": "#/components/schemas/LaplacianExpandedRequest"
                  },
                  {
                    "$ref": "#/components/schemas/ConvolveExpandedRequest"
                  },
                  {
                    "$ref": "#/components/schemas/ThresholdExpandedRequest"
                  },
                  {
                    "$ref": "#/components/schemas/AdaptiveThresholdExpandedRequest"
                  },
                  {
                    "$ref": "#/components/schemas/ErodeExpandedRequest"
                  },
                  {
                    "$ref": "#/components/schemas/DilateExpandedRequest"
                  },
                  {
                    "$ref": "#/components/schemas/MorphologyExpandedRequest"
                  },
                  {
                    "$ref": "#/components/schemas/ExtractAlphaExpandedRequest"
                  },
                  {
                    "$ref": "#/components/schemas/ApplyMaskExpandedRequest"
                  },
                  {
                    "$ref": "#/components/schemas/ExtractChannelExpandedRequest"
                  },
                  {
                    "$ref": "#/components/schemas/MergeChannelsExpandedRequest"
                  },
                  {
                    "$ref": "#/components/schemas/OverlayExpandedRequest"
                  },
                  {
                    "$ref": "#/components/schemas/CompositeExpandedRequest"
                  },
                  {
                    "$ref": "#/components/schemas/WatermarkExpandedRequest"
                  },
                  {
                    "$ref": "#/components/schemas/AddBackgroundExpandedRequest"
                  },
                  {
                    "$ref": "#/components/schemas/JoinExpandedRequest"
                  },
                  {
                    "$ref": "#/components/schemas/GridExpandedRequest"
                  },
                  {
                    "$ref": "#/components/schemas/ContactSheetExpandedRequest"
                  },
                  {
                    "$ref": "#/components/schemas/DrawTextExpandedRequest"
                  },
                  {
                    "$ref": "#/components/schemas/DrawRectExpandedRequest"
                  },
                  {
                    "$ref": "#/components/schemas/DrawLineExpandedRequest"
                  },
                  {
                    "$ref": "#/components/schemas/DrawCircleExpandedRequest"
                  },
                  {
                    "$ref": "#/components/schemas/AnimationInfoExpandedRequest"
                  },
                  {
                    "$ref": "#/components/schemas/ExtractFrameExpandedRequest"
                  },
                  {
                    "$ref": "#/components/schemas/PageInfoExpandedRequest"
                  },
                  {
                    "$ref": "#/components/schemas/ExtractPageExpandedRequest"
                  },
                  {
                    "$ref": "#/components/schemas/PdfToImageExpandedRequest"
                  },
                  {
                    "$ref": "#/components/schemas/TileExpandedRequest"
                  },
                  {
                    "$ref": "#/components/schemas/DeepzoomExpandedRequest"
                  },
                  {
                    "$ref": "#/components/schemas/PyramidExpandedRequest"
                  }
                ],
                "title": "Payload"
              },
              "examples": {
                "inspect": {
                  "summary": "Inspect metadata",
                  "value": {
                    "image_url": "https://example.com/image.png",
                    "operation": "inspect",
                    "params": {}
                  }
                },
                "stats": {
                  "summary": "Channel statistics",
                  "value": {
                    "image_url": "https://example.com/image.jpg",
                    "operation": "stats",
                    "params": {}
                  }
                },
                "resize": {
                  "summary": "Resize to fit",
                  "value": {
                    "image_url": "https://example.com/image.jpg",
                    "operation": "resize",
                    "params": {
                      "width": 1000,
                      "height": 1000,
                      "fit": "contain",
                      "format": "webp"
                    }
                  }
                },
                "thumbnail": {
                  "summary": "Preview thumbnail",
                  "value": {
                    "image_url": "https://example.com/image.jpg",
                    "operation": "thumbnail",
                    "params": {
                      "width": 320,
                      "height": 320,
                      "format": "webp"
                    }
                  }
                },
                "smartcrop": {
                  "summary": "Automatic target crop",
                  "value": {
                    "image_url": "https://example.com/image.jpg",
                    "operation": "smartcrop",
                    "params": {
                      "width": 512,
                      "height": 512,
                      "strategy": "attention",
                      "format": "webp"
                    }
                  }
                },
                "crop": {
                  "summary": "Rectangular crop",
                  "value": {
                    "image_url": "https://example.com/image.jpg",
                    "operation": "crop",
                    "params": {
                      "left": 0,
                      "top": 0,
                      "width": 400,
                      "height": 300,
                      "format": "webp"
                    }
                  }
                },
                "rotate": {
                  "summary": "Rotate image",
                  "value": {
                    "image_url": "https://example.com/image.jpg",
                    "operation": "rotate",
                    "params": {
                      "angle": 45,
                      "background": "#ffffff",
                      "format": "webp"
                    }
                  }
                },
                "convert-jpeg": {
                  "summary": "Convert to JPEG",
                  "value": {
                    "image_url": "https://example.com/image.png",
                    "operation": "convert",
                    "params": {
                      "format": "jpeg",
                      "quality": 85,
                      "background": "#FFFFFF",
                      "strip_metadata": true
                    }
                  }
                },
                "convert-png": {
                  "summary": "Convert to PNG",
                  "value": {
                    "image_url": "https://example.com/image.jpg",
                    "operation": "convert",
                    "params": {
                      "format": "png",
                      "quality": 85,
                      "background": "#FFFFFF",
                      "strip_metadata": true
                    }
                  }
                },
                "convert-webp": {
                  "summary": "Convert to WebP",
                  "value": {
                    "image_url": "https://example.com/image.jpg",
                    "operation": "convert",
                    "params": {
                      "format": "webp",
                      "quality": 85,
                      "background": "#FFFFFF",
                      "strip_metadata": true
                    }
                  }
                },
                "convert-avif": {
                  "summary": "Convert to AVIF",
                  "value": {
                    "image_url": "https://example.com/image.png",
                    "operation": "convert",
                    "params": {
                      "format": "avif",
                      "quality": 70,
                      "background": "#FFFFFF",
                      "strip_metadata": true
                    }
                  }
                },
                "convert-heic": {
                  "summary": "Convert to HEIC",
                  "value": {
                    "image_url": "https://example.com/image.png",
                    "operation": "convert",
                    "params": {
                      "format": "heic",
                      "quality": 70,
                      "background": "#FFFFFF",
                      "strip_metadata": true
                    }
                  }
                },
                "pad": {
                  "summary": "Pad canvas",
                  "value": {
                    "image_url": "https://example.com/image.jpg",
                    "operation": "pad",
                    "params": {
                      "width": 1200,
                      "height": 1200,
                      "gravity": "centre",
                      "background": "#ffffff",
                      "format": "webp"
                    }
                  }
                },
                "auto_orient": {
                  "summary": "Correct orientation",
                  "value": {
                    "image_url": "https://example.com/image.jpg",
                    "operation": "auto_orient",
                    "params": {
                      "format": "jpeg"
                    }
                  }
                },
                "flip": {
                  "summary": "Horizontal flip",
                  "value": {
                    "image_url": "https://example.com/image.jpg",
                    "operation": "flip",
                    "params": {
                      "horizontal": true,
                      "format": "webp"
                    }
                  }
                },
                "compress": {
                  "summary": "Compress to WebP",
                  "value": {
                    "image_url": "https://example.com/image.jpg",
                    "operation": "compress",
                    "params": {
                      "format": "webp",
                      "quality": 80
                    }
                  }
                },
                "strip_metadata": {
                  "summary": "Remove metadata",
                  "value": {
                    "image_url": "https://example.com/image.jpg",
                    "operation": "strip_metadata",
                    "params": {
                      "format": "jpeg"
                    }
                  }
                },
                "grayscale": {
                  "summary": "Convert to grayscale",
                  "value": {
                    "image_url": "https://example.com/image.jpg",
                    "operation": "grayscale",
                    "params": {
                      "format": "webp"
                    }
                  }
                },
                "brightness": {
                  "summary": "Adjust brightness",
                  "value": {
                    "image_url": "https://example.com/image.jpg",
                    "operation": "brightness",
                    "params": {
                      "amount": 15,
                      "format": "webp"
                    }
                  }
                },
                "contrast": {
                  "summary": "Adjust contrast",
                  "value": {
                    "image_url": "https://example.com/image.jpg",
                    "operation": "contrast",
                    "params": {
                      "amount": 20,
                      "format": "webp"
                    }
                  }
                },
                "gamma": {
                  "summary": "Gamma correction",
                  "value": {
                    "image_url": "https://example.com/image.jpg",
                    "operation": "gamma",
                    "params": {
                      "gamma": 2.2,
                      "format": "webp"
                    }
                  }
                },
                "blur": {
                  "summary": "Controlled blur",
                  "value": {
                    "image_url": "https://example.com/image.jpg",
                    "operation": "blur",
                    "params": {
                      "sigma": 2.0,
                      "format": "webp"
                    }
                  }
                },
                "sharpen": {
                  "summary": "Controlled sharpening",
                  "value": {
                    "image_url": "https://example.com/image.jpg",
                    "operation": "sharpen",
                    "params": {
                      "sigma": 1.0,
                      "amount": 1.5,
                      "format": "webp"
                    }
                  }
                },
                "trim": {
                  "summary": "Trim borders",
                  "value": {
                    "image_url": "https://example.com/image.jpg",
                    "operation": "trim",
                    "params": {
                      "tolerance": 5,
                      "background": "#ffffff",
                      "format": "webp"
                    }
                  }
                },
                "flatten": {
                  "summary": "Flatten transparency",
                  "value": {
                    "image_url": "https://example.com/image.png",
                    "operation": "flatten",
                    "params": {
                      "background": "#ffffff",
                      "format": "jpeg"
                    }
                  }
                },
                "detect_format": {
                  "summary": "Format & Metadata: detect_format",
                  "description": "Detect actual file content, dimensions, alpha and frame/page counts; ignores URL extension.",
                  "value": {
                    "image_url": "https://example.com/image.png",
                    "operation": "detect_format",
                    "params": {}
                  }
                },
                "metadata": {
                  "summary": "Format & Metadata: metadata",
                  "description": "Read safe metadata presence and orientation; never returns EXIF payload, GPS, XMP text or embedded profiles.",
                  "value": {
                    "image_url": "https://example.com/image.png",
                    "operation": "metadata",
                    "params": {}
                  }
                },
                "optimize": {
                  "summary": "Format & Metadata: optimize",
                  "description": "Optimize encoding: pixel-lossless PNG/WebP for 8-bit sRGB inputs only, balanced quality or smallest quality. PNG remains lossless in all modes, with no guaranteed size reduction.",
                  "value": {
                    "image_url": "https://example.com/image.png",
                    "operation": "optimize",
                    "params": {
                      "format": "webp",
                      "quality": 85,
                      "mode": "balanced"
                    }
                  }
                },
                "saturation": {
                  "summary": "Color: saturation",
                  "description": "Scale chroma while retaining alpha.",
                  "value": {
                    "image_url": "https://example.com/image.png",
                    "operation": "saturation",
                    "params": {
                      "format": "webp",
                      "quality": 85,
                      "factor": 1.2
                    }
                  }
                },
                "hue": {
                  "summary": "Color: hue",
                  "description": "Rotate hue by bounded degrees while retaining alpha.",
                  "value": {
                    "image_url": "https://example.com/image.png",
                    "operation": "hue",
                    "params": {
                      "format": "webp",
                      "quality": 85,
                      "degrees": 15
                    }
                  }
                },
                "tint": {
                  "summary": "Color: tint",
                  "description": "Blend a validated solid color with the source color channels.",
                  "value": {
                    "image_url": "https://example.com/image.png",
                    "operation": "tint",
                    "params": {
                      "format": "webp",
                      "quality": 85,
                      "color": "#FF8800",
                      "amount": 0.2
                    }
                  }
                },
                "invert": {
                  "summary": "Color: invert",
                  "description": "Invert color samples without inverting alpha.",
                  "value": {
                    "image_url": "https://example.com/image.png",
                    "operation": "invert",
                    "params": {
                      "format": "webp",
                      "quality": 85
                    }
                  }
                },
                "normalize": {
                  "summary": "Color: normalize",
                  "description": "Stretch each color channel to its full sample range.",
                  "value": {
                    "image_url": "https://example.com/image.png",
                    "operation": "normalize",
                    "params": {
                      "format": "webp",
                      "quality": 85
                    }
                  }
                },
                "hist_equalize": {
                  "summary": "Color: hist_equalize",
                  "description": "Equalize the color histogram; may change appearance substantially.",
                  "value": {
                    "image_url": "https://example.com/image.png",
                    "operation": "hist_equalize",
                    "params": {
                      "format": "webp",
                      "quality": 85
                    }
                  }
                },
                "local_equalize": {
                  "summary": "Color: local_equalize",
                  "description": "Equalize a bounded local neighborhood. Maximum input: 5 MP.",
                  "value": {
                    "image_url": "https://example.com/image.png",
                    "operation": "local_equalize",
                    "params": {
                      "format": "webp",
                      "quality": 85,
                      "window": 7
                    }
                  }
                },
                "colorspace": {
                  "summary": "Color: colorspace",
                  "description": "Evaluate a permitted color-space transform and render the encoded result in display sRGB. Requested intermediate space is reported.",
                  "value": {
                    "image_url": "https://example.com/image.png",
                    "operation": "colorspace",
                    "params": {
                      "format": "webp",
                      "quality": 85,
                      "space": "srgb"
                    }
                  }
                },
                "histogram": {
                  "summary": "Analysis: histogram",
                  "description": "Return bounded per-color-channel counts, up to 256 bins per channel.",
                  "value": {
                    "image_url": "https://example.com/image.png",
                    "operation": "histogram",
                    "params": {
                      "bins": 32
                    }
                  }
                },
                "entropy": {
                  "summary": "Analysis: entropy",
                  "description": "Return grayscale Shannon entropy in bits per sample.",
                  "value": {
                    "image_url": "https://example.com/image.png",
                    "operation": "entropy",
                    "params": {}
                  }
                },
                "dominant_color": {
                  "summary": "Analysis: dominant_color",
                  "description": "Return approximate quantized dominant RGB colors and proportions from a bounded thumbnail.",
                  "value": {
                    "image_url": "https://example.com/image.png",
                    "operation": "dominant_color",
                    "params": {
                      "count": 5
                    }
                  }
                },
                "pixel_sample": {
                  "summary": "Analysis: pixel_sample",
                  "description": "Read one in-bounds pixel from the orientation-corrected image.",
                  "value": {
                    "image_url": "https://example.com/image.png",
                    "operation": "pixel_sample",
                    "params": {
                      "x": 0,
                      "y": 0
                    }
                  }
                },
                "compare": {
                  "summary": "Analysis: compare",
                  "description": "Compare equally sized images: MAE, RMSE and maximum color difference. Requires second_image_url.",
                  "value": {
                    "image_url": "https://example.com/image.png",
                    "operation": "compare",
                    "params": {},
                    "second_image_url": "https://example.com/second.png"
                  }
                },
                "difference": {
                  "summary": "Analysis: difference",
                  "description": "Write an absolute color difference image and bounded comparison statistics. Requires second_image_url.",
                  "value": {
                    "image_url": "https://example.com/image.png",
                    "operation": "difference",
                    "params": {
                      "format": "webp",
                      "quality": 85
                    },
                    "second_image_url": "https://example.com/second.png"
                  }
                },
                "median": {
                  "summary": "Filters: median",
                  "description": "Apply a bounded square median filter to color channels.",
                  "value": {
                    "image_url": "https://example.com/image.png",
                    "operation": "median",
                    "params": {
                      "format": "webp",
                      "quality": 85,
                      "window": 7
                    }
                  }
                },
                "rank_filter": {
                  "summary": "Filters: rank_filter",
                  "description": "Select a bounded neighborhood rank percentile.",
                  "value": {
                    "image_url": "https://example.com/image.png",
                    "operation": "rank_filter",
                    "params": {
                      "format": "webp",
                      "quality": 85,
                      "window": 7,
                      "percentile": 0.5
                    }
                  }
                },
                "edge_detect": {
                  "summary": "Filters: edge_detect",
                  "description": "Extract Sobel edges.",
                  "value": {
                    "image_url": "https://example.com/image.png",
                    "operation": "edge_detect",
                    "params": {
                      "format": "webp",
                      "quality": 85,
                      "method": "sobel"
                    }
                  }
                },
                "emboss": {
                  "summary": "Filters: emboss",
                  "description": "Render a fixed emboss kernel.",
                  "value": {
                    "image_url": "https://example.com/image.png",
                    "operation": "emboss",
                    "params": {
                      "format": "webp",
                      "quality": 85
                    }
                  }
                },
                "laplacian": {
                  "summary": "Filters: laplacian",
                  "description": "Render a fixed Laplacian edge kernel.",
                  "value": {
                    "image_url": "https://example.com/image.png",
                    "operation": "laplacian",
                    "params": {
                      "format": "webp",
                      "quality": 85
                    }
                  }
                },
                "convolve": {
                  "summary": "Filters: convolve",
                  "description": "Apply one fixed convolution preset; custom matrices are rejected.",
                  "value": {
                    "image_url": "https://example.com/image.png",
                    "operation": "convolve",
                    "params": {
                      "format": "webp",
                      "quality": 85,
                      "preset": "edge"
                    }
                  }
                },
                "threshold": {
                  "summary": "Threshold & Morphology: threshold",
                  "description": "Threshold grayscale samples to a binary image.",
                  "value": {
                    "image_url": "https://example.com/image.png",
                    "operation": "threshold",
                    "params": {
                      "format": "webp",
                      "quality": 85,
                      "value": 128
                    }
                  }
                },
                "adaptive_threshold": {
                  "summary": "Threshold & Morphology: adaptive_threshold",
                  "description": "Threshold against a local mean with bounded offset and window.",
                  "value": {
                    "image_url": "https://example.com/image.png",
                    "operation": "adaptive_threshold",
                    "params": {
                      "format": "webp",
                      "quality": 85,
                      "window": 7,
                      "offset": 5
                    }
                  }
                },
                "erode": {
                  "summary": "Threshold & Morphology: erode",
                  "description": "Erode a binary image using a bounded square kernel.",
                  "value": {
                    "image_url": "https://example.com/image.png",
                    "operation": "erode",
                    "params": {
                      "format": "webp",
                      "quality": 85,
                      "window": 7
                    }
                  }
                },
                "dilate": {
                  "summary": "Threshold & Morphology: dilate",
                  "description": "Dilate a binary image using a bounded square kernel.",
                  "value": {
                    "image_url": "https://example.com/image.png",
                    "operation": "dilate",
                    "params": {
                      "format": "webp",
                      "quality": 85,
                      "window": 7
                    }
                  }
                },
                "morphology": {
                  "summary": "Threshold & Morphology: morphology",
                  "description": "Apply open, close, erode or dilate using a bounded square kernel.",
                  "value": {
                    "image_url": "https://example.com/image.png",
                    "operation": "morphology",
                    "params": {
                      "format": "webp",
                      "quality": 85,
                      "window": 7,
                      "mode": "open"
                    }
                  }
                },
                "extract_alpha": {
                  "summary": "Alpha & Channels: extract_alpha",
                  "description": "Extract alpha as grayscale; opaque inputs return a solid white mask.",
                  "value": {
                    "image_url": "https://example.com/image.png",
                    "operation": "extract_alpha",
                    "params": {
                      "format": "webp",
                      "quality": 85
                    }
                  }
                },
                "apply_mask": {
                  "summary": "Alpha & Channels: apply_mask",
                  "description": "Multiply original alpha by an equally sized grayscale second image mask.",
                  "value": {
                    "image_url": "https://example.com/image.png",
                    "operation": "apply_mask",
                    "params": {
                      "format": "webp",
                      "quality": 85
                    },
                    "second_image_url": "https://example.com/second.png"
                  }
                },
                "extract_channel": {
                  "summary": "Alpha & Channels: extract_channel",
                  "description": "Extract one permitted color, gray or alpha channel.",
                  "value": {
                    "image_url": "https://example.com/image.png",
                    "operation": "extract_channel",
                    "params": {
                      "format": "webp",
                      "quality": 85,
                      "channel": "r"
                    }
                  }
                },
                "merge_channels": {
                  "summary": "Alpha & Channels: merge_channels",
                  "description": "Reorder or replicate channels from this source into RGB or RGBA; no arbitrary input buffers.",
                  "value": {
                    "image_url": "https://example.com/image.png",
                    "operation": "merge_channels",
                    "params": {
                      "format": "webp",
                      "quality": 85,
                      "channels": [
                        "r",
                        "g",
                        "b"
                      ]
                    }
                  }
                },
                "overlay": {
                  "summary": "Composition: overlay",
                  "description": "Overlay a second HTTPS image at bounded coordinates and opacity.",
                  "value": {
                    "image_url": "https://example.com/image.png",
                    "operation": "overlay",
                    "params": {
                      "format": "webp",
                      "quality": 85,
                      "blend": "over",
                      "x": 0,
                      "y": 0,
                      "opacity": 1
                    },
                    "second_image_url": "https://example.com/second.png"
                  }
                },
                "composite": {
                  "summary": "Composition: composite",
                  "description": "Composite a second HTTPS image using a permitted blend. Combined inputs limited to 20 MP.",
                  "value": {
                    "image_url": "https://example.com/image.png",
                    "operation": "composite",
                    "params": {
                      "format": "webp",
                      "quality": 85,
                      "blend": "over",
                      "x": 0,
                      "y": 0,
                      "opacity": 1
                    },
                    "second_image_url": "https://example.com/second.png"
                  }
                },
                "watermark": {
                  "summary": "Composition: watermark",
                  "description": "Add a server-font text or second-image watermark at bounded scale, position, margin and opacity.",
                  "value": {
                    "image_url": "https://example.com/image.png",
                    "operation": "watermark",
                    "params": {
                      "format": "webp",
                      "quality": 85,
                      "text": "ImageOps",
                      "position": "south-east",
                      "opacity": 0.5,
                      "scale": 0.25,
                      "margin": 4,
                      "size": 24,
                      "color": "#FFFFFF"
                    }
                  }
                },
                "add_background": {
                  "summary": "Composition: add_background",
                  "description": "Flatten transparency onto a solid validated background.",
                  "value": {
                    "image_url": "https://example.com/image.png",
                    "operation": "add_background",
                    "params": {
                      "format": "webp",
                      "quality": 85,
                      "background": "#FFFFFF"
                    }
                  }
                },
                "join": {
                  "summary": "Composition: join",
                  "description": "Join up to eight HTTPS inputs horizontally or vertically.",
                  "value": {
                    "image_url": "https://example.com/image.png",
                    "operation": "join",
                    "params": {
                      "format": "webp",
                      "quality": 85,
                      "background": "#FFFFFF",
                      "direction": "horizontal",
                      "columns": 2,
                      "spacing": 4,
                      "thumbnail_size": 256
                    },
                    "additional_image_urls": [
                      "https://example.com/second.png"
                    ]
                  }
                },
                "grid": {
                  "summary": "Composition: grid",
                  "description": "Place up to eight HTTPS inputs in a bounded uniform-cell grid.",
                  "value": {
                    "image_url": "https://example.com/image.png",
                    "operation": "grid",
                    "params": {
                      "format": "webp",
                      "quality": 85,
                      "background": "#FFFFFF",
                      "direction": "horizontal",
                      "columns": 2,
                      "spacing": 4,
                      "thumbnail_size": 256
                    },
                    "additional_image_urls": [
                      "https://example.com/second.png"
                    ]
                  }
                },
                "contact_sheet": {
                  "summary": "Composition: contact_sheet",
                  "description": "Generate a bounded thumbnail contact sheet from up to eight HTTPS inputs.",
                  "value": {
                    "image_url": "https://example.com/image.png",
                    "operation": "contact_sheet",
                    "params": {
                      "format": "webp",
                      "quality": 85,
                      "background": "#FFFFFF",
                      "direction": "horizontal",
                      "columns": 2,
                      "spacing": 4,
                      "thumbnail_size": 256
                    },
                    "additional_image_urls": [
                      "https://example.com/second.png"
                    ]
                  }
                },
                "draw_text": {
                  "summary": "Drawing: draw_text",
                  "description": "Draw literal text with a fixed server font and validated coordinates, color and opacity.",
                  "value": {
                    "image_url": "https://example.com/image.png",
                    "operation": "draw_text",
                    "params": {
                      "format": "webp",
                      "quality": 85,
                      "x": 0,
                      "y": 0,
                      "color": "#FF0000",
                      "opacity": 1,
                      "text": "ImageOps",
                      "size": 24,
                      "font": "DejaVu Sans"
                    }
                  }
                },
                "draw_rect": {
                  "summary": "Drawing: draw_rect",
                  "description": "Draw an in-bounds rectangle.",
                  "value": {
                    "image_url": "https://example.com/image.png",
                    "operation": "draw_rect",
                    "params": {
                      "format": "webp",
                      "quality": 85,
                      "x": 0,
                      "y": 0,
                      "color": "#FF0000",
                      "opacity": 1,
                      "width": 8,
                      "height": 8,
                      "fill": true
                    }
                  }
                },
                "draw_line": {
                  "summary": "Drawing: draw_line",
                  "description": "Draw a line between two in-bounds coordinates.",
                  "value": {
                    "image_url": "https://example.com/image.png",
                    "operation": "draw_line",
                    "params": {
                      "format": "webp",
                      "quality": 85,
                      "x": 0,
                      "y": 0,
                      "color": "#FF0000",
                      "opacity": 1,
                      "x2": 8,
                      "y2": 8
                    }
                  }
                },
                "draw_circle": {
                  "summary": "Drawing: draw_circle",
                  "description": "Draw an in-bounds circle.",
                  "value": {
                    "image_url": "https://example.com/image.png",
                    "operation": "draw_circle",
                    "params": {
                      "format": "webp",
                      "quality": 85,
                      "x": 8,
                      "y": 8,
                      "color": "#FF0000",
                      "opacity": 1,
                      "radius": 4,
                      "fill": true
                    }
                  }
                },
                "animation_info": {
                  "summary": "Animation: animation_info",
                  "description": "Read GIF or animated WebP frame count, duration and loop. Maximum 64 frames; no animation conversion.",
                  "value": {
                    "image_url": "https://example.com/image.png",
                    "operation": "animation_info",
                    "params": {}
                  }
                },
                "extract_frame": {
                  "summary": "Animation: extract_frame",
                  "description": "Extract one GIF/WebP frame, at most 64 frames and 20 MP cumulative decoded pixels.",
                  "value": {
                    "image_url": "https://example.com/image.png",
                    "operation": "extract_frame",
                    "params": {
                      "format": "webp",
                      "quality": 85,
                      "frame_index": 0
                    }
                  }
                },
                "page_info": {
                  "summary": "Multipage: page_info",
                  "description": "Read PDF, TIFF or HEIF page count; maximum 32 pages.",
                  "value": {
                    "image_url": "https://example.com/image.png",
                    "operation": "page_info",
                    "params": {}
                  }
                },
                "extract_page": {
                  "summary": "Multipage: extract_page",
                  "description": "Extract one PDF/TIFF/HEIF page; final decoded image capped at 10 MP.",
                  "value": {
                    "image_url": "https://example.com/image.png",
                    "operation": "extract_page",
                    "params": {
                      "format": "webp",
                      "quality": 85,
                      "page_index": 0
                    }
                  }
                },
                "pdf_to_image": {
                  "summary": "Multipage: pdf_to_image",
                  "description": "Render one PDF page, maximum 150 DPI, page index 31 and 10 MP.",
                  "value": {
                    "image_url": "https://example.com/image.png",
                    "operation": "pdf_to_image",
                    "params": {
                      "format": "webp",
                      "quality": 85,
                      "page": 0,
                      "dpi": 72
                    }
                  }
                },
                "tile": {
                  "summary": "Large Image: tile",
                  "description": "Create bounded non-overlapping tiles with UUID manifest/archive URLs; no binary response.",
                  "value": {
                    "image_url": "https://example.com/image.png",
                    "operation": "tile",
                    "params": {
                      "tile_size": 512,
                      "quality": 80
                    }
                  }
                },
                "deepzoom": {
                  "summary": "Large Image: deepzoom",
                  "description": "Create a multiresolution tile pyramid with bounded manifest/archive URLs.",
                  "value": {
                    "image_url": "https://example.com/image.png",
                    "operation": "deepzoom",
                    "params": {
                      "tile_size": 512,
                      "quality": 80
                    }
                  }
                },
                "pyramid": {
                  "summary": "Large Image: pyramid",
                  "description": "Create bounded multiresolution tiles; maximum 20 MP, 256 tiles and 25 MB aggregate package.",
                  "value": {
                    "image_url": "https://example.com/image.png",
                    "operation": "pyramid",
                    "params": {
                      "tile_size": 512,
                      "quality": 80
                    }
                  }
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "JSON success: analysis, single transform, or bounded tile package",
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "type": "object",
                      "required": [
                        "ok",
                        "operation",
                        "data"
                      ],
                      "properties": {
                        "ok": {
                          "const": true
                        },
                        "operation": {
                          "type": "string"
                        },
                        "data": {
                          "type": "object"
                        },
                        "latency_ms": {
                          "type": "number"
                        }
                      }
                    },
                    {
                      "type": "object",
                      "required": [
                        "ok",
                        "operation",
                        "output"
                      ],
                      "properties": {
                        "ok": {
                          "const": true
                        },
                        "operation": {
                          "type": "string"
                        },
                        "output": {
                          "$ref": "#/components/schemas/OutputInfo"
                        }
                      }
                    },
                    {
                      "type": "object",
                      "required": [
                        "ok",
                        "manifest_url",
                        "archive_url"
                      ],
                      "properties": {
                        "ok": {
                          "const": true
                        },
                        "outputs": {
                          "type": "array",
                          "maxItems": 0
                        },
                        "manifest_url": {
                          "type": "string",
                          "format": "uri"
                        },
                        "archive_url": {
                          "type": "string",
                          "format": "uri"
                        },
                        "tile_base_url": {
                          "type": "string",
                          "format": "uri"
                        },
                        "tile_count": {
                          "type": "integer",
                          "maximum": 256
                        }
                      }
                    },
                    {
                      "type": "object",
                      "required": [
                        "ok",
                        "operation",
                        "input"
                      ],
                      "properties": {
                        "ok": {
                          "const": true
                        },
                        "operation": {
                          "enum": [
                            "inspect",
                            "stats"
                          ]
                        },
                        "input": {
                          "type": "object"
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "405": {
            "description": "Method Not Allowed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "413": {
            "description": "Request Entity Too Large",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Entity",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "429": {
            "description": "Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "502": {
            "description": "Bad Gateway",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "503": {
            "description": "Service Busy",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "504": {
            "description": "Gateway Timeout",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          },
          "507": {
            "description": "Insufficient Storage",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorResponse"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "AdaptiveParams": {
        "properties": {
          "format": {
            "type": "string",
            "enum": [
              "jpeg",
              "png",
              "webp"
            ],
            "title": "Format",
            "default": "webp"
          },
          "quality": {
            "type": "integer",
            "maximum": 100.0,
            "minimum": 1.0,
            "title": "Quality",
            "default": 85
          },
          "window": {
            "type": "integer",
            "enum": [
              3,
              5,
              7,
              9,
              15,
              31
            ],
            "title": "Window",
            "default": 7
          },
          "offset": {
            "type": "integer",
            "maximum": 64.0,
            "minimum": -64.0,
            "title": "Offset",
            "default": 5
          }
        },
        "additionalProperties": false,
        "type": "object",
        "title": "AdaptiveParams"
      },
      "AdaptiveThresholdExpandedRequest": {
        "properties": {
          "image_url": {
            "type": "string",
            "maxLength": 8192,
            "minLength": 1,
            "title": "Image Url"
          },
          "operation": {
            "type": "string",
            "const": "adaptive_threshold",
            "title": "Operation",
            "default": "adaptive_threshold"
          },
          "params": {
            "$ref": "#/components/schemas/AdaptiveParams"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "image_url"
        ],
        "title": "AdaptiveThresholdExpandedRequest",
        "description": "Threshold against a local mean with bounded offset and window."
      },
      "AddBackgroundExpandedRequest": {
        "properties": {
          "image_url": {
            "type": "string",
            "maxLength": 8192,
            "minLength": 1,
            "title": "Image Url"
          },
          "operation": {
            "type": "string",
            "const": "add_background",
            "title": "Operation",
            "default": "add_background"
          },
          "params": {
            "$ref": "#/components/schemas/BackgroundParams"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "image_url"
        ],
        "title": "AddBackgroundExpandedRequest",
        "description": "Flatten transparency onto a solid validated background."
      },
      "AnimationInfoExpandedRequest": {
        "properties": {
          "image_url": {
            "type": "string",
            "maxLength": 8192,
            "minLength": 1,
            "title": "Image Url"
          },
          "operation": {
            "type": "string",
            "const": "animation_info",
            "title": "Operation",
            "default": "animation_info"
          },
          "params": {
            "$ref": "#/components/schemas/EmptyParams"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "image_url"
        ],
        "title": "AnimationInfoExpandedRequest",
        "description": "Read GIF or animated WebP frame count, duration and loop. Maximum 64 frames; no animation conversion."
      },
      "ApplyMaskExpandedRequest": {
        "properties": {
          "image_url": {
            "type": "string",
            "maxLength": 8192,
            "minLength": 1,
            "title": "Image Url"
          },
          "operation": {
            "type": "string",
            "const": "apply_mask",
            "title": "Operation",
            "default": "apply_mask"
          },
          "params": {
            "$ref": "#/components/schemas/OutputParams"
          },
          "second_image_url": {
            "type": "string",
            "maxLength": 8192,
            "minLength": 1,
            "title": "Second Image Url"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "image_url",
          "second_image_url"
        ],
        "title": "ApplyMaskExpandedRequest",
        "description": "Multiply original alpha by an equally sized grayscale second image mask."
      },
      "AutoOrientRequest": {
        "properties": {
          "image_url": {
            "type": "string",
            "maxLength": 8192,
            "minLength": 1,
            "title": "Image Url"
          },
          "operation": {
            "type": "string",
            "const": "auto_orient",
            "title": "Operation",
            "default": "auto_orient"
          },
          "params": {
            "$ref": "#/components/schemas/OutputParams"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "image_url"
        ],
        "title": "AutoOrientRequest",
        "description": "Correct image orientation using embedded orientation information and normalize the written output."
      },
      "BackgroundParams": {
        "properties": {
          "format": {
            "type": "string",
            "enum": [
              "jpeg",
              "png",
              "webp"
            ],
            "title": "Format",
            "default": "webp"
          },
          "quality": {
            "type": "integer",
            "maximum": 100.0,
            "minimum": 1.0,
            "title": "Quality",
            "default": 85
          },
          "background": {
            "type": "string",
            "pattern": "^#[0-9A-Fa-f]{6}$",
            "title": "Background",
            "default": "#FFFFFF"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "title": "BackgroundParams"
      },
      "BlurParams": {
        "properties": {
          "format": {
            "type": "string",
            "enum": [
              "jpeg",
              "png",
              "webp"
            ],
            "title": "Format",
            "default": "webp"
          },
          "quality": {
            "type": "integer",
            "maximum": 100.0,
            "minimum": 1.0,
            "title": "Quality",
            "default": 85
          },
          "sigma": {
            "type": "number",
            "maximum": 25.0,
            "minimum": 0.1,
            "title": "Sigma"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "sigma"
        ],
        "title": "BlurParams"
      },
      "BlurRequest": {
        "properties": {
          "image_url": {
            "type": "string",
            "maxLength": 8192,
            "minLength": 1,
            "title": "Image Url"
          },
          "operation": {
            "type": "string",
            "const": "blur",
            "title": "Operation",
            "default": "blur"
          },
          "params": {
            "$ref": "#/components/schemas/BlurParams"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "image_url",
          "params"
        ],
        "title": "BlurRequest",
        "description": "Apply controlled image blur with sigma from 0.1 to 25.0; decoded inputs are limited to 20 megapixels."
      },
      "BrightnessParams": {
        "properties": {
          "format": {
            "type": "string",
            "enum": [
              "jpeg",
              "png",
              "webp"
            ],
            "title": "Format",
            "default": "webp"
          },
          "quality": {
            "type": "integer",
            "maximum": 100.0,
            "minimum": 1.0,
            "title": "Quality",
            "default": 85
          },
          "amount": {
            "type": "number",
            "maximum": 100.0,
            "minimum": -100.0,
            "title": "Amount",
            "description": "Brightness offset in percent of the 8-bit range."
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "amount"
        ],
        "title": "BrightnessParams"
      },
      "BrightnessRequest": {
        "properties": {
          "image_url": {
            "type": "string",
            "maxLength": 8192,
            "minLength": 1,
            "title": "Image Url"
          },
          "operation": {
            "type": "string",
            "const": "brightness",
            "title": "Operation",
            "default": "brightness"
          },
          "params": {
            "$ref": "#/components/schemas/BrightnessParams"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "image_url",
          "params"
        ],
        "title": "BrightnessRequest",
        "description": "Adjust image brightness from -100 to 100 percent of the 8-bit sample range."
      },
      "ChannelParams": {
        "properties": {
          "format": {
            "type": "string",
            "enum": [
              "jpeg",
              "png",
              "webp"
            ],
            "title": "Format",
            "default": "webp"
          },
          "quality": {
            "type": "integer",
            "maximum": 100.0,
            "minimum": 1.0,
            "title": "Quality",
            "default": 85
          },
          "channel": {
            "type": "string",
            "enum": [
              "r",
              "g",
              "b",
              "alpha",
              "gray"
            ],
            "title": "Channel",
            "default": "r"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "title": "ChannelParams"
      },
      "CircleParams": {
        "properties": {
          "format": {
            "type": "string",
            "enum": [
              "jpeg",
              "png",
              "webp"
            ],
            "title": "Format",
            "default": "webp"
          },
          "quality": {
            "type": "integer",
            "maximum": 100.0,
            "minimum": 1.0,
            "title": "Quality",
            "default": 85
          },
          "x": {
            "type": "integer",
            "maximum": 16383.0,
            "minimum": 0.0,
            "title": "X",
            "default": 0
          },
          "y": {
            "type": "integer",
            "maximum": 16383.0,
            "minimum": 0.0,
            "title": "Y",
            "default": 0
          },
          "color": {
            "type": "string",
            "pattern": "^#[0-9A-Fa-f]{6}$",
            "title": "Color",
            "default": "#FF0000"
          },
          "opacity": {
            "type": "number",
            "maximum": 1.0,
            "minimum": 0.0,
            "title": "Opacity",
            "default": 1
          },
          "radius": {
            "type": "integer",
            "maximum": 8192.0,
            "minimum": 1.0,
            "title": "Radius",
            "default": 4
          },
          "fill": {
            "type": "boolean",
            "title": "Fill",
            "default": true
          }
        },
        "additionalProperties": false,
        "type": "object",
        "title": "CircleParams"
      },
      "ColorspaceExpandedRequest": {
        "properties": {
          "image_url": {
            "type": "string",
            "maxLength": 8192,
            "minLength": 1,
            "title": "Image Url"
          },
          "operation": {
            "type": "string",
            "const": "colorspace",
            "title": "Operation",
            "default": "colorspace"
          },
          "params": {
            "$ref": "#/components/schemas/ColorspaceParams"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "image_url"
        ],
        "title": "ColorspaceExpandedRequest",
        "description": "Evaluate a permitted color-space transform and render the encoded result in display sRGB. Requested intermediate space is reported."
      },
      "ColorspaceParams": {
        "properties": {
          "format": {
            "type": "string",
            "enum": [
              "jpeg",
              "png",
              "webp"
            ],
            "title": "Format",
            "default": "webp"
          },
          "quality": {
            "type": "integer",
            "maximum": 100.0,
            "minimum": 1.0,
            "title": "Quality",
            "default": 85
          },
          "space": {
            "type": "string",
            "enum": [
              "srgb",
              "rgb",
              "gray",
              "lab",
              "xyz",
              "cmyk"
            ],
            "title": "Space",
            "default": "srgb"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "title": "ColorspaceParams"
      },
      "CompareExpandedRequest": {
        "properties": {
          "image_url": {
            "type": "string",
            "maxLength": 8192,
            "minLength": 1,
            "title": "Image Url"
          },
          "operation": {
            "type": "string",
            "const": "compare",
            "title": "Operation",
            "default": "compare"
          },
          "params": {
            "$ref": "#/components/schemas/EmptyParams"
          },
          "second_image_url": {
            "type": "string",
            "maxLength": 8192,
            "minLength": 1,
            "title": "Second Image Url"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "image_url",
          "second_image_url"
        ],
        "title": "CompareExpandedRequest",
        "description": "Compare equally sized images: MAE, RMSE and maximum color difference. Requires second_image_url."
      },
      "CompositeExpandedRequest": {
        "properties": {
          "image_url": {
            "type": "string",
            "maxLength": 8192,
            "minLength": 1,
            "title": "Image Url"
          },
          "operation": {
            "type": "string",
            "const": "composite",
            "title": "Operation",
            "default": "composite"
          },
          "params": {
            "$ref": "#/components/schemas/CompositeParams"
          },
          "second_image_url": {
            "type": "string",
            "maxLength": 8192,
            "minLength": 1,
            "title": "Second Image Url"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "image_url",
          "second_image_url"
        ],
        "title": "CompositeExpandedRequest",
        "description": "Composite a second HTTPS image using a permitted blend. Combined inputs limited to 20 MP."
      },
      "CompositeParams": {
        "properties": {
          "format": {
            "type": "string",
            "enum": [
              "jpeg",
              "png",
              "webp"
            ],
            "title": "Format",
            "default": "webp"
          },
          "quality": {
            "type": "integer",
            "maximum": 100.0,
            "minimum": 1.0,
            "title": "Quality",
            "default": 85
          },
          "blend": {
            "type": "string",
            "enum": [
              "over",
              "multiply",
              "screen",
              "overlay",
              "darken",
              "lighten"
            ],
            "title": "Blend",
            "default": "over"
          },
          "x": {
            "type": "integer",
            "maximum": 16383.0,
            "minimum": 0.0,
            "title": "X",
            "default": 0
          },
          "y": {
            "type": "integer",
            "maximum": 16383.0,
            "minimum": 0.0,
            "title": "Y",
            "default": 0
          },
          "opacity": {
            "type": "number",
            "maximum": 1.0,
            "minimum": 0.0,
            "title": "Opacity",
            "default": 1
          }
        },
        "additionalProperties": false,
        "type": "object",
        "title": "CompositeParams"
      },
      "CompressParams": {
        "properties": {
          "format": {
            "type": "string",
            "enum": [
              "jpeg",
              "png",
              "webp"
            ],
            "title": "Format",
            "default": "webp"
          },
          "quality": {
            "type": "integer",
            "maximum": 100.0,
            "minimum": 1.0,
            "title": "Quality",
            "default": 85
          },
          "lossless": {
            "type": "boolean",
            "title": "Lossless",
            "default": false
          }
        },
        "additionalProperties": false,
        "type": "object",
        "title": "CompressParams"
      },
      "CompressRequest": {
        "properties": {
          "image_url": {
            "type": "string",
            "maxLength": 8192,
            "minLength": 1,
            "title": "Image Url"
          },
          "operation": {
            "type": "string",
            "const": "compress",
            "title": "Operation",
            "default": "compress"
          },
          "params": {
            "$ref": "#/components/schemas/CompressParams"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "image_url"
        ],
        "title": "CompressRequest",
        "description": "Reduce encoded image size using JPEG, PNG or WebP output and validated quality settings; WebP may use lossless mode."
      },
      "ContactSheetExpandedRequest": {
        "properties": {
          "image_url": {
            "type": "string",
            "maxLength": 8192,
            "minLength": 1,
            "title": "Image Url"
          },
          "operation": {
            "type": "string",
            "const": "contact_sheet",
            "title": "Operation",
            "default": "contact_sheet"
          },
          "params": {
            "$ref": "#/components/schemas/LayoutParams"
          },
          "additional_image_urls": {
            "items": {
              "type": "string",
              "maxLength": 8192,
              "minLength": 1
            },
            "type": "array",
            "maxItems": 7,
            "minItems": 1,
            "title": "Additional Image Urls"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "image_url",
          "additional_image_urls"
        ],
        "title": "ContactSheetExpandedRequest",
        "description": "Generate a bounded thumbnail contact sheet from up to eight HTTPS inputs."
      },
      "ContrastParams": {
        "properties": {
          "format": {
            "type": "string",
            "enum": [
              "jpeg",
              "png",
              "webp"
            ],
            "title": "Format",
            "default": "webp"
          },
          "quality": {
            "type": "integer",
            "maximum": 100.0,
            "minimum": 1.0,
            "title": "Quality",
            "default": 85
          },
          "amount": {
            "type": "number",
            "maximum": 100.0,
            "minimum": -100.0,
            "title": "Amount",
            "description": "Contrast adjustment in percent around midpoint 128."
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "amount"
        ],
        "title": "ContrastParams"
      },
      "ContrastRequest": {
        "properties": {
          "image_url": {
            "type": "string",
            "maxLength": 8192,
            "minLength": 1,
            "title": "Image Url"
          },
          "operation": {
            "type": "string",
            "const": "contrast",
            "title": "Operation",
            "default": "contrast"
          },
          "params": {
            "$ref": "#/components/schemas/ContrastParams"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "image_url",
          "params"
        ],
        "title": "ContrastRequest",
        "description": "Adjust image contrast from -100 to 100 percent around the 8-bit midpoint."
      },
      "ConvertParams": {
        "properties": {
          "format": {
            "type": "string",
            "enum": [
              "jpeg",
              "jpg",
              "png",
              "webp",
              "avif",
              "heic",
              "heif"
            ],
            "title": "Format"
          },
          "quality": {
            "type": "integer",
            "maximum": 100.0,
            "minimum": 1.0,
            "title": "Quality",
            "description": "Encoder quality for JPEG, WebP, AVIF and HEIC/HEIF; ignored for lossless PNG.",
            "default": 85
          },
          "background": {
            "type": "string",
            "pattern": "^#[0-9A-Fa-f]{6}$",
            "title": "Background",
            "default": "#FFFFFF"
          },
          "strip_metadata": {
            "type": "boolean",
            "const": true,
            "title": "Strip Metadata",
            "description": "Metadata is always removed by the production safety policy; false is not accepted.",
            "default": true
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "format"
        ],
        "title": "ConvertParams"
      },
      "ConvertRequest": {
        "properties": {
          "image_url": {
            "type": "string",
            "maxLength": 8192,
            "minLength": 1,
            "title": "Image Url"
          },
          "operation": {
            "type": "string",
            "const": "convert",
            "title": "Operation",
            "default": "convert"
          },
          "params": {
            "$ref": "#/components/schemas/ConvertParams"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "image_url",
          "params"
        ],
        "title": "ConvertRequest",
        "description": "Convert JPEG/JPG/JFIF, PNG, WebP, GIF, BMP, TIFF/TIF, AVIF, HEIC/HEIF or ICO input to JPEG, PNG, WebP, AVIF or HEIC/HEIF. Animated and multipage sources use only their first frame or page. Metadata is removed and JPEG transparency is flattened onto white by default or a validated background color."
      },
      "ConvolveExpandedRequest": {
        "properties": {
          "image_url": {
            "type": "string",
            "maxLength": 8192,
            "minLength": 1,
            "title": "Image Url"
          },
          "operation": {
            "type": "string",
            "const": "convolve",
            "title": "Operation",
            "default": "convolve"
          },
          "params": {
            "$ref": "#/components/schemas/ConvolveParams"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "image_url"
        ],
        "title": "ConvolveExpandedRequest",
        "description": "Apply one fixed convolution preset; custom matrices are rejected."
      },
      "ConvolveParams": {
        "properties": {
          "format": {
            "type": "string",
            "enum": [
              "jpeg",
              "png",
              "webp"
            ],
            "title": "Format",
            "default": "webp"
          },
          "quality": {
            "type": "integer",
            "maximum": 100.0,
            "minimum": 1.0,
            "title": "Quality",
            "default": 85
          },
          "preset": {
            "type": "string",
            "enum": [
              "edge",
              "sharpen",
              "emboss",
              "gaussian",
              "box"
            ],
            "title": "Preset",
            "default": "edge"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "title": "ConvolveParams"
      },
      "CropParams": {
        "properties": {
          "format": {
            "type": "string",
            "enum": [
              "jpeg",
              "png",
              "webp"
            ],
            "title": "Format",
            "default": "webp"
          },
          "quality": {
            "type": "integer",
            "maximum": 100.0,
            "minimum": 1.0,
            "title": "Quality",
            "default": 85
          },
          "left": {
            "type": "integer",
            "maximum": 16383.0,
            "minimum": 0.0,
            "title": "Left"
          },
          "top": {
            "type": "integer",
            "maximum": 16383.0,
            "minimum": 0.0,
            "title": "Top"
          },
          "width": {
            "type": "integer",
            "maximum": 16384.0,
            "minimum": 1.0,
            "title": "Width"
          },
          "height": {
            "type": "integer",
            "maximum": 16384.0,
            "minimum": 1.0,
            "title": "Height"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "left",
          "top",
          "width",
          "height"
        ],
        "title": "CropParams"
      },
      "CropRequest": {
        "properties": {
          "image_url": {
            "type": "string",
            "maxLength": 8192,
            "minLength": 1,
            "title": "Image Url"
          },
          "operation": {
            "type": "string",
            "const": "crop",
            "title": "Operation",
            "default": "crop"
          },
          "params": {
            "$ref": "#/components/schemas/CropParams"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "image_url",
          "params"
        ],
        "title": "CropRequest",
        "description": "Extract a specified rectangular region from an image using validated pixel coordinates."
      },
      "DeepzoomExpandedRequest": {
        "properties": {
          "image_url": {
            "type": "string",
            "maxLength": 8192,
            "minLength": 1,
            "title": "Image Url"
          },
          "operation": {
            "type": "string",
            "const": "deepzoom",
            "title": "Operation",
            "default": "deepzoom"
          },
          "params": {
            "$ref": "#/components/schemas/TileParams"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "image_url"
        ],
        "title": "DeepzoomExpandedRequest",
        "description": "Create a multiresolution tile pyramid with bounded manifest/archive URLs."
      },
      "DetectFormatExpandedRequest": {
        "properties": {
          "image_url": {
            "type": "string",
            "maxLength": 8192,
            "minLength": 1,
            "title": "Image Url"
          },
          "operation": {
            "type": "string",
            "const": "detect_format",
            "title": "Operation",
            "default": "detect_format"
          },
          "params": {
            "$ref": "#/components/schemas/EmptyParams"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "image_url"
        ],
        "title": "DetectFormatExpandedRequest",
        "description": "Detect actual file content, dimensions, alpha and frame/page counts; ignores URL extension."
      },
      "DifferenceExpandedRequest": {
        "properties": {
          "image_url": {
            "type": "string",
            "maxLength": 8192,
            "minLength": 1,
            "title": "Image Url"
          },
          "operation": {
            "type": "string",
            "const": "difference",
            "title": "Operation",
            "default": "difference"
          },
          "params": {
            "$ref": "#/components/schemas/OutputParams"
          },
          "second_image_url": {
            "type": "string",
            "maxLength": 8192,
            "minLength": 1,
            "title": "Second Image Url"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "image_url",
          "second_image_url"
        ],
        "title": "DifferenceExpandedRequest",
        "description": "Write an absolute color difference image and bounded comparison statistics. Requires second_image_url."
      },
      "DilateExpandedRequest": {
        "properties": {
          "image_url": {
            "type": "string",
            "maxLength": 8192,
            "minLength": 1,
            "title": "Image Url"
          },
          "operation": {
            "type": "string",
            "const": "dilate",
            "title": "Operation",
            "default": "dilate"
          },
          "params": {
            "$ref": "#/components/schemas/LocalParams"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "image_url"
        ],
        "title": "DilateExpandedRequest",
        "description": "Dilate a binary image using a bounded square kernel."
      },
      "DominantColorExpandedRequest": {
        "properties": {
          "image_url": {
            "type": "string",
            "maxLength": 8192,
            "minLength": 1,
            "title": "Image Url"
          },
          "operation": {
            "type": "string",
            "const": "dominant_color",
            "title": "Operation",
            "default": "dominant_color"
          },
          "params": {
            "$ref": "#/components/schemas/DominantParams"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "image_url"
        ],
        "title": "DominantColorExpandedRequest",
        "description": "Return approximate quantized dominant RGB colors and proportions from a bounded thumbnail."
      },
      "DominantParams": {
        "properties": {
          "count": {
            "type": "integer",
            "maximum": 16.0,
            "minimum": 1.0,
            "title": "Count",
            "default": 5
          }
        },
        "additionalProperties": false,
        "type": "object",
        "title": "DominantParams"
      },
      "DrawCircleExpandedRequest": {
        "properties": {
          "image_url": {
            "type": "string",
            "maxLength": 8192,
            "minLength": 1,
            "title": "Image Url"
          },
          "operation": {
            "type": "string",
            "const": "draw_circle",
            "title": "Operation",
            "default": "draw_circle"
          },
          "params": {
            "$ref": "#/components/schemas/CircleParams"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "image_url"
        ],
        "title": "DrawCircleExpandedRequest",
        "description": "Draw an in-bounds circle."
      },
      "DrawLineExpandedRequest": {
        "properties": {
          "image_url": {
            "type": "string",
            "maxLength": 8192,
            "minLength": 1,
            "title": "Image Url"
          },
          "operation": {
            "type": "string",
            "const": "draw_line",
            "title": "Operation",
            "default": "draw_line"
          },
          "params": {
            "$ref": "#/components/schemas/LineParams"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "image_url"
        ],
        "title": "DrawLineExpandedRequest",
        "description": "Draw a line between two in-bounds coordinates."
      },
      "DrawRectExpandedRequest": {
        "properties": {
          "image_url": {
            "type": "string",
            "maxLength": 8192,
            "minLength": 1,
            "title": "Image Url"
          },
          "operation": {
            "type": "string",
            "const": "draw_rect",
            "title": "Operation",
            "default": "draw_rect"
          },
          "params": {
            "$ref": "#/components/schemas/RectParams"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "image_url"
        ],
        "title": "DrawRectExpandedRequest",
        "description": "Draw an in-bounds rectangle."
      },
      "DrawTextExpandedRequest": {
        "properties": {
          "image_url": {
            "type": "string",
            "maxLength": 8192,
            "minLength": 1,
            "title": "Image Url"
          },
          "operation": {
            "type": "string",
            "const": "draw_text",
            "title": "Operation",
            "default": "draw_text"
          },
          "params": {
            "$ref": "#/components/schemas/TextParams"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "image_url"
        ],
        "title": "DrawTextExpandedRequest",
        "description": "Draw literal text with a fixed server font and validated coordinates, color and opacity."
      },
      "EdgeDetectExpandedRequest": {
        "properties": {
          "image_url": {
            "type": "string",
            "maxLength": 8192,
            "minLength": 1,
            "title": "Image Url"
          },
          "operation": {
            "type": "string",
            "const": "edge_detect",
            "title": "Operation",
            "default": "edge_detect"
          },
          "params": {
            "$ref": "#/components/schemas/EdgeParams"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "image_url"
        ],
        "title": "EdgeDetectExpandedRequest",
        "description": "Extract Sobel edges."
      },
      "EdgeParams": {
        "properties": {
          "format": {
            "type": "string",
            "enum": [
              "jpeg",
              "png",
              "webp"
            ],
            "title": "Format",
            "default": "webp"
          },
          "quality": {
            "type": "integer",
            "maximum": 100.0,
            "minimum": 1.0,
            "title": "Quality",
            "default": 85
          },
          "method": {
            "type": "string",
            "const": "sobel",
            "title": "Method",
            "default": "sobel"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "title": "EdgeParams"
      },
      "EmbossExpandedRequest": {
        "properties": {
          "image_url": {
            "type": "string",
            "maxLength": 8192,
            "minLength": 1,
            "title": "Image Url"
          },
          "operation": {
            "type": "string",
            "const": "emboss",
            "title": "Operation",
            "default": "emboss"
          },
          "params": {
            "$ref": "#/components/schemas/OutputParams"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "image_url"
        ],
        "title": "EmbossExpandedRequest",
        "description": "Render a fixed emboss kernel."
      },
      "EmptyParams": {
        "properties": {},
        "additionalProperties": false,
        "type": "object",
        "title": "EmptyParams"
      },
      "EntropyExpandedRequest": {
        "properties": {
          "image_url": {
            "type": "string",
            "maxLength": 8192,
            "minLength": 1,
            "title": "Image Url"
          },
          "operation": {
            "type": "string",
            "const": "entropy",
            "title": "Operation",
            "default": "entropy"
          },
          "params": {
            "$ref": "#/components/schemas/EmptyParams"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "image_url"
        ],
        "title": "EntropyExpandedRequest",
        "description": "Return grayscale Shannon entropy in bits per sample."
      },
      "ErodeExpandedRequest": {
        "properties": {
          "image_url": {
            "type": "string",
            "maxLength": 8192,
            "minLength": 1,
            "title": "Image Url"
          },
          "operation": {
            "type": "string",
            "const": "erode",
            "title": "Operation",
            "default": "erode"
          },
          "params": {
            "$ref": "#/components/schemas/LocalParams"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "image_url"
        ],
        "title": "ErodeExpandedRequest",
        "description": "Erode a binary image using a bounded square kernel."
      },
      "ErrorDetail": {
        "properties": {
          "code": {
            "type": "string",
            "title": "Code"
          }
        },
        "type": "object",
        "required": [
          "code"
        ],
        "title": "ErrorDetail"
      },
      "ErrorResponse": {
        "properties": {
          "ok": {
            "type": "boolean",
            "const": false,
            "title": "Ok",
            "default": false
          },
          "failure": {
            "$ref": "#/components/schemas/ErrorDetail"
          }
        },
        "type": "object",
        "required": [
          "failure"
        ],
        "title": "ErrorResponse"
      },
      "ExtractAlphaExpandedRequest": {
        "properties": {
          "image_url": {
            "type": "string",
            "maxLength": 8192,
            "minLength": 1,
            "title": "Image Url"
          },
          "operation": {
            "type": "string",
            "const": "extract_alpha",
            "title": "Operation",
            "default": "extract_alpha"
          },
          "params": {
            "$ref": "#/components/schemas/OutputParams"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "image_url"
        ],
        "title": "ExtractAlphaExpandedRequest",
        "description": "Extract alpha as grayscale; opaque inputs return a solid white mask."
      },
      "ExtractChannelExpandedRequest": {
        "properties": {
          "image_url": {
            "type": "string",
            "maxLength": 8192,
            "minLength": 1,
            "title": "Image Url"
          },
          "operation": {
            "type": "string",
            "const": "extract_channel",
            "title": "Operation",
            "default": "extract_channel"
          },
          "params": {
            "$ref": "#/components/schemas/ChannelParams"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "image_url"
        ],
        "title": "ExtractChannelExpandedRequest",
        "description": "Extract one permitted color, gray or alpha channel."
      },
      "ExtractFrameExpandedRequest": {
        "properties": {
          "image_url": {
            "type": "string",
            "maxLength": 8192,
            "minLength": 1,
            "title": "Image Url"
          },
          "operation": {
            "type": "string",
            "const": "extract_frame",
            "title": "Operation",
            "default": "extract_frame"
          },
          "params": {
            "$ref": "#/components/schemas/FrameParams"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "image_url"
        ],
        "title": "ExtractFrameExpandedRequest",
        "description": "Extract one GIF/WebP frame, at most 64 frames and 20 MP cumulative decoded pixels."
      },
      "ExtractPageExpandedRequest": {
        "properties": {
          "image_url": {
            "type": "string",
            "maxLength": 8192,
            "minLength": 1,
            "title": "Image Url"
          },
          "operation": {
            "type": "string",
            "const": "extract_page",
            "title": "Operation",
            "default": "extract_page"
          },
          "params": {
            "$ref": "#/components/schemas/PageParams"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "image_url"
        ],
        "title": "ExtractPageExpandedRequest",
        "description": "Extract one PDF/TIFF/HEIF page; final decoded image capped at 10 MP."
      },
      "FlattenParams": {
        "properties": {
          "format": {
            "type": "string",
            "enum": [
              "jpeg",
              "png",
              "webp"
            ],
            "title": "Format",
            "default": "webp"
          },
          "quality": {
            "type": "integer",
            "maximum": 100.0,
            "minimum": 1.0,
            "title": "Quality",
            "default": 85
          },
          "background": {
            "type": "string",
            "pattern": "^#[0-9A-Fa-f]{6}$",
            "title": "Background",
            "default": "#ffffff"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "title": "FlattenParams"
      },
      "FlattenRequest": {
        "properties": {
          "image_url": {
            "type": "string",
            "maxLength": 8192,
            "minLength": 1,
            "title": "Image Url"
          },
          "operation": {
            "type": "string",
            "const": "flatten",
            "title": "Operation",
            "default": "flatten"
          },
          "params": {
            "$ref": "#/components/schemas/FlattenParams"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "image_url"
        ],
        "title": "FlattenRequest",
        "description": "Composite transparency onto a specified solid background."
      },
      "FlipParams": {
        "properties": {
          "format": {
            "type": "string",
            "enum": [
              "jpeg",
              "png",
              "webp"
            ],
            "title": "Format",
            "default": "webp"
          },
          "quality": {
            "type": "integer",
            "maximum": 100.0,
            "minimum": 1.0,
            "title": "Quality",
            "default": 85
          },
          "horizontal": {
            "type": "boolean",
            "title": "Horizontal",
            "default": false
          },
          "vertical": {
            "type": "boolean",
            "title": "Vertical",
            "default": false
          }
        },
        "additionalProperties": false,
        "type": "object",
        "title": "FlipParams"
      },
      "FlipRequest": {
        "properties": {
          "image_url": {
            "type": "string",
            "maxLength": 8192,
            "minLength": 1,
            "title": "Image Url"
          },
          "operation": {
            "type": "string",
            "const": "flip",
            "title": "Operation",
            "default": "flip"
          },
          "params": {
            "$ref": "#/components/schemas/FlipParams"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "image_url",
          "params"
        ],
        "title": "FlipRequest",
        "description": "Flip an image horizontally, vertically or on both axes."
      },
      "FrameParams": {
        "properties": {
          "format": {
            "type": "string",
            "enum": [
              "jpeg",
              "png",
              "webp"
            ],
            "title": "Format",
            "default": "webp"
          },
          "quality": {
            "type": "integer",
            "maximum": 100.0,
            "minimum": 1.0,
            "title": "Quality",
            "default": 85
          },
          "frame_index": {
            "type": "integer",
            "maximum": 63.0,
            "minimum": 0.0,
            "title": "Frame Index",
            "default": 0
          }
        },
        "additionalProperties": false,
        "type": "object",
        "title": "FrameParams"
      },
      "GammaParams": {
        "properties": {
          "format": {
            "type": "string",
            "enum": [
              "jpeg",
              "png",
              "webp"
            ],
            "title": "Format",
            "default": "webp"
          },
          "quality": {
            "type": "integer",
            "maximum": 100.0,
            "minimum": 1.0,
            "title": "Quality",
            "default": 85
          },
          "gamma": {
            "type": "number",
            "maximum": 5.0,
            "minimum": 0.1,
            "title": "Gamma",
            "description": "Display gamma; 1.0 leaves samples unchanged."
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "gamma"
        ],
        "title": "GammaParams"
      },
      "GammaRequest": {
        "properties": {
          "image_url": {
            "type": "string",
            "maxLength": 8192,
            "minLength": 1,
            "title": "Image Url"
          },
          "operation": {
            "type": "string",
            "const": "gamma",
            "title": "Operation",
            "default": "gamma"
          },
          "params": {
            "$ref": "#/components/schemas/GammaParams"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "image_url",
          "params"
        ],
        "title": "GammaRequest",
        "description": "Apply gamma correction using a validated value from 0.1 to 5.0."
      },
      "GrayscaleRequest": {
        "properties": {
          "image_url": {
            "type": "string",
            "maxLength": 8192,
            "minLength": 1,
            "title": "Image Url"
          },
          "operation": {
            "type": "string",
            "const": "grayscale",
            "title": "Operation",
            "default": "grayscale"
          },
          "params": {
            "$ref": "#/components/schemas/OutputParams"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "image_url"
        ],
        "title": "GrayscaleRequest",
        "description": "Convert an image to grayscale while preserving transparency when present."
      },
      "GridExpandedRequest": {
        "properties": {
          "image_url": {
            "type": "string",
            "maxLength": 8192,
            "minLength": 1,
            "title": "Image Url"
          },
          "operation": {
            "type": "string",
            "const": "grid",
            "title": "Operation",
            "default": "grid"
          },
          "params": {
            "$ref": "#/components/schemas/LayoutParams"
          },
          "additional_image_urls": {
            "items": {
              "type": "string",
              "maxLength": 8192,
              "minLength": 1
            },
            "type": "array",
            "maxItems": 7,
            "minItems": 1,
            "title": "Additional Image Urls"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "image_url",
          "additional_image_urls"
        ],
        "title": "GridExpandedRequest",
        "description": "Place up to eight HTTPS inputs in a bounded uniform-cell grid."
      },
      "HistEqualizeExpandedRequest": {
        "properties": {
          "image_url": {
            "type": "string",
            "maxLength": 8192,
            "minLength": 1,
            "title": "Image Url"
          },
          "operation": {
            "type": "string",
            "const": "hist_equalize",
            "title": "Operation",
            "default": "hist_equalize"
          },
          "params": {
            "$ref": "#/components/schemas/OutputParams"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "image_url"
        ],
        "title": "HistEqualizeExpandedRequest",
        "description": "Equalize the color histogram; may change appearance substantially."
      },
      "HistogramExpandedRequest": {
        "properties": {
          "image_url": {
            "type": "string",
            "maxLength": 8192,
            "minLength": 1,
            "title": "Image Url"
          },
          "operation": {
            "type": "string",
            "const": "histogram",
            "title": "Operation",
            "default": "histogram"
          },
          "params": {
            "$ref": "#/components/schemas/HistogramParams"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "image_url"
        ],
        "title": "HistogramExpandedRequest",
        "description": "Return bounded per-color-channel counts, up to 256 bins per channel."
      },
      "HistogramParams": {
        "properties": {
          "bins": {
            "type": "integer",
            "enum": [
              16,
              32,
              64,
              128,
              256
            ],
            "title": "Bins",
            "default": 32
          }
        },
        "additionalProperties": false,
        "type": "object",
        "title": "HistogramParams"
      },
      "HueExpandedRequest": {
        "properties": {
          "image_url": {
            "type": "string",
            "maxLength": 8192,
            "minLength": 1,
            "title": "Image Url"
          },
          "operation": {
            "type": "string",
            "const": "hue",
            "title": "Operation",
            "default": "hue"
          },
          "params": {
            "$ref": "#/components/schemas/HueParams"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "image_url"
        ],
        "title": "HueExpandedRequest",
        "description": "Rotate hue by bounded degrees while retaining alpha."
      },
      "HueParams": {
        "properties": {
          "format": {
            "type": "string",
            "enum": [
              "jpeg",
              "png",
              "webp"
            ],
            "title": "Format",
            "default": "webp"
          },
          "quality": {
            "type": "integer",
            "maximum": 100.0,
            "minimum": 1.0,
            "title": "Quality",
            "default": 85
          },
          "degrees": {
            "type": "number",
            "maximum": 180.0,
            "minimum": -180.0,
            "title": "Degrees",
            "default": 15
          }
        },
        "additionalProperties": false,
        "type": "object",
        "title": "HueParams"
      },
      "IdentityResponse": {
        "properties": {
          "service_id": {
            "type": "string",
            "title": "Service Id"
          },
          "api_id": {
            "type": "string",
            "title": "Api Id"
          },
          "version": {
            "type": "string",
            "title": "Version"
          },
          "engine": {
            "type": "string",
            "title": "Engine"
          }
        },
        "type": "object",
        "required": [
          "service_id",
          "api_id",
          "version",
          "engine"
        ],
        "title": "IdentityResponse"
      },
      "InspectRequest": {
        "properties": {
          "image_url": {
            "type": "string",
            "maxLength": 8192,
            "minLength": 1,
            "title": "Image Url"
          },
          "operation": {
            "type": "string",
            "const": "inspect",
            "title": "Operation",
            "default": "inspect"
          },
          "params": {
            "$ref": "#/components/schemas/EmptyParams"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "image_url"
        ],
        "title": "InspectRequest",
        "description": "Read image properties without modifying the image. Returns width, height, format, bands or channels, colorspace, alpha state and source size."
      },
      "InvertExpandedRequest": {
        "properties": {
          "image_url": {
            "type": "string",
            "maxLength": 8192,
            "minLength": 1,
            "title": "Image Url"
          },
          "operation": {
            "type": "string",
            "const": "invert",
            "title": "Operation",
            "default": "invert"
          },
          "params": {
            "$ref": "#/components/schemas/OutputParams"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "image_url"
        ],
        "title": "InvertExpandedRequest",
        "description": "Invert color samples without inverting alpha."
      },
      "JoinExpandedRequest": {
        "properties": {
          "image_url": {
            "type": "string",
            "maxLength": 8192,
            "minLength": 1,
            "title": "Image Url"
          },
          "operation": {
            "type": "string",
            "const": "join",
            "title": "Operation",
            "default": "join"
          },
          "params": {
            "$ref": "#/components/schemas/LayoutParams"
          },
          "additional_image_urls": {
            "items": {
              "type": "string",
              "maxLength": 8192,
              "minLength": 1
            },
            "type": "array",
            "maxItems": 7,
            "minItems": 1,
            "title": "Additional Image Urls"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "image_url",
          "additional_image_urls"
        ],
        "title": "JoinExpandedRequest",
        "description": "Join up to eight HTTPS inputs horizontally or vertically."
      },
      "LaplacianExpandedRequest": {
        "properties": {
          "image_url": {
            "type": "string",
            "maxLength": 8192,
            "minLength": 1,
            "title": "Image Url"
          },
          "operation": {
            "type": "string",
            "const": "laplacian",
            "title": "Operation",
            "default": "laplacian"
          },
          "params": {
            "$ref": "#/components/schemas/OutputParams"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "image_url"
        ],
        "title": "LaplacianExpandedRequest",
        "description": "Render a fixed Laplacian edge kernel."
      },
      "LayoutParams": {
        "properties": {
          "format": {
            "type": "string",
            "enum": [
              "jpeg",
              "png",
              "webp"
            ],
            "title": "Format",
            "default": "webp"
          },
          "quality": {
            "type": "integer",
            "maximum": 100.0,
            "minimum": 1.0,
            "title": "Quality",
            "default": 85
          },
          "background": {
            "type": "string",
            "pattern": "^#[0-9A-Fa-f]{6}$",
            "title": "Background",
            "default": "#FFFFFF"
          },
          "direction": {
            "type": "string",
            "enum": [
              "horizontal",
              "vertical"
            ],
            "title": "Direction",
            "default": "horizontal"
          },
          "columns": {
            "type": "integer",
            "maximum": 8.0,
            "minimum": 1.0,
            "title": "Columns",
            "default": 2
          },
          "spacing": {
            "type": "integer",
            "maximum": 256.0,
            "minimum": 0.0,
            "title": "Spacing",
            "default": 4
          },
          "thumbnail_size": {
            "type": "integer",
            "maximum": 1024.0,
            "minimum": 16.0,
            "title": "Thumbnail Size",
            "default": 256
          }
        },
        "additionalProperties": false,
        "type": "object",
        "title": "LayoutParams"
      },
      "LineParams": {
        "properties": {
          "format": {
            "type": "string",
            "enum": [
              "jpeg",
              "png",
              "webp"
            ],
            "title": "Format",
            "default": "webp"
          },
          "quality": {
            "type": "integer",
            "maximum": 100.0,
            "minimum": 1.0,
            "title": "Quality",
            "default": 85
          },
          "x": {
            "type": "integer",
            "maximum": 16383.0,
            "minimum": 0.0,
            "title": "X",
            "default": 0
          },
          "y": {
            "type": "integer",
            "maximum": 16383.0,
            "minimum": 0.0,
            "title": "Y",
            "default": 0
          },
          "color": {
            "type": "string",
            "pattern": "^#[0-9A-Fa-f]{6}$",
            "title": "Color",
            "default": "#FF0000"
          },
          "opacity": {
            "type": "number",
            "maximum": 1.0,
            "minimum": 0.0,
            "title": "Opacity",
            "default": 1
          },
          "x2": {
            "type": "integer",
            "maximum": 16383.0,
            "minimum": 0.0,
            "title": "X2",
            "default": 8
          },
          "y2": {
            "type": "integer",
            "maximum": 16383.0,
            "minimum": 0.0,
            "title": "Y2",
            "default": 8
          }
        },
        "additionalProperties": false,
        "type": "object",
        "title": "LineParams"
      },
      "LocalEqualizeExpandedRequest": {
        "properties": {
          "image_url": {
            "type": "string",
            "maxLength": 8192,
            "minLength": 1,
            "title": "Image Url"
          },
          "operation": {
            "type": "string",
            "const": "local_equalize",
            "title": "Operation",
            "default": "local_equalize"
          },
          "params": {
            "$ref": "#/components/schemas/LocalParams"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "image_url"
        ],
        "title": "LocalEqualizeExpandedRequest",
        "description": "Equalize a bounded local neighborhood. Maximum input: 5 MP."
      },
      "LocalParams": {
        "properties": {
          "format": {
            "type": "string",
            "enum": [
              "jpeg",
              "png",
              "webp"
            ],
            "title": "Format",
            "default": "webp"
          },
          "quality": {
            "type": "integer",
            "maximum": 100.0,
            "minimum": 1.0,
            "title": "Quality",
            "default": 85
          },
          "window": {
            "type": "integer",
            "enum": [
              3,
              5,
              7,
              9,
              15,
              31
            ],
            "title": "Window",
            "default": 7
          }
        },
        "additionalProperties": false,
        "type": "object",
        "title": "LocalParams"
      },
      "MedianExpandedRequest": {
        "properties": {
          "image_url": {
            "type": "string",
            "maxLength": 8192,
            "minLength": 1,
            "title": "Image Url"
          },
          "operation": {
            "type": "string",
            "const": "median",
            "title": "Operation",
            "default": "median"
          },
          "params": {
            "$ref": "#/components/schemas/LocalParams"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "image_url"
        ],
        "title": "MedianExpandedRequest",
        "description": "Apply a bounded square median filter to color channels."
      },
      "MergeChannelsExpandedRequest": {
        "properties": {
          "image_url": {
            "type": "string",
            "maxLength": 8192,
            "minLength": 1,
            "title": "Image Url"
          },
          "operation": {
            "type": "string",
            "const": "merge_channels",
            "title": "Operation",
            "default": "merge_channels"
          },
          "params": {
            "$ref": "#/components/schemas/MergeParams"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "image_url"
        ],
        "title": "MergeChannelsExpandedRequest",
        "description": "Reorder or replicate channels from this source into RGB or RGBA; no arbitrary input buffers."
      },
      "MergeParams": {
        "properties": {
          "format": {
            "type": "string",
            "enum": [
              "jpeg",
              "png",
              "webp"
            ],
            "title": "Format",
            "default": "webp"
          },
          "quality": {
            "type": "integer",
            "maximum": 100.0,
            "minimum": 1.0,
            "title": "Quality",
            "default": 85
          },
          "channels": {
            "items": {
              "type": "string",
              "enum": [
                "r",
                "g",
                "b",
                "alpha",
                "gray"
              ]
            },
            "type": "array",
            "maxItems": 4,
            "minItems": 3,
            "title": "Channels",
            "default": [
              "r",
              "g",
              "b"
            ]
          }
        },
        "additionalProperties": false,
        "type": "object",
        "title": "MergeParams"
      },
      "MetadataExpandedRequest": {
        "properties": {
          "image_url": {
            "type": "string",
            "maxLength": 8192,
            "minLength": 1,
            "title": "Image Url"
          },
          "operation": {
            "type": "string",
            "const": "metadata",
            "title": "Operation",
            "default": "metadata"
          },
          "params": {
            "$ref": "#/components/schemas/EmptyParams"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "image_url"
        ],
        "title": "MetadataExpandedRequest",
        "description": "Read safe metadata presence and orientation; never returns EXIF payload, GPS, XMP text or embedded profiles."
      },
      "MorphParams": {
        "properties": {
          "format": {
            "type": "string",
            "enum": [
              "jpeg",
              "png",
              "webp"
            ],
            "title": "Format",
            "default": "webp"
          },
          "quality": {
            "type": "integer",
            "maximum": 100.0,
            "minimum": 1.0,
            "title": "Quality",
            "default": 85
          },
          "window": {
            "type": "integer",
            "enum": [
              3,
              5,
              7,
              9,
              15,
              31
            ],
            "title": "Window",
            "default": 7
          },
          "mode": {
            "type": "string",
            "enum": [
              "open",
              "close",
              "erode",
              "dilate"
            ],
            "title": "Mode",
            "default": "open"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "title": "MorphParams"
      },
      "MorphologyExpandedRequest": {
        "properties": {
          "image_url": {
            "type": "string",
            "maxLength": 8192,
            "minLength": 1,
            "title": "Image Url"
          },
          "operation": {
            "type": "string",
            "const": "morphology",
            "title": "Operation",
            "default": "morphology"
          },
          "params": {
            "$ref": "#/components/schemas/MorphParams"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "image_url"
        ],
        "title": "MorphologyExpandedRequest",
        "description": "Apply open, close, erode or dilate using a bounded square kernel."
      },
      "NormalizeExpandedRequest": {
        "properties": {
          "image_url": {
            "type": "string",
            "maxLength": 8192,
            "minLength": 1,
            "title": "Image Url"
          },
          "operation": {
            "type": "string",
            "const": "normalize",
            "title": "Operation",
            "default": "normalize"
          },
          "params": {
            "$ref": "#/components/schemas/OutputParams"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "image_url"
        ],
        "title": "NormalizeExpandedRequest",
        "description": "Stretch each color channel to its full sample range."
      },
      "OptimizeExpandedRequest": {
        "properties": {
          "image_url": {
            "type": "string",
            "maxLength": 8192,
            "minLength": 1,
            "title": "Image Url"
          },
          "operation": {
            "type": "string",
            "const": "optimize",
            "title": "Operation",
            "default": "optimize"
          },
          "params": {
            "$ref": "#/components/schemas/OptimizeParams"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "image_url"
        ],
        "title": "OptimizeExpandedRequest",
        "description": "Optimize encoding: pixel-lossless PNG/WebP for 8-bit sRGB inputs only, balanced quality or smallest quality. PNG remains lossless in all modes, with no guaranteed size reduction."
      },
      "OptimizeParams": {
        "properties": {
          "format": {
            "type": "string",
            "enum": [
              "jpeg",
              "png",
              "webp"
            ],
            "title": "Format",
            "default": "webp",
            "description": "JPEG, PNG or WebP. Pixel-lossless mode accepts PNG/WebP with 8-bit sRGB input."
          },
          "quality": {
            "type": "integer",
            "maximum": 100.0,
            "minimum": 1.0,
            "title": "Quality",
            "default": 85
          },
          "mode": {
            "type": "string",
            "enum": [
              "lossless",
              "balanced",
              "smallest"
            ],
            "title": "Mode",
            "default": "balanced"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "title": "OptimizeParams"
      },
      "OutputParams": {
        "properties": {
          "format": {
            "type": "string",
            "enum": [
              "jpeg",
              "png",
              "webp"
            ],
            "title": "Format",
            "default": "webp"
          },
          "quality": {
            "type": "integer",
            "maximum": 100.0,
            "minimum": 1.0,
            "title": "Quality",
            "default": 85
          }
        },
        "additionalProperties": false,
        "type": "object",
        "title": "OutputParams"
      },
      "OverlayExpandedRequest": {
        "properties": {
          "image_url": {
            "type": "string",
            "maxLength": 8192,
            "minLength": 1,
            "title": "Image Url"
          },
          "operation": {
            "type": "string",
            "const": "overlay",
            "title": "Operation",
            "default": "overlay"
          },
          "params": {
            "$ref": "#/components/schemas/CompositeParams"
          },
          "second_image_url": {
            "type": "string",
            "maxLength": 8192,
            "minLength": 1,
            "title": "Second Image Url"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "image_url",
          "second_image_url"
        ],
        "title": "OverlayExpandedRequest",
        "description": "Overlay a second HTTPS image at bounded coordinates and opacity."
      },
      "PadParams": {
        "properties": {
          "format": {
            "type": "string",
            "enum": [
              "jpeg",
              "png",
              "webp"
            ],
            "title": "Format",
            "default": "webp"
          },
          "quality": {
            "type": "integer",
            "maximum": 100.0,
            "minimum": 1.0,
            "title": "Quality",
            "default": 85
          },
          "width": {
            "type": "integer",
            "maximum": 16384.0,
            "minimum": 1.0,
            "title": "Width"
          },
          "height": {
            "type": "integer",
            "maximum": 16384.0,
            "minimum": 1.0,
            "title": "Height"
          },
          "background": {
            "type": "string",
            "pattern": "^#[0-9A-Fa-f]{6}$",
            "title": "Background",
            "default": "#ffffff"
          },
          "gravity": {
            "type": "string",
            "enum": [
              "centre",
              "north",
              "south",
              "east",
              "west",
              "north-east",
              "north-west",
              "south-east",
              "south-west"
            ],
            "title": "Gravity",
            "default": "centre"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "width",
          "height"
        ],
        "title": "PadParams"
      },
      "PadRequest": {
        "properties": {
          "image_url": {
            "type": "string",
            "maxLength": 8192,
            "minLength": 1,
            "title": "Image Url"
          },
          "operation": {
            "type": "string",
            "const": "pad",
            "title": "Operation",
            "default": "pad"
          },
          "params": {
            "$ref": "#/components/schemas/PadParams"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "image_url",
          "params"
        ],
        "title": "PadRequest",
        "description": "Expand the image canvas to requested dimensions and fill the added area with a specified background and gravity."
      },
      "PageInfoExpandedRequest": {
        "properties": {
          "image_url": {
            "type": "string",
            "maxLength": 8192,
            "minLength": 1,
            "title": "Image Url"
          },
          "operation": {
            "type": "string",
            "const": "page_info",
            "title": "Operation",
            "default": "page_info"
          },
          "params": {
            "$ref": "#/components/schemas/EmptyParams"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "image_url"
        ],
        "title": "PageInfoExpandedRequest",
        "description": "Read PDF, TIFF or HEIF page count; maximum 32 pages."
      },
      "PageParams": {
        "properties": {
          "format": {
            "type": "string",
            "enum": [
              "jpeg",
              "png",
              "webp"
            ],
            "title": "Format",
            "default": "webp"
          },
          "quality": {
            "type": "integer",
            "maximum": 100.0,
            "minimum": 1.0,
            "title": "Quality",
            "default": 85
          },
          "page_index": {
            "type": "integer",
            "maximum": 31.0,
            "minimum": 0.0,
            "title": "Page Index",
            "default": 0
          }
        },
        "additionalProperties": false,
        "type": "object",
        "title": "PageParams"
      },
      "PdfParams": {
        "properties": {
          "format": {
            "type": "string",
            "enum": [
              "jpeg",
              "png",
              "webp"
            ],
            "title": "Format",
            "default": "webp"
          },
          "quality": {
            "type": "integer",
            "maximum": 100.0,
            "minimum": 1.0,
            "title": "Quality",
            "default": 85
          },
          "page": {
            "type": "integer",
            "maximum": 31.0,
            "minimum": 0.0,
            "title": "Page",
            "default": 0
          },
          "dpi": {
            "type": "integer",
            "maximum": 150.0,
            "minimum": 36.0,
            "title": "Dpi",
            "default": 72
          }
        },
        "additionalProperties": false,
        "type": "object",
        "title": "PdfParams"
      },
      "PdfToImageExpandedRequest": {
        "properties": {
          "image_url": {
            "type": "string",
            "maxLength": 8192,
            "minLength": 1,
            "title": "Image Url"
          },
          "operation": {
            "type": "string",
            "const": "pdf_to_image",
            "title": "Operation",
            "default": "pdf_to_image"
          },
          "params": {
            "$ref": "#/components/schemas/PdfParams"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "image_url"
        ],
        "title": "PdfToImageExpandedRequest",
        "description": "Render one PDF page, maximum 150 DPI, page index 31 and 10 MP."
      },
      "PixelParams": {
        "properties": {
          "x": {
            "type": "integer",
            "maximum": 16383.0,
            "minimum": 0.0,
            "title": "X",
            "default": 0
          },
          "y": {
            "type": "integer",
            "maximum": 16383.0,
            "minimum": 0.0,
            "title": "Y",
            "default": 0
          }
        },
        "additionalProperties": false,
        "type": "object",
        "title": "PixelParams"
      },
      "PixelSampleExpandedRequest": {
        "properties": {
          "image_url": {
            "type": "string",
            "maxLength": 8192,
            "minLength": 1,
            "title": "Image Url"
          },
          "operation": {
            "type": "string",
            "const": "pixel_sample",
            "title": "Operation",
            "default": "pixel_sample"
          },
          "params": {
            "$ref": "#/components/schemas/PixelParams"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "image_url"
        ],
        "title": "PixelSampleExpandedRequest",
        "description": "Read one in-bounds pixel from the orientation-corrected image."
      },
      "PyramidExpandedRequest": {
        "properties": {
          "image_url": {
            "type": "string",
            "maxLength": 8192,
            "minLength": 1,
            "title": "Image Url"
          },
          "operation": {
            "type": "string",
            "const": "pyramid",
            "title": "Operation",
            "default": "pyramid"
          },
          "params": {
            "$ref": "#/components/schemas/TileParams"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "image_url"
        ],
        "title": "PyramidExpandedRequest",
        "description": "Create bounded multiresolution tiles; maximum 20 MP, 256 tiles and 25 MB aggregate package."
      },
      "RankFilterExpandedRequest": {
        "properties": {
          "image_url": {
            "type": "string",
            "maxLength": 8192,
            "minLength": 1,
            "title": "Image Url"
          },
          "operation": {
            "type": "string",
            "const": "rank_filter",
            "title": "Operation",
            "default": "rank_filter"
          },
          "params": {
            "$ref": "#/components/schemas/RankParams"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "image_url"
        ],
        "title": "RankFilterExpandedRequest",
        "description": "Select a bounded neighborhood rank percentile."
      },
      "RankParams": {
        "properties": {
          "format": {
            "type": "string",
            "enum": [
              "jpeg",
              "png",
              "webp"
            ],
            "title": "Format",
            "default": "webp"
          },
          "quality": {
            "type": "integer",
            "maximum": 100.0,
            "minimum": 1.0,
            "title": "Quality",
            "default": 85
          },
          "window": {
            "type": "integer",
            "enum": [
              3,
              5,
              7,
              9,
              15,
              31
            ],
            "title": "Window",
            "default": 7
          },
          "percentile": {
            "type": "number",
            "maximum": 1.0,
            "minimum": 0.0,
            "title": "Percentile",
            "default": 0.5
          }
        },
        "additionalProperties": false,
        "type": "object",
        "title": "RankParams"
      },
      "RectParams": {
        "properties": {
          "format": {
            "type": "string",
            "enum": [
              "jpeg",
              "png",
              "webp"
            ],
            "title": "Format",
            "default": "webp"
          },
          "quality": {
            "type": "integer",
            "maximum": 100.0,
            "minimum": 1.0,
            "title": "Quality",
            "default": 85
          },
          "x": {
            "type": "integer",
            "maximum": 16383.0,
            "minimum": 0.0,
            "title": "X",
            "default": 0
          },
          "y": {
            "type": "integer",
            "maximum": 16383.0,
            "minimum": 0.0,
            "title": "Y",
            "default": 0
          },
          "color": {
            "type": "string",
            "pattern": "^#[0-9A-Fa-f]{6}$",
            "title": "Color",
            "default": "#FF0000"
          },
          "opacity": {
            "type": "number",
            "maximum": 1.0,
            "minimum": 0.0,
            "title": "Opacity",
            "default": 1
          },
          "width": {
            "type": "integer",
            "maximum": 16384.0,
            "minimum": 1.0,
            "title": "Width",
            "default": 8
          },
          "height": {
            "type": "integer",
            "maximum": 16384.0,
            "minimum": 1.0,
            "title": "Height",
            "default": 8
          },
          "fill": {
            "type": "boolean",
            "title": "Fill",
            "default": true
          }
        },
        "additionalProperties": false,
        "type": "object",
        "title": "RectParams"
      },
      "ResizeParams": {
        "properties": {
          "format": {
            "type": "string",
            "enum": [
              "jpeg",
              "png",
              "webp"
            ],
            "title": "Format",
            "default": "webp"
          },
          "quality": {
            "type": "integer",
            "maximum": 100.0,
            "minimum": 1.0,
            "title": "Quality",
            "default": 85
          },
          "width": {
            "anyOf": [
              {
                "type": "integer",
                "maximum": 16384.0,
                "minimum": 1.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Width"
          },
          "height": {
            "anyOf": [
              {
                "type": "integer",
                "maximum": 16384.0,
                "minimum": 1.0
              },
              {
                "type": "null"
              }
            ],
            "title": "Height"
          },
          "fit": {
            "type": "string",
            "enum": [
              "contain",
              "cover",
              "fill"
            ],
            "title": "Fit",
            "default": "contain"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "title": "ResizeParams"
      },
      "ResizeRequest": {
        "properties": {
          "image_url": {
            "type": "string",
            "maxLength": 8192,
            "minLength": 1,
            "title": "Image Url"
          },
          "operation": {
            "type": "string",
            "const": "resize",
            "title": "Operation",
            "default": "resize"
          },
          "params": {
            "$ref": "#/components/schemas/ResizeParams"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "image_url",
          "params"
        ],
        "title": "ResizeRequest",
        "description": "Resize an image to requested dimensions using controlled contain, cover or fill sizing rules."
      },
      "RotateParams": {
        "properties": {
          "format": {
            "type": "string",
            "enum": [
              "jpeg",
              "png",
              "webp"
            ],
            "title": "Format",
            "default": "webp"
          },
          "quality": {
            "type": "integer",
            "maximum": 100.0,
            "minimum": 1.0,
            "title": "Quality",
            "default": 85
          },
          "angle": {
            "type": "number",
            "maximum": 360.0,
            "minimum": -360.0,
            "title": "Angle"
          },
          "background": {
            "type": "string",
            "pattern": "^#[0-9A-Fa-f]{6}$",
            "title": "Background",
            "default": "#ffffff"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "angle"
        ],
        "title": "RotateParams"
      },
      "RotateRequest": {
        "properties": {
          "image_url": {
            "type": "string",
            "maxLength": 8192,
            "minLength": 1,
            "title": "Image Url"
          },
          "operation": {
            "type": "string",
            "const": "rotate",
            "title": "Operation",
            "default": "rotate"
          },
          "params": {
            "$ref": "#/components/schemas/RotateParams"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "image_url",
          "params"
        ],
        "title": "RotateRequest",
        "description": "Rotate an image by a requested angle from -360 to 360 degrees and fill exposed areas with a selected background."
      },
      "SaturationExpandedRequest": {
        "properties": {
          "image_url": {
            "type": "string",
            "maxLength": 8192,
            "minLength": 1,
            "title": "Image Url"
          },
          "operation": {
            "type": "string",
            "const": "saturation",
            "title": "Operation",
            "default": "saturation"
          },
          "params": {
            "$ref": "#/components/schemas/SaturationParams"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "image_url"
        ],
        "title": "SaturationExpandedRequest",
        "description": "Scale chroma while retaining alpha."
      },
      "SaturationParams": {
        "properties": {
          "format": {
            "type": "string",
            "enum": [
              "jpeg",
              "png",
              "webp"
            ],
            "title": "Format",
            "default": "webp"
          },
          "quality": {
            "type": "integer",
            "maximum": 100.0,
            "minimum": 1.0,
            "title": "Quality",
            "default": 85
          },
          "factor": {
            "type": "number",
            "maximum": 3.0,
            "minimum": 0.0,
            "title": "Factor",
            "default": 1.2
          }
        },
        "additionalProperties": false,
        "type": "object",
        "title": "SaturationParams"
      },
      "SharpenParams": {
        "properties": {
          "format": {
            "type": "string",
            "enum": [
              "jpeg",
              "png",
              "webp"
            ],
            "title": "Format",
            "default": "webp"
          },
          "quality": {
            "type": "integer",
            "maximum": 100.0,
            "minimum": 1.0,
            "title": "Quality",
            "default": 85
          },
          "sigma": {
            "type": "number",
            "maximum": 10.0,
            "minimum": 0.1,
            "title": "Sigma",
            "default": 1.0
          },
          "amount": {
            "type": "number",
            "maximum": 5.0,
            "minimum": 0.0,
            "title": "Amount",
            "default": 1.0
          }
        },
        "additionalProperties": false,
        "type": "object",
        "title": "SharpenParams"
      },
      "SharpenRequest": {
        "properties": {
          "image_url": {
            "type": "string",
            "maxLength": 8192,
            "minLength": 1,
            "title": "Image Url"
          },
          "operation": {
            "type": "string",
            "const": "sharpen",
            "title": "Operation",
            "default": "sharpen"
          },
          "params": {
            "$ref": "#/components/schemas/SharpenParams"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "image_url"
        ],
        "title": "SharpenRequest",
        "description": "Apply controlled image sharpening with validated sigma and amount; decoded inputs are limited to 30 megapixels."
      },
      "SmartcropParams": {
        "properties": {
          "format": {
            "type": "string",
            "enum": [
              "jpeg",
              "png",
              "webp"
            ],
            "title": "Format",
            "default": "webp"
          },
          "quality": {
            "type": "integer",
            "maximum": 100.0,
            "minimum": 1.0,
            "title": "Quality",
            "default": 85
          },
          "width": {
            "type": "integer",
            "maximum": 16384.0,
            "minimum": 1.0,
            "title": "Width"
          },
          "height": {
            "type": "integer",
            "maximum": 16384.0,
            "minimum": 1.0,
            "title": "Height"
          },
          "strategy": {
            "type": "string",
            "enum": [
              "attention",
              "entropy",
              "centre"
            ],
            "title": "Strategy",
            "default": "attention"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "width",
          "height"
        ],
        "title": "SmartcropParams"
      },
      "SmartcropRequest": {
        "properties": {
          "image_url": {
            "type": "string",
            "maxLength": 8192,
            "minLength": 1,
            "title": "Image Url"
          },
          "operation": {
            "type": "string",
            "const": "smartcrop",
            "title": "Operation",
            "default": "smartcrop"
          },
          "params": {
            "$ref": "#/components/schemas/SmartcropParams"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "image_url",
          "params"
        ],
        "title": "SmartcropRequest",
        "description": "Automatically crop an image to requested dimensions using attention, entropy or centre selection."
      },
      "StatsRequest": {
        "properties": {
          "image_url": {
            "type": "string",
            "maxLength": 8192,
            "minLength": 1,
            "title": "Image Url"
          },
          "operation": {
            "type": "string",
            "const": "stats",
            "title": "Operation",
            "default": "stats"
          },
          "params": {
            "$ref": "#/components/schemas/EmptyParams"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "image_url"
        ],
        "title": "StatsRequest",
        "description": "Return basic image and per-channel statistics for analysis without modifying the image."
      },
      "StatusResponse": {
        "properties": {
          "ok": {
            "type": "boolean",
            "title": "Ok"
          },
          "service_id": {
            "type": "string",
            "title": "Service Id"
          },
          "version": {
            "type": "string",
            "title": "Version"
          },
          "check": {
            "type": "string",
            "title": "Check"
          },
          "engine": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "title": "Engine"
          }
        },
        "type": "object",
        "required": [
          "ok",
          "service_id",
          "version",
          "check"
        ],
        "title": "StatusResponse"
      },
      "StripMetadataRequest": {
        "properties": {
          "image_url": {
            "type": "string",
            "maxLength": 8192,
            "minLength": 1,
            "title": "Image Url"
          },
          "operation": {
            "type": "string",
            "const": "strip_metadata",
            "title": "Operation",
            "default": "strip_metadata"
          },
          "params": {
            "$ref": "#/components/schemas/OutputParams"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "image_url"
        ],
        "title": "StripMetadataRequest",
        "description": "Remove nonessential embedded metadata such as EXIF, GPS and XMP information while writing a new image."
      },
      "TextParams": {
        "properties": {
          "format": {
            "type": "string",
            "enum": [
              "jpeg",
              "png",
              "webp"
            ],
            "title": "Format",
            "default": "webp"
          },
          "quality": {
            "type": "integer",
            "maximum": 100.0,
            "minimum": 1.0,
            "title": "Quality",
            "default": 85
          },
          "x": {
            "type": "integer",
            "maximum": 16383.0,
            "minimum": 0.0,
            "title": "X",
            "default": 0
          },
          "y": {
            "type": "integer",
            "maximum": 16383.0,
            "minimum": 0.0,
            "title": "Y",
            "default": 0
          },
          "color": {
            "type": "string",
            "pattern": "^#[0-9A-Fa-f]{6}$",
            "title": "Color",
            "default": "#FF0000"
          },
          "opacity": {
            "type": "number",
            "maximum": 1.0,
            "minimum": 0.0,
            "title": "Opacity",
            "default": 1
          },
          "text": {
            "type": "string",
            "maxLength": 256,
            "minLength": 1,
            "title": "Text",
            "default": "ImageOps"
          },
          "size": {
            "type": "integer",
            "maximum": 256.0,
            "minimum": 6.0,
            "title": "Size",
            "default": 24
          },
          "background": {
            "anyOf": [
              {
                "type": "string",
                "pattern": "^#[0-9A-Fa-f]{6}$"
              },
              {
                "type": "null"
              }
            ],
            "title": "Background"
          },
          "font": {
            "type": "string",
            "enum": [
              "DejaVu Sans",
              "DejaVu Serif",
              "DejaVu Sans Mono"
            ],
            "title": "Font",
            "default": "DejaVu Sans"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "title": "TextParams"
      },
      "ThresholdExpandedRequest": {
        "properties": {
          "image_url": {
            "type": "string",
            "maxLength": 8192,
            "minLength": 1,
            "title": "Image Url"
          },
          "operation": {
            "type": "string",
            "const": "threshold",
            "title": "Operation",
            "default": "threshold"
          },
          "params": {
            "$ref": "#/components/schemas/ThresholdParams"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "image_url"
        ],
        "title": "ThresholdExpandedRequest",
        "description": "Threshold grayscale samples to a binary image."
      },
      "ThresholdParams": {
        "properties": {
          "format": {
            "type": "string",
            "enum": [
              "jpeg",
              "png",
              "webp"
            ],
            "title": "Format",
            "default": "webp"
          },
          "quality": {
            "type": "integer",
            "maximum": 100.0,
            "minimum": 1.0,
            "title": "Quality",
            "default": 85
          },
          "value": {
            "type": "integer",
            "maximum": 255.0,
            "minimum": 0.0,
            "title": "Value",
            "default": 128
          }
        },
        "additionalProperties": false,
        "type": "object",
        "title": "ThresholdParams"
      },
      "ThumbnailRequest": {
        "properties": {
          "image_url": {
            "type": "string",
            "maxLength": 8192,
            "minLength": 1,
            "title": "Image Url"
          },
          "operation": {
            "type": "string",
            "const": "thumbnail",
            "title": "Operation",
            "default": "thumbnail"
          },
          "params": {
            "$ref": "#/components/schemas/ResizeParams"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "image_url",
          "params"
        ],
        "title": "ThumbnailRequest",
        "description": "Generate a smaller thumbnail optimized for preview use without enlarging a smaller source image."
      },
      "TileExpandedRequest": {
        "properties": {
          "image_url": {
            "type": "string",
            "maxLength": 8192,
            "minLength": 1,
            "title": "Image Url"
          },
          "operation": {
            "type": "string",
            "const": "tile",
            "title": "Operation",
            "default": "tile"
          },
          "params": {
            "$ref": "#/components/schemas/TileParams"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "image_url"
        ],
        "title": "TileExpandedRequest",
        "description": "Create bounded non-overlapping tiles with UUID manifest/archive URLs; no binary response."
      },
      "TileParams": {
        "properties": {
          "tile_size": {
            "type": "integer",
            "enum": [
              256,
              512,
              1024
            ],
            "title": "Tile Size",
            "default": 512
          },
          "quality": {
            "type": "integer",
            "maximum": 95.0,
            "minimum": 1.0,
            "title": "Quality",
            "default": 80
          }
        },
        "additionalProperties": false,
        "type": "object",
        "title": "TileParams"
      },
      "TintExpandedRequest": {
        "properties": {
          "image_url": {
            "type": "string",
            "maxLength": 8192,
            "minLength": 1,
            "title": "Image Url"
          },
          "operation": {
            "type": "string",
            "const": "tint",
            "title": "Operation",
            "default": "tint"
          },
          "params": {
            "$ref": "#/components/schemas/TintParams"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "image_url"
        ],
        "title": "TintExpandedRequest",
        "description": "Blend a validated solid color with the source color channels."
      },
      "TintParams": {
        "properties": {
          "format": {
            "type": "string",
            "enum": [
              "jpeg",
              "png",
              "webp"
            ],
            "title": "Format",
            "default": "webp"
          },
          "quality": {
            "type": "integer",
            "maximum": 100.0,
            "minimum": 1.0,
            "title": "Quality",
            "default": 85
          },
          "color": {
            "type": "string",
            "pattern": "^#[0-9A-Fa-f]{6}$",
            "title": "Color",
            "default": "#FF8800"
          },
          "amount": {
            "type": "number",
            "maximum": 1.0,
            "minimum": 0.0,
            "title": "Amount",
            "default": 0.2
          }
        },
        "additionalProperties": false,
        "type": "object",
        "title": "TintParams"
      },
      "TrimParams": {
        "properties": {
          "format": {
            "type": "string",
            "enum": [
              "jpeg",
              "png",
              "webp"
            ],
            "title": "Format",
            "default": "webp"
          },
          "quality": {
            "type": "integer",
            "maximum": 100.0,
            "minimum": 1.0,
            "title": "Quality",
            "default": 85
          },
          "tolerance": {
            "type": "number",
            "maximum": 100.0,
            "minimum": 0.0,
            "title": "Tolerance",
            "description": "Percent color-distance tolerance.",
            "default": 5.0
          },
          "background": {
            "type": "string",
            "pattern": "^#[0-9A-Fa-f]{6}$",
            "title": "Background",
            "default": "#ffffff"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "title": "TrimParams"
      },
      "TrimRequest": {
        "properties": {
          "image_url": {
            "type": "string",
            "maxLength": 8192,
            "minLength": 1,
            "title": "Image Url"
          },
          "operation": {
            "type": "string",
            "const": "trim",
            "title": "Operation",
            "default": "trim"
          },
          "params": {
            "$ref": "#/components/schemas/TrimParams"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "image_url"
        ],
        "title": "TrimRequest",
        "description": "Automatically remove matching or empty border areas using a validated background color and tolerance."
      },
      "WatermarkExpandedRequest": {
        "properties": {
          "image_url": {
            "type": "string",
            "maxLength": 8192,
            "minLength": 1,
            "title": "Image Url"
          },
          "operation": {
            "type": "string",
            "const": "watermark",
            "title": "Operation",
            "default": "watermark"
          },
          "params": {
            "$ref": "#/components/schemas/WatermarkParams"
          },
          "second_image_url": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 8192,
                "minLength": 1
              },
              {
                "type": "null"
              }
            ],
            "title": "Second Image Url"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "required": [
          "image_url"
        ],
        "title": "WatermarkExpandedRequest",
        "description": "Add a server-font text or second-image watermark at bounded scale, position, margin and opacity."
      },
      "WatermarkParams": {
        "properties": {
          "format": {
            "type": "string",
            "enum": [
              "jpeg",
              "png",
              "webp"
            ],
            "title": "Format",
            "default": "webp"
          },
          "quality": {
            "type": "integer",
            "maximum": 100.0,
            "minimum": 1.0,
            "title": "Quality",
            "default": 85
          },
          "text": {
            "anyOf": [
              {
                "type": "string",
                "maxLength": 256,
                "minLength": 1
              },
              {
                "type": "null"
              }
            ],
            "title": "Text"
          },
          "position": {
            "type": "string",
            "enum": [
              "centre",
              "north-west",
              "north-east",
              "south-west",
              "south-east"
            ],
            "title": "Position",
            "default": "south-east"
          },
          "opacity": {
            "type": "number",
            "maximum": 1.0,
            "minimum": 0.0,
            "title": "Opacity",
            "default": 0.5
          },
          "scale": {
            "type": "number",
            "maximum": 1.0,
            "minimum": 0.01,
            "title": "Scale",
            "default": 0.25
          },
          "margin": {
            "type": "integer",
            "maximum": 1024.0,
            "minimum": 0.0,
            "title": "Margin",
            "default": 4
          },
          "size": {
            "type": "integer",
            "maximum": 256.0,
            "minimum": 6.0,
            "title": "Size",
            "default": 24
          },
          "color": {
            "type": "string",
            "pattern": "^#[0-9A-Fa-f]{6}$",
            "title": "Color",
            "default": "#FFFFFF"
          }
        },
        "additionalProperties": false,
        "type": "object",
        "title": "WatermarkParams"
      },
      "OutputInfo": {
        "additionalProperties": false,
        "properties": {
          "width": {
            "title": "Width",
            "type": "integer"
          },
          "height": {
            "title": "Height",
            "type": "integer"
          },
          "format": {
            "enum": [
              "jpeg",
              "jpg",
              "png",
              "webp",
              "avif",
              "heic",
              "heif"
            ],
            "title": "Format",
            "type": "string"
          },
          "mime_type": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "title": "Mime Type"
          },
          "extension": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "title": "Extension"
          },
          "interpretation": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "null"
              }
            ],
            "default": null,
            "title": "Interpretation"
          },
          "bytes": {
            "title": "Bytes",
            "type": "integer"
          },
          "url": {
            "title": "Url",
            "type": "string"
          },
          "expires_in_seconds": {
            "title": "Expires In Seconds",
            "type": "integer"
          }
        },
        "required": [
          "width",
          "height",
          "format",
          "bytes",
          "url",
          "expires_in_seconds"
        ],
        "title": "OutputInfo",
        "type": "object"
      }
    }
  },
  "x-imageops-operations": {
    "detect_format": {
      "description": "Detect actual file content, dimensions, alpha and frame/page counts; ignores URL extension.",
      "category": "Format & Metadata",
      "example": {
        "image_url": "https://example.com/image.png",
        "operation": "detect_format",
        "params": {}
      },
      "maximum_decoded_pixels": 50000000,
      "status": "READY"
    },
    "metadata": {
      "description": "Read safe metadata presence and orientation; never returns EXIF payload, GPS, XMP text or embedded profiles.",
      "category": "Format & Metadata",
      "example": {
        "image_url": "https://example.com/image.png",
        "operation": "metadata",
        "params": {}
      },
      "maximum_decoded_pixels": 50000000,
      "status": "READY"
    },
    "optimize": {
      "description": "Optimize encoding: pixel-lossless PNG/WebP for 8-bit sRGB inputs only, balanced quality or smallest quality. PNG remains lossless in all modes, with no guaranteed size reduction.",
      "category": "Format & Metadata",
      "example": {
        "image_url": "https://example.com/image.png",
        "operation": "optimize",
        "params": {
          "format": "webp",
          "quality": 85,
          "mode": "balanced"
        }
      },
      "maximum_decoded_pixels": 50000000,
      "status": "READY"
    },
    "saturation": {
      "description": "Scale chroma while retaining alpha.",
      "category": "Color",
      "example": {
        "image_url": "https://example.com/image.png",
        "operation": "saturation",
        "params": {
          "format": "webp",
          "quality": 85,
          "factor": 1.2
        }
      },
      "maximum_decoded_pixels": 50000000,
      "status": "READY"
    },
    "hue": {
      "description": "Rotate hue by bounded degrees while retaining alpha.",
      "category": "Color",
      "example": {
        "image_url": "https://example.com/image.png",
        "operation": "hue",
        "params": {
          "format": "webp",
          "quality": 85,
          "degrees": 15
        }
      },
      "maximum_decoded_pixels": 50000000,
      "status": "READY"
    },
    "tint": {
      "description": "Blend a validated solid color with the source color channels.",
      "category": "Color",
      "example": {
        "image_url": "https://example.com/image.png",
        "operation": "tint",
        "params": {
          "format": "webp",
          "quality": 85,
          "color": "#FF8800",
          "amount": 0.2
        }
      },
      "maximum_decoded_pixels": 50000000,
      "status": "READY"
    },
    "invert": {
      "description": "Invert color samples without inverting alpha.",
      "category": "Color",
      "example": {
        "image_url": "https://example.com/image.png",
        "operation": "invert",
        "params": {
          "format": "webp",
          "quality": 85
        }
      },
      "maximum_decoded_pixels": 50000000,
      "status": "READY"
    },
    "normalize": {
      "description": "Stretch each color channel to its full sample range.",
      "category": "Color",
      "example": {
        "image_url": "https://example.com/image.png",
        "operation": "normalize",
        "params": {
          "format": "webp",
          "quality": 85
        }
      },
      "maximum_decoded_pixels": 50000000,
      "status": "READY"
    },
    "hist_equalize": {
      "description": "Equalize the color histogram; may change appearance substantially.",
      "category": "Color",
      "example": {
        "image_url": "https://example.com/image.png",
        "operation": "hist_equalize",
        "params": {
          "format": "webp",
          "quality": 85
        }
      },
      "maximum_decoded_pixels": 50000000,
      "status": "READY"
    },
    "local_equalize": {
      "description": "Equalize a bounded local neighborhood. Maximum input: 5 MP.",
      "category": "Color",
      "example": {
        "image_url": "https://example.com/image.png",
        "operation": "local_equalize",
        "params": {
          "format": "webp",
          "quality": 85,
          "window": 7
        }
      },
      "maximum_decoded_pixels": 5000000,
      "status": "READY"
    },
    "colorspace": {
      "description": "Evaluate a permitted color-space transform and render the encoded result in display sRGB. Requested intermediate space is reported.",
      "category": "Color",
      "example": {
        "image_url": "https://example.com/image.png",
        "operation": "colorspace",
        "params": {
          "format": "webp",
          "quality": 85,
          "space": "srgb"
        }
      },
      "maximum_decoded_pixels": 50000000,
      "status": "READY"
    },
    "histogram": {
      "description": "Return bounded per-color-channel counts, up to 256 bins per channel.",
      "category": "Analysis",
      "example": {
        "image_url": "https://example.com/image.png",
        "operation": "histogram",
        "params": {
          "bins": 32
        }
      },
      "maximum_decoded_pixels": 50000000,
      "status": "READY"
    },
    "entropy": {
      "description": "Return grayscale Shannon entropy in bits per sample.",
      "category": "Analysis",
      "example": {
        "image_url": "https://example.com/image.png",
        "operation": "entropy",
        "params": {}
      },
      "maximum_decoded_pixels": 50000000,
      "status": "READY"
    },
    "dominant_color": {
      "description": "Return approximate quantized dominant RGB colors and proportions from a bounded thumbnail.",
      "category": "Analysis",
      "example": {
        "image_url": "https://example.com/image.png",
        "operation": "dominant_color",
        "params": {
          "count": 5
        }
      },
      "maximum_decoded_pixels": 50000000,
      "status": "READY"
    },
    "pixel_sample": {
      "description": "Read one in-bounds pixel from the orientation-corrected image.",
      "category": "Analysis",
      "example": {
        "image_url": "https://example.com/image.png",
        "operation": "pixel_sample",
        "params": {
          "x": 0,
          "y": 0
        }
      },
      "maximum_decoded_pixels": 50000000,
      "status": "READY"
    },
    "compare": {
      "description": "Compare equally sized images: MAE, RMSE and maximum color difference. Requires second_image_url.",
      "category": "Analysis",
      "example": {
        "image_url": "https://example.com/image.png",
        "operation": "compare",
        "params": {},
        "second_image_url": "https://example.com/second.png"
      },
      "maximum_decoded_pixels": 50000000,
      "status": "READY"
    },
    "difference": {
      "description": "Write an absolute color difference image and bounded comparison statistics. Requires second_image_url.",
      "category": "Analysis",
      "example": {
        "image_url": "https://example.com/image.png",
        "operation": "difference",
        "params": {
          "format": "webp",
          "quality": 85
        },
        "second_image_url": "https://example.com/second.png"
      },
      "maximum_decoded_pixels": 50000000,
      "status": "READY"
    },
    "median": {
      "description": "Apply a bounded square median filter to color channels.",
      "category": "Filters",
      "example": {
        "image_url": "https://example.com/image.png",
        "operation": "median",
        "params": {
          "format": "webp",
          "quality": 85,
          "window": 7
        }
      },
      "maximum_decoded_pixels": 5000000,
      "status": "READY"
    },
    "rank_filter": {
      "description": "Select a bounded neighborhood rank percentile.",
      "category": "Filters",
      "example": {
        "image_url": "https://example.com/image.png",
        "operation": "rank_filter",
        "params": {
          "format": "webp",
          "quality": 85,
          "window": 7,
          "percentile": 0.5
        }
      },
      "maximum_decoded_pixels": 5000000,
      "status": "READY"
    },
    "edge_detect": {
      "description": "Extract Sobel edges.",
      "category": "Filters",
      "example": {
        "image_url": "https://example.com/image.png",
        "operation": "edge_detect",
        "params": {
          "format": "webp",
          "quality": 85,
          "method": "sobel"
        }
      },
      "maximum_decoded_pixels": 50000000,
      "status": "READY"
    },
    "emboss": {
      "description": "Render a fixed emboss kernel.",
      "category": "Filters",
      "example": {
        "image_url": "https://example.com/image.png",
        "operation": "emboss",
        "params": {
          "format": "webp",
          "quality": 85
        }
      },
      "maximum_decoded_pixels": 50000000,
      "status": "READY"
    },
    "laplacian": {
      "description": "Render a fixed Laplacian edge kernel.",
      "category": "Filters",
      "example": {
        "image_url": "https://example.com/image.png",
        "operation": "laplacian",
        "params": {
          "format": "webp",
          "quality": 85
        }
      },
      "maximum_decoded_pixels": 50000000,
      "status": "READY"
    },
    "convolve": {
      "description": "Apply one fixed convolution preset; custom matrices are rejected.",
      "category": "Filters",
      "example": {
        "image_url": "https://example.com/image.png",
        "operation": "convolve",
        "params": {
          "format": "webp",
          "quality": 85,
          "preset": "edge"
        }
      },
      "maximum_decoded_pixels": 50000000,
      "status": "READY"
    },
    "threshold": {
      "description": "Threshold grayscale samples to a binary image.",
      "category": "Threshold & Morphology",
      "example": {
        "image_url": "https://example.com/image.png",
        "operation": "threshold",
        "params": {
          "format": "webp",
          "quality": 85,
          "value": 128
        }
      },
      "maximum_decoded_pixels": 50000000,
      "status": "READY"
    },
    "adaptive_threshold": {
      "description": "Threshold against a local mean with bounded offset and window.",
      "category": "Threshold & Morphology",
      "example": {
        "image_url": "https://example.com/image.png",
        "operation": "adaptive_threshold",
        "params": {
          "format": "webp",
          "quality": 85,
          "window": 7,
          "offset": 5
        }
      },
      "maximum_decoded_pixels": 5000000,
      "status": "READY"
    },
    "erode": {
      "description": "Erode a binary image using a bounded square kernel.",
      "category": "Threshold & Morphology",
      "example": {
        "image_url": "https://example.com/image.png",
        "operation": "erode",
        "params": {
          "format": "webp",
          "quality": 85,
          "window": 7
        }
      },
      "maximum_decoded_pixels": 5000000,
      "status": "READY"
    },
    "dilate": {
      "description": "Dilate a binary image using a bounded square kernel.",
      "category": "Threshold & Morphology",
      "example": {
        "image_url": "https://example.com/image.png",
        "operation": "dilate",
        "params": {
          "format": "webp",
          "quality": 85,
          "window": 7
        }
      },
      "maximum_decoded_pixels": 5000000,
      "status": "READY"
    },
    "morphology": {
      "description": "Apply open, close, erode or dilate using a bounded square kernel.",
      "category": "Threshold & Morphology",
      "example": {
        "image_url": "https://example.com/image.png",
        "operation": "morphology",
        "params": {
          "format": "webp",
          "quality": 85,
          "window": 7,
          "mode": "open"
        }
      },
      "maximum_decoded_pixels": 5000000,
      "status": "READY"
    },
    "extract_alpha": {
      "description": "Extract alpha as grayscale; opaque inputs return a solid white mask.",
      "category": "Alpha & Channels",
      "example": {
        "image_url": "https://example.com/image.png",
        "operation": "extract_alpha",
        "params": {
          "format": "webp",
          "quality": 85
        }
      },
      "maximum_decoded_pixels": 50000000,
      "status": "READY"
    },
    "apply_mask": {
      "description": "Multiply original alpha by an equally sized grayscale second image mask.",
      "category": "Alpha & Channels",
      "example": {
        "image_url": "https://example.com/image.png",
        "operation": "apply_mask",
        "params": {
          "format": "webp",
          "quality": 85
        },
        "second_image_url": "https://example.com/second.png"
      },
      "maximum_decoded_pixels": 50000000,
      "status": "READY"
    },
    "extract_channel": {
      "description": "Extract one permitted color, gray or alpha channel.",
      "category": "Alpha & Channels",
      "example": {
        "image_url": "https://example.com/image.png",
        "operation": "extract_channel",
        "params": {
          "format": "webp",
          "quality": 85,
          "channel": "r"
        }
      },
      "maximum_decoded_pixels": 50000000,
      "status": "READY"
    },
    "merge_channels": {
      "description": "Reorder or replicate channels from this source into RGB or RGBA; no arbitrary input buffers.",
      "category": "Alpha & Channels",
      "example": {
        "image_url": "https://example.com/image.png",
        "operation": "merge_channels",
        "params": {
          "format": "webp",
          "quality": 85,
          "channels": [
            "r",
            "g",
            "b"
          ]
        }
      },
      "maximum_decoded_pixels": 50000000,
      "status": "READY"
    },
    "overlay": {
      "description": "Overlay a second HTTPS image at bounded coordinates and opacity.",
      "category": "Composition",
      "example": {
        "image_url": "https://example.com/image.png",
        "operation": "overlay",
        "params": {
          "format": "webp",
          "quality": 85,
          "blend": "over",
          "x": 0,
          "y": 0,
          "opacity": 1
        },
        "second_image_url": "https://example.com/second.png"
      },
      "maximum_decoded_pixels": 20000000,
      "status": "READY"
    },
    "composite": {
      "description": "Composite a second HTTPS image using a permitted blend. Combined inputs limited to 20 MP.",
      "category": "Composition",
      "example": {
        "image_url": "https://example.com/image.png",
        "operation": "composite",
        "params": {
          "format": "webp",
          "quality": 85,
          "blend": "over",
          "x": 0,
          "y": 0,
          "opacity": 1
        },
        "second_image_url": "https://example.com/second.png"
      },
      "maximum_decoded_pixels": 20000000,
      "status": "READY"
    },
    "watermark": {
      "description": "Add a server-font text or second-image watermark at bounded scale, position, margin and opacity.",
      "category": "Composition",
      "example": {
        "image_url": "https://example.com/image.png",
        "operation": "watermark",
        "params": {
          "format": "webp",
          "quality": 85,
          "text": "ImageOps",
          "position": "south-east",
          "opacity": 0.5,
          "scale": 0.25,
          "margin": 4,
          "size": 24,
          "color": "#FFFFFF"
        }
      },
      "maximum_decoded_pixels": 20000000,
      "status": "READY"
    },
    "add_background": {
      "description": "Flatten transparency onto a solid validated background.",
      "category": "Composition",
      "example": {
        "image_url": "https://example.com/image.png",
        "operation": "add_background",
        "params": {
          "format": "webp",
          "quality": 85,
          "background": "#FFFFFF"
        }
      },
      "maximum_decoded_pixels": 50000000,
      "status": "READY"
    },
    "join": {
      "description": "Join up to eight HTTPS inputs horizontally or vertically.",
      "category": "Composition",
      "example": {
        "image_url": "https://example.com/image.png",
        "operation": "join",
        "params": {
          "format": "webp",
          "quality": 85,
          "background": "#FFFFFF",
          "direction": "horizontal",
          "columns": 2,
          "spacing": 4,
          "thumbnail_size": 256
        },
        "additional_image_urls": [
          "https://example.com/second.png"
        ]
      },
      "maximum_decoded_pixels": 50000000,
      "status": "READY"
    },
    "grid": {
      "description": "Place up to eight HTTPS inputs in a bounded uniform-cell grid.",
      "category": "Composition",
      "example": {
        "image_url": "https://example.com/image.png",
        "operation": "grid",
        "params": {
          "format": "webp",
          "quality": 85,
          "background": "#FFFFFF",
          "direction": "horizontal",
          "columns": 2,
          "spacing": 4,
          "thumbnail_size": 256
        },
        "additional_image_urls": [
          "https://example.com/second.png"
        ]
      },
      "maximum_decoded_pixels": 50000000,
      "status": "READY"
    },
    "contact_sheet": {
      "description": "Generate a bounded thumbnail contact sheet from up to eight HTTPS inputs.",
      "category": "Composition",
      "example": {
        "image_url": "https://example.com/image.png",
        "operation": "contact_sheet",
        "params": {
          "format": "webp",
          "quality": 85,
          "background": "#FFFFFF",
          "direction": "horizontal",
          "columns": 2,
          "spacing": 4,
          "thumbnail_size": 256
        },
        "additional_image_urls": [
          "https://example.com/second.png"
        ]
      },
      "maximum_decoded_pixels": 50000000,
      "status": "READY"
    },
    "draw_text": {
      "description": "Draw literal text with a fixed server font and validated coordinates, color and opacity.",
      "category": "Drawing",
      "example": {
        "image_url": "https://example.com/image.png",
        "operation": "draw_text",
        "params": {
          "format": "webp",
          "quality": 85,
          "x": 0,
          "y": 0,
          "color": "#FF0000",
          "opacity": 1,
          "text": "ImageOps",
          "size": 24,
          "background": null,
          "font": "DejaVu Sans"
        }
      },
      "maximum_decoded_pixels": 50000000,
      "status": "READY"
    },
    "draw_rect": {
      "description": "Draw an in-bounds rectangle.",
      "category": "Drawing",
      "example": {
        "image_url": "https://example.com/image.png",
        "operation": "draw_rect",
        "params": {
          "format": "webp",
          "quality": 85,
          "x": 0,
          "y": 0,
          "color": "#FF0000",
          "opacity": 1,
          "width": 8,
          "height": 8,
          "fill": true
        }
      },
      "maximum_decoded_pixels": 50000000,
      "status": "READY"
    },
    "draw_line": {
      "description": "Draw a line between two in-bounds coordinates.",
      "category": "Drawing",
      "example": {
        "image_url": "https://example.com/image.png",
        "operation": "draw_line",
        "params": {
          "format": "webp",
          "quality": 85,
          "x": 0,
          "y": 0,
          "color": "#FF0000",
          "opacity": 1,
          "x2": 8,
          "y2": 8
        }
      },
      "maximum_decoded_pixels": 50000000,
      "status": "READY"
    },
    "draw_circle": {
      "description": "Draw an in-bounds circle.",
      "category": "Drawing",
      "example": {
        "image_url": "https://example.com/image.png",
        "operation": "draw_circle",
        "params": {
          "format": "webp",
          "quality": 85,
          "x": 8,
          "y": 8,
          "color": "#FF0000",
          "opacity": 1,
          "radius": 4,
          "fill": true
        }
      },
      "maximum_decoded_pixels": 50000000,
      "status": "READY"
    },
    "animation_info": {
      "description": "Read GIF or animated WebP frame count, duration and loop. Maximum 64 frames; no animation conversion.",
      "category": "Animation",
      "example": {
        "image_url": "https://example.com/image.png",
        "operation": "animation_info",
        "params": {}
      },
      "maximum_decoded_pixels": 50000000,
      "status": "READY"
    },
    "extract_frame": {
      "description": "Extract one GIF/WebP frame, at most 64 frames and 20 MP cumulative decoded pixels.",
      "category": "Animation",
      "example": {
        "image_url": "https://example.com/image.png",
        "operation": "extract_frame",
        "params": {
          "format": "webp",
          "quality": 85,
          "frame_index": 0
        }
      },
      "maximum_decoded_pixels": 50000000,
      "status": "READY"
    },
    "page_info": {
      "description": "Read PDF, TIFF or HEIF page count; maximum 32 pages.",
      "category": "Multipage",
      "example": {
        "image_url": "https://example.com/image.png",
        "operation": "page_info",
        "params": {}
      },
      "maximum_decoded_pixels": 50000000,
      "status": "READY"
    },
    "extract_page": {
      "description": "Extract one PDF/TIFF/HEIF page; final decoded image capped at 10 MP.",
      "category": "Multipage",
      "example": {
        "image_url": "https://example.com/image.png",
        "operation": "extract_page",
        "params": {
          "format": "webp",
          "quality": 85,
          "page_index": 0
        }
      },
      "maximum_decoded_pixels": 10000000,
      "status": "READY"
    },
    "pdf_to_image": {
      "description": "Render one PDF page, maximum 150 DPI, page index 31 and 10 MP.",
      "category": "Multipage",
      "example": {
        "image_url": "https://example.com/image.png",
        "operation": "pdf_to_image",
        "params": {
          "format": "webp",
          "quality": 85,
          "page": 0,
          "dpi": 72
        }
      },
      "maximum_decoded_pixels": 10000000,
      "status": "READY"
    },
    "tile": {
      "description": "Create bounded non-overlapping tiles with UUID manifest/archive URLs; no binary response.",
      "category": "Large Image",
      "example": {
        "image_url": "https://example.com/image.png",
        "operation": "tile",
        "params": {
          "tile_size": 512,
          "quality": 80
        }
      },
      "maximum_decoded_pixels": 20000000,
      "status": "READY"
    },
    "deepzoom": {
      "description": "Create a multiresolution tile pyramid with bounded manifest/archive URLs.",
      "category": "Large Image",
      "example": {
        "image_url": "https://example.com/image.png",
        "operation": "deepzoom",
        "params": {
          "tile_size": 512,
          "quality": 80
        }
      },
      "maximum_decoded_pixels": 20000000,
      "status": "READY"
    },
    "pyramid": {
      "description": "Create bounded multiresolution tiles; maximum 20 MP, 256 tiles and 25 MB aggregate package.",
      "category": "Large Image",
      "example": {
        "image_url": "https://example.com/image.png",
        "operation": "pyramid",
        "params": {
          "tile_size": 512,
          "quality": 80
        }
      },
      "maximum_decoded_pixels": 20000000,
      "status": "READY"
    },
    "crop": {
      "category": "Geometry",
      "description": "Existing compatible crop operation",
      "example": {
        "image_url": "https://example.com/image.jpg",
        "operation": "crop",
        "params": {
          "left": 0,
          "top": 0,
          "width": 400,
          "height": 300,
          "format": "webp"
        }
      },
      "maximum_decoded_pixels": 50000000,
      "status": "READY"
    },
    "sharpen": {
      "category": "Filters",
      "description": "Existing compatible sharpen operation",
      "example": {
        "image_url": "https://example.com/image.jpg",
        "operation": "sharpen",
        "params": {
          "sigma": 1.0,
          "amount": 1.5,
          "format": "webp"
        }
      },
      "maximum_decoded_pixels": 30000000,
      "status": "READY"
    },
    "contrast": {
      "category": "Color",
      "description": "Existing compatible contrast operation",
      "example": {
        "image_url": "https://example.com/image.jpg",
        "operation": "contrast",
        "params": {
          "amount": 20,
          "format": "webp"
        }
      },
      "maximum_decoded_pixels": 50000000,
      "status": "READY"
    },
    "grayscale": {
      "category": "Color",
      "description": "Existing compatible grayscale operation",
      "example": {
        "image_url": "https://example.com/image.jpg",
        "operation": "grayscale",
        "params": {
          "format": "webp"
        }
      },
      "maximum_decoded_pixels": 50000000,
      "status": "READY"
    },
    "trim": {
      "category": "Geometry",
      "description": "Existing compatible trim operation",
      "example": {
        "image_url": "https://example.com/image.jpg",
        "operation": "trim",
        "params": {
          "tolerance": 5,
          "background": "#ffffff",
          "format": "webp"
        }
      },
      "maximum_decoded_pixels": 50000000,
      "status": "READY"
    },
    "inspect": {
      "category": "Format & Metadata",
      "description": "Existing compatible inspect operation",
      "example": {
        "image_url": "https://example.com/image.png",
        "operation": "inspect",
        "params": {}
      },
      "maximum_decoded_pixels": 50000000,
      "status": "READY"
    },
    "brightness": {
      "category": "Color",
      "description": "Existing compatible brightness operation",
      "example": {
        "image_url": "https://example.com/image.jpg",
        "operation": "brightness",
        "params": {
          "amount": 15,
          "format": "webp"
        }
      },
      "maximum_decoded_pixels": 50000000,
      "status": "READY"
    },
    "convert": {
      "category": "Format & Metadata",
      "description": "Existing compatible convert operation",
      "example": {
        "image_url": "https://example.com/image.png",
        "operation": "convert",
        "params": {
          "format": "jpeg",
          "quality": 85,
          "background": "#FFFFFF",
          "strip_metadata": true
        }
      },
      "maximum_decoded_pixels": 50000000,
      "status": "READY"
    },
    "blur": {
      "category": "Filters",
      "description": "Existing compatible blur operation",
      "example": {
        "image_url": "https://example.com/image.jpg",
        "operation": "blur",
        "params": {
          "sigma": 2.0,
          "format": "webp"
        }
      },
      "maximum_decoded_pixels": 20000000,
      "status": "READY"
    },
    "flatten": {
      "category": "Composition",
      "description": "Existing compatible flatten operation",
      "example": {
        "image_url": "https://example.com/image.png",
        "operation": "flatten",
        "params": {
          "background": "#ffffff",
          "format": "jpeg"
        }
      },
      "maximum_decoded_pixels": 50000000,
      "status": "READY"
    },
    "compress": {
      "category": "Format & Metadata",
      "description": "Existing compatible compress operation",
      "example": {
        "image_url": "https://example.com/image.jpg",
        "operation": "compress",
        "params": {
          "format": "webp",
          "quality": 80
        }
      },
      "maximum_decoded_pixels": 50000000,
      "status": "READY"
    },
    "pad": {
      "category": "Geometry",
      "description": "Existing compatible pad operation",
      "example": {
        "image_url": "https://example.com/image.jpg",
        "operation": "pad",
        "params": {
          "width": 1200,
          "height": 1200,
          "gravity": "centre",
          "background": "#ffffff",
          "format": "webp"
        }
      },
      "maximum_decoded_pixels": 50000000,
      "status": "READY"
    },
    "auto_orient": {
      "category": "Geometry",
      "description": "Existing compatible auto_orient operation",
      "example": {
        "image_url": "https://example.com/image.jpg",
        "operation": "auto_orient",
        "params": {
          "format": "jpeg"
        }
      },
      "maximum_decoded_pixels": 50000000,
      "status": "READY"
    },
    "smartcrop": {
      "category": "Geometry",
      "description": "Existing compatible smartcrop operation",
      "example": {
        "image_url": "https://example.com/image.jpg",
        "operation": "smartcrop",
        "params": {
          "width": 512,
          "height": 512,
          "strategy": "attention",
          "format": "webp"
        }
      },
      "maximum_decoded_pixels": 50000000,
      "status": "READY"
    },
    "thumbnail": {
      "category": "Geometry",
      "description": "Existing compatible thumbnail operation",
      "example": {
        "image_url": "https://example.com/image.jpg",
        "operation": "thumbnail",
        "params": {
          "width": 320,
          "height": 320,
          "format": "webp"
        }
      },
      "maximum_decoded_pixels": 50000000,
      "status": "READY"
    },
    "stats": {
      "category": "Analysis",
      "description": "Existing compatible stats operation",
      "example": {
        "image_url": "https://example.com/image.jpg",
        "operation": "stats",
        "params": {}
      },
      "maximum_decoded_pixels": 50000000,
      "status": "READY"
    },
    "flip": {
      "category": "Geometry",
      "description": "Existing compatible flip operation",
      "example": {
        "image_url": "https://example.com/image.jpg",
        "operation": "flip",
        "params": {
          "horizontal": true,
          "format": "webp"
        }
      },
      "maximum_decoded_pixels": 50000000,
      "status": "READY"
    },
    "resize": {
      "category": "Geometry",
      "description": "Existing compatible resize operation",
      "example": {
        "image_url": "https://example.com/image.jpg",
        "operation": "resize",
        "params": {
          "width": 1000,
          "height": 1000,
          "fit": "contain",
          "format": "webp"
        }
      },
      "maximum_decoded_pixels": 50000000,
      "status": "READY"
    },
    "rotate": {
      "category": "Geometry",
      "description": "Existing compatible rotate operation",
      "example": {
        "image_url": "https://example.com/image.jpg",
        "operation": "rotate",
        "params": {
          "angle": 45,
          "background": "#ffffff",
          "format": "webp"
        }
      },
      "maximum_decoded_pixels": 50000000,
      "status": "READY"
    },
    "strip_metadata": {
      "category": "Format & Metadata",
      "description": "Existing compatible strip_metadata operation",
      "example": {
        "image_url": "https://example.com/image.jpg",
        "operation": "strip_metadata",
        "params": {
          "format": "jpeg"
        }
      },
      "maximum_decoded_pixels": 50000000,
      "status": "READY"
    },
    "gamma": {
      "category": "Color",
      "description": "Existing compatible gamma operation",
      "example": {
        "image_url": "https://example.com/image.jpg",
        "operation": "gamma",
        "params": {
          "gamma": 2.2,
          "format": "webp"
        }
      },
      "maximum_decoded_pixels": 50000000,
      "status": "READY"
    }
  }
}
