CutOptim Engine API
Vágásoptimalizáló API: beküldöd a darabokat és az alapanyagot — 2D lapok, 1D rudak, faanyag vagy szabálytalan darabok valódi alakú nestingje —, és visszakapod az elrendezést, a vágástervet és a kihasználást. Alapértelmezés szerint ugyanaz a kérés mindig ugyanazt a tervet adja.
Teljes benchmark megtekintése → · Mérve, nem ígérve
{
"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 }
}Miért erre építs
Ugyanaz a bemenet mindig ugyanazt a kimenetet adja — nincs véletlenszerűség, nincs óra az algoritmusban. Az eredmények cache-elhetők, és tesztekben összehasonlíthatók. Az egyetlen opt-in kivétel, az időkorlátos nesting max keresés, minden válaszban kimondja (deterministic: false).
Nem csak téglalapok: a guillotine vágási sorrend, a vágásvonalak és a fűrészelések külön, a vágáshossz, és egy jelző arról, hogy az elrendezés legyártható-e panelfűrészen.
Fűrészrés, oldalankénti széllevágás, tolerancia, költség-mód, szálirány és erezet egyeztetés, max. vágási fázis, forgatás-minimalizálás — ugyanazok a beállítások, amelyeket az app is kínál.
Megírod, vagy meghívod
Egy vágásoptimalizáló hétvégi projektnek tűnik, aztán szélsőséges esetek hosszú sora lesz belőle: fűrészrés- és széllevágás-számítás, elfogyó alapanyag, forgatási és erezet-szabályok, élről élre fűrészelhető elrendezés, lyukas poligonok — és egy regressziós tesztkészlet, ami bizonyítja, hogy egy változtatás sosem ront a terven. Az Engine API ez a munka, elvégezve és lemérve.
Négy optimalizáló megírását és validálását — 2D guillotine lapszabás, 1D lineáris anyag, keresztmetszet szerinti fa és valódi alakú nesting —, és hogy helyesek maradjanak, ahogy nőnek az igényeid. A csapatod ehelyett egyetlen HTTP-szerződést köt be.
A tervek minősége publikált, nem állított: a nyílt benchmark nyilvános akadémiai feladatkészleteken és generált munkákon futtatja a motort, a módszer és a nyers eredmények letölthetők. Futtasd ugyanezeket a feladatokat bármi máson is, amit mérlegelsz.
Egy ár az oldalon, 14 napos próbaidő és egy kulcs a dashboardodról — nincs értékesítési hívás és nincs licenc-tárgyalás, mielőtt kipróbálhatnád. A validate végpontokhoz kulcs sem kell.
Az adatmodelled, a felületed és az árazási szabályaid. A szinkron hívások semmit nem tárolnak; egy aszinkron max job csak egy rövid megőrzési ideig tartja meg az eredményét, hogy le tudd kérdezni. Egy darabhoz vagy táblához csatolt meta objektum szó szerint visszajön, így a terv egyeztethető a nyilvántartásoddal.
Teljes benchmark megtekintése →
Inkább kész rendelőfelület kell, mint saját fejlesztés?
A CutOptim Configurator erre a motorra épül →Saját webshop vagy ERP bekötése →Árazás
Minden kérés egyformán számít — a nesting is · A kvóta 90%-ánál és elfogyásakor e-mailt küldünk.
Próbáld ki ingyen: nyilvános demo-kulcs az API-referencián, és havi 1,000 kéréses teszt-kulcsok, amelyeket soha nem számlázunk
Nagyobb volumen. A havi 10,000 kérés a standard csomag, nem annak a plafonja, amit ki tudunk szolgálni. Ha többre van szükséged — nagyobb volumenre, külön kulcsra a stagingre és az éles rendszerre, vagy egyedi megállapodásra —, írd meg a számaidat, és egyedileg árazzuk. Írd meg a volumenedet →
Az előfizetéssel elfogadod a következő feltételeket: Engine API Service Terms (angol nyelven).
A szokásos CutOptim csomagok (Ingyenes / Pro / Műhely) nem kapcsolódnak az API-hoz — az appban futó optimalizáló továbbra is a részük. Az app árai →
Mi megy be, mi jön ki
Módonként egy valódi munka: felül a kérés törzse, alatta a visszakapott terv, közvetlenül a válaszból kirajzolva.
POST /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 } }
}200 · sheets[].parts- Lapok
- 2
- sheetCount
- Kihozatal
- 80,31%
- yieldPct
- Elhelyezett darabok
- 36 / 36
- placed
- Vágásvonalak
- 39
- cutLines
- Anyagköltség
- 77
- totalPrice
Alsószekrény-sor szabványos forgácslapból. Az ajtók tartják a szálirányt (rotatable: false), minden más darab forgatható.
Az API-tól is kérhetsz képet: 2D-nél és nestingnél tedd bele az "svg"-t az include-ba, és a válasz hozza a rajzot.
POST /v1/optimize/1d{
"parts": [
{ "name": "Post", "length": 2400, "qty": 4 },
{ "name": "Rail", "length": 1750, "qty": 6 },
{ "name": "Brace", "length": 940, "qty": 8 },
{ "name": "Cross", "length": 620, "qty": 10 }
],
"stock": [
{ "length": 6000, "qty": 10, "price": 24.9 }
],
"options": { "kerf": 3, "trim": { "start": 10 } }
}200 · rods[].parts- Rudak
- 6
- rodCount
- Kihozatal
- 93,94%
- yieldPct
- Elhelyezett darabok
- 28 / 28
- placed
- Vágások
- 28
- cuts
- Anyagköltség
- 149,4
- totalPrice
Acélváz szabásjegyzéke teljes hosszú rudakból. Minden rúdon látszik, hol kezdődnek a darabok (pos), és mennyi marad (remaining).
POST /v1/optimize/wood{
"parts": [
{ "name": "Stud", "sw": 45, "sh": 95, "length": 2350, "qty": 6 },
{ "name": "Nogging", "sw": 45, "sh": 95, "length": 555, "qty": 12 },
{ "name": "Joist", "sw": 45, "sh": 145, "length": 3600, "qty": 3 },
{ "name": "Blocking", "sw": 45, "sh": 145, "length": 1150, "qty": 3 }
],
"stock": [
{ "name": "C24 45x95", "sw": 45, "sh": 95, "length": 4800, "qty": 10, "price": 9.8 },
{ "name": "C24 45x145", "sw": 45, "sh": 145, "length": 4800, "qty": 6, "price": 14.6 }
],
"options": { "kerf": 3 }
}200 · sections[].rods[].parts- Keresztmetszetek
- 2
- sectionCount
- Rudak
- 8
- rodCount
- Kihozatal
- 91,17%
- yieldPct
- Elhelyezett darabok
- 24 / 24
- placed
- Anyagköltség
- 92,8
- totalPrice
Vázszerkezeti fa két keresztmetszetben. Minden keresztmetszetet csak a saját alapanyagából vágunk, és saját összesítővel jön vissza.
POST /v1/optimize/nest{
"parts": [
{ "name": "bracket", "polygon": [[0,0], [300,0], [300,100], [100,100], [100,300], [0,300]], "qty": 12, "allowedRotations": [0,90,180,270] },
{ "name": "gusset", "polygon": [[0,0], [250,0], [0,250]], "qty": 14, "allowedRotations": [0,90,180,270] },
{ "name": "plate", "polygon": [[0,0], [240,0], [240,160], [0,160]], "holes": [[[60,65], [180,65], [180,95], [60,95]]], "qty": 12, "allowedRotations": [0,90] },
{ "name": "flange", "source": { "content": "<svg xmlns=\"http://www.w3.org/2000/svg\"><circle cx=\"90\" cy=\"90\" r=\"90\"/><circle cx=\"90\" cy=\"90\" r=\"32\"/><circle cx=\"90\" cy=\"30\" r=\"9\"/><circle cx=\"150\" cy=\"90\" r=\"9\"/><circle cx=\"90\" cy=\"150\" r=\"9\"/><circle cx=\"30\" cy=\"90\" r=\"9\"/></svg>", "filename": "flange.svg" }, "qty": 10, "allowedRotations": [0] }
],
"stock": [
{ "w": 2500, "h": 1250, "qty": 3, "price": 96, "exclusions": [{ "polygon": [[1150,0], [1350,0], [1350,70], [1150,70]], "quality": 0 }] }
],
"options": { "minSeparation": 5, "edgeClearance": 10 }
}A nesting nincs benne a nyilvános demóban — ezt a példát ingyenes tesztkulccsal futtathatod. Ingyenes tesztkulcs létrehozása
200 · sheets[].parts- Lapok
- 1
- sheetCount
- Kitöltés
- 56,32%
- density
- Elhelyezett darabok
- 48 / 48
- placed
- Vágáshossz
- 49 463
- cutLength
- Beszúrások
- 110
- pierces
Lézerrel vágott acél alkatrészek: hármat koordinátákkal küldünk, a karimát SVG-fájlként (source). Egyik darab sem lóg bele a befogási zónába (exclusions), és mind tartja a kért távközt (minSeparation).
Az API-tól is kérhetsz képet: 2D-nél és nestingnél tedd bele az "svg"-t az include-ba, és a válasz hozza a rajzot.
Minden rajz a válaszban kapott koordinátákból készül, kézzel semmit nem rendeztünk el. A négy munkát ugyanaz a motor oldja meg, amelyik az API mögött fut, és a tesztjeink újra lefuttatják őket, hogy a számok igazak maradjanak.
Mit tud az API
Egy-egy hívás a 2D lapokhoz, az 1D lineáris anyaghoz, a keresztmetszet-illesztéses fához és a szabálytalan poligonok valódi alakú nestingjéhez — POST /v1/optimize/2d, /1d, /wood és /nest.
A POST /v1/optimize/nest tetszőleges poligonokat (lyukakkal együtt) pakol fix táblákra, egymás konkáv zsebeibe illesztve a darabokat — 6 tábla ott, ahol ugyanezek a darabok befoglaló téglalappal 9-et igényelnek. Lézeres, plazmás és vízsugaras munkához. Táblánkénti kizárási zónák (egy hiba, egy leszorító) is járnak vele.
Lásd el a darabokat és a készletet egy material címkével, és az optimalizáló szétosztja a munkát: minden material csak a saját készletéből vágódik ki. Minden módban; material szerinti összesítés jön vissza.
Nevezz meg élenként egy élzárás-típust (2D), és a válasz típusonként összegzi a folyómétert — darabonként és rendelésenként. Metaadat: egy darabot sosem mozdít el.
Nevezd meg azokat a darabokat, amelyeknek a rajzolata átfut egymáson — például egy fiókelőlapot két ajtó fölött — egy szettben (matchedSets, 2D), és egymás mellett, egyetlen darab lapból vágódnak ki, egy fűrészrésnyi távolságra. Minden tag visszakapja a szettjét és a pozícióját, a CSV-, SVG- és DXF-export pedig szintén megjelöli őket.
Kérj include:["svg","csv","dxf"] értéket, és a válasz kész fájlként, beágyazva viszi az elrendezést — önálló 2D SVG rajzot, R12/AC1009 DXF-et vagy CSV vágásjegyzéket. Nincs tárolás, nincs második hívás.
Csatolj egy meta objektumot — az ERP-cikkszámodat, rendelés-sor azonosítót, vevői hivatkozást — bármelyik darab- vagy alapanyag-sorhoz, és szó szerint visszakapod minden elhelyezett darabon és minden táblán/rúdon, így a terv egyeztethető a rendszereddel.
A POST /v1/validate/{2d,1d,wood} séma-ellenőrzi ugyanazt a törzset megoldás nélkül — nincs kulcs, nincs kvóta. Ellenőrizd, hogy egy törzset nem utasítunk el, és kapj megvalósíthatósági figyelmeztetéseket, mielőtt elköltesz egy hívást.
A minimizeCost a legalacsonyabb végösszeg szerint rangsorol az árazott készletméretek között, keverve a formátumokat; az alapértelmezés az anyagot minimalizálja. Mindkettő ugyanazt a guillotine algoritmust futtatja.
Jelöld meg az elsőként elfogyasztandó készletet, kezeld a mennyiségeket kemény plafonként a respectStock-kal, és jelöld a kötelezően kivágandó darabokat, amelyek szűkös anyagnál elnyerik a helyet a táblán.
Nem csak téglalapok: a guillotine vágási sorrend lépésenkénti ütköző-pozíciókkal, a vágásvonalak és a fűrészelések külön, a vágáshossz, és egy panelfűrészen-legyártható jelző.
kerf, oldalankénti széllevágás, tolerancia, szálirány, matched sets, maxCutStages és forgatás-minimalizálás — ugyanazok a beállítások, amelyeket az app is kínál.
Ugyanaz a bemenet mindig ugyanazt a kimenetet adja — cache-eld és hasonlítsd össze (az opt-in, időkorlátos nesting max keresés deterministic: false értéket jelent). Egy rögzíthető motorverzió és egy OpenAPI 3.1 dokumentum írja le a teljes szerződést.
Koordináták helyett küldj SVG-t vagy DXF-et: a parts[].source kiolvassa a kontúrt és a lyukait a rajzból, a POST /v1/import/nest pedig előbb szétbontja a több darabot tartalmazó fájlt. Semmi nem tárolódik — a fájl a memóriában dolgozódik fel, és a válasszal együtt megszűnik.
A Claude Code, a Cursor, a VS Code és a Claude Desktop eszközként hívja a motort a https://api.cutoptim.com/mcp címen — ugyanazzal az API-kulccsal és kvótával, mint a REST. Helyben is fut, az @cutoptim/mcp npm-csomagként.
Két sebesség: árajánlat most, anyagspórolás utána
A legtöbb integrációnak mindkettő kell — válasz, amíg a vevő vár, és egy szorosabb terv, amikor a munka a gépre megy. Hívásonként te döntöd el.
A szinkron motorok — heuristic a 2D-hez, az 1D-hez és a fához, lbf a nestinghez — a HTTP-kérésen belül válaszolnak, determinisztikusan, így az árajánlat mögötti terv ugyanaz, mint a rendelés mögötti.
Küldd a munkát engine: "max" értékkel, és kérdezd le az eredményt a GET /v1/jobs/{id} végponton. 2D lapoknál a bizonyított optimum felé keres; valódi alakú nestingnél egy időkeretet (options.timeBudgetMs) arra fordít, hogy kevesebb táblát találjon, és sosem ad többet, mint az azonnali válasz.
A válasz szerkezete mindkét esetben ugyanaz. 2D-ben a max motor kevesebb beállítást fogad el, mint a heuristic (a referencia felsorolja őket), és a kizárt zónás nesting-munkát továbbra is az lbf szolgálja ki.
Melyik motor melyik módot szolgálja ki
Az a végpont, amelyre POST-olsz, választja ki a módot; az engine paraméter az algoritmust. Az alapértelmezett heuristic motor a 2D-t, az 1D-t és a fát szolgálja ki; a balanced csak 2D; az aszinkron max motor a 2D lapokat és a true-shape nestinget is kiszolgálja; a nesting alapértelmezettje pedig a saját lbf motorja. Ugyanaz a motor, mint az appban, HTTP-n keresztül.
- heuristic — Az alapértelmezés — egy guillotine több-stratégiás packer. A legmagasabb kihozatal, minden elrendezés fűrésszel vágható, és mindig ad vágástervet. A 2D-t, az 1D-t és a fát is kiszolgálja.
- balanced — Egy opcionális MaxRects szabad-nester a 2D-hez. Sokkal gyorsabb a nagyon nagy munkákon, kicsivel alacsonyabb kihozatalért, de az elrendezései gyakran nem vághatók éltől élig, ezért nem hordoznak vágástervet.
- max — Az aszinkron szint: beküldöd a munkát, és a GET /v1/jobs/{id} lekérdezésével kapod meg az eredményt. 2D-n fakeresés, amely sokkal több munkán éri el a bizonyítottan optimálisat, megoldásonként másodpercek–egy perc alatt — továbbra is determinisztikus és fűrésszel vágható. True-shape nestingen előbb az lbf-et futtatja, majd egy időkeretet fordít arra, hogy kevesebb táblát igénylő elrendezést keressen, és sosem ad vissza többet; ez a keresés időkorlátos, ezért a nestjei deterministic: false értéket mondanak.
- lbf — A true-shape nesting alapértelmezettje. Szabálytalan poligonokat pakol egymás zsebeibe lézeres, plazmás és vízsugaras vágáshoz — azonnal és determinisztikusan. A max (fent) ezután ugyanabban a munkában kevesebb táblát kereshet.
Melyik végpont melyik anyaghoz: sík lapok — rétegelt lemez, MDF, üveg, akril, lemez — a /v1/optimize/2d végpontra; rúd, cső és profil a /v1/optimize/1d végpontra; szerkezeti faanyag (egy 50×150 csak 50×150-ből) a /v1/optimize/wood végpontra; szabálytalan poligonok lézeres, plazmás és vízsugaras vágáshoz a /v1/optimize/nest végpontra.
Egy hívás, egy teljes terv
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"
}'A válasz:
{
"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
}A teljes kérés- és válaszszerkezet, minden beállítás, az összes hibakód és minden motor:API-referencia → · Integrációs útmutató →
Fast vagy sűrű? Válaszd egy beállítással
Az effort beállítás a számítási időt mérlegeli a kihasználással szemben. Íme ez a kompromisszum, egyetlen igényes munkán mérve — minden szám a valódi pakolóból származik.
És amúgy is gyors: még a legnagyobb gyártási munkák — 2000 darab és több — is másodpercek alatt megoldódnak az alapértelmezett motoron, kényelmesen az API időkeretén belül.
Megoldások iparáganként
Ugyanaz a motor, egy-egy szakma vágási módjára szabva. Minden oldal megmutatja a végpontot, egy kérést és egy választ, és az adott anyagnál fontos mezőket.
A motor geometriával dolgozik, nem anyagkatalógussal: lemez és vastaglemez, faalapú lapok, üveg, műanyag és akril, kompozit, hab, karton és papír ugyanazokon a végpontokon megy át. Az anyag csak a beküldött számokat változtatja meg — fűrészrés vagy darabtávolság, szélhagyás, alapanyag-méretek.
Valódi alakos nesting REST-en: poligonok vagy DXF/SVG darabok be, elhelyezés és DXF/SVG elrendezés ki. POST /v1/optimize/nest
1D hosszra vágás csőhöz, csővezetékhez és zártszelvényhez. POST /v1/optimize/1d
1D hosszra vágás acél- és alumíniumprofilhoz, rúdhoz és szelvényhez, költség-móddal. POST /v1/optimize/1d
2D guillotine, nulla fűrészrésű karcolás-és-törés float, edzett és tükörüveghez. POST /v1/optimize/2d
1D hosszra vágás szerkezeti faanyaghoz, keresztmetszet-párosítással. POST /v1/optimize/wood
Szabálytalan poligonok valódi alakú nestingje, kizárási zónákkal. POST /v1/optimize/nest
Valódi alakú nesting lemezre, lézeres, plazmás vagy vízsugaras vágáshoz. POST /v1/optimize/nest
Hajlítási jegyzék optimalizálása építési betonacélhoz. · közös fejlesztő partnereket keresünk
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.