Noirdoc

dark mode for your AI.

noirdoc
Your message
Write a welcome email to Lisa Schmidt (lisa.schmidt@acme.de) — her first day is March 15, 2026.
noirdoc ↓ 3 fields detected · pseudonymized
The model sees
Write a welcome email to <<PERSON_1>> (<<EMAIL_1>>) — her first day is <<DATE_1>>.
noirdoc ↑ 3 fields restored
Your response
Dear Ms. Schmidt, welcome to the team! We look forward to your start on March 15, 2026. For questions, reach us at lisa.schmidt@acme.de.
Your message
Create a payment confirmation for Muster GmbH — IBAN DE89 3704 0044 0532 0130 00, tax ID 123/456/78901, invoice amount €12,400.
noirdoc ↓ 3 fields detected · pseudonymized
The model sees
Create a payment confirmation for <<ORG_1>> — IBAN <<IBAN_1>>, tax ID <<TAX_ID_1>>, invoice amount €12,400.
noirdoc ↑ 3 fields restored
Your response
Payment Confirmation We hereby confirm receipt of payment from Muster GmbH. IBAN: DE89 3704 0044 0532 0130 00 Tax ID: 123/456/78901 Amount: €12,400
Your message
Summarize the key clauses in the lease agreement between Muster GmbH and Immo Partner AG at Munich. Contract start April 1, 2025.
noirdoc ↓ 4 fields detected · pseudonymized
The model sees
Summarize the key clauses in the lease agreement between <<ORG_1>> and <<ORG_2>> at <<LOCATION_1>>. Contract start <<DATE_1>>.
noirdoc ↑ 4 fields restored
Your response
Lease Agreement Summary Parties: Muster GmbH (tenant), Immo Partner AG (landlord) Location: Munich, start date April 1, 2025 Term: 5 years, 6-month notice period.
Your message
Draft a response to Max Weber (max.weber@kunde.de, +49 170 1234567) — his complaint concerns the last delivery.
noirdoc ↓ 3 fields detected · pseudonymized
The model sees
Draft a response to <<PERSON_1>> (<<EMAIL_1>>, <<PHONE_1>>) — his complaint concerns the last delivery.
noirdoc ↑ 3 fields restored
Your response
Dear Mr. Weber, thank you for your message. We have logged your complaint and will reach out at +49 170 1234567 or max.weber@kunde.de.

APIs · Chat · Agents · Documents.

Try free Request access managed · self-hosted · GDPR-compliant

Three steps. Zero exposure.

Every request is scrubbed before it reaches the model. Every response restored automatically.

DETECT

Detect & replace

Names, email addresses, phone numbers, IBANs — but also company names, locations, tax IDs, and URLs. Automatically detected and replaced with placeholders like <<PERSON_1>> or <<ORG_1>>.

FORWARD

Forward

The scrubbed request goes to the AI provider of your choice — OpenAI, Anthropic, Azure, or any OpenAI-compatible endpoint. The model only sees pseudonymized data.

RESTORE

Restore

Placeholders in the response are replaced with the original data. You read plain text — the model never saw it.

Session state persists: <<PERSON_1>> always maps to the same person — across every message and tool call.

INTEGRATION

Integrated in seconds.

No new SDK. No refactoring. Just swap URL and API key.

1from openai import OpenAI
2
3client = OpenAI(
4    api_key="px-...",               # your Noirdoc key
5    base_url="https://api.noirdoc.de/v1",
6)
7
8prompt = "..."
9response = client.chat.completions.create(
10    model="gpt-5.2",
11    messages=[{"role": "user", "content": prompt}],
12)
1from anthropic import Anthropic
2
3client = Anthropic(
4    api_key="px-...",               # your Noirdoc key
5    base_url="https://api.noirdoc.de",
6)
7
8prompt = "..."
9message = client.messages.create(
10    model="claude-sonnet-4-6",
11    max_tokens=1024,
12    messages=[{"role": "user", "content": prompt}],
13)
1from openai import OpenAI
2
3client = OpenAI(
4    api_key="px-...",               # your Noirdoc key
5    base_url="https://api.noirdoc.de/v1",
6)
7
8prompt = "..."
9response = client.chat.completions.create(
10    model="gpt-5.2",
11    messages=[{"role": "user", "content": prompt}],
12)
1from openai import OpenAI
2
3client = OpenAI(
4    api_key="px-...",               # your Noirdoc key
5    base_url="https://api.noirdoc.de/v1",
6)
7
8prompt = "..."
9response = client.chat.completions.create(
10    model="openrouter/auto",
11    messages=[{"role": "user", "content": prompt}],
12)

Works with any OpenAI-compatible library — Python, Node.js, Go, cURL.

Drop in anywhere.

OpenAI Anthropic Azure OpenAI OpenRouter Any OpenAI-compatible

One proxy for every AI integration. API call, agent workflow, or chat interface — swap the endpoint, done.

Real data never reaches the model.

Personal and business-critical data is detected and replaced — before the request leaves your infrastructure.

Not just GDPR: Company names, locations, tax IDs, and URLs stay internal too.

Two independent detection layers: rule-based and context-sensitive.

Complete audit trail. Every request traceable.

GDPR-compliant by design. Managed in Germany or self-hosted on your infrastructure.

Your data. Any AI. Zero risk.

Managed in Germany or self-hosted on your infrastructure.

v0.1.0