Documentation
Every API here shares one contract. Learn it once.
- Quickstart — your first successful call in about five minutes
- API reference — endpoints, parameters and responses
- Error codes — every code, what causes it, and how to fix it
The shared request shape
{
"source": { "url": "https://example.com/file.pdf" },
"options": { "profile": "auto" },
"mode": "async",
"webhook": { "url": "https://your-app.com/hooks/justoapi",
"auth": { "type": "bearer", "token": "wht_..." } }
}
source accepts exactly one of url, base64 or file_id. Use url whenever you can: it avoids
base64 inflation entirely and works for files of any size.
Sync or async
Synchronous calls return the result directly and are available whenever the work comfortably fits
inside 25 seconds. Asynchronous calls return 202 immediately with a job_id and deliver the
result to your webhook when it is ready.
If you request sync for something that does not qualify, you get a clear 400 telling you to use
async — never a silent timeout.
Two things that will bite you if you skip them
Webhooks can arrive more than once. This is the standard at-least-once contract. Deduplicate on
the X-Webhook-Id header.
Send an Idempotency-Key on every POST. Retried workflows are common, and without a key a retry
is a second billable job. With one, you get the original response back and pay once.