Skip to content

Media Conversion API

Image, video and 3D-model conversion are live. They follow the same 3-step shape as Document Conversion: submit → poll → download.

Auth is the same bearer token as everywhere else; anonymous callers are served within the free quota.

Submit

Media Endpoint
Image POST /api/v1/convert/image/convert/
Video POST /api/v1/convert/video/convert/
3D model POST /api/v1/convert/model/convert/

Send multipart/form-data with a file part, or reference a remote source with file_url / s3_key — exactly one of the two. target_formats selects the output.

curl -sS https://indox.org/api/v1/convert/image/convert/ \
  -H "Authorization: Bearer $INDOX_API_KEY" \
  -F file=@photo.png \
  -F target_formats=jpeg
{ "id": "5b6a5a66-…", "status": "pending", "service": "image" }

Poll

Media Endpoint
Image GET /api/v1/convert/image/conversion/{conversion_id}/
3D model GET /api/v1/convert/model/conversion/{conversion_id}/
Any media GET /api/v1/media_core/conversion/{conversion_id}/

GET /api/v1/media_core/conversion/wait/{conversion_id}/ long-polls to a terminal state instead of returning immediately.

Download

GET /api/v1/media_core/files/{conversion_id}/download/

Batch: POST /api/v1/media_core/batch/collect/ then GET /api/v1/media_core/batch/{batch_id}/download/.

Capabilities

GET /api/v1/convert/{image,video,model}/formats/ lists what converts to what, and GET /api/v1/convert/{image,model}/operations/ lists the per-media operations. Check these before spending credits — an unsupported pair is rejected at submit with a 400.

Legacy aliases

/api/v1/image_converter/, /api/v1/video_converter/ and /api/v1/model/ remain mounted and route to the same views. Prefer the canonical convert/ paths above; the aliases are kept for existing integrations.

The official SDKs wrap all of this — in Python, client.images, client.videos and client.models.