Documentation API
Référence complète de l'API REST pour le moteur PromptShield auto-hébergé. Tous les endpoints sont disponibles à l'URL de votre déploiement.
URL de base
http://localhost:8000Remplacez par l'hôte et le port de votre déploiement.
Documentation API interactive
Lorsque le serveur est en cours d'exécution, visitez /docs pour une interface Swagger interactive auto-générée où vous pouvez tester chaque endpoint directement.
http://localhost:8000/docsAuthentification
L'API auto-hébergée fonctionne sur votre infrastructure. L'authentification est optionnelle et configurable via des variables d'environnement. Par défaut, l'API accepte toutes les requêtes locales.
Démarrage rapide
Lancez l'API locale en moins de 5 minutes.
Installer le package
pip install promptshield-appTélécharger un modèle de langue
python -m spacy download en_core_web_smConfigurer votre clé API
export PROMPTSHIELD_API_KEY="ps_live_your_key_here"Votre clé API est disponible dans le tableau de bord des clés API.
Démarrer le serveur
promptshield serve --port 8000Traiter votre premier document
curl -X POST http://localhost:8000/api/documents/upload \
-F "file=@contract.pdf"
# → {"id": "abc123", "filename": "contract.pdf", "pages": 5}
curl -X POST http://localhost:8000/api/documents/abc123/detect
# → {"status": "completed", "regions_count": 42}
curl -X POST http://localhost:8000/api/documents/abc123/anonymize
# → {"status": "completed", "tokens_created": 42}
curl -o contract-safe.pdf \
http://localhost:8000/api/documents/abc123/download/pdfOu lancez avec Docker (aucune installation)
docker run -e PROMPTSHIELD_API_KEY="ps_live_your_key_here" \
-p 8000:8000 -v promptshield-data:/data \
promptshield/promptshield-api:latestGuide étape par étape
Un guide complet pour configurer l'API locale et l'intégrer dans votre flux de travail.
1. Prérequis
Avant de commencer, assurez-vous d'avoir installé :
Optionnel — pour le support complet des formats :
2. Installer le SDK
Installez le package Python PromptShield. L'installation de base gère les fichiers PDF. Ajoutez l'extra office pour Word/Excel/PowerPoint.
pip install promptshield-apppip install "promptshield-app[office]"Téléchargez au moins un modèle NLP spaCy :
# English (required — at least one model)
python -m spacy download en_core_web_sm
# For better accuracy (larger model)
python -m spacy download en_core_web_lgPour d'autres langues, ajoutez le modèle correspondant :
python -m spacy download fr_core_news_sm # French
python -m spacy download de_core_news_sm # German
python -m spacy download es_core_news_sm # Spanish
python -m spacy download it_core_news_sm # Italian
python -m spacy download nl_core_news_sm # Dutch
python -m spacy download pt_core_news_sm # Portuguese3. Authentification
L'API locale utilise votre clé API PromptShield pour la validation de licence. Définissez-la comme variable d'environnement ou passez-la au démarrage du serveur.
export PROMPTSHIELD_API_KEY="ps_live_your_key_here"$env:PROMPTSHIELD_API_KEY = "ps_live_your_key_here"La clé API est validée en ligne au démarrage puis mise en cache localement pendant 35 jours, permettant au serveur de fonctionner entièrement hors ligne après le premier lancement.
4. Démarrer le serveur API
Lancez le serveur local avec une seule commande :
promptshield serve
# Starting PromptShield API server on 127.0.0.1:8000
# API docs available at http://127.0.0.1:8000/docsOptions disponibles :
| --host | Adresse de liaison (défaut : 127.0.0.1) |
| --port | Port de liaison (défaut : 8000) |
| --api-key | Clé API (alternative à la variable d'environnement) |
Une fois démarré, l'API est accessible à l'URL affichée. La documentation Swagger interactive est à /docs.
5. Déploiement Docker (Alternative)
Pour les déploiements en production, Docker offre une expérience sans installation avec toutes les dépendances incluses.
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/api/health"]
interval: 30s
volumes:
promptshield-data:Créez un fichier .env avec votre clé API :
PROMPTSHIELD_API_KEY=ps_live_your_key_hereL'image Docker inclut :
6. Flux de travail API
Le flux de traitement standard comprend 5 étapes :
Exemple complet du flux (cURL)
# 1. Upload
DOC_ID=$(curl -s -X POST http://localhost:8000/api/documents/upload \
-F "file=@contract.pdf" | python -c "import sys,json; print(json.load(sys.stdin)['id'])")
echo "Document ID: $DOC_ID"
# 2. Detect PII
curl -X POST http://localhost:8000/api/documents/$DOC_ID/detect
# → {"status": "completed", "regions_count": 42}
# 3. Review detected regions
curl http://localhost:8000/api/documents/$DOC_ID/regions | python -m json.tool
# → [{"type": "PERSON", "text": "John Smith", "score": 0.98}, ...]
# 4. Anonymize
curl -X POST http://localhost:8000/api/documents/$DOC_ID/anonymize
# → {"status": "completed", "tokens_created": 42}
# 5. Download the anonymized document
curl -o contract-safe.pdf \
http://localhost:8000/api/documents/$DOC_ID/download/pdf
echo "Done! Anonymized file saved to contract-safe.pdf"7. Commandes CLI
Traitez des documents directement depuis la ligne de commande sans démarrer de serveur :
promptshield detect invoice.pdf
# Detected 23 PII entities across 5 pages
promptshield detect invoice.pdf -o report.json
# Report saved to report.jsonpromptshield anonymize contract.pdf -o contract-safe.pdf
# Anonymized: 42 tokens created, saved to contract-safe.pdfpromptshield detokenize contract-safe.pdf -o contract-restored.pdf
# Restored 42 tokens, saved to contract-restored.pdfToutes les commandes CLI valident votre clé API et traitent les documents localement. Aucune donnée ne quitte votre machine.
8. SDK Python (Import direct)
Pour les intégrations avancées, importez les modules core directement dans votre code Python. Cela vous donne le contrôle total sur chaque étape du traitement.
import asyncio
from pathlib import Path
from promptshield import ingest_document, detect_pii_on_page, anonymize_document
async def process(input_path: str, output_path: str):
# Step 1 — Ingest document
doc = await ingest_document(input_path, Path(input_path).name)
print(f"Loaded: {doc.filename} ({len(doc.pages)} pages)")
# Step 2 — Detect PII
total_entities = 0
for page in doc.pages:
regions = detect_pii_on_page(page)
total_entities += len(regions)
print(f" Page {page.number}: {len(regions)} entities found")
print(f"Total PII entities: {total_entities}")
# Step 3 — Anonymize
result = await anonymize_document(doc)
print(f"Anonymized: {result.tokens_created} tokens created")
# Save the result
with open(output_path, "wb") as f:
f.write(result.content)
print(f"Saved to {output_path}")
asyncio.run(process("contract.pdf", "contract-safe.pdf"))Exemple de traitement par lots
Traiter plusieurs fichiers dans un répertoire :
import asyncio
from pathlib import Path
from promptshield import ingest_document, detect_pii_on_page, anonymize_document
async 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}")
doc = await ingest_document(str(file), file.name)
for page in doc.pages:
detect_pii_on_page(page)
result = await anonymize_document(doc)
out_file = output_path / f"anon_{file.name}"
with open(out_file, "wb") as f:
f.write(result.content)
print(f" → {result.tokens_created} tokens, saved to {out_file.name}")
print("Batch complete!")
asyncio.run(batch_process("./documents", "./anonymized"))9. Sécurité & Confidentialité
PromptShield est conçu pour les environnements zero-trust :
10. Dépannage
Problèmes courants et solutions :
Erreur 'No spaCy model found'
Installez au moins un modèle : python -m spacy download en_core_web_sm
L'OCR ne fonctionne pas sur les PDF scannés
Installez Tesseract OCR et assurez-vous qu'il est dans votre PATH. Sur Windows, l'installateur l'ajoute automatiquement.
Échec de conversion des fichiers Office
Installez LibreOffice. DOCX a un fallback Python pur, mais XLSX/PPTX nécessitent LibreOffice.
'Invalid API key' au démarrage
Vérifiez que votre clé commence par ps_live_ et que votre abonnement est actif. Les clés sont gérables à /developers/api-keys.
Documents
/api/documents/uploadUploader un document
Uploadez un document pour traitement. Supporte les fichiers PDF, DOCX, XLSX, PPTX et images.
/api/documentsLister les documents
Récupérez tous les documents uploadés avec leur statut de détection et d'anonymisation.
/api/documents/{id}Obtenir un document
Obtenez les informations détaillées d'un document spécifique, y compris le nombre de pages et le statut de détection.
/api/documents/{id}Supprimer un document
Supprimez un document et toutes les données associées du serveur.
Détection
/api/documents/{id}/detectDétecter les DCP
Exécutez le pipeline de détection de DCP sur un document. Combine regex, NER et couches LLM optionnelles.
/api/documents/{id}/regionsObtenir les régions
Récupérez toutes les régions de DCP détectées pour un document avec type, texte, score de confiance et boîte englobante.
Anonymisation & Export
/api/documents/{id}/anonymizeAnonymiser un document
Anonymisez un document en remplaçant les DCP détectées par des codes. Retourne le document traité.
/api/documents/{id}/download/{type}Télécharger le document anonymisé
Téléchargez la version anonymisée d'un document en PDF, DOCX ou XLSX.
/api/documents/batch-anonymizeAnonymisation par lots
Anonymisez plusieurs documents en une seule requête. Jusqu'à 50 documents traités simultanément.
Décodage
/api/detokenizeDécoder du texte
Remplacez les codes dans une chaîne de texte par leurs valeurs originales depuis le coffre.
/api/detokenize/fileDécoder un fichier
Uploadez un document encodé et recevez une version avec tous les codes restaurés à leurs valeurs originales.
Coffre & Registre de codes
/api/vault/statusStatut du coffre
Obtenez les statistiques du coffre : total de codes, total de documents, taille du registre.
/api/vault/tokensLister les codes
Récupérez toutes les correspondances code-original stockées dans le coffre.
/api/vault/exportExporter le coffre
Exportez l'intégralité du coffre en fichier JSON pour sauvegarde ou migration.
/api/vault/importImporter le coffre
Importez un JSON de coffre précédemment exporté pour restaurer les correspondances de codes.
Santé
/api/healthVérification de santé
Retourne le statut de santé du serveur. À utiliser pour la surveillance et les sondes de santé du load balancer.
Exemple
# 1. Upload a document
curl -X POST http://localhost:8000/api/documents/upload \
-F "file=@contract.pdf"
# → {"id": "abc123", "filename": "contract.pdf", "pages": 5}
# 2. Run PII detection
curl -X POST http://localhost:8000/api/documents/abc123/detect
# → {"status": "completed", "regions_count": 42}
# 3. Get detected regions
curl http://localhost:8000/api/documents/abc123/regions
# → [{"type": "PERSON", "text": "John Smith", "score": 0.98, ...}, ...]
# 4. Anonymize the document
curl -X POST http://localhost:8000/api/documents/abc123/anonymize
# → {"status": "completed", "tokens_created": 42}
# 5. Download anonymized PDF
curl -o contract-safe.pdf \
http://localhost:8000/api/documents/abc123/download/pdfSDK Python
Utilisez le moteur directement dans votre code Python pour une flexibilité maximale.
import asyncio
from promptshield import ingest_document, detect_pii_on_page, anonymize_document
async def process(path: str):
# Ingérer un document
doc = await ingest_document(path, "contract.pdf")
# Détecter les DCP sur chaque page
for page in doc.pages:
regions = detect_pii_on_page(page)
print(f"Page {page.number}: {len(regions)} entities")
# Anonymiser le document
result = await anonymize_document(doc)
print(f"Done: {result.tokens_created} tokens")
asyncio.run(process("contract.pdf"))Gestion des erreurs
Toutes les réponses d'erreur suivent un format JSON standard avec un champ detail décrivant l'erreur.
Requête invalide — paramètres ou format de fichier incorrect
Non trouvé — l'ID du document n'existe pas
Erreur de validation — champs requis manquants
Erreur serveur — consultez les logs pour les détails
{
"detail": "Document not found: abc123"
}Limites de débit
L'API auto-hébergée n'a pas de limites de débit par défaut. Vous pouvez configurer la limitation via des variables d'environnement si nécessaire.