CutOptim Engine API
Eine API für Zuschnittoptimierung: Senden Sie Teile und Material — 2D-Platten, 1D-Stangen, Holz oder True-Shape-Nesting unregelmäßiger Teile — und erhalten Sie Layout, Schnittplan und Ausbeute zurück. Standardmäßig liefert dieselbe Anfrage immer denselben Plan.
Den vollständigen Benchmark ansehen → · Gemessen, nicht behauptet
{
"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 }
}Warum darauf aufbauen
Dieselbe Eingabe liefert immer dieselbe Ausgabe — kein Zufall, keine Uhr im Algorithmus. Sie können Ergebnisse cachen und in Tests vergleichen. Die eine optionale Ausnahme, die zeitlich begrenzte Nesting-Suche max, sagt es in jeder Antwort (deterministic: false).
Nicht nur Rechtecke: die Guillotine-Schnittsequenz, Schnittlinien gegenüber Sägedurchgängen, die gesägte Länge und ein Kennzeichen, das Ihnen sagt, ob sich der Plan auf einer Plattensäge herstellen lässt.
Sägeblattdicke, Besäumung je Seite, Toleranz, Kostenmodus, Maserungsrichtung und Maserungsabgleich, maximale Schnittstufen, Drehungsminimierung — dieselben Optionen, die auch die App bietet.
Selbst entwickeln oder aufrufen
Ein Zuschnittoptimierer wirkt wie ein Wochenendprojekt und wird zu einer langen Kette von Sonderfällen: Sägeblattdicke- und Besäumungsarithmetik, Ausgangsmaterial, das ausgeht, Drehungs- und Maserungsregeln, Layouts, die Kante an Kante sägbar sein müssen, Polygone mit Löchern — und eine Regressionssuite, die beweist, dass eine Änderung einen Plan nie verschlechtert. Die Engine API ist genau diese Arbeit, bereits erledigt und gemessen.
Vier Optimierer schreiben und validieren — 2D-Guillotine-Platten, 1D-Linearmaterial, Holz nach Querschnitt und True-Shape-Nesting — und sie korrekt halten, während Ihre Anforderungen wachsen. Ihr Team bindet stattdessen einen einzigen HTTP-Contract ein.
Die Planqualität ist veröffentlicht, nicht behauptet: Der offene Benchmark lässt die Engine auf öffentlichen akademischen Instanz-Sets und generierten Aufträgen laufen, Methode und Rohergebnisse sind herunterladbar. Testen Sie dieselben Instanzen gegen alles andere, das Sie in Erwägung ziehen.
Ein Preis auf der Seite, 14 Tage Testphase und ein Schlüssel aus Ihrem Dashboard — kein Verkaufsgespräch und keine Lizenzverhandlung, bevor Sie testen können. Die validate-Endpoints benötigen überhaupt keinen Schlüssel.
Ihr Datenmodell, Ihre Oberfläche und Ihre Preisregeln. Synchrone Aufrufe speichern nichts; ein asynchroner max-Job behält sein Ergebnis nur für ein kurzes Aufbewahrungsfenster, damit Sie es abfragen können. Ein meta-Objekt an jedem Teil oder jeder Platte kommt wortgetreu zurück, sodass der Plan mit Ihren Aufzeichnungen übereinstimmt.
Den vollständigen Benchmark ansehen →
Lieber eine fertige Bestelloberfläche, statt selbst eine zu bauen?
Der CutOptim Configurator läuft auf dieser Engine →Eigene Plattform oder ERP anbinden →Preise
Jede Anfrage zählt gleich — auch Nesting · Wir schreiben Ihnen bei 90 % des Kontingents und wenn es aufgebraucht ist.
Kostenlos ausprobieren: ein öffentlicher Demo-Schlüssel in der API-Referenz und Testschlüssel mit 1,000 Anfragen pro Monat, die nie abgerechnet werden
Größere Volumen. 10,000 Anfragen pro Monat sind der Standardtarif, keine Obergrenze dessen, was wir betreiben können. Wenn Sie mehr brauchen — höheres Volumen, getrennte Schlüssel für Staging und Produktion oder eine dedizierte Vereinbarung —, nennen Sie uns Ihre Zahlen, und wir kalkulieren individuell. Nennen Sie uns Ihr Volumen →
Mit Abschluss des Abonnements akzeptieren Sie: Engine API Service Terms (auf Englisch).
Die regulären CutOptim-Pakete (Free / Pro / Werkstatt) haben mit der API nichts zu tun — der Optimierer in der App bleibt darin enthalten. Zu den App-Preisen →
Was reingeht, was rauskommt
Pro Modus ein echter Auftrag: oben der Request-Body, darunter der zurückgegebene Plan, direkt aus der Antwort gezeichnet.
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- Platten
- 2
- sheetCount
- Ausbeute
- 80,31 %
- yieldPct
- Platzierte Teile
- 36 / 36
- placed
- Schnittlinien
- 39
- cutLines
- Materialkosten
- 77
- totalPrice
Eine Unterschrank-Zeile aus Standard-Spanplatte. Die Türen behalten ihre Maserung (rotatable: false), alle anderen Teile dürfen drehen.
Das Bild direkt von der API? Bei 2D und Nesting "svg" zu include hinzufügen, und die Antwort enthält die Zeichnung.
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- Stangen
- 6
- rodCount
- Ausbeute
- 93,94 %
- yieldPct
- Platzierte Teile
- 28 / 28
- placed
- Schnitte
- 28
- cuts
- Materialkosten
- 149,4
- totalPrice
Eine Zuschnittliste für einen Stahlrahmen aus ganzen Stangen. Jede Stange zeigt, wo ihre Teile beginnen (pos) und was übrig bleibt (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- Querschnitte
- 2
- sectionCount
- Stangen
- 8
- rodCount
- Ausbeute
- 91,17 %
- yieldPct
- Platzierte Teile
- 24 / 24
- placed
- Materialkosten
- 92,8
- totalPrice
Konstruktionsholz in zwei Querschnitten. Jeder Querschnitt wird nur aus seinem eigenen Material geschnitten und kommt mit eigenen Summen zurück.
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 }
}Nesting ist nicht Teil der öffentlichen Demo — dieses Beispiel mit einem kostenlosen Testschlüssel ausführen. Kostenlosen Testschlüssel erstellen
200 · sheets[].parts- Platten
- 1
- sheetCount
- Füllgrad
- 56,32 %
- density
- Platzierte Teile
- 48 / 48
- placed
- Schnittlänge
- 49.463
- cutLength
- Einstiche
- 110
- pierces
Lasergeschnittene Stahlteile: drei als Koordinaten, der Flansch als SVG-Datei (source). Jedes Teil bleibt außerhalb der Spannzone (exclusions) und hält den geforderten Abstand (minSeparation).
Das Bild direkt von der API? Bei 2D und Nesting "svg" zu include hinzufügen, und die Antwort enthält die Zeichnung.
Jede Zeichnung entsteht aus den Koordinaten der Antwort — nichts ist von Hand platziert. Die vier Aufträge löst dieselbe Engine, die hinter der API läuft, und unsere Testsuite löst sie erneut, damit die Zahlen stimmen.
Was die API leistet
Je ein Aufruf für 2D-Platten, 1D-Linearmaterial, Holz mit Querschnitts-Zuordnung und True-Shape-Nesting unregelmäßiger Polygone — POST /v1/optimize/2d, /1d, /wood und /nest.
POST /v1/optimize/nest packt beliebige Polygone (mit holes) auf feste Platten und verschachtelt Teile in die konkaven Aussparungen der anderen — 6 Platten, wo dieselben Teile per Bounding Box 9 brauchen. Für Laser-, Plasma- und Wasserstrahlschneiden. Ausschlusszonen je Platte (ein Defekt, eine Spannpratze) sind inbegriffen.
Versehen Sie Teile und Ausgangsmaterial mit einem material, und der Optimierer partitioniert den Auftrag: jedes material wird nur aus dem eigenen Ausgangsmaterial geschnitten. In jedem Modus; eine Auswertung je material kommt zurück.
Benennen Sie je Kante (2D) einen Anleimtyp, und die Response summiert die laufenden Meter je Typ — je Teil und je Auftrag. Metadaten: ein Teil wird dadurch nie verschoben.
Benennen Sie die Teile, deren Maserung durchlaufen muss — eine Schubkastenfront über zwei Türen —, in einem Satz (matchedSets, 2D), und sie werden nebeneinander aus einem Stück Platte geschnitten, eine Schnittfuge auseinander. Jedes Mitglied kommt mit seinem Satz und seiner Position zurück, und auch die CSV-, SVG- und DXF-Exporte kennzeichnen sie.
Fordern Sie include:["svg","csv","dxf"] an, und die Antwort trägt das Layout als fertige Datei mit, inline — eine eigenständige 2D-SVG-Zeichnung, ein DXF im Format R12/AC1009 oder eine CSV-Schnittliste. Keine Speicherung, kein zweiter Aufruf.
Hängen Sie an jedes Teil und jede Materialzeile ein meta-Objekt — Ihre ERP-Artikelnummer, Auftragspositions-ID, Kundenreferenz — und es kommt bei jedem platzierten Stück und jeder Platte bzw. jedem Stab wortgetreu zurück, sodass der Plan mit Ihrem System übereinstimmt.
POST /v1/validate/{2d,1d,wood} prüft denselben Body per Schema, ohne zu rechnen — kein Schlüssel, kein Kontingent. Stellen Sie sicher, dass ein Payload nicht abgewiesen wird, und erhalten Sie Machbarkeitswarnungen, bevor Sie einen Aufruf verbrauchen.
minimizeCost bewertet nach der niedrigsten Gesamtrechnung über bepreiste Materialgrößen hinweg und mischt Formate; die Voreinstellung minimiert das Material. Beide nutzen denselben guillotine-Algorithmus.
Markieren Sie Ausgangsmaterial, das zuerst aufgebraucht wird, behandeln Sie Mengen mit respectStock als hartes Limit, und kennzeichnen Sie Muss-Teile, die bei knappem Material den Plattenplatz gewinnen.
Nicht nur Rechtecke: die guillotine-Schnittsequenz mit Anschlagpositionen je Schritt, Schnittlinien gegenüber Sägedurchgängen, die gesägte Länge und ein Kennzeichen, ob sich der Plan auf einer Plattensäge herstellen lässt.
kerf, Besäumung je Seite, Toleranz, Maserungsrichtung, matched sets, maxCutStages und Drehungsminimierung — dieselben Optionen, die auch die App bietet.
Dieselbe Eingabe liefert immer dieselbe Ausgabe — cachen und vergleichen (die optionale, zeitlich begrenzte Nesting-Suche max meldet deterministic: false). Eine fixierbare Engine-Version und ein OpenAPI-3.1-Dokument beschreiben den gesamten Contract.
Senden Sie SVG oder DXF statt Koordinaten: parts[].source liest Umriss und Löcher aus der Zeichnung, und POST /v1/import/nest zerlegt zuvor eine Datei mit mehreren Teilen. Nichts wird gespeichert — die Datei wird im Arbeitsspeicher verarbeitet und ist mit der Antwort fort.
Claude Code, Cursor, VS Code und Claude Desktop rufen die Engine über https://api.cutoptim.com/mcp als Tools auf — mit demselben API-Schlüssel und Kontingent wie REST. Lokal läuft er auch als npm-Paket @cutoptim/mcp.
Zwei Geschwindigkeiten: jetzt kalkulieren, später Material sparen
Die meisten Integrationen brauchen beides — eine Antwort, während ein Kunde wartet, und einen engeren Plan, wenn der Auftrag auf die Maschine geht. Sie entscheiden je Aufruf.
Die synchronen Engines — heuristic für 2D, 1D und Holz, lbf für Nesting — antworten innerhalb der HTTP-Anfrage, deterministisch, sodass der Plan hinter einem Angebot derselbe ist wie hinter dem Auftrag.
Senden Sie den Auftrag mit engine: "max" und fragen Sie das Ergebnis über GET /v1/jobs/{id} ab. Bei 2D-Platten sucht sie in Richtung des bewiesenen Optimums; bei True-Shape-Nesting wendet sie ein Zeitbudget (options.timeBudgetMs) auf, um weniger Platten zu finden, und gibt nie mehr zurück als die sofortige Antwort.
Die Antwort hat in beiden Fällen dieselbe Struktur. Bei 2D akzeptiert die max-Engine eine schmalere Optionsmenge als heuristic (die Referenz listet sie auf), und ein Nesting-Auftrag mit Ausschlusszonen wird weiterhin von lbf bedient.
Welche Engine bedient welchen Modus
Der Endpunkt, an den Sie POSTen, wählt den Modus; der engine-Parameter wählt den Algorithmus. Die voreingestellte heuristic-Engine bedient 2D, 1D und Holz; balanced ist nur für 2D; die asynchrone max-Engine bedient 2D-Platten und True-Shape-Nesting; und der Standard des Nestings ist die eigene lbf-Engine. Dieselbe Engine wie in der App, über HTTP.
- heuristic — Die Voreinstellung — ein guillotine-Multi-Strategie-Packer. Höchste Ausbeute, jedes Layout ist sägbar, und er liefert stets einen Schnittplan. Er bedient 2D, 1D und Holz.
- balanced — Ein optionaler MaxRects-Free-Nester für 2D. Bei sehr großen Aufträgen deutlich schneller bei etwas geringerer Ausbeute, aber seine Layouts lassen sich oft nicht Kante an Kante sägen und tragen daher keinen Schnittplan.
- max — Die asynchrone Stufe: Sie übermitteln den Auftrag und pollen GET /v1/jobs/{id} für das Ergebnis. Bei 2D ist es eine Baumsuche, die bei weit mehr Aufträgen das nachweisbare Optimum erreicht, in Sekunden bis zu einer Minute je Lösung — weiterhin deterministisch und sägbar. Bei True-Shape-Nesting führt sie zuerst lbf aus und wendet dann ein Zeitbudget auf, um ein Layout mit weniger Platten zu finden, und gibt nie mehr zurück; diese Suche ist zeitlich begrenzt, ihre Nestings melden also deterministic: false.
- lbf — Die Standard-Engine für True-Shape-Nesting. Sie packt unregelmäßige Polygone in die Aussparungen der jeweils anderen für Laser, Plasma und Wasserstrahl — sofort und deterministisch. max (oben) kann denselben Auftrag anschließend nach weniger Platten durchsuchen.
Welcher Endpunkt für welches Material: flache Platten — Sperrholz, MDF, Glas, Acryl, Blech — gehen an /v1/optimize/2d; Stäbe, Rohr, Rundrohr und Profil an /v1/optimize/1d; Konstruktionsholz (ein 50×150 nur aus 50×150) an /v1/optimize/wood; unregelmäßige Polygone für Laser, Plasma und Wasserstrahl an /v1/optimize/nest.
Ein Aufruf, ein vollständiger Plan
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"
}'Zurück kommt:
{
"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
}Vollständige Request- und Response-Struktur, alle Optionen, alle Fehlercodes und alle Engines:API-Referenz → · Integrationsleitfaden →
Schnell oder dicht? Mit einer Option wählen
Die Option effort wägt Rechenzeit gegen Auslastung ab. Hier ist dieser Kompromiss, gemessen an einem anspruchsvollen Auftrag — jede Zahl stammt vom echten Packer.
Und schnell ist es ohnehin: selbst die größten Produktionsaufträge — 2.000 Teile und mehr — werden auf der Standard-Engine in einstelligen Sekunden gelöst, bequem innerhalb des API-Zeitbudgets.
Lösungen nach Branche
Dieselbe Engine, ausgerichtet auf die Zuschnittweise eines Gewerks. Jede Seite zeigt den Endpoint, einen Request und eine Response sowie die für dieses Material relevanten Felder.
Die Engine arbeitet mit Geometrie, nicht mit einem Materialkatalog: Blech und Grobblech, Holzwerkstoffplatten, Glas, Kunststoff und Acryl, Verbundstoffe, Schaumstoff, Karton und Papier laufen alle über dieselben Endpoints. Das Material ändert nur die gesendeten Zahlen — Sägeblattdicke oder Teileabstand, Randabstand, Materialgrößen.
True-Shape-Nesting per REST: Polygone oder DXF/SVG-Teile rein, Platzierungen und ein DXF/SVG-Layout raus. POST /v1/optimize/nest
1D-Ablängen von Rohr, Rundrohr und Hohlprofil. POST /v1/optimize/1d
1D-Ablängen von Stahl- und Aluminiumprofilen, Stangen und Trägern, mit Kostenmodus. POST /v1/optimize/1d
2D-Guillotine, Anritzen und Brechen ohne Schnittfuge für Float-, ESG- und Spiegelglas. POST /v1/optimize/2d
1D-Ablängen von Konstruktionsholz mit Querschnitts-Zuordnung. POST /v1/optimize/wood
True-Shape-Nesting unregelmäßiger Polygone, mit Ausschlusszonen. POST /v1/optimize/nest
True-Shape-Nesting auf Tafeln für Laser, Plasma oder Wasserstrahl. POST /v1/optimize/nest
Optimierung von Biegelisten für Bewehrungsstahl. · Entwicklungspartner gesucht
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.