REST API v1
Documentation API iPDF
Intégrez la puissance d'iPDF dans vos applications : fusion, compression, conversion et IA sur vos PDFs, en quelques lignes de code.
⚡ 18 endpoints
🔑 Clé API Bearer
📄 multipart/form-data
🔢 1 000 appels/mois
Démarrage rapide
Appelez l'API iPDF en 3 étapes simples.
1
Obtenez un plan Business
Les clés API sont réservées au plan Business . Voir les tarifs →
2
Créez votre clé API
Dans votre tableau de bord , section « Mes clés API », cliquez sur + Créer une nouvelle clé . Copiez-la immédiatement — elle ne sera plus affichée.
3
Faites votre premier appel
curl -X POST https://ipdf.dougster.fr/v1/compress \
-H "Authorization: Bearer ipdf_votre_cle_ici" \
-F "file=@mon_document.pdf" \
--output document_compresse.pdf
Copier
Authentification
Toutes les requêtes à /v1/* doivent inclure votre clé API dans l'en-tête HTTP Authorization :
Authorization: Bearer ipdf_xxxxxxxxxxxxxxxxxxxx
Copier
🔒
Confidentialité absolue : ne partagez jamais votre clé API dans du code public, des dépôts Git, ou des messages. Toute personne en possession de votre clé peut consommer vos crédits. En cas de compromission, révoquez-la immédiatement depuis votre tableau de bord et créez-en une nouvelle.
Exemple avec variable d'environnement
cURL
Python
JavaScript
export IPDF_API_KEY="ipdf_votre_cle_ici"
curl -X POST https://ipdf.dougster.fr/v1/compress \
-H "Authorization: Bearer $IPDF_API_KEY" \
-F "file=@document.pdf" \
--output result.pdfCopier
import os, requests
API_KEY = os.environ["IPDF_API_KEY"]
HEADERS = {"Authorization": f"Bearer {API_KEY}"}
BASE = "https://ipdf.dougster.fr/v1"
with open("document.pdf", "rb") as f:
r = requests.post(f"{BASE}/compress",
headers=HEADERS, files={"file": f})
r.raise_for_status()
open("result.pdf", "wb").write(r.content)Copier
import fs from "fs";
import fetch from "node-fetch";
import FormData from "form-data";
const API_KEY = process.env.IPDF_API_KEY;
const BASE = "https://ipdf.dougster.fr/v1";
const fd = new FormData();
fd.append("file", fs.createReadStream("document.pdf"));
const res = await fetch(`${BASE}/compress`, {
method: "POST",
headers: { Authorization: `Bearer ${API_KEY}`, ...fd.getHeaders() },
body: fd,
});
fs.writeFileSync("result.pdf", Buffer.from(await res.arrayBuffer()));Copier
Quotas & limites
50 Mo
taille max par fichier
00:00 UTC
réinitialisation mensuelle
Chaque réponse inclut les en-têtes suivants :
X-RateLimit-Limit: 1000
X-RateLimit-Remaining: 847
X-RateLimit-Reset: 2026-05-01T00:00:00Z
Copier
Codes d'erreur
Toutes les erreurs retournent {"detail": "message"} en JSON.
Code HTTP Signification Exemple de detail
400 Requête invalide (fichier manquant, format incorrect) No PDF file uploaded
401 Clé API absente, invalide ou révoquée Invalid or missing API key
402 Quota mensuel épuisé Monthly quota exceeded
403 Accès refusé (plan insuffisant) API access requires Business plan
429 Trop de requêtes simultanées Too many requests
500 Erreur interne du serveur Internal server error
Outils PDF
Paramètres (multipart/form-data)
Nom Type Requis Description
files file[] Requis 2 fichiers PDF minimum (champ répété)
Réponse PDF fusionné (application/pdf).
cURL
Python
JavaScript
curl -X POST https://ipdf.dougster.fr/v1/merge \
-H "Authorization: Bearer $IPDF_API_KEY" \
-F "files=@doc1.pdf" \
-F "files=@doc2.pdf" \
-F "files=@doc3.pdf" \
--output merged.pdfCopier
import requests, os
r = requests.post(
"https://ipdf.dougster.fr/v1/merge",
headers={"Authorization": f"Bearer {os.environ['IPDF_API_KEY']}"},
files=[
("files", open("doc1.pdf", "rb")),
("files", open("doc2.pdf", "rb")),
("files", open("doc3.pdf", "rb")),
]
)
r.raise_for_status()
open("merged.pdf", "wb").write(r.content)Copier
import fs from "fs"; import fetch from "node-fetch"; import FormData from "form-data";
const fd = new FormData();
["doc1.pdf","doc2.pdf","doc3.pdf"].forEach(f => fd.append("files", fs.createReadStream(f)));
const res = await fetch("https://ipdf.dougster.fr/v1/merge", {
method: "POST",
headers: { Authorization: `Bearer ${process.env.IPDF_API_KEY}`, ...fd.getHeaders() },
body: fd,
});
fs.writeFileSync("merged.pdf", Buffer.from(await res.arrayBuffer()));Copier
Paramètres (multipart/form-data)
Nom Type Requis Description
file file Requis Fichier PDF à séparer
ranges string Optionnel Plages de pages ex: 1-3,4-6,7. Sans ce paramètre, chaque page devient un fichier.
Réponse Archive ZIP contenant les PDFs séparés.
cURL
Python
JavaScript
curl -X POST https://ipdf.dougster.fr/v1/split \
-H "Authorization: Bearer $IPDF_API_KEY" \
-F "file=@document.pdf" \
-F "ranges=1-3,4-6" \
--output split.zipCopier
r = requests.post(
"https://ipdf.dougster.fr/v1/split",
headers={"Authorization": f"Bearer {os.environ['IPDF_API_KEY']}"},
files={"file": open("document.pdf", "rb")},
data={"ranges": "1-3,4-6"}
)
r.raise_for_status()
open("split.zip", "wb").write(r.content)Copier
const fd = new FormData();
fd.append("file", fs.createReadStream("document.pdf"));
fd.append("ranges", "1-3,4-6");
const res = await fetch("https://ipdf.dougster.fr/v1/split", {
method: "POST",
headers: { Authorization: `Bearer ${process.env.IPDF_API_KEY}`, ...fd.getHeaders() },
body: fd,
});
fs.writeFileSync("split.zip", Buffer.from(await res.arrayBuffer()));Copier
Paramètres (multipart/form-data)
Nom Type Requis Description
file file Requis Fichier PDF à compresser
level string Optionnel low | medium | high (défaut: medium)
cURL
Python
JavaScript
curl -X POST https://ipdf.dougster.fr/v1/compress \
-H "Authorization: Bearer $IPDF_API_KEY" \
-F "file=@lourd.pdf" \
-F "level=high" \
--output compresse.pdfCopier
r = requests.post(
"https://ipdf.dougster.fr/v1/compress",
headers={"Authorization": f"Bearer {os.environ['IPDF_API_KEY']}"},
files={"file": open("lourd.pdf", "rb")},
data={"level": "high"}
)
r.raise_for_status()
open("compresse.pdf", "wb").write(r.content)Copier
const fd = new FormData();
fd.append("file", fs.createReadStream("lourd.pdf"));
fd.append("level", "high");
const res = await fetch("https://ipdf.dougster.fr/v1/compress", {
method: "POST",
headers: { Authorization: `Bearer ${process.env.IPDF_API_KEY}`, ...fd.getHeaders() },
body: fd,
});
fs.writeFileSync("compresse.pdf", Buffer.from(await res.arrayBuffer()));Copier
Paramètres (multipart/form-data)
Nom Type Requis Description
file file Requis Fichier PDF à protéger
password string Requis Mot de passe à appliquer
cURL
Python
JavaScript
curl -X POST https://ipdf.dougster.fr/v1/protect \
-H "Authorization: Bearer $IPDF_API_KEY" \
-F "file=@document.pdf" \
-F "password=MonMotDePasse123" \
--output protege.pdfCopier
r = requests.post(
"https://ipdf.dougster.fr/v1/protect",
headers={"Authorization": f"Bearer {os.environ['IPDF_API_KEY']}"},
files={"file": open("document.pdf", "rb")},
data={"password": "MonMotDePasse123"}
)
r.raise_for_status()
open("protege.pdf", "wb").write(r.content)Copier
const fd = new FormData();
fd.append("file", fs.createReadStream("document.pdf"));
fd.append("password", "MonMotDePasse123");
const res = await fetch("https://ipdf.dougster.fr/v1/protect", {
method: "POST",
headers: { Authorization: `Bearer ${process.env.IPDF_API_KEY}`, ...fd.getHeaders() },
body: fd,
});
fs.writeFileSync("protege.pdf", Buffer.from(await res.arrayBuffer()));Copier
Paramètres (multipart/form-data)
Nom Type Requis Description
file file Requis Fichier PDF protégé
password string Requis Mot de passe actuel
cURL
Python
JavaScript
curl -X POST https://ipdf.dougster.fr/v1/unprotect \
-H "Authorization: Bearer $IPDF_API_KEY" \
-F "file=@protege.pdf" \
-F "password=MonMotDePasse123" \
--output deprotege.pdfCopier
r = requests.post(
"https://ipdf.dougster.fr/v1/unprotect",
headers={"Authorization": f"Bearer {os.environ['IPDF_API_KEY']}"},
files={"file": open("protege.pdf", "rb")},
data={"password": "MonMotDePasse123"}
)
r.raise_for_status()
open("deprotege.pdf", "wb").write(r.content)Copier
const fd = new FormData();
fd.append("file", fs.createReadStream("protege.pdf"));
fd.append("password", "MonMotDePasse123");
const res = await fetch("https://ipdf.dougster.fr/v1/unprotect", {
method: "POST",
headers: { Authorization: `Bearer ${process.env.IPDF_API_KEY}`, ...fd.getHeaders() },
body: fd,
});
fs.writeFileSync("deprotege.pdf", Buffer.from(await res.arrayBuffer()));Copier
Paramètres (multipart/form-data)
Nom Type Requis Description
file file Requis Fichier PDF
angle integer Requis 90, 180 ou 270
pages string Optionnel Pages ex: 1,3,5 ou all (défaut: all)
cURL
Python
JavaScript
curl -X POST https://ipdf.dougster.fr/v1/rotate \
-H "Authorization: Bearer $IPDF_API_KEY" \
-F "file=@document.pdf" \
-F "angle=90" \
--output pivote.pdfCopier
r = requests.post(
"https://ipdf.dougster.fr/v1/rotate",
headers={"Authorization": f"Bearer {os.environ['IPDF_API_KEY']}"},
files={"file": open("document.pdf", "rb")},
data={"angle": "90", "pages": "all"}
)
r.raise_for_status()
open("pivote.pdf", "wb").write(r.content)Copier
const fd = new FormData();
fd.append("file", fs.createReadStream("document.pdf"));
fd.append("angle", "90");
const res = await fetch("https://ipdf.dougster.fr/v1/rotate", {
method: "POST",
headers: { Authorization: `Bearer ${process.env.IPDF_API_KEY}`, ...fd.getHeaders() },
body: fd,
});
fs.writeFileSync("pivote.pdf", Buffer.from(await res.arrayBuffer()));Copier
Paramètres (multipart/form-data)
Nom Type Requis Description
file file Requis Fichier PDF
text string Requis Texte du filigrane
opacity float Optionnel Opacité 0.1–1.0 (défaut: 0.3)
color string Optionnel Couleur hex ex: #FF0000 (défaut: #808080)
cURL
Python
JavaScript
curl -X POST https://ipdf.dougster.fr/v1/watermark \
-H "Authorization: Bearer $IPDF_API_KEY" \
-F "file=@document.pdf" \
-F "text=CONFIDENTIEL" \
-F "opacity=0.25" \
--output filigrané.pdfCopier
r = requests.post(
"https://ipdf.dougster.fr/v1/watermark",
headers={"Authorization": f"Bearer {os.environ['IPDF_API_KEY']}"},
files={"file": open("document.pdf", "rb")},
data={"text": "CONFIDENTIEL", "opacity": "0.25", "color": "#FF0000"}
)
r.raise_for_status()
open("filigrané.pdf", "wb").write(r.content)Copier
const fd = new FormData();
fd.append("file", fs.createReadStream("document.pdf"));
fd.append("text", "CONFIDENTIEL");
fd.append("opacity", "0.25");
const res = await fetch("https://ipdf.dougster.fr/v1/watermark", {
method: "POST",
headers: { Authorization: `Bearer ${process.env.IPDF_API_KEY}`, ...fd.getHeaders() },
body: fd,
});
fs.writeFileSync("filigrané.pdf", Buffer.from(await res.arrayBuffer()));Copier
Paramètres (multipart/form-data)
Nom Type Requis Description
file file Requis Fichier PDF
position string Optionnel bottom-center | bottom-right | bottom-left | top-center (défaut: bottom-center)
start integer Optionnel Numéro de la première page (défaut: 1)
cURL
Python
JavaScript
curl -X POST https://ipdf.dougster.fr/v1/number-pages \
-H "Authorization: Bearer $IPDF_API_KEY" \
-F "file=@document.pdf" \
-F "position=bottom-right" \
--output numerote.pdfCopier
r = requests.post(
"https://ipdf.dougster.fr/v1/number-pages",
headers={"Authorization": f"Bearer {os.environ['IPDF_API_KEY']}"},
files={"file": open("document.pdf", "rb")},
data={"position": "bottom-right", "start": "1"}
)
r.raise_for_status()
open("numerote.pdf", "wb").write(r.content)Copier
const fd = new FormData();
fd.append("file", fs.createReadStream("document.pdf"));
fd.append("position", "bottom-right");
const res = await fetch("https://ipdf.dougster.fr/v1/number-pages", {
method: "POST",
headers: { Authorization: `Bearer ${process.env.IPDF_API_KEY}`, ...fd.getHeaders() },
body: fd,
});
fs.writeFileSync("numerote.pdf", Buffer.from(await res.arrayBuffer()));Copier
Conversion
Paramètres (multipart/form-data)
Nom Type Requis Description
file file Requis Fichier PDF source
cURL
Python
JavaScript
curl -X POST https://ipdf.dougster.fr/v1/pdf-to-word \
-H "Authorization: Bearer $IPDF_API_KEY" \
-F "file=@document.pdf" \
--output document.docxCopier
r = requests.post(
"https://ipdf.dougster.fr/v1/pdf-to-word",
headers={"Authorization": f"Bearer {os.environ['IPDF_API_KEY']}"},
files={"file": open("document.pdf", "rb")}
)
r.raise_for_status()
open("document.docx", "wb").write(r.content)Copier
const fd = new FormData();
fd.append("file", fs.createReadStream("document.pdf"));
const res = await fetch("https://ipdf.dougster.fr/v1/pdf-to-word", {
method: "POST",
headers: { Authorization: `Bearer ${process.env.IPDF_API_KEY}`, ...fd.getHeaders() },
body: fd,
});
fs.writeFileSync("document.docx", Buffer.from(await res.arrayBuffer()));Copier
Paramètres (multipart/form-data)
Nom Type Requis Description
file file Requis Fichier .docx source
cURL
Python
JavaScript
curl -X POST https://ipdf.dougster.fr/v1/word-to-pdf \
-H "Authorization: Bearer $IPDF_API_KEY" \
-F "file=@document.docx" \
--output document.pdfCopier
r = requests.post(
"https://ipdf.dougster.fr/v1/word-to-pdf",
headers={"Authorization": f"Bearer {os.environ['IPDF_API_KEY']}"},
files={"file": open("document.docx", "rb")}
)
r.raise_for_status()
open("document.pdf", "wb").write(r.content)Copier
const fd = new FormData();
fd.append("file", fs.createReadStream("document.docx"));
const res = await fetch("https://ipdf.dougster.fr/v1/word-to-pdf", {
method: "POST",
headers: { Authorization: `Bearer ${process.env.IPDF_API_KEY}`, ...fd.getHeaders() },
body: fd,
});
fs.writeFileSync("document.pdf", Buffer.from(await res.arrayBuffer()));Copier
Paramètres (multipart/form-data)
Nom Type Requis Description
file file Requis Fichier PDF source
dpi integer Optionnel Résolution en DPI (défaut: 150, max: 300)
pages string Optionnel Pages ex: 1-3 ou all (défaut: all)
Réponse Archive ZIP contenant une image JPG par page.
cURL
Python
JavaScript
curl -X POST https://ipdf.dougster.fr/v1/pdf-to-jpg \
-H "Authorization: Bearer $IPDF_API_KEY" \
-F "file=@document.pdf" \
-F "dpi=200" \
--output images.zipCopier
r = requests.post(
"https://ipdf.dougster.fr/v1/pdf-to-jpg",
headers={"Authorization": f"Bearer {os.environ['IPDF_API_KEY']}"},
files={"file": open("document.pdf", "rb")},
data={"dpi": "200"}
)
r.raise_for_status()
open("images.zip", "wb").write(r.content)Copier
const fd = new FormData();
fd.append("file", fs.createReadStream("document.pdf"));
fd.append("dpi", "200");
const res = await fetch("https://ipdf.dougster.fr/v1/pdf-to-jpg", {
method: "POST",
headers: { Authorization: `Bearer ${process.env.IPDF_API_KEY}`, ...fd.getHeaders() },
body: fd,
});
fs.writeFileSync("images.zip", Buffer.from(await res.arrayBuffer()));Copier
Paramètres (multipart/form-data)
Nom Type Requis Description
file file Requis Fichier PDF source
dpi integer Optionnel Résolution en DPI (défaut: 150, max: 300)
pages string Optionnel Pages à convertir (défaut: all)
cURL
Python
JavaScript
curl -X POST https://ipdf.dougster.fr/v1/pdf-to-png \
-H "Authorization: Bearer $IPDF_API_KEY" \
-F "file=@document.pdf" \
-F "dpi=150" \
--output images.zipCopier
r = requests.post(
"https://ipdf.dougster.fr/v1/pdf-to-png",
headers={"Authorization": f"Bearer {os.environ['IPDF_API_KEY']}"},
files={"file": open("document.pdf", "rb")},
data={"dpi": "150"}
)
r.raise_for_status()
open("images.zip", "wb").write(r.content)Copier
const fd = new FormData();
fd.append("file", fs.createReadStream("document.pdf"));
fd.append("dpi", "150");
const res = await fetch("https://ipdf.dougster.fr/v1/pdf-to-png", {
method: "POST",
headers: { Authorization: `Bearer ${process.env.IPDF_API_KEY}`, ...fd.getHeaders() },
body: fd,
});
fs.writeFileSync("images.zip", Buffer.from(await res.arrayBuffer()));Copier
Paramètres (multipart/form-data)
Nom Type Requis Description
files file[] Requis Une ou plusieurs images JPG/JPEG (champ répété)
cURL
Python
JavaScript
curl -X POST https://ipdf.dougster.fr/v1/jpg-to-pdf \
-H "Authorization: Bearer $IPDF_API_KEY" \
-F "files=@photo1.jpg" \
-F "files=@photo2.jpg" \
--output images.pdfCopier
r = requests.post(
"https://ipdf.dougster.fr/v1/jpg-to-pdf",
headers={"Authorization": f"Bearer {os.environ['IPDF_API_KEY']}"},
files=[
("files", open("photo1.jpg", "rb")),
("files", open("photo2.jpg", "rb")),
]
)
r.raise_for_status()
open("images.pdf", "wb").write(r.content)Copier
const fd = new FormData();
["photo1.jpg","photo2.jpg"].forEach(f => fd.append("files", fs.createReadStream(f)));
const res = await fetch("https://ipdf.dougster.fr/v1/jpg-to-pdf", {
method: "POST",
headers: { Authorization: `Bearer ${process.env.IPDF_API_KEY}`, ...fd.getHeaders() },
body: fd,
});
fs.writeFileSync("images.pdf", Buffer.from(await res.arrayBuffer()));Copier
Paramètres (multipart/form-data)
Nom Type Requis Description
file file Requis Fichier .xlsx ou .xls
cURL
Python
JavaScript
curl -X POST https://ipdf.dougster.fr/v1/excel-to-pdf \
-H "Authorization: Bearer $IPDF_API_KEY" \
-F "file=@tableau.xlsx" \
--output tableau.pdfCopier
r = requests.post(
"https://ipdf.dougster.fr/v1/excel-to-pdf",
headers={"Authorization": f"Bearer {os.environ['IPDF_API_KEY']}"},
files={"file": open("tableau.xlsx", "rb")}
)
r.raise_for_status()
open("tableau.pdf", "wb").write(r.content)Copier
const fd = new FormData();
fd.append("file", fs.createReadStream("tableau.xlsx"));
const res = await fetch("https://ipdf.dougster.fr/v1/excel-to-pdf", {
method: "POST",
headers: { Authorization: `Bearer ${process.env.IPDF_API_KEY}`, ...fd.getHeaders() },
body: fd,
});
fs.writeFileSync("tableau.pdf", Buffer.from(await res.arrayBuffer()));Copier
Intelligence Artificielle
Les endpoints IA retournent un objet JSON avec les résultats analysés.
Paramètres (multipart/form-data)
Nom Type Requis Description
file file Requis Fichier PDF à résumer
language string Optionnel Langue du résumé ex: fr, en (défaut: auto-détecté)
length string Optionnel short | medium | long (défaut: medium)
Réponse JSON
200 OK
{
"summary": "Ce document présente...",
"key_points": ["Point 1", "Point 2", "Point 3"],
"word_count": 3420,
"pages_analyzed": 12
}Copier
cURL
Python
JavaScript
curl -X POST https://ipdf.dougster.fr/v1/ai/summarize \
-H "Authorization: Bearer $IPDF_API_KEY" \
-F "file=@rapport.pdf" \
-F "language=fr" \
-F "length=medium"Copier
r = requests.post(
"https://ipdf.dougster.fr/v1/ai/summarize",
headers={"Authorization": f"Bearer {os.environ['IPDF_API_KEY']}"},
files={"file": open("rapport.pdf", "rb")},
data={"language": "fr", "length": "medium"}
)
r.raise_for_status()
data = r.json()
print(data["summary"])
print("Points clés :", data["key_points"])Copier
const fd = new FormData();
fd.append("file", fs.createReadStream("rapport.pdf"));
fd.append("language", "fr");
fd.append("length", "medium");
const res = await fetch("https://ipdf.dougster.fr/v1/ai/summarize", {
method: "POST",
headers: { Authorization: `Bearer ${process.env.IPDF_API_KEY}`, ...fd.getHeaders() },
body: fd,
});
const data = await res.json();
console.log(data.summary);Copier
Paramètres (multipart/form-data)
Nom Type Requis Description
file file Requis Fichier PDF à traduire
target_language string Requis Langue cible ex: en, fr, es, de, it
Réponse JSON
200 OK
{
"translated_text": "This document presents...",
"source_language": "fr",
"target_language": "en",
"pages_translated": 8
}Copier
cURL
Python
JavaScript
curl -X POST https://ipdf.dougster.fr/v1/ai/translate \
-H "Authorization: Bearer $IPDF_API_KEY" \
-F "file=@document_fr.pdf" \
-F "target_language=en"Copier
r = requests.post(
"https://ipdf.dougster.fr/v1/ai/translate",
headers={"Authorization": f"Bearer {os.environ['IPDF_API_KEY']}"},
files={"file": open("document_fr.pdf", "rb")},
data={"target_language": "en"}
)
r.raise_for_status()
data = r.json()
print(data["translated_text"][:500])Copier
const fd = new FormData();
fd.append("file", fs.createReadStream("document_fr.pdf"));
fd.append("target_language", "en");
const res = await fetch("https://ipdf.dougster.fr/v1/ai/translate", {
method: "POST",
headers: { Authorization: `Bearer ${process.env.IPDF_API_KEY}`, ...fd.getHeaders() },
body: fd,
});
const data = await res.json();
console.log(data.translated_text);Copier
Paramètres (multipart/form-data)
Nom Type Requis Description
file file Requis Fichier PDF multi-documents à séparer
Réponse
Archive ZIP contenant les PDFs séparés, nommés automatiquement par l'IA selon le contenu détecté.
cURL
Python
JavaScript
curl -X POST https://ipdf.dougster.fr/v1/ai/split-rename \
-H "Authorization: Bearer $IPDF_API_KEY" \
-F "file=@documents_groupes.pdf" \
--output documents_separes.zipCopier
r = requests.post(
"https://ipdf.dougster.fr/v1/ai/split-rename",
headers={"Authorization": f"Bearer {os.environ['IPDF_API_KEY']}"},
files={"file": open("documents_groupes.pdf", "rb")}
)
r.raise_for_status()
open("documents_separes.zip", "wb").write(r.content)Copier
const fd = new FormData();
fd.append("file", fs.createReadStream("documents_groupes.pdf"));
const res = await fetch("https://ipdf.dougster.fr/v1/ai/split-rename", {
method: "POST",
headers: { Authorization: `Bearer ${process.env.IPDF_API_KEY}`, ...fd.getHeaders() },
body: fd,
});
fs.writeFileSync("documents_separes.zip", Buffer.from(await res.arrayBuffer()));Copier