Automating Delivery Notes and Proof-of-Delivery with a Scanning API
Every delivery ends the same way: a driver hands over a printed document, a customer signs it, and the paper gets photographed for the records. That photo is the weakest link in the entire logistics chain.
Delivery notes and proof-of-delivery (POD) documents are photographed on loading docks, in truck cabs, and at customer gates. The photos come in at every angle, in bad light, often with shadows. And then they are supposed to feed automated systems: OCR, route matching, billing, disputes.
The photograph is the problem
A delivery note photo is not a document. It is a picture of a document, distorted by:
- Perspective — shot at an angle from above or the side
- Rotation — the paper rotated a few degrees in the frame
- Lighting — shadows across the page, glare from truck windows
- Background — the photo includes the desk, the steering wheel, the driver's hand
OCR engines trained on clean scans choke on this input. A delivery note where 12,5 kg reads as 12.5kg or 12,5k9 can trigger a failed reconciliation, a wrong billing entry, or a dispute that costs more than the delivery was worth.
Where a scanning API fits
A scanning API sits between the camera and the extraction step:
Driver photo → scan API → clean document → OCR / route matching / billing
The scan step does not read the document. It makes the document readable:
- Detects the page inside the photo
- Corrects the perspective so the page is rectangular and upright
- Removes shadows and glare so text is legible to the edge
- Returns a clean JPG or PDF that OCR can actually parse
The integration is one endpoint
ScanKit exposes this as POST /scan/crop. A driver app or a shared intake endpoint sends the photo, gets back a clean scan.
import requests
def clean_delivery_note(photo_path: str, api_key: str) -> bytes:
with open(photo_path, "rb") as f:
r = requests.post(
"https://api.scankit.io/scan/crop",
headers={"X-API-Key": api_key},
files={"file": f},
)
r.raise_for_status()
return r.content # clean scan ready for OCR
From there, the clean scan feeds whatever reads it: OCR for the tracking number, route matching for the vehicle, billing for the weight and charges.
What teams get from the scan step
- Higher OCR accuracy — extraction starts from a document, not a photo
- Fewer manual re-checks — fewer characters misread means fewer tickets
- Consistent records — every POD is a clean, upright, searchable file
- Faster disputes — a legible POD settles a claim instead of starting one
Privacy and where the data goes
Delivery documents are business-sensitive, and in the EU the processing location matters. When you add a scan step, check three things:
- Is it hosted in the EU?
- Is the upload encrypted in transit?
- Is the document deleted after processing?
ScanKit is built on those three answers: EU hosting, TLS in transit, deletion after processing. Only the clean scan leaves the request — the photo itself is not stored.
The bottom line: A delivery note photo is not a document, and no OCR engine can fix perspective. A scanning API turns the photo into a document before the systems that read it ever see it. One endpoint, one call, and the weakest link in the delivery chain stops being the weakest.
Try it with 50 free credits, no credit card required: create a free ScanKit account.
Ready to get started with ScanKit?
Start building powerful document scanning features into your applications today.