Find the personaldata, and mask it.
Two passes: a deterministic check for structured identifiers — emails, payment cards, SSNs, PANs, ABNs — and a vision pass for names, addresses, and dates of birth. You get a typed inventory (values masked, never echoed) and a redacted copy of the text. A guardrail before you forward, log, or share a document.
About PII redaction
The PII redactor finds personal data in a document and masks it. It runs two passes: a deterministic check that matches structured identifiers by pattern and checksum — emails, payment cards (validated with the Luhn check), US Social Security numbers, India PAN, and Australian ABN — and a vision pass that reads the unstructured PII a regex can’t catch: names, addresses, dates of birth, and phone numbers, plus whether the document carries a photo or a signature.
Every value is masked. The raw PII is never returned and the document is never stored — you get back a typed inventory of what was found, the method that found each item, and a redacted copy of the text. Treat the result as detection coverage, not a guarantee that every piece of PII was caught, and review the masked output before you rely on it.
- 01
Send a document
Upload a PDF or image (multipart), or pass a public URL or raw bytes as JSON. An optional max_pages limits how much of a long document is read.
- 02
A deterministic pass finds structured IDs
Pattern and checksum rules match emails, payment cards (via the Luhn check), US SSN, India PAN, and Australian ABN — exact, repeatable, no model involved.
- 03
A vision pass finds the unstructured PII
A vision model reads the document for names, addresses, dates of birth, and phone numbers, and notes whether a photo or signature is present.
- 04
Values are masked
Each detected value is masked before it leaves the service — the raw PII is never returned, and nothing is stored.
- 05
You get an inventory and redacted text
A count and per-type breakdown, the masked items with the method that found each, and a redacted copy of the document text.
What you get back
pii_found + by_type
The total count of personal-data items detected, with a per-type breakdown of how many of each.
The masked items
Each detected item as its type, a masked preview of the value, and the method — deterministic match or vision pass — that found it.
redacted_text
A copy of the document text with the detected PII masked out, ready to forward, log, or share.
has_photo / has_signature
Whether the document appears to contain a photo or a signature — non-textual PII worth flagging.
Common uses
- Anonymising documents before sharing them outside your team
- Preparing training or test data without leaking personal details
- Scrubbing support attachments before they land in a ticket or log
- A privacy review pass over documents ahead of handling or storage
This is detection coverage — not a guarantee that every piece of PII in a document was found. The deterministic pass is exact for known identifiers, but unstructured PII can be missed. Review the masked output before relying on it.
Questions
- Do you return or store the raw PII?
- No. Every value is masked before it leaves the service, so the raw PII is never returned, and the document is never stored.
- Is it guaranteed to catch every piece of PII?
- No. It is detection coverage, not a guarantee. The deterministic pass is exact for the identifiers it knows, but the vision pass over unstructured PII can miss things — review the masked output before relying on it.
- What identifiers does it detect?
- Structured IDs via a deterministic pass — emails, payment cards (Luhn-checked), US SSN, India PAN, and Australian ABN — plus names, addresses, dates of birth, and phone numbers via the vision pass, and whether a photo or signature is present.
- What can I send it?
- A PDF or image as a multipart upload, or JSON with a public URL or raw bytes. An optional max_pages caps how many pages of a long document are read.
- What if the document is a scan with no text layer?
- There’s nothing to redact into text, so you get the inventory from the vision pass instead of a redacted_text copy.