Salta al contenuto principale
PER SVILUPPATORI

CutOptim Engine API

Un’API per l’ottimizzazione del taglio: invia pezzi e materiale — pannelli 2D, barre 1D, legno o nesting true-shape di pezzi irregolari — e ricevi lo schema, il piano di taglio e l’utilizzo. Di default la stessa richiesta restituisce sempre lo stesso piano.

Guarda il benchmark completo → · Misurato, non dichiarato

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 chiamata reale a POST /v1/optimize/nest: la richiesta e la lamiera restituita, disegnata dalle coordinate della risposta.

Perché svilupparci sopra

DETERMINISTICO

Lo stesso input restituisce sempre lo stesso output — nessuna casualità, nessun orologio nell’algoritmo. Puoi mettere in cache i risultati e confrontarne le differenze nei test. L’unica eccezione opt-in, la ricerca max per il nesting limitata nel tempo, lo dichiara in ogni risposta (deterministic: false).

UN VERO PIANO DI TAGLIO

Non solo rettangoli: la sequenza di taglio guillotine, le linee di taglio rispetto ai passaggi della lama, la lunghezza di taglio e un flag che dice se è realizzabile su una sezionatrice.

PENSATO PER LA SEZIONATRICE

Spessore della lama, rifilo per lato, tolleranza, modalità costo, direzione della venatura e corrispondenza venatura, numero massimo di fasi di taglio, minimizzazione delle rotazioni — le stesse opzioni che offre l’app.

Scrivilo tu, oppure richiamalo

Un ottimizzatore di taglio sembra un progetto da weekend, poi diventa una lunga coda di casi limite: aritmetica di spessore lama e rifilo, stock che si esaurisce, regole di rotazione e venatura, layout che devono essere tagliabili bordo a bordo, poligoni con fori — e una suite di regressione che dimostri che una modifica non peggiora mai un piano. L’Engine API è questo lavoro, già fatto e misurato.

COSA RISPARMI

Scrivere e validare quattro ottimizzatori — pannelli guillotine 2D, stock lineare 1D, legno per sezione e nesting true-shape — e mantenerli corretti man mano che crescono i tuoi requisiti. Il tuo team integra invece un unico contratto HTTP.

COSA PUOI VERIFICARE

La qualità dei piani è pubblicata, non dichiarata: il benchmark aperto esegue il motore su set di istanze accademiche pubbliche e su lavori generati, con metodo e risultati grezzi scaricabili. Esegui le stesse istanze su qualsiasi altra soluzione tu stia valutando.

COSA SERVE PER INIZIARE

Un prezzo in pagina, una prova di 14 giorni e una chiave dalla tua dashboard — nessuna chiamata commerciale e nessuna trattativa di licenza prima di poter testare. Gli endpoint validate non richiedono nemmeno una chiave.

COSA RESTA TUO

Il tuo modello dati, la tua UI e le tue regole di prezzo. Le chiamate sincrone non memorizzano nulla; un lavoro max asincrono conserva il risultato solo per una breve finestra di conservazione, così puoi interrogarlo. Un oggetto meta su qualsiasi pezzo o lastra torna invariato, così il piano si riconcilia con i tuoi archivi.

Guarda il benchmark completo →

Preferisci un’interfaccia d’ordine pronta invece di costruirne una?

CutOptim Configurator funziona su questo motore →Collega la tua piattaforma o ERP →

Prezzi

Studio
€49/mese
3,000 richieste / mese — limite rigido, nessun costo di superamento, nessuna fattura a sorpresa
Prova di 14 giorni · fatturazione in EUR · raggiunto il limite, le chiamate restituiscono 402 fino al rinnovo del mese
Scale
€149/mese
10,000 richieste / mese — limite rigido, nessun costo di superamento, nessuna fattura a sorpresa
Nessuna prova · fatturazione in EUR · cambio piano dalla dashboard

Ogni richiesta conta allo stesso modo — nesting compreso · Ti scriviamo al 90% della quota e quando è esaurita.

Provala gratis: una chiave demo pubblica nel riferimento API e chiavi di test con 1,000 richieste al mese, mai fatturate

