Alles, was die Oberfläche kann, geht auch über die Schnittstelle: Datei hochladen, Generierung starten, Status abfragen, G-Code herunterladen. Vier Aufrufe, kein Konto, keine Registrierung — der Zugangsschlüssel aus deinem Guthabenkauf ist der API-Schlüssel.
Gedacht für wiederkehrende Abläufe: Bauteilfamilien mit wechselnden Maßen, Chargen aus einem Konfigurator, nächtliche Läufe. Wer stattdessen einen KI-Assistenten bedienen lassen will, nimmt den MCP-Server, der auf derselben Schnittstelle aufsetzt.
Guthaben und Zugangsschlüssel gibt es unter www.step2gcode.com — ohne Konto und ohne Abo.
Das Anfrage-Objekt ist verschachtelt: oberste Ebene ist die file_id, alles andere steht in Blöcken. Jeder Block ist optional — was du weglässt, bleibt auf dem Standardwert. Unbekannte Felder werden stillschweigend verworfen, ein Tippfehler im Feldnamen fällt also nicht als Fehler auf, sondern als Ergebnis, das nicht zu den Vorgaben passt.
(oberste Ebene)file_id | string, Pflicht | Kennung aus POST /api/upload. | |
nest_uniform_depth | bool | false | Nur beim Anordnen mehrerer Teile: erzwingt eine einheitliche Frästiefe für alle Teile. Ohne das Flag behalten STEP-Teile ihre Tiefe aus der 3D-Geometrie, DXF- und SVG-Teile nehmen depth_override. |
tool — Werkzeugbit_diameter | Zahl, mm | 6.0 | Fräserdurchmesser. Muss in den kleinsten Innenradius des Teils passen. |
cutting_length | Zahl, mm | leer | Nutzbare Schneidenlänge. Ist sie gesetzt, wird die Zustellung nie größer als dieser Wert. |
tool_type | 'endmill' | 'vbit' | 'endmill' | Schaftfräser oder V-Bit. Für Laserjobs stattdessen laser.enabled setzen. |
vbit_angle | Zahl, Grad | 90 | Spitzenwinkel des V-Bits. Nur bei tool_type "vbit". |
vbit_tip_diameter | Zahl, mm | 0 | Durchmesser der abgeflachten Spitze. 0 = spitz, keine Kompensation. |
spindle_speed | Ganzzahl, U/min | 10000 | Drehzahl. Wird von feed_rates überschrieben, falls dieser Block mitkommt. |
horizontal_speed | Zahl, mm/min | 1200 | Vorschub in der Ebene. Ebenfalls von feed_rates überschreibbar. |
vertical_speed | Zahl, mm/min | 300 | Eintauchvorschub. Ebenfalls von feed_rates überschreibbar. |
feed_rates — SchnittwerteKommt dieser Block mit, gelten seine Werte statt der drei Geschwindigkeiten aus tool. Wichtig für Skripte: Es gibt keine serverseitige Materialautomatik — die Schnittwerte, die du schickst, werden genau so verwendet.
auto_calculate | bool | true | Herkunft aus der Oberfläche, wo damit das Materialpreset rechnet. Über die Schnittstelle hat das Feld keine Wirkung; setze es der Klarheit halber auf false, wenn du eigene Werte schickst. |
spindle_speed | Ganzzahl, U/min | 18000 | Drehzahl. |
horizontal_speed | Zahl, mm/min | 1200 | Vorschub in der Ebene. |
vertical_speed | Zahl, mm/min | 400 | Eintauchvorschub. |
material — Werkstofftype | string | 'wood' | Werkstoff, etwa wood, hardwood, plywood, acrylic, aluminum, steel, brass. Beeinflusst ausschließlich, ab wann Bohrungen helikal statt bohrend erzeugt werden — Drehzahl und Vorschub kommen aus tool beziehungsweise feed_rates. |
depth — Tiefedepth_override | Zahl, mm | leer = AUTO | Frästiefe. Leer heißt: aus der Geometrie ableiten (bei STEP die Bauteilhöhe). Bei DXF und SVG gibt es nichts abzuleiten, dort ist der Wert praktisch Pflicht. |
step_down | Zahl, mm | leer = AUTO | Zustellung je Durchgang. Achtung: Solange settings.optimize_passes true ist, gilt der Wert nur als Obergrenze und die tatsächliche Zustellung wird darunter optimiert. Für eine exakte Zustellung optimize_passes auf false setzen. |
final_depth_offset | Zahl, mm | 0.1 | Wie weit die letzte Bahn unter die Bauteilunterkante fährt, damit der Zuschnitt sauber durchtrennt wird. |
origin — Nullpunkt und LageDie Kurzschreibweise xy und z wird ebenfalls angenommen und ist gleichbedeutend mit origin_xy und origin_z.
origin_xy | 'TL' | 'TR' | 'BL' | 'BR' | 'C' | 'TL' | Nullpunkt in der Ebene: Ecke oben links, oben rechts, unten links, unten rechts oder Mitte. |
origin_z | 'top' | 'spoilboard' | 'top' | Z-Null auf der Werkstückoberfläche oder auf der Opferplatte. |
rotation_z | Zahl, Grad | 0 | Dreht das Teil in der Ebene, etwa um es günstiger auf die Platte zu legen. |
rotation_x | Zahl, Grad | 0 | Kippt das Modell um die X-Achse. Für Teile, die im CAD nicht flach liegen. |
rotation_y | Zahl, Grad | 0 | Kippt das Modell um die Y-Achse. |
work_coordinate_system | 'G54' … 'G59' | 'G54' | Werkstück-Koordinatensystem, das im Programm angewählt wird. |
operations — Bearbeitungencontour | bool | true | Außenkontur fräsen. |
inner_contour | bool | true | Innenkonturen und Ausschnitte, die keine runden Bohrungen sind. |
holes | bool | true | Runde Bohrungen. |
pockets | bool | true | Taschen. Die Tiefeninformation dafür steckt in der STEP-Geometrie; DXF und SVG tragen sie nicht. |
pocket_step_over | Ganzzahl, % | 50 | Überlappung der Bahnen beim Ausräumen. |
pocket_start_at | 'Edge' | 'Center' | 'Edge' | Ausräumen von außen nach innen oder von innen nach außen. |
dogbone | bool | false | Dogbone-Ecken, damit rechtwinklige Gegenstücke in Innenecken passen. |
ramp_entry | bool | true | Auf einer Rampe eintauchen statt senkrecht. |
cylindrical_hole_mode | 'auto' | 'helix' | 'normal' | 'auto' | Wie runde Bohrungen erzeugt werden: helikal fräsen, bohren, oder automatisch nach Durchmesser und Werkstoff entscheiden. |
order | Liste von Strings | leer | Eigene Reihenfolge der Bearbeitungen, etwa ["facing","pockets","holes","inner","contour","other"]. Leer heißt: interne Standardreihenfolge. |
settings — Ablaufholding_tabs | bool | true | Hauptschalter für Haltestege. Die Geometrie der Stege steht in tags. |
holding_tabs_outer | bool | true | Stege an der Außenkontur. |
holding_tabs_inner | bool | true | Stege an Innenkonturen. |
ramp_entry | bool | true | Rampen-Eintauchen, wie in operations. |
dogbone | bool | false | Dogbone-Ecken, wie in operations. |
optimize_passes | bool | true | Verteilt die Tiefe selbst auf gleichmäßige Durchgänge und behandelt depth.step_down nur als Obergrenze. Auf false setzen, wenn die Zustellung exakt eingehalten werden soll. |
tags — HaltestegeWirkt nur, wenn die Stege über settings.holding_tabs freigeschaltet sind. Leere Maße heißen AUTO: passend zu Werkstückgröße und Fräserdurchmesser.
enabled | bool | false | Stege erzeugen. |
width | Zahl, mm | leer = AUTO | Breite eines Stegs. |
height | Zahl, mm | leer = AUTO | Höhe eines Stegs, üblicherweise ein Bruchteil der Frästiefe. |
length | Zahl, mm | leer = AUTO | Länge eines Stegs entlang der Kontur. |
angle | Zahl, Grad | 45 | Flankenwinkel der Stege. |
spacing | Zahl, mm | leer = AUTO | Abstand zwischen zwei Stegen entlang der Kontur. |
facing — Planfräsenenabled | bool | false | Oberfläche vorher planfräsen. |
depth | Zahl, mm | 0.5 | Abzutragende Schicht. |
step_over | Ganzzahl, % | 50 | Bahnüberlappung. |
pattern | 'ZigZag' | 'Offset' | 'ZigZag' | Bahnmuster. |
zigzag_angle | Zahl, Grad | 0 | Richtung der ZigZag-Bahnen. |
add_to_depth | bool | true | true: Die Planschicht kommt zur Rohteildicke hinzu. false: Sie wird von der Frästiefe abgezogen. |
extension | Zahl, mm | leer = halber Fräser | Überstand über die Werkstückkante hinaus. 0 schaltet den Überstand ab. |
chamfer — Fase, Gravur und 2D-Direktmodusenabled | bool | false | Fase mit dem V-Bit fahren. |
depth | Zahl, mm | 2.0 | Tiefe der Fase. |
hole_depth | Zahl, mm | leer | Abweichende Fasentiefe an Bohrungen. Leer heißt: wie depth. |
engraving | bool | false | Gravurmodus: fährt die Kontur ohne Werkzeugradius-Kompensation ab, auch bei abgeflachter Spitze. |
dxf_direct | bool | false | 2D-Direktmodus: G-Code unmittelbar aus den DXF-Pfaden, ohne den Umweg über eine Extrusion. |
controller_compensation | bool | false | Radiuskompensation der Steuerung überlassen (G41/G42), statt sie in die Bahn zu rechnen. |
vshape_adaptive — V-Carveenabled | bool | false | V-Carve mit anpassender Tiefe statt konstanter Fasentiefe. |
max_depth | Zahl, mm | 0 = unbegrenzt | Obergrenze der Schnitttiefe. |
depth_step | Zahl, mm | 0.5 | Tiefenzuwachs je Durchgang. |
nesting_mode | 'inner' | 'outer' | 'inner' | Kontur-Auswahl: in den Innenkonturen schnitzen oder die Außenbereiche abtragen und Löcher aussparen. Nicht zu verwechseln mit dem Anordnen mehrerer Teile. |
laser — Laserenabled | bool | false | Laserjob statt Fräsjob. |
power | Zahl, % | 100 | Leistung. |
speed | Zahl, mm/min | 1000 | Geschwindigkeit. |
passes | Ganzzahl | 1 | Anzahl der Durchgänge. |
mode | 'cut' | 'engrave' | 'cut' | Schneiden oder gravieren. |
kerf | Zahl, mm | 0 | Schnittfugenbreite, um die die Bahn versetzt wird. |
kerf_enabled | bool | false | Schaltet die Kompensation ein. Ohne dieses Flag bleibt kerf wirkungslos. |
nesting | 'all' | 'outer' | 'inner' | 'all' | Kontur-Auswahl: alle Konturen, nur äußere oder nur innere. |
postprocessor — AusgabeformatDie vollständige Liste der Namen liefert GET /api/postprocessors.
name | string | 'grbl_post' | Steuerungsdialekt, etwa grbl_post, linuxcnc_post, mach3_mach4_post, uccnc_post, marlin_post, fanuc_post, heidenhain_post, estlcam_post. |
custom_preamble | string | leer | Eigene G-Code-Zeilen vor allen Bearbeitungen. |
custom_postamble | string | leer | Eigene G-Code-Zeilen nach allen Bearbeitungen. |
Der erzeugte G-Code ist ein maschinell erstellter Vorschlag. Prüfe Werkzeugwege, Zustellungen, Vorschübe und Sicherheitsabstände vor jedem Lauf, und fahre im Zweifel einen Luftschnitt ohne Werkstück. Hochgeladene Dateien werden spätestens nach 24 Stunden gelöscht.
Mit dem Zugangsschlüssel aus deinem Guthabenkauf, als Kopfzeile Authorization: Bearer DEIN-TOKEN. Ist dieser Kopf schon belegt — hinter manchen Firmenproxys oder einer vorgelagerten Basic-Auth —, nimm stattdessen X-Api-Token: DEIN-TOKEN. Beide Wege sind gleichwertig.
Upload und Generierung laufen weiterhin, der Download antwortet mit dem Statuscode 402 und der Begründung no_credits. Ein ungültiger Schlüssel wird schon beim Upload mit 401 und invalid_token abgewiesen.
Dieselben wie in der Oberfläche, als verschachteltes Objekt. Sämtliche Felder mit Typ, Standardwert und Wirkung stehen weiter oben unter „Alle Parameter von POST /api/generate" — jeder Block ist optional, was du weglässt, bleibt auf dem Standard. Drei Fallstricke lohnen den Blick: depth.step_down wirkt nur als Obergrenze, solange settings.optimize_passes true ist; laser.kerf braucht zusätzlich kerf_enabled; und ein Materialname setzt keine Schnittwerte, die kommen aus tool beziehungsweise feed_rates.
Ja, eine Ratenbegrenzung je IP-Adresse, damit der Dienst für alle erreichbar bleibt. Ein gültiger Zugangsschlüssel hebt die Grenze an. Massenabfragen ohne Schlüssel sind laut Nutzungsbedingungen nicht erlaubt.
Hochgeladene Dateien und Ergebnisse werden spätestens nach 24 Stunden gelöscht, ein Neustart des Dienstes kann laufende Job-Kennungen früher ungültig machen. Lade den G-Code also zeitnah herunter.
Dann nimm den MCP-Server: Er setzt auf derselben Schnittstelle auf und macht daraus Werkzeuge für Claude, ChatGPT, die Gemini CLI und andere Clients.