Pular para o conteúdo principal
PARA DESENVOLVEDORES

CutOptim Engine API

Uma API de otimização de corte: envie peças e estoque — painéis 2D, barras 1D, madeira ou nesting de peças irregulares pela forma real — e receba o layout, o plano de corte e o aproveitamento. Por padrão a mesma requisição sempre devolve o mesmo plano.

Ver o benchmark completo (EN) → · Medido, não alegado

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
Uma chamada real para POST /v1/optimize/nest — a requisição e a chapa que voltou, desenhada a partir das coordenadas da resposta.

Por que construir sobre ele

DETERMINÍSTICO

A mesma entrada sempre devolve a mesma saída — sem aleatoriedade, sem relógio no algoritmo. Você pode guardar resultados em cache e compará-los em testes. A única exceção opcional, a busca max de nesting limitada por tempo, avisa isso em toda resposta (deterministic: false).

UM PLANO DE CORTE REAL

Não só retângulos: a sequência de cortes guilhotina, linhas de corte vs. passadas de serra, comprimento serrado e um indicador de que o plano é executável numa seccionadora.

FEITO PARA SECCIONADORA

Espessura da serra, refilo por lado, tolerância, modo de custo, sentido do veio e casamento de veio, número máximo de estágios de corte, minimização de rotações — as mesmas opções que o app oferece.

Construir ou chamar a API

Um otimizador de corte parece um projeto de fim de semana e vira uma longa cauda de casos-limite: a aritmética de espessura de serra e refilo, estoque que acaba, regras de rotação e veio, layouts que precisam ser serráveis de ponta a ponta, polígonos com furos — e uma suíte de regressão que prove que uma mudança nunca piora um plano. A Engine API é esse trabalho, já feito e medido.

O QUE VOCÊ EVITA

Escrever e validar quatro otimizadores — painéis 2D guilhotina, estoque linear 1D, madeira por seção e nesting pela forma real — e mantê-los corretos conforme os requisitos crescem. A sua equipe integra um único contrato HTTP.

O QUE VOCÊ PODE VERIFICAR

A qualidade do plano é publicada, não alegada: o benchmark aberto roda o motor em conjuntos acadêmicos públicos e em trabalhos gerados, com o método e os resultados brutos para baixar. Rode as mesmas instâncias contra qualquer outra opção que estiver avaliando.

O QUE É PRECISO PARA COMEÇAR

Um preço na página, um teste de 14 dias e uma chave no seu painel — sem ligação de vendas e sem negociação de licença antes de testar. Os endpoints de validação nem precisam de chave.

O QUE CONTINUA SEU

O seu modelo de dados, a sua interface e as suas regras de preço. Chamadas síncronas não armazenam nada; um trabalho assíncrono max guarda o resultado só por um curto período de retenção, para você consultá-lo. Um objeto meta em qualquer peça ou chapa volta intacto, para o plano bater com os seus registros.

Ver o benchmark completo (EN) →

Precisa de uma tela de pedidos pronta em vez de construir uma?

O CutOptim Configurator roda neste motor →Conecte a sua loja ou ERP (EN) →

Preços

Studio
€49/mês
3,000 requisições / mês — limite rígido, sem excedente, sem conta surpresa
Teste de 14 dias · cobrado em EUR · ao atingir o limite, as chamadas devolvem 402 até virar o mês
Scale
€149/mês
10,000 requisições / mês — limite rígido, sem excedente, sem conta surpresa
Sem teste · cobrado em EUR · troque de plano no seu painel

Toda requisição conta igual — nesting incluído · Enviamos um e-mail quando você atinge 90% da cota e quando ela acaba.

Teste grátis: uma chave de demonstração pública na referência da API e chaves de teste com 1,000 requisições por mês que nunca são cobradas

Volumes maiores. 10,000 requisições por mês é o plano padrão, não um teto do que conseguimos rodar. Se precisar de mais — volume maior, chaves separadas para homologação e produção, ou um acordo dedicado — conte os seus números e fazemos um preço individual. Conte o seu volume →