Volumi maggiori. 10,000 richieste al mese sono il piano standard, non il limite di ciò che possiamo far girare. Se ti serve di più — un volume più alto, chiavi separate per staging e produzione, o un accordo dedicato — dicci i tuoi numeri e lo quotiamo individualmente. Dicci il tuo volume →

Abbonandoti accetti: Engine API Service Terms (in inglese).

I normali piani CutOptim (Gratuito / Pro / Officina) non hanno alcun legame con l’API — l’ottimizzatore integrato nell’app resta incluso in essi. Vedi i prezzi dell’app →

Cosa entra, cosa esce

Un lavoro reale per ogni modalità: sopra il corpo della richiesta, sotto il piano restituito, disegnato direttamente dalla risposta.

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 chiave demo pubblica — limitata, solo lavori piccoli, mai fatturata.
Esce200 · sheets[].parts
Pannelli
2
sheetCount
Resa
80,31%
yieldPct
Pezzi piazzati
36 / 36
placed
Linee di taglio
39
cutLines
Costo materiale
77
totalPrice

Una fila di basi cucina in truciolare standard. Le ante mantengono la venatura (rotatable: false); tutti gli altri pezzi possono ruotare.

Vuoi l'immagine direttamente dall'API? Per 2D e nesting aggiungi "svg" a include e la risposta contiene il disegno.

Ogni disegno nasce dalle coordinate della risposta: niente è posizionato a mano. I quattro lavori sono risolti dallo stesso motore che usa l'API, e la nostra suite di test li risolve di nuovo perché i numeri restino veri.

Cosa fa l’API

Quattro modalità di taglio

Una chiamata per ciascuna: pannelli 2D, materiale lineare 1D, legno con corrispondenza di sezione e nesting true-shape di poligoni irregolari — POST /v1/optimize/2d, /1d, /wood e /nest.

Nesting true-shape

POST /v1/optimize/nest dispone poligoni arbitrari (con holes) su pannelli fissi, incastrando i pezzi nelle rientranze concave gli uni degli altri — 6 pannelli dove gli stessi pezzi per bounding box ne richiedono 9. Per laser, plasma e getto d’acqua. Le zone di esclusione per pannello (un difetto, un morsetto) sono comprese.

Consapevole del materiale

Etichetta pezzi e stock con un material e l’ottimizzatore partiziona il lavoro: ogni material viene tagliato solo dal proprio stock. Su ogni modalità; torna un riepilogo per material.

Bordatura

Assegna un tipo di bordo per lato (2D) e la risposta totalizza i metri lineari per tipo — per pezzo e per ordine. Metadato: non sposta mai un pezzo.

Corrispondenza venatura

Indica i pezzi la cui figura deve proseguire — un frontale di cassetto sopra due ante — in un set con corrispondenza venatura (matchedSets, 2D): vengono tagliati affiancati da un unico pezzo di pannello, a un kerf di distanza. Ogni membro torna con il proprio set e la propria posizione, e anche gli export CSV, SVG e DXF li contrassegnano.

Export inline (SVG · DXF · CSV)

Chiedi include:["svg","csv","dxf"] e la risposta trasporta lo schema come file già pronto, inline — un disegno SVG 2D autonomo, un DXF R12/AC1009 o una distinta di taglio CSV. Nessuna archiviazione, nessuna seconda chiamata.

Passaggio dei metadati

Allega un oggetto meta — il codice articolo del tuo ERP, l’id della riga d’ordine, il riferimento cliente — a qualsiasi pezzo o riga di materiale e torna invariato su ogni pezzo posizionato e su ogni sheet/rod, così il piano si riconcilia con il tuo sistema.

Validazione gratuita

POST /v1/validate/{2d,1d,wood} valida lo schema dello stesso corpo senza risolvere — nessuna chiave, nessuna quota. Verifica che un payload non venga rifiutato e ottieni avvisi di fattibilità prima di spendere una chiamata.

Costo o sfrido

minimizeCost ordina in base alla spesa totale più bassa tra i formati di stock con prezzo, mescolandoli; l’impostazione predefinita minimizza il materiale. Entrambi eseguono lo stesso algoritmo guillotine.

Priorità di stock e stock limitato

Segna lo stock da esaurire per primo, tratta le quantità come un limite rigido con respectStock e contrassegna i pezzi da tagliare obbligatoriamente, che vincono lo spazio sulla lastra quando il materiale scarseggia.

