Start
Overview
What the NestSolver API and MCP server do, where they live, and how a call works. Start here.
NestSolver plans cutting and loading for shops: parts cut to length from bars and pipe, rectangles cut from sheets, irregular parts nested on sheets, and cargo loaded onto pallets and trucks. The API and the MCP server give your own tools the same planner the web has, under the same tiers and limits.
Two ways in
| Where | For | |
|---|---|---|
| REST API | https://api.nestsolver.com/v1 |
Scripts, ERPs, CAM pipelines, warehouse systems. JSON in, JSON out. |
| MCP server | https://mcp.nestsolver.com/ |
AI assistants such as Claude Code and Cursor. The same calls, as tools the assistant fills in. |
Both take the same keys under the same tiers; each counts its per-minute budgets on its own. Connect an assistant covers MCP; the rest of these guides describe the API. Each MCP tool is one of the API's calls, with the same arguments, though exports and the OpenAPI document have no tool.
How a call works
- Make a key on the portal's API keys page and send it as
Authorization: Bearer <key>. Authentication. - Send a cut list or a load as JSON. Linear and sheet cut lists solve in one call. Nests and loads start as jobs. Quickstart.
- For a job, poll its status until it is done, then read the plan and download its exports. Jobs and plans, Exports.
- Every call runs under the tier of the key's workspace: job caps, calls a minute, and a monthly pool of search time for nests and loads (5 loads a month on Free). Plans and limits.
curl https://api.nestsolver.com/v1/linear/validate \
-H "Authorization: Bearer $NESTSOLVER_KEY" \
-H "Content-Type: application/json" \
-d '{ "unit": "mm", "kerf": "3", "target": "waste", "strict": false,
"stocks": [{ "length": "6000", "qty": "", "minimum_drop": "300", "zones": [] }],
"parts": [{ "length": "1250", "quantity": "4", "label": "Rail" }] }'
The calls
| Call | Does |
|---|---|
POST /v1/linear/validate, POST /v1/linear/solves |
Check or solve a linear cut list |
POST /v1/sheet/validate, POST /v1/sheet/solves |
Check or solve a sheet cut list |
POST /v1/nests |
Start a true-shape nest |
POST /v1/loads |
Start a load plan |
GET /v1/jobs/{id} |
Check where a nest or load stands |
GET /v1/plans/{id} |
Read a finished plan |
GET /v1/plans/{id}/exports/{format} |
Download a plan's file |
GET /v1/usage |
Read the month's search time |
GET /v1/openapi.json |
The OpenAPI document |
The API reference has every field of every call.
Conventions
- JSON everywhere, UTF-8. Send
Content-Type: application/json. - Numbers are strings in requests, typed as on the web form:
"1250","3","0.125". Answers carry numbers. - Ids are opaque strings (UUIDs, like
0192f0c4-7d1e-7c3a-9b2e-5d6f7a8b9c0d). Keep them as they come. Links in answers are full URLs. - Times are ISO 8601 in UTC, like
2026-03-14T09:12:44Z. - Errors share one shape, a list of problems each naming its field. Errors.
- Retries are safe with an
Idempotency-Key. Idempotency and retries. - Versioning: every path starts with
/v1. Fields are added, never removed or renamed, within a version. The changelog lists what changed.
Client libraries
There are no official libraries yet. The API is plain HTTPS and JSON, so any HTTP client works, and the OpenAPI document feeds the usual generators (OpenAPI Generator, Kiota, openapi-typescript) when you want typed clients. The API reference shows each call in curl, Python, JavaScript and more.