Getting Started
This guide walks you from a fresh account to your first structured OCR result — first in the console, then over the API.
1. Create an account
Sign up at netraocr.shivicx.com. New accounts can start processing documents right away.
2. Process your first document in the console
- Sign in to the console.
- Select an extraction template for the document type. Global templates are available by default, and selecting a template is required for OCR. You can also create custom templates for your own document formats.
- From the Dashboard, click Upload and choose a PDF or image.
- (Optional) Toggle Document integrity to run tampering detection.
- Submit. For a single document the result appears within seconds — you'll see the extracted text and structured data, plus a downloadable copy.
That's it — you've processed your first document. Next, let's do the same over the API.
3. Get API credentials
API access uses an API key + secret pair.
- In the console, go to Settings → API Keys.
- Click Create API key.
- Add at least one allowed IP address — IP allow-listing is mandatory (the call that will use this key must originate from one of these IPs).
- Copy the API secret shown on creation — it is displayed only once. Store it in a secret manager.
You now have:
| Value | Looks like | Notes |
|---|---|---|
api_key | ak_live_xxxxxxxx | Public identifier — safe to log |
api_secret | sk_live_xxxxxxxx | Secret — shown once, store securely |
See Authentication and Managing API Keys for the full details.
4. Call the API
NetraOCR authenticates API requests with HTTP Basic auth, using your
api_key as the username and api_secret as the password.
The base URL is:
https://netraocr.shivicx.com/api/v1
Upload a document
- cURL
- Python
- Node.js
curl -X POST "https://netraocr.shivicx.com/api/v1/ocr/upload?template_id=gl1" \
-u "ak_live_xxxxxxxx:sk_live_xxxxxxxx" \
-F "file=@invoice.pdf"
import requests
resp = requests.post(
"https://netraocr.shivicx.com/api/v1/ocr/upload",
auth=("ak_live_xxxxxxxx", "sk_live_xxxxxxxx"),
params={"template_id": "gl1"},
files={"file": open("invoice.pdf", "rb")},
)
resp.raise_for_status()
print(resp.json()["structured_data"])
import fs from "node:fs";
const form = new FormData();
form.append("file", new Blob([fs.readFileSync("invoice.pdf")]), "invoice.pdf");
const auth = Buffer.from("ak_live_xxxxxxxx:sk_live_xxxxxxxx").toString("base64");
const res = await fetch(
"https://netraocr.shivicx.com/api/v1/ocr/upload?template_id=gl1",
{ method: "POST", headers: { Authorization: `Basic ${auth}` }, body: form }
);
const data = await res.json();
console.log(data.structured_data);
A successful response returns the OCR result synchronously:
{
"job_id": "8f3c…",
"filename": "invoice.pdf",
"structured_data": { "invoice_number": "INV-1024", "total": "1180.00" },
"page_count": 1,
"document_type": "invoice",
"processing_time_ms": 2310,
"coins_consumed": 3
}
Every OCR upload needs a selected template. Global templates are available by
default, and custom templates can be created in Templates.
Pass the selected template as template_id when uploading over the API.
5. Next steps
- Core Concepts — jobs, templates, integrity, and API keys, explained.
- Uploading Documents — single, base64, and bulk flows.
- API Overview — the full endpoint reference.
- Document Integrity — detect tampered documents.