Quick Start
1. Get your API key
Log in at /settings.html and create an API key. Keys start with dxr_k1_.
2. Extract a document
curl -X POST https://doxroute.xdinamic.com/api/v1/extract \
-H "X-Api-Key: dxr_k1_YOUR_KEY" \
-F "file=@invoice.pdf" -F "doc_type=invoice"
3. Get results
curl -H "X-Api-Key: dxr_k1_YOUR_KEY" \
https://doxroute.xdinamic.com/api/v1/jobs/{job_id}
When status is "completed", result.extraction has your structured JSON.
Auth
| Method | Use | How |
| API Key | Scripts | X-Api-Key: dxr_k1_xxx header |
| JWT | Browser | Auto via /api/v1/auth/login |
Extraction
| Path | Description |
| POST | /api/v1/extract | Submit document (async) |
| POST | /api/v1/extract/sync | Submit and wait for result |
| POST | /api/v1/extract/batch | Upload multiple files |
| POST | /api/v1/extract/split | Split multi-doc PDF |
Jobs
| Path | Description |
| GET | /api/v1/jobs | List your jobs |
| GET | /api/v1/jobs/{id} | Status + results |
| GET | /api/v1/jobs/{id}/pdf | Download original doc |
| GET | /api/v1/jobs/{id}/bbox | Bounding boxes |
Extractors
| Path | Description |
| GET | /api/v1/extractors | List extractors |
| POST | /api/v1/extractors | Create extractor |
| DEL | /api/v1/extractors/{id} | Delete extractor |
Doc Types
invoice packing_list bill_of_lading delivery_note purchase_order customs_declaration generic
Plans
| Free | Pro | Enterprise |
| Docs/mo | 50 | 2,000 | Unlimited |
| Extractors | 3 | 50 | Unlimited |
| API Keys | 2 | 10 | Unlimited |
Python
import requests, time
API = "https://doxroute.xdinamic.com/api/v1"
H = {"X-Api-Key": "dxr_k1_YOUR_KEY"}
r = requests.post(f"{API}/extract", headers=H,
files={"file": open("invoice.pdf","rb")},
data={"doc_type": "invoice"})
job_id = r.json()["job_id"]
while True:
j = requests.get(f"{API}/jobs/{job_id}", headers=H).json()
if j["status"] in ("completed","failed"): break
time.sleep(2)
print(j["result"]["extraction"])