The unmasked original is the liability. Mask between upload and storage and it never becomes a stored object — which is a far easier control to evidence than a deletion job you have to prove ran.
Talk to our technical team → — for integration questions, a security review or a volume estimate.
upload → store → process. The unmasked file is in object storage from the first second, and therefore in every backup and replica from then on.upload → mask → store. Storage only ever sees the masked version. The original is discarded, not archived.That is the entire architectural change. Everything downstream — your LMS, co-lending exports, audit samples, collections hand-offs — inherits the fix without being touched, because there is no longer a sensitive version to inherit.
pdftotext. Pages must be rasterised. Most in-house implementations get this wrong./redact-pii is for the rest.A document where no number was found is not an error and not a success. It is a finding, and it is the single most important thing to route correctly.
Four implementations we see repeatedly. Three of them do not do what the team believes they do.
pdftotext. The document looks masked in every viewer, which is why this survives review.XXXXXXXX1234 while the uploaded image sits in object storage, fully readable. The data is masked; the document is not.pdftotext over it, and search the output for the digits. If they appear, your
redaction is decorative.Between receiving the upload and writing it to storage. Anywhere later and the unmasked file has already been persisted, which is the thing you are trying to avoid.
Use /redact-pii, which covers both plus passport, voter EPIC, driving licence, GSTIN, IFSC, phone and email in one call. Use the specific endpoints when you also want the fields extracted.
Yes. The batch endpoints accept many documents and return a ZIP with a manifest giving per-document status, including which ones found nothing.
Run pdftotext over a masked PDF and search the output for the digits. If they come back, the redaction is an annotation over a live text layer and the number is still in the file. It takes thirty seconds and it is the check most teams have never run.
Change the write path first, so you stop adding to the problem, then remediate backwards from newest. And check whether your object store keeps prior versions — masking in place with versioning on leaves the original sitting there as a previous version.
Tell us how many documents a month you process and what your peak looks like. We will size a plan, provision a key with a test quota, and answer a security questionnaire if you need one.