# La API de Exportación Web

> API REST para exportar Framer, Webflow, Wix, Squarespace y WordPress a HTML estático. Inicia trabajos, consulta el estado, descarga ZIPs. En Pro y Agency.

Canonical: https://www.nocodeexport.com/es/api-desarrolladores

Todo lo que hace el exportador — animaciones recuperadas, marcas eliminadas, formularios reconectados — detrás de tres endpoints REST. Inicia un trabajo, consulta hasta terminar, descarga el ZIP.

## Inicio rápido

### 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)
```

## Construida sobre el motor de producción

La API es una capa fina sobre el mismo pipeline que genera cada exportación del dashboard — no un crawler aparte.

### Trabajos asíncronos en navegadores reales

Cada exportación se renderiza en un navegador headless real en máquinas dedicadas. Los trabajos corren en segundo plano y sobreviven a las desconexiones.

### La misma salida que el dashboard

Animaciones recuperadas, marcas y trackers eliminados, formularios reconectados, assets según tu plan. ZIPs idénticos, disparo programático.

### Una sola cuota, sin sorpresas

Las exportaciones por API consumen la misma cuota mensual que las del dashboard, con límites transparentes — los ajustes se reportan, nunca son silenciosos.

## Endpoints

| Método | Endpoint | Descripción |
| --- | --- | --- |
| POST | `/api/v1/exports` | Inicia un trabajo de exportación — devuelve 202 con jobId y statusUrl. |
| GET | `/api/v1/exports/{jobId}` | Estado del trabajo con porcentaje en vivo; al completarse incluye result.zipUrl. |
| GET | `/api/v1/usage` | Cuota mensual y conteos de exportaciones por API en JSON. |

Límite: 300 peticiones/hora por clave · hasta 5 claves activas · las exportaciones cuentan en tu cuota. Los planes Agency reciben webhooks export.complete / export.failed automáticamente.

## FAQ de la API

Lo que preguntan los desarrolladores antes de integrarla.

### ¿Qué puedo construir con la API de exportación?

Automatizaciones de onboarding de clientes, respaldos programados de sitios no-code, herramientas de migración y pipelines de agencia que convierten una URL en un ZIP desplegable sin abrir el dashboard.

### ¿Qué planes incluyen acceso a la API?

Pro y Agency. Crea claves en Dashboard → Configuración → API para desarrolladores. Las exportaciones por API cuentan en la misma cuota mensual.

### ¿Cómo corren las exportaciones?

De forma asíncrona. POST /api/v1/exports devuelve 202 con un jobId al instante; el trabajo se renderiza en segundo plano en navegadores reales. Consulta el estado cada pocos segundos o usa webhooks en Agency.

### ¿Cuáles son los límites?

300 peticiones por hora por clave, hasta 5 claves activas por cuenta y la cuota mensual de tu plan. La retención del ZIP sigue tu plan (30 días en Pro, ilimitada en Agency).
