Przejdź do głównej treści
← Dokumentacja API

Szybki start

Od klucza do pierwszego planu cięcia w kilka minut: zdobądź klucz, wyślij jedno żądanie, odczytaj odpowiedź.

1. Zdobądź klucz

Zaloguj się i utwórz w panelu darmowy klucz testowy: 1000 wywołań miesięcznie, nigdy nie rozliczanych. Klucze live należą do planu Engine API. Żeby się najpierw rozejrzeć, przyciski „Run this example” w przewodnikach używają publicznego klucza demo, bez konta.

Zarządzaj kluczami API →

2. Wyślij jedno żądanie

Wyślij metodą POST części i płyty na /v1/optimize/2d, z kluczem w nagłówku Authorization. To jest udokumentowany przykład:

curl -s https://api.cutoptim.com/v1/optimize/2d \
  -H "Authorization: Bearer $CUTOPTIM_KEY" \
  -H "Content-Type: application/json" \
  -d '{"parts":[{"name":"Door","w":600,"h":400,"qty":4,"rotatable":true}],"stock":[{"w":2440,"h":1220,"qty":10,"price":42}],"options":{"kerf":3,"trim":{"left":10,"top":10},"minimizeCost":true,"effort":"balanced"},"engine":"heuristic","include":["cutPlan","offcuts"]}'

Albo z SDK

To samo żądanie przez oficjalnego klienta dla TypeScript, Pythona lub PHP – dodaje bezpieczne ponawianie i typowany błąd. Instalacja i cała reszta są w przewodniku po SDK. Official SDKsEN

// npm install @cutoptim/engine
import { CutOptim } from '@cutoptim/engine';

const client = new CutOptim({ apiKey: process.env.CUTOPTIM_KEY });
const plan = await client.optimize2d({"parts":[{"name":"Door","w":600,"h":400,"qty":4,"rotatable":true}],"stock":[{"w":2440,"h":1220,"qty":10,"price":42}],"options":{"kerf":3,"trim":{"left":10,"top":10},"minimizeCost":true,"effort":"balanced"},"engine":"heuristic","include":["cutPlan","offcuts"]});
# pip install cutoptim
import os
from cutoptim import CutOptim

client = CutOptim(api_key=os.environ["CUTOPTIM_KEY"])
plan = client.optimize_2d({"parts":[{"name":"Door","w":600,"h":400,"qty":4,"rotatable":True}],"stock":[{"w":2440,"h":1220,"qty":10,"price":42}],"options":{"kerf":3,"trim":{"left":10,"top":10},"minimizeCost":True,"effort":"balanced"},"engine":"heuristic","include":["cutPlan","offcuts"]})
// composer require cutoptim/engine
use CutOptim\Engine\Client;

$client = new Client(getenv('CUTOPTIM_KEY'));
$plan = $client->optimize2d(json_decode('{"parts":[{"name":"Door","w":600,"h":400,"qty":4,"rotatable":true}],"stock":[{"w":2440,"h":1220,"qty":10,"price":42}],"options":{"kerf":3,"trim":{"left":10,"top":10},"minimizeCost":true,"effort":"balanced"},"engine":"heuristic","include":["cutPlan","offcuts"]}', true));

3. Odczytaj odpowiedź

sheets wymienia każdą płytę z rozmieszczonymi częściami (x, y, w, h, rotated) i odpadami; metrics podaje sheetCount i yieldPct; cutPlan to kolejność cięć. Zadanie, które nie mieści się w całości, to nadal 200 — sprawdź unplaced i warnings.

{
  "engine": "heuristic",
  "sheets": [
    {
      "w": 2440,
      "h": 1220,
      "price": 42,
      "parts": [
        {
          "name": "Door",
          "x": 10,
          "y": 10,
          "w": 600,
          "h": 400,
          "rotated": false
        },
        {
          "name": "Door",
          "x": 613,
          "y": 10,
          "w": 600,
          "h": 400,
          "rotated": false
        }
      ],
      "offcuts": [
        {
          "x": 2422,
          "y": 10,
          "w": 18,
          "h": 400
        }
      ]
    }
  ],
  "metrics": {
    "sheetCount": 1,
    "yieldPct": 32.25,
    "placed": 4,
    "total": 4,
    "cutLines": 5,
    "sawPasses": 5,
    "cutLength": 4030,
    "totalPrice": 42
  },
  "unplaced": [],
  "warnings": []
}

Dalej

Sprawdź żądanie za darmo przez /v1/validate/2d, zanim wydasz wywołanie, wypróbuj 1D i drewno, i zobacz wszystkie endpointy w interaktywnej dokumentacji.