Developers
Specyfikacja API

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:8000

Należ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:

bash
curl -H "Authorization: Bearer $PROMPTSHIELD_API_KEY" \
  http://localhost:8000/openapi.json -o promptshield-openapi.json

Przeglą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.

1

Pobranie klucza API

bash
export PROMPTSHIELD_API_KEY="ps_live_your_key_here"

Klucz API znajduje się w panelu kluczy API.

2

Uruchomienie serwera

bash
docker run -d --name promptshield \
  -e PROMPTSHIELD_API_KEY="$PROMPTSHIELD_API_KEY" \
  -p 8000:8000 \
  -v promptshield-data:/data \
  promptshield/promptshield-api:latest

Obraz zawiera modele wykrywania, Tesseract OCR i LibreOffice, więc nic więcej nie trzeba instalować.

3

Sprawdzenie, czy serwer działa

bash
curl http://localhost:8000/health
# → {"status": "ok", "version": "1.3.6"}
4

Przetworzenie pierwszego dokumentu

bash
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/pdf

Lokalna 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:

Docker (obecnie obsługiwany sposób instalacji)
Python 3.11 lub nowszy
pip (dołączony do Pythona)
Klucz API promptShield (plan Basic lub Pro)

Opcjonalnie, dla pełnej obsługi formatów:

Tesseract OCR — dla zeskanowanych PDF-ów i plików graficznych
LibreOffice — do konwersji plików .docx, .xlsx, .pptx

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.

Instalacja podstawowa (tylko PDF)
bash
pip install promptshield-app
Z obsługą formatów Office
bash
pip install "promptshield-app[office]"

Instalacja modeli językowych (paczek modeli wykrywania) z wiersza poleceń:

bash
# 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-lg

Kolejne paczki językowe instaluje się w ten sam sposób:

bash
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   # Portuguese

3. Uwierzytelnianie

Lokalne API używa klucza API promptShield do weryfikacji licencji. Można go ustawić jako zmienną środowiskową lub przekazać przy uruchamianiu serwera.

macOS / Linux
bash
export PROMPTSHIELD_API_KEY="ps_live_your_key_here"
Windows (PowerShell)
bash
$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:

bash
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:

--hostAdres nasłuchu (domyślnie: 127.0.0.1)
--portPort nasłuchu (domyślnie: 8000)
--api-keyKlucz 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.

Pojedynczy kontener
bash
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
Z Docker Compose
bash
# 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:

.env
bash
PROMPTSHIELD_API_KEY=ps_live_your_key_here

Obraz Dockera zawiera:

Tesseract OCR z 7 paczkami językowymi (EN, FR, DE, ES, IT, NL, PT)
LibreOffice do konwersji formatów Office
Wstępnie zainstalowane modele spaCy dla angielskiego i francuskiego (pozostałe języki przez models install)
Użytkownik bez uprawnień root, kontrole stanu, trwały wolumen danych

6. Przebieg pracy z API

Standardowe przetwarzanie dokumentu ma 5 kroków:

1Wgranie: przesłanie dokumentu na serwer
2Wykrywanie: wyszukanie danych osobowych (wyrażenia regularne + modele wykrywania + opcjonalnie LLM)
3Sprawdzenie: przegląd wykrytych obszarów, korekta lub zatwierdzenie
4Kodowanie (pseudonimizacja): zastąpienie danych osobowych kodami
5Pobranie: odebranie zakodowanego lub zaczernionego dokumentu

Pełny przykład przebiegu (cURL)

cURL
bash
# 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:

Wykrycie danych osobowych i zapis raportu JSON
bash
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.psreview
Anonimizacja dokumentu w jednym kroku
bash
promptshield 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.pdf
Przywrócenie pierwotnych wartości w zakodowanym dokumencie
bash
promptshield detokenize contract-safe.pdf -o contract-restored.pdf
# Restored 42 tokens, saved to contract-restored.pdf

Wszystkie 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.

Katalog instalacji wystarczy ustawić raz (warto dodać go do profilu powłoki):
bash
export PROMPTSHIELD_ASSETS_DIR="$HOME/.local/share/promptshield/assets"
# Windows: $env:PROMPTSHIELD_ASSETS_DIR = "$env:APPDATA\promptshield\assets"
Przegląd dostępnych paczek wraz ze stanem instalacji
bash
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)  ...
Pobranie i instalacja paczki (bez uruchomionego serwera)
bash
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_md
Lista paczek zainstalowanych w PROMPTSHIELD_ASSETS_DIR
bash
promptshield models installed
# Installed models:
#   spacy-en-md   English (medium)
#   spacy-fr-md   French (medium)
Usunięcie paczki
bash
promptshield models remove spacy-fr-md

Zainstalowane 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.

Wiersz poleceń — powtarzalna flaga -e / --expression
bash
# 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]+"
API HTTP — ciało POST /api/documents/{id}/detect
bash
# 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.
Plik presetu — stosowany przy każdym wywołaniu --preset <locale>
bash
# 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.psreview

O 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.

📂
Wykrywanie zbiorcze
API lub wiersz poleceń
📦
Paczka .psreview
dokument + adnotacje
🖥️
Sprawdzenie na desktopie
odrzuć fałszywe trafienia · dodaj pominięte
✅
Zanonimizowane PDF-y

Krok 1a — wykrycie i eksport (wiersz poleceń, jednym poleceniem)

bash
# 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)

bash
# 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

GET
/api/documents/{id}/export-review

Eksport paczki do sprawdzenia

Pobiera dokument wraz ze wszystkimi adnotacjami obszarów w postaci przenośnej paczki ZIP .psreview.

POST
/api/documents/import-review

Import 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.