Ao assinar, você aceita os Termos de Serviço da Engine API (em inglês).

Os planos normais do CutOptim (Free / Pro / Workshop) não têm relação com a API — o otimizador do app continua incluído neles. Ver os preços do app →

O que entra, o que sai

Um trabalho real por modo: o corpo da requisição em cima e, embaixo, o plano que voltou, desenhado direto da resposta.

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 uma chave de demonstração pública — limitada, só trabalhos pequenos, nunca cobrada.
Sai200 · sheets[].parts
Chapas
2
sheetCount
Aproveitamento
80,31%
yieldPct
Peças posicionadas
36 / 36
placed
Linhas de corte
39
cutLines
Custo do material
77
totalPrice

Uma linha de armários de base em MDP padrão. As portas mantêm o veio (rotatable: false); todas as outras peças podem girar.

Quer a imagem direto da API? Em 2D e nesting, adicione "svg" ao include e a resposta traz o desenho.

Todo desenho é feito com as coordenadas da resposta — nada é posicionado à mão. Os quatro trabalhos são resolvidos pelo mesmo motor que a API roda, e a nossa suíte de testes os resolve de novo para os números continuarem verdadeiros.

O que a API faz

Quatro modos de corte

Uma chamada para cada: painéis 2D, estoque linear 1D, madeira com casamento de seção e nesting de polígonos irregulares pela forma real — POST /v1/optimize/2d, /1d, /wood e /nest.

Nesting pela forma real

POST /v1/optimize/nest encaixa polígonos arbitrários (com furos) em chapas fixas, intercalando as peças nas reentrâncias umas das outras — 6 chapas onde as mesmas peças pelo retângulo envolvente precisam de 9. Para laser, plasma e jato d’água. Zonas de exclusão por chapa (um defeito, um grampo) vêm junto.

Ciente do material

Marque peças e estoque com um material e o otimizador divide o trabalho: cada material é cortado só do próprio estoque. Em todos os modos; volta um resumo por material.

Fita de borda

Indique um tipo de fita por borda (2D) e a resposta soma os metros por tipo — por peça e por pedido. São metadados: nunca movem uma peça.

Casamento de veio

Indique as peças cujo desenho deve continuar — uma frente de gaveta sobre duas portas — num conjunto casado (matchedSets, 2D), e elas são cortadas lado a lado de um mesmo pedaço de chapa, a uma espessura de serra uma da outra. Cada membro volta com o seu conjunto e posição, e as exportações CSV, SVG e DXF também os marcam.

Exportação inline (SVG · DXF · CSV)

Peça include:["svg","csv","dxf"] e a resposta traz o layout como arquivo pronto, inline — um desenho SVG 2D independente, um DXF R12/AC1009 ou uma lista de corte CSV. Sem armazenamento, sem segunda chamada.

Repasse de metadados

Anexe um objeto meta — o código do item no seu ERP, o id da linha do pedido, a referência do cliente — a qualquer peça ou linha de estoque e ele volta intacto em cada peça posicionada e em cada chapa ou barra, para o plano bater com o seu sistema.

Validação grátis

POST /v1/validate/{2d,1d,wood,nest} valida o mesmo corpo pelo schema sem resolver — sem chave, sem cota. Confirme que um payload não será recusado e receba avisos de viabilidade antes de gastar uma chamada.

Custo ou desperdício

minimizeCost ordena pelo menor custo total entre tamanhos de estoque com preço, misturando formatos; o padrão minimiza o material. Os dois usam o mesmo algoritmo guilhotina.

Prioridade e estoque limitado

Marque o estoque a ser usado primeiro, trate as quantidades como limite rígido com respectStock e marque peças obrigatórias que ganham espaço na chapa quando falta material.

Um plano de corte real

