Développeurs
API ProRéservé au palier Pro
Les mêmes outils que sur le site, pilotés depuis votre code. L'API est incluse dans le palier Pro et partage les quotas de votre compte.
Version 1 de l'API, en cours d'ouverture : les points d'entrée décrits ici sont stables dans leur principe, mais des détails peuvent encore évoluer. Les changements seront annoncés sur cette page.
L'API Pro vous donne accès aux mêmes outils que le site : conversions, compression, OCR, fusion, et les fonctions de l'assistant IA. Une tâche se déroule toujours en quatre temps : vous la créez, vous téléversez les fichiers, vous la lancez, puis vous récupérez le résultat (par interrogation ou par webhook).
Toutes les requêtes passent en HTTPS et renvoient du JSON. Les fichiers ne transitent jamais par l'API elle-même : ils sont envoyés directement au stockage privé via des URL signées à courte durée de vie.
Authentification
Créez une clé depuis votre espace compte (rubrique API). Elle commence par efp_live_ et n'est affichée qu'une seule fois : nous n'en conservons qu'une empreinte. Envoyez-la dans l'en-tête Authorization de chaque requête.
Traitez cette clé comme un mot de passe : jamais dans du code côté navigateur, jamais dans un dépôt public. Vous pouvez la révoquer à tout moment ; une clé révoquée cesse de fonctionner immédiatement.
Authorization: Bearer efp_live_XXXXXXXXXXXXXXXXOutils disponibles
Chaque outil est désigné par son identifiant, le même que dans notre registre. Les outils qui s'exécutent dans le navigateur sur le site sont exécutés sur nos serveurs lorsqu'ils sont appelés par l'API. Les paramètres de chaque outil reprennent les options de sa page.
| Identifiant | Outil | Famille | Sortie |
|---|---|---|---|
| merge | Fusionner des PDF | Classique | |
| split | Diviser un PDF | Classique | PDF / ZIP |
| rotate | Pivoter un PDF | Classique | |
| delete-pages | Supprimer des pages | Classique | |
| organize | Organiser les pages | Classique | |
| crop | Recadrer un PDF | Classique | |
| watermark | Ajouter un filigrane | Classique | |
| add-image | Ajouter une image | Classique | |
| page-numbers | Numéroter les pages | Classique | |
| sign | Signer un PDF | Classique | |
| edit | Éditer un PDF | Classique | |
| compress | Compresser un PDF | Classique | |
| compress-image | Compresser une image | Classique | JPG / PNG / WebP |
| ocr | OCR : rendre un PDF cherchable | Classique | PDF / TXT |
| pdf-to-word | PDF en Word | Classique | DOCX |
| pdf-to-excel | PDF en Excel | Classique | XLSX |
| pdf-to-powerpoint | PDF en PowerPoint | Classique | PPTX |
| pdf-to-jpg | PDF en JPG | Classique | JPG / ZIP |
| pdf-to-png | PDF en PNG | Classique | PNG / ZIP |
| pdf-to-text | PDF en texte | Classique | TXT |
| word-to-pdf | Word en PDF | Classique | |
| excel-to-pdf | Excel en PDF | Classique | |
| powerpoint-to-pdf | PowerPoint en PDF | Classique | |
| jpg-to-pdf | JPG en PDF | Classique | |
| png-to-pdf | PNG en PDF | Classique | |
| html-to-pdf | HTML en PDF | Classique | |
| protect | Protéger un PDF | Classique | |
| unlock | Déverrouiller un PDF | Classique | |
| metadata | Métadonnées PDF | Classique | |
| ai-chat | Discuter avec un PDF | IA | Réponses citées / Cited answers |
| ai-summarize | Résumer un PDF | IA | Texte / DOCX / PDF |
| ai-translate | Traduire un PDF | IA | PDF / DOCX |
| ai-ocr | OCR intelligent | IA | DOCX / Markdown / PDF |
| ai-extract | Extraire des données | IA | XLSX / CSV / JSON |
| ai-fill | Remplissage assisté | IA | |
| ai-rewrite | Réécrire et corriger | IA | |
| ai-generate | Générer un document | IA |
Créer une tâche
Déclarez l'outil, ses paramètres et la liste des fichiers (nom, taille en octets, type MIME). Les limites de votre compte sont vérifiées à ce moment-là : en cas de dépassement, la réponse explique la limite atteinte. Le quota n'est définitivement consommé que si la tâche aboutit.
curl -X POST "https://eflypdf.com/api/v1/jobs" \
-H "Authorization: Bearer efp_live_XXXXXXXXXXXXXXXX" \
-H "Content-Type: application/json" \
-d '{
"tool": "compress",
"params": { "mode": "recommended" },
"files": [{ "name": "rapport.pdf", "size": 2483021, "mime": "application/pdf" }]
}'{
"jobId": "4f6c1d2e-8a0b-4c7e-9d51-2b8f0e3a9c10",
"uploads": [
{ "path": "…/4f6c1d2e…/0-rapport.pdf", "signedUrl": "https://…", "token": "…" }
]
}Téléverser les fichiers
Envoyez chaque fichier sur l'URL signée correspondante, dans l'ordre de la liste. Ces URL expirent rapidement : téléversez juste après la création. Chaque fichier est analysé par un antivirus avant traitement.
curl -X PUT "<signedUrl>" \
-H "Content-Type: application/pdf" \
--data-binary @rapport.pdfLancer et suivre la tâche
Une fois les fichiers téléversés, lancez la tâche. Elle passe par les états queued, running, puis succeeded ou failed. Interrogez-la à intervalle raisonnable (toutes les 2 à 5 secondes) ou, mieux, abonnez-vous aux webhooks.
Les tâches de l'API bénéficient de la priorité haute du palier Pro dans la file d'attente.
curl -X POST "https://eflypdf.com/api/v1/jobs/4f6c1d2e-8a0b-4c7e-9d51-2b8f0e3a9c10/start" \
-H "Authorization: Bearer efp_live_XXXXXXXXXXXXXXXX"curl "https://eflypdf.com/api/v1/jobs/4f6c1d2e-8a0b-4c7e-9d51-2b8f0e3a9c10" \
-H "Authorization: Bearer efp_live_XXXXXXXXXXXXXXXX"{
"id": "4f6c1d2e-8a0b-4c7e-9d51-2b8f0e3a9c10",
"tool": "compress",
"status": "succeeded",
"progress": 100,
"error": null,
"expiresAt": "2026-10-21T15:00:00Z"
}Télécharger le résultat
Le point d'entrée de téléchargement répond par une redirection vers une URL signée temporaire. Le résultat reste disponible pendant la durée de conservation de votre palier, puis il est supprimé automatiquement avec les fichiers sources.
curl -L "https://eflypdf.com/api/v1/jobs/4f6c1d2e-8a0b-4c7e-9d51-2b8f0e3a9c10/download" \
-H "Authorization: Bearer efp_live_XXXXXXXXXXXXXXXX" \
-o resultat.pdfWebhooks signés
Déclarez une URL HTTPS dans votre espace compte et choisissez les événements (job.done, job.failed). Chaque envoi porte l'en-tête X-Signature : t est l'horodatage Unix, v1 la signature HMAC-SHA256, en hexadécimal, de la chaîne « t.corps_brut » calculée avec le secret du webhook.
Vérifiez toujours la signature et rejetez les messages trop anciens. Répondez par un code 2xx en moins de 10 secondes ; en cas d'échec, l'envoi est retenté plusieurs fois avec un délai croissant. Un même événement peut arriver deux fois : dédoublonnez sur son identifiant.
POST https://votre-serveur.example/webhooks
X-Signature: t=1792335600,v1=5f2b…c9e1
Content-Type: application/json
{
"event": "job.done",
"jobId": "4f6c1d2e-8a0b-4c7e-9d51-2b8f0e3a9c10",
"tool": "compress",
"status": "done",
"errorCode": null,
"createdAt": "2026-10-19T15:00:00Z"
}import { createHmac, timingSafeEqual } from "node:crypto";
export function verify(rawBody: string, header: string, secret: string, toleranceSec = 300) {
const parts = Object.fromEntries(header.split(",").map((p) => p.split("=")));
const t = Number(parts.t);
if (!t || Math.abs(Date.now() / 1000 - t) > toleranceSec) return false;
const expected = createHmac("sha256", secret).update(`${t}.${rawBody}`).digest("hex");
const given = Buffer.from(parts.v1 ?? "", "hex");
return given.length === 32 && timingSafeEqual(given, Buffer.from(expected, "hex"));
}Quotas et limites
L'API ne dispose pas d'un quota séparé : elle consomme exactement les mêmes compteurs que votre compte Pro sur le site (pages IA, mots de traduction, taille des fichiers, lots). Les valeurs ci-dessous sont lues dans notre configuration en vigueur.
Une limitation de débit protège le service : au-delà du nombre de requêtes autorisé par minute, la réponse est 429. Attendez quelques secondes avant de réessayer.
| Limite | Valeur (palier Pro) |
|---|---|
| Taille maximale d'un fichier | 1 Go |
| Fichiers par traitement (lot) | 100 fichiers |
| Opérations par jour | Illimité |
| Pages IA | 2 000 pages IA par mois |
| Traduction | 500 000 mots par mois |
| Taille d'un document pour la discussion | 2 000 pages |
| Documents ouverts en discussion | 10 documents |
| Modèle de l'assistant | Rapide ou supérieur (×20 pages IA) |
| Requêtes par minute (par compte) | 120 |
Erreurs
Les erreurs suivent les codes HTTP usuels : 400 (requête invalide), 401 (clé absente ou révoquée), 402 (limite de palier atteinte), 404 (tâche inconnue), 429 (débit ou quota du jour), 503 (assistant temporairement indisponible : rien n'est décompté). Les refus de limite portent un code explicite.
HTTP/1.1 402 Payment Required
{
"error": "limit",
"refused": { "code": "AI_PAGES_EXHAUSTED", "max": 2000, "current": 2000, "resetAt": "2026-11-03T00:00:00Z", "upgradeTo": null }
}