Un vero piano di taglio

Non solo rettangoli: la sequenza di taglio guillotine con le posizioni di battuta per ogni passo, le linee di taglio rispetto ai passaggi della lama, la lunghezza di taglio e un flag di producibilità su sezionatrice.

Parametri della sezionatrice

kerf, rifilo per lato, tolleranza, direzione della venatura, set con corrispondenza venatura, maxCutStages e minimizzazione delle rotazioni — le stesse opzioni che offre l’app.

Deterministico & OpenAPI

Lo stesso input restituisce sempre lo stesso output — mettilo in cache e confrontalo (la ricerca max per il nesting, opt-in e limitata nel tempo, riporta deterministic: false). Una versione di motore fissabile e un documento OpenAPI 3.1 descrivono l’intero contratto.

Pezzi da file CAD

Invia un SVG o un DXF invece delle coordinate: parts[].source legge il contorno e i suoi fori dal disegno, e POST /v1/import/nest divide prima un file con più pezzi. Nulla viene memorizzato — il file è analizzato in memoria e sparisce con la risposta.

Server MCP per assistenti IA

Claude Code, Cursor, VS Code e Claude Desktop chiamano il motore come strumenti tramite https://api.cutoptim.com/mcp, con la stessa chiave API e la stessa quota del REST. Gira anche in locale come pacchetto npm @cutoptim/mcp.

Guida MCP →EN

Due velocità: preventiva subito, risparmia materiale dopo

La maggior parte delle integrazioni ha bisogno di entrambe — una risposta mentre il cliente aspetta, e un piano più stretto quando il lavoro va in macchina. Scegli chiamata per chiamata.

ISTANTANEO

I motori sincroni — heuristic per 2D, 1D e legno, lbf per il nesting — rispondono all’interno della richiesta HTTP, in modo deterministico, così il piano dietro un preventivo è il piano dietro l’ordine.

MAX

Invia il lavoro con engine: "max" e interroga GET /v1/jobs/{id} per il risultato. Sui pannelli 2D cerca l’ottimo dimostrato; sul nesting true-shape impiega un budget di tempo (options.timeBudgetMs) cercando meno pannelli e non ne restituisce mai più della risposta istantanea.

La risposta ha la stessa struttura in entrambi i casi. Sul 2D il motore max accetta un insieme di opzioni più ristretto rispetto a heuristic (il riferimento le elenca), e un lavoro di nesting con zone di esclusione è comunque servito da lbf.

Quale motore serve quale modalità

L’endpoint su cui fai POST sceglie la modalità; il parametro engine sceglie l’algoritmo. Il motore heuristic predefinito serve 2D, 1D e legno; balanced è solo 2D; il motore asincrono max serve i pannelli 2D e il nesting true-shape; e il predefinito del nesting è il proprio motore lbf. Lo stesso motore dell’app, via HTTP.

Modalità · endpointMotore · algoritmoPannelli 2D/v1/optimize/2dLineare 1D/v1/optimize/1dLegno · sezione/v1/optimize/woodNesting true-shape/v1/optimize/nestheuristicpredefinito · sincronobalancedopt-in · solo 2Dmaxasync · 2D + nestlbfnesting · predefinitoSu 1D e legno, balanced fa semplicemente da alias per heuristic (la risposta lo indica).
  • heuristic — Il predefinito — un packer guillotine multi-strategia. Resa massima, ogni layout è tagliabile su sega e restituisce sempre un piano di taglio. Serve 2D, 1D e legno.
  • balanced — Un free-nester MaxRects opt-in per il 2D. Molto più veloce sui lavori molto grandi a fronte di una resa leggermente inferiore, ma i suoi layout spesso non possono essere segati da bordo a bordo, quindi non trasportano un piano di taglio.
  • max — Il livello asincrono: invii il lavoro e interroghi GET /v1/jobs/{id} per il risultato. Sul 2D è una ricerca ad albero che raggiunge l’ottimo dimostrato su molti più lavori, con qualche secondo fino a un minuto per risoluzione — sempre deterministico e tagliabile su sega. Sul nesting true-shape esegue prima lbf, poi impiega un budget di tempo cercando uno schema con meno pannelli e non ne restituisce mai di più; quella ricerca è limitata nel tempo, quindi i suoi nest dichiarano deterministic: false.
  • lbf — Il predefinito per il nesting true-shape. Incastra poligoni irregolari nelle rientranze gli uni degli altri per laser, plasma e getto d’acqua — istantaneamente e in modo deterministico. max (sopra) può poi cercare lo stesso lavoro per meno pannelli.