Não só retângulos: a sequência de cortes guilhotina com as posições de batente de cada passo, linhas de corte vs. passadas de serra, comprimento serrado e um indicador de execução numa seccionadora.

Parâmetros de seccionadora

kerf, refilo por lado, tolerância, sentido do veio, conjuntos casados, maxCutStages e minimização de rotações — as mesmas opções que o app oferece.

Determinístico e OpenAPI

A mesma entrada sempre devolve a mesma saída — guarde em cache e compare (a busca max de nesting, opcional e limitada por tempo, informa deterministic: false). Uma versão de motor fixável e um documento OpenAPI 3.1 descrevem todo o contrato.

Peças de arquivos CAD

Envie um SVG ou DXF em vez de coordenadas: parts[].source lê o contorno e os furos do desenho, e POST /v1/import/nest separa antes um arquivo com várias peças. Nada é armazenado — o arquivo é lido na memória e some com a resposta.

Servidor MCP para assistentes de IA

Claude Code, Cursor, VS Code e Claude Desktop chamam o motor como ferramentas através de https://api.cutoptim.com/mcp, com a mesma chave de API e a mesma cota do REST. Também roda localmente como o pacote npm @cutoptim/mcp.

Guia MCP →EN

Duas velocidades: orce agora, economize material depois

A maioria das integrações precisa das duas — uma resposta enquanto o cliente espera e um plano mais apertado quando o trabalho vai para a máquina. Você escolhe a cada chamada.

NA HORA

Os motores síncronos — heuristic para 2D, 1D e madeira, lbf para nesting — respondem dentro da requisição HTTP, de forma determinística, então o plano por trás do orçamento é o plano por trás do pedido.

MAX

Envie o trabalho com engine: "max" e consulte GET /v1/jobs/{id} até o resultado. Em painéis 2D ele busca o ótimo comprovado; no nesting pela forma real usa um orçamento de tempo (options.timeBudgetMs) procurando menos chapas e nunca devolve mais que a resposta imediata.

A resposta tem o mesmo formato nos dois casos. Em 2D o motor max aceita um conjunto mais restrito de opções que o heuristic (a referência as lista), e um nesting com zonas de exclusão continua sendo atendido pelo lbf.

Qual motor atende cada modo

O endpoint para o qual você faz o POST escolhe o modo; o parâmetro engine escolhe o algoritmo. O motor padrão heuristic atende 2D, 1D e madeira; balanced é só 2D; o motor assíncrono max atende painéis 2D e nesting pela forma real; e o nesting usa por padrão o seu próprio motor lbf. O mesmo motor do app, via HTTP.

Modo · endpointMotor · algoritmoPainéis 2D/v1/optimize/2dLinear 1D/v1/optimize/1dMadeira · seção/v1/optimize/woodNesting pela forma real/v1/optimize/nestheuristicpadrão · síncronobalancedopcional · só 2Dmaxassíncrono · 2D + nestlbfnesting · padrãoEm 1D e madeira, balanced é apenas um apelido de heuristic (a resposta informa isso).
  • heuristic — O padrão — um empacotador guilhotina com várias estratégias. Maior aproveitamento, todo layout é cortável na serra e sempre devolve um plano de corte. Atende 2D, 1D e madeira.
  • balanced — Um nester livre MaxRects opcional para 2D. Muito mais rápido em trabalhos muito grandes, com aproveitamento um pouco menor, mas os layouts muitas vezes não podem ser serrados de ponta a ponta, então não trazem plano de corte.
  • max — O nível assíncrono: você envia o trabalho e consulta GET /v1/jobs/{id} até o resultado. Em 2D é uma busca em árvore que chega ao ótimo comprovado em muito mais trabalhos, com segundos a um minuto por solução — ainda determinística e cortável na serra. No nesting pela forma real roda primeiro o lbf, depois usa um orçamento de tempo procurando um layout com menos chapas e nunca devolve mais; essa busca é limitada por tempo, então os seus nestings informam deterministic: false.
  • lbf — O padrão do nesting pela forma real. Encaixa polígonos irregulares nas reentrâncias uns dos outros para laser, plasma e jato d’água — na hora e de forma determinística. O max (acima) pode então buscar o mesmo trabalho com menos chapas.

