Calls
Linear cutting
Cut parts to length from bars, pipe, tube, extrusion or lumber with the least waste. Solves in one call.
Two calls, both taking the same body: a linear cut list, field for field as the web optimizer saves it.
| Call | Does | Counts as |
|---|---|---|
POST /v1/linear/validate |
Checks the cut list by the optimizer's rules, without solving | Free call |
POST /v1/linear/solves |
Solves it and answers with the plan | Solve |
The request
Numbers are strings, typed as on the web form, in unit.
{
"unit": "in",
"kerf": "0.125",
"target": "waste",
"strict": false,
"miter_enabled": true,
"material_width": "3.5",
"stocks": [
{ "length": "240", "qty": "", "minimum_drop": "12", "price": "38.50", "zones": [] },
{ "length": "144", "qty": "2", "minimum_drop": "12", "zones": [{ "start": "0", "end": "6", "keep": false }] }
],
"parts": [
{ "length": "47.5", "quantity": "8", "label": "Stringer" },
{ "length": "31.25", "quantity": "12", "label": "Tread", "miter_left": "45", "miter_right": "90" }
]
}
| Field | Meaning |
|---|---|
unit |
mm, cm, m or in. Write inches as decimals: 47.5, not 47 1/2. |
kerf |
The saw's kerf, lost at every cut. |
target |
What the plan aims for: bars (fewest bars), waste, drop (the most reusable drop) or cost. |
strict |
true fails the request when a part cannot be placed; false lists it under unplaced. |
stocks[] |
Each stock length: length, qty (blank for as many as needed), minimum_drop (the shortest leftover worth keeping), optional price, material_key, and zones[] with start, end and keep for defects, bad sections and edge trims. |
parts[] |
Each part: length, quantity, label, and optionally miter_left and miter_right in degrees (90 is square), priority, material_key, finish_left, finish_right, finish_label. |
stock_mode |
stock (the default) or roll, a roll cut to length. |
miter_enabled |
Whether the parts' miter angles count; material_width gives the stock's width for them, and is required when miters are on. Without miter_enabled: true, every miter reads as 90. |
Options that belong to the Bench plan: stock_mode: "roll", target: "cost", material_key, priority, and the finish_* fields. On Free they are refused with 403 naming the plan. Miter cuts are on every plan, so the sample above solves on Free. A cut list past its tier's cap on cuts or stock lengths is refused with 422, upgrade naming the plan that takes it. Plans and limits has the caps.
The plan
{
"unit": "in",
"bars": [
{
"stock_row": 0,
"length": 240,
"material": "",
"cuts": [{ "at": 0, "length": 47.5, "label": "Stringer", "rush": false }],
"blocked": [],
"leftovers": [{ "start": 190.5, "end": 240, "kind": "drop" }],
"drop": 49.5,
"scrap": 0
}
],
"metrics": { "bars": 3, "stock_length": 720, "parts_length": 755, "drop": 49.5, "blocked": 6, "scrap": 3.4, "utilization_percent": 91.2 },
"unplaced": [{ "length": 31.25, "label": "Tread", "quantity": 1 }],
"unpriced_stock_rows": [1],
"cost": { "…": "when prices are given" },
"explanation": "…"
}
bars[]: each bar used, from whichstock_row, withcuts[]in order along the bar (atis where the cut starts),blocked[]spans,leftovers[]asdrop(worth keeping) orscrap, and the bar's totals.metrics: the job's totals in the request's unit, and the utilization.unplaced[]: parts that did not fit, with how many. Empty whenstrictistrueand the request succeeded.unpriced_stock_rows[]: the stock rows used in the plan that have noprice. Always present; empty when every used row is priced.cost: the cost summary when prices are given, elsenull.
The exact shapes are in the API reference under LinearRequest and LinearReport.
Saw stop CSV
On the Bench plan and up, a solved plan on the web downloads a CSV for saw stops and push-feed saws. It has one header row, then one row for each run of the same cut on a bar, in the order the bar is cut:
| Column | Holds |
|---|---|
Bar |
The bar's number, 1 for the first bar cut. |
Order |
The row's place in that bar's cutting order. |
Quantity |
How many of this cut, one after another. |
Length |
The part's length as typed, in the plan's unit: up to 4 decimals in inches, 2 in millimetres. |
Left angle, Right angle |
Each end's angle in whole degrees; 90 is a square end. |
Label, Material |
The part's label and material. |
Stock length |
The length of the bar it comes from. |
The file is plain ASCII with commas between columns, as the cut list rules in TigerStop's TigerSaw manual ask: a length column, two angle columns for mitering, and quantity and part name beside them. Map the columns once in TigerLink or your saw's own import. Cut one test bar from the file and measure it before you run the job.
Labels
A solved plan on the web prints labels for every part and every drop, on every plan. A part label carries its name, length, material, its bar and where on the bar it is cut, and a QR code. A drop label carries its length, material, its bar and a QR code. The QR code holds short plain text that says what the piece is, so it reads without NestSolver. Exports lists the label sizes.