How it works
Jobs are asynchronous, so a 500-photo batch or a long film never times out:
- Upload your file to a presigned URL we give you (files never pass through a size-limited request body).
- Create a job with the tool and options. You get a job ID immediately.
- Get the result from a webhook we call when it's done, or by polling the job. Results are available for 24 hours (7 days for video).
Example
POST /v1/jobs
Authorization: Bearer <your API key>
Content-Type: application/json
{
"tool": "colorize",
"source": "upl_7Hq2…", // from POST /v1/uploads
"options": { "style": "natural", "upscale": 2, "format": "tiff16" },
"webhook": "https://example.com/hooks/ungray"
}
→ 202 { "id": "job_c81…", "status": "queued" }
GET /v1/jobs/job_c81…
→ 200 { "status": "done", "output": [6048, 4032],
"full_url": "https://…", "preview_url": "https://…" }
Options
| Tool | Options |
|---|---|
colorize | style: natural, subtle, vivid, warm · upscale: 1, 2, 4 · format: jpeg, png, tiff16 |
upscale | scale: 2, 4 · format |
video | style · max_seconds (for previews) · output H.264 MP4 with the original audio |
Data handling
Files are processed on GPU servers and deleted automatically after delivery (24 hours for photos, 7 days for video). We never train on your files. Data processing agreements are available, and EU-only processing can be arranged for archives that need it.
Request access
The API is in early access. Tell us about your project and expected volume, and we'll set you up with a key and test credits.