Patient نورة بنت عبدالله السبيعي, NID 1052338942, admitted 03 Rajab 1447H.
For Saudi organizations routing regulated text through frontier LLMs.
Patient Khalid Al-Otaibi, NID 1052338942, admitted 07 Shawwal 1446H, reachable at +966 50 221 8403.
Sending raw Saudi personal data to ChatGPT, Claude, or Gemini is a regulated cross-border transfer under the PDPL. KINDI substitutes regulated identifiers with deterministic placeholders before the request crosses the border, so the payload is no longer personal data. The sector rules that do mandate in-Kingdom processing, SAMA for banking and the NCA DCC and health-data controls, are met the same way. The mapping is encrypted under your API key and unmasked in your client. The server stores nothing.
your application
Patient نورة … NID 1052338942 …
kindi.me
Patient PERSON_NAME_01 … NID NATIONAL_ID_01 …
your client
Reply restored locally under your API key.
hosted abroad
Same masked text. No citizen data crosses the border.
your application
kindi.me
hosted abroad
your client
Patient نورة بنت عبدالله السبيعي, NID 1052338942, admitted 03 Rajab 1447H.
Transfer to PERSON_NAME_01, IBAN SA44 2000 0001 2345 6789 1234; confirm to +966 50 221 8403.
Re: claimant PERSON_NAME_01, iqama 2391847569, filed 07 Shawwal 1446H.
KINDI detects PII and replaces each span with a deterministic placeholder before the text reaches a model. Your client restores the originals, or the optional proxy restores them in the Kingdom.
KINDI locates PII spans: Saudi National IDs, iqamas, names in both scripts, IBANs, dates, addresses, and phone numbers. Saudi identifiers are checksum-verified: a value that cannot be a real national ID, iqama, or IBAN is not treated as one. Uploaded files are validated more leniently. A saved or per-request glossary adds your own terms, such as codenames and contract identifiers.
KINDI replaces each span with a stable placeholder. It returns the masked text with a mapping encrypted under a key derived from your API key. The server keeps no copy.
Your client decrypts the mapping with the same API key and substitutes the placeholders in the model’s response. With the optional proxy, KINDI performs this unmask in-Kingdom before returning the response. Either way, the originals never leave the Kingdom.
The sample below marks PII, replaces it with placeholders, and seals the mapping in your browser. It sends no request. Extended entity types are switched on for this panel: medical record numbers are off by default and enabled per account in the dashboard.
Patient أحمد بن سالم القحطاني, NID 1098234568, presented on 14 Ramadan 1446H. MRN KFMC-4429012. Reimbursement to IBAN SA03 8000 0000 6080 1016 7519.
Ten entity types are on by default. Thirteen more are available and one toggle away. Entity toggles are set per account in the dashboard and apply to every request the account makes. A saved or per-request glossary adds your own terms.
| Entity | Examples | Placeholder form |
|---|---|---|
| PERSON | Personal names in Latin or Arabic script, including patronymics. | PERSON_NAME_01 |
| NATIONAL_ID | Saudi National ID. Ten digits, leading 1, checksum-verified. | NATIONAL_ID_01 |
| RESIDENCE_PERMIT | Iqama. Ten digits, leading 2, checksum-verified. | RESIDENCE_PERMIT_01 |
| PHONE_NUMBER | Saudi and international numbers, in E.164 or local form. | PHONE_01 |
| EMAIL_ADDRESS | Email addresses. | EMAIL_01 |
| DATE_TIME | Hijri and Gregorian dates, times, and ages. | DATE_01 |
| IBAN | Saudi IBAN. SA prefix, 24 characters, checksum-verified. | IBAN_01 |
| CREDIT_CARD | Payment card numbers. | CARD_01 |
| PASSPORT | Saudi and foreign passport numbers. | PASSPORT_01 |
| ADDRESS | Addresses on the Saudi national addressing system: building, street, district, postal code. | ADDRESS_01 |
| Entity | Examples | Placeholder form |
|---|---|---|
| ORGANIZATION | Named bodies in both scripts: hospitals, ministries, شركة and مؤسسة parties. | ORG_01 |
| LOCATION | Cities, districts, and other named places. | LOCATION_01 |
| MRN | Medical record numbers, including facility-prefixed forms. | MRN_01 |
| BUSINESS_ID | Commercial registration (CR) numbers. | BUSINESS_ID_01 |
| TAX_ID | VAT and Zakat registration numbers. | TAX_ID_01 |
| VEHICLE_PLATE | Saudi vehicle plates, Latin and Arabic letter sets. | VEHICLE_PLATE_01 |
| STUDENT_ID | Student and university enrolment numbers. | STUDENT_ID_01 |
| INSURANCE_POLICY | Insurance policy and membership numbers. | INSURANCE_POLICY_01 |
| MEDICAL_LICENSE | Practitioner licence numbers. | MEDICAL_LICENSE_01 |
| API_KEY | Credentials and bearer tokens pasted into a note. | API_KEY_01 |
| MONETARY_AMOUNT | Sums in SAR and other currencies. | AMOUNT_01 |
| SSN | Foreign national insurance and social security numbers. | SSN_01 |
| IP_ADDRESS | IPv4 and IPv6 addresses. | IP_01 |
The entity name is the span type /mask returns. The placeholder form is what /redact writes in place of the first occurrence of that type; further occurrences enumerate upward.
Two HTTPS endpoints carry the core: /mask, which returns masked text plus an encrypted mapping, and /redact, which returns enumerated placeholders. File redaction and the optional LLM proxy build on the same detection. Unmasking runs client-side; there is no /unmask endpoint by design.
Official TypeScript and Python SDKs are packaged with the private beta; the API is plain HTTPS.
Correspondence
Through the form. KINDI publishes no email addresses; notes are routed by topic to the right desk. Legal, data-protection, and security correspondence has its own topics at kindi.me/contact.
Location
Riyadh, Kingdom of Saudi Arabia
Hours
Replies within one business day, Sunday through Thursday.