> For the complete documentation index, see [llms.txt](https://bridgeapi.gitbook.io/bridgeapi/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://bridgeapi.gitbook.io/bridgeapi/image-processing.md).

# Image Processing

Transform, resize, or annotate images with simple HTTPS requests.

## Remove background (JSON or PNG)

> Remove the background from a single image. By default the endpoint returns a JSON\
> description from the upstream background-removal worker. To receive raw PNG bytes,\
> set \`raw=true\` (query or form field) or set \`Accept: image/png\`.

```json
{"openapi":"3.0.3","info":{"title":"BridgeAPI","version":"1.0.0"},"tags":[{"name":"Image Processing","description":"Transform, resize, or annotate images with simple HTTPS requests."}],"servers":[{"url":"https://api.bridgeapi.store/","description":"Production server"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-Key"}},"headers":{"RequestId":{"description":"Unique identifier for this request. Include it when contacting support.","schema":{"type":"string"}}},"responses":{"BadRequestError":{"description":"The input had a mistake. Fix the parameters or body and try again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"UnauthorizedError":{"description":"Missing or incorrect `X-API-Key`. BridgeAPI cannot process anonymous calls.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"ServerError":{"description":"BridgeAPI encountered an internal problem. Retry later or contact support with the `requestId`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"NotConfiguredError":{"description":"The feature is turned off on this deployment. Contact support if you expected it to work.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"schemas":{"ErrorResponse":{"type":"object","description":"Friendly error payload returned by BridgeAPI when something goes wrong.","properties":{"error":{"type":"string","description":"Short machine-readable error code such as `bad_request` or `unauthorized`."},"message":{"type":"string","description":"Human explanation written in plain language."},"requestId":{"type":"string","description":"Internal trace ID you can share with support if you need help."},"helpUrl":{"type":"string","nullable":true,"description":"Optional link with more guidance for resolving the error."}},"required":["error","message"]}}},"paths":{"/v1/transparent":{"post":{"summary":"Remove background (JSON or PNG)","operationId":"removeBackground","tags":["Image Processing"],"description":"Remove the background from a single image. By default the endpoint returns a JSON\ndescription from the upstream background-removal worker. To receive raw PNG bytes,\nset `raw=true` (query or form field) or set `Accept: image/png`.","requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary","description":"The source image."},"raw":{"type":"boolean","description":"When true, return PNG bytes instead of JSON."},"model":{"type":"string","description":"Optional model hint for the upstream worker."},"alphaMatte":{"type":"boolean","description":"Return alpha matte if supported by the model."}}}}}},"responses":{"200":{"description":"JSON envelope by default or PNG bytes when `raw=true`.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"type":"object","description":"Upstream JSON response; exact fields depend on the worker.","additionalProperties":true}},"image/png":{"schema":{"type":"string","format":"binary"}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"500":{"$ref":"#/components/responses/ServerError"},"501":{"$ref":"#/components/responses/NotConfiguredError"}}}}}}
```

## Remove background (PNG bytes)

> Always returns PNG bytes with the background removed.

```json
{"openapi":"3.0.3","info":{"title":"BridgeAPI","version":"1.0.0"},"tags":[{"name":"Image Processing","description":"Transform, resize, or annotate images with simple HTTPS requests."}],"servers":[{"url":"https://api.bridgeapi.store/","description":"Production server"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-Key"}},"headers":{"RequestId":{"description":"Unique identifier for this request. Include it when contacting support.","schema":{"type":"string"}}},"responses":{"BadRequestError":{"description":"The input had a mistake. Fix the parameters or body and try again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"UnauthorizedError":{"description":"Missing or incorrect `X-API-Key`. BridgeAPI cannot process anonymous calls.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"ServerError":{"description":"BridgeAPI encountered an internal problem. Retry later or contact support with the `requestId`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"NotConfiguredError":{"description":"The feature is turned off on this deployment. Contact support if you expected it to work.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"schemas":{"ErrorResponse":{"type":"object","description":"Friendly error payload returned by BridgeAPI when something goes wrong.","properties":{"error":{"type":"string","description":"Short machine-readable error code such as `bad_request` or `unauthorized`."},"message":{"type":"string","description":"Human explanation written in plain language."},"requestId":{"type":"string","description":"Internal trace ID you can share with support if you need help."},"helpUrl":{"type":"string","nullable":true,"description":"Optional link with more guidance for resolving the error."}},"required":["error","message"]}}},"paths":{"/v1/transparent/png":{"post":{"summary":"Remove background (PNG bytes)","operationId":"removeBackgroundPng","tags":["Image Processing"],"description":"Always returns PNG bytes with the background removed.","requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary","description":"The source image."},"model":{"type":"string","description":"Optional model hint for the upstream worker."},"alphaMatte":{"type":"boolean","description":"Return alpha matte if supported by the model."}}}}}},"responses":{"200":{"description":"PNG image bytes with background removed.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"image/png":{"schema":{"type":"string","format":"binary"}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"500":{"$ref":"#/components/responses/ServerError"},"501":{"$ref":"#/components/responses/NotConfiguredError"}}}}}}
```

## Convert image

> Upload a single image and BridgeAPI will change it to the format you need. This is handy when a website only\
> accepts JPEG but you currently have a PNG, or when you want to shrink a photo before placing it in a slide deck.\
> You must include your image file and can optionally control the output format and quality.

```json
{"openapi":"3.0.3","info":{"title":"BridgeAPI","version":"1.0.0"},"tags":[{"name":"Image Processing","description":"Transform, resize, or annotate images with simple HTTPS requests."}],"servers":[{"url":"https://api.bridgeapi.store/","description":"Production server"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-Key"}},"headers":{"RequestId":{"description":"Unique identifier for this request. Include it when contacting support.","schema":{"type":"string"}}},"responses":{"BadRequestError":{"description":"The input had a mistake. Fix the parameters or body and try again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"UnauthorizedError":{"description":"Missing or incorrect `X-API-Key`. BridgeAPI cannot process anonymous calls.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"ServerError":{"description":"BridgeAPI encountered an internal problem. Retry later or contact support with the `requestId`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"schemas":{"ErrorResponse":{"type":"object","description":"Friendly error payload returned by BridgeAPI when something goes wrong.","properties":{"error":{"type":"string","description":"Short machine-readable error code such as `bad_request` or `unauthorized`."},"message":{"type":"string","description":"Human explanation written in plain language."},"requestId":{"type":"string","description":"Internal trace ID you can share with support if you need help."},"helpUrl":{"type":"string","nullable":true,"description":"Optional link with more guidance for resolving the error."}},"required":["error","message"]}}},"paths":{"/v1/image/convert":{"post":{"summary":"Convert image","operationId":"convertImage","tags":["Image Processing"],"description":"Upload a single image and BridgeAPI will change it to the format you need. This is handy when a website only\naccepts JPEG but you currently have a PNG, or when you want to shrink a photo before placing it in a slide deck.\nYou must include your image file and can optionally control the output format and quality.","requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary","description":"The source image you want to convert."},"format":{"type":"string","enum":["webp","jpeg","png","avif","heic"],"description":"Choose the desired output format. Leave blank to keep the original format."},"quality":{"type":"integer","minimum":1,"maximum":100,"description":"Optional compression quality (higher means better quality but larger files)."}}}}}},"responses":{"200":{"description":"Binary image data in the chosen format.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"image/*":{"schema":{"type":"string","format":"binary"}},"application/json":{"schema":{"type":"object","description":"Base64 encoded image when `Accept: application/json` is provided.","properties":{"contentType":{"type":"string"},"sizeBytes":{"type":"integer"},"bytesBase64":{"type":"string","description":"Image encoded as Base64 text"}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"500":{"$ref":"#/components/responses/ServerError"}}}}}}
```

## Convert image to target size

> Compress an image until it lands near a size that you choose. This is perfect for upload forms that only allow\
> files under a certain number of kilobytes. BridgeAPI will try different quality levels automatically while\
> preserving as much visual clarity as possible.

```json
{"openapi":"3.0.3","info":{"title":"BridgeAPI","version":"1.0.0"},"tags":[{"name":"Image Processing","description":"Transform, resize, or annotate images with simple HTTPS requests."}],"servers":[{"url":"https://api.bridgeapi.store/","description":"Production server"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-Key"}},"headers":{"RequestId":{"description":"Unique identifier for this request. Include it when contacting support.","schema":{"type":"string"}}},"responses":{"BadRequestError":{"description":"The input had a mistake. Fix the parameters or body and try again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"UnauthorizedError":{"description":"Missing or incorrect `X-API-Key`. BridgeAPI cannot process anonymous calls.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"UnprocessableError":{"description":"BridgeAPI tried to fulfil the request but could not reach the target goal (for example, compression target).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"ServerError":{"description":"BridgeAPI encountered an internal problem. Retry later or contact support with the `requestId`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"schemas":{"ErrorResponse":{"type":"object","description":"Friendly error payload returned by BridgeAPI when something goes wrong.","properties":{"error":{"type":"string","description":"Short machine-readable error code such as `bad_request` or `unauthorized`."},"message":{"type":"string","description":"Human explanation written in plain language."},"requestId":{"type":"string","description":"Internal trace ID you can share with support if you need help."},"helpUrl":{"type":"string","nullable":true,"description":"Optional link with more guidance for resolving the error."}},"required":["error","message"]}}},"paths":{"/v1/image/convert/target":{"post":{"summary":"Convert image to target size","operationId":"convertImageToTarget","tags":["Image Processing"],"description":"Compress an image until it lands near a size that you choose. This is perfect for upload forms that only allow\nfiles under a certain number of kilobytes. BridgeAPI will try different quality levels automatically while\npreserving as much visual clarity as possible.","requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary","description":"The original image file you would like to shrink."},"format":{"type":"string","description":"Desired output format. Leave blank to keep original format."},"targetKB":{"type":"integer","description":"Aim for this many kilobytes (KB). BridgeAPI stops when it gets as close as possible."},"targetMB":{"type":"integer","description":"Alternative target in megabytes (MB). Use either `targetKB` or `targetMB`."},"tolerancePct":{"type":"integer","minimum":1,"maximum":30,"description":"How far above the target size is acceptable. A tolerance of 10 means ±10%."}}}}}},"responses":{"200":{"description":"Binary image data that lands close to the requested target size.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"image/*":{"schema":{"type":"string","format":"binary"}},"application/json":{"schema":{"type":"object","description":"Base64 encoded image when requesting JSON output.","properties":{"contentType":{"type":"string"},"targetKB":{"type":"integer","description":"Requested kilobyte target"},"achievedKB":{"type":"integer","description":"Actual kilobyte size after compression"},"bytesBase64":{"type":"string"}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"422":{"$ref":"#/components/responses/UnprocessableError"},"500":{"$ref":"#/components/responses/ServerError"}}}}}}
```

## Text overlay

> Place a text caption on top of an image. Use this when you want to watermark social-media posts, add a label\
> or version number, or write a short note on screenshots before sharing them.

```json
{"openapi":"3.0.3","info":{"title":"BridgeAPI","version":"1.0.0"},"tags":[{"name":"Image Processing","description":"Transform, resize, or annotate images with simple HTTPS requests."}],"servers":[{"url":"https://api.bridgeapi.store/","description":"Production server"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-Key"}},"headers":{"RequestId":{"description":"Unique identifier for this request. Include it when contacting support.","schema":{"type":"string"}}},"responses":{"BadRequestError":{"description":"The input had a mistake. Fix the parameters or body and try again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"UnauthorizedError":{"description":"Missing or incorrect `X-API-Key`. BridgeAPI cannot process anonymous calls.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"ServerError":{"description":"BridgeAPI encountered an internal problem. Retry later or contact support with the `requestId`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"schemas":{"ErrorResponse":{"type":"object","description":"Friendly error payload returned by BridgeAPI when something goes wrong.","properties":{"error":{"type":"string","description":"Short machine-readable error code such as `bad_request` or `unauthorized`."},"message":{"type":"string","description":"Human explanation written in plain language."},"requestId":{"type":"string","description":"Internal trace ID you can share with support if you need help."},"helpUrl":{"type":"string","nullable":true,"description":"Optional link with more guidance for resolving the error."}},"required":["error","message"]}}},"paths":{"/v1/image/text":{"post":{"summary":"Text overlay","operationId":"overlayImageText","tags":["Image Processing"],"description":"Place a text caption on top of an image. Use this when you want to watermark social-media posts, add a label\nor version number, or write a short note on screenshots before sharing them.","requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary","description":"The base image you want to label."},"text":{"type":"string","description":"The words that should appear on the image."}}}}}},"responses":{"200":{"description":"Image with the added text overlay.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"image/*":{"schema":{"type":"string","format":"binary"}},"application/json":{"schema":{"type":"object","properties":{"contentType":{"type":"string"},"bytesBase64":{"type":"string"},"message":{"type":"string"}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"500":{"$ref":"#/components/responses/ServerError"}}}}}}
```

## Watermark overlay

> Stamp a watermark image onto another image so that screenshots or documents keep your branding. Supply either\
> a watermark file directly or reference a stored branding preset.

```json
{"openapi":"3.0.3","info":{"title":"BridgeAPI","version":"1.0.0"},"tags":[{"name":"Image Processing","description":"Transform, resize, or annotate images with simple HTTPS requests."}],"servers":[{"url":"https://api.bridgeapi.store/","description":"Production server"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-Key"}},"headers":{"RequestId":{"description":"Unique identifier for this request. Include it when contacting support.","schema":{"type":"string"}}},"responses":{"BadRequestError":{"description":"The input had a mistake. Fix the parameters or body and try again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"UnauthorizedError":{"description":"Missing or incorrect `X-API-Key`. BridgeAPI cannot process anonymous calls.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"ForbiddenError":{"description":"The request was understood but cannot be performed for this account or plan.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"ServerError":{"description":"BridgeAPI encountered an internal problem. Retry later or contact support with the `requestId`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"schemas":{"ErrorResponse":{"type":"object","description":"Friendly error payload returned by BridgeAPI when something goes wrong.","properties":{"error":{"type":"string","description":"Short machine-readable error code such as `bad_request` or `unauthorized`."},"message":{"type":"string","description":"Human explanation written in plain language."},"requestId":{"type":"string","description":"Internal trace ID you can share with support if you need help."},"helpUrl":{"type":"string","nullable":true,"description":"Optional link with more guidance for resolving the error."}},"required":["error","message"]}}},"paths":{"/v1/image/watermark":{"post":{"summary":"Watermark overlay","operationId":"addImageWatermark","tags":["Image Processing"],"description":"Stamp a watermark image onto another image so that screenshots or documents keep your branding. Supply either\na watermark file directly or reference a stored branding preset.","requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary","description":"Base image to watermark."},"mark":{"type":"string","format":"binary","description":"Optional watermark graphic. Provide this or `brandId`."},"brandId":{"type":"string","description":"Use an existing branding preset instead of uploading `mark` each time."}}}}}},"responses":{"200":{"description":"Image with the watermark applied.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"image/*":{"schema":{"type":"string","format":"binary"}},"application/json":{"schema":{"type":"object","properties":{"contentType":{"type":"string"},"bytesBase64":{"type":"string"},"message":{"type":"string"}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"403":{"$ref":"#/components/responses/ForbiddenError"},"500":{"$ref":"#/components/responses/ServerError"}}}}}}
```

## Batch convert images

> Convert many images in one call. Send multiple files and BridgeAPI will process them sequentially so you can\
> download them as a zip or JSON envelope. Ideal for preparing product photos or marketing assets at once.

```json
{"openapi":"3.0.3","info":{"title":"BridgeAPI","version":"1.0.0"},"tags":[{"name":"Image Processing","description":"Transform, resize, or annotate images with simple HTTPS requests."}],"servers":[{"url":"https://api.bridgeapi.store/","description":"Production server"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-Key"}},"headers":{"RequestId":{"description":"Unique identifier for this request. Include it when contacting support.","schema":{"type":"string"}}},"schemas":{"ZipJson":{"type":"object","description":"JSON envelope for zip responses when Accept includes application/json.","properties":{"contentType":{"type":"string"},"sizeBytes":{"type":"integer"},"files":{"type":"integer","nullable":true,"description":"Number of files in archive"},"durationMs":{"type":"integer"},"timestamp":{"type":"string","format":"date-time"},"to":{"type":"string","nullable":true},"dpi":{"type":"integer","nullable":true},"pages":{"type":"string","nullable":true},"bytesBase64":{"type":"string"}}},"ErrorResponse":{"type":"object","description":"Friendly error payload returned by BridgeAPI when something goes wrong.","properties":{"error":{"type":"string","description":"Short machine-readable error code such as `bad_request` or `unauthorized`."},"message":{"type":"string","description":"Human explanation written in plain language."},"requestId":{"type":"string","description":"Internal trace ID you can share with support if you need help."},"helpUrl":{"type":"string","nullable":true,"description":"Optional link with more guidance for resolving the error."}},"required":["error","message"]}},"responses":{"BadRequestError":{"description":"The input had a mistake. Fix the parameters or body and try again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"UnauthorizedError":{"description":"Missing or incorrect `X-API-Key`. BridgeAPI cannot process anonymous calls.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"ServerError":{"description":"BridgeAPI encountered an internal problem. Retry later or contact support with the `requestId`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"paths":{"/v1/image/convert/batch":{"post":{"summary":"Batch convert images","operationId":"batchConvertImages","tags":["Image Processing"],"description":"Convert many images in one call. Send multiple files and BridgeAPI will process them sequentially so you can\ndownload them as a zip or JSON envelope. Ideal for preparing product photos or marketing assets at once.","requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file[]":{"type":"array","items":{"type":"string","format":"binary"},"description":"Each image you want to convert."},"formats":{"type":"string","description":"Comma-separated list of desired output formats. If fewer formats than files are provided, the last one is reused."}}}}}},"responses":{"200":{"description":"Zip archive containing converted images or JSON with Base64 content when requested.","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/zip":{"schema":{"type":"string","format":"binary"}},"application/json":{"schema":{"$ref":"#/components/schemas/ZipJson"}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"500":{"$ref":"#/components/responses/ServerError"}}}}}}
```

## Strip image metadata

> Remove EXIF and other metadata from an image. Optionally re-encode to a target format.

```json
{"openapi":"3.0.3","info":{"title":"BridgeAPI","version":"1.0.0"},"tags":[{"name":"Image Processing","description":"Transform, resize, or annotate images with simple HTTPS requests."}],"servers":[{"url":"https://api.bridgeapi.store/","description":"Production server"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-Key"}},"responses":{"BadRequestError":{"description":"The input had a mistake. Fix the parameters or body and try again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"UnauthorizedError":{"description":"Missing or incorrect `X-API-Key`. BridgeAPI cannot process anonymous calls.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"ServerError":{"description":"BridgeAPI encountered an internal problem. Retry later or contact support with the `requestId`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"schemas":{"ErrorResponse":{"type":"object","description":"Friendly error payload returned by BridgeAPI when something goes wrong.","properties":{"error":{"type":"string","description":"Short machine-readable error code such as `bad_request` or `unauthorized`."},"message":{"type":"string","description":"Human explanation written in plain language."},"requestId":{"type":"string","description":"Internal trace ID you can share with support if you need help."},"helpUrl":{"type":"string","nullable":true,"description":"Optional link with more guidance for resolving the error."}},"required":["error","message"]}}},"paths":{"/v1/image/strip-metadata":{"post":{"summary":"Strip image metadata","operationId":"stripImageMetadata","tags":["Image Processing"],"description":"Remove EXIF and other metadata from an image. Optionally re-encode to a target format.","requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary","description":"Source image."},"format":{"type":"string","enum":["jpeg","jpg","png","webp","avif","heic"]}}}}}},"responses":{"200":{"description":"Binary image with metadata removed, or JSON when requested.","content":{"image/*":{"schema":{"type":"string","format":"binary"}},"application/json":{"schema":{"type":"object","properties":{"contentType":{"type":"string"},"sizeBytes":{"type":"integer"},"bytesBase64":{"type":"string"}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"500":{"$ref":"#/components/responses/ServerError"}}}}}}
```

## Extract image metadata

> Return EXIF and decoder metadata as JSON.

```json
{"openapi":"3.0.3","info":{"title":"BridgeAPI","version":"1.0.0"},"tags":[{"name":"Image Processing","description":"Transform, resize, or annotate images with simple HTTPS requests."}],"servers":[{"url":"https://api.bridgeapi.store/","description":"Production server"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-Key"}},"responses":{"BadRequestError":{"description":"The input had a mistake. Fix the parameters or body and try again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"UnauthorizedError":{"description":"Missing or incorrect `X-API-Key`. BridgeAPI cannot process anonymous calls.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"ServerError":{"description":"BridgeAPI encountered an internal problem. Retry later or contact support with the `requestId`.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"schemas":{"ErrorResponse":{"type":"object","description":"Friendly error payload returned by BridgeAPI when something goes wrong.","properties":{"error":{"type":"string","description":"Short machine-readable error code such as `bad_request` or `unauthorized`."},"message":{"type":"string","description":"Human explanation written in plain language."},"requestId":{"type":"string","description":"Internal trace ID you can share with support if you need help."},"helpUrl":{"type":"string","nullable":true,"description":"Optional link with more guidance for resolving the error."}},"required":["error","message"]}}},"paths":{"/v1/image/metadata":{"post":{"summary":"Extract image metadata","operationId":"extractImageMetadata","tags":["Image Processing"],"description":"Return EXIF and decoder metadata as JSON.","requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary","description":"Source image."}}}}}},"responses":{"200":{"description":"JSON with metadata fields.","content":{"application/json":{"schema":{"type":"object","properties":{"metadata":{"type":"object","additionalProperties":true}}}}}},"400":{"$ref":"#/components/responses/BadRequestError"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"500":{"$ref":"#/components/responses/ServerError"}}}}}}
```

## Image options and limits

> Learn the current plan limits for image endpoints, including max file sizes, supported formats, and quotas.

```json
{"openapi":"3.0.3","info":{"title":"BridgeAPI","version":"1.0.0"},"tags":[{"name":"Image Processing","description":"Transform, resize, or annotate images with simple HTTPS requests."}],"servers":[{"url":"https://api.bridgeapi.store/","description":"Production server"}],"security":[{"ApiKeyAuth":[]}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"apiKey","in":"header","name":"X-API-Key"}},"headers":{"RequestId":{"description":"Unique identifier for this request. Include it when contacting support.","schema":{"type":"string"}}},"responses":{"UnauthorizedError":{"description":"Missing or incorrect `X-API-Key`. BridgeAPI cannot process anonymous calls.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}},"schemas":{"ErrorResponse":{"type":"object","description":"Friendly error payload returned by BridgeAPI when something goes wrong.","properties":{"error":{"type":"string","description":"Short machine-readable error code such as `bad_request` or `unauthorized`."},"message":{"type":"string","description":"Human explanation written in plain language."},"requestId":{"type":"string","description":"Internal trace ID you can share with support if you need help."},"helpUrl":{"type":"string","nullable":true,"description":"Optional link with more guidance for resolving the error."}},"required":["error","message"]}}},"paths":{"/v1/image/options":{"get":{"summary":"Image options and limits","operationId":"getImageOptions","tags":["Image Processing"],"description":"Learn the current plan limits for image endpoints, including max file sizes, supported formats, and quotas.","responses":{"200":{"description":"Plan-based limits, supported formats, and parameter ranges","headers":{"X-Request-Id":{"$ref":"#/components/headers/RequestId"}},"content":{"application/json":{"schema":{"type":"object","properties":{"plan":{"type":"string"},"user":{"type":"object","properties":{"id":{"type":"string","nullable":true},"planId":{"type":"string","nullable":true},"quotaLeft":{"type":"integer","nullable":true},"maxFileMB":{"type":"integer"},"monthlyLimit":{"type":"integer"}}},"limits":{"type":"object","properties":{"maxFileMB":{"type":"integer"},"monthlyLimit":{"type":"integer"},"quotaLeft":{"type":"integer","nullable":true},"burstPerMinute":{"type":"integer"}}},"formats":{"type":"object","properties":{"input":{"type":"array","items":{"type":"string"}},"output":{"type":"array","items":{"type":"string"}}}},"params":{"type":"object"},"responses":{"type":"object"}}}}}},"401":{"$ref":"#/components/responses/UnauthorizedError"}}}}}}
```
