Para desarrolladores
De imagen a CAD, desde tu propio código
Convierte tus imágenes en bloques CAD, listos como DXF, SVG y PNG, directamente desde tus propios scripts y herramientas. 0.75 € planos por conversión, tu primera clave viene con 5 gratis, y es su propio monedero prepago, separado de tus créditos de la web.
Empieza en 3 pasos
1. Crea tu clave
Abre /account/api y crea una clave. Solo pide un correo, nada más, y te da 5 conversiones gratis para probarlo.
2. Envía una imagen
Haz un POST con un JPEG, PNG o WebP de hasta 10 MB. Una imagen por solicitud, 0.75 € por conversión.
3. Consulta y descarga
Comprueba el resultado cada 3 a 5 segundos. Cuando esté listo, descarga el DXF, el SVG y el PNG, gratis y tantas veces como quieras.
curl -X POST https://pic2cad.ai/api/v1/convert \
-H "Authorization: Bearer p2c_live_..." \
-F "image_file=@chair.jpg"Referencia técnica
Con todo lo de arriba ya puedes empezar. Abre una sección de abajo solo si necesitas el detalle.
El ciclo completo en tres llamadas: iniciar una conversión, consultarla, descargar el archivo.
curl -X POST https://pic2cad.ai/api/v1/convert \
-H "Authorization: Bearer $PIC2CAD_API_KEY" \
-F "image_file=@chair.jpg"
# -> 202 { "id": "cm3x...", "status": "processing", "balance_eur": 24.25, ... }
# X-Api-Charge-Cents: 75
curl https://pic2cad.ai/api/v1/conversions/cm3x... \
-H "Authorization: Bearer $PIC2CAD_API_KEY"
# -> { "id": "cm3x...", "status": "complete", "files": { "dxf": "..." }, ... }
curl -L -o chair.dxf \
https://pic2cad.ai/api/v1/conversions/cm3x.../files/dxf \
-H "Authorization: Bearer $PIC2CAD_API_KEY"import os, time, requests
API = "https://pic2cad.ai/api/v1"
HEAD = {"Authorization": f"Bearer {os.environ['PIC2CAD_API_KEY']}"}
with open("chair.jpg", "rb") as f:
job = requests.post(f"{API}/convert", headers=HEAD,
files={"image_file": f}).json()
while True:
time.sleep(5)
state = requests.get(f"{API}/conversions/{job['id']}", headers=HEAD).json()
if state["status"] != "processing":
break
if state["status"] == "complete":
dxf = requests.get(state["files"]["dxf"], headers=HEAD)
open("chair.dxf", "wb").write(dxf.content)
else:
print(state["error"]["message"])import fs from "node:fs/promises";
const API = "https://pic2cad.ai/api/v1";
const head = { Authorization: `Bearer ${process.env.PIC2CAD_API_KEY}` };
const form = new FormData();
form.append("image_file", new Blob([await fs.readFile("chair.jpg")]), "chair.jpg");
const job = await fetch(`${API}/convert`, { method: "POST", headers: head, body: form })
.then((r) => r.json());
let state;
do {
await new Promise((r) => setTimeout(r, 5000));
state = await fetch(`${API}/conversions/${job.id}`, { headers: head }).then((r) => r.json());
} while (state.status === "processing");
if (state.status === "complete") {
const dxf = await fetch(state.files.dxf, { headers: head });
await fs.writeFile("chair.dxf", Buffer.from(await dxf.arrayBuffer()));
}Inicia una conversión. Devuelve 202 con el id de la conversión al momento; el trabajo se ejecuta en segundo plano. Envía la imagen como multipart/form-data en el campo image_file, con cualquier opción como campo de formulario adicional.
| Campo | Tipo | Por defecto | Qué hace |
|---|---|---|---|
image_file | file | required | La imagen, como multipart/form-data. JPEG, PNG o WebP, hasta 10 MB. |
title | string | Project NN | Nombre de la conversión. Se convierte en el nombre del archivo al descargarlo. |
detailed | boolean | true | Máximo detalle. Pon false para un trazo simplificado sin detalle facial. |
mode | string | accurate | accurate conserva la pose y la perspectiva de tu imagen. elevation redibuja el sujeto como un bloque ortográfico plano para planos. |
view | string | auto | Solo en modo elevation: auto, front, side, back, top. Se ignora en modo accurate. |
aspect | string | 3:4 | Encuadre del dibujo: 1:1, 3:4, 4:3, 9:16, 16:9. |
height_mm | integer | 1700 / 1000 | Altura real del sujeto en milímetros. El DXF sale a esa escala. Si se omite, el modo elevation usa 1700 por defecto y el modo accurate, 1000 (un bloque de referencia fijo). |
{
"id": "cm3x...",
"status": "processing",
"balance_eur": 24.25,
"conversions_remaining": 32
}La cabecera X-Api-Charge-Cents indica lo que esta solicitud ha descontado de tu saldo de API, en céntimos: 75 para una conversión normal.
Consulta esto hasta que status sea un estado final. Puede ser processing, complete o failed. El objeto files solo aparece cuando los tres formatos están listos.
{
"id": "cm3x...",
"status": "complete",
"title": "Oak chair",
"files": {
"dxf": "https://pic2cad.ai/api/v1/conversions/cm3x.../files/dxf",
"svg": "https://pic2cad.ai/api/v1/conversions/cm3x.../files/svg",
"png": "https://pic2cad.ai/api/v1/conversions/cm3x.../files/png"
},
"balance_eur": 24.25,
"conversions_remaining": 32
}Una conversión fallida lleva un objeto error, y los 0.75 € ya están de vuelta en tu saldo.
{
"id": "cm3x...",
"status": "failed",
"title": "Oak chair",
"error": {
"code": "unprocessable_picture",
"message": "We couldn't turn this picture into a drawing. Your balance was refunded ..."
},
"balance_eur": 25.00,
"conversions_remaining": 33
}Formatos: dxf, svg, png. La misma clave Bearer que todo lo demás. Las URL no caducan nunca y descargar es siempre gratis, así que puedes pedir el mismo dibujo tantas veces como necesites.
| Formato | Qué obtienes |
|---|---|
dxf | El entregable CAD: R2018, splines, Outer / Inner / Fill en capas separadas, en milímetros a la escala que pediste. |
svg | Vector plano, se abre en Illustrator o InDesign para cambiar el grosor de línea y el color. |
png | Silueta recortada con fondo transparente: contorno negro, relleno blanco. |
Pedir un archivo antes de que la conversión termine devuelve 409 conversion_not_ready. Cada descarga incluye un nombre de archivo Content-Disposition construido a partir del título de la conversión.
Quién eres y cuánto saldo de API te queda. Llámalo una vez al arrancar, y luego síguelo con balance_eur y conversions_remaining en cada respuesta de conversión, que son siempre los valores de referencia.
curl https://pic2cad.ai/api/v1/account \
-H "Authorization: Bearer $PIC2CAD_API_KEY"
{
"email": "you@studio.com",
"balance_eur": 24.25,
"conversions_remaining": 32,
"price_per_conversion_eur": 0.75,
"auto_top_up": { "enabled": true, "below_eur": 5, "amount_eur": 25 }
}auto_top_up refleja lo que has configurado en tu cuenta: mientras enabled sea true, el saldo se recarga solo antes de agotarse. No informa nada sobre tus créditos ni tu suscripción de la web, porque ninguno de los dos paga conversiones de la API.
Todo error devuelve el mismo formato, y no se guarda nada de una solicitud fallida.
{
"errors": [
{
"code": "insufficient_api_balance",
"title": "Insufficient API balance",
"detail": "..."
}
]
}| HTTP | Código | Significado |
|---|---|---|
| 401 | unauthorized | Clave ausente, no válida o revocada. |
| 402 | insufficient_api_balance | Saldo de API insuficiente. Recarga desde tu cuenta. |
| 403 | account_suspended | La cuenta está suspendida. |
| 404 | not_found | Esa conversión no existe en tu cuenta. |
| 409 | conversion_not_ready | Archivos pedidos antes de que la conversión terminara. |
| 413 | payload_too_large | La imagen pesa más de 10 MB. |
| 422 | invalid_image | Imagen no decodificable o no compatible. |
| 422 | invalid_parameters | Un valor de parámetro está fuera de rango. |
| 429 | rate_limited | Baja el ritmo. Respeta Retry-After. |
| 500 | internal_error | Ha fallado por nuestra parte. No se ha cobrado nada. |
Guía de reintentos: espera de forma exponencial ante un 5xx, respeta los segundos de Retry-After ante un 429, y no reintentes un 4xx sin cambiarlo.
10 conversiones por minuto y clave, 120 por minuto en los endpoints de lectura. Cada respuesta lleva X-RateLimit-Limit, X-RateLimit-Remaining y X-RateLimit-Reset; un 429 añade Retry-After. Los límites son por clave, así que usar claves separadas para entornos separados evita que un trabajo por lotes deje sin margen a tu aplicación.
Preguntas frecuentes
Úsala con Claude u otro agente de IA
¿Estás construyendo un script o un agente que debería llamar a pic2CAD por su cuenta? Hay dos formas de conectarlo, elige la que soporte tu agente.
Conecta el servidor de pic2CAD a Claude
Ejecuta esto una vez y Claude podrá convertir imágenes, consultarlas y descargar los archivos por su cuenta. Funciona igual con cualquier otro agente que hable MCP.
claude mcp add --transport http pic2cad https://pic2cad.ai/api/mcp --header "Authorization: Bearer YOUR_API_KEY"Si tu agente no soporta MCP
Pega esto en Claude o en cualquier agente de código con IA: tiene la dirección base, cómo autenticarse, las cuatro llamadas que necesita, y cómo consultar una conversión, para que pueda manejar la API sin que le expliques nada más.
You can convert pictures into CAD-ready files (DXF, SVG, PNG) using the pic2CAD API.
Base URL: https://pic2cad.ai/api/v1
Auth: send this header on every request: Authorization: Bearer YOUR_API_KEY
Calls available:
1. POST /convert: send a picture (multipart/form-data, field "image_file") to start a conversion. Returns an id.
2. GET /conversions/{id}: check status ("processing", "complete", or "failed"). Poll every 3 to 5 seconds until it is no longer "processing".
3. GET /conversions/{id}/files/{format}: download a finished file once status is "complete". format is "dxf", "svg", or "png".
4. GET /account: check remaining balance and how many conversions it still pays for.
Keep YOUR_API_KEY private: never print it, log it, share it, or commit it to a file.