Qual endpoint para qual material: chapas planas — compensado, MDF, vidro, acrílico, chapa metálica — vão para /v1/optimize/2d; barras, tubos e perfis para /v1/optimize/1d; madeira estrutural (um 50×150 só de 50×150) para /v1/optimize/wood; polígonos irregulares para laser, plasma e jato d’água para /v1/optimize/nest.

Uma chamada, um plano 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"
  }'

Volta como:

{
  "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
}

Formato completo de requisição e resposta, cada opção, todos os códigos de erro e todos os motores:Referência da API (EN) → · Guia de integração (EN) →

Rápido ou denso? Escolha com uma opção

A opção effort troca tempo de solução por aproveitamento. Aqui está essa troca, medida num trabalho exigente — cada número vem do empacotador real.

Chave effort: aproveitamento do material vs. tempo de soluçãoChave effort: aproveitamento do material vs. tempo de solução. fast: 350 chapas · 76.2% · ≈1.9 s. balanced: 330 chapas · 80.8% · ≈4.8 s. max: reservado — mais denso exige uma busca mais lenta. Na maioria dos trabalhos (menores) os dois são idênticos; a diferença só aparece em trabalhos grandes como este. balanced é o padrão e nunca é mais denso do que fast consegue.Chave effort: aproveitamento do material vs. tempo de soluçãoUm trabalho exigente — cerca de 1.550 peças numa chapa de 2,07 × 5,6 m. Cada número medido no empacotador real.74%76%78%80%82%84%02 s4 s6 stempo de solução · mais rápido →aproveitamento · mais denso ↑⇄ a chave effort+4,6 pts de aproveitamento · −20 chapas−5,7% de material · ≈2,5× mais lentofast350 chapas · 76.2% · ≈1.9 s★ balanced · padrão330 chapas · 80.8% · ≈4.8 smaxreservadomais denso exigeuma busca maislenta
Na maioria dos trabalhos (menores) os dois são idênticos; a diferença só aparece em trabalhos grandes como este. balanced é o padrão e nunca é mais denso do que fast consegue.

E é rápido de qualquer jeito: até os maiores trabalhos de produção — 2.000 peças ou mais — resolvem em poucos segundos no motor padrão, folgadamente dentro do orçamento de tempo da API.

Soluções por setor

O mesmo motor, posicionado para o jeito de cortar de cada setor. Cada página (em inglês) mostra o endpoint, uma requisição e uma resposta, e os campos que importam para aquele material.

O motor trabalha com geometria, não com um catálogo de materiais: chapa metálica, painéis de madeira, vidro, plásticos e acrílico, compósitos, espuma, papelão e papel passam pelos mesmos endpoints. O material só muda os números que você envia — espessura de serra ou espaçamento entre peças, folga da borda, medidas de estoque.

Material para baixar
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
Baixar o PDF

Perguntas frequentes