Quale endpoint per quale materiale: lastre piane — compensato, MDF, vetro, acrilico, lamiera — vanno a /v1/optimize/2d; barre, tubi, tubolari e profili a /v1/optimize/1d; legno strutturale (un 50×150 solo da un 50×150) a /v1/optimize/wood; poligoni irregolari per laser, plasma e getto d’acqua a /v1/optimize/nest.

Una chiamata, un piano 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"
  }'

Torna così:

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

Struttura completa di richiesta e risposta, tutte le opzioni, tutti i codici di errore e tutti i motori:Riferimento API → · Guida all'integrazione →

Fast o denso? Scegli con un'unica opzione

L'opzione effort bilancia il tempo di calcolo con l'utilizzo. Ecco questo compromesso, misurato su un lavoro impegnativo — ogni cifra proviene dal packer reale.

Interruttore effort: utilizzo del materiale vs tempo di calcoloInterruttore effort: utilizzo del materiale vs tempo di calcolo. fast: 350 pannelli · 76.2% · ≈1.9 s. balanced: 330 pannelli · 80.8% · ≈4.8 s. max: riservato — più denso = ricerca più lenta. Sulla maggior parte dei lavori (più piccoli) i due sono identici; il divario si apre solo su lavori grandi come questo. balanced è il valore predefinito e non è mai più denso di quanto fast possa raggiungere.Interruttore effort: utilizzo del materiale vs tempo di calcoloUn lavoro impegnativo — circa 1.550 pezzi su un pannello da 2,07 × 5,6 m. Ogni cifra misurata sul packer reale.74%76%78%80%82%84%02 s4 s6 stempo di calcolo · più veloce →utilizzo del materiale · più denso ↑⇄ l'interruttore effort+4,6 p.p. utilizzo · −20 pannelli−5,7% materiale · ≈2,5× più lentofast350 pannelli · 76.2% · ≈1.9 s★ balanced · predefinito330 pannelli · 80.8% · ≈4.8 smaxriservatopiù denso =ricerca più lenta
Sulla maggior parte dei lavori (più piccoli) i due sono identici; il divario si apre solo su lavori grandi come questo. balanced è il valore predefinito e non è mai più denso di quanto fast possa raggiungere.

Ed è comunque veloce: anche i lavori di produzione più grandi — 2.000 pezzi e oltre — si risolvono in pochi secondi con il motore predefinito, ben entro il budget di tempo dell'API.

Soluzioni per settore

Lo stesso motore, presentato secondo il modo di tagliare di ogni settore. Ogni pagina mostra l’endpoint, una richiesta e una risposta, e i campi che contano per quel materiale.

Il motore lavora sulla geometria, non su un catalogo di materiali: lamiera e lastre metalliche, pannelli a base legno, vetro, plastica e acrilico, compositi, schiuma, cartone e carta passano tutti attraverso gli stessi endpoint. Il materiale cambia solo i numeri che invii — spessore lama o distanza tra pezzi, margine dal bordo, dimensioni dello stock.

Risorsa scaricabile
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
Scarica il PDF

Domande frequenti

