Aller au contenu
eFlyPDF

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.

En-tête
Authorization: Bearer efp_live_XXXXXXXXXXXXXXXX

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

IdentifiantOutilFamilleSortie
mergeFusionner des PDFClassiquePDF
splitDiviser un PDFClassiquePDF / ZIP
rotatePivoter un PDFClassiquePDF
delete-pagesSupprimer des pagesClassiquePDF
organizeOrganiser les pagesClassiquePDF
cropRecadrer un PDFClassiquePDF
watermarkAjouter un filigraneClassiquePDF
add-imageAjouter une imageClassiquePDF
page-numbersNuméroter les pagesClassiquePDF
signSigner un PDFClassiquePDF
editÉditer un PDFClassiquePDF
compressCompresser un PDFClassiquePDF
compress-imageCompresser une imageClassiqueJPG / PNG / WebP
ocrOCR : rendre un PDF cherchableClassiquePDF / TXT
pdf-to-wordPDF en WordClassiqueDOCX
pdf-to-excelPDF en ExcelClassiqueXLSX
pdf-to-powerpointPDF en PowerPointClassiquePPTX
pdf-to-jpgPDF en JPGClassiqueJPG / ZIP
pdf-to-pngPDF en PNGClassiquePNG / ZIP
pdf-to-textPDF en texteClassiqueTXT
word-to-pdfWord en PDFClassiquePDF
excel-to-pdfExcel en PDFClassiquePDF
powerpoint-to-pdfPowerPoint en PDFClassiquePDF
jpg-to-pdfJPG en PDFClassiquePDF
png-to-pdfPNG en PDFClassiquePDF
html-to-pdfHTML en PDFClassiquePDF
protectProtéger un PDFClassiquePDF
unlockDéverrouiller un PDFClassiquePDF
metadataMétadonnées PDFClassiquePDF
ai-chatDiscuter avec un PDFIARéponses citées / Cited answers
ai-summarizeRésumer un PDFIATexte / DOCX / PDF
ai-translateTraduire un PDFIAPDF / DOCX
ai-ocrOCR intelligentIADOCX / Markdown / PDF
ai-extractExtraire des donnéesIAXLSX / CSV / JSON
ai-fillRemplissage assistéIAPDF
ai-rewriteRéécrire et corrigerIAPDF
ai-generateGénérer un documentIAPDF

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.

Requête
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" }]
  }'
Réponse
{
  "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.

Requête
curl -X PUT "<signedUrl>" \
  -H "Content-Type: application/pdf" \
  --data-binary @rapport.pdf

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

Lancer
curl -X POST "https://eflypdf.com/api/v1/jobs/4f6c1d2e-8a0b-4c7e-9d51-2b8f0e3a9c10/start" \
  -H "Authorization: Bearer efp_live_XXXXXXXXXXXXXXXX"
Suivre
curl "https://eflypdf.com/api/v1/jobs/4f6c1d2e-8a0b-4c7e-9d51-2b8f0e3a9c10" \
  -H "Authorization: Bearer efp_live_XXXXXXXXXXXXXXXX"
Réponse
{
  "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.

Requête
curl -L "https://eflypdf.com/api/v1/jobs/4f6c1d2e-8a0b-4c7e-9d51-2b8f0e3a9c10/download" \
  -H "Authorization: Bearer efp_live_XXXXXXXXXXXXXXXX" \
  -o resultat.pdf

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

Exemple d'envoi
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"
}
Vérification (Node.js)
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.

LimiteValeur (palier Pro)
Taille maximale d'un fichier1 Go
Fichiers par traitement (lot)100 fichiers
Opérations par jourIllimité
Pages IA2 000 pages IA par mois
Traduction500 000 mots par mois
Taille d'un document pour la discussion2 000 pages
Documents ouverts en discussion10 documents
Modèle de l'assistantRapide 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.

Exemple
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 }
}