Skip to content

Developers

The API behind PDFTrusted

Every tool on this site calls the same endpoints. This page documents them as they exist today — the real routes, the real quota numbers, the real error strings — so an integration can be planned on facts instead of guesses.

Examples captured from a running build on October 18, 2026.

1. What this page is — and is not

PDFTrusted does not sell a developer API today. What it does have is a working HTTP surface that the whole product runs on: quota checks, upload presigning, conversion jobs, OCR, share links and embeds. Those routes are documented here because hiding them does not make them safer, and because an honest reference is more useful than a waitlist.

Two things follow from that. First, every example below was captured from the real service and pasted verbatim, apart from one redaction noted in the example itself. Second, there is no public key programme, so nothing here is a promise of stable access for third parties — if you need that, the contact link at the top is the honest route.

2. How requests are authenticated

The endpoints are session-scoped: a request carries the same browser session the app uses, whether that is an anonymous visitor or a signed-in account. Plan entitlements (Free or Pro) are read from that account, so Pro limits follow the session rather than a separate key.

  • No API key exists today, and no endpoint accepts one
  • Quota and rate limits are enforced per device and per job, not per key
  • Account endpoints (history, export, deletion) require a signed-in session
  • Billing webhooks are signed by the payment provider, not by this API

3. Endpoint families

MethodPathBodyReturns
POST/api/v1/usage/normal

Called before a browser-side tool runs. Also accepts { action: "release" }.

{ toolSlug, bytes, pages?, items? }Quota check plus what is left today
POST/api/v1/convert/presign

The upload URL is single-use and expires in five minutes.

{ tool, filename, contentType, sizeBytes }{ uploadId, uploadUrl, contentType, jobId }
POST/api/v1/convert/enqueue

Server-side conversions and OCR. Poll the job afterwards.

{ uploadId, tool, options?, pages? }Job accepted for processing
GET/api/v1/convert/jobs/{jobId}?token=…

Add &wait=1 to hold the request briefly instead of polling tightly.

—Job state, then the finished result
POST/api/v1/ocr

Returns a searchable-text PDF; binary body if a direct download is not available.

multipart/form-data with a PDF{ downloadUrl, fileName, mimeType, jobId, durationMs }
POST/api/v1/share/presign

Then POST /api/v1/share/complete. Expiry is 1, 7 or 30 days.

{ filename, sizeBytes, days, allowDownload? }{ id, uploadUrl, manageKey, expiresAt, url }
POST/api/v1/embed/presign

Then POST /api/v1/embed/complete. Domains act as an allowlist.

{ filename, sizeBytes, days, domains, height }{ id, uploadUrl, manageKey, expiresAt, url, snippet, domains, height }
GET/api/v1/history

Storage is a Pro feature; Free accounts have no cloud space.

—Saved files for the signed-in account

4. Worked example: convert a file

Server conversions are three calls. Presign, upload, enqueue — then poll or wait. These are the real shapes, with the signed URL shortened because it is single-use and expires in five minutes.

Step 1 — ask for an upload slot

Request
curl -X POST https://pdftrusted.com/api/v1/convert/presign \
  -H 'Content-Type: application/json' \
  -d '{"tool":"pdf-to-word","filename":"contract.pdf",
       "contentType":"application/pdf","sizeBytes":1024}'
Response · 200 (uploadUrl shortened)
{
  "uploadId": "0e02fadd-8268-4d90-b3bd-e0443cd33e35",
  "uploadUrl": "https://<single-use-upload-url>?X-Amz-Expires=300&…",
  "contentType": "application/pdf",
  "jobId": "163ba447-a06a-4091-99c9-6aed3c3894cd"
}

Step 2 — PUT the bytes to that URL

Request
curl -X PUT "<uploadUrl from step 1>" \
  -H 'Content-Type: application/pdf' \
  --data-binary @contract.pdf

Step 3 — enqueue, then read the result

Request
curl -X POST https://pdftrusted.com/api/v1/convert/enqueue \
  -H 'Content-Type: application/json' \
  -d '{"uploadId":"0e02fadd-…","tool":"pdf-to-word"}'

A finished job returns the download link and timing rather than the file itself, so the browser can fetch the result directly:

