The signature on the ID, cut out and cleaned.
Send one photo of an identity document and get the holder's handwritten signature back as three images — marked up for review, cut for the record, cleaned for use — each one made of the original pixels.
One image in, one finished answer out.
A single JSON envelope: the decision, a message you can show a user, the machine reason behind it, what the extraction took to produce, and — when there is a signature — the images themselves as base64 PNGs.
- Decision
- Plain-English message
- Machine reason code
- Repair warnings
- Document type
- Issuing country
- Document side
- Document read confidence
- Marked-up preview
- Raw signature cut
- Cleaned signature (white)
- Cleaned signature (alpha)
- Processing time
- Credits remaining
{
"success": true,
"decision": "auto",
"message": "Signature extracted.",
"reason": null,
// What the extraction cost to produce. Here the located box clipped a
// stroke, so the crop was grown until no ink ran off the edge.
"warnings": ["crop_expanded_3x"],
"document": {
"type": "national_id",
"issuingCountry": "ARE",
"side": "front",
"confidence": "high"
},
// Base64 PNGs, present only when decision is "auto".
"images": {
"previewBox": "iVBORw0KGgoAAAANSUhEUg…", // ID, signature boxed
"signatureRaw": "iVBORw0KGgoAAAANSUhEUg…", // the cut, untouched
"signatureClean": "iVBORw0KGgoAAAANSUhEUg…", // on white
"signatureCleanAlpha": "iVBORw0KGgoAAAANSUhEUg…" // transparent twin
},
// This call's wall clock. Not a published latency target — it moves with
// image size and the number of repair passes the crop needed.
"processingMs": 7184,
"creditsRemaining": 486
}A signature is evidence. So we never invent one.
Generative cleanup will happily hand you a beautiful signature that the holder never wrote. This pipeline does the opposite: it finds the ink, cuts it out of your original file, takes away everything that is not ink, and tells you when it cannot.
The original pixels, not a redraw
The signature is cut out of the image you uploaded. Nothing is smoothed, thinned, thickened or regenerated — the strokes you receive are the strokes the holder wrote, at the resolution you sent them.
Clipped boxes get repaired
When the located box cuts through a stroke, the crop grows until no ink runs off the edge. The repair is reported back in warnings — you can see what the extraction cost to produce.
Background removed, twice over
Paper, shadow, security print and the printed signature line come off. You get the result on a white background for documents, and a transparent-background twin for compositing.
Three decisions, no review queue
auto, new_id_required or retake. Every call ends in a finished answer your own workflow can branch on — there is no pending state and no human step in the middle.
Built for phone-camera reality
Tested against shadow gradients and hard shadow edges, colour casts, under- and over-exposure, JPEG compression down to quality 15, sensor noise and blur — the way documents actually arrive.
The images go to you, not into a row
A signature is handwriting — the most reusable mark on the document. The response carries the images to your systems; what we keep against the call is the decision, the measurements and the payload sizes, not the signature itself.
Six steps, one API call.
Everything below happens inside a single POST. There is no job to poll, no callback to register, and no queue between you and the answer.
You post one photograph
A single image of the identity document, multipart form-data, under the key image. JPEG, PNG, WebP, HEIC or TIFF, up to 20 MB. PDF is refused on purpose: this pipeline reads photographs, and taking a file it cannot rasterise would bill you for a guaranteed retake.
Gemini locates the holder's signature
A vision model finds the handwritten signature belonging to the person the document was issued to, and reports what it is looking at — document type, issuing country, and which side of the card is in frame.
A Python service cuts it from the original
The located region is cropped straight out of the file you uploaded. The cut is an operation on your pixels, not a re-rendering of a model's impression of them.
A box that clips a stroke is grown until it does not
Located boxes routinely clip a descender or the tail of a flourish. The crop expands until no ink touches an edge, and the expansion is handed back to you as a warning such as crop_expanded_3x.
The background comes off; the ink is left alone
Paper texture, shadow, colour cast, guilloche and the printed signature line are removed from around the strokes. The strokes themselves are never edited — the cleaned image is the same ink on a clean field.
One of three decisions comes back
auto when a signature was produced, new_id_required when the document carries none, retake when the image cannot yield one. There is no fourth outcome and nothing waits on a reviewer.
Three images, three different jobs.
One extraction produces the picture a human checks, the artefact you archive, and the asset you paste into a document. They are returned together so you never have to re-derive one from another.
The ID, signature marked
images.previewBox
The document you sent with the located signature boxed on it. Show it to an operator, attach it to a case file, or keep it as the visual record of what the decision was made on.
The cut, untouched
images.signatureRaw
The crop exactly as it came off the document — background and all, nothing removed. This is the artefact to keep when you may later need to show where a signature came from.
Cleaned, on white
images.signatureClean
Trimmed to the strokes with the background removed, on a white field. Drop it into a contract, a generated PDF, a visa application or a form without any further image work.
images.signatureCleanAlpha ships alongside them: the cleaned signature with a transparent background, for laying over a form you already render. Same strokes, same pixels — only the white field is gone.
Shadow, colour cast, security print, the printed signature line.
The same strokes, trimmed, on a clean white field.
Illustration, not a live extraction — but the two panels are drawn from one identical path on purpose. That is exactly what the cleaning step does: it removes what surrounds the ink and leaves the ink untouched.
Every call ends in one of three answers.
Branch on decision and you have covered the whole surface. Each one arrives with a message you can put in front of a user verbatim, and a machine reason you can log.
“Signature extracted.”
Take the images from the response and carry on. success is true and the four images are populated; nothing else is required of your workflow.
“This document has no holder signature. A different identity document is needed.”
Ask for a different document, not a better photo. The pipeline read this one fine — the document simply does not carry a holder signature, and no retry of the same card will change that.
“No signature could be read from this image. A new photo is needed.”
Send the applicant back for another capture. This is the honest failure mode: rather than hand you a guess, the pipeline says the image cannot yield a signature.
All three decisions are billable. Failures are not.
A decision costs one credit whichever one it is — the model work is the same, and “this document has no signature” is a real answer you asked for. What is never charged is a failure on our side: an unreachable pipeline, a timeout, or a response we cannot interpret refunds the credit automatically.
One endpoint, the key you already have.
POST multipart/form-data to /api/signature with your existing OnPoint key. Same authentication, same balance, same per-identity rate limit as Passport, ID and Government OCR — nothing new to provision.
- POST /api/signaturemultipart/form-data
- image=@fileOne image · "file" also accepted
- x-api-keyOr Authorization: Bearer
- JPEG PNG WebP HEIC TIFFNo PDF
- 20 MBMaximum upload
- 120 req/minPer identity, shared with /api/ocr
curl -X POST https://www.onpointtech.co/api/signature \ -H "x-api-key: onp_live_YOUR_KEY_HERE" \ -F "image=@/path/to/id-card.jpg"
Every error code it can return
Anywhere a signature has to leave the paper.
If your process already collects an identity document, the signature on it is a field you are currently retyping, screenshotting, or asking the applicant to draw again on a phone. It does not have to be.
Where it is weakest — before you find out yourself.
Two capture conditions defeat it more often than anything else: glare falling directly across the signature, and documents rotated more than a few degrees in frame. Everything else we degraded it against — shadow gradients, hard shadow edges, colour casts, badly under- and over-exposed frames, JPEG artefacts down to quality 15, sensor noise and blur — it came through.
You will not find an accuracy percentage on this page. We have not measured one on a customer corpus, and a number we cannot stand behind is worth less to you than knowing which two photographs to re-shoot.
5 free extractions with a free account. No card.
One credit per call, drawn from the same balance that runs passports, IDs and government records — one key, every service. Volume pricing kicks in automatically when you keep going. You can try it on the homepage without an account — the free allowance is shared across every service — and every API call after that carries your key.
Stop retyping what the holder already signed.
One API key, one call, the signature off the document and into your stack.