Call any tool directly from your own code or app — no browser, no manual uploads. Available on the Business plan.
Generate a key from your dashboard — Business plan only. The full key is shown once, right when you generate it; after that, only a masked preview is shown. Keys expire after 30 days and can be regenerated anytime.
Include your API key in every request using the X-API-Key header:
A missing or invalid key returns a 401 response.
An expired key is treated the same as an invalid one — generate a new one from your dashboard.
Removes the background from an image. Costs 1 credit.
| Field | Type | Required | Notes |
|---|---|---|---|
| image | file | Yes | PNG, JPG, or WebP — max 15MB |
Processing happens asynchronously — use the jobId with GET /api/jobs/:id to check status and get the result.
Upscales an image 2× or 4× with AI detail reconstruction. Costs 1 credit.
| Field | Type | Required | Notes |
|---|---|---|---|
| image | file | Yes | PNG, JPG, or WebP — max 15MB |
| scale | number | No | 2 or 4 — defaults to 4 |
Automatically detects and removes a watermark — no manual masking needed. Costs 2 credits.
| Field | Type | Required | Notes |
|---|---|---|---|
| image | file | Yes | PNG, JPG, or WebP — max 15MB |
The result's outputUrl
(once the job completes) is a data: URL
containing the image directly, rather than a hosted link.
Extends a photo's edges with AI-generated content matching the original. Costs 2 credits.
| Field | Type | Required | Notes |
|---|---|---|---|
| image | file | Yes | Your image, pre-padded with blank space on the sides you want to extend |
| mask | file | Yes | White = area to generate, black = keep original — same dimensions as image |
| prompt | string | No | Custom guidance for the AI — a sensible default is used if omitted |
Building the padded image and mask requires some image manipulation on your end before calling this endpoint — see how the Image Expander tool itself constructs them if you need a reference.
Checks the status of a job created by any of the endpoints above. Poll this every 2-3 seconds until the status is no longer "processing".
Max 10 requests per 5 seconds per key — comfortably covers polling every 2-3 seconds from several tabs at once, while still catching a runaway loop. Exceeding it returns a 429.
Credits are only ever deducted on a successful completion — a failed job never costs anything.
Processes up to 10 images at once with the same tool. Available on Pro and Business plans.
| Field | Type | Required | Notes |
|---|---|---|---|
| tool | string | Yes | bg-remove, upscale, or watermark-remove |
| images | file[] | Yes | Up to 10 files, same field name repeated |
Check each job individually with GET /api/jobs-batch?ids=1,2
— a single request covering multiple jobs, rather than polling each one separately.
| Status | Meaning |
|---|---|
| 400 | Missing or invalid request field (e.g. no image uploaded) |
| 401 | Missing, invalid, or expired API key |
| 402 | Not enough credits for this request |
| 403 | Your plan doesn't include this feature (e.g. bulk upload on Free) |
| 413 | File too large — 15MB max per image |
| 429 | Too many requests to the job status endpoint — max 10 per 5 seconds per key |
| 500 | Something went wrong on our end — safe to retry |
Every error response has the shape { "success": false, "error": "..." }.