PII & secret redactor
Replace API keys, tokens, emails, phones, card numbers, IPs and IBANs in a log or prompt with consistent placeholders, in your browser, before sharing.
What it does
Paste a log, a prompt, a conversation or a config file. The redactor replaces every credential and every piece of personal data it recognises with a placeholder, such as [EMAIL_1] or [ANTHROPIC_API_KEY_1], and shows you what it replaced. Copy the result into a model, a ticket or a chat.
The same value always gets the same placeholder, and two different values never share one. A reader can still follow the text: [EMAIL_1] wrote to [EMAIL_2], and then to [EMAIL_1] again.
To put the values back, paste a reply that uses the placeholders into Put the values back into a reply. The values come from the page's own copy of what it replaced.
What stays in your browser
Everything. The text, the redacted text and the placeholder map are never sent anywhere. They are not put in the address, a share link, a file or browser storage, and analytics never learns what was found or how much. A share link to this tool holds only which categories are switched on. Close the page and the map is gone.
What it recognises
Credentials, by their shape:
- Salyro API keys (
sk-sly-…) and Gateway MCP Expose tokens (mcpx_…,mcxr_…), from the same definitions Salyro issues them with; - Anthropic API keys (
sk-ant-api…) and Admin API keys (sk-ant-admin01-…), as Anthropic's own pages describe them; - other
sk-,pk-andrk-keys (a shape Salyro's log redactor recognises), GoogleAIza…keys, Hugging Face, AWS access key ids, GitHub, GitLab, Slack, npm and Stripe tokens; - PEM and PGP private keys, written out or with their line breaks escaped as
\n, as in a cloud service account's JSON file — and a key cut off before its END line, up to the next blank line; - JSON Web Tokens,
BearerandBasiccredentials, and a password or token inside an address, such aspostgres://app:password@host.
The shapes start with Salyro's own log redactor's list, so this page never calls a string safe that Salyro would redact in its own logs.
Credentials by their name. A value under a name that says it is a credential is replaced whatever it looks like: DB_PASSWORD=… and DB_PASSWORD="…", export TOKEN='…', password = "…" (TOML, INI, Python), const apiKey = "…", "api_key": "…" with its JSON escapes, Authorization: …, ?access_token=…, or the password in curl -u user:password. Only what is inside the quotes is replaced. A ${VARIABLE} reference is left as it is.
Random-looking strings, if you switch it on. This is a heuristic: a long run of upper case, lower case and digits with high entropy. It finds keys with no known shape, and also ids and hashes that are not secret.
Personal data, by fixed patterns:
- email addresses;
- phone numbers written with a
+and a country code, or in North American groups such as(555) 123-4567; - payment card numbers of 13 to 19 digits that pass the Luhn check;
- IPv4 and IPv6 addresses;
- IBANs whose check digits are valid.
Where a credential and personal data overlap, the credential wins.
What it does not catch
The redactor reads patterns. It does not understand the text, and no model reads it. It does not find:
- people's names, and any other word that identifies a person in prose;
- postal addresses, dates of birth, national identity numbers and passport numbers;
- bank account numbers other than IBANs, and card numbers written in an unusual way;
- a phone number written as a bare run of digits;
- a secret with no known shape, under a name that does not say what it is, or inside markup such as
<password>…</password>; - the second and later lines of a quoted value that runs over several lines: from its opening quote to the end of the first line is replaced, the rest is not;
- a value that is itself written like a placeholder, such as
[ADMIN_1]: it is read as one and left as it is.
So a redacted text is safer, not clean. Read it before you share it. The sample prompt ends with a name and a street address on purpose: they are left as they are.
FAQ
Why placeholders and not asterisks? A model or a colleague can still tell values apart and refer to them, and you can put the values back into their answer.
Is the placeholder map safe to keep? It holds every value the redaction removed. That is why it exists only in this page's memory and is never saved.
Does it tell me whether a key is live? No. Checking would mean sending the key to its issuer. Use the API-key leak scanner to see what each key is and how to revoke it.
Sources
- Salyro's own key and token formats come from
@salyro/types, the package the engine issues them from, and the credential shapes from the list Salyro's log redactor uses. - Anthropic's key prefixes are read from Anthropic's authentication and Admin API key pages, recorded as Reference Data with the date they were read.
- The other issuers' pages could not be read when this tool was built. Their shapes are the ones the detector recognises, and are shown as not verified.
- The Luhn check and the IBAN check digits (ISO 13616, modulo 97) are the checksums those numbers carry.
Where the numbers come from
- Facts about models and providers that are not in that catalogue carry their own source and the date they were checked, and are shown as unknown where no reliable source exists.
