# L'API d'Export Web

> API REST pour exporter des sites Framer, Webflow, Wix, Squarespace et WordPress en HTML statique. Lancez des jobs, téléchargez les ZIP. Avec Pro et Agency.

Canonical: https://www.nocodeexport.com/fr/api-developpeurs

Tout ce que fait l'exportateur — animations récupérées, badges retirés, formulaires recâblés — derrière trois endpoints REST. Lancez un job, interrogez jusqu'à la fin, téléchargez le ZIP.

## Démarrage rapide

### cURL

```bash
# 1 — start an export
curl -X POST https://www.nocodeexport.com/api/v1/exports \
  -H "Authorization: Bearer nce_live_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "url": "https://your-site.framer.website", "mode": "full-site" }'
# → 202 { "jobId": "...", "status": "pending", "statusUrl": "..." }

# 2 — poll until done
curl https://www.nocodeexport.com/api/v1/exports/JOB_ID \
  -H "Authorization: Bearer nce_live_YOUR_KEY"
# → { "status": "completed", "percent": 100,
#     "result": { "zipUrl": "https://…", "pagesExported": 14 } }

# 3 — download result.zipUrl with the same API key
curl https://www.nocodeexport.com/api/v1/exports/JOB_ID/download \
  -H "Authorization: Bearer nce_live_YOUR_KEY" \
  --fail --output export.zip
```

### Node.js

```js
import { writeFile } from "node:fs/promises";

const API = "https://www.nocodeexport.com/api/v1";
const KEY = process.env.NCX_API_KEY; // nce_live_...
const headers = { Authorization: `Bearer ${KEY}`, "Content-Type": "application/json" };

// Start the export.
const start = await fetch(`${API}/exports`, {
  method: "POST",
  headers,
  body: JSON.stringify({ url: "https://your-site.framer.website", mode: "full-site" }),
}).then((r) => r.json());

// Poll until it finishes.
let job;
do {
  await new Promise((r) => setTimeout(r, 2500));
  job = await fetch(start.statusUrl, { headers }).then((r) => r.json());
} while (!["completed", "failed"].includes(job.status));

if (job.status !== "completed" || !job.result.zipUrl) throw new Error(job.error || "Export unavailable");
const zip = await fetch(job.result.zipUrl, { headers });
if (!zip.ok) throw new Error(`Download failed: ${zip.status}`);
await writeFile("export.zip", Buffer.from(await zip.arrayBuffer()));
```

### Python

```python
import os, time, requests

API = "https://www.nocodeexport.com/api/v1"
headers = {"Authorization": f"Bearer {os.environ['NCX_API_KEY']}"}

# Start the export.
start = requests.post(
    f"{API}/exports",
    headers=headers,
    json={"url": "https://your-site.framer.website", "mode": "full-site"},
).json()

# Poll until it finishes.
while True:
    time.sleep(2.5)
    job = requests.get(start["statusUrl"], headers=headers).json()
    if job["status"] in ("completed", "failed"):
        break

if job["status"] != "completed" or not job["result"]["zipUrl"]:
    raise RuntimeError(job.get("error") or "Export unavailable")
with requests.get(job["result"]["zipUrl"], headers=headers, stream=True) as zip:
    zip.raise_for_status()
    with open("export.zip", "wb") as file:
        for chunk in zip.iter_content(chunk_size=65536):
            file.write(chunk)
```

## Bâtie sur le moteur de production

L'API est une fine couche au-dessus du pipeline qui produit chaque export du dashboard — pas un crawler au rabais.

### Jobs asynchrones sur de vrais navigateurs

Chaque export est rendu dans un vrai navigateur headless sur des machines dédiées. Les jobs tournent en arrière-plan et survivent aux déconnexions.

### La même sortie que le dashboard

Animations récupérées, badges et trackers retirés, formulaires recâblés, assets selon votre plan. ZIPs identiques, déclenchement programmatique.

### Un seul quota, zéro surprise

Les exports API puisent dans le même quota mensuel que le dashboard, avec des limites transparentes — les ajustements sont signalés, jamais silencieux.

## Endpoints

| Méthode | Endpoint | Description |
| --- | --- | --- |
| POST | `/api/v1/exports` | Lance un job d’export — renvoie 202 avec jobId et statusUrl. |
| GET | `/api/v1/exports/{jobId}` | Statut du job avec pourcentage en direct ; une fois terminé, inclut result.zipUrl. |
| GET | `/api/v1/usage` | Quota mensuel et compteurs d’exports API en JSON. |

Limite : 300 requêtes/heure par clé · jusqu'à 5 clés actives · les exports comptent dans votre quota. Les plans Agency reçoivent automatiquement les webhooks export.complete / export.failed.

## FAQ de l'API

Ce que demandent les développeurs avant de l’intégrer.

### Que puis-je construire avec l'API d'export ?

Des automatisations d'onboarding client, des sauvegardes planifiées de sites no-code, des outils de migration et des pipelines d'agence qui transforment une URL en ZIP déployable sans ouvrir le dashboard.

### Quels plans incluent l'accès à l'API ?

Pro et Agency. Créez des clés dans Dashboard → Paramètres → API développeurs. Les exports API comptent dans le même quota mensuel.

### Comment tournent les exports ?

De façon asynchrone. POST /api/v1/exports renvoie 202 avec un jobId immédiatement ; le job est rendu en arrière-plan sur de vrais navigateurs. Interrogez le statut toutes les quelques secondes, ou utilisez les webhooks sur Agency.

### Quelles sont les limites ?

300 requêtes par heure et par clé, jusqu'à 5 clés actives par compte, et le quota mensuel de votre plan. La rétention des ZIPs suit votre plan (30 jours en Pro, illimitée en Agency).
