PII detection and redaction: emails, phones, cards, IBANs
Find personal data in a text and get it back redacted: emails, phone numbers, card numbers (Luhn-checked), IBANs (mod-97), US SSNs, IP and crypto wallet addresses, each with its position, plus the text with every hit replaced by a label such as [EMAIL]. Hits are shown masked. Up to 20,000 characters; names and street addresses are not detected. Use before logging, storing or sending text to a model.
Inputs
| Name | Type | Description |
|---|---|---|
text (required) | string | The text to scan (up to 20,000 characters) |
types | string | Optional comma-separated types to look for: email, iban, credit_card, us_ssn, crypto_address, ip_address, phone (default all) |
Request
Over HTTP, with a card key from /credits:
curl -H "Authorization: Bearer adt_…" "https://agent-data-tools.revmesh2074.workers.dev/text/pii?text=Contact%20Anna%20at%20anna.berg%40example.com%20or%20%2B46%2070%20123%2045%2067%3B%20card%204111%201111%201111%201111."
Or one of your 25 free calls, no key:
curl "https://agent-data-tools.revmesh2074.workers.dev/text/pii?text=Contact%20Anna%20at%20anna.berg%40example.com%20or%20%2B46%2070%20123%2045%2067%3B%20card%204111%201111%201111%201111.&trial=1"
Without a key, the same URL answers 402 Payment Required with x402 and MPP terms, so an agent with a wallet pays per call in USDC (Base, Polygon, Arbitrum or Solana over x402; Base or Tempo over MPP) and retries.
Example result
{
"found": 3,
"counts": {
"email": 1,
"credit_card": 1,
"phone": 1
},
"items": [
{
"type": "email",
"start": 16,
"end": 37,
"masked": "an************om"
},
{
"type": "phone",
"start": 41,
"end": 57,
"masked": "+4************67"
},
{
"type": "credit_card",
"start": 64,
"end": 83,
"masked": "41************11"
}
],
"redacted": "Contact Anna at [EMAIL] or [PHONE]; card [CARD]."
}
From an AI agent (MCP)
Add the MCP server to Claude, Cursor or any MCP client. This tool is text_pii, and the first 25 successful calls are free:
https://agent-data-tools.revmesh2074.workers.dev/mcp