Getting Started
Diese Seite führt einmal durch den vollen Cortina-Round-Trip: Session erstellen, Text anonymisieren, einen LLM-Call simulieren, das Ergebnis deanonymisieren. Erst per cURL gegen die Live-API, dann mit den SDKs.
Prerequisites
Section titled “Prerequisites”-
Einen API-Key.
Aktuell werden Keys auf direkte Anfrage ausgestellt (E-Mail an [email protected]). Self-Service-Verwaltung kommt mit dem Platform-Portal — bis dahin: kurz schreiben, Rate- Limit nennen, Key kommt zurück.
-
Ein Terminal mit
curl(für den ersten Teil) oder Node ≥ 18 / Python ≥ 3.10 (für den SDK-Teil). -
Den Key in einer Umgebungsvariable. Alle folgenden Beispiele nehmen
TUP_ANON_KEYaus dem Environment.Terminal window export TUP_ANON_KEY=tup_live_<dein-key>
First Request — cURL
Section titled “First Request — cURL”Die drei Calls unten reichen für einen vollen Round-Trip. Die
session_id aus Schritt 1 muss im Body der Folge-Calls stehen
(nicht in einem Header — das ist die häufigste Verwechslung beim ersten
Anlauf).
-
Session erstellen.
Terminal window curl -sS -X POST https://api.tup-ai.de/v1/cortina/session \-H "Authorization: Bearer $TUP_ANON_KEY" \-H "Content-Type: application/json" \-d '{"ttl_seconds": 600}'Antwort:
{"session_id": "018f4a2c-3d7e-7b4a-8c1e-2f9b3d4e5a6f","expires_at": "2026-05-06T20:00:00Z","status": "active"}Die
session_idfür die nächsten Schritte merken. -
Text anonymisieren.
Terminal window curl -sS -X POST https://api.tup-ai.de/v1/cortina/anonymize \-H "Authorization: Bearer $TUP_ANON_KEY" \-H "Content-Type: application/json" \-d '{"text": "Bitte auf IBAN DE89 3704 0044 0532 0130 00 überweisen. Tel: +49 6131 1234567","session_id": "018f4a2c-3d7e-7b4a-8c1e-2f9b3d4e5a6f"}'Antwort (gekürzt):
{"anonymized_text": "Bitte auf IBAN [DE_IBAN_1] überweisen. Tel: [DE_PHONE_NUMBER_1]","entities": [{ "entity_type": "DE_IBAN", "start": 16, "end": 41, "placeholder": "[DE_IBAN_1]", "confidence": 1.0 },{ "entity_type": "DE_PHONE_NUMBER", "start": 58, "end": 75, "placeholder": "[DE_PHONE_NUMBER_1]", "confidence": 0.95 }],"session_id": "018f4a2c-3d7e-7b4a-8c1e-2f9b3d4e5a6f","audit_flags": []}Den
anonymized_textkannst du jetzt sicher an dein LLM weitergeben. Die Original-PII liegt verschlüsselt in der Session. -
Antwort deanonymisieren.
Angenommen das LLM antwortet mit
"Ich bestätige die Überweisung an [DE_IBAN_1]."— diesen Text ans Deanonymize-Endpoint:Terminal window curl -sS -X POST https://api.tup-ai.de/v1/cortina/deanonymize \-H "Authorization: Bearer $TUP_ANON_KEY" \-H "Content-Type: application/json" \-d '{"text": "Ich bestätige die Überweisung an [DE_IBAN_1].","session_id": "018f4a2c-3d7e-7b4a-8c1e-2f9b3d4e5a6f"}'Antwort:
{"original_text": "Ich bestätige die Überweisung an DE89 3704 0044 0532 0130 00.","session_id": "018f4a2c-3d7e-7b4a-8c1e-2f9b3d4e5a6f"}
Same flow with the SDKs
Section titled “Same flow with the SDKs”import { CortinaClient } from "@tup-ai/cortina";
const cortina = new CortinaClient({ apiKey: process.env.TUP_ANON_KEY! });
// 1. Anonymisieren — Convenience-Pfad mit Auto-Sessionconst masked = await cortina.anonymize( "Bitte auf IBAN DE89 3704 0044 0532 0130 00 überweisen. Tel: +49 6131 1234567",);console.log(masked.anonymizedText);// "Bitte auf IBAN [DE_IBAN_1] überweisen. Tel: [DE_PHONE_NUMBER_1]"
// 2. Den anonymisierten Text an dein LLMconst llmReply = await callMyLLM(masked.anonymizedText);
// 3. Originale wieder einsetzenconst restored = await cortina.deanonymize({ text: llmReply, sessionId: masked.sessionId,});console.log(restored.originalText);import asynciofrom cortina import AsyncCortinaClient
async def main() -> None: async with AsyncCortinaClient(api_key=os.environ["TUP_ANON_KEY"]) as cortina: # 1. Anonymisieren masked = await cortina.anonymize( "Bitte auf IBAN DE89 3704 0044 0532 0130 00 überweisen. " "Tel: +49 6131 1234567" ) print(masked.anonymized_text) # "Bitte auf IBAN [DE_IBAN_1] überweisen. Tel: [DE_PHONE_NUMBER_1]"
# 2. Den anonymisierten Text an dein LLM llm_reply = await call_my_llm(masked.anonymized_text)
# 3. Originale wieder einsetzen restored = await cortina.deanonymize( text=llm_reply, session_id=masked.session_id ) print(restored.original_text)
asyncio.run(main())Was hinter den Kulissen passiert
Section titled “Was hinter den Kulissen passiert”Wenn du anonymize aufrufst, läuft Text durch eine vierstufige
Pipeline (Pattern-Recognizer → spaCy NER → Context-LLM →
Adversarial-Loop), und das Original-Mapping wird verschlüsselt in
Redis abgelegt.