API WebFileTools
Uploadez et partagez des fichiers directement depuis vos scripts, pipelines CI/CD et workflows d'automatisation. Clé API Bearer, quota par jour, réponse JSON.
Outils disponibles côté serveur (22)
Ces outils traitent les fichiers sur le serveur. Uploadez votre fichier via /api/upload puis utilisez le lien obtenu directement dans votre workflow ou ouvrez-le dans le navigateur pour le traiter.
Partage de fichiers
Partage & Collaboration
Convertir Office en PDF
PDF — Conversion serveur
PDF vers Images
PDF — Conversion serveur
Images vers PDF
PDF — Conversion serveur
Compresser un PDF
PDF — Conversion serveur
PDF vers Texte
PDF — Conversion serveur
Réparer un PDF
PDF — Conversion serveur
Optimiser un PDF pour le web
PDF — Conversion serveur
Markdown vers PDF
PDF — Conversion serveur
OCR — Image et PDF vers texte
Images
OCR vers Markdown
Images
PDF vers Word
PDF — Conversion serveur
Partage de secret
Sécurité & Confidentialité
Partage de fichier secret
Sécurité & Confidentialité
Images vers GIF animé
Images
PDF vers Excel
PDF — Conversion serveur
PDF vers PowerPoint
PDF — Conversion serveur
Extraire images d'un PDF
PDF — Conversion serveur
HTML vers PDF
PDF — Conversion serveur
PDF vers PDF/A
PDF — Conversion serveur
Extracteur de signature email
Utilitaires
Nettoyeur de métadonnées
Sécurité & Confidentialité
Authentification
Ajoutez votre clé dans le header Authorization :
Authorization: Bearer wft_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxQuotas
| Plan | Appels / jour | Header renvoyé |
|---|---|---|
| Gratuit | 100 | X-RateLimit-Remaining: 97 |
| Pro | Illimité | — |
Dépassement → 429 Too Many Requests
POST /api/upload
Upload un fichier, retourne un lien de partage.
cURL
curl -X POST https://webfiletools.com/api/upload \
-H "Authorization: Bearer wft_VOTRE_CLE" \
-F "file=@document.pdf"Python
import requests
API_KEY = "wft_VOTRE_CLE"
with open("document.pdf", "rb") as f:
r = requests.post(
"https://webfiletools.com/api/upload",
headers={"Authorization": f"Bearer {API_KEY}"},
files={"file": f},
)
print(r.json()["url"]) # https://webfiletools.com/f/xxxxxJavaScript (Node.js)
import FormData from "form-data";
import fs from "fs";
const API_KEY = "wft_VOTRE_CLE";
const form = new FormData();
form.append("file", fs.createReadStream("document.pdf"));
const res = await fetch("https://webfiletools.com/api/upload", {
method: "POST",
headers: { Authorization: `Bearer ${API_KEY}`, ...form.getHeaders() },
body: form,
});
console.log((await res.json()).url);Réponse 201
{
"success": true,
"token": "abc123def456",
"filename": "document.pdf",
"size": 204800,
"mimeType": "application/pdf",
"expiresAt": null,
"url": "https://webfiletools.com/f/abc123def456"
}Endpoints de traitement
Ces endpoints traitent vos fichiers directement, sans interface web. Authentification par clé API requise (scope upload). Les résultats sont renvoyés en temps réel — pas de polling nécessaire.
/api/v1/process/ocr→ JSONExtrait le texte d'une image (PNG, JPG, TIFF, WebP, BMP) ou d'un PDF. Jusqu'à 30 pages.
| Paramètre | Type | Valeur par défaut |
|---|---|---|
| file | form-data (requis) | — |
| lang | string | fra+eng |
curl -X POST https://webfiletools.com/api/v1/process/ocr \
-H "Authorization: Bearer wft_VOTRE_CLE" \
-F "file=@scan.pdf" \
-F "lang=fra"{ "text": "Contenu extrait...", "pages": 3, "chars": 1842, "lang": "fra" }/api/v1/process/compress-pdf→ PDF binaireCompresse un PDF avec Ghostscript. Renvoie le PDF compressé directement en binaire.
| Paramètre | Type | Valeur par défaut |
|---|---|---|
| file | form-data (requis) | — |
| quality | screen · ebook · printer · prepress | ebook |
curl -X POST https://webfiletools.com/api/v1/process/compress-pdf \
-H "Authorization: Bearer wft_VOTRE_CLE" \
-F "file=@rapport.pdf" \
-F "quality=screen" \
-o rapport-compresse.pdfHeaders de réponse utiles : X-Original-Size, X-Compressed-Size, X-Savings-Percent
/api/v1/process/pdf-to-images→ ZIP (PNG)Convertit un PDF en images PNG dans une archive ZIP. Jusqu'à 30 pages.
| Paramètre | Type | Valeur par défaut |
|---|---|---|
| file | form-data (requis) | — |
| dpi | entier 72–300 | 150 |
curl -X POST https://webfiletools.com/api/v1/process/pdf-to-images \
-H "Authorization: Bearer wft_VOTRE_CLE" \
-F "file=@presentation.pdf" \
-F "dpi=200" \
-o images.zipHeaders de réponse : X-Page-Count, X-DPI
Workflows API
Endpoint orienté automatisation support (texte), utile pour classifier et reformuler des tickets sans upload de fichier. Authentification par clé API requise (scope read, upload ou process).
/api/workflows/support/auto→ JSON| Champ JSON | Type | Notes |
|---|---|---|
| rawLog | string (requis) | Log brut du ticket |
| ticketContext | string | Contexte libre optionnel |
| locale | fr | en | Défaut: fr |
curl -X POST https://webfiletools.com/api/workflows/support/auto \
-H "Authorization: Bearer wft_VOTRE_CLE" \
-H "Content-Type: application/json" \
-d '{
"rawLog": "ERR 500 /checkout for tenant acme; customer cannot validate cart",
"ticketContext": "Incident prioritaire B2B",
"locale": "fr"
}'{
"ok": true,
"result": {
"anonymized": "...",
"summary": "...",
"draftResponse": "...",
"stats": {
"ipv4": 2,
"ipv6": 0,
"email": 1,
"domainUser": 1,
"fqdn": 1,
"total": 5
}
}
}Headers possibles: X-RateLimit-Remaining
Recettes workflows
Tous les packs visibles sur /workflows ne disposent pas encore d'un endpoint public pour chaque etape. En revanche, plusieurs parcours peuvent deja etre partiellement automatises avec les endpoints exposes ci-dessus.
1. Support IT / MSP
API disponible pour l'etape d'anonymisation + generation de resume/reponse brouillon via /api/workflows/support/auto. L'etape de comparaison avant/apres et la finition du message restent cote web local.
2. Conformite documentaire
Automatisable aujourd'hui pour l'ingestion initiale avec /api/v1/process/ocr, puis pour une derivation visuelle via /api/v1/process/pdf-to-images ou une optimisation de sortie via /api/v1/process/compress-pdf. Les etapes de censure PDF et de conversion PDF/A restent guidees via l'interface web.
3. Partage securise multi-types
Pour un usage API, le point d'entree fiable est /api/upload pour deposer un fichier et recuperer un lien de partage. Les variantes one-time chiffrees et l'orchestration complete du secret separe restent aujourd'hui orientees interface web.
Non exposes en API publique a ce stade
Les packs Marketing social et Publication web express s'appuient surtout sur des outils navigateur 100% locaux. Ils sont excellents en auto web et assistant guide, mais il n'y a pas encore d'endpoint public dedie pour ces etapes.
Codes d'erreur
| Code | Cause | Solution |
|---|---|---|
| 201 | Succès | Lire le champ url |
| 400 | Fichier absent ou invalide | Vérifier le champ file |
| 401 | Clé absente ou invalide | Vérifier Authorization |
| 403 | Scope insuffisant | Recréer la clé avec scope upload |
| 413 | Quota stockage dépassé | Passer au plan Pro |
| 422 | Fichier refusé (antivirus) | Le fichier contient une menace |
| 429 | Quota journalier dépassé | Attendre demain ou passer Pro |
| 503 | Antivirus indisponible | Réessayer dans quelques secondes |
Exemples
Cas d'usage typiques couvrant l'upload, le traitement et l'automatisation.
Backup quotidien (bash + cron)
#!/bin/bash
DATE=$(date +%Y-%m-%d)
pg_dump mydb > backup_$DATE.sql
URL=$(curl -s -X POST https://webfiletools.com/api/upload \
-H "Authorization: Bearer wft_VOTRE_CLE" \
-F "file=@backup_$DATE.sql" | jq -r '.url')
echo "Backup dispo : $URL"Upload batch de factures PDF (Python)
import os, requests, time
API_KEY = "wft_VOTRE_CLE"
for nom in os.listdir("./factures"):
if not nom.endswith(".pdf"):
continue
with open(f"./factures/{nom}", "rb") as f:
r = requests.post(
"https://webfiletools.com/api/upload",
headers={"Authorization": f"Bearer {API_KEY}"},
files={"file": f},
)
print(f"{nom} → {r.json().get('url')}")
time.sleep(0.5)GitHub Actions — publier un artefact de build
- name: Publier l'artefact
run: |
URL=$(curl -s -X POST https://webfiletools.com/api/upload \
-H "Authorization: Bearer ${{ secrets.WFT_API_KEY }}" \
-F "file=@dist/app.zip" | jq -r '.url')
echo "Téléchargement : $URL" >> $GITHUB_STEP_SUMMARYIndexer des scans de contrats dans une base de données (Python)
OCR d'un dossier entier, stockage du texte extrait dans PostgreSQL.
import os, requests, psycopg2
API_KEY = "wft_VOTRE_CLE"
conn = psycopg2.connect("dbname=docs user=admin")
cur = conn.cursor()
for pdf in os.listdir("./contrats"):
if not pdf.endswith(".pdf"):
continue
with open(f"./contrats/{pdf}", "rb") as f:
r = requests.post(
"https://webfiletools.com/api/v1/process/ocr",
headers={"Authorization": f"Bearer {API_KEY}"},
files={"file": f},
data={"lang": "fra"},
)
text = r.json()["text"]
cur.execute("INSERT INTO contracts (filename, content) VALUES (%s, %s)", (pdf, text))
conn.commit()Extraire le texte d'une capture d'écran (Node.js)
import FormData from "form-data";
import fs from "fs";
const form = new FormData();
form.append("file", fs.createReadStream("screenshot.png"));
form.append("lang", "fra+eng");
const res = await fetch("https://webfiletools.com/api/v1/process/ocr", {
method: "POST",
headers: { Authorization: "Bearer wft_VOTRE_CLE", ...form.getHeaders() },
body: form,
});
const { text, chars } = await res.json();
console.log(`Extrait ${chars} caractères :`, text);Optimiser automatiquement les PDF avant envoi par email (Python)
Réduit le poids avant pièce jointe, affiche le taux de compression.
import requests
API_KEY = "wft_VOTRE_CLE"
with open("rapport-annuel.pdf", "rb") as f:
r = requests.post(
"https://webfiletools.com/api/v1/process/compress-pdf",
headers={"Authorization": f"Bearer {API_KEY}"},
files={"file": f},
data={"quality": "ebook"},
)
with open("rapport-compresse.pdf", "wb") as out:
out.write(r.content)
orig = int(r.headers["X-Original-Size"])
comp = int(r.headers["X-Compressed-Size"])
saved = r.headers["X-Savings-Percent"]
print(f"{orig//1024} KB → {comp//1024} KB (-{saved}%)")Pipeline de compression en lot (bash)
#!/bin/bash
for f in ./rapports/*.pdf; do
nom=$(basename "$f" .pdf)
curl -s -X POST https://webfiletools.com/api/v1/process/compress-pdf \
-H "Authorization: Bearer wft_VOTRE_CLE" \
-F "file=@$f" \
-F "quality=ebook" \
-o "./rapports-reduits/$nom-compresse.pdf"
echo "✓ $nom"
doneGénérer des miniatures de présentation (Node.js)
Convertit un PDF en PNG, extrait la première page comme miniature.
import FormData from "form-data";
import fs from "fs";
import AdmZip from "adm-zip";
const form = new FormData();
form.append("file", fs.createReadStream("slides.pdf"));
form.append("dpi", "96"); // léger pour miniatures
const res = await fetch("https://webfiletools.com/api/v1/process/pdf-to-images", {
method: "POST",
headers: { Authorization: "Bearer wft_VOTRE_CLE", ...form.getHeaders() },
body: form,
});
const zipBuf = Buffer.from(await res.arrayBuffer());
const zip = new AdmZip(zipBuf);
// Sauvegarder uniquement la page 1 comme miniature
zip.extractEntryTo("page-001.png", "./thumbs", false, true);
console.log(`Pages totales : ${res.headers.get("X-Page-Count")}`);Automatisation Make / n8n (cURL)
Dans un nœud HTTP de n8n ou Make, appelez directement l'endpoint.
curl -X POST https://webfiletools.com/api/v1/process/pdf-to-images \
-H "Authorization: Bearer wft_VOTRE_CLE" \
-F "file=@document.pdf" \
-F "dpi=150" \
-o pages.zip
# Décompresser les pages
unzip -o pages.zip -d ./pages/Sécurité
- ✓Ne commitez jamais votre clé dans Git — utilisez des variables d'environnement (.env ou secrets CI)
- ✓Scope minimal — activez uniquement les permissions nécessaires (ex. upload seulement)
- ✓Une clé par projet — isolez les accès — si une clé fuite, révoquez-en une sans impacter les autres
- ✓Révocation immédiate — depuis votre tableau de bord /dashboard/api-keys en quelques secondes
- ✓Surveillez le quota — vérifiez X-RateLimit-Remaining pour anticiper les blocages
Prêt à automatiser ?
Créez votre compte et obtenez votre première clé API en moins d'une minute.