O CutOptim tem uma API?
Sim — a CutOptim Engine API expõe o mesmo motor de corte via HTTP, para um ERP, um sistema de orçamento ou software de máquina, nos três modos que o app tem: painéis 2D, linear 1D e madeira com casamento de seção.
Existe uma API para corte a laser, plasma ou jato d’água?
Sim — o nesting de polígonos irregulares pela forma real é o quarto modo da Engine API, POST /v1/optimize/nest. Você envia cada peça como um contorno de polígono (com furos opcionais) mais as chapas de estoque; o motor intercala as peças nas reentrâncias umas das outras e devolve a posição de cada cópia, então um trabalho de laser, plasma ou jato d’água fica muito mais compacto do que pelo retângulo envolvente — num trabalho representativo de 272 peças, 6 chapas onde as mesmas peças pelo retângulo envolvente precisam de 9. Zonas de exclusão por chapa (um defeito, um grampo) e rotação contínua vêm junto; o espaçamento entre peças (minSeparation) e a folga na borda da chapa (edgeClearance) são definidos separadamente, e a resposta soma as chapas usadas por tamanho de estoque — misturando tamanhos quando sai mais barato — e dá o comprimento de corte e o número de perfurações de cada chapa, além da largura e altura usadas a partir do canto da chapa (para cobrar parte de uma chapa; a chapa menos preenchida é compactada nesse canto). O app tem o mesmo nesting no seu modo Nesting.
A Engine API é determinística?
Sim. A mesma entrada devolve a mesma saída, então as respostas podem ir para cache e ser testadas, e a versão do motor pode ser fixada para resultados reproduzíveis. A única exceção opcional é o motor max de nesting: a busca dele é limitada por tempo, então ele informa deterministic: false em toda resposta.
O que vem numa resposta de otimização?
O layout completo, um plano de corte guilhotina com as posições de batente de cada passo e as métricas (número de chapas, aproveitamento, linhas de corte, passadas de serra, comprimento serrado). O endpoint 2D também devolve os metros de fita de borda por tipo, e todo endpoint aceita uma marca de material e devolve um resumo por material. Você também pode pedir o layout como SVG, DXF ou CSV inline, e anexar a peças e estoque um objeto meta que volta intacto.
A API pode me dar um desenho, não só coordenadas?
Sim. Adicione include:["svg","csv","dxf"] a uma requisição de otimização e a resposta traz o layout como arquivo pronto, inline: um desenho SVG 2D independente, um DXF R12/AC1009 ou uma lista de corte CSV. Sem armazenamento e sem segunda chamada. O SVG é só 2D; uma requisição 1D ou de madeira devolve um aviso no lugar.
Posso anexar os meus próprios IDs às peças e lê-los de volta?
Sim. Qualquer linha de peça ou de estoque pode levar um objeto meta — o código do item no seu ERP, o id da linha do pedido ou a referência do cliente — e ele volta intacto em cada peça posicionada e em cada chapa ou barra, para o plano de corte bater com o seu sistema. Ele nunca afeta o layout.
Posso verificar uma requisição sem gastar uma chamada?
Sim. POST /v1/validate/2d, /1d ou /wood valida pelo schema o mesmo corpo que o endpoint de otimização correspondente aceita, sem resolver — sem chave e sem cota. Um 400 indica exatamente o campo errado, e você recebe avisos de viabilidade (uma peça que não cabe em nenhum estoque) antes de gastar uma chamada real.
Existem SDKs, webhooks ou trabalhos assíncronos?
Sim. Há SDKs oficiais para TypeScript (npm @cutoptim/engine), Python (PyPI cutoptim) e PHP (Composer cutoptim/engine), de código aberto em github.com/cutoptim e gerados a partir da especificação OpenAPI 3.1 — para qualquer outra linguagem, passe o mesmo documento a um gerador de código. A maioria das chamadas de otimização é HTTP síncrono simples, que devolve o plano pronto direto. A única exceção é o motor assíncrono max, para painéis 2D e para nesting pela forma real: POST /v1/optimize/2d ou /v1/optimize/nest com engine:"max" devolve 202 Accepted com um jobId, e você consulta GET /v1/jobs/{id} até terminar — para quando um plano melhor vale de alguns segundos a alguns minutos de cálculo. Em vez de consultar, registre um webhook no painel: ele envia um POST assinado quando o trabalho termina.
Quais são os limites de requisição?
Até 2.000 peças, 50 linhas de estoque e 1 MB de corpo por chamada. Até os maiores trabalhos de produção resolvem em poucos segundos, folgadamente dentro do orçamento de tempo.
Gerenciar chaves de API