CutOptim ha un’API?
Sì — l’API CutOptim Engine espone lo stesso motore di taglio via HTTP, per un ERP, uno strumento di preventivazione o software macchina, in tutte e tre le modalità dell’app: pannelli 2D, lineare 1D e legno con corrispondenza di sezione.
Esiste un’API per il taglio laser, plasma o a getto d’acqua?
Sì — il nesting true-shape di poligoni irregolari è la quarta modalità dell’API Engine, POST /v1/optimize/nest. Invii ogni pezzo come contorno poligonale (con fori opzionali) e le lastre di stock; il motore incastra i pezzi nelle tasche concave gli uni degli altri e restituisce il posizionamento di ogni copia, così un lavoro laser, plasma o a getto d’acqua si annida molto più fitto di un rettangolo di ingombro — su un lavoro rappresentativo di 272 pezzi, 6 lastre dove gli stessi pezzi per bounding box ne richiedono 9. Zone di esclusione per lastra (un difetto, un morsetto) e rotazione continua sono incluse; la spaziatura tra i pezzi (minSeparation) e la distanza dal bordo della lastra (edgeClearance) si impostano separatamente, e la risposta totalizza le lastre usate per dimensione di stock — mescolando le dimensioni dove risulta più economico — e fornisce la lunghezza di taglio e il numero di sfondamenti di ogni lastra, oltre alla larghezza e all’altezza utilizzate a partire dall’angolo (per addebitare solo una parte di lastra; la lastra meno riempita viene compattata in quell’angolo). L’app offre lo stesso nesting nella sua modalità Nesting.
L’API Engine è deterministica?
Sì. Lo stesso input restituisce lo stesso output, quindi le risposte sono memorizzabili in cache e testabili, e la versione del motore può essere fissata per risultati riproducibili. L’unica eccezione opt-in è il motore max per il nesting: la sua ricerca è limitata nel tempo, quindi riporta deterministic: false in ogni risposta.
Cosa contiene una risposta di ottimizzazione?
Il layout completo, un piano di taglio a ghigliottina con posizioni di arresto per passo e le metriche (numero di pannelli, resa, linee di taglio, passaggi di sega, lunghezza segata). L’endpoint 2D restituisce anche i metri di bordatura per tipo, e ogni endpoint accetta un tag materiale e restituisce un riepilogo per materiale. Puoi anche richiedere il layout come SVG, DXF o CSV inline e allegare un oggetto meta a pezzi e stock, restituito verbatim.
L’API può darmi un disegno, non solo coordinate?
Sì. Aggiungi include:["svg","csv","dxf"] a una richiesta di ottimizzazione e la risposta porta il layout come file pronto, inline: un disegno SVG 2D autonomo, un DXF R12/AC1009 o una lista di taglio CSV. Nessuna archiviazione e nessuna seconda chiamata. L’SVG è solo 2D; una richiesta 1D o legno restituisce invece un avviso.
Posso allegare i miei ID ai pezzi e rileggerli?
Sì. Ogni riga di pezzo o stock può portare un oggetto meta — il tuo codice articolo ERP, l’id della riga d’ordine o il riferimento cliente —, e torna verbatim su ogni pezzo posizionato e ogni pannello o barra, così il piano di taglio si riconcilia con il tuo sistema. Non influisce mai sul layout.
Posso verificare una richiesta senza consumare una chiamata?
Sì. POST /v1/validate/2d, /1d o /wood valida secondo schema lo stesso corpo che accetta l’endpoint di ottimizzazione corrispondente, senza risolvere — senza chiave e senza quota. Un 400 indica il campo esatto errato e ottieni avvisi di fattibilità (un pezzo che non entra in alcuno stock) prima di consumare una chiamata reale.
Ci sono SDK, webhook o job asincroni?
Sì. SDK ufficiali per TypeScript (npm @cutoptim/engine), Python (PyPI cutoptim) e PHP (Composer cutoptim/engine) sono open source su github.com/cutoptim, generati dalla specifica OpenAPI 3.1 — per qualsiasi altro linguaggio, punta un generatore di codice sullo stesso documento. La maggior parte delle chiamate di ottimizzazione è semplice HTTP sincrono che restituisce direttamente il piano finito. L’unica eccezione è il motore asincrono max, per i pannelli 2D e per il nesting a forma reale: POST /v1/optimize/2d o /v1/optimize/nest con engine:"max" restituisce 202 Accepted con un jobId, e interroghi GET /v1/jobs/{id} finché non termina — per quando un piano migliore vale da pochi secondi a qualche minuto di calcolo. Invece di interrogare, registra un webhook nella dashboard: invia un POST firmato quando il job termina.
Quali sono i limiti di richiesta?
Fino a 2.000 pezzi, 50 righe di stock e un corpo della richiesta di 1 MB per chiamata. Anche i lavori più grandi si risolvono in pochi secondi, comodamente entro il budget di tempo.
Gestisci le chiavi API