api v1

Wepnij nesting we własny system

Ten sam silnik, co w aplikacji. API jest w subskrypcji rocznej. Autoryzacja kluczem, eksport zawsze przez kolejkę — żaden request nie blokuje się na generowaniu PDF-a.

Autoryzacja

Bearer
curl https://rolcut.com/api/v1/me \ -H "Authorization: Bearer nv2_…"

Klucz generujesz w panelu, w zakładce Klucze API. Sekret pokazujemy raz.

Pełny obieg

4 kroki
1. POST /api/v1/uploads → storageRef 2. POST /api/v1/preview → pages, fits 3. POST /api/v1/jobs → jobId 4. GET /api/v1/jobs/:id → print + cut

Krok 2 możesz pominąć — job policzy układ sam.

endpointy

Wszystko, co jest w v1

GET
/api/v1/me

Organizacja, plan, presety, zużycie w miesiącu

POST
/api/v1/uploads

Multipart z polem files — JPEG/PNG/TIFF/WebP/SVG/DXF; opcjonalnie cutLayers/markLayers; zwraca storageRef, contour i markLayers

POST
/api/v1/frames

Rama na wymiar — widthCm, heightCm, profileMm; zwraca ten sam kształt co upload

POST
/api/v1/preview

Układ bez PDF: arkusze, rachunek za media, odrzucone z sugestią wymiaru

POST
/api/v1/jobs

Zlecenie eksportu — jobName, recipeId, items z qty, opcjonalnie placement

GET
/api/v1/jobs

Historia zleceń organizacji

GET
/api/v1/jobs/:id

Status i referencje do wyników

GET
/api/v1/files?ref=…

Pobranie print.pdf, cut.pdf albo cut.dxf

Nakład w jednym item

qty
{ "items": [ { "id": "a1", "storageRef": "s3://…", "widthCm": 60, "heightCm": 80, "qty": 24 } ] }

Plik pobieramy i osadzamy raz, niezależnie od nakładu. Gdy praca nie mieści się na arkuszu, preview zwraca w polu rejected największy wymiar, który jeszcze wejdzie.

Receptura i rachunek za media

recipeId
{ "jobName": "Kowalski / witryna", "recipeId": "…", "wrapMm": 25, "bandMm": 15, "pieceBarcode": true, "items": [ { "id": "a1", "storageRef": "s3://…", "widthCm": 70, "heightCm": 100, "qty": 4, "barcodeText": "250800123" } ] } // odpowiedź preview "usage": { "mediaAreaM2": 8.74, "itemAreaM2": 7.2, "wastePct": 17.6, "linearM": 5.5, "costTotal": 34.96, "costPerPiece": 2.91 }

Receptura podstawia arkusz, pack i ploter oraz niesie koszt metra, spad, wrap, pas i kod sztuki. Te same pola (wrapMm, bandMm, pieceBarcode, barcodeWidthMm, barcodeHeightMm, barcodePadMm) możesz podać w body — nadpiszą recepturę bez ruszania ustawień hali. Na sztuce barcodeText; bez tekstu kodu nie ma.

Nesting po kształcie

trueShape
// odpowiedź uploads "contour": [ [ [0.5, 0.02], [0.61, 0.35], [0.97, 0.36], … ] ] { "trueShape": true, "items": [ { "id": "a1", "storageRef": "s3://…", "widthCm": 40, "heightCm": 40, "qty": 24, "contour": [ … ] } ] }

Upload zwraca sylwetkę (alfa, SVG albo DXF) jako listę pierścieni znormalizowanych do prostokąta pliku (0..1, y w dół). Oddaj ją w contour przy preview i jobs, a prace ułożą się zazębione i pójdą na ploter z konturem cięcia zamiast prostokąta. Pliki bez przezroczystości zostają prostokątami. Bez tego pola decyduje preset packa, a obrót rozszerza się wtedy do 0 | 90 | 180 | 270.

Limity

Liczba równoległych jobów i plików w zleceniu zależy od planu. Przekroczenie zwraca 429 albo 402 z czytelnym komunikatem.

Izolacja

Każdy plik ląduje pod prefiksem orgs/{orgId}/. Klucz z innej organizacji nie zobaczy Twoich danych.

Konfiguracja

W body podajesz sheetId, packId i plotterId. Bez nich lecą presety domyślne hali.

Potrzebujesz klucza?

Konto zakładasz w minutę, klucz jest od razu w panelu.

Załóż konto