Dokumentacja API
Pełna dokumentacja REST API silnika promptShield uruchamianego we własnej infrastrukturze. Wszystkie endpointy są dostępne pod adresem Państwa instalacji.
Adres bazowy
http://localhost:8000Należy podstawić host i port własnej instalacji.
Schemat OpenAPI
Serwer udostępnia /docs (Swagger UI), /redoc i /openapi.json. W trybie z kluczem API wszystkie trzy wymagają nagłówka Authorization, więc przeglądarka nie otworzy ich bezpośrednio. Należy pobrać schemat i wczytać go do dowolnego klienta, który potrafi wysłać nagłówek:
curl -H "Authorization: Bearer $PROMPTSHIELD_API_KEY" \
http://localhost:8000/openapi.json -o promptshield-openapi.jsonPrzeglądarka nie wysyła nagłówka Authorization przy zwykłym otwarciu adresu, dlatego w trybie z kluczem API sam adres /docs zwraca 401. Właściwą drogą jest powyższy schemat.
Uwierzytelnianie
Gdy ustawiono PROMPTSHIELD_API_KEY (przez promptshield serve --api-key lub zmienną środowiskową Dockera), każde żądanie musi przekazać go jako Authorization: Bearer <api-key>; brak klucza lub błędny klucz kończy się kodem 401, a klucz z zakresem ograniczonym do części operacji otrzymuje 403 przy pozostałych. Endpoint /health jest zawsze wyłączony z tej reguły. Bez ustawionego klucza API serwer działa bez uwierzytelniania i przyjmuje wszystkie żądania — dopuszczalne wyłącznie w zaufanej sieci lokalnej.
Szybki start
Lokalne API uruchomione w Dockerze. Pierwsze pobranie obrazu to około 3,8 GB.
Pobranie klucza API
export PROMPTSHIELD_API_KEY="ps_live_your_key_here"Klucz API znajduje się w panelu kluczy API.
Uruchomienie serwera
docker run -d --name promptshield \
-e PROMPTSHIELD_API_KEY="$PROMPTSHIELD_API_KEY" \
-p 8000:8000 \
-v promptshield-data:/data \
promptshield/promptshield-api:latestObraz zawiera modele wykrywania, Tesseract OCR i LibreOffice, więc nic więcej nie trzeba instalować.
Sprawdzenie, czy serwer działa
curl http://localhost:8000/health
# → {"status": "ok", "version": "1.3.6"}Przetworzenie pierwszego dokumentu
AUTH="Authorization: Bearer ps_live_your_key_here"
curl -X POST http://localhost:8000/api/documents/upload \
-H "$AUTH" \
-F "file=@contract.pdf"
# → {"doc_id": "abc123", "filename": "contract.pdf", "page_count": 5, "status": "EXTRACTED"}
curl -X POST http://localhost:8000/api/documents/abc123/detect \
-H "$AUTH" \
-H "Content-Type: application/json" \
-d '{"confidence_threshold": 0.7}'
# → {"doc_id": "abc123", "total_regions": 42, "regions": [...]}
curl -X POST http://localhost:8000/api/documents/abc123/anonymize \
-H "$AUTH"
# → {"doc_id": "abc123", "tokens_created": 42, "regions_removed": 0, "output_path": "..."}
curl -o contract-safe.pdf \
-H "$AUTH" \
http://localhost:8000/api/documents/abc123/download/pdfLokalna instalacja w Pythonie
Pakietu Pythona nie ma jeszcze w PyPI, więc polecenie pip install promptshield-app nie zadziała. Należy użyć powyższego obrazu Dockera albo zbudować pakiet ze źródeł. Zaktualizujemy tę stronę, gdy pakiet zostanie opublikowany.
Przewodnik krok po kroku
Kompletny przewodnik: konfiguracja lokalnego API i wpięcie go we własne procesy.
1. Wymagania wstępne
Przed rozpoczęciem należy mieć zainstalowane:
Opcjonalnie, dla pełnej obsługi formatów:
2. Instalacja SDK
Instalacja pakietu promptShield dla Pythona. Wersja podstawowa obsługuje pliki PDF. Dodatek office dodaje obsługę Worda, Excela i PowerPointa.
Pakiet Pythona nie jest jeszcze opublikowany w PyPI, więc dwa poniższe polecenia nie zadziałają. Na razie należy korzystać z obrazu Dockera opisanego w sekcji 5. Cała reszta tej strony dotyczy obu sposobów instalacji.
pip install promptshield-apppip install "promptshield-app[office]"Instalacja modeli językowych (paczek modeli wykrywania) z wiersza poleceń:
# Set the install directory (add to your shell profile)
export PROMPTSHIELD_ASSETS_DIR="$HOME/.local/share/promptshield/assets"
# Windows: $env:PROMPTSHIELD_ASSETS_DIR = "$env:APPDATA\promptshield\assets"
# English pack — required (medium is recommended)
promptshield models install spacy-en-md
# For maximum accuracy (larger download)
promptshield models install spacy-en-lgKolejne paczki językowe instaluje się w ten sam sposób:
promptshield models install spacy-fr-md # French
promptshield models install spacy-de-md # German
promptshield models install spacy-es-md # Spanish
promptshield models install spacy-it-md # Italian
promptshield models install spacy-nl-md # Dutch
promptshield models install spacy-pt-md # Portuguese3. Uwierzytelnianie
Lokalne API używa klucza API promptShield do weryfikacji licencji. Można go ustawić jako zmienną środowiskową lub przekazać przy uruchamianiu serwera.
export PROMPTSHIELD_API_KEY="ps_live_your_key_here"$env:PROMPTSHIELD_API_KEY = "ps_live_your_key_here"Klucz API jest weryfikowany online przy starcie, a potem co 6 godzin. Każda odpowiedź jest zapamiętywana lokalnie, więc gdy serwer licencji jest nieosiągalny, serwer działa dalej jeszcze do 3 dni.
4. Uruchomienie serwera API
Lokalny serwer uruchamia jedno polecenie:
promptshield serve
# Starting PromptShield API server on 127.0.0.1:8000
# Health: http://127.0.0.1:8000/health (no auth)
# Schema: http://127.0.0.1:8000/openapi.json (send: Authorization: Bearer <your-api-key>)
# /docs and /redoc are served but require that same header, so a browser cannot open them directly.Dostępne opcje:
| --host | Adres nasłuchu (domyślnie: 127.0.0.1) |
| --port | Port nasłuchu (domyślnie: 8000) |
| --api-key | Klucz API (zamiast zmiennej środowiskowej) |
Po uruchomieniu API jest dostępne pod wyświetlonym adresem. Schemat OpenAPI znajduje się pod /openapi.json; do tego żądania również należy dołączyć klucz API.
5. Wdrożenie w Dockerze
Na produkcji Docker daje środowisko bez instalacji, ze wszystkimi zależnościami w obrazie.
docker run -d --name promptshield \
-e PROMPTSHIELD_API_KEY="ps_live_your_key_here" \
-p 8000:8000 \
-v promptshield-data:/data \
promptshield/promptshield-api:latest# docker-compose.yml
services:
promptshield:
image: promptshield/promptshield-api:latest
ports:
- "8000:8000"
volumes:
- promptshield-data:/data
environment:
- PROMPTSHIELD_API_KEY=${PROMPTSHIELD_API_KEY}
restart: unless-stopped
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8000/health"]
interval: 30s
volumes:
promptshield-data:Należy utworzyć plik .env z własnym kluczem API:
PROMPTSHIELD_API_KEY=ps_live_your_key_hereObraz Dockera zawiera:
6. Przebieg pracy z API
Standardowe przetwarzanie dokumentu ma 5 kroków:
Pełny przykład przebiegu (cURL)
# 1. Upload
AUTH="Authorization: Bearer ps_live_your_key_here"
DOC_ID=$(curl -s -X POST http://localhost:8000/api/documents/upload \
-H "$AUTH" \
-F "file=@contract.pdf" | python -c "import sys,json; print(json.load(sys.stdin)['doc_id'])")
echo "Document ID: $DOC_ID"
# 2. Detect PII (with optional inline overrides)
curl -X POST http://localhost:8000/api/documents/$DOC_ID/detect \
-H "$AUTH" \
-H "Content-Type: application/json" \
-d '{"confidence_threshold": 0.7, "regex_enabled": true, "ner_enabled": true}'
# → {"doc_id": "...", "total_regions": 42, "regions": [...]}
# 3. Review detected regions
curl -H "$AUTH" http://localhost:8000/api/documents/$DOC_ID/regions | python -m json.tool
# → [{"id": "...", "pii_type": "PERSON", "text": "John Smith", "confidence": 0.98,
# "action": "TOKENIZE", ...}, ...]
# 3b. Bulk-update region actions before anonymizing (region_ids from step 3)
curl -X PUT http://localhost:8000/api/documents/$DOC_ID/regions/batch-action \
-H "$AUTH" \
-H "Content-Type: application/json" \
-d '{"region_ids": ["<id1>", "<id2>"], "action": "REMOVE"}'
# 4. Anonymize
curl -X POST http://localhost:8000/api/documents/$DOC_ID/anonymize \
-H "$AUTH"
# → {"doc_id": "...", "tokens_created": 42, "regions_removed": 0}
# 5. Download the anonymized document
curl -o contract-safe.pdf \
-H "$AUTH" \
http://localhost:8000/api/documents/$DOC_ID/download/pdf
echo "Done! Anonymized file saved to contract-safe.pdf"7. Wiersz poleceń
Dokumenty można przetwarzać wprost z wiersza poleceń, bez uruchamiania serwera:
promptshield detect invoice.pdf
# Detected 23 PII entities across 5 pages
promptshield detect invoice.pdf -o report.json
# Report saved to report.json
# Tune the pipeline per run — every desktop-app setting is also a CLI flag.
promptshield detect contract.pdf \
--language en --countries US \
--ner-backend Davlan/bert-base-multilingual-cased-ner-hrl \
--no-llm --fuzziness 0.5 \
--ner-types PERSON,ORG \
-e SA-2026-0847 -e "84-329-1057" \
--export-review -o contract.psreview
# Or load all of the above from demo/setup.json by locale:
promptshield detect contract.pdf --preset en --export-review -o contract.psreviewpromptshield anonymize contract.pdf -o contract-safe.pdf
# Anonymized: 42 tokens created, saved to contract-safe.pdf
# Permanently redact PII (black boxes, irreversible)
promptshield anonymize contract.pdf --redact -o contract-redacted.pdfpromptshield detokenize contract-safe.pdf -o contract-restored.pdf
# Restored 42 tokens, saved to contract-restored.pdfWszystkie polecenia weryfikują klucz API i przetwarzają dokumenty lokalnie. Żadne dane z dokumentów nie opuszczają Państwa komputera.
Dodatkowe modele
Wbudowane polecenie models służy do przeglądania, instalowania i usuwania paczek językowych modeli wykrywania. Należy ustawić PROMPTSHIELD_ASSETS_DIR, aby zarówno wiersz poleceń, jak i działający serwer je znajdowały.
export PROMPTSHIELD_ASSETS_DIR="$HOME/.local/share/promptshield/assets"
# Windows: $env:PROMPTSHIELD_ASSETS_DIR = "$env:APPDATA\promptshield\assets"promptshield models list
# Language packs (NER)
# [ ] spacy-en-sm English (small) (12 MB)
# [installed] spacy-en-md English (medium) (33 MB)
# [ ] spacy-fr-md French (medium) (16 MB) ...promptshield models install spacy-fr-md
# Installing spacy-fr-md (French (medium))...
# Downloading... 16.0/16.0 MB (100%)
# Verifying integrity...
# Extracting...
# Installed to ~/.local/share/promptshield/assets/spacy/fr_core_news_mdpromptshield models installed
# Installed models:
# spacy-en-md English (medium)
# spacy-fr-md French (medium)promptshield models remove spacy-fr-mdZainstalowane paczki są automatycznie wykrywane przez polecenia detect i anonymize oraz przez działający serwer API. Polecenie instalacji łączy się bezpośrednio z serwerem licencji — nie wymaga działającego procesu pomocniczego.
8. Wyrażenia własne
Wbudowane wyrażenia regularne i modele wykrywania obejmują większość danych osobowych, ale każda organizacja ma własne identyfikatory — numery umów, wewnętrzne kody projektów, numery NIP, oznaczenia poufności. Po dodaniu jako wyrażenia są traktowane na równi z pozostałymi danymi osobowymi: oznaczane typem CUSTOM, z pełnym prostokątem otaczającym i powielaniem na kolejne strony. Dostępne w wierszu poleceń (-e / --expression), w API HTTP we własnej instalacji (blacklist_terms) oraz w presetach demo/setup.json.
# Literal text — case-insensitive substring match
promptshield detect contract.pdf -e SA-2026-0847 -e "84-329-1057"
# Repeatable — pass as many -e flags as you need
promptshield detect contract.pdf \
-e ACME-CONFIDENTIAL \
-e "Internal Use Only" \
-e CUST-12345
# Regex — prefix with "re:" for full regex semantics
promptshield detect contract.pdf \
-e "re:CASE-\d{4}-[A-Z]{3}" \
-e "re:Project [A-Z][a-z]+"# Same feature on the self-hosted HTTP API.
curl -X POST http://localhost:8000/api/documents/$DOC_ID/detect \
-H "$AUTH" \
-H "Content-Type: application/json" \
-d '{
"expressions": ["SA-2026-0847", "84-329-1057"],
"expressions_action": "tokenize",
"expressions_fuzziness": 1.0
}'
# expressions_action: "none" | "tokenize" | "remove"
# expressions_fuzziness: 1.0 = exact match, 0.5 = fuzzy edit-distance match
#
# Back-compat: the legacy keys "blacklist_terms" / "blacklist_action" /
# "blacklist_fuzziness" still work and map to the same fields via
# Pydantic alias — existing integrations don't need changes.# demo/setup.json
{
"en": {
"language": "en",
"countries": ["US"],
"ner_backend": "Davlan/bert-base-multilingual-cased-ner-hrl",
"expressions": ["SA-2026-0847", "84-329-1057"],
"fuzziness": 0.5
}
}
# Then any time:
promptshield detect contract.pdf --preset en --export-review -o contract.psreviewO nazewnictwie: expressions to obecnie kanoniczna nazwa we wszystkich trzech miejscach — w wierszu poleceń (-e / --expression), w API HTTP (expressions / expressions_action / expressions_fuzziness) oraz jako etykieta w aplikacji na komputer. Wcześniejsze klucze blacklist_terms / blacklist_action / blacklist_fuzziness w API HTTP nadal działają dzięki aliasowi Pydantic, więc istniejące integracje pozostają sprawne.
Przebieg sprawdzania: API → aplikacja na komputer
Zautomatyzowane wykrywanie na dużą skalę to dopiero połowa drogi. Wykrywanie automatyczne nigdy nie osiąga 100% precyzji — zawsze są fałszywe trafienia do odrzucenia i pominięte encje do dodania. promptShield zamyka ten obieg przenośną paczką .psreview: wykrywanie programowe, import do aplikacji na komputer, kontrola wzrokowa przez człowieka, potem anonimizacja.
Krok 1a — wykrycie i eksport (wiersz poleceń, jednym poleceniem)
# Detect + bundle in one command
promptshield detect contract.pdf --export-review -o contract.psreview
# Ingesting contract.pdf...
# Detecting PII on page 1/3...
# Detecting PII on page 2/3...
# Detecting PII on page 3/3...
# Detected 14 PII region(s) across 3 page(s) in 1240ms.
# Review bundle saved to contract.psreview (14 region(s))Krok 1b — wykrycie i eksport (API HTTP)
# 1. Upload document
curl -X POST http://localhost:8000/api/documents/upload \
-H "Authorization: Bearer $PROMPTSHIELD_API_KEY" \
-F "file=@contract.pdf"
# → {"doc_id": "abc123ef", "page_count": 3, ...}
# 2. Run detection
curl -X POST http://localhost:8000/api/documents/abc123ef/detect \
-H "Authorization: Bearer $PROMPTSHIELD_API_KEY"
# 3. Download the review bundle
curl http://localhost:8000/api/documents/abc123ef/export-review \
-H "Authorization: Bearer $PROMPTSHIELD_API_KEY" \
-o contract.psreview.psreview API
/api/documents/{id}/export-reviewEksport paczki do sprawdzenia
Pobiera dokument wraz ze wszystkimi adnotacjami obszarów w postaci przenośnej paczki ZIP .psreview.
/api/documents/import-reviewImport paczki do sprawdzenia
Przyjmuje paczkę .psreview. Wyodrębnia dokument (uruchamia OCR), wstawia zapisane adnotacje obszarów i otwiera dokument w stanie REVIEWING — gotowy do kontroli wzrokowej bez ponownego wykrywania.
Krok 2 — import do aplikacji na komputer
Należy otworzyć aplikację promptShield na komputer, a na ekranie wgrywania kliknąć Importuj do sprawdzenia i wybrać plik .psreview. Dokument otwiera się od razu w trybie sprawdzania — wszystkie wykryte obszary są już wczytane, bez etapu wykrywania.
Krok 3 — sprawdzenie, korekta i zaczernienie
Na panelu obszarów należy odrzucić fałszywe trafienia (ustawiając działanie Anuluj), zaznaczyć nowe obszary tam, gdzie model coś pominął, a następnie kliknąć Eksportuj. Aplikacja na komputer trwale zaczernia zaznaczone dane i zapisuje PDF w folderze Pobrane.
8. SDK Pythona (import bezpośredni)
Przy bardziej zaawansowanych integracjach moduły podstawowe można zaimportować wprost we własnym kodzie Pythona. Daje to pełną kontrolę nad każdym etapem przetwarzania.
from promptshield import PromptShield
ps = PromptShield()
def process(input_path: str, output_path: str):
# Step 1 — Detect PII (runs the full local pipeline)
result = ps.detect(input_path)
print(f"Loaded: {result.file} ({result.pages} pages)")
print(f"Total PII entities: {result.total_regions}")
for page in result.regions:
for entity in page["entities"]:
print(f" Page {page['page']}: [{entity['type']}] {entity['text']}")
# Step 2 — Anonymize (reversible tokens by default; pass redact=True
# for permanent removal). Output is always a PDF.
out = ps.anonymize(input_path, output_path)
print(f"Anonymized: {out.tokens_created} tokens, saved to {out.output_file}")
# Step 3 — Restore the originals later from the local token vault
restored = ps.detokenize(output_path, "contract-restored.pdf")
print(f"Restored {restored.tokens_replaced} tokens")
process("contract.pdf", "contract-safe.pdf")
# Async variants are available too: ps.adetect / ps.aanonymize / ps.adetokenizePrzykład przetwarzania zbiorczego
Przetwarzanie wielu plików z katalogu:
from pathlib import Path
from promptshield import PromptShield
ps = PromptShield()
def batch_process(input_dir: str, output_dir: str):
input_path = Path(input_dir)
output_path = Path(output_dir)
output_path.mkdir(parents=True, exist_ok=True)
files = list(input_path.glob("*.pdf"))
print(f"Processing {len(files)} files...")
for i, file in enumerate(files, 1):
print(f"[{i}/{len(files)}] {file.name}")
out_file = output_path / f"anon_{file.stem}.pdf"
result = ps.anonymize(str(file), str(out_file))
print(f" → {result.tokens_created} tokens, saved to {out_file.name}")
print("Batch complete!")
batch_process("./documents", "./anonymized")9. Bezpieczeństwo i ochrona danych
promptShield jest zaprojektowany dla środowisk o zerowym zaufaniu:
10. Rozwiązywanie problemów
Najczęstsze problemy i ich rozwiązania:
Błąd 'No spaCy model found' lub 'no NER model loaded'
Należy ustawić PROMPTSHIELD_ASSETS_DIR i zainstalować paczkę: promptshield models install spacy-en-md. Alternatywnie, instalacja systemowa: python -m spacy download en_core_web_sm
OCR nie działa na zeskanowanych PDF-ach
Należy zainstalować Tesseract OCR i upewnić się, że jest dostępny w zmiennej PATH. W systemie Windows instalator dodaje go automatycznie.
Pliki Office nie dają się przekonwertować
Należy zainstalować LibreOffice. DOCX ma zapasową obsługę w czystym Pythonie, ale XLSX i PPTX wymagają LibreOffice.
'Invalid API key' przy uruchamianiu
Należy sprawdzić, czy klucz zaczyna się od ps_live_ i czy subskrypcja jest aktywna. Kluczami można zarządzać pod adresem /developers/api-keys.
Dokumenty
/api/documents/uploadWgrywanie dokumentu
Wgrywa dokument do przetworzenia. Obsługuje pliki PDF, DOCX, XLSX, PPTX oraz obrazy.
/api/documentsLista dokumentów
Zwraca wszystkie wgrane dokumenty wraz ze stanem wykrywania i anonimizacji.
/api/documents/{id}Pobieranie dokumentu
Zwraca szczegółowe informacje o wskazanym dokumencie, w tym liczbę stron i stan wykrywania.
/api/documents/{id}Usuwanie dokumentu
Usuwa dokument i wszystkie powiązane z nim dane z serwera.
Wykrywanie
/api/documents/{id}/detectWykrywanie danych osobowych
Uruchamia wykrywanie danych osobowych w dokumencie. Opcjonalne ciało JSON pozwala nadpisać ustawienia wykrywania (confidence_threshold, regex_enabled, ner_enabled, regex_types itd.) wyłącznie dla tego przebiegu.
/api/documents/{id}/redetectPonowne wykrywanie
Uruchamia wykrywanie ponownie, z pełną kontrolą parametrów. Przyjmuje confidence_threshold, regex_types, ner_types, blacklist_terms i inne.
/api/documents/{id}/detection-progressPostęp wykrywania
Zwraca postęp trwającego zadania wykrywania (procent, aktualna strona, status).
/api/documents/{id}/regionsPobieranie obszarów
Zwraca wszystkie wykryte obszary z danymi osobowymi wraz z typem, treścią, oceną pewności i prostokątem otaczającym.
/api/documents/{id}/regions/batch-actionZbiorcza zmiana obszarów
Ustawia działanie (TOKENIZE, REMOVE lub CANCEL) dla wielu obszarów jednocześnie, z filtrowaniem po typie encji.
Anonimizacja i eksport
/api/documents/{id}/regions/syncSynchronizacja obszarów
Zastępuje w całości listę obszarów dokumentu. Do użycia po edycji obszarów po stronie klienta, aby przesłać zmiany przed anonimizacją.
/api/documents/{id}/anonymizeAnonimizacja dokumentu
Pseudonimizuje dokument: zastępuje wykryte dane osobowe kodami. Zwraca przetworzony dokument.
/api/documents/{id}/download/{type}Pobieranie przetworzonego pliku
Pobiera wynik: plik zakodowany lub zaczerniony. {type} to 'pdf' lub 'text'. Wynik jest zawsze renderowany jako PDF (wejście inne niż PDF jest konwertowane), więc 'pdf' jest formatem podstawowym.
/api/documents/batch-anonymizeAnonimizacja zbiorcza
Anonimizuje wiele dokumentów w jednym żądaniu: do 50 na żądanie, przetwarzanych po 3 naraz.
Odkodowanie
/api/detokenizeOdkodowanie tekstu
Zamienia kody w tekście na ich pierwotne wartości z Rejestru kodów.
/api/detokenize/fileOdkodowanie pliku
Przyjmuje zakodowany dokument i zwraca wersję ze wszystkimi kodami przywróconymi do pierwotnych wartości.
Rejestr kodów
/api/vault/statusStan Rejestru kodów
Zwraca statystyki Rejestru kodów: liczbę kodów, liczbę dokumentów i rozmiar rejestru.
/api/vault/tokensLista kodów
Zwraca wszystkie przypisania kodów do wartości pierwotnych zapisane w Rejestrze kodów.
/api/vault/exportEksport Rejestru kodów
Eksportuje cały Rejestr kodów do pliku JSON na potrzeby kopii zapasowej lub migracji.
/api/vault/importImport Rejestru kodów
Importuje wcześniej wyeksportowany plik JSON z Rejestrem kodów, przywracając przypisania kodów.
Stan serwera
/healthKontrola stanu
Zwraca stan serwera. Do monitoringu i kontroli stanu w load balancerze.
Ustawienia
/api/settingsPobieranie ustawień
Zwraca aktualną konfigurację wykrywania i przetwarzania (progi, włączone etapy, język itd.).
/api/settingsZmiana ustawień
Zmienia częściowo globalne ustawienia wykrywania. Zmiany obowiązują we wszystkich kolejnych przebiegach.
/api/settings/patternsLista własnych wzorców
Zwraca wszystkie zdefiniowane przez użytkownika wyrażenia regularne używane do wykrywania własnych danych osobowych.
/api/settings/patternsTworzenie własnego wzorca
Dodaje nowe wyrażenie regularne do wykrywania danych osobowych. Wzorce działają obok reguł wbudowanych.
Przykład
# 1. Upload a document
curl -X POST http://localhost:8000/api/documents/upload \
-F "file=@contract.pdf"
# → {"doc_id": "abc123", "filename": "contract.pdf", "page_count": 5, "status": "EXTRACTED"}
# 2. Run PII detection
curl -X POST http://localhost:8000/api/documents/abc123/detect
# → {"doc_id": "abc123", "total_regions": 42, "regions": [...]}
# 3. Get detected regions
curl http://localhost:8000/api/documents/abc123/regions
# → [{"id": "...", "pii_type": "PERSON", "text": "John Smith", "confidence": 0.98,
# "page_number": 1, "bbox": {...}, "source": "NER", "action": "TOKENIZE"}, ...]
# 4. Anonymize the document
curl -X POST http://localhost:8000/api/documents/abc123/anonymize
# → {"doc_id": "abc123", "tokens_created": 42, "regions_removed": 0}
# 5. Download anonymized PDF
curl -o contract-safe.pdf \
http://localhost:8000/api/documents/abc123/download/pdfSDK Pythona
Klasa PromptShield przeprowadza cały proces lokalnie: wykrywanie, kodowanie (pseudonimizacja) i odkodowanie w trzech wywołaniach. Całe przetwarzanie odbywa się na Państwa komputerze; żadne dane z dokumentów go nie opuszczają.
SDK jest częścią pakietu Pythona, którego nie ma jeszcze w PyPI. Do tego czasu tę samą pracę wykonują opisane wyżej endpointy HTTP.
from promptshield import PromptShield
ps = PromptShield()
# Wykrycie danych osobowych
result = ps.detect("contract.pdf")
print(f"{result.total_regions} entities across {result.pages} pages")
for page in result.regions:
for entity in page["entities"]:
print(f" [{entity['type']}] {entity['text']}")
# Kodowanie odwracalne (pseudonimizacja)
out = ps.anonymize("contract.pdf", "contract-safe.pdf")
print(f"Done: {out.tokens_created} tokens created")
# Przywrócenie pierwotnych wartości
restored = ps.detokenize("contract-safe.pdf", "contract-restored.pdf")
print(f"Restored {restored.tokens_replaced} tokens")Obsługa błędów
Wszystkie odpowiedzi z błędem mają jednolity format JSON z polem detail opisującym błąd.
Błędne żądanie. Nieprawidłowe parametry lub uszkodzony bądź nieobsługiwany plik.
Brak autoryzacji. Brakujący lub nieprawidłowy klucz API (Authorization: Bearer) w trybie klucza API.
Brak uprawnień. Klucz API nie ma wymaganego zakresu (detect / anonymize / detokenize).
Nie znaleziono. Podany identyfikator dokumentu nie istnieje.
Nie do przetworzenia. Brakuje wymaganego pola lub plik jest zabezpieczony hasłem.
Błąd serwera. Szczegóły w logach serwera.
Wymagany model wykrywania nie jest zainstalowany. Instalacja: promptshield models install.
{
"detail": "Document not found: abc123"
}Limity zapytań
API we własnej instalacji domyślnie nie ma limitów zapytań. W razie potrzeby limitowanie można skonfigurować zmiennymi środowiskowymi.