How It Works
NoPII sits between your application and the LLM provider. Every request is scanned for PII, which is replaced with tokens before the request reaches the LLM. Responses are detokenized on the way back.
Tokenization flow
Your App → NoPII → Detect PII → Tokenize → LLM Provider
↓
Your App ← NoPII ← Detokenize ←──────────── LLM ResponseStep by step:
- 1Request arrives - NoPII identifies your account from the LLM API key in the request.
- 2PII detection - Message content is scanned for PII. Entities above the confidence threshold are extracted.
- 3Tokenization - Each unique PII value is replaced with a deterministic token.
- 4PII replacement - Original PII is replaced with wrapped tokens, e.g.
[PERSON: aBcDeFgH12] - 5Forward to LLM - The sanitized request is sent to the LLM provider. No PII reaches the provider.
- 6Detokenize response - Tokens in the LLM response are replaced with the original PII values.
- 7Return to caller - Your application receives a clean response with all original data intact.
Before and after
Here's what your prompt looks like before and after NoPII processes it:
Your prompt (sent to NoPII):
Summarize the case for John Smith, SSN 123-45-6789, who lives at 42 Oak Avenue.What the LLM sees:
Summarize the case for [PERSON: aBcDeFgH12], SSN [US_SSN: iJkLmNoPqR], who lives at [LOCATION: sTuVwXyZ34].What you get back:
The case for John Smith (SSN 123-45-6789) at 42 Oak Avenue involves...Deterministic tokenization
The same plaintext always produces the same token. This means:
- The LLM can reason about relationships ("John Smith" in message 1 is the same entity in message 5)
- Token mappings are cached per session for faster processing
Token retention
Vault tokens are not stored indefinitely. Each token has a time-to-live (TTL) that controls how long the token-to-PII mapping is retained. When a token expires, the mapping is permanently deleted. If the same PII appears in a future request after expiration, a new token is generated.
The default TTL is 1 day. Pro tier accounts can configure TTL from 1 day to permanent in the admin console. See Billing & Pricing for plan details.
Supported PII entity types
NoPII detects 11 PII entity types by default (marked default below), with additional types available that can be enabled on demand (marked available below). You can enable or disable individual types and adjust the confidence threshold in the admin console. See PII Configuration for the full reference.
Identity
| Entity Type | Status | Example |
|---|---|---|
| PERSON | default | John Smith |
| EMAIL_ADDRESS | default | john@example.com |
| PHONE_NUMBER | default | (555) 123-4567 |
| DATE_TIME | available | March 15, 1990 |
| LOCATION | default | 123 Main St, NYC |
| NRP | available | Ethnicity / nationality |
Government IDs
| Entity Type | Status | Example |
|---|---|---|
| US_SSN | default | 123-45-6789 |
| US_PASSPORT | default | C03005988 |
| US_DRIVER_LICENSE | default | D1234567 |
| UK_NHS | available | 943 476 5919 |
| AU_TFN | available | 123 456 782 |
| IT_FISCAL_CODE | available | RSSMRA85T10A562S |
Financial
| Entity Type | Status | Example |
|---|---|---|
| CREDIT_CARD | default | 4111 1111 1111 1111 |
| IBAN_CODE | default | DE89 3704 0044 0532 0130 00 |
| US_BANK_NUMBER | available | 1234567890 |
| CRYPTO | available | 1A1zP1eP5QGefi2DMPTfTL... |
| ACCOUNT_ID | available | Member ID W239847561 |
Technical
| Entity Type | Status | Example |
|---|---|---|
| IP_ADDRESS | default | 192.168.1.1 |
| CREDENTIAL | default | sk-proj-abc123... |
| URL | available | https://internal.corp.com |
| MEDICAL_LICENSE | available | MD12345 |
This is a representative list. NoPII also includes detection for API keys, tokens, and secrets (CREDENTIAL) and enhanced street address detection (LOCATION). See PII Configuration for the full reference and configuration options.
Fail-safe architecture
NoPII never forwards unsanitized PII to an LLM. If PII protection is unavailable, the request is blocked with HTTP 503 rather than sent unprotected. See Error Handling for the full error policy.