L'API DuupFlow, point par point
Duplique des images et des vidéos, compresse et retire la détection IA depuis tes propres outils (scripts, Make, n8n, Zapier, agents IA). Cette page contient tout ce qu'il faut savoir — y compris pour l'assistant IA à qui tu poses tes questions.
Résumé (pour les humains et les assistants IA)
- API REST :
https://www.duupflow.com/api/v1, authentification par en-têteAuthorization: Bearer dflw_live_…. - Incluse sans frais dans les plans Pro et Agence (pas dans Solo ni le plan gratuit). Duplications illimitées via l'API.
- Images : réponse immédiate (le fichier, ou un zip). Vidéos : asynchrone (un job à suivre, puis téléchargement).
- Limites : 300 requêtes/min par clé · 100 jobs vidéo en attente · images ≤ 25 Mo (1–20 copies) · vidéos ≤ 150 Mo et ≤ 120 s (1–10 copies).
- Formats vidéo : mp4, mov, mkv, avi, webm — le vertical 9:16 (Reels, TikTok, Shorts) est pris en charge, résolution et qualité conservées.
- Résultats téléchargeables pendant 16 h. Webhook de fin de traitement : en cours de développement (pour l'instant, interroger le job toutes les 5–10 s).
- Pas d'essai gratuit de l'API ; le Pro mensuel est sans engagement. Une démo est possible via le support Telegram.
1. À quoi sert l'API
L'API donne accès, sans passer par le site, aux mêmes traitements que le dashboard DuupFlow :
- Dupliquer une image en 1 à 20 copies uniques (métadonnées, pixels invisibles, identité d'appareil).
- Dupliquer une vidéo en 1 à 10 copies uniques, identiques à l'œil.
- Compresser une image sans jamais l'alourdir.
- Retirer la détection IA d'une image, ou l'activer en option sur une duplication.
Cas typiques : automatiser un flux de publication multi-comptes, brancher DuupFlow dans Make / n8n / Zapier (module HTTP), ou laisser un agent IA (Claude Code, scripts) lancer les duplications.
2. Accès et tarifs
| Plan | Accès API | Prix indicatif |
|---|---|---|
| Gratuit / Solo | Non | — |
| Pro | Oui, sans frais en plus | 99 €/mois, ou 70 €/mois en annuel |
| Agence | Oui, sans frais en plus | 249 €/mois, ou 176 €/mois en annuel |
- Les duplications via l'API sont illimitées sur Pro et Agence — pas de quota mensuel, pas de coût à l'appel.
- Les invités d'une équipe Pro ou Agence peuvent créer leurs propres clés.
- Pas d'essai gratuit de l'API. Le Pro mensuel est sans engagement (résiliable à tout moment). Une démo personnalisée est possible via le support Telegram.
- Les prix à jour sont toujours sur la page Tarifs.
3. Démarrage rapide
- 1Passe sur le plan Pro ou Agence.
- 2Dans le dashboard, ouvre Développeurs et clique sur Générer une clé.
- 3Copie la clé tout de suite : elle n'est affichée qu'une seule fois.
- 4Vérifie qu'elle fonctionne avec
GET /me(exemple ci-dessous). - 5Lance ta première duplication.
curl -H "Authorization: Bearer dflw_live_YOUR_KEY" \
https://www.duupflow.com/api/v1/me{ "user_id": "…", "plan": "pro", "api_version": "v1" }4. Authentification et clés
- Chaque requête envoie l'en-tête
Authorization: Bearer dflw_live_…. - Jusqu'à 3 clés par compte (une par intégration, par exemple).
- Une clé supprimée est désactivée immédiatement et ne peut pas être récupérée.
- Si l'abonnement passe sous le plan Pro ou se retrouve en défaut de paiement, l'API répond
403 plan_requiredjusqu'à régularisation.
5. Dupliquer une image
/api/v1/images/duplicateSynchrone — renvoie directement le résultat.| Champ | Valeur | Défaut |
|---|---|---|
file | Image png, jpg, jpeg, webp, gif, heic, heif — ≤ 25 Mo | requis |
count | Nombre de copies, 1 à 20 | 1 |
fundamentals | Métadonnées réécrites | 1 |
semi | Retouche de pixels imperceptible | 1 |
visuals | Léger décalage visuel | 0 |
reverse | Effet miroir horizontal | 0 |
iphone_meta | Identité d'iPhone réaliste (EXIF Apple) | 0 |
country | Code pays ISO (ex. FR, US) pour la localisation | — |
remove_ai_detection | Retirer la détection IA avant duplication | 0 |
Réponse : 1 copie → le fichier image directement ; plusieurs copies → une archive zip. Les noms de fichiers sont neutres (aucune mention de DuupFlow).
curl -X POST https://www.duupflow.com/api/v1/images/duplicate \
-H "Authorization: Bearer dflw_live_YOUR_KEY" \
-F "file=@photo.jpg" \
-F "count=3" \
-F "iphone_meta=1" \
-o copies.zip6. Dupliquer une vidéo (asynchrone)
/api/v1/videos/duplicateAsynchrone — crée un job et répond 202 tout de suite.| Champ | Valeur | Défaut |
|---|---|---|
file | Vidéo mp4, mov, mkv, avi, webm — ≤ 150 Mo et ≤ 120 s | requis |
count | Nombre de copies, 1 à 10 | 1 |
packs | Liste séparée par des virgules : visual, motion, metadata_technical, pixel_magic | visual,motion,metadata_technical |
country | Code pays ISO pour les métadonnées de localisation | — |
iphone_meta | Métadonnées d'iPhone réalistes (sortie .mov, HEVC) | 0 |
remove_ai_detection | Contre-filigrane invisible, différent sur chaque copie | 0 |
- visual : micro-variations de luminosité, contraste et couleur, invisibles à l'œil.
- motion : léger mouvement de caméra.
- metadata_technical : paramètres d'encodage et métadonnées techniques uniques.
- pixel_magic : bruit imperceptible pour une empreinte unique.
La résolution et la qualité d'origine sont conservées (4K comprise), et une copie n'est jamais plus lourde que la source. Le 9:16 vertical est pris en charge.
curl -X POST https://www.duupflow.com/api/v1/videos/duplicate \
-H "Authorization: Bearer dflw_live_YOUR_KEY" \
-F "file=@clip.mp4" \
-F "count=3" \
-F "packs=visual,motion,metadata_technical"{
"job_id": "3f1c…",
"status": "queued",
"poll_url": "https://www.duupflow.com/api/v1/jobs/3f1c…"
}7. Suivre un job et télécharger
/api/v1/jobs/:idÉtat du job et liens de téléchargement.status:queued→processing→completedoufailed.progress: 0 à 100 ;message: étape en cours.- Quand
completed,result.filesliste chaque copie avec sonurl. - Quand
failed,errorexplique pourquoi (fichier illisible, trop long…). - Si le serveur est momentanément saturé, le job est relancé automatiquement (il repasse en
queued) — rien à faire de ton côté.
{
"id": "3f1c…",
"type": "videos.duplicate",
"status": "completed",
"progress": 100,
"message": "Done",
"result": {
"files": [
{ "name": "…_c01_….mp4", "bytes": 8123456, "url": "https://www.duupflow.com/api/v1/jobs/3f1c…/files/…_c01_….mp4" }
]
},
"error": null,
"created_at": "2026-10-29T10:00:00Z"
}/api/v1/jobs/:id/files/:nameTélécharge une copie — avec la même clé API.curl -H "Authorization: Bearer dflw_live_YOUR_KEY" \
"https://www.duupflow.com/api/v1/jobs/JOB_ID/files/FILE_NAME" -o copy.mp48. Exemple complet (vidéo)
import time, requests
API = "https://www.duupflow.com/api/v1"
H = {"Authorization": "Bearer dflw_live_YOUR_KEY"}
# 1) Start the job
with open("clip.mp4", "rb") as f:
r = requests.post(f"{API}/videos/duplicate", headers=H,
files={"file": f}, data={"count": "3"})
r.raise_for_status()
job_id = r.json()["job_id"]
# 2) Poll until it's done
while True:
job = requests.get(f"{API}/jobs/{job_id}", headers=H).json()
if job["status"] in ("completed", "failed"):
break
time.sleep(8)
# 3) Download every copy
if job["status"] == "completed":
for f in job["result"]["files"]:
data = requests.get(f["url"], headers=H).content
open(f["name"], "wb").write(data)
else:
print("Failed:", job["error"])const API = "https://www.duupflow.com/api/v1";
const H = { Authorization: "Bearer dflw_live_YOUR_KEY" };
const form = new FormData();
form.append("file", new Blob([await fs.promises.readFile("clip.mp4")]), "clip.mp4");
form.append("count", "3");
const { job_id } = await (await fetch(`${API}/videos/duplicate`, { method: "POST", headers: H, body: form })).json();
let job;
do {
await new Promise((r) => setTimeout(r, 8000));
job = await (await fetch(`${API}/jobs/${job_id}`, { headers: H })).json();
} while (job.status === "queued" || job.status === "processing");
for (const f of job.result?.files ?? []) {
const buf = Buffer.from(await (await fetch(f.url, { headers: H })).arrayBuffer());
await fs.promises.writeFile(f.name, buf);
}Dans Make, n8n ou Zapier : un module HTTP « multipart/form-data » pour lancer le job, une boucle avec temporisation (8 s) sur GET /jobs/:id, puis un module HTTP par fichier pour le télécharger.
9. Compresser une image
/api/v1/compressSynchrone — renvoie l'image compressée.| Champ | Valeur | Défaut |
|---|---|---|
file | Image png, jpg, jpeg, webp — ≤ 25 Mo | requis |
level | light, balanced ou strong | balanced |
Le résultat n'est jamais plus lourd que l'original (sinon l'original est renvoyé). Le gain est indiqué dans les en-têtes X-DuupFlow-Saved-Percent, X-DuupFlow-Original-Bytes et X-DuupFlow-Output-Bytes. La compression vidéo via l'API n'est pas encore disponible.
curl -X POST https://www.duupflow.com/api/v1/compress \
-H "Authorization: Bearer dflw_live_YOUR_KEY" \
-F "file=@photo.jpg" -F "level=strong" -D headers.txt -o compressed.jpg10. Retirer la détection IA
/api/v1/ai-detectionSynchrone — renvoie l'image nettoyée.Efface les métadonnées de provenance IA (C2PA, XMP…) et retouche les pixels de façon invisible (grain, micro-flou, couleurs), en gardant le format et la résolution. Image jpg, png ou webp ≤ 25 Mo. Pour les vidéos, utilise l'option remove_ai_detection de /videos/duplicate.
curl -X POST https://www.duupflow.com/api/v1/ai-detection \
-H "Authorization: Bearer dflw_live_YOUR_KEY" \
-F "file=@image.png" -o cleaned.png11. Limites
| Élément | Limite |
|---|---|
| Requêtes | 300 par minute et par clé |
| Jobs vidéo en attente | 100 par compte |
| Image — taille / copies | 25 Mo / 1 à 20 copies |
| Vidéo — taille / durée / copies | 150 Mo / 120 s / 1 à 10 copies |
| Conservation des résultats vidéo | 16 heures |
| Clés API | 3 par compte |
| Duplications | Illimitées (Pro et Agence) |
12. Erreurs
Toutes les erreurs ont le même format JSON :
{ "error": { "code": "file_too_large", "message": "File exceeds the 150 MB limit." } }| HTTP | code | Que faire |
|---|---|---|
| 400 | invalid_body · missing_file · read_failed | Envoyer un multipart/form-data avec un champ file. |
| 401 | missing_key · invalid_key | Vérifier l'en-tête Authorization et que la clé n'a pas été supprimée. |
| 403 | plan_required | Le compte doit être sur Pro ou Agence, paiement à jour. |
| 404 | job_not_found · file_not_found | Mauvais identifiant, ou résultat expiré (16 h). |
| 413 | file_too_large | Réduire le fichier sous la limite. |
| 415 | unsupported_type · video_not_supported | Utiliser un format accepté (extension du fichier comprise). |
| 429 | rate_limited · too_many_jobs | Attendre (en-tête Retry-After) puis réessayer. |
| 500 | processing_failed · store_failed | Réessayer ; si ça persiste, contacter le support. |
13. Bonnes pratiques
- Interroger un job toutes les 5 à 10 secondes, pas plus souvent.
- Sur 429 ou 5xx : réessayer avec un délai croissant (backoff).
- Garder la bonne extension dans le nom de fichier envoyé : c'est elle qui détermine le format.
- Télécharger les résultats dès la fin du job (ils expirent après 16 h).
- Une clé par intégration : en cas de problème, tu en coupes une sans casser les autres.
- Chaque appel produit des copies différentes : relancer la même source donne de nouvelles variantes.
14. Webhooks
GET /jobs/:id.15. Questions fréquentes
| Question | Réponse |
|---|---|
| Peut-on tout automatiser sans toucher au site ? | Oui. Une fois la clé créée, tout se fait par l'API. |
| Y a-t-il un coût par appel ou un quota ? | Non. L'API est incluse dans Pro et Agence, duplications illimitées. Seules les limites techniques s'appliquent (section 11). |
| Fonctionne avec Make, n8n, Zapier ? | Oui, via leur module HTTP (multipart/form-data). |
| Les vidéos verticales 9:16 sont-elles prises en charge ? | Oui, et la résolution d'origine est conservée. |
| Une copie peut-elle être plus lourde que l'original ? | Non, le débit est plafonné sur celui de la source. |
| Peut-on choisir un « créateur » (workspace) via l'API ? | Non, l'API agit au niveau du compte. Les créateurs se gèrent dans le dashboard. |
| Peut-on enregistrer des réglages prédéfinis ? | Il suffit de renvoyer les mêmes paramètres à chaque appel depuis ton script. |
| Combien de temps les fichiers sont-ils gardés ? | Les résultats vidéo 16 h. Les fichiers envoyés sont supprimés après traitement. |
| Peut-on tester avant d'acheter ? | Pas d'essai gratuit de l'API ; le Pro mensuel est sans engagement, et une démo est possible via le support. |
| Y a-t-il un webhook ? | En cours de développement ; pour l'instant, polling de GET /jobs/:id. |
| La détection IA est-elle garantie ? | Non, aucun outil ne peut le garantir (voir section 10). |
| Où trouver de l'aide ? | Support Telegram : t.me/DuupFlow_Support. |