Image Convert API Reference

Complete reference for the image format conversion endpoint — request parameters, supported formats, resize options, and code examples.

Endpoint

POST /api/v1/images/convert

Scope required: image

Request

Headers

HeaderRequiredDescription
Authorization: Bearer <key>Yes*API key with image scope
x-api-key: <key>Yes*Alternative to Bearer token
Idempotency-KeyNoSafe retry key

Input Source (choose one)

FieldTypeSource
fileBinaryFile upload via multipart
image_urlString (URI)Public HTTP/HTTPS URL
image_base64StringBase64-encoded image content

When using the JSON body, use image_base64 (not base64 as in OCR). Provide mime_type and file_name for correct output.

Output Format

FieldRequiredValues
output_formatYesjpeg, png, webp, avif

Optional Parameters

FieldTypeDefaultDescription
qualityInteger (1–100)85 (jpeg), 80 (webp), 50 (avif)Output quality. Higher = better quality, larger file. Ignored for PNG.
widthInteger (1–10000)Output width in pixels
heightInteger (1–10000)Output height in pixels
fitStringinsideResize behavior: inside, cover, fill
preserve_metadataBooleanfalseKeep non-dangerous source metadata (EXIF, etc.)

Fit Modes

ModeBehavior
insideScale to fit within width×height, preserving aspect ratio
coverScale to cover width×height, crop excess
fillStretch to exactly width×height

Example

curl -X POST https://image-to-text.org/api/v1/images/convert \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -F "[email protected]" \
  -F "output_format=webp" \
  -F "quality=85" \
  -F "width=1200"

Response

Success (200)

{
  "success": true,
  "request_id": "req_xyz...",
  "elapsed_ms": 320,
  "data": {
    "output": {
      "filename": "photo.webp",
      "content_type": "image/webp",
      "format": "webp",
      "width": 1200,
      "height": 900,
      "size_bytes": 48520,
      "base64": "/9j/4AAQ..."
    },
    "input": {
      "source": {
        "kind": "file",
        "name": "photo.jpg",
        "type": "image/jpeg"
      },
      "format": "jpeg",
      "width": 2400,
      "height": 1800,
      "size_bytes": 156200
    },
    "metrics": {
      "input_bytes": 156200,
      "output_bytes": 48520,
      "bytes_saved": 107680,
      "compression_ratio": 0.31
    },
    "usage": {
      "credits": 5,
      "pixel_workload": 4320000,
      "input_pixels": 4320000,
      "output_pixels": 1080000
    },
    "resize": {
      "width": 1200,
      "height": null,
      "fit": "inside"
    }
  }
}

Response Fields

FieldTypeDescription
data.output.base64StringConverted image as base64
data.output.filenameStringSanitized output filename
data.output.content_typeStringMIME type of the output
data.output.formatStringOutput format (jpeg, png, webp, avif)
data.output.width / heightIntegerOutput dimensions
data.output.size_bytesIntegerOutput file size
data.inputObjectSource image metadata
data.metricsObjectSize comparison (input/output bytes, bytes saved, ratio)
data.usageObjectBilling info (credits, pixel workload)
data.resizeObjectApplied resize (or null)

Supported Conversions

From ↓ / To →JPEGPNGWebPAVIF
JPEG
PNG
WebP
AVIF
GIF
TIFF

GIF and TIFF are accepted as input only (static, first frame/image).

Code Example

import requests

response = requests.post(
    "https://image-to-text.org/api/v1/images/convert",
    headers={"Authorization": "Bearer YOUR_API_KEY"},
    files={"file": open("photo.png", "rb")},
    data={
        "output_format": "webp",
        "quality": "85",
        "width": "1200",
        "fit": "inside",
    },
)

data = response.json()
if data["success"]:
    import base64
    with open("output.webp", "wb") as f:
        f.write(base64.b64decode(data["data"]["output"]["base64"]))