Mask personal data before documents reach your agent
Superlinked gives your agent one API to find names, addresses, account numbers and any other data type you name, with the exact character offsets to mask.
/v1/extract/urchade/gliner_multi_pii-v1 CFPB H-25(B) Closing Disclosure sample
- person
- address
- loan number
- mortgage insurance case number
Closing Disclosure
- Settlement Agent
- Epsilon Title Co.
- Property
- address
- Sale Price
- $180,000
- Borrower
- person and person , address
- Seller
- person and person , address
- Lender
- Ficus Bank
- Loan ID #
- loan number
- Loan Amount
- $162,000
- Interest Rate
- 3.875%
8 spans returned with exact offsets
Add your own ID types, like Medicare and claim numbers, without training
Mortgage closing disclosure
person · address · loan number · mortgage insurance case number Property: [ADDRESS]
Borrower: [PERSON] and [PERSON] , [ADDRESS]
Seller: [PERSON] and [PERSON] , [ADDRESS]
Loan ID #: [LOAN NUMBER]
MIC #: 000654321
- person
- Michael Jones · Mary Stone · Steve Cole · Amy Doe
- 4
- address
- 456 Somewhere Ave, Anytown, ST 12345 · 123 Anywhere Street, Anytown, ST 12345 · 321 Somewhere Drive, Anytown, ST 12345
- 3
- loan number
- 123456789
- 1
- mortgage insurance case number
- 000654321
- Missed
Medicare claim notice
person · address · phone number · medicare number · claim number Notice for [PERSON]
Medicare Number: [MEDICARE NUMBER]
[PERSON] , [PHONE NUMBER]
Looking Glass Eye Center PA, [ADDRESS]
Total for Claim # [CLAIM NUMBER] : $211.56 charged, $107.97 approved, $86.38 paid, $90.15 maximum you may be billed.
- person
- Jennifer Washington · Craig I. Secosan, M.D. ×2
- 3
- phone number
- (555) 555-1234
- 1
- medicare number
- 1A23BC4DE56
- 1
- claim number
- 02-10195-592-390
- 1
- address
- 1888 Medical Park Dr, Suite C, Brevard, NC 28712-4187
- Practice address, also masked
German health insurance claim
person · address · iban · medical condition Name: [PERSON]
Straße: 0 Storgatan
Behandelnder Arzt/Klinik: [PERSON] , Onkologische Praxis, [ADDRESS]
Die Patientin [PERSON] erhielt eine Chemotherapie zur Behandlung von [MEDICAL CONDITION] . Die Behandlung umfasste sechs Sitzungen im Abstand von zwei Wochen. Zusätzlich erhielt die Patientin eine Strahlentherapie, um das Wiederauftreten des Krebses zu verhindern. Die Strahlentherapie wurde über einen Zeitraum von vier Wochen durchgeführt.
Gesamtkosten: 13.000 EUR
IBAN: [IBAN]
- person
- Madelief de Jong-van de Berg ×2 · Dr. med. Sarah Nowak
- 3
- iban
- GB86KXOV44029657180910
- 1
- medical condition
- Brustkrebs
- 1
- address
- Musterstraße 1, 12345 Berlin
- Practice address, also masked
- address
- 0 Storgatan
- Missed
Policyholder letter
person · account number · password · address · phone number Dear [PERSON] ,
Your policy number is GPTZ91601562274667. Please keep this number confidential and secure.
For your reference, your street address is [ADDRESS] .
To access your account, please use the following password: [PASSWORD]
Should you have any questions or concerns, please don's hesitate to contact us at [PHONE NUMBER] .
- person
- Jordan Mathew Miller
- 1
- password
- wdpfe*Lv0%R%^xV0@(
- 1
- address
- 64781 Hess Villages, Apt. 487
- 1
- phone number
- 1-800-123-4567
- 1
- account number
- GPTZ91601562274667
- Missed
Splitting a long chat lifts its masked spans from 2 to 8 of 11
person · address · bank identifier code · employee id The model reads 384 words at a time, so a second request puts the tail of this 564-word support chat in front of it.
- One request
- 2 of 11 masked
- Split in two
- 8 of 11 masked
Personal data the second request masked, 6 of the 7 spans past word 384:
- Paul person
- Paul Sanders person
- Nm-80877 employee id
- 76273 Reginald Forks, 39502, Michellebury address
You name the ID types this document uses, Medicare and claim and loan numbers included, and get back the exact character offsets to mask. No training set, no model per type, and the surrounding text stays readable.
23 of 25 masks confirmed by the published gold spans in six benchmark documents
0 of 29 amounts on this page were masked, so the figures stay readable
26 of 45 published PII spans masked by one request per document, before any splitting
The two masks outside the gold spans cover a doctor’s practice address and a payment card’s last four digits. Neither benchmark annotates those values, so neither set can confirm or refute them. Some of what one request misses sits past the model’s 384-word window, and splitting the document recovers it: the long support chat above holds 11 published spans, 7 of them past that window, and one request masks 2 where two mask 8.
Know exactly which characters to remove before you store or send
from sie_sdk import SIEClientclient = SIEClient( api_key="sk-sie-…", base_url="https://api.superlinked.com",)result = client.extract( "modelurchade/gliner_multi_pii-v1", {"text": "textNotice for Jennifer Washington
Medicare Number: 1A23BC4DE56
Date of This Notice: September 13, 2020
Suppliers with Claims This Period: May 9, 2020, Lincare Inc.
Lincare Inc., (555) 555-1234
PO BOX 996, Blue Springs, MO 64013-0996
Ordered by John K Whalen
May 9, 2020: 1 portable gaseous oxygen system, rental; includes portable container, regulator, flowmeter, humidifie (E0431-RR) Rental. Item/Service Approved? Yes. Amount Supplier Charged: $117.61. Medicare-Approved Amount: $28.77. Amount Medicare Paid: $23.02. Maximum You May Be Billed: $5.75.
Total for Claim #10334829489000"}, labels=[ "PII typeperson", "PII typeaddress", "PII typephone number", "PII typemedicare number", "PII typeclaim number", ],)for span in result["entities"]: print(span["label"], span["text"])import { SIEClient } from '@superlinked/sie-sdk';
const client = new SIEClient('https://api.superlinked.com', {
apiKey: 'sk-sie-…',
});
const result = await client.extract(
'urchade/gliner_multi_pii-v1',
{ text: "Notice for Jennifer Washington\nMedicare Number: 1A23BC4DE56\nDate of This Notice: September 13, 2020\nSuppliers with Claims This Period: May 9, 2020, Lincare Inc.\nLincare Inc., (555) 555-1234\nPO BOX 996, Blue Springs, MO 64013-0996\nOrdered by John K Whalen\nMay 9, 2020: 1 portable gaseous oxygen system, rental; includes portable container, regulator, flowmeter, humidifie (E0431-RR) Rental. Item/Service Approved? Yes. Amount Supplier Charged: $117.61. Medicare-Approved Amount: $28.77. Amount Medicare Paid: $23.02. Maximum You May Be Billed: $5.75.\nTotal for Claim #10334829489000" },
{ labels: ["person","address","phone number","medicare number","claim number"] },
);
console.log(result.entities);curl https://api.superlinked.com/v1/extract/urchade%2Fgliner_multi_pii-v1 \
-H "Authorization: Bearer sk-sie-…" \
-H "Content-Type: application/json" \
-d "{\"items\":[{\"text\":\"Notice for Jennifer Washington\\nMedicare Number: 1A23BC4DE56\\nDate of This Notice: September 13, 2020\\nSuppliers with Claims This Period: May 9, 2020, Lincare Inc.\\nLincare Inc., (555) 555-1234\\nPO BOX 996, Blue Springs, MO 64013-0996\\nOrdered by John K Whalen\\nMay 9, 2020: 1 portable gaseous oxygen system, rental; includes portable container, regulator, flowmeter, humidifie (E0431-RR) Rental. Item/Service Approved? Yes. Amount Supplier Charged: \$117.61. Medicare-Approved Amount: \$28.77. Amount Medicare Paid: \$23.02. Maximum You May Be Billed: \$5.75.\\nTotal for Claim #10334829489000\"}],\"params\":{\"labels\":[\"person\",\"address\",\"phone number\",\"medicare number\",\"claim number\"]}}"Build the "Redact (PII)" capability into my app using the Superlinked Inference Engine (SIE).
Context
- SIE is an OpenAI-style inference API. Python SDK: `from sie_sdk import SIEClient`; TypeScript: `@superlinked/sie-sdk`.
- Base URL: https://api.superlinked.com (or my regional endpoint). Auth: Bearer key from env `SIE_API_KEY` (never hard-code it).
- Model: urchade/gliner_multi_pii-v1 (SIE primitive: /extract). Keep the model id configurable.
Task
- Input: a block of text.
- Behaviour: return the text with personal data masked, plus the list of entities found
- Call the selected SIE primitive once per request and map the response into your domain type.
Deliverables
- A typed client wrapper, an application-level function for this task, error handling for timeouts/empty input, and unit tests with a stubbed client.
- Wire it into my existing stack (ask me which framework if unclear) and add a short usage example.Notice for [PERSON] Medicare Number: [MEDICARE NUMBER] Date of This Notice: September 13, 2020 Suppliers with Claims This Period: May 9, 2020, Lincare Inc. Lincare Inc., [PHONE NUMBER] [ADDRESS] Ordered by [PERSON] May 9, 2020: 1 portable gaseous oxygen system, rental; includes portable container, regulator, flowmeter, humidifie (E0431-RR) Rental. Item/Service Approved? Yes. Amount Supplier Charged: $117.61. Medicare-Approved Amount: $28.77. Amount Medicare Paid: $23.02. Maximum You May Be Billed: $5.75. Total for Claim #[CLAIM NUMBER]
- Character offsets, so masking needs no regex
- Name any type per request, no fine-tuning
Redaction quality and latency
Deploy your way
Managed Cloud
Full compute toolkit for your agents with zero ops.
- No idle GPUs, pay for what you use
- Fits your stack: SDK, API, CLI, MCP
- Zero lock-in, self-host the same stack
- SOC 2 Type 2, US or EU data residency
no credit card required
Self-host with K8s
Easy & scalable deployment in your own cloud.
- Terraform to your cloud in minutes
- Apache-2.0, same engine as Cloud
- Scales to zero, no bill between jobs
- Per-tenant pools, no noisy neighbors
Deploy SIE to our AWS account with the superlinked/sie/aws Terraform module. Docs: superlinked.com/docs/deploymentDeploy SIE to our GCP project with the superlinked/sie/google Terraform module. Docs: superlinked.com/docs/deploymentDeploy SIE to our Azure AKS cluster via helm install. Requirements: superlinked.com/docs/deployment Run locally
Run the same models on your own machine.
- Runs on NVIDIA GPU or Apple Silicon
- One command, no Docker or cluster
- All 100+ Cloud models, fully offline
- Same SDK and IDs, no code changes
pip install "sie-server[local]" && sie-server servepip install "sie-server[local]" && sie-server serve --device cuda