Finished job
{
  "downloadUrl": "https://<signed-download-url>",
  "fileName": "contract.docx",
  "mimeType": "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
  "jobId": "163ba447-a06a-4091-99c9-6aed3c3894cd",
  "durationMs": 2841
}

Every conversion response also carries X-Convert-Job-Id and X-Convert-Duration-Ms headers, and is marked Cache-Control: no-store.

5. Quota responses

Browser-side tools check quota first. This response is verbatim from a Free session on October 18, 2026:

POST /api/v1/usage/normal · 200
{
  "ok": true,
  "jobsRemaining": 20,
  "pagesRemaining": 500,
  "bytesRemaining": 524288000,
  "nearLimit": false
}

Exceed a ceiling and the same endpoint answers 413 with a machine-readable code instead of prose alone:

POST /api/v1/usage/normal · 413
{
  "error": "This file exceeds the Free limit of 100 MB.",
  "code": "FREE_FILE_LIMIT"
}

6. Limits

These come from the same constants the product enforces, so they cannot drift away from what the interface shows.

LimitFreePro
Everyday jobs per day20200
Advanced (server/AI) uses per day350
Pages per cloud jobPer-tool, up to 150200
Maximum file size100 MB100 MB
Daily page budget500 pagesGoverned by the job limit
Daily upload budget500 MBGoverned by the job limit
Concurrent cloud jobs25
Share and embed links per day10100
Account data exports per day15

Per-tool page ceilings sit underneath these: merge allows 75 pages, compression 50, rotation, cropping and split-by-size 150. A file over a per-tool ceiling is rejected before any work starts.

7. Error codes

StatusBodyWhen
400{ "error": "Invalid enqueue request." }Body is missing or a field does not match the tool.
400{ "error": "Unknown conversion tool." }The tool slug is not one this endpoint converts.
410{ "error": "Upload expired — start again." }The five-minute upload window closed, or the file was never uploaded.
413{ "error": "This file exceeds the Free limit of 100 MB.", "code": "FREE_FILE_LIMIT" }The file is larger than the plan allows. Pro uses PRO_FILE_LIMIT.
429{ "error": "Too many jobs — wait a moment." }Two requests arrived too close together for one device.
503{ "error": "Busy — please try again.", "code": "RETRY" }No worker slot was free. Retry after the Retry-After: 1 header.

8. What we do not offer

  • No public API keys, sandbox keys or self-serve signup for server access
  • No SLA and no published uptime figure — the status page shows what is up now, not a percentage we cannot prove
  • No batch endpoint and no conversion webhooks; polling a job is how you get a result
  • No separate API pricing, because there is no separate API product yet
  • No third-party processing credits: the free and Pro quotas in the table above are the whole story

9. How this compares

Smallpdf’s footer links its “Developers” entry to a page listing the third-party libraries powering its converters, not to an API reference. iLovePDF sells a separate API product with its own pricing and docs. We are doing neither: no key shop, no vendor list — just the routes this product already runs, documented with the responses they actually return.

Comparisons of the tools themselves, with prices and sources, are on the comparison pages.

10. FAQ

Is there a public API key I can use?

Not yet. The endpoints documented here are the ones the PDFTrusted app itself calls, so access is scoped to the browser session that uses them. If you need server-to-server access for a product or an integration, contact us and we will scope it with you rather than publish keys nobody has tested.

Do you charge for API access?

No. There is no separate API price list, and we are not selling a developer plan. Requests count against the same quotas as the app: 20 everyday jobs and 3 advanced uses a day on Free, 200 and 50 on Pro.

How are files uploaded and cleaned up?

A presign call returns a single-use upload URL that expires in five minutes. Conversion results are returned as a download link; temporary job files are cleaned up after processing, with leftovers removed within an hour. The security page describes the full path.

Which tools run in the browser and which run on a server?

Merge, split, organise, compress, rotate, crop, page numbers, watermark, protect, unlock and the image conversions run in the browser on your device. OCR, Office and OpenDocument conversion, PDF to Word/Excel/PowerPoint, web captures, translation, redaction and the AI helpers use the server path documented above.

Can I embed a PDF on my own site?

Yes. The embed endpoints create a private link with an expiry date and a domain allowlist, and return a ready-made snippet. Downloads from an embed are off unless you turn them on.

Need a real integration?

Tell us what you need to send, how often, and whether the files can leave your network. We would rather scope one integration properly than publish keys nobody has tested.