Pełny przykład w Pythonie
bash
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.adetokenize

Przykład przetwarzania zbiorczego

Przetwarzanie wielu plików z katalogu:

batch_process.py
bash
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:

Całe przetwarzanie odbywa się lokalnie — treść dokumentów nigdy nie jest wysyłana na zewnętrzne serwery
Rejestr kodów zostaje na Państwa komputerze i nigdy nie jest wysyłany — ta sama granica zaufania co dokumenty źródłowe
Uwierzytelnianie kluczem API blokuje nieuprawniony dostęp we własnej instalacji
Docker działa bez uprawnień root, z minimalnymi przywilejami
Klucz API weryfikowany online przy starcie i co 6 godzin, a następnie zapamiętywany lokalnie (maksymalnie 3 dni bez sieci)

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

POST
/api/documents/upload

Wgrywanie dokumentu

Wgrywa dokument do przetworzenia. Obsługuje pliki PDF, DOCX, XLSX, PPTX oraz obrazy.

GET
/api/documents

Lista dokumentów

Zwraca wszystkie wgrane dokumenty wraz ze stanem wykrywania i anonimizacji.

GET
/api/documents/{id}

Pobieranie dokumentu

Zwraca szczegółowe informacje o wskazanym dokumencie, w tym liczbę stron i stan wykrywania.

DELETE
/api/documents/{id}

Usuwanie dokumentu

Usuwa dokument i wszystkie powiązane z nim dane z serwera.

Wykrywanie

POST
/api/documents/{id}/detect

Wykrywanie 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.

POST
/api/documents/{id}/redetect

Ponowne wykrywanie

Uruchamia wykrywanie ponownie, z pełną kontrolą parametrów. Przyjmuje confidence_threshold, regex_types, ner_types, blacklist_terms i inne.

GET
/api/documents/{id}/detection-progress

Postęp wykrywania

Zwraca postęp trwającego zadania wykrywania (procent, aktualna strona, status).

GET
/api/documents/{id}/regions

Pobieranie obszarów

Zwraca wszystkie wykryte obszary z danymi osobowymi wraz z typem, treścią, oceną pewności i prostokątem otaczającym.

PUT
/api/documents/{id}/regions/batch-action

Zbiorcza zmiana obszarów

Ustawia działanie (TOKENIZE, REMOVE lub CANCEL) dla wielu obszarów jednocześnie, z filtrowaniem po typie encji.

Anonimizacja i eksport

PUT
/api/documents/{id}/regions/sync

Synchronizacja 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ą.

POST
/api/documents/{id}/anonymize

Anonimizacja dokumentu

Pseudonimizuje dokument: zastępuje wykryte dane osobowe kodami. Zwraca przetworzony dokument.

GET
/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.

POST
/api/documents/batch-anonymize

Anonimizacja zbiorcza

Anonimizuje wiele dokumentów w jednym żądaniu: do 50 na żądanie, przetwarzanych po 3 naraz.

Odkodowanie

POST
/api/detokenize

Odkodowanie tekstu

Zamienia kody w tekście na ich pierwotne wartości z Rejestru kodów.

POST
/api/detokenize/file

Odkodowanie pliku

Przyjmuje zakodowany dokument i zwraca wersję ze wszystkimi kodami przywróconymi do pierwotnych wartości.

Rejestr kodów

GET
/api/vault/status

Stan Rejestru kodów

Zwraca statystyki Rejestru kodów: liczbę kodów, liczbę dokumentów i rozmiar rejestru.

GET
/api/vault/tokens

Lista kodów

Zwraca wszystkie przypisania kodów do wartości pierwotnych zapisane w Rejestrze kodów.

POST
/api/vault/export

Eksport Rejestru kodów

Eksportuje cały Rejestr kodów do pliku JSON na potrzeby kopii zapasowej lub migracji.

POST
/api/vault/import

Import Rejestru kodów

Importuje wcześniej wyeksportowany plik JSON z Rejestrem kodów, przywracając przypisania kodów.

Stan serwera

GET
/health

Kontrola stanu

Zwraca stan serwera. Do monitoringu i kontroli stanu w load balancerze.

Ustawienia

GET
/api/settings

Pobieranie ustawień

Zwraca aktualną konfigurację wykrywania i przetwarzania (progi, włączone etapy, język itd.).

PATCH
/api/settings

Zmiana ustawień

Zmienia częściowo globalne ustawienia wykrywania. Zmiany obowiązują we wszystkich kolejnych przebiegach.

GET
/api/settings/patterns

Lista własnych wzorców

Zwraca wszystkie zdefiniowane przez użytkownika wyrażenia regularne używane do wykrywania własnych danych osobowych.

POST
/api/settings/patterns

Tworzenie własnego wzorca

Dodaje nowe wyrażenie regularne do wykrywania danych osobowych. Wzorce działają obok reguł wbudowanych.

Przykład

cURL — Upload, Detect, Anonymize
bash
# 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/pdf

SDK 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.

Python SDK
bash
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.

400

Błędne żądanie. Nieprawidłowe parametry lub uszkodzony bądź nieobsługiwany plik.

401

Brak autoryzacji. Brakujący lub nieprawidłowy klucz API (Authorization: Bearer) w trybie klucza API.

403

Brak uprawnień. Klucz API nie ma wymaganego zakresu (detect / anonymize / detokenize).

404

Nie znaleziono. Podany identyfikator dokumentu nie istnieje.

422

Nie do przetworzenia. Brakuje wymaganego pola lub plik jest zabezpieczony hasłem.

500

Błąd serwera. Szczegóły w logach serwera.

503

Wymagany model wykrywania nie jest zainstalowany. Instalacja: promptshield models install.

Error Response Format
bash
{
  "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.