Documentazione API
Riferimento completo dell'API REST per il motore self-hosted di promptShield. Tutti gli endpoint sono disponibili all'URL del tuo deployment.
URL di base
http://localhost:8000Sostituiscilo con l'host e la porta del tuo deployment.
Documentazione API interattiva
Quando il server è in esecuzione, visita /docs per un'interfaccia Swagger interattiva generata automaticamente, dove puoi testare direttamente ogni endpoint.
PROMPTSHIELD_DEBUG_API_DOCS=1 promptshield serveIn API-key mode, /docs, /openapi.json, and /redoc require Authorization: Bearer <api-key>.
Autenticazione
Quando PROMPTSHIELD_API_KEY è impostata (tramite promptshield serve --api-key o la variabile d'ambiente di Docker), ogni richiesta deve fornirla come Authorization: Bearer <api-key>; le chiavi mancanti o errate ricevono 401, e una chiave con accesso limitato solo ad alcune operazioni riceve 403 sulle altre. L'endpoint /health è sempre esente. Se non è impostata alcuna chiave API, il server funziona senza autenticazione e accetta tutte le richieste — adatto solo su una rete locale attendibile.
Avvio rapido
Avvia l'API locale in meno di 5 minuti.
Installa il pacchetto
pip install promptshield-appInstalla un modello linguistico
export PROMPTSHIELD_ASSETS_DIR="$HOME/.local/share/promptshield/assets"
promptshield models install spacy-en-mdImposta la tua chiave API
export PROMPTSHIELD_API_KEY="ps_live_your_key_here"La tua chiave API è disponibile nella dashboard delle chiavi API.
Avvia il server
promptshield serve --port 8000Elabora il tuo primo documento
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": "REVIEWING"}
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/pdfOppure avvialo con Docker (nessuna installazione)
docker run -e PROMPTSHIELD_API_KEY="ps_live_your_key_here" \
-p 8000:8000 -v promptshield-data:/data \
promptshield/promptshield-api:latestGuida passo passo
Una guida completa per configurare l'API locale e integrarla nel tuo flusso di lavoro.
1. Prerequisiti
Prima di iniziare, assicurati di avere installato quanto segue:
Facoltativo, per il supporto completo dei formati:
2. Installa l'SDK
Installa il pacchetto Python di promptShield. L'installazione di base gestisce i file PDF. Aggiungi l'extra office per Word/Excel/PowerPoint.
pip install promptshield-apppip install "promptshield-app[office]"Installa i modelli linguistici (pacchetti di entità) tramite la CLI:
# 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-lgInstalla pacchetti linguistici aggiuntivi nello stesso modo:
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. Autenticazione
L'API locale usa la tua chiave API promptShield per la convalida della licenza. Impostala come variabile d'ambiente o passala all'avvio del server.
export PROMPTSHIELD_API_KEY="ps_live_your_key_here"$env:PROMPTSHIELD_API_KEY = "ps_live_your_key_here"La chiave API viene convalidata online all'avvio e poi memorizzata in cache in locale per un massimo di 35 giorni, così il server può funzionare completamente offline dopo il primo avvio.
4. Avvia il server API
Avvia il server locale con un solo comando:
promptshield serve
# Starting promptShield API server on 127.0.0.1:8000
# Health endpoint: http://127.0.0.1:8000/health
# Docs: enable with PROMPTSHIELD_DEBUG_API_DOCS=1 in non-API-key modeOpzioni disponibili:
| --host | Indirizzo di binding (predefinito: 127.0.0.1) |
| --port | Porta di binding (predefinita: 8000) |
| --api-key | Chiave API (alternativa alla variabile d'ambiente) |
Una volta avviato, l'API è disponibile all'URL visualizzato. La documentazione Swagger interattiva si trova su /docs.
5. Deployment con Docker (alternativa)
Per i deployment in produzione, Docker offre un'esperienza senza installazione con tutte le dipendenze incluse.
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:Crea un file .env con la tua chiave API:
PROMPTSHIELD_API_KEY=ps_live_your_key_hereL'immagine Docker include:
6. Flusso di lavoro dell'API
Il flusso di lavoro standard di elaborazione dei documenti ha 5 passaggi:
Esempio completo del flusso di lavoro (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. Comandi della CLI
Elabora i documenti direttamente dalla riga di comando senza avviare un server:
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.pdfTutti i comandi della CLI convalidano la tua chiave API ed elaborano i documenti in locale. Nessun dato lascia il tuo dispositivo.
Componenti aggiuntivi dei modelli
Usa il comando integrato models per sfogliare, installare e rimuovere i pacchetti linguistici di entità. Imposta PROMPTSHIELD_ASSETS_DIR così che sia la CLI sia il server in esecuzione li trovino.
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-mdI pacchetti installati vengono rilevati automaticamente da detect, anonymize e dal server API in esecuzione. Il comando install comunica direttamente con il server delle licenze — non è necessario alcun sidecar in esecuzione.
8. Espressioni personalizzate
I pattern e le entità integrati coprono la maggior parte dei dati sensibili, ma ogni organizzazione ha i propri identificatori — numeri di contratto, codici di progetto interni, codici fiscali, indicatori di riservatezza. Aggiungili come espressioni e vengono trattati come dati sensibili a tutti gli effetti, segnalati come tipo CUSTOM con riquadro di delimitazione completo + propagazione tra le pagine. Disponibile sulla CLI (-e / --expression), sull'API HTTP self-hosted (blacklist_terms) e tramite i preset di 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.psreviewSulla denominazione: expressions è ora il nome canonico su tutte e tre le superfici — CLI (-e / --expression), API HTTP (expressions / expressions_action / expressions_fuzziness) ed etichetta dell'interfaccia desktop. Le vecchie chiavi blacklist_terms / blacklist_action / blacklist_fuzziness sull'API HTTP funzionano ancora tramite un alias Pydantic per la retrocompatibilità, così le integrazioni esistenti continuano a funzionare.
Flusso di revisione: API → Desktop
Il rilevamento automatico su larga scala è solo metà della storia. Il rilevamento automatico non raggiunge mai una precisione del 100% — ci sono sempre falsi positivi da scartare ed entità mancate da aggiungere. promptShield chiude il cerchio con un bundle .psreview portatile: rileva in modo programmatico, importa nell'app desktop per un controllo qualità umano e visivo, poi anonimizza.
Passaggio 1a — Rileva ed esporta (CLI, in un colpo solo)
# 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))Passaggio 1b — Rileva ed esporta (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-reviewEsporta il bundle di revisione
Scarica il documento e tutte le sue annotazioni delle aree come un bundle ZIP .psreview portatile.
/api/documents/import-reviewImporta il bundle di revisione
Carica un bundle .psreview. Estrae il documento (esegue l'OCR), inietta le annotazioni delle aree salvate e apre il documento in stato REVIEWING — pronto per il controllo qualità visivo senza rieseguire il rilevamento.
Passaggio 2 — Importa nell'app desktop
Apri l'app desktop di promptShield. Nella schermata di caricamento, clicca su Importa per la revisione e seleziona il file .psreview. Il documento si apre subito in modalità revisione — tutte le aree rilevate sono già precompilate, senza bisogno di alcun passaggio di rilevamento.
Passaggio 3 — Rivedi, modifica e anonimizza
Usa la barra laterale delle aree per scartare i falsi positivi (imposta l'azione su Annulla), disegna nuove aree per ciò che il modello ha mancato, poi clicca su Esporta. L'app desktop esegue l'anonimizzazione e salva il PDF oscurato nella tua cartella Download.
8. SDK Python (importazione diretta)
Per le integrazioni avanzate, importa i moduli principali direttamente nel tuo codice Python. Questo ti dà il pieno controllo su ogni fase di elaborazione.
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.adetokenizeEsempio di elaborazione in blocco
Elabora più file in una directory:
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. Sicurezza e privacy dei dati
promptShield è progettato per ambienti a fiducia zero:
10. Risoluzione dei problemi
Problemi comuni e soluzioni:
Errore 'No spaCy model found' o 'no NER model loaded'
Imposta PROMPTSHIELD_ASSETS_DIR e installa un pacchetto: promptshield models install spacy-en-md. In alternativa, per un'installazione a livello di sistema: python -m spacy download en_core_web_sm
L'OCR non funziona sui PDF scansionati
Installa Tesseract OCR e assicurati che sia nel tuo PATH. Su Windows, il programma di installazione lo aggiunge automaticamente.
I file Office non si convertono
Installa LibreOffice. DOCX dispone di un fallback in puro Python, ma XLSX/PPTX richiedono LibreOffice.
'Invalid API key' all'avvio
Verifica che la tua chiave inizi con ps_live_ e che il tuo abbonamento sia attivo. Le chiavi possono essere gestite su /developers/api-keys.
Documenti
/api/documents/uploadCarica un documento
Carica un documento per l'elaborazione. Supporta file PDF, DOCX, XLSX, PPTX e immagini.
/api/documentsElenca i documenti
Recupera tutti i documenti caricati con il loro stato di rilevamento e anonimizzazione.
/api/documents/{id}Ottieni un documento
Ottieni informazioni dettagliate su un documento specifico, compresi il numero di pagine e lo stato di rilevamento.
/api/documents/{id}Elimina un documento
Rimuovi un documento e tutti i dati associati dal server.
Rilevamento
/api/documents/{id}/detectRileva i dati sensibili
Esegui la pipeline di rilevamento dei dati sensibili su un documento. Accetta un corpo JSON facoltativo per sovrascrivere le impostazioni di rilevamento (confidence_threshold, regex_enabled, ner_enabled, regex_types, ecc.) solo per questa esecuzione.
/api/documents/{id}/redetectRiesegui il rilevamento
Riesegui il rilevamento con il pieno controllo dei parametri. Accetta confidence_threshold, regex_types, ner_types, blacklist_terms e altro ancora.
/api/documents/{id}/detection-progressAvanzamento del rilevamento
Ottieni l'avanzamento di un processo di rilevamento in corso (percentuale, pagina corrente e stato).
/api/documents/{id}/regionsOttieni le aree
Recupera tutte le aree di dati sensibili rilevate per un documento, con tipo, testo, punteggio di affidabilità e riquadro di delimitazione.
/api/documents/{id}/regions/batch-actionAggiornamento in blocco delle aree
Imposta l'azione (TOKENIZE, REMOVE o CANCEL) per più aree contemporaneamente, filtrate per tipo di entità.
Anonimizzazione ed esportazione
/api/documents/{id}/regions/syncSincronizza le aree
Sostituisci interamente l'elenco delle aree di un documento. Da usare dopo aver modificato le aree lato client per inviare le modifiche prima dell'anonimizzazione.
/api/documents/{id}/anonymizeAnonimizza un documento
Anonimizza un documento sostituendo i dati sensibili rilevati con codici. Restituisce il documento elaborato.
/api/documents/{id}/download/{type}Scarica il documento anonimizzato
Scarica l'output anonimizzato. {type} vale 'pdf' o 'text'. L'output viene sempre reso come PDF (gli input non PDF vengono convertiti), quindi 'pdf' è il formato principale.
/api/documents/batch-anonymizeAnonimizzazione in blocco
Anonimizza più documenti in un'unica richiesta. Fino a 50 documenti elaborati contemporaneamente.
Decodifica
/api/detokenizeDecodifica del testo
Sostituisci i codici in una stringa di testo con i loro valori originali presi dal registro.
/api/detokenize/fileDecodifica di un file
Carica un documento codificato e ricevi una versione con tutti i codici ripristinati ai valori originali.
Registro dei codici
/api/vault/statusStato del registro
Ottieni le statistiche del registro: totale dei codici, totale dei documenti, dimensione del registro.
/api/vault/tokensElenca i codici
Recupera tutte le corrispondenze codice-originale conservate nel registro.
/api/vault/exportEsporta il registro
Esporta l'intero registro come file JSON per il backup o la migrazione.
/api/vault/importImporta il registro
Importa un registro JSON esportato in precedenza per ripristinare le corrispondenze tra codici.
Stato
/healthControllo dello stato
Restituisce lo stato di salute del server. Da usare per il monitoraggio e per le sonde di stato del load balancer.
Impostazioni
/api/settingsOttieni le impostazioni
Recupera la configurazione attuale di rilevamento ed elaborazione (soglie, pipeline attivate, lingua, ecc.).
/api/settingsAggiorna le impostazioni
Aggiorna parzialmente le impostazioni globali di rilevamento. Le modifiche si applicano a tutte le esecuzioni di rilevamento successive.
/api/settings/patternsElenca i pattern personalizzati
Ottieni tutti i pattern regex definiti dall'utente usati per il rilevamento personalizzato dei dati sensibili.
/api/settings/patternsCrea un pattern personalizzato
Aggiungi un nuovo pattern regex per il rilevamento dei dati sensibili. I pattern vengono valutati insieme alle regole integrate.
Esempio
# 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": "REVIEWING"}
# 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 Python
La classe PromptShield esegue l'intera pipeline in locale — rileva, anonimizza e decodifica in tre chiamate. Tutta l'elaborazione avviene sul tuo dispositivo; nessun dato lo lascia.
from promptshield import PromptShield
ps = PromptShield()
# Rileva i dati sensibili
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']}")
# Anonimizza (tokenizzazione reversibile)
out = ps.anonymize("contract.pdf", "contract-safe.pdf")
print(f"Done: {out.tokens_created} tokens created")
# Ripristina i valori originali
restored = ps.detokenize("contract-safe.pdf", "contract-restored.pdf")
print(f"Restored {restored.tokens_replaced} tokens")Gestione degli errori
Tutte le risposte di errore seguono un formato JSON standard con un campo detail che descrive l'errore.
Richiesta non valida. Parametri non validi o file corrotto / non supportato.
Non autorizzato. Chiave API mancante o non valida (Authorization: Bearer) in modalità chiave API.
Vietato. La chiave API non dispone dell'ambito richiesto (detect / anonymize / detokenize).
Non trovato. L'ID del documento non esiste.
Non elaborabile. Manca un campo obbligatorio oppure il file è protetto da password.
Errore del server. Controlla i log del server per i dettagli.
Un modello di rilevamento richiesto non è installato. Installalo con promptshield models install.
{
"detail": "Document not found: abc123"
}Limiti di frequenza
L'API self-hosted non ha limiti di frequenza per impostazione predefinita. Se necessario, puoi configurare la limitazione della frequenza tramite variabili d'ambiente.