Sari la conținutul principal
Pe această pagină

Engine API

Dacă doar tai panouri, nu ai nevoie de această pagină. Optimizatorul din CutOptim face deja tot ce este descris aici. Engine API este același motor, doar fără ecran, pentru situația în care alt software are nevoie de planuri de tăiere fără ca o persoană să deschidă aplicația.

Tot ce face CutOptim în browserul tău pornește de la un singur calcul: având aceste piese și acest material de bază, care este cel mai bun mod de a le tăia? Engine API expune exact acel calcul prin internet, astfel încât un alt program să poată pune întrebarea și să primească răspunsul înapoi — fără browser, fără clicuri, fără ca nimeni să fie autentificat.

Asta este toată ideea. Nu este un optimizator nou, nu este un optimizator mai bun și nu este un plan mai mare. Este același motor, accesibil pentru software în loc de o persoană.


Este pentru mine?

Pentru marea majoritate a utilizatorilor CutOptim, răspunsul sincer este nu. Dacă ziua ta de lucru înseamnă să deschizi CutOptim, să introduci piesele și materialul de bază și să tipărești sau să exporți planul, aplicația este produsul, iar această pagină nu te privește.

Engine API este pentru o singură situație: planurile de tăiere trebuie să apară în interiorul unui software pe care îl folosești deja, fără ca nimeni să intre pe CutOptim. În practică, asta înseamnă una din două persoane:

  • Folosești deja un software în care planul de tăiere își are locul. Un ERP care ține comenzile, o aplicație de ofertare care calculează prețul lucrărilor sau software-ul propriu al unei mașini. În loc ca un operator să reintroducă aceeași listă de piese în CutOptim, acel program întreabă direct motorul și afișează planul acolo unde se lucrează deja.
  • Se construiește un software pentru tine. De un programator intern, de o firmă locală de software sau de furnizorul mașinii tale. Engine API este ceea ce conectează ei.

Folosirea Engine API înseamnă că cineva scrie software care îl apelează. Nu există interfață, nu există niciun tabel de completat și nu ai nimic de instalat — este un serviciu pentru programe, iar munca este făcută de cine scrie acel program. Dacă nimeni de partea ta nu scrie cod, aplicația este ceea ce îți trebuie.

Dacă nu ești sigur de care parte a liniei te afli, un test bun: ar putea apărea planul fără ca nimeni să îl ceară? Dacă da, API-ul este relevant. Dacă întotdeauna o persoană decide să facă un plan de tăiere, aplicația este deja instrumentul potrivit.


Ce face

Software-ul tău trimite aceleași două lucruri pe care le-ai introduce în aplicație — o listă de piese și o listă de material de bază — ca JSON. Motorul trimite înapoi un răspuns complet:

  • Layoutul complet. Fiecare piesă, poziționată pe o anumită placă sau bară, inclusiv dacă a fost rotită.
  • Un plan de tăiere. Nu doar o imagine cu dreptunghiuri: secvența reală de tăiere ghilotină, în ordine, astfel încât planul să poată fi executat pe un ferăstrău pentru panouri.
  • Cifrele. Câte plăci sau bare consumă lucrarea, procentul de randament, câte tăieri sunt necesare și prețul total al materialului folosit. Pentru panouri primești și cele două numere oneste de tăieri — linii de tăiere, care unifică tăierile ce împart aceeași reglare a opritorului, și treceri de ferăstrău, care numără fiecare trecere — plus lungimea totală tăiată.
  • Opțional, desenul. Cere include: ["svg","csv","dxf"], iar răspunsul poartă în plus layoutul ca fișier gata făcut — un desen SVG 2D de sine stătător, un DXF R12/AC1009 sau o listă de tăiere CSV — inline în JSON, fără stocare și fără un al doilea apel. (SVG este doar 2D.)
  • Propriii tăi identificatori, returnați. Atașează un obiect meta — un număr de articol, o linie de comandă, o referință de client — oricărei piese sau oricărui rând de material, iar el revine neschimbat pe fiecare piesă plasată și pe fiecare placă sau bară, astfel încât planul să se potrivească cu propriul tău sistem. Acesta este câmpul de folosit când vrei să trimiți toate plăcile tale, să marchezi fiecare cu propriul tău cod și să citești înapoi ce placă a ales optimizatorul — pui codul în stock[].meta și îl primești identic pe sheets[].meta. Nu influențează niciodată plasarea. Nu folosi câmpul material pentru identificare: material este o partiționare strictă — o piesă este tăiată doar din material de bază care poartă aceeași etichetă material —, așa că etichetarea fiecărui rând de material, lăsând piesele neetichetate, face ca toate piesele să revină ca unmatched, iar rezultatul să fie gol.

Sunt patru moduri de optimizare, toate corespunzând aplicației — unul pentru plăci 2D, unul pentru material 1D liniar (bare, profile, țeavă), unul pentru lemn, al cărui material are o secțiune, și nesting-ul true-shape (POST /v1/optimize/nest), care aranjează poligoane arbitrare pentru tăiere cu laser, plasmă și jet de apă (modul Nesting al aplicației). Fiecare endpoint de optimizare are și un endpoint gratuit de validare, care verifică o cerere fără să o rezolve (vezi mai jos).

Endpointuri

URL-ul de bază este https://api.cutoptim.com. Endpointurile de optimizare și de consum poartă o cheie în antetul Authorization: Bearer <key>; endpointurile de validare și de disponibilitate nu au nevoie de cheie.

Endpoint Ce face
POST /v1/optimize/2d optimizare 2D pentru panouri
POST /v1/optimize/1d optimizare 1D / liniară — bare, profile, țeavă
POST /v1/optimize/wood Optimizarea lemnului — 1D cu potrivirea secțiunii
POST /v1/optimize/nest Nesting true-shape — poligoane neregulate pentru laser, plasmă și jet de apă
POST /v1/validate/2d · /1d · /wood · /nest Validează o cerere fără s-o rezolve — gratuit, fără cheie, fără cotă
GET /v1/jobs/{id} Interoghează o lucrare asincronă a motorului max — doar propriile lucrări, fără cotă
POST /v1/import/nest Citește conturul pieselor dintr-un fișier SVG sau DXF — necesită o cheie, nu consumă cotă
GET /v1/usage consumul și cota CONTULUI în luna curentă (toate cheile împart una)
GET /v1/health verificare de disponibilitate — fără cheie

Cele mai multe apeluri primesc direct rezultatul final. Singura excepție este motorul asincron max (vezi Trei motoare mai jos): o trimitere max returnează un id de lucrare, iar tu interoghezi GET /v1/jobs/{id} până când planul este gata.

Endpointurile de validare preiau același corp ca endpointul de optimizare corespunzător și îl verifică fără a rula rezolvarea: o cerere malformată revine ca un 400 care numește exact câmpul greșit, iar una bine formată returnează valid: true plus avertismente de fezabilitate (de exemplu, o piesă care nu încape în niciun material). Nu costă nimic și nu au nevoie de cheie, așa că îți poți valida payload-urile în timp ce construiești integrarea — încă înainte de a avea o cheie — și poți confirma că o cerere nu va fi respinsă fără să consumi unul dintre apelurile tale lunare.

De ce lemnul are endpoint propriu

Materialul liniar cunoaște o singură dimensiune, lungimea, așa că orice bară poate servi oricărei piese. La lemn nu este așa: o piesă 50×150 nu poate ieși dintr-o bară 50×100, oricâtă lungime ar rămâne. De aceea endpointul pentru lemn preia ambele laturi ale secțiunii pentru fiecare piesă și fiecare rând de material, împarte lucrarea pe secțiuni, potrivește fiecărei secțiuni materialul ei și returnează secțiunile separat — fiecare cu barele și totalurile proprii, alături de cifrele pentru întreaga lucrare.

Două detalii de știut înainte de integrare:

  • Cele două laturi ale secțiunii pot fi trimise în orice ordine. 50×100 și 100×50 sunt aceeași grindă întoarsă și formează o singură secțiune. Astfel, o diferență în felul în care au fost introduse datele tale nu poate face materialul să dispară.

  • „Niciun material de această secțiune” și „nu a încăput” se raportează separat. Primul înseamnă material lipsă, al doilea o problemă de capacitate, iar rezolvarea diferă — amestecate într-o singură listă, l-ar trimite pe utilizatorul tău să caute în locul greșit.

Ai putea aproxima asta cu mai multe apeluri 1d proprii, grupând piesele singur. Te-ar costa o cerere din cotă pentru fiecare secțiune în loc de una pentru lucrare, ar muta potrivirea materialului în codul tău și ar produce un total pe care ar trebui să-l compui singur — și care nu ar coincide neapărat cu ce arată aplicația CutOptim pentru aceeași lucrare.


Piese dintr-un fișier CAD

Endpointul de nesting nu acceptă doar coordonate. O piesă poate purta în schimb un source — un document SVG sau DXF — iar serverul îi extrage conturul, și găurile din el, din fișier. Este același cititor pe care aplicația îl folosește când tragi un desen peste modul ei Nesting, deci o bibliotecă de piese care există deja ca fișiere CAD nu trebuie rescrisă mai întâi în liste de coordonate.

Fișierul înlocuiește doar geometria. Cantitatea, materialul, rotațiile permise și propriile tale metadate rămân câmpuri obișnuite ale rândului piesei, exact ca atunci când trimiți coordonate. Un fișier descrie o piesă; când un singur desen conține mai multe componente separate, POST /v1/import/nest îl împarte întâi în rânduri gata de folosit — iar acel apel necesită o cheie, dar nu consumă o cerere din cota ta lunară.

Nimic nu se stochează. Fișierul există doar ca cererea însăși: este citit în memorie și dispare în momentul în care răspunsul este scris. Nu rămâne nicio copie pe disc sau într-o bază de date, nimic nu ajunge într-un jurnal și nu este nimic de șters după aceea. Cu unitățile procedăm la fel — un DXF poate declara milimetri sau inci și noi raportăm ce a spus, dar coordonatele nu sunt niciodată convertite, fiindcă nicio valoare din acest API nu poartă o unitate.

Același răspuns de fiecare dată

Motorul este determinist: aceeași intrare produce întotdeauna același rezultat. Nu există aleatoriu și nu există ceas în algoritm.

Sună academic, dar este exact motivul practic pentru care merită să construiești pe el. Înseamnă că rezultatele pot fi puse în cache — dacă ai întrebat deja despre exact aceeași lucrare, poți refolosi liniștit răspunsul în loc să întrebi din nou. Înseamnă și că integrarea poate fi testată: un plan poate fi comparat cu un rezultat cunoscut ca bun, iar o diferență este o diferență reală, nu zgomot. Un software care dă luni un preț unui client va da vineri același preț.


Trei motoare

API-ul oferă mai multe variante de motor. Primele două rulează sincron; al treilea este asincron. Diferența nu este de calitate — este un compromis între viteză, faptul că rezultatul poate fi tăiat sau nu pe un ferăstrău pentru panouri și cât de aproape ajunge de minimul teoretic.

  • heuristic este cel implicit și este același pe care îl folosește aplicația. Produce aranjamente ghilotină: cel mai bun randament, fiecare aranjament tăiabil pe ferăstrău și întotdeauna un plan de tăiere complet. Sincron.
  • balanced se activează explicit. Folosește în schimb nesting liber, care este dramatic mai rapid la lucrările foarte mari — măsurat aproximativ 25× mai rapid la o lucrare de 2.000 de piese — cu prețul unui randament puțin mai mic. Reținerea importantă: aranjamentele sale adesea nu pot fi tăiate de la o margine la alta, așa că pentru acelea nu returnează niciun plan de tăiere. Sincron.
  • max se activează explicit și este doar 2D. Este o căutare în arbore pe server care atinge optimul demonstrat pe mult mai multe lucrări decât cel implicit, iar aranjamentele sale rămân tăiabile ghilotină. Costul este timpul: o rezolvare max durează de la câteva secunde până la un minut, deci nu răspunde în cadrul răspunsului. În schimb, POST /v1/optimize/2d cu engine: "max" returnează un id de lucrare, iar tu interoghezi GET /v1/jobs/{id} până când este gata. Rămâne determinist. Apelează la el atunci când o lucrare mare și valoroasă merită așteptarea pentru ultimele câteva plăci. Modelează un singur format de stoc la dimensiunea completă a plăcii, cu disponibilitate nelimitată, așa că o cerere care mai poartă un al doilea format de stoc, trim pe laturi, stoc limitat (respectStock), materiale sau grupuri de fibră este refuzată din start cu un 400 care numește exact ce nu poate face — înainte ca un apel să fie taxat. Trimite acele lucrări către heuristic, care le modelează pe toate.

balanced nu înseamnă „rezultate mai bune”. Este mai rapid și dă un randament puțin mai mic, iar când aranjamentul său nu este tăiabil ghilotină nu există niciun plan de tăiere de dat unui operator de ferăstrău. Alege-l doar când viteza la o lucrare foarte mare contează mai mult decât un plan gata de ferăstrău. Dacă nu ești sigur, rămâi pe varianta implicită.


Limite

Fiecare cerere este mărginită, așa că o lucrare scăpată de sub control eșuează clar, în loc să rămână blocată:

Limită Valoare
Piese per cerere 2.000
Rânduri de material per cerere 50
Dimensiunea corpului cererii 1 MB
Dimensiunea corpului cererii — rutele nest care pot purta un desen 10 MB
Chei active per cont 10
Apeluri validate fără cheie per adresă 120 / minut
Lucrări max în queued/running per cont 5

Obținerea accesului

Pornește de la pagina Engine API. Engine API se facturează separat de planurile aplicației și nicio schimbare de plan nu îl activează.

  1. Abonează-te sau scrie-ne. Abonarea din pagina Engine API este calea cea mai rapidă — are o perioadă de probă, iar accesul ajunge singur în cont. Dacă preferi să descrii mai întâi integrarea sau ai nevoie de un volum peste planul standard, scrie-ne și spune ce vrei să conectezi și aproximativ câte planuri de tăiere pe lună va fi nevoie.
  2. Accesul este adăugat pe contul tău. Nimic altceva la contul tău nu se schimbă.
  3. Creează o cheie. Odată ce contul tău are acces API, în panoul de control apare un card Chei API. Îți creezi, denumești și ștergi singur cheile de acolo.
  4. Copiază imediat cheia. Cheia completă este afișată exact o singură dată, în momentul în care o creezi.

O cheie este afișată o singură dată. CutOptim stochează doar un hash sha256 al ei, niciodată cheia în sine — deci nu poate fi citită înapoi mai târziu, nici de tine, nici de noi. Copiază-o direct în configurația software-ului tău atunci când o creezi. Dacă pierzi o cheie, șterge-o și creează una nouă; dacă o cheie ajunge vreodată să fie expusă, șterge-o și apelurile încetează să funcționeze imediat.

Tratează o cheie ca pe o parolă: locul ei este în configurația software-ului tău, nu într-un email, într-un tabel sau într-o captură de ecran.

Ce face cardul Chei API din panoul tău

Trei comenzi — și merită spus exact ce schimbă fiecare, mai ales ultima, despre care mulți cred că ține de facturare. Nu ține.

  • Creează cheie. Generează o cheie nouă și o afișează o singură dată, chiar acolo. Numele (Integrare ERP, staging) există doar ca să le deosebești mai târziu. Până la 10 chei active per cont.
  • Bara de consum. Două cifre: totalul contului pe luna calendaristică față de cotă și, pentru fiecare cheie, cât a consumat ea. Cifra pe cheie răspunde la care integrare consumă alocarea — nu este un buget separat.
  • Revocă. Scoate din uz acea singură cheie, începând cu următorul apel. Rândul rămâne vizibil, ca istoricul să nu se piardă.

Revocarea unei chei nu are legătură cu abonamentul. Nu anulează nimic, nu returnează bani și nu eliberează cotă — planul merge mai departe și alocarea rămâne, doar că nu mai deții acea cheie. Revocă atunci când o cheie a fost expusă sau o integrare este retrasă. Ca să nu mai fii facturat, anulează abonamentul: accesul continuă până la finalul perioadei deja plătite, iar după aceea încetează să funcționeze și cheile existente.

O singură cotă pentru cont, nu una pentru fiecare cheie

Fiecare cheie activă a contului consumă din aceeași alocare lunară. A doua cheie nu creează o a doua cotă — cheile există ca să separi staging-ul de producție, să dai fiecărei integrări propria credențială și să revoci una fără să le deranjezi pe celelalte.

GET /v1/usage raportează situația contului (used, limit, remaining), deci răspunde la întrebarea pe care o ai de fapt — cât a mai rămas până când apelurile încep să eșueze — indiferent de cheia cu care ai întrebat. Când alocarea se termină, fiecare cheie returnează 402, nu doar cea care a consumat-o.


Preț și cotă

Engine API este facturat separat de planurile aplicației, cu un număr fix de cereri pe lună. Prețul actual, cota lunară de cereri și durata perioadei de probă sunt toate listate pe pagina Engine API — acea pagină le citește din configurația noastră de prețuri, deci cifra de acolo este întotdeauna cea corectă.

Pentru detaliile tehnice — structura exactă a cererii și a răspunsului, fiecare opțiune, toate codurile de eroare și modul în care funcționează versionarea — vezi documentația API.


Ce nu se schimbă

Merită spus limpede, pentru că Engine API este ușor de citit greșit ca o schimbare a produsului:

  • Optimizatorul din aplicație este neschimbat. Rulează în continuare în browserul tău, exact ca înainte.
  • Gratuit, Pro și Atelier nu sunt afectate. Includ în continuare optimizatorul din aplicație, cu aceleași limite ca înainte. Nimic nu a fost mutat în spatele API-ului.
  • Nimic din ce faci în aplicație nu consumă cereri API. Cota lunară de API este atinsă doar de apelurile făcute de propriul tău software.

Engine API este o adăugire pentru cei care integrează CutOptim în alt software. Dacă nu este cazul tău, nimic nu s-a schimbat.

FAQ

Am nevoie de Engine API?
Aproape sigur nu. Dacă tai panouri sau bare deschizând CutOptim în browser, aplicația face deja tot ce face API-ul — API-ul este același motor, doar fără ecran. Există pentru o singură situație: alt software are nevoie de planuri de tăiere fără ca o persoană să deschidă aplicația. Dacă nimeni nu scrie cod care să folosească CutOptim, îl poți ignora.
Pentru cine este de fapt Engine API?
Pentru două tipuri de client: cineva care folosește deja un software în care ar trebui să stea planul de tăiere — un ERP, o aplicație de ofertare sau de preluare a comenzilor, software-ul propriu al unei mașini — și cineva pentru care se construiește un astfel de software, de către un programator intern sau o firmă. În ambele cazuri, munca este făcută de cine scrie acel software, nu de tine în interfața CutOptim.
Cum obțin acces la Engine API?
Te poți abona direct din pagina Engine API — are o perioadă de probă, iar accesul ajunge singur în cont. Este calea cea mai rapidă. Dacă preferi să descrii mai întâi integrarea sau ai nevoie de un volum peste planul standard, scrie-ne. În ambele cazuri apare apoi în panoul tău un card Chei API și îți creezi cheile singur. Engine API se facturează separat de planurile aplicației și nicio schimbare de plan nu îl activează.
Engine API taie și lemn sau doar plăci și bare?
Toate cele trei moduri pe care le are aplicația, inclusiv lemnul. Endpointul pentru lemn cunoaște secțiunea: piesele și materialul poartă ambele laturi ale secțiunii, așa că o piesă 50×150 se taie doar din material 50×150. Lucrarea se împarte pe secțiuni și fiecare secțiune revine cu barele și totalurile proprii, iar cererea pentru a cărei secțiune nu există deloc material este raportată separat de piesele care aveau material și nu au încăput.
Engine API îmi schimbă planul Gratuit, Pro sau Atelier?
Nu. Engine API este un supliment separat și nu schimbă nimic la planurile obișnuite. Optimizatorul din aplicație este neschimbat, rulează în continuare în browserul tău și rămâne inclus în Gratuit, Pro și Atelier exact ca înainte. Nimic din ce faci în aplicație nu consumă cereri API.
Există un SDK sau o bibliotecă client pentru Engine API?
Nu. Nu există SDK, nici bibliotecă client, nici plugin — API-ul este HTTPS simplu, cu cereri și răspunsuri JSON, pe care orice limbaj de programare le poate apela fără vreun pachet specific CutOptim. Nu există nici webhookuri. Cele mai multe apeluri primesc direct rezultatul final; singura excepție este motorul asincron max (doar 2D), unde POST /v1/optimize/2d cu engine "max" returnează un id de lucrare pe care îl interoghezi cu GET /v1/jobs/{id} până când planul este gata.
Motorul balanced este mai bun decât cel implicit?
Nu — este un compromis, nu o îmbunătățire. Motorul implicit heuristic dă cel mai bun randament, iar fiecare aranjament produs de el poate fi tăiat pe un ferăstrău pentru panouri, deci returnează întotdeauna un plan de tăiere. Motorul balanced este mult mai rapid la lucrările foarte mari, dar are un randament puțin mai mic, iar aranjamentele sale adesea nu pot fi tăiate de la o margine la alta, deci pentru acelea nu returnează niciun plan de tăiere. Folosește-l doar când viteza la o lucrare mare contează mai mult decât un plan gata de ferăstrău.
De ce cheia mea API este afișată o singură dată?
Pentru că CutOptim nu stochează niciodată cheia în sine — doar un hash sha256 al ei. Asta înseamnă că nimeni, nici noi, nu poate citi cheia înapoi din baza de date, așa că poate fi afișată doar în momentul în care este creată. Copiază-o imediat în configurația software-ului tău; dacă o pierzi, șterge cheia și creează una nouă.
Ce se întâmplă dacă revoc o cheie API — primesc banii înapoi?
Nu, și nici nu anulează ceva. Revocarea scoate din uz acea singură cheie de la următorul apel; abonamentul merge mai departe, iar cota lunară rămâne. Revocă o cheie atunci când a fost expusă sau o integrare este retrasă, apoi creează una de înlocuire. Ca să nu mai fii facturat, anulează abonamentul — accesul continuă până la finalul perioadei deja plătite, iar după aceea încetează să funcționeze și cheile existente.
Dacă creez mai multe chei API, primesc mai multe cereri?
Nu. Cota lunară aparține contului, iar fiecare cheie activă consumă din aceeași alocare — a doua cheie nu adaugă o a doua cotă. Cheile există ca să separi staging-ul de producție, să dai fiecărei integrări propria credențială și să revoci una fără să le deranjezi pe celelalte. Când alocarea se termină, fiecare cheie returnează 402, nu doar cea care a consumat-o. GET /v1/usage raportează situația contului, indiferent de cheia folosită.
Poate Engine API să returneze un desen, nu doar coordonate?
Da. Adaugă include: ["svg","csv","dxf"] la o cerere de optimizare, iar răspunsul poartă layoutul ca fișier gata făcut, inline în JSON: un desen SVG 2D de sine stătător, un DXF R12/AC1009 pe straturile STOCK/PARTS/LABELS sau o listă de tăiere CSV. Nu există stocare și niciun al doilea apel. SVG este doar 2D; o cerere 1D sau pentru lemn returnează în schimb un avertisment. Poți atașa de asemenea un obiect meta (numărul de articol din ERP, id-ul liniei de comandă sau referința clientului) oricărei piese sau oricărui rând de material, iar el revine identic la ieșire, astfel încât planul să se reconcilieze cu sistemul tău. meta este de asemenea câmpul potrivit pentru a citi înapoi ce placă a ales optimizatorul: pui codul tău în stock[].meta și îl primești identic pe sheets[].meta, iar el nu influențează niciodată plasarea. Nu folosi câmpul material pentru identificare: material este o partiționare strictă, așa că etichetarea fiecărui rând de material, lăsând piesele neetichetate, face ca toate piesele să revină ca unmatched, iar rezultatul să fie gol.
Pot verifica o cerere fără să consum unul dintre apelurile mele lunare?
Da. POST /v1/validate/2d, /v1/validate/1d, /v1/validate/wood sau /v1/validate/nest preia același corp ca endpointul de optimizare corespunzător și îl verifică fără să-l rezolve — gratuit, fără cheie API și fără cotă consumată. O cerere malformată revine ca un 400 care numește exact câmpul greșit, iar una bine formată returnează valid: true plus avertismente de fezabilitate (de exemplu, o piesă care nu încape în niciun material). Folosește-l ca să-ți validezi payload-urile în timp ce construiești integrarea, încă înainte de a deține o cheie.
Ce se întâmplă cu un fișier SVG sau DXF trimis către API?
Nu rămâne nimic din el. Fișierul călătorește ca și corp al cererii, este citit în memorie pentru a obține conturul piesei și dispare imediat ce răspunsul este scris — nicio copie pe disc, nicio copie în baza de date, nicio linie de jurnal care să îl conțină, deci nimic de șters după aceea și nicio perioadă de păstrare despre care să întrebi. Este aceeași lipsă de stare pe care o ține restul API-ului: nici planurile tale de croire nu le păstrăm mai mult decât cererea care le-a produs.

Actualizat: 2 septembrie 2026