API reference
Base URL https://api.cutoptim.com · contract version v1
Create a key on your dashboard, then send it as Authorization: Bearer <key>.
▶ Try the API live — no sign-upUses a public demo key — rate-limited, small jobs only, never billed.
Integrations
Guides
Concepts
Endpoints
| Method | Path | Description |
|---|---|---|
| POST | /v1/optimize/2d | 2D panel optimization |
| POST | /v1/optimize/1d | 1D / linear optimization (bars, profiles, tube) |
| POST | /v1/optimize/wood | timber optimization — 1D with cross-section matching |
| POST | /v1/optimize/nest | true-shape nesting — irregular polygons on fixed sheets, with exclusion zones (laser / plasma / waterjet) |
| POST | /v1/validate/2d | validate a request without solving — free, no key, no quota (2d / 1d / wood / nest) |
| POST | /v1/validate/1d | validate a request without solving — free, no key, no quota (2d / 1d / wood / nest) |
| POST | /v1/validate/wood | validate a request without solving — free, no key, no quota (2d / 1d / wood / nest) |
| POST | /v1/validate/nest | validate a request without solving — free, no key, no quota (2d / 1d / wood / nest) |
| GET | /v1/jobs/{id} | poll an async max-engine job — returns its status and, once finished, the plan (no quota; your own jobs only) |
| POST | /v1/import/nest | read part outlines out of an SVG or DXF file — needs a key, spends no quota |
| GET | /v1/usage | the ACCOUNT's current-month usage and quota (all keys share one) |
| GET | /v1/health | liveness — no key, no rate limit, no database |
POST /v1/validate/{2d,1d,wood,nest} — response
The request is well-formed. No solve ran and no quota was spent.
| Field | Type | Description |
|---|---|---|
| valid | boolean | Always true on a 200 — a malformed request is a 400 with the exact bad field path (details.path) instead. The body is the SAME one the matching optimize endpoint takes. |
| mode | "2d" | "1d" | "wood" | "nest" | The endpoint you called. |
| contractVersion | string | Shape version. Currently "1". |
| engineEnabled | boolean | Nest only — whether the nesting engine is built into this deployment. Absent for the rectangular modes. |
| parts | { rows, total } | Part rows sent, and the total quantity after qty expansion. Check it against the part cap before you spend a call. |
| parts.rows | integer | Number of part rows sent. |
| parts.total | integer | Total quantity across all part rows (Σ qty). |
| stock | { rows, total } | The same for stock. |
| stock.rows | integer | Number of stock rows sent. |
| stock.total | integer | Total quantity across all stock rows (Σ qty). |
| warnings | string[] | Approximate, solve-free feasibility notes — e.g. a part that fits no stock (2D and nest: by bounding box; wood: no matching section long enough). Empty ⇒ every part fits some stock. Ignores trim/kerf/material (a shape check, not a solve). |
OpenAPI specification
A machine-readable OpenAPI 3.1 document describes all twelve endpoints, every request body, every response shape and every error. Point your client generator at it instead of transcribing this page. The document itself is English only: it is made of contract tokens, and OpenAPI has no localization mechanism.
curl -s https://cutoptim.com/engine/openapi.json > cutoptim-engine.jsonOpen the OpenAPI 3.1 document →
- TypeScript
npm install @cutoptim/engine
GitHub · npm - Python
pip install cutoptim
GitHub · PyPI - PHP
composer require cutoptim/engine
GitHub · Packagist
A two-page summary of the Engine API — the four modes (2D, 1D, wood and true-shape nest), a request and response, determinism and pricing. Print-ready, with a QR back to the docs.