Every OmniKitly tool, programmable.
Build document and media processing directly into your apps. One job model, every tool, async by design.
The API does not exist yet. This page describes the design that will be built on the shared tool registry.
Submit a job. Get a result.
Every operation — a single tool, a bulk batch or a saved workflow — is a job. You upload to a signed URL, post the job with the tool slug and settings, then poll or receive a webhook. Results come back as signed download URLs that expire.
# Developer preview — endpoints are a design, not yet live
curl -X POST https://api.omnikitly.example/v1/jobs \
-H "Authorization: Bearer $OMNIKITLY_KEY" \
-H "Content-Type: application/json" \
-d '{
"tool": "compress-pdf",
"input": { "upload_id": "up_8f2a4c" },
"settings": { "mode": "target", "target_kb": 500 },
"webhook": "https://example.com/hooks/omnikitly"
}'// Developer preview — SDK shape, not yet published
import { OmniKitly } from "@omnikitly/sdk";
const ok = new OmniKitly(process.env.OMNIKITLY_KEY);
const upload = await ok.uploads.create({ file: "./contract.pdf" });
const job = await ok.jobs.create({
tool: "compress-pdf",
input: { upload_id: upload.id },
settings: { mode: "target", target_kb: 500 },
});
const result = await ok.jobs.wait(job.id); // polls until done
console.log(result.output.download_url);# Developer preview — SDK shape, not yet published
from omnikitly import OmniKitly
ok = OmniKitly(api_key=os.environ["OMNIKITLY_KEY"])
upload = ok.uploads.create(file="contract.pdf")
job = ok.jobs.create(
tool="compress-pdf",
input={"upload_id": upload.id},
settings={"mode": "target", "target_kb": 500},
)
result = ok.jobs.wait(job.id)
print(result.output.download_url){
"id": "job_01J9…",
"tool": "compress-pdf",
"status": "queued", // queued → processing → done | failed
"processing_mode": "server",
"created_at": "2026-09-06T21:42:11Z",
"expires_at": "2026-09-07T21:42:11Z",
"links": {
"self": "/v1/jobs/job_01J9…",
"result": "/v1/jobs/job_01J9…/result"
}
}Architecture
Three stages, the same for a single file or ten thousand.
Signed uploads
Request a signed upload URL, PUT the bytes straight to private storage. Your file never transits our API servers.
POST /v1/uploadsAsync jobs
Create a job naming a tool or workflow. It queues, runs on an isolated worker, and reports progress you can poll or subscribe to.
POST /v1/jobsSigned downloads
Fetch the result via an expiring signed URL, or let a webhook deliver it. Delete early with a single call.
GET /v1/jobs/{id}/resultWhat the API will include
Draft reference Draft
The job object. Field names are provisional until the OpenAPI document is published.
| Field | Type | Description |
|---|
Build on the same engine as the site
Register interest now and be first into the developer preview when jobs go live.