orc — optical character recognition api

Reads the
unreadable.

Scanned paperwork, CID-broken court rulings, notices photocopied into oblivion — POST the file, get a job_id, pull clean text. An async, language-agnostic OCR service behind a single endpoint.

status: "queued" — what you send

Some PDFs aren't text.
They're photographs of text.

orc was born inside some of the most stubborn paperwork there is: court notices published as raw page scans and CID-encoded rulings that refuse copy-paste. These files either have no text layer at all, or the layer is character soup — pdftotext returns nothing, search fails, pipelines stall.

The fix is always the same: rasterize the page, run it through Tesseract, measure confidence, stitch the text back together. orc packages that pipeline as one HTTP service — you send the PDF, the queue does the rest. Call it from any language, any project; nothing to install on the client side.

status: "processing" — what happens inside

Page-by-page streaming

Every page is rasterized, read, and deleted one at a time. Memory use is independent of PDF size — a 600-page file costs the same RAM as a single page.

peak RAM ≈ 1 page @ 300dpi

Confidence score

Tesseract's per-word confidence values are aggregated; every result ships with a 0–1 score. Routing low-confidence output to a human is up to you.

"confidence": 0.94

Turkish-first, 100+ languages

Default language is tur; combinations like tur+eng are supported. Diacritics are first-class citizens — not an afterthought fix.

-F "lang=tur+eng"

Cancel + webhook

DELETE stops a running job instantly — the whole process group is killed. When a job finishes, we can POST JSON to your webhook; polling is optional.

-F "webhook_url=https://…"
status: "succeeded" — what you get

Five endpoints. That's all.

EndpointJob
POST /v1/jobs Upload PDF/PNG/JPEG/TIFF → 202 {job_id}. Fields: lang, dpi, first_page, last_page, region, webhook_url, retention_hours (0 = burn-after-read)
GET /v1/jobs/{id} Status + page progress + confidence score
GET /v1/jobs/{id}/text Extracted text, text/plain
DELETE /v1/jobs/{id} Cancel or delete the job
GET /healthz Liveness + queue depth (no key needed)
# Auth: X-API-Key header. Queue full → 429 + Retry-After.
# Finished jobs are deleted automatically after 24 hours.
curl -X POST https://api.orc.guru/v1/jobs \
     -H "X-API-Key: $KEY" \
     -F "file=@deed.pdf" -F "lang=tur" -F "dpi=300"

Got a PDF that won't read?

Request an API key and send your first job in five minutes.

Get a key