Saltar al contenido principal
PARA DESARROLLADORES

CutOptim Engine API

Una API de optimización de corte: envía piezas y material — paneles 2D, barras 1D, madera o anidado de forma real de piezas irregulares — y recibe la distribución, el plan de corte y el aprovechamiento. Por defecto, la misma solicitud siempre devuelve el mismo plan.

Ver el benchmark completo → · Medido, no afirmado

POST /v1/optimize/nest
{
  "parts": [
    { "name": "bracket", "polygon": […], "qty": 12, … },
    { "name": "gusset", "polygon": […], "qty": 14, … },
    { "name": "plate", "polygon": […], "holes": […], "qty": 12, … },
    { "name": "flange", "source": { … }, "qty": 10, … }
  ],
  "stock": [{ "w": 2500, "h": 1250, "exclusions": […], … }],
  "options": { "minSeparation": 5, "edgeClearance": 10 }
}
200 sheets[0] · 2500 × 1250
1 sheetCount48/48 placed0.5632 density110 pierces
Una llamada real a POST /v1/optimize/nest: la petición y la chapa devuelta, dibujada a partir de las coordenadas de la respuesta.

Por qué construir sobre él

DETERMINISTA

La misma entrada siempre devuelve la misma salida — sin aleatoriedad, sin reloj en el algoritmo. Puedes cachear los resultados y compararlos en las pruebas. La única excepción opcional, la búsqueda max de anidado con tiempo limitado, lo indica en cada respuesta (deterministic: false).

UN PLAN DE CORTE REAL

No solo rectángulos: la secuencia de corte por guillotina, líneas de corte frente a pasadas de sierra, la longitud serrada y un indicador que te dice si es fabricable en una seccionadora.

PENSADO PARA SECCIONADORAS

Ancho de corte, refilado por lado, tolerancia, modo coste, dirección de veta y coincidencia de veta, número máximo de fases de corte, minimización de giros — las mismas opciones que ofrece la aplicación.

Constrúyelo, o invócalo

Un optimizador de corte parece un proyecto de fin de semana y se convierte en una larga cola de casos límite: aritmética de kerf y refilado, stock que se agota, reglas de rotación y de veta, distribuciones que deben ser serrables de borde a borde, polígonos con agujeros — y una batería de regresión que demuestre que un cambio nunca empeora un plan. La Engine API es ese trabajo, ya hecho y medido.

LO QUE TE AHORRAS

Escribir y validar cuatro optimizadores — paneles guillotine 2D, stock lineal 1D, madera por sección transversal y anidado de forma real — y mantenerlos correctos a medida que crecen tus requisitos. Tu equipo integra un único contrato HTTP en su lugar.

LO QUE PUEDES COMPROBAR

La calidad del plan está publicada, no solo declarada: el benchmark abierto ejecuta el motor sobre conjuntos académicos públicos y trabajos generados, con el método y los resultados en bruto descargables. Ejecuta las mismas instancias contra cualquier otra opción que estés considerando.

LO QUE HACE FALTA PARA EMPEZAR

Un precio en la página, una prueba de 14 días y una clave desde tu panel — sin llamada de ventas ni negociación de licencia antes de poder probarlo. Los endpoints de validate no necesitan clave en absoluto.

LO QUE SIGUE SIENDO TUYO

Tu modelo de datos, tu interfaz y tus reglas de precios. Las llamadas síncronas no almacenan nada; un job asíncrono max conserva su resultado solo durante una ventana de retención corta para que puedas consultarlo. Un objeto meta en cualquier pieza o tablero vuelve tal cual, así el plan cuadra con tus registros.

Ver el benchmark completo →

¿Prefieres una pantalla de pedido lista en lugar de construirla?

CutOptim Configurator funciona con este motor →Conectar tu tienda o ERP →

Precios

Studio
€49/mes
3,000 solicitudes / mes — límite fijo, sin excedentes, sin facturas sorpresa
Prueba de 14 días · facturada en EUR · una vez alcanzado el límite, las llamadas devuelven 402 hasta que cambia el mes
Scale
€149/mes
10,000 solicitudes / mes — límite fijo, sin excedentes, sin facturas sorpresa
Sin prueba · facturada en EUR · cambio de plan desde tu panel

Cada solicitud cuenta igual, también el anidado · Te enviamos un correo al llegar al 90 % de la cuota y cuando se agota.

Pruébala gratis: una clave de demostración pública en la referencia de la API y claves de prueba con 1,000 solicitudes al mes que nunca se facturan

Volúmenes mayores. 10,000 solicitudes al mes es el plan estándar, no un techo de lo que podemos ejecutar. Si necesitas más — mayor volumen, claves separadas para staging y producción, o un acuerdo dedicado — dinos tus cifras y lo presupuestamos de forma individual. Cuéntanos tu volumen →

Al suscribirte aceptas: Engine API Service Terms (en inglés).

Los planes habituales de CutOptim (Free / Pro / Taller) no tienen relación con la API — el optimizador integrado en la aplicación sigue incluido en ellos. Ver precios de la aplicación →

Qué entra, qué sale

Un trabajo real por modo: arriba el cuerpo de la petición, debajo el plan devuelto, dibujado directamente a partir de la respuesta.

EntraPOST /v1/optimize/2d
{
  "parts": [
    { "name": "Side", "w": 720, "h": 560, "qty": 6 },
    { "name": "Bottom", "w": 764, "h": 560, "qty": 3 },
    { "name": "Top", "w": 764, "h": 560, "qty": 3 },
    { "name": "Shelf", "w": 762, "h": 520, "qty": 3 },
    { "name": "Rail", "w": 764, "h": 100, "qty": 6 },
    { "name": "Plinth", "w": 764, "h": 120, "qty": 6 },
    { "name": "Door", "w": 397, "h": 716, "qty": 6, "rotatable": false },
    { "name": "Drawer front", "w": 796, "h": 176, "qty": 3 }
  ],
  "stock": [
    { "w": 2800, "h": 2070, "qty": 5, "price": 38.5 }
  ],
  "options": { "kerf": 4, "trim": { "left": 10, "right": 10, "top": 10, "bottom": 10 } }
}
Usa una clave de demostración pública — limitada, solo trabajos pequeños, nunca se factura.
Sale200 · sheets[].parts
Tableros
2
sheetCount
Aprovechamiento
80,31 %
yieldPct
Piezas colocadas
36 / 36
placed
Líneas de corte
39
cutLines
Coste de material
77
totalPrice

Una fila de muebles bajos en aglomerado estándar. Las puertas conservan la veta (rotatable: false); el resto de piezas puede girar.

¿La imagen directamente de la API? En 2D y nesting, añade "svg" a include y la respuesta trae el dibujo.

Cada dibujo sale de las coordenadas de la respuesta: nada se coloca a mano. Los cuatro trabajos los resuelve el mismo motor que usa la API, y nuestra batería de pruebas los vuelve a resolver para que las cifras sigan siendo ciertas.

Qué hace la API

Cuatro modos de corte

Una llamada para cada uno: paneles 2D, material lineal 1D, madera con emparejamiento de sección y anidado de forma real de polígonos irregulares — POST /v1/optimize/2d, /1d, /wood y /nest.

Anidado de forma real

POST /v1/optimize/nest empaqueta polígonos arbitrarios (con holes) en tableros fijos, encajando las piezas en las cavidades cóncavas de las demás — 6 tableros donde las mismas piezas por su bounding box necesitan 9. Para láser, plasma y chorro de agua. Incluye zonas de exclusión por tablero (un defecto, una brida).

Consciente del material

Etiqueta las piezas y el stock con un material y el optimizador particiona el trabajo: cada material se corta solo de su propio stock. En todos los modos; se devuelve un resumen por material.

Canteado

Nombra un tipo de canto por borde (2D) y la respuesta totaliza los metros lineales por tipo — por pieza y por pedido. Metadato: nunca mueve una pieza.

Coincidencia de veta

Nombra las piezas cuya veta debe continuar —un frente de cajón sobre dos puertas— en un conjunto (matchedSets, 2D), y se cortan una junto a otra de una misma pieza de tablero, a un kerf de distancia. Cada miembro vuelve con su conjunto y su posición, y las exportaciones CSV, SVG y DXF también los marcan.

Exportación en línea (SVG · DXF · CSV)

Pide include:["svg","csv","dxf"] y la respuesta lleva la distribución como un archivo listo para usar, en línea — un dibujo SVG 2D autónomo, un DXF R12/AC1009 o una lista de corte CSV. Sin almacenamiento, sin una segunda llamada.

Traspaso de metadatos

Adjunta un objeto meta — el número de artículo de tu ERP, el id de línea de pedido, la referencia del cliente — a cualquier pieza o fila de material y vuelve literalmente en cada pieza colocada y cada sheet/rod, para que el plan cuadre con tu sistema.

Validación gratuita

POST /v1/validate/{2d,1d,wood} valida el esquema del mismo cuerpo sin resolver — sin clave, sin cuota. Comprueba que una carga útil no será rechazada y obtén avisos de viabilidad antes de gastar una llamada.

Coste o desperdicio

minimizeCost ordena por la factura total más baja entre los tamaños de stock con precio, mezclando formatos; por defecto se minimiza el material. Ambos ejecutan el mismo algoritmo guillotine.

Prioridad de stock y stock limitado

Marca el stock que se agota primero, trata las cantidades como un tope estricto con respectStock y señala las piezas de corte obligatorio, que ganan sitio en el tablero cuando el material escasea.

Un plan de corte real

No solo rectángulos: la secuencia de corte guillotine con las posiciones de tope por paso, líneas de corte frente a pasadas de sierra, la longitud serrada y un indicador de fabricabilidad en seccionadora.

Parámetros de seccionadora

kerf, refilado por lado, tolerancia, dirección de veta, matched sets, maxCutStages y minimización de giros — las mismas opciones que ofrece la aplicación.

Determinista & OpenAPI

La misma entrada siempre devuelve la misma salida — cachéala y compárala (la búsqueda max de anidado, opcional y con tiempo limitado, informa deterministic: false). Una versión de motor fijable y un documento OpenAPI 3.1 describen todo el contrato.

Piezas desde archivos CAD

Envía un SVG o un DXF en lugar de coordenadas: parts[].source lee el contorno y sus agujeros del dibujo, y POST /v1/import/nest divide antes un archivo con varias piezas. No se almacena nada — el archivo se procesa en memoria y desaparece con la respuesta.

Servidor MCP para asistentes de IA

Claude Code, Cursor, VS Code y Claude Desktop llaman al motor como herramientas a través de https://api.cutoptim.com/mcp, con la misma clave de API y la misma cuota que REST. También se ejecuta en local como el paquete npm @cutoptim/mcp.

Guía MCP →EN

Dos velocidades: presupuesta ahora, ahorra material después

La mayoría de integraciones necesitan ambas — una respuesta mientras el cliente espera, y un plan más ajustado cuando el trabajo pasa a la máquina. Tú eliges por llamada.

INSTANTÁNEO

Los motores síncronos — heuristic para 2D, 1D y madera, lbf para el anidado — responden dentro de la propia solicitud HTTP, de forma determinista, así que el plan detrás de un presupuesto es el plan detrás del pedido.

MAX

Envía el trabajo con engine: "max" y consulta GET /v1/jobs/{id} para obtener el resultado. En paneles 2D busca hacia el óptimo probado; en el anidado de forma real dedica un presupuesto de tiempo (options.timeBudgetMs) a buscar menos tableros y nunca devuelve más que la respuesta instantánea.

La respuesta tiene la misma forma en ambos casos. En 2D, el motor max acepta un conjunto de opciones más reducido que heuristic (la referencia las enumera), y un trabajo de anidado con zonas de exclusión lo sigue sirviendo lbf.

Qué motor sirve cada modo

El endpoint al que haces POST elige el modo; el parámetro engine elige el algoritmo. El motor heuristic por defecto sirve 2D, 1D y madera; balanced es solo 2D; el motor max asíncrono sirve paneles 2D y el anidado de forma real; y el anidado tiene su propio motor lbf por defecto. El mismo motor que la aplicación, sobre HTTP.

Modo · endpointMotor · algoritmoPaneles 2D/v1/optimize/2dLineal 1D/v1/optimize/1dMadera · sección transversal/v1/optimize/woodAnidado de forma real/v1/optimize/nestheuristicpor defecto · síncronobalancedopcional · solo 2Dmaxasíncrono · 2D + anidadolbfanidado · por defectoEn 1D y madera, balanced simplemente es un alias de heuristic (la respuesta lo indica).
  • heuristic — El motor por defecto — un empaquetador guillotine multiestrategia. El mayor aprovechamiento, cada distribución es cortable con sierra y siempre devuelve un plan de corte. Sirve 2D, 1D y madera.
  • balanced — Un empaquetador libre MaxRects opcional para 2D. Mucho más rápido en trabajos muy grandes a cambio de un aprovechamiento algo menor, pero sus distribuciones a menudo no pueden cortarse de borde a borde, así que no llevan plan de corte.
  • max — El nivel asíncrono: envías el trabajo y consultas GET /v1/jobs/{id} para el resultado. En 2D es una búsqueda en árbol que alcanza el óptimo probado en muchos más trabajos, con un tiempo de segundos a un minuto por resolución — sigue siendo determinista y cortable con sierra. En el anidado de forma real ejecuta primero lbf y luego dedica un presupuesto de tiempo a buscar una distribución con menos tableros, sin devolver nunca más; esa búsqueda tiene un tiempo limitado, así que sus anidados dicen deterministic: false.
  • lbf — El motor por defecto del anidado de forma real. Empaqueta polígonos irregulares en las cavidades de las demás piezas para láser, plasma y chorro de agua — de forma instantánea y determinista. max (arriba) puede después buscar en el mismo trabajo una distribución con menos tableros.

Qué endpoint para cada material: los tableros planos — contrachapado, MDF, vidrio, acrílico, chapa metálica — van a /v1/optimize/2d; barras, tubo, tubería y perfil a /v1/optimize/1d; madera estructural (un 50×150 solo a partir de 50×150) a /v1/optimize/wood; polígonos irregulares para láser, plasma y chorro de agua a /v1/optimize/nest.

Una llamada, un plan completo

curl https://api.cutoptim.com/v1/optimize/2d \
  -H "Authorization: Bearer co_live_…" \
  -H "Content-Type: application/json" \
  -d '{
    "parts": [
      { "name": "Door",    "w": 600, "h": 400, "qty": 4 },
      { "name": "Shelf",   "w": 800, "h": 300, "qty": 6 }
    ],
    "stock":   [{ "w": 2440, "h": 1220, "price": 42 }],
    "options": { "kerf": 3, "effort": "balanced" },
    "engine":  "heuristic"
  }'

Devuelve:

{
  "metrics": { "sheetCount": 1, "yieldPct": 80.62, "placed": 10, "total": 10,
               "cutLines": 10, "sawPasses": 13, "cutLength": 10720, "totalPrice": 42 },
  "sheets":  [ … ],
  "cutPlan": [{ "sheet": 0, "step": 1, "axis": "h", "pos": 400, "length": 2440, "stage": 1 }, … ],
  "guillotineValid": true,
  "engineVersion": "1.0.0+10e0c941",
  "deterministic": true
}

La estructura completa de la solicitud y la respuesta, todas las opciones, todos los códigos de error y todos los motores:Referencia de la API → · Guía de integración →

¿Fast o denso? Elige con una sola opción

La opción effort equilibra el tiempo de cálculo frente al aprovechamiento. Aquí está ese compromiso, medido en un trabajo exigente — cada cifra proviene del packer real.

Interruptor effort: aprovechamiento del material vs tiempo de cálculoInterruptor effort: aprovechamiento del material vs tiempo de cálculo. fast: 350 tableros · 76.2% · ≈1.9 s. balanced: 330 tableros · 80.8% · ≈4.8 s. max: reservado — más denso exige búsqueda más lenta. En la mayoría de los trabajos (más pequeños) ambos son idénticos; la diferencia solo se abre en trabajos grandes como este. balanced es el valor predeterminado y nunca es más denso de lo que fast puede alcanzar.Interruptor effort: aprovechamiento del material vs tiempo de cálculoUn trabajo exigente — unas 1550 piezas en un tablero de 2,07 × 5,6 m. Cada cifra medida en el packer real.74%76%78%80%82%84%02 s4 s6 stiempo de cálculo · más rápido →aprovechamiento del material · más denso ↑⇄ el interruptor effort+4,6 pts aprov. · −20 tableros−5,7% material · ≈2,5× más lentofast350 tableros · 76.2% · ≈1.9 s★ balanced · predeterminado330 tableros · 80.8% · ≈4.8 smaxreservadomás denso exigebúsqueda máslenta
En la mayoría de los trabajos (más pequeños) ambos son idénticos; la diferencia solo se abre en trabajos grandes como este. balanced es el valor predeterminado y nunca es más denso de lo que fast puede alcanzar.

Y en cualquier caso es rápido: incluso los trabajos de producción más grandes — 2000 piezas o más — se resuelven en segundos con el motor predeterminado, holgadamente dentro del presupuesto de tiempo de la API.

Soluciones por sector

El mismo motor, presentado según cómo corta cada oficio. Cada página muestra el endpoint, una solicitud y una respuesta, y los campos que importan para ese material.

El motor trabaja con geometría, no con un catálogo de materiales: chapa y plancha metálica, tableros derivados de la madera, vidrio, plásticos y acrílico, composites, espuma, cartón y papel pasan todos por los mismos endpoints. El material solo cambia los números que envías — kerf o separación entre piezas, holgura de borde, tamaños de stock.

Recurso descargable
Engine API one-pager

The why, what and how of the CutOptim Engine API on two pages — the four modes, a real request and its plan, how to try it free, and the two plans. Print-ready, with a QR back to this page.

PDF2 pagesFree
Descargar el PDF

Preguntas frecuentes

¿CutOptim tiene una API?
Sí — la API CutOptim Engine expone el mismo motor de corte por HTTP, para un ERP, una herramienta de presupuestos o software de máquina, en los tres modos de la app: paneles 2D, lineal 1D y madera con emparejamiento de sección.
¿Hay una API para corte por láser, plasma o chorro de agua?
Sí — el anidado true-shape de polígonos irregulares es el cuarto modo de la API Engine, POST /v1/optimize/nest. Envías cada pieza como un contorno poligonal (con agujeros opcionales) junto con las chapas de stock; el motor encaja las piezas en los huecos cóncavos de las demás y devuelve la colocación de cada copia, de modo que un trabajo de láser, plasma o chorro de agua anida mucho más apretado que un rectángulo envolvente — en un trabajo representativo de 272 piezas, 6 chapas donde las mismas piezas por caja envolvente necesitan 9. Zonas de exclusión por chapa (un defecto, una brida) y rotación continua vienen incluidas; el espaciado entre piezas (minSeparation) y el margen en el borde de la chapa (edgeClearance) se fijan por separado, y la respuesta totaliza las chapas usadas por tamaño de stock — mezclando tamaños cuando resulta más barato — y da la longitud de corte y el número de perforaciones de cada chapa, además del ancho y el alto usados desde su esquina (para facturar solo parte de la chapa; la chapa menos llena se compacta hacia esa esquina). La app ofrece el mismo anidado en su propio modo Nesting.
¿La API Engine es determinista?
Sí. La misma entrada devuelve la misma salida, así que las respuestas son cacheables y comprobables, y la versión del motor se puede fijar para resultados reproducibles. La única excepción opcional es el motor max del anidado de forma real: su búsqueda está limitada en el tiempo, así que informa deterministic: false en cada respuesta.
¿Qué contiene una respuesta de optimización?
El layout completo, un plan de corte de guillotina con posiciones de parada por paso y las métricas (número de tableros, aprovechamiento, líneas de corte, pasadas de sierra, longitud aserrada). El endpoint 2D también devuelve los metros de canteado por tipo, y cada endpoint acepta una etiqueta de material y devuelve un resumen por material. También puedes pedir el layout como SVG, DXF o CSV inline y adjuntar un objeto meta a piezas y stock, que se devuelve tal cual.
¿La API puede darme un dibujo, no solo coordenadas?
Sí. Añade include:["svg","csv","dxf"] a una solicitud de optimización y la respuesta lleva el layout como archivo listo, inline: un dibujo SVG 2D autónomo, un DXF R12/AC1009 o una lista de corte CSV. Sin almacenamiento y sin una segunda llamada. El SVG es solo 2D; una solicitud 1D o de madera devuelve un aviso en su lugar.
¿Puedo adjuntar mis propios ID a las piezas y volver a leerlos?
Sí. Cualquier fila de pieza o stock puede llevar un objeto meta — tu número de artículo ERP, el id de línea de pedido o la referencia de cliente —, y vuelve tal cual en cada pieza colocada y cada tablero o barra, de modo que el plan de corte se concilia con tu propio sistema. Nunca afecta al layout.
¿Puedo comprobar una solicitud sin gastar una llamada?
Sí. POST /v1/validate/2d, /1d o /wood valida por esquema el mismo cuerpo que acepta el endpoint de optimización correspondiente, sin resolver — sin clave y sin cuota. Un 400 nombra el campo exacto erróneo y obtienes avisos de viabilidad (una pieza que no cabe en ningún stock) antes de gastar una llamada real.
¿Hay SDK, webhooks o trabajos asíncronos?
Sí. Hay SDK oficiales para TypeScript (npm @cutoptim/engine), Python (PyPI cutoptim) y PHP (Composer cutoptim/engine), de código abierto en github.com/cutoptim y generados a partir de la especificación OpenAPI 3.1 — para cualquier otro lenguaje, apunta un generador de código al mismo documento. La mayoría de las llamadas de optimización son HTTP síncrono simple que devuelve el plan terminado directamente. La única excepción es el motor asíncrono max, para paneles 2D y para el anidado de forma real: POST /v1/optimize/2d o /v1/optimize/nest con engine:"max" devuelve 202 Accepted con un jobId, y consultas GET /v1/jobs/{id} hasta que termina — para cuando un plan mejor vale de unos segundos a unos minutos de cálculo. En lugar de consultar, registra un webhook en tu panel: envía un POST firmado cuando el trabajo termina.
¿Cuáles son los límites de solicitud?
Hasta 2.000 piezas, 50 filas de stock y un cuerpo de solicitud de 1 MB por llamada. Incluso los trabajos más grandes se resuelven en segundos de un dígito, cómodamente dentro del presupuesto de tiempo.
Gestionar claves de API