The image to text API built for messy real-world photos.
Skewed angles, mixed lighting, low resolution, busy backgrounds. JPG, PNG, TIFF, WebP, and BMP all return the same typed JSON. No client-side preprocessing, no per-format branches in your code.
Get started today for free. No credit card required.
Live demo
Try it on a real document.
Run OCR on a sample document, or drop in your own. No sign-up, no API key.
Or run it on your own document
Drop a document here
PDF, PNG, JPEG, TIFF, WebP, or BMP. Up to 4 MB, single page.
Or try a sample
See a phone photo become clean text.
Photos, scans, and screenshots all return the same page-by-page text shape. No client-side image cleanup or format-specific endpoint required.

NORTHBROOK ENERGY
Your electricity statement
MS. A. RAVENSCROFT
14 Church Lane
Stroud
GL5 1QP
Account number: NE-8847-2310
Bill date: 03 Mar 2026
Bill period: 01 Feb 2026 to 28 Feb 2026
Standing charge (28 days at 50.00p/day): £14.00
Electricity used (300 kWh at 20.00p/kWh): £60.00
Subtotal: £74.00
VAT at 5%: £3.70
Total due: £77.70
Please pay by 24 Mar 2026Need fields, not just text? Switch to structured mode.
Send a JSON Schema with the photo and the image comes back as typed fields and repeating rows, not a wall of text. Same endpoint, same async job, a result shaped to your app.

{
"data": {
"document_type": "Site safety inspection report",
"site": "Northbrook Plant Upgrade",
"rows": [
{
"item": "Scaffolding securely erected",
"status": "Pass",
"notes": "Valid certificate displayed"
},
{
"item": "Walkways clear of debris",
"status": "Fail",
"notes": "debris blocking main access path"
}
]
}
}POST an image. Get text, or structured JSON.
The API handles upload, processing, and retrieval through a single async flow. Text mode returns pages[] with the words in the image. Send a schema instead and the same job returns typed fields and rows. Poll for the job or receive an HMAC-signed webhook.
# Send a phone photo, get text back
$ curl https://api.ocrwell.com/v1/documents \
-H "X-API-Key: $OCRWELL_KEY" \
-d '{"upload_id":"upl_01H7","mode":"text"}'{
"job": {
"id": "019539a6-6c3d-7e5f",
"status": "completed",
"mode": "text",
"page_count": 1
},
"result": {
"pages": [
{ "page": 1, "text": "MELBOURNE MUSEUM\nOpen daily 10am to 5pm..." }
]
}
}# Same photo, ask for structured rows
$ curl https://api.ocrwell.com/v1/documents \
-H "X-API-Key: $OCRWELL_KEY" \
-H "Content-Type: application/json" \
-d '{
"upload_id":"upl_01H7",
"mode":"structured",
"schema":{
"document_type":"",
"rows":[{"item":"","status":"","notes":""}]
}
}'{
"job": {
"id": "019539a6-6c3d-7e5f",
"status": "completed",
"mode": "structured",
"page_count": 1
},
"result": {
"data": {
"document_type": "Site safety inspection report",
"site": "Northbrook Plant Upgrade",
"rows": [
{ "item": "Scaffolding securely erected", "status": "Pass", "notes": "Valid certificate displayed" },
{ "item": "Walkways clear of debris", "status": "Fail", "notes": "debris blocking main access path" }
]
}
}
}Where teams use the image to text API.
Real photos, not just scans
Phone photos taken at angles, with shadows, in low light, or against busy backgrounds. The same endpoint that handles a flatbed scan handles a snapshot from a queue.
Every common format
JPEG, PNG, TIFF, WebP, and BMP. Up to 20 MB per file. No client-side conversion step required, no separate endpoints per format.
Screenshots and signage too
Browser screenshots for accessibility tools, photos of signs and menus, product packaging, whiteboards. Returns the same typed JSON shape as any other source.
Structured mode for fields
Send a JSON Schema and receive typed fields and repeating rows instead of raw text, from the same endpoint that returns plain page text.
Polling or signed webhooks
Poll GET /v1/jobs/:id while a user waits, or receive an HMAC-signed callback when the job finishes. Built for mobile uploads and background workers.
Short-lived storage, no training
Uploaded images are deleted after processing and results expire after retrieval. Your files are never used to train AI models.
Image to text API questions.
Which image formats does the API accept?
JPEG, PNG, TIFF, WebP, and BMP, up to 20 MB per file. There is no client-side conversion step and no separate endpoint per format.
Does it work on phone photos taken at an angle or in poor light?
Yes. Skewed angles, mixed lighting, low resolution, and busy backgrounds are handled server-side, so you do not need to deskew, crop, or clean up the image before sending it.
Can it read handwriting in a photo?
Yes. Printed and handwritten text return the same typed JSON. For documents that are mostly handwriting, such as forms and field notes, see the handwriting to text API.
What does the response contain, and how is it priced?
Text mode returns a result.pages array with the text read from the image. Pricing is per page processed, and the free forever tier covers 200 OCR pages per month.
Can I get structured JSON from an image instead of raw text?
Yes. Submit in structured mode with a JSON Schema and the job returns typed fields and arrays. For common photo types, see the receipt and invoice OCR APIs.
Start free. Pay only when you scale.
- No credit card required.
- Hard cap, no overage charges.
- Paid plans from $20/mo when you grow.
Explore nearby OCR workflows.
OCR API
The general OCR API. Choose raw page text or schema-shaped JSON per job.
PDF to text API
Convert PDFs, including scanned and image-based files, into page-by-page text.
Receipt OCR API
Parse merchant details, purchased items, tax, and totals from receipt photos.
Handwriting to text API
Read cursive, print, and mixed handwriting from forms and field notes.
Invoice OCR API
Extract supplier details, invoice numbers, tax, totals, and line items.
Table extraction API
Turn repeated rows in documents into structured JSON arrays.
Turn images into text today.
Generate an API key, upload your first photo, and have clean text back in seconds. Free forever tier covers 200 OCR pages per month.