Documentation

Every API here shares one contract. Learn it once.

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.