Logistivo CLI: prowadź operacje logistyczne z terminala i ze swojego ERP
Jeden katalog poleceń zasila trzy powierzchnie: terminalowego klienta lg, asystenta AI w panelu oraz kanał, przez który łączą się zewnętrzni asystenci AI. Funkcję pisze się raz i pojawia się ona we wszystkich trzech miejscach — a każda operacja zapisu w panelu ma już swoje polecenie, więc twoje skrypty i twoi własni agenci AI mogą wykonywać pracę, którą twój zespół wykonuje na ekranie. Płatności, zgody prawne i zamknięcie konta celowo pozostają w przeglądarce. Ta strona jest kontraktem. Poniższa tabela poleceń nie jest pisana ręcznie; jest generowana z bieżącego rejestru poleceń przy każdym żądaniu.
Czym jest Logistivo CLI?
Logistivo CLI (lg) to klient wiersza poleceń, który wykonuje pracę na twoim koncie Logistivo — ładunki i kursy, zapytania transportowe, oferty i przetargi, flota i kierowcy, dokumenty, kontakty i rozrachunki, faktury i księgowość, magazyn i stany magazynowe, członkowie zespołu oraz taryfy celne — z terminala, ze skryptu lub z twojego własnego agenta AI. Polecenia nie są wbudowane w klienta: klient pobiera katalog poleceń z serwera i na jego podstawie sam się rysuje. Te same polecenia można wywołać przez HTTP bez instalowania czegokolwiek — tej drogi używają integracje ERP i CRM — oraz przez kanał MCP, z którym łączą się zewnętrzni asystenci AI.
Jeden kształt polecenia: lg --parameter=value. Katalog składa się dziś z 519 poleceń w 125 domenach; najszersza lista, jaką widzi pojedyncza rola, składa się z 452 poleceń w 112 domenach.
Każda operacja zapisu w panelu ma swoje polecenie — w pomiarze względem endpointów zapisu panelu pokrytych jest 100% endpointów objętych zakresem. Płatności (3D Secure), zgody prawne i zamknięcie konta celowo pozostają w przeglądarce; w tych przypadkach polecenie zwraca zamiast tego link.
Polecenia przyjmujące dokument lub zdjęcie działają także poza przeglądarką: napisz --attachment_uuid=@./cmr.pdf, a lg najpierw prześle plik; przez HTTP przesyłasz plik do /api/common/commands:upload i przekazujesz zwrócony attachment_uuid.
Klucze integracyjne mają poziom dostępu: employee (domyślny dla nowych kluczy) do codziennych operacji, manager do spraw zespołu, ustawień, kluczy i pieniędzy. Klucz nigdy nie ma większych uprawnień niż osoba, w imieniu której działa.
Flagi nigdy nie są wymyślane: każda flaga to nazwa parametru z własnego JSON Schema polecenia — stamtąd pochodzą też jej typ i informacja, czy jest wymagana.
Polecenia zapisujące proszą o potwierdzenie; nieodwracalne nigdy nie wykonują się bez niego (HTTP 409, kod wyjścia CLI 4).
Ponawianie nie tworzy duplikatów: wywołanie z idempotency_key wykonuje się najwyżej raz.
Każde wykonanie trafia do jednego rejestru audytu — w zapisie widać, czy pochodziło z terminala, z czatu, czy od asystenta.
Co działa dziś, a co jest w drodze
Ta sekcja celowo znajduje się na górze strony. Najdroższy błąd, jaki może popełnić dokument integracyjny, to opisanie endpointu, który nie jest jeszcze otwarty, tak jakby już działał: integrator pisze kod, endpoint zwraca 404, a zaufanie już nie wraca.
Ponieważ kontrakt jest zamrożony, kod integracji, który piszesz dziś, będzie działał dalej, gdy otworzą się pozostałe elementy. Pola, których nie znasz, musisz ignorować; to właśnie ta reguła pozwala nam dodawać bez psucia.
Katalog poleceń i tabela tożsamości — Publiczna tożsamość domena/czasownik każdego polecenia jest zamrożona, a wersja kontraktu jest publikowana jako 1 w każdej odpowiedzi katalogu oraz w nagłówku X-Contract-Version. Tabela na tej stronie jest generowana z bieżącego rejestru: polecenie dodane na serwerze pojawia się tu samo, a usunięte znika.
Endpoint wykrywania bez uwierzytelnienia — GET /api/public/cli/catalog — nazwy poleceń, tożsamość domena/czasownik, opis, parametry JSON Schema, flagi bramek i pola wersjonowania (since, deprecated_at, replaced_by, aliases). Bez uwierzytelnienia: wygenerowanie tokenu to krok, który następuje PO decyzji o integracji, a nie przed nią. Odpowiedź nie zawiera żadnych danych tenanta (firmy-klienta platformy).
Uwierzytelnione endpointy katalogu i wykonania — GET /api/common/commands, GET /api/common/commands/{name} oraz POST /api/common/commands/{name}. Bramka ról, bramka potwierdzenia, idempotencja i rejestr audytu działają w jednym punkcie egzekwowania, przez który przechodzą również czat i terminal.
Pokrycie panelu: każda operacja zapisu ma polecenie — Katalog z 519 poleceniami w 125 domenach sprawdzono względem endpointów zapisu panelu: za każdym endpointem objętym zakresem stoi polecenie (lustro endpointu lub ta sama współdzielona usługa) i żaden nie pozostaje niepotwierdzony. Celowo poza zakresem: płatności z 3D Secure, zgody prawne, zamknięcie konta i logowanie, które pozostają w przeglądarce; zarządzanie kluczami, webhookami i sandboxem, które są wbudowanymi poleceniami lg; oraz własne endpointy aplikacji kierowcy.
Przebieg próbny (dry_run): zobacz efekt bez uruchamiania — Z dry_run: true w treści żądania polecenie się nie wykonuje: walidacja, bramka ról/zakresu, rozpoznanie celu i wyliczenie kredytów są wykonywane i wraca podgląd; nic nie zostaje zapisane, żaden kredyt nie jest zużywany, a klucz idempotencji nie zostaje skonsumowany. Endpoint wsadowy (batch) również to przyjmuje — dla całego wsadu. Przebieg próbny nigdy nie wchodzi do handlera polecenia; przy wdrożeniu 178 przebiegów próbnych na wszystkich ówczesnych poleceniach zapisu w katalogu nie wygenerowało ani jednej instrukcji zapisu.
Klucze integracyjne — Klucze API działające w imieniu prawdziwego członka zespołu, wydawane w panelu lub poleceniem lg keys create: zakres odczyt/zapis, poziom dostępu (domyślnie employee albo manager), okres ważności, ostatnie użycie, rotacja, przeniesienie i unieważnienie. Na nich oparte są lg login --api-key, lg whoami oraz lg logout, który unieważnia klucz po stronie serwera.
Sandbox — przećwicz zapisy bez dotykania produkcji — Osobny tenant sandbox dla każdej firmy, z tym samym katalogiem poleceń; otwierany samoobsługowo, wydaje własny klucz. Kredyty, marketplace i routing webhooków są rozdzielone między dwa środowiska; środowisko wynika z firmy, do której należy klucz, i nie można go podać w żądaniu.
Wersjonowanie, taksonomia błędów, idempotencja i limity żądań — Polecenia mają pola since / deprecated_at / replaced_by / aliases, a wycofywane polecenie odpowiada z nagłówkiem X-Deprecated. Błędy biznesowe niosą stabilny error_key obok error_code z warstwy transportowej, a słownik kluczy jest publikowany w katalogu. Klucze idempotencji są ograniczone do twojej firmy, powiązane z jednym poleceniem i blokowane na 24 godziny. Limity żądań (rate limits) działają per token, w trzech pulach, a każda odpowiedź 429 zawiera Retry-After.
Webhooki wychodzące: POST, gdy coś się wydarzy — Podpisany push działa dla 13 zdarzeń. Subskrypcjami zarządzasz w panelu lub poleceniem lg webhooks; podpis zawiera własny znacznik czasu, harmonogram ponowień to 60 · 300 · 1800 · 7200 · 21600 s, a powód wyciszenia jest zawsze zapisywany. Za każdą nazwą zdarzenia stoi klasa zdarzenia, która jest faktycznie wysyłana — nic nie jest ogłaszane, by potem nigdy nie zostać wysłane. Kanał pull (updated_since + cursor) nie został usunięty: push dodano obok niego, a nie zamiast niego.
Polecenia przyjmujące pliki — Do 33 poleceń przekazujesz dokument lub zdjęcie — CMR, fakturę, dowód rejestracyjny pojazdu, zdjęcia palet. Prześlij plik raz do POST /api/common/commands:upload albo pozwól, by zrobił to lg z --attachment_uuid=@./file.pdf, i przekaż zwrócony attachment_uuid; klienci MCP używają narzędzia upload_attachment. Typ pliku jest rozpoznawany na podstawie zawartości, a przesłany plik pozostaje użyteczny przez 24 h.
Klient terminalowy lg — Opublikowany w npm na licencji MIT: zainstaluj przez `npm install -g @lgstv/lg` albo uruchom bez instalacji przez `npx @lgstv/lg`. To jeden plik bez zależności, a ponieważ powierzchnia HTTP jest otwarta, możesz zintegrować się bez niego. Loguje się kodem zatwierdzenia, który potwierdzasz w przeglądarce, a potem pozostaje zalogowany i sam odnawia swoją sesję; przesyła za ciebie lokalne pliki (@path, --file, lg upload), zarządza kluczami integracyjnymi (lg keys), nigdy nie przyjmuje sekretu w wierszu poleceń, respektuje Retry-After, ponawia 5xx z tym samym kluczem idempotencji i ostrzega o wycofywanych poleceniach oraz nowszych wersjach kontraktu.
Synchronizacja przyrostowa: paginacja kursorem i updated_since — Poniższy kontrakt (limit + nieprzezroczysty, podpisany cursor, next_cursor, updated_since) jest ustalony i jest wdrażany w poleceniach listujących. Dopóki dane polecenie listujące nie ogłosi cursor i updated_since w swoim JSON Schema, traktuj je jako małe okno: maksymalnie 20 wierszy, bez kursora.
Co tu jest inaczej: klient nie zna poleceń, tylko je rysuje
To jedna decyzja, która nadaje sens reszcie tej strony. W zwykłym CLI polecenia mieszkają w kliencie; w Logistivo mieszkają na serwerze.
W klasycznym układzie, gdy serwer zyskuje nową funkcję, klient potrzebuje nowego wydania, a użytkownik musi je zainstalować. W międzyczasie obie strony wiedzą co innego — i to jest najcichszy tryb awarii w integracjach: skrypt działa, kod wyjścia to 0, a polecenie po prostu nie opisuje tego, co potrafi serwer.
W Logistivo definicja polecenia to jeden rekord: nazwa, co robi, parametry JSON Schema, które role mogą je widzieć, czy wymaga potwierdzenia i czy jego efekt jest odwracalny. Przy starcie lg pobiera ten katalog i generuje z niego tekst pomocy, flagi i walidację danych wejściowych. W chwili, gdy polecenie zostaje dodane na serwerze, lg je zna — bez aktualizacji klienta.
Ten sam katalog zasila asystenta AI w panelu oraz kanał, z którym łączą się zewnętrzni asystenci AI. Funkcję pisze się raz, a pojawia się w trzech miejscach — i wszystkie trzy przechodzą przez tę samą bramkę ról, tę samą bramkę potwierdzenia i ten sam rejestr audytu. Nie istnieje osobny spis poleceń CLI; gdyby istniał, te trzy powierzchnie po cichu rozjechałyby się w ciągu sześciu miesięcy.
Brak rozjazdu wersji — Lista poleceń, którą zna klient, jest z definicji listą, którą ma serwer. Pytanie „W której wersji lg jest to polecenie?” po prostu nie istnieje.
Nazwy flag nigdy nie są zgadywane — Flagi polecenia to dokładnie nazwy parametrów w jego JSON Schema. Aby dowiedzieć się, co polecenie przyjmuje, nie czytasz dokumentu, tylko katalog — a katalog jest zawsze aktualny.
Twoje CLI jest tak duże jak twoje konto — Katalog jest filtrowany według ról: polecenie, którego twoja rola nie widzi, nigdy nie pojawia się na twojej liście. Konto przewoźnika ma dostęp do 452 poleceń, konto nadawcy — do 448, agencji celnej — do 312, a konto afilianta (partnera polecającego) — do własnego zestawu z 55 poleceń.
Dokumentacja nie może zostać w tyle — Tabela poleceń na tej stronie pochodzi z tego samego rejestru. Nigdzie nie ma listy, którą człowiek musiałby synchronizować z rzeczywistością.
Reguła nazewnictwa — jak rosną nazwy poleceń
Katalog będzie rósł. Nowe polecenia nie są nazywane doraźnie; obowiązuje sześć reguł. Publikujemy je tutaj, bo to nazwy, które twoja integracja będzie pisać przez lata, a ich przewidywalność ma dla ciebie wartość.
Domena to encja w liczbie mnogiej — loads, demands, invoices, export-documents. Domeny dwuwyrazowe zapisuje się w kebab-case. Jedynym wyjątkiem jest rzeczownik niepoliczalny: stock nigdy nie występuje w liczbie mnogiej, bo „stocks” oznacza coś innego.
Wszystkie czasowniki jednej encji mieszkają w jednej domenie — loads zawiera każdy czasownik działający na ładunku: create, list, get, update, set-status, assign-driver, list-problems, archive i więcej. Otwieranie nowej domeny dla każdego czasownika (load-statuses, load-drivers) zmuszałoby użytkownika do szukania tej samej encji w trzech miejscach.
Czasownik nigdy nie przecieka do domeny; domena to to, co się ZMIENIA — Przypisanie kierowcy zmienia ładunek, a nie kierowcę, więc jest to lg loads assign-driver. Dopełnienie (-driver) dołącza się do czasownika, nigdy do domeny.
Zasób podrzędny nigdy nie dostaje własnej domeny — Pozycji faktury ani pozycji dokumentu nie da się wylistować samodzielnie; adresuje się je przez ich właściciela — lg invoices add-line, lg export-documents add-item. Rozstrzyga jeden test: jeśli nie możesz wylistować ani pobrać czegoś niezależnie, to nie jest domena.
Zawężenie to flaga, a nie nowy czasownik — lg fleet-documents list --days=30 jest poprawne; nie ma osobnego czasownika „list-expiring”, bo okno jest już parametrem. Czasownika kwalifikowanego używa się tylko wtedy, gdy zwracane wiersze nie są encją domeny: loads list-problems zwraca flagi problemów, a nie ładunki.
Para (domena, czasownik) jest unikalna w całym katalogu — Nawet dla dwóch poleceń, których role nigdy się nie pokrywają. Gdyby ta sama para została nadana dwóm poleceniom, twój kod integracji patrzyłby na jedną nazwę, podczas gdy CLI uruchamiałoby różne rzeczy w zależności od tego, kto je wywołał.
Pokrycie: wszystko z panelu dostępne poleceniem
Wiele zespołów podłącza Logistivo do własnego agenta AI lub środowiska automatyzacji, a agent jest użyteczny tylko wtedy, gdy potrafi dokończyć zadanie. Zasada jest więc prosta: wszystko, co użytkownik biurowy może zmienić w panelu, może zmienić także polecenie — za tą samą bramką ról, tą samą bramką potwierdzenia i z tym samym rejestrem audytu.
To jest zmierzone, a nie deklarowane. Każdy endpoint zapisu stojący za panelem jest sprawdzany względem rejestru poleceń, a endpoint uznaje się za pokryty tylko wtedy, gdy polecenie deklaruje go jako swoje lustro HTTP lub wywołuje tę samą współdzieloną usługę. Spośród endpointów zapisu objętych zakresem pokrytych jest 100%, a żaden nie pozostaje niepotwierdzony. Każdy pominięty endpoint ma spisany powód — kroki tożsamości i płatności, płaszczyzna sterowania integracją, własne endpointy aplikacji kierowcy, telemetria klienta, martwe kopie bez wywołujących — a te, które mają znaczenie dla integratora, są wymienione poniżej.
Polecenia przyjmujące plik podlegają tej samej zasadzie: do 33 poleceń w tabeli przekazujesz dokument lub zdjęcie i wszystkie działają z lg, przez HTTP i przez MCP (zob. Polecenia przyjmujące pliki).
Prace zarządcze również są pokryte, za mocniejszym kluczem: klucz integracyjny na poziomie manager jest potrzebny do 62 poleceń w tabeli — członkowie zespołu i role, ustawienia firmy, konta bankowe, zapisane karty, klucze integracyjne. Klucz na poziomie employee, domyślny, wykonuje codzienne operacje i przy tych poleceniach dostaje odmowę z INSUFFICIENT_KEY_LEVEL.
Konta afiliantów (partnerów polecających) mają własny katalog z 55 poleceniami w 20 domenach — rekomendacje (referrals), leady, notatki i zadania CRM, prezentacje sprzedażowe, zarobki i wypłaty oraz polecenia konta i zespołu, które ma każda rola. Polecenia dostępne tylko dla afiliantów nie są w publicznej tabeli poniżej, która obejmuje trzy role panelu; konto afilianta widzi je w GET /api/common/commands i w lg commands. Firma, która jest jednocześnie afiliantem oraz nadawcą, przewoźnikiem lub agencją celną, widzi oba zestawy.
Agent powinien zacząć od lg users get (nazwa API get_current_user): zwraca rolę, poziom dostępu używanego klucza, efektywne uprawnienia oraz informację, czy oczekująca akceptacja prawna lub niezweryfikowany numer telefonu blokują obecnie zapisy — dzięki temu agent może przewidzieć odmowę, zamiast ją zbierać.
Pokrycie jest mierzone raportem, który porównuje rejestr poleceń z endpointami zapisu panelu; endpoint panelu dodany bez polecenia pojawia się w nim jako niepotwierdzony. Jeśli znajdziesz w panelu działanie, do którego nie da się dotrzeć poleceniem, zgłoś to do wsparcia.
1. Poproś o link — Praca, która musi odbyć się we własnej sesji przeglądarki danej osoby, nie jest poleceniem, ale powierzchnia poleceń o niej wie. lg handoff-links generate (nazwa API get_browser_handoff_link) zwraca link do logistivo.com dla celów, na które pozwala twoja rola: package_purchase, payment_cards, legal_documents, integration_keys, affiliate_demo_accounts i account_close. Jest bezpłatne, niczego nie zapisuje, a link nie zawiera żadnego sekretu — osoba loguje się jak zwykle.
2. Przekaż go osobie — Pokaż link użytkownikowi lub wyślij go własnym kanałem. Użytkownik kończy tam krok: akceptację umowy i płatność 3D Secure za pakiet, dodanie karty, akceptację oczekujących tekstów prawnych, wydanie klucza API, którego sekret jest pokazywany raz, albo zamknięcie własnego konta.
3. Odczytaj wynik poleceniem — Po wykonaniu kroku jego wynik jest znów widoczny dla poleceń: pakiet i saldo kredytów, zapisana karta (zamaskowana, tylko cztery ostatnie cyfry), nowy klucz na liście kluczy. Agent nigdy nie przyjmuje w czacie numeru karty, płatności ani zgody.
Płatności i 3D Secure — Zakup lub podniesienie pakietu oraz dodanie karty wymagają 3D Secure w przeglądarce. Polecenia wyświetlają pakiety i ceny, odczytują saldo i jego historię, wyświetlają zapisane karty (zamaskowane), ustawiają domyślną kartę i usuwają kartę; sam zakup przechodzi przez link przekazania.
Zgody prawne — Akceptacji tekstów prawnych dokonuje osoba, w przeglądarce. lg users get mówi ci, że akceptacja oczekuje; żadne polecenie nie może jej udzielić.
Zamknięcie konta, logowanie i hasło — Zamknięcie własnego konta, logowanie i zmiana hasła to kroki tożsamości i pozostają w przeglądarce. lg user-accounts preview pokazuje, co oznaczałoby zamknięcie konta, bez wykonywania go.
Klucze integracyjne, webhooki i sandbox — Zarządzanie nimi zwraca sekrety, które muszą zostać pokazane raz, w twoim terminalu, dlatego są to wbudowane polecenia lg (lg keys, lg webhooks, lg sandbox) działające na własnych endpointach HTTP, a nie polecenia katalogu. Katalog zawiera tylko dwa polecenia kluczy bez sekretów: integration-keys list i integration-keys revoke.
Czat asystenta w panelu — Klucze integracyjne nie mogą sterować czatem asystenta AI w panelu; rozpoczęcie lub kontynuowanie sesji kluczem dostaje odpowiedź 403. Agent łączy się zamiast tego przez endpointy poleceń, lg lub kanał MCP — tam każde polecenie działa na poziomie dostępu klucza, a jego zapisy są rejestrowane jako zapisy integracyjne.
Aplikacja kierowcy — Konta kierowców nie mają katalogu poleceń, a aplikacja kierowcy zachowuje własne endpointy. Użytkownicy biurowi zarządzają kierowcami, ich dokumentami, wydatkami i kursami za pomocą poleceń.
Instalacja i tożsamość
lg to jednoplikowy skrypt Node bez zależności (Node 18+), opublikowany w npm jako @lgstv/lg. Pakiet instaluje dwa identyczne polecenia, lg i logistivo — użyj logistivo, jeśli lg jest już aliasem na twoim komputerze. Ponieważ to jeden plik, skopiowanie lg.mjs na serwer ERP klienta również działa. Do zbudowania integracji ERP/CRM nie potrzebujesz klienta — te same polecenia są dostępne przez HTTP.
1. Instalacja — Potrzebujesz tylko Node 18 lub nowszego; nie ma innych zależności. Zainstaluj globalnie albo uruchom bez instalacji przez npx.
2. Logowanie kodem zatwierdzenia — lg login wyświetla krótki kod zatwierdzenia i otwiera w przeglądarce adres logistivo.com/connect; przez SSH, w CI lub z --no-browser tylko wypisuje adres, który możesz otworzyć na dowolnym urządzeniu, także na telefonie. Zaloguj się tam jak zwykle, sprawdź, czy kod na stronie jest tym samym kodem co w terminalu, wybierz dostęp tylko do odczytu albo do odczytu i wykonywania działań, a następnie zatwierdź. Do terminala nie wpisuje się niczego tajnego: ani hasła, ani klucza, ani kodu jednorazowego. Sesja pozostaje potem zalogowana na tym komputerze — zamknięcie terminala nie wylogowuje, a lg sam odnawia token dostępu, zanim ten wygaśnie. lg logout kończy sesję również na serwerze; możesz ją też usunąć w panelu w Settings › Integration keys › AI and CLI connections. lg login --password (e-mail i hasło) pozostaje jako rozwiązanie awaryjne. Wymaga lg 0.11 lub nowszego.
3. Dla serwerów i CI: klucz, nie kod zatwierdzenia — Na serwerze ani w zadaniu CI nie ma nikogo, kto zatwierdziłby kod w przeglądarce. Wydaj klucz w panelu (Settings › Integration keys) albo poleceniem lg keys create — opcjonalnie w imieniu dedykowanego członka zespołu o wąskim zakresie uprawnień — i umieść go w LOGISTIVO_TOKEN albo zapisz przez lg login --api-key. Gdy zmienna jest ustawiona, plik konfiguracyjny nigdy nie jest odczytywany. Szczegóły: sekcja „Połączenie za pomocą klucza API”.
4. Sprawdź instalację i przejrzyj katalog — lg commands wyświetla wszystkie polecenia, które widzi twoja rola, pogrupowane według domen; lg help pokazuje czasowniki tej domeny, a lg help — pełną listę parametrów jednego polecenia z typami i informacją, które są wymagane. Żaden z tych tekstów nie mieszka w kliencie — wszystko pochodzi z katalogu. Pamiętaj, że lista zależy od twojej roli: czasowniki jednej domeny nie są takie same dla przewoźnika i dla nadawcy (na przykład loads set-status jest tylko w katalogu przewoźnika). Jeśli brakuje czasownika, sprawdź swoją rolę, zanim sprawdzisz instalację.
Nigdy nie umieszczaj klucza w systemie kontroli wersji, logu CI ani oknie czatu. Jeśli logowanie odbyło się kodem zatwierdzenia lub kluczem integracyjnym, lg logout kończy sesję również na serwerze; w sesji hasłowej (lg login --password) usuwa tylko LOKALNĄ kopię i wyraźnie to komunikuje. Rejestr audytu przechowuje twoje argumenty, ale maskuje jako *** każde pole, którego nazwa zawiera token, password, IBAN, card lub OTP, oraz każdy parametr, który polecenie deklaruje jako tajny.
LOGISTIVO_TOKEN — Osobisty token dostępu. Gdy jest ustawiony, plik konfiguracyjny nigdy nie jest odczytywany — to preferowana droga w CI i na serwerach.
LOGISTIVO_BASE_URL — Adres główny serwera. Domyślnie https://logistivo.com. Zmieniaj go tylko wtedy, gdy wskazujesz własne środowisko; flaga --base-url robi to samo dla pojedynczego polecenia.
LOGISTIVO_HOME — Folder na plik konfiguracyjny i pamięć podręczną katalogu poleceń. Domyślnie ~/.logistivo. Rozdziel go, jeśli pracujesz z dwoma kontami na jednym komputerze.
LOGISTIVO_PROFILE — Profil, w ramach którego uruchamiasz polecenia. `lg profile use` to trwały wybór; ta zmienna służy do pojedynczego uruchomienia i jest najkrótszym sposobem przełączania między profilem produkcyjnym a sandboxowym w CI. Nieznana nazwa profilu nie jest po cichu ignorowana — powoduje błąd.
NO_COLOR — Gdy jest ustawiona, kolory ANSI nie są wypisywane (trwała forma flagi `--no-color`). Włącz ją dla mostu, który pisze do pliku logu lub wyjścia CI; sekwencje sterujące kolorami psują narzędzia, które później czytają te logi.
Ergonomia klienta
Te funkcje ułatwiają codzienną pracę z klientem `lg`. Żadna z nich nie zmienia kontraktu HTTP — pomiń tę sekcję, jeśli integrujesz się bezpośrednio przez HTTP.
Wiele środowisk i kluczy — Trzymaj staging i produkcję albo mosty dla klienta i dla przewoźnika w osobnych profilach. Lista profili nigdy nie wypisuje tokenu; każdy wiersz pokazuje odcisk sha256 tokenu. Katalog poleceń jest buforowany osobno dla każdego profilu, hosta i tokenu, więc dwie role nigdy nie zobaczą nawzajem swoich list poleceń.
Synchronizacja przyrostowa: lg sync — Uruchamia jednym poleceniem pętlę synchronizacji znaną z poradnika: znacznik postępu (watermark) dla każdej encji, updated_since z kursorem, wyjście JSONL i pięciominutowy margines bezpieczeństwa. Do pierwszego pełnego zasilenia danymi użyj --full. Polecenie tylko czyta; nie ma flagi --write. lg sync --list wyznacza na podstawie katalogu encje, które twoja rola może synchronizować.
Obsługa błędów i uzupełnianie w powłoce — Przy 422 klient wskazuje odrzucone pole jako flagę w takiej postaci, w jakiej została wpisana, wraz ze stabilnym error_key i wyjaśnieniem pochodzącym z samego katalogu. Przy 409 wypisuje gotowy wiersz polecenia z --yes; przy 429 odczekuje czas podany w Retry-After. Uzupełnianie w powłoce obejmuje domeny, czasowniki, flagi i wartości enum i działa offline.
Tajne parametry nigdy nie trafiają do wiersza poleceń — Kilka poleceń przyjmuje sekret — na przykład podłączenie integracji księgowej Paraşüt wymaga danych uwierzytelniających klienta i hasła tego systemu. lg nigdy nie przyjmuje takiej wartości jako flagi, bo trafiłaby do historii powłoki i do wyjścia ps: pyta o nią bez echa albo czyta ją z ---file=PATH lub ze standardowego wejścia (---file=-) i trzyma ją wyłącznie w pamięci. Polecenie, którego wymagany parametr jest tajny, działa tylko z lg: wywołane z czatu, przez MCP lub wewnątrz lg batch zostaje odrzucone z SECRET_REQUIRES_CLI. Rejestr audytu zawsze zapisuje tę wartość jako ***.
Połączenie za pomocą klucza API
ERP, CRM, skrypt lub agent AI łączy się z Logistivo kluczem integracyjnym wydanym w panelu albo poleceniem lg keys create. Klucz działa w imieniu prawdziwego członka zespołu: rola tej osoby decyduje o liście poleceń, poziom dostępu klucza — o tym, jak poważna może być praca, a gdy ta osoba odchodzi z zespołu, klucz umiera razem z nią. Nie ma syntetycznego „konta serwisowego” i nie będzie — izolacja multi-tenant jest związana z użytkownikiem, a most bez właściciela to taki, który latami po cichu dalej zapisuje.
1. Wydaj klucz w panelu — Settings › Integration keys › New key. Nadaj mu nazwę („Nocna synchronizacja ERP”), wybierz zakres i poziom dostępu oraz opcjonalnie skróć okres ważności. Klucz jest pokazywany raz, tylko na tym ekranie; serwer go nie przechowuje. Jeśli go zgubisz, Rotate wydaje nowy — stary natychmiast traci ważność.
2. Połącz się z terminala — lg login --api-key weryfikuje klucz, wypisuje tożsamość i zakres oraz pobiera katalog poleceń. lg whoami pyta serwer, jako który użytkownik, w jakiej firmie, roli i zakresie działasz. lg logout unieważnia klucz również na serwerze, tak samo jak kończy tam sesję otwartą kodem zatwierdzenia (tylko lg logout w sesji hasłowej tego nie potrafi).
3. Albo zwykłe HTTP — Klucz to token dostępu przesyłany w nagłówku Authorization: Bearer i działa bezpośrednio z trzema endpointami poleceń. Na serwerze lub w CI umieść go w LOGISTIVO_TOKEN; gdy ta zmienna jest ustawiona, plik konfiguracyjny nigdy nie jest odczytywany.
4. Albo zarządzaj kluczami z terminala: lg keys — lg keys to terminalowy odpowiednik ekranu w panelu: te same endpointy, ta sama bramka (uprawnienie do zarządzania zespołem oraz klucz na poziomie manager, gdy wywołujesz to kluczem). create, rotate i transfer zwracają nowy token jednorazowo: z --save-profile=NAME trafia on od razu do lokalnego profilu i nigdy nie jest wypisywany; w przeciwnym razie lg wypisuje go raz. W trybie --json token jest dołączany tylko wtedy, gdy dodasz --show-secret, a wywołanie --json bez żadnej z tych flag jest odrzucane przed wysłaniem żądania, więc token nie może po cichu trafić do wyjścia skryptu. rotate, transfer i revoke proszą o potwierdzenie (--yes); klucz jest wskazywany dokładną nazwą lub uuid, nigdy przez zgadywanie. Poziom dostępu przechodzi bez zmian na klucz po rotacji lub przeniesieniu.
Zakres jest egzekwowany na całej powierzchni API, nie tylko w katalogu poleceń: klucz tylko do odczytu przepuszcza żądania odczytu (GET/HEAD/OPTIONS), a każde inne, zapisujące żądanie dostaje 403 forbidden. Są dwa celowe wyjątki i obu strzeże dokładniejsza bramka: endpoint wykonywania poleceń (decyzja wynika z własnej flagi read_only polecenia, bo polecenia niezapisujące też wywołuje się przez POST) oraz klucz unieważniający samego siebie (lg logout, dozwolone także dla klucza tylko do odczytu). Zakres, uprawnienia domenowe i poziom dostępu to trzy niezależne osie i wszystkie muszą przepuścić żądanie: klucz read nie może zapisywać nawet na poziomie manager, klucz write na poziomie employee nie może zarządzać zespołem, a uprawnienie domenowe loads:write nie otwiera prac zarządczych. Wydaj klucz w imieniu członka z najmniejszymi uprawnieniami, które pokrywają twoje potrzeby: rola decyduje o tym, które rekordy w ogóle możesz zobaczyć.
read — Katalog poleceń i polecenia niezapisujące (list, search, preview). Polecenie zapisujące zwraca 403 forbidden — przed bramką potwierdzenia; klucz tylko do odczytu nigdy nawet nie zobaczy 409. Właściwy wybór dla nocnej synchronizacji i raportowania.
write — Każde polecenie. Polecenia wymagające potwierdzenia nadal o nie proszą przez 409; confirm: true (--yes w CLI) działa dokładnie tak jak wcześniej. Zakres nigdy nie luzuje bramki potwierdzenia.
employee — Domyślny dla każdego nowego klucza. Codzienne operacje: ładunki, zapytania transportowe, oferty, kursy, flota i dokumenty floty, dokumenty, kontakty — każde polecenie, które nie wymaga uprawnień zarządczych, plus uprawnienia flotowe. Polecenie, które wymaga więcej, odpowiada 422 z error_key INSUFFICIENT_KEY_LEVEL i required_key_level: manager; odpowiadający mu endpoint REST odpowiada 403 z tym samym kluczem błędu. Właściwy poziom dla nocnej synchronizacji ERP, mostu telematycznego lub skryptu operacyjnego.
manager — Wszystko, co może robić osoba, w imieniu której działa klucz, łącznie z zarządzaniem: członkowie zespołu i role, ustawienia firmy, klucze integracyjne, konta bankowe i ich weryfikacja, zapisane karty, relacje między firmami, wypłaty dla afiliantów. Klucz manager nigdy nie dodaje uprawnienia, którego osoba nie ma — bez uprawnienia do zarządzania zespołem nadal nie może zarządzać zespołem. Klucze, które istniały przed wprowadzeniem poziomów dostępu, są kluczami manager, więc zachowują się dokładnie tak jak wcześniej.
Jeden klucz na integrację — Jeśli CRM i ERP współdzielą klucz, odcięcie jednego oznacza odcięcie drugiego. Daj każdemu mostowi własny klucz; lista i tak pokazuje je po nazwach.
Rotacja — Wydaje nowy token i natychmiast unieważnia stary; pozostały okres ważności zostaje zachowany. Używaj jej przy podejrzeniu wycieku i w regularnych odstępach. Integracja dostaje 401, dopóki nie zostanie zaktualizowana nowym tokenem.
Unieważnienie — Klucz zostaje trwale zamknięty; tego nie da się cofnąć, w razie potrzeby wydaj nowy klucz. Jeśli członek, w imieniu którego działa klucz, zostanie usunięty z zespołu lub dezaktywowany, klucz sam przestaje działać.
Okres ważności i limit — Domyślna ważność to 180 dni; przy tworzeniu możesz ją skrócić, nigdy wydłużyć. Użytkownik może mieć najwyżej 10 aktywnych kluczy. Czas ostatniego użycia jest widoczny na liście; przy nigdy nieużytym kluczu jest to wyraźnie zaznaczone.
Kto zarządza — Wydawanie, rotacja, przenoszenie i unieważnianie są dostępne dla menedżerów z uprawnieniem do zarządzania zespołem — ta sama bramka co przy dodawaniu lub usuwaniu członków zespołu — a gdy robi się to kluczem integracyjnym, ten klucz musi być na poziomie manager. Menedżer może wydać klucz w imieniu innego członka; dla mostu zalecany jest dedykowany członek o wąskim zakresie uprawnień.
Pierwsze dziesięć minut: od panelu do pierwszego wywołania
Najdroższe minuty integracji to pierwsze dziesięć. Cztery poniższe kroki układają tę ścieżkę w kolejności; ta sama kolejność istnieje w panelu jako kreator (Settings › Integration › Setup wizard), a kreator wywołuje dokładnie opisane tu endpointy. Deweloper bez dostępu do kreatora dociera w to samo miejsce, czytając tę sekcję.
Żaden z czterech kroków nie kończy się na „wysłane”. Na pytanie, czy klucz naprawdę działa, odpowiada rejestr żądań; na pytanie, czy webhook naprawdę dociera — rejestr dostarczeń. Oba są dostępne w panelu i w lg. Konfiguracja, której nikt nie mierzy, to konfiguracja, o której tylko się wierzy, że działa.
1. Zdecyduj, co będziesz robić — najpierw ustaw zakres — Nie da się później decydować, co klucz może widzieć: zakres wybierasz przy jego wydawaniu. Są dwie osie. Zakres zgrubny (read / write) odpowiada tylko na pytanie „czy może zapisywać”. Zakres szczegółowy (uprawnienia domenowe: loads:read, invoices:write) mówi, których domen klucz może dotykać, a w chwili jego ustawienia klucz staje się fail-closed (domyślnie zamknięty) — każda niewybrana domena i każdy endpoint, który nie mapuje się na żadną domenę, zwraca 403. Lista domen w panelu nie jest pisana ręcznie; wynika z bieżącego katalogu poleceń twojej roli i pokazuje, ile poleceń i endpointów REST otwiera każda domena. Katalog poleceń oraz endpointy „kim jestem” (current) i „wyloguj” są zawsze wyłączone z zakresu: klucz musi zawsze móc opisać i zamknąć sam siebie. Trzecią osią jest poziom dostępu: employee (domyślny) wykonuje codzienne operacje, manager zajmuje się też zespołem, ustawieniami, kluczami i pieniędzmi. Wybierz employee, chyba że most wykonuje prace zarządcze.
2. Wydaj klucz — token jest pokazywany raz — Settings › Integration › New key. Nadaj mu nazwę („Nocna synchronizacja ERP”), wybierz użytkownika, w imieniu którego działa, i poziom dostępu, a jeśli chcesz, skróć okres ważności. Surowy token jest zwracany tylko w tej odpowiedzi; serwer go nie przechowuje, a w panelu nie ma opcji „pokaż ponownie”. Jeśli go zgubisz, wykonaj rotację, aby dostać nowy — stary natychmiast przestaje działać. Nigdy nie umieszczaj tokenu w systemie kontroli wersji, logu CI ani oknie czatu; umieść go w magazynie sekretów systemu docelowego.
3. Wykonaj pierwsze wywołanie — i sprawdź, czy NAPRAWDĘ dotarło — Wystarczą dwa żądania. Pierwsze potwierdza twoją tożsamość (jest wyłączone z zakresu i działa z każdym kluczem): czy zakres jest taki, jakiego oczekujesz, czy status to active, czy zbliża się expires_at. Drugie odczytuje prawdziwe dane z wybranej domeny. Jeśli przejdzie, tożsamość, zakres, bramka weryfikacji e-mail i ścieżka sieciowa są poprawne. Jeśli nie — nie zgaduj: własny rejestr żądań klucza pokazuje wiersz po wierszu, który endpoint został odrzucony, z jakim kodem i z jakim stabilnym kluczem błędu (INSUFFICIENT_SCOPE, IP_NOT_ALLOWED, KEY_ACTOR_BLOCKED …). W panelu ten rejestr to okno „Recent requests”; w terminalu — lg logs. Kreator obserwuje właśnie ten rejestr i nie oznaczy kroku na zielono, dopóki nie zobaczy prawdziwego udanego wywołania.
4. Skonfiguruj webhook — i zanim cokolwiek zrobisz, zweryfikuj podpis — Czekanie na zdarzenia jest tańsze niż pytanie co minutę. Zarejestruj adres https, wybierz zdarzenia, które cię interesują, i powiąż subskrypcję ze swoim kluczem: jeśli klucz zostanie unieważniony, dostarczanie też się zatrzyma. Sekret jest pokazywany tylko raz, przy tworzeniu. Twój endpoint odbierający musi najpierw zweryfikować podpis: podpisywany ciąg to "{t}.{raw body}", a algorytm to HMAC-SHA256; znacznik czasu jest WEWNĄTRZ podpisu, więc odrzucaj każde żądanie starsze niż 300 sekund, nawet gdy podpis jest prawidłowy. Porównuj w stałym czasie i nigdy nie serializuj treści ponownie — w chwili, gdy sparsujesz JSON i wypiszesz go z powrotem, podpis przestaje się zgadzać. W panelu „Send test” wysyła prawdziwy podpisany ping, a ty możesz śledzić dostarczenie próba po próbie.
Sandbox: ćwicz zapisy bez dotykania produkcji
Przebieg próbny (dry_run) mówi ci, co polecenie BY zrobiło; ale to, czy idempotencja naprawdę odtwarza wynik, czy webhook naprawdę zostaje dostarczony, jak wyglądają gałęzie błędów i skąd pochodzą kredyty, widać dopiero przy PRAWDZIWYM zapisie. Do tego służy sandbox (środowisko testowe): osobny tenant odzwierciedlający twoją firmę — ten sam kod, ten sam katalog poleceń — który nigdy nie dotyka twojego produkcyjnego rejestru.
Sandbox to nie flaga żądania, tylko TENANT. Osobna firma Logistivo otwarta dla twojej: własny użytkownik, własny pakiet, własny rejestr kredytów, własne subskrypcje webhooków. Środowisko jest WYPROWADZANE z firmy, do której należy klucz, i wywołujący nie może go podać, więc nawet jeśli wybierzesz zły profil, żądanie zatrzymuje się po stronie serwera z 403 ENVIRONMENT_MISMATCH. Sytuacja „miało pójść do sandboxa, a poszło na produkcję” jest strukturalnie niemożliwa.
Powierzchnia jest identyczna — zmierzono to: katalog, który pobiera klucz sandboxowy, jest tym samym katalogiem, który pobiera twój klucz produkcyjny (dla klucza nadawcy po obu stronach to katalog z 448 poleceń). Most, który działa w sandboxie, działa na produkcji; niczego, czego się nauczysz, nie trzeba uczyć się dwa razy.
Sandbox nie otwiera się pusty: zawiera wygenerowane (NIE skopiowane) dane startowe — kontakty, ładunki w obu kierunkach i zapytania transportowe. Nazwy są jawnie zmyślone, a adresy e-mail należą do domeny @sandbox.invalid; żaden wiersz prawdziwego tenanta nigdy nie jest odczytywany, klonowany ani używany jako szablon.
Celowo NIE ma przycisku resetu i żaden rekord, plik ani dokument nigdy nie jest usuwany. Jeśli chcesz zacząć od czysta, odnowienie otwiera nową generację, a stara pozostaje — wycofana. Kilkaset nagromadzonych wierszy próbnych nic nie kosztuje w porównaniu z procedurą usuwania podpiętą do niewłaściwego tenanta.
1. Otwórz sandbox — Jeden sandbox na firmę. Endpoint wymaga uprawnienia do zarządzania zespołem (team.manage), więc robi to administrator w twojej firmie. Jeśli sandbox już istnieje, ten sam endpoint odpowiada przez GET jego stanem: identyfikator firmy, pozostałe kredyty, liczba aktywnych kluczy, subskrypcje, historia generacji i limity.
2. Wydaj klucz sandboxowy i zachowaj go jako drugi profil — Klucz jest wydawany w imieniu własnego użytkownika mostu w sandboxie i wraca oznaczony environment: sandbox; surowy token pojawia się tylko w tej jednej odpowiedzi. Po stronie lg nie zastępuj swojego klucza produkcyjnego — zachowaj OBA jako osobne profile; --sandbox i --live to selektory dla pojedynczego uruchomienia.
3. Naprawdę zapisuj — Tutaj bez --dry-run; zapis jest całym sensem. Wyślij ten sam klucz idempotencji dwa razy i zobacz, jak druga odpowiedź wraca jako status: replayed — to zmierzony wynik w sandboxie. Celowo wywołaj polecenie z bramką bez potwierdzenia i przeczytaj treść 409; spróbuj polecenia spoza swojego zakresu i przeczytaj odmowę. Nic z tego nie zostawia śladu w twoim produkcyjnym rejestrze: twoje produkcyjne saldo pozostaje takie samo przez cały ten przebieg.
4. Przed uruchomieniem produkcyjnym przeczytaj listę kontrolną — Endpoint go-live odpowiada na podstawie tego, co FAKTYCZNIE wydarzyło się w sandboxie: czy były zapisy, czy pojawiły się gałęzie błędów, czy webhook został dostarczony, czy odbiornik został przeniesiony z adresu próbnego, czy klucz ma ustawioną datę wygaśnięcia. Każda pozycja wraca jako pass / todo / unknown. Ta sama odpowiedź zawiera też PROPOZYCJĘ ZAKRESU wyprowadzoną z poleceń faktycznie wywołanych — użyj jej, aby wydać klucz produkcyjny nie szerszy, niż potrzebujesz.
Kredyty i fakturowanie — Sandbox ma własny rejestr kredytów, a twoje produkcyjne saldo się nie zmienia. To kwestia struktury, a nie kontroli: kredyty są liczone per firma, a sandbox to osobna firma. Otwiera się w darmowym planie, nie ma metody płatności i jest poza oknem miesięcznych obciążeń — żadną drogą nie może dojść do faktury.
Marketplace — Zapytanie transportowe otwarte w sandboxie NIE pojawia się na ekranach prawdziwych przewoźników i NIE trafia do ich skrzynek e-mail ani powiadomień push; ty też nie widzisz prawdziwych zapytań transportowych. Podział jest symetryczny i egzekwowany w dwóch osobnych kwerendach: komu zapytanie jest WIDOCZNE i do kogo jest WYSYŁANE, to różne pytania.
Webhooki — Subskrypcje też noszą znacznik środowiska. Zdarzenie z sandboxa nigdy nie jest dostarczane do subskrypcji produkcyjnej, a zdarzenie produkcyjne nigdy nie trafia do sandboxowej; dla subskrypcji, której znacznik się rozjechał, nie jest otwierane żadne dostarczenie. Ponieważ limit subskrypcji jest liczony per firma, twoje subskrypcje próbne nie uszczuplają limitu produkcyjnego.
Dane startowe — Przykładowe rekordy w sandboxie są GENEROWANE, nigdy kopiowane od prawdziwych tenantów. Zasilanie jest idempotentne: drugie wywołanie nie kładzie drugiej warstwy danych startowych na twoje własne rekordy.
Ten sam katalog — Twoja rola jest twoją rolą także w sandboxie, a lista poleceń jest identyczna — zmierzono: katalog z 448 poleceń po obu stronach. Sandbox to nie okrojone demo; to bliźniak twojej firmy.
Dzisiejsze ograniczenie: subskrypcjami webhooków nie da się zarządzać kluczem sandboxowym — Endpointy subskrypcji wymagają uprawnienia do zarządzania zespołem (team.manage), a użytkownik mostu w sandboxie nie ma roli zespołowej, więc `lg --sandbox webhooks …` dziś odpowiada 403. Cała powierzchnia poleceń działa — ograniczenie dotyczy tylko rejestru subskrypcji. Jeśli chcesz przećwiczyć webhooki w sandboxie, zwróć się do wsparcia; jest to zmierzone i odnotowane jako otwarta luka.
GET /api/common/integration-sandbox — Stan: czy istnieje, która firma, pozostałe kredyty, liczba aktywnych kluczy i subskrypcji, historia generacji, limity oraz przewodnik po wyzwalaczach pokazujący, które polecenie wywołuje które zdarzenie.
POST /api/common/integration-sandbox — Otwiera sandbox (jeden na firmę, idempotentnie). Wymaga uprawnienia team.manage.
POST /api/common/integration-sandbox/keys — 201 + klucz i surowy token (tylko tutaj, tylko raz). Znacznik environment: sandbox jest wyprowadzany z firmy; wywołujący nie może go podać.
GET /api/common/integration-sandbox/go-live — Lista kontrolna go-live i propozycja zakresu — obliczone na podstawie twojego rzeczywistego ruchu w sandboxie.
POST /api/common/integration-sandbox/renew — Otwiera nową GENERACJĘ sandboxa i wycofuje poprzednią.
Model poleceń
Jest jedna gramatyka i nie ma od niej wyjątków. Aby wiedzieć, jak wywołać polecenie, potrzebujesz tylko tego, co mówi o nim katalog.
lg loads list --status=in_transport --limit=20 --json
Nazwy flag to nazwy parametrów ze schematu, a lg akceptuje obie pisownie: --load_code i --load-code trafiają do tego samego pola (lg help wypisuje formę kebab-case). Widząc flagę, wiesz więc, do którego pola JSON trafi, a przejście z CLI na HTTP nie wymaga tłumaczenia nazw. Parametr logiczny zapisany bez wartości oznacza true (--only_open); przeciwieństwem jest --no-only_open. Argument, którego wartość zaczyna się od myślnika, zapisuj jako --flag=value, inaczej zapomniana flaga po cichu połknie następną jako swoją wartość. W poleceniu przyjmującym plik poprzedź ścieżkę lokalną znakiem @ (--attachment_uuid=@./cmr.pdf) — zob. Polecenia przyjmujące pliki.
lg — Klient.
loads — Domena — encja, na której pracujesz, w liczbie mnogiej.
list — Czasownik — to, co robisz z tą encją, pochodzący z zamkniętego słownika, który rośnie tylko w wyniku świadomej decyzji: czasowniki proste (list, get, create, update, delete, search, preview, generate, extract …) oraz złożone, które nazywają to, co jest dołączane lub zmieniane (add-document, set-status, assign-driver). lg help wyświetla czasowniki domeny.
--status=in_transport — Parametr — jego nazwa to dokładnie nazwa parametru w JSON Schema, a wartość musi pasować do typu ze schematu. Nieprawidłowa wartość pola enum nigdy nie dociera do serwera.
--limit=20 — Liczba wierszy w poleceniach listujących. Limit jest podany w opisie parametru każdego polecenia — zwykle 20 przy zwykłym wywołaniu listującym i do 100 w trybie synchronizacji (z cursor lub updated_since).
--json — Surowe wyjście JSON.
--json — Wypisuje surowy JSON. To jedyny poprawny format dla skryptów: domyślna wyrównana tabela jest dla ludzi, dobiera kolumny na podstawie danych i może zmienić układ bez uprzedzenia. Nigdy nie pisz skryptu, który parsuje wyjście tabelaryczne.
--yes, -y — Przechodzi przez bramkę potwierdzenia (confirm: true przez HTTP). Używaj jej tylko w skrypcie, który wie, co za chwilę zrobi; w poleceniu nieodwracalnym ta flaga jest skrótem od „nie ma cofania”.
--idempotency-key= — Sprawia, że ponawianie polecenia zapisującego jest bezpieczne. Drugie wywołanie z tym samym kluczem nie uruchamia polecenia ponownie; zwraca pierwszy wynik. Jeśli budujesz pętlę ponowień, wygeneruj klucz SAMODZIELNIE i wysyłaj ten sam przy każdej próbie.
--dry-run — Zamiast polecenia uruchamia przebieg próbny: walidacja, bramki i wyliczenie kredytów są wykonywane, nic nie zostaje zapisane (zob. sekcję o przebiegu próbnym). Działa w każdym poleceniu i w lg batch.
--refresh — Wymusza odświeżenie katalogu. lg przechowuje katalog w pamięci podręcznej przez godzinę; jeśli wiesz, że polecenie zostało właśnie dodane na serwerze, użyj tej flagi zamiast czekać.
--help, -h — Wypisuje opis polecenia z katalogu, każdy parametr, jego typ, wartości enum i informację, czy jest wymagany. W kliencie nie ma żadnego pliku pomocy.
--profile=, --sandbox, --live — Profil, w ramach którego wykonać to jedno wywołanie. --sandbox i --live wybierają profil z kluczem sandboxowym lub produkcyjnym; środowisko jest ustalane na serwerze na podstawie klucza, więc niezgodność kończy się błędem 403 ENVIRONMENT_MISMATCH zamiast zapisu w niewłaściwym miejscu.
--base-url, --timeout, --verbose, --no-color, --version — Kolejno: skierowanie jednego polecenia na inny serwer, limit czasu w sekundach, szczegóły żądania/odpowiedzi, wyłączenie kolorów ANSI oraz wersja klienta.
Prawdziwe przykłady
Każde poniższe polecenie istnieje dziś w katalogu; żadna nazwa ani parametr nie są tu wymyślone. Wyniki są skrócone. Pokazują poziom `data.result`; przez HTTP ten sam obiekt przychodzi wewnątrz koperty (envelope) `{success, data:{…}}` (zob. API poleceń przez HTTP).
Ładunki, które są teraz w drodze — lg loads list --status=in_transport --limit=20
Jeden ładunek w całości, surowy JSON — lg loads get --load_code=FSK2158 --json
Otwarte flagi spójności dokumentów — lg loads list-problems --only_open=true --limit=10
Ustal kraj — lg countries search --query=Germany --json
Filtruj ustalonym identyfikatorem — lg loads list --receiving_country_id=57 --date_from=2026-09-01 --limit=20
Znajdź kod HS na podstawie nazwy produktu — lg tariffs search --query="aluminium profile"
Przesuń ładunek do następnego etapu (tylko rola przewoźnika) — lg loads set-status --load_code=FSK2158 --status=transit --date=2026-08-21 --yes
Szkic — lg export-documents create --doc_type=proforma-invoice --currency_code=EUR --json
Wygeneruj (z bramką) — lg export-documents generate --document_id=8412 --yes
Bez klienta: API poleceń przez HTTP
lg to wygoda, a nie jedyne drzwi. Katalog i wykonanie przechodzą przez trzy endpointy HTTP (pliki mają czwarty, endpoint przesyłania — zob. Polecenia przyjmujące pliki); integracja ERP lub CRM łączy się tutaj bezpośrednio. Tożsamością jest osobisty token dostępu przesyłany w Authorization: Bearer. KAŻDA odpowiedź przychodzi w tej samej kopercie: `{ "success": bool, "data": { … }, "code": "…", "message": { … } }`. Cały kontrakt mieszka wewnątrz `data` — `contract_version`, `command`, `status` oraz, jako wynik polecenia, `result`; w razie niepowodzenia `error_code`, `error_key` i `error`. Przykłady odpowiedzi na tej stronie, dla oszczędności miejsca, pokazują obiekt `data`, a nie kopertę; nie zapomnij rozpakować `data` we własnym kodzie. `lg --json` również wypisuje CAŁĄ kopertę, dlatego ścieżki jq zaczynają się od `.data.result…`. Jedynym wyjątkiem jest `/api/public/status`: ten endpoint nie ma koperty, aby watchdogi mogły alarmować bez jej parsowania.
Proszenie o potwierdzenie przez 200 + ok:false jest zabronione i nigdy się nie zdarzy. Powód jest prosty: klienci traktują 200 jako sukces, więc prośba o potwierdzenie zwrócona jako 200 po cichu przerwałaby przepływ i nikt by tego nie zauważył. Potwierdzenie to zawsze 409.
GET /api/common/commands — Cały katalog, który widzi twoja rola: contract_version; dla każdego polecenia name, domain, verb, description, JSON Schema, read_only, confirmation_needed, irreversible, credit_cost, since, deprecated_at, replaced_by, aliases oraz pola dostępu key_level, permission, file_params, secret_parameters i cli_only; na najwyższym poziomie słownik error_keys, rate_limits, idempotency_ttl_hours, role twojego katalogu, kontrakt attachments (przesyłanie) oraz poziom dostępu klucza, którym wywołujesz. Wysyła ETag; If-None-Match odpowiada 304. ?domain= dopasowuje także starą domenę (alias). Buduj klienta na tej podstawie; nie koduj listy poleceń na sztywno.
GET /api/common/commands/{name} — Jedno polecenie w całości. name to zamrożona nazwa polecenia z katalogu (list_loads), a nie tożsamość CLI. Wycofywane polecenie odpowiada z nagłówkiem X-Deprecated.
POST /api/common/commands/{name} — Wykonanie. Treść: { args, confirm?, idempotency_key? }. Status HTTP odpowiedzi jest samym wynikiem — wszystko inne niż 200 to informacja, a nie szum. Błędy niosą error_code (transport) oraz, przy odrzuceniach biznesowych, error_key.
Polecenia przyjmujące pliki
Do 33 poleceń w tabeli przekazujesz dokument lub zdjęcie: dołączenie CMR do ładunku, odczytanie kodów HS z faktury, utworzenie pojazdu z dowodu rejestracyjnego, oszacowanie palety ze zdjęć, przesłanie dokumentu firmy, porównanie faktury z listą pakowania (packing list). W przeglądarce upuszczasz plik do formularza; wszędzie indziej trwa to dwa kroki — prześlij plik, a potem przekaż jego identyfikator poleceniu.
Parametr przyjmuje plik, gdy jego nazwa kończy się na attachment_uuid lub attachment_uuids — photos[].attachment_uuid wewnątrz listy, front_attachment_uuid na czeku. Nie musisz tego pamiętać: każdy wiersz katalogu zawiera file_params z dokładnymi ścieżkami, schemat oznacza te pola (format: uuid, x-logistivo-file: true), a odpowiedź katalogu zawiera blok attachments z adresem przesyłania, akceptowanymi typami, limitami rozmiaru i czasem życia. lg help również je pokazuje.
Przesyłanie to zapis, więc klucz z zakresem odczytu nie może przesyłać plików; może to zrobić każdy klucz z zakresem zapisu, na dowolnym poziomie dostępu. Przesłane pliki należą do użytkownika, a nie do klucza: dwa klucze tego samego użytkownika widzą te same pliki i nikt nie może użyć cudzych. Identyfikator nieznany, wygasły lub nienależący do ciebie po prostu nie zostaje znaleziony, a powód nie jest ujawniany.
Załączniki czatu w panelu i pliki przesłane dla poleceń to oddzielne przestrzenie: pliku dołączonego w czacie asystenta nie można przekazać poleceniu po identyfikatorze, a plik przesłany dla polecenia nigdy nie pojawia się w wątku czatu.
Przesłanie nie jest poleceniem i samo w sobie nie ma skutku biznesowego: z twoimi danymi nic się nie dzieje, dopóki polecenie nie użyje identyfikatora. Dlatego też przesyłanie nigdy nie prosi o potwierdzenie — bramkę niesie polecenie, które zużywa plik.
1. lg: poprzedź ścieżkę lokalną znakiem @ — lg najpierw przesyła plik, a potem uruchamia polecenie ze zwróconym identyfikatorem; wartość bez @ to identyfikator pliku przesłanego wcześniej. Listy przyjmują ścieżki rozdzielone przecinkami lub powtórzoną flagę, pola zagnieżdżone przyjmują JSON, a --file to skrót, gdy polecenie ma dokładnie jedno pole plikowe najwyższego poziomu. lg sprawdza każdy plik lokalnie (istnienie, rozmiar, typ), zanim cokolwiek zostanie wysłane, a lg batch przesyła każdy odrębny plik raz, zanim wsad zostanie uruchomiony.
2. HTTP: prześlij, potem przekaż attachment_uuid — Wyślij plik jako multipart/form-data w polu o nazwie file. Nowe przesłanie odpowiada 201; ten sam plik przesłany ponownie przez tego samego użytkownika odpowiada 200 ze statusem replayed i tym samym identyfikatorem, a nic nie zostaje zapisane. Jak wszędzie na tej stronie, przykład pokazuje obiekt data wewnątrz koperty.
3. MCP: narzędzie upload_attachment — Klient MCP nie może wysłać multipart, więc kanał oferuje jedno dodatkowe narzędzie, którego nie ma w katalogu: upload_attachment przyjmuje nazwę pliku i zawartość w base64 i zwraca ten sam attachment_uuid. Wywołuje tę samą usługę co przesyłanie przez HTTP, według tych samych zasad.
Typ wynika z zawartości — Nazwa pliku i zadeklarowany typ są ignorowane; zapisywane rozszerzenie to rozszerzenie wykryte. Akceptowane do przesłania: jpg, jpeg, png, webp, heic, heif, pdf, xlsx, xls, csv, txt, doc, docx, xml, zip. Każde polecenie stosuje następnie własną, węższą listę, zanim cokolwiek się wykona, i odpowiada UNSUPPORTED_FILE_TYPE z akceptowanymi typami albo FILE_TOO_LARGE.
Rozmiar — Obrazy do 10 MB, inne pliki do 15 MB.
Czas życia — Przesłanego pliku można używać przez 24 h. Potem nie jest już rozwiązywany (ATTACHMENT_NOT_FOUND) — nie jest usuwany. Jeśli polecenie zawiedzie z tego powodu, prześlij plik ponownie.
Ten sam plik, ten sam identyfikator — Ponowne przesłanie tego samego pliku (ta sama nazwa, rozmiar i zawartość) zwraca istniejący identyfikator zamiast zapisywać nowy, o ile pozostała mu co najmniej godzina ważności, i nie zużywa twojego dziennego limitu.
Dzienne limity — Limit przesłań na użytkownika: 300 dziennie (TOO_MANY_FILES), limit na firmę: 2 GB dziennie (DAILY_LIMIT_REACHED); oba odpowiadają 429 z retry_after.
POST /api/common/commands:upload — Przesyłanie multipart w polu file. 201 dla nowego przesłania, 200 ze statusem replayed dla tego samego pliku. Zwraca data.attachment: attachment_uuid, filename, mime_type, size_bytes, sha256, extraction_status, expires_at i reused.
Bramka potwierdzenia i polecenia nieodwracalne
Każde polecenie w katalogu ma dwie flagi: confirmation_needed (czy przed uruchomieniem wymaga wyraźnej zgody) i irreversible (czy jego efekt można cofnąć). To osobne pytania i oba są egzekwowane na serwerze, a nie zostawione dobrym manierom klienta.
Bramka dotyczy odpowiedzialności, a nie reguł biznesowych. Złożenie oferty to pierwszy krok do umowy przewozowej; wystawienie faktury tworzy zapis księgowy; ruch magazynowy zmienia księgę. Żadnej z tych rzeczy nie powinno się dać uruchomić dwa razy przez przypadek.
Bramka jest odczytywana z polecenia FAKTYCZNIE wykonywanego. Gdy jedno polecenie opakowuje inne — jak robi to ogólny wykonawca w czacie — bramka pochodzi z flag polecenia, które naprawdę się wykona, a nie z opakowania. Przy stałej fladze jedna z dwóch awarii byłaby nieunikniona: albo polecenie faktury wykonałoby się bez potwierdzenia, albo każde wyszukanie kraju wywoływałoby kartę potwierdzenia.
read_only i brak bramki to nie to samo. Istnieją trzy różne stany: invoices preview nie ma bramki i niczego nie zapisuje; loads create ma bramkę i zapisuje; invoices create nie ma bramki, ale zapisuje — powstaje szkic. Rozstrzyga jeden test: czy po powrocie polecenia zmienił się jakiś wiersz w bazie danych?
Niektóre działania nie stoją za tą bramką, bo w ogóle nie są poleceniami: zakup pakietu, dodanie karty z 3D Secure, akceptacja tekstów prawnych i zamknięcie konta odbywają się we własnej przeglądarce danej osoby. Dla nich lg handoff-links generate zwraca link do logistivo.com — bezpłatnie, niczego nie zapisując, bez żadnego sekretu — a osoba kończy krok tam. Żadna flaga, niezależnie od ustawienia, nie zamienia płatności ani zgody w wywołanie API.
Technicznie integracja może automatycznie przechodzić przez bramkę przy każdym wywołaniu, ale nie jest to zalecane. Właściwy wzorzec to automatyzowanie bramki tylko dla poleceń, o których wiesz, że są odwracalne, i kierowanie nieodwracalnych do kolejki człowieka.
1. Wywołaj — Wywołaj polecenie objęte bramką bez confirm. Nic się nie zmienia.
2. Przeczytaj podsumowanie — Dostajesz 409; confirmation.summary w treści to zdanie napisane dla człowieka („Zostanie wystawiona faktura: X Ltd, 1 200,00 TRY”), a nie zrzut surowych argumentów. Polecenia pieniężne zawierają też ustrukturyzowany podgląd: pozycje, sumy, ostrzeżenia.
3. Potwierdź — Powtórz to samo wywołanie z confirm: true (--yes w CLI). Polecenia nieodwracalne są oznaczone tak, by wykonały się najwyżej raz.
Przebieg próbny: zobacz, co zrobiłoby polecenie zapisu, bez jego uruchamiania
Najdroższy krok przy podłączaniu mostu ERP to sprawdzanie poprawności treści żądania przez FAKTYCZNE uruchomienie polecenia: szkic faktury w produkcyjnej księdze, spalony kredyt, ręczne sprzątanie. dry_run z tym kończy — dodajesz jedno pole do żądania, polecenie się nie wykonuje, a ty czytasz, co by się stało.
Rejestr składa się dziś z 519 poleceń; spośród nich 233 to polecenia wyłącznie do odczytu, które niczego nie zapisują. Spośród pozostałych 286 poleceń zapisu 251 to polecenia objęte bramką: wywołane bez confirm już odpowiadają 409 i opisują, co by zrobiły. Luka dotyczyła pozostałych 35: szkiców faktur, szkiców dokumentów eksportowych, pozycji — dokładnie tego łańcucha, który most podłącza jako pierwszy. W ich przypadku wywołanie oznaczało wykonanie.
Nawet w poleceniach z bramką była druga luka: walidacja schematu odbywa się PO bramce. Wywołanie z brakującym argumentem dostawało więc najpierw kartę potwierdzenia, było potwierdzane i dopiero wtedy słyszało „brakuje tego pola”. Przebieg próbny odpowiada na oba pytania w jednej wymianie.
A najczęstszy — i najpóźniej wykrywany — błąd mostu jest taki: wysyłasz pole, którego nie ma w schemacie (customer_id tam, gdzie oczekiwane jest recipient_contact_id), serwer po cichu je pomija, polecenie zwraca 200, a rekord ląduje w złym miejscu. Odpowiedź przebiegu próbnego wymienia takie pola z nazwy pod arguments.ignored; żaden komunikat błędu tego nie zrobi.
Przebieg próbny niczego nie zapisuje — i wynika to ze struktury, zanim jeszcze z pomiaru: ścieżka przebiegu próbnego nigdy nie wchodzi do handlera polecenia, więc dotyczy to każdego polecenia, także dodanych później. Zostało to też zmierzone przy wdrożeniu: przechwycono każdą instrukcję SQL wykonaną podczas przebiegów próbnych wszystkich ówczesnych poleceń zapisu w katalogu (dwa zestawy argumentów, dwie role, 178 przebiegów próbnych). Ani jednego INSERT/UPDATE/DELETE, ani jednego zadania w kolejce, ani jednego e-maila; liczby wierszy w 31 tabelach i saldo kredytów pozostały bez zmian.
Kod wyjścia jest taki sam, jaki dałoby prawdziwe wywołanie — wykonałoby się: 0, bramka potwierdzenia: 4, konflikt idempotencji: 2, wszystko inne: 1 — więc „lg … --dry-run || exit” jest sensowną bramką w kroku CI.
1. Wywołaj z dry_run — Dodaj "dry_run": true do treści żądania. Walidacja, bramka ról i zakresu, rozpoznanie celu i wyliczenie kredytów są wykonywane; polecenie — nie.
2. Odczytaj would_execute — To jedyna flaga, na której warto opierać rozgałęzienia. Gdy ma wartość false, would_stop.at wskazuje, gdzie zatrzymałoby się prawdziwe wywołanie: idempotency, target_precheck, confirmation_gate lub arguments.
3. Popraw treść żądania — arguments.ignored wymienia pola, które zostałyby po cichu pominięte, missing_required — wymagane pola, których brakuje, a would_charge — ile kredytów by zeszło i czy saldo je pokrywa.
4. Usuń dry_run — Powtarzaj, aż would_execute będzie true, potem usuń flagę i wykonaj prawdziwe wywołanie. Klucz idempotencji wysłany podczas przebiegu próbnego nie został skonsumowany, więc prawdziwe wywołanie wykona się normalnie.
HTTP to zawsze 200 — „Polecenie by się nie powiodło” nigdy nie przychodzi jako 4xx — sam przebieg próbny się powiódł, a prognoza jest w treści. Wyjątkiem jest odmowa na poziomie transportu i tam zachowuje się dokładnie jak prawdziwe wywołanie: 404 nieznane polecenie, 403 rola/zakres, 429 limit żądań.
Klucz z zakresem odczytu nie wykona przebiegu próbnego polecenia zapisu — Dostaje 403. Przebieg próbny odpowiada na pytanie „co się stanie, jeśli wywołam to TYM KLUCZEM, teraz”; danie kluczowi do odczytu zielonego światła, a potem 403 przy prawdziwym wywołaniu, byłoby dokładnie tą niespodzianką, której przebieg próbny ma zapobiegać.
Klucz idempotencji nie zostaje skonsumowany — Klucz wysłany podczas przebiegu próbnego nie otwiera wiersza w rejestrze, a wygasła blokada nie zostaje zwolniona. Wysyłaj więc klucz, którego zamierzasz użyć naprawdę: przebieg próbny powie ci, czy jest wciąż wolny, czy odtworzyłby wcześniejsze wykonanie, czy koliduje z innym poleceniem.
Łączy się z confirm — Wyślij dry_run i confirm razem, a pytanie brzmi: „co się stanie, jeśli potwierdzę?”. Nadal nic się nie wykonuje.
Przebieg próbny wsadu dotyczy całego wsadu — commands:batch również przyjmuje dry_run, ale flaga należy do wsadu, a nie do elementu (wysłanie jej przy elemencie to 422). Dostajesz raport dla każdego elementu oraz łączny koszt kredytowy wsadu; niewystarczające saldo jest raportowane, a nie odrzucane.
Nie jest darmowy — Każdy przebieg próbny wykonuje prawdziwe zapytania do bazy (podgląd, saldo) i wlicza się do limitu żądań. Nie wykonuj przebiegu próbnego całego katalogu przy każdym wdrożeniu; sprawdzaj w ten sposób tylko zmienione polecenia.
Idempotencja: dlaczego ponawianie nie tworzy duplikatów
ERP nie czyta twojego komunikatu o błędzie, nie widzi twojego ekranu i po przekroczeniu limitu czasu wyśle to samo żądanie ponownie. Ta sekcja istnieje właśnie z powodu tego zachowania.
Wywołanie z idempotency_key wykonuje się najwyżej raz. Drugie wywołanie nie wykonuje polecenia ponownie; zwraca zapisany wynik ze statusem replayed. Gdy zerwie się sieć, gdy żądanie przekroczy limit czasu albo gdy kolejka podejmie to samo zadanie dwa razy, dostajesz pierwszy wynik zamiast zduplikowanej faktury.
Używaj klucza w każdym poleceniu zapisującym. Pole read_only w katalogu daje ci to rozróżnienie za darmo: każde polecenie z read_only: false zasługuje na klucz idempotencji.
Twoja strategia ponowień powinna stosować wykładnicze wydłużanie odstępów (exponential backoff) i wysyłać TEN SAM klucz przy każdej próbie. Generowanie nowego klucza dla każdej próby to to samo, co nieużywanie idempotencji. Nie wysyłaj tego samego klucza równolegle: gwarancja „najwyżej raz” obowiązuje dla kolejnych ponowień, a nie dla dwóch żądań ścigających się ze sobą.
Pułapka 1 — niepowodzenie też zostaje zablokowane — Jeśli pierwsze wykonanie zostało odrzucone przez regułę biznesową (failed), drugie wywołanie z tym samym kluczem zwraca ten sam błąd i ten sam error_key i nie ponawia próby. Poprawienie argumentu i ponowna próba wymagają NOWEGO klucza. Klucz reprezentuje próbę, a nie zamiar.
Pułapka 2 — duży wynik jest odtwarzany bez treści — Rejestr przechowuje wynik tylko wtedy, gdy ma on mniej niż 64 KB. Większy wynik jest odtwarzany ze statusem replayed, ale z pustą treścią. Twoja integracja powinna polegać na sygnale „replayed”, a nie na treści, i pobierać dane odpowiednim poleceniem get.
Pułapka 3 — klucz należy do jednego polecenia — Wysłanie tego samego klucza z innym poleceniem zwraca 409 idempotency_conflict z conflicting_command; nic się nie wykonuje i nic nie jest odtwarzane. Klient, który współdzieli jeden klucz między dwoma czasownikami, jest wadliwy i dowiaduje się o tym z błędu, a nie z cichego odtworzenia.
Pułapka 4 — blokada trwa 24 godziny, a nie wiecznie — Po 24 godzinach ten sam klucz oznacza nowe wykonanie. Ponowienia sieciowe przychodzą w ciągu minut; coroczne, powtarzające się numery dokumentów w ERP nie mogą na zawsze pozostać „replayed”. Katalog publikuje to okno jako idempotency_ttl_hours.
Pułapka 5 — błąd serwera nie blokuje klucza — 5xx server_error to nie odrzucenie biznesowe: klucz nie zostaje związany, więc ponowienie z tym samym kluczem naprawdę uruchamia polecenie. Blokuje tylko failed (pułapka 1).
Zakres i format — twoja firma, dowolny ciąg znaków, najlepiej UUID — Unikalność jest egzekwowana dla pary (twoja firma, klucz): INV-1001 innego tenanta nigdy nie koliduje z twoim i nigdy nie odtworzy twojego wyniku. Użyj zwykłego UUID albo złożenia unikalnego z samej konstrukcji, np. {ERP-document-no}:{verb}.
Synchronizacja przyrostowa i paginacja
Most ERP/CRM powinien pobierać to, co się zmieniło, a nie wszystko co godzinę. Każde polecenie listujące — loads list, demands list-own, contacts list, invoices list, teammates list, load-groups list, reservations list, drivers list, tenders list, products search, warehouses search — przyjmuje dwa wspólne parametry i zwraca jedno wspólne pole.
Dlaczego nie ma offsetu: na żywej tabeli offset się przesuwa. Wiersz wstawiony między dwiema stronami sprawia, że po cichu pomijasz rekord albo liczysz go dwa razy. Kursor przesuwa się tylko do przodu, więc rekord wstawiony lub zaktualizowany w trakcie przechodzenia ląduje na końcu listy: nic nie ginie, nic się nie dubluje.
Pełne zasilenie początkowe to ten sam mechanizm: zacznij od updated_since=1970-01-01T00:00:00Z i podążaj za next_cursor, aż będzie null. Nie ma osobnego endpointu „eksportu”, bo nie jest potrzebny.
To samo z lg: lg loads list --updated_since=2026-09-01T00:00:00Z --limit=100 --json, a potem lg loads list --cursor= --json.
Przy następnej synchronizacji ustaw updated_since na największą zaobserwowaną wartość updated_at. Znaczniki czasu mają precyzję jednej sekundy, więc rekord na granicy może przyjść dwa razy — to nieszkodliwe, o ile po swojej stronie wykonujesz upsert według external_ref lub code. Bez updated_since ani cursor polecenie działa w trybie czatu: kolejność czytelna dla ludzi, najwyżej 20 wierszy, next_cursor równe null i truncated sygnalizujące, że „jest więcej”. Nie używaj tego trybu do synchronizacji.
Maszynowo czytelne klucze błędów dla tej sekcji: INVALID_CURSOR, INVALID_UPDATED_SINCE, DUPLICATE_EXTERNAL_REF, EXTERNAL_REF_TOO_LONG, EXTERNAL_REF_INVALID. Wszystkie odpowiadają HTTP 422 z error_code: "failed" i result.error_key w treści. Opieraj rozgałęzienia na kluczu, nigdy na tekście.
updated_since — Znacznik czasu ISO-8601 (zalecany UTC, np. 2026-09-01T00:00:00Z). Wiersze zaktualizowane w tej chwili lub później. Przełącza polecenie w tryb synchronizacji: stała kolejność (updated_at, id) rosnąco, limit ograniczony do 100.
cursor — next_cursor z poprzedniej odpowiedzi, dosłownie. Jest nieprzezroczysty i podpisany: nigdy go nie buduj ani nie edytuj, nigdy nie używaj ponownie kursora innej firmy ani innego polecenia; wszystkie te przypadki są odrzucane z INVALID_CURSOR.
limit — Rozmiar strony. 1-100 w trybie synchronizacji (domyślnie 10).
next_cursor (odpowiedź) — Kursor następnej strony. null oznacza, że lista jest kompletna; to jedyna poprawna odpowiedź na pytanie „czy jest więcej”.
total (odpowiedź) — Liczba wierszy pasujących do filtrów, niezależnie od strony — do raportowania postępu.
Twój własny klucz: external_ref
Nie rób z naszych autoinkrementowanych identyfikatorów (invoice_id, contact_id) klucza biznesowego w swoim ERP; są nieprzezroczyste i prywatne dla twojej firmy. Ładunki, zapytania transportowe, kontakty, faktury, produkty i magazyny niosą zamiast tego twój klucz.
Ustaw go przy zapisie — loads create, demands create, contacts create i contacts update oraz invoices create przyjmują opcjonalny external_ref (maks. 120 znaków) i zwracają go bez zmian.
Używaj go przy odczycie — loads get --external_ref=ORD-2026-0917, invoices get --external_ref=..., contacts get --external_ref=..., demands get --external_ref=... — wszystkie działają; w poleceniach list i search --external_ref= jest filtrem dokładnego dopasowania.
Unikalny w obrębie firmy — Drugi rekord z tym samym kluczem jest odrzucany z 422 i result.error_key = DUPLICATE_EXTERNAL_REF; klucz innej firmy odpowiada ci „nie znaleziono”. Dopasowanie nie rozróżnia wielkości liter (ord-1 = ORD-1). Zarchiwizowany rekord zachowuje swój klucz; przywróć go, zanim użyjesz tego klucza ponownie.
Wysyłaj też idempotency_key — Ponowienie po przekroczeniu limitu czasu sieci zwraca pierwszy wynik zamiast tworzyć duplikat. Te dwa pola nie są wymienne: external_ref to twój klucz biznesowy, idempotency_key identyfikuje jedną próbę.
Webhooki wychodzące: wysyłamy do ciebie POST, gdy coś się wydarzy
Wszystko do tego miejsca działało w trybie pull: ty pytasz, my odpowiadamy. Most ERP musiał pytać co minutę, żeby dowiedzieć się, że ładunek zmienił status, wystawiono fakturę albo wpłynęła oferta. Już nie: zarejestruj adres https, wybierz zdarzenia, które cię interesują, a gdy się wydarzą, przyjdzie podpisany POST.
Push dodano OBOK pull, a nie zamiast niego. Synchronizacja przyrostowa (updated_since + cursor) pozostaje nietknięta i nadal jest właściwym narzędziem: pierwsze pełne zasilenie, uzupełnianie historii i odpowiedź na pytanie „czy coś mi umknęło” — wszystko to odbywa się tam. Webhooki skracają opóźnienie z minut do sekund. Zdrowy most używa obu — webhooka jako wyzwalacza, synchronizacji jako siatki bezpieczeństwa.
Payload to SYGNAŁ, a nie kopia rekordu. Zawiera identyfikatory (id, twój własny external_ref, status, czas); szczegóły pobierasz własnym kluczem przez GET, a to wywołanie przechodzi już przez twoje własne bramki autoryzacji. Powierzchnia ekspozycji pozostaje więc na poziomie identyfikatorów. Dwóch pól celowo brak: tożsamości firmy, która złożyła ofertę (oferty niejawne pojawiają się w panelu pod aliasem; umieszczenie tożsamości w webhooku przebiłoby tę prywatność drugim kanałem), oraz danych kontaktowych rezerwacji (nie ma potrzeby przesyłać danych osobowych dodatkowym kanałem).
Nazwy zdarzeń są ZAMROŻONE. Jeśli zmienia się znaczenie nazwy, otwierana jest nowa nazwa, a stara żyje przez okno wycofania. Dodanie nowego pola do payloadu NIE podnosi wersji kontraktu — konsument musi ignorować pola, których nie zna.
GET /api/common/integration-webhooks — Rejestr wraz z katalogiem zdarzeń, limitami i nazwami nagłówków. Każdy wiersz zawiera powód wyciszenia i 7-dniowe podsumowanie dostarczeń.
POST /api/common/integration-webhooks — 201 + { webhook, secret, shown_once: true }. Sekret pojawia się tylko tutaj.
PATCH /api/common/integration-webhooks/{uuid} — Nazwa / adres / zdarzenia / flaga aktywności. NIE dotyka sekretu.
DELETE /api/common/integration-webhooks/{uuid} — Usuwa subskrypcję: wiersz jest usuwany miękko (soft delete; historia pozostaje dostępna do zapytań), a oczekujące dostarczenia są anulowane.
POST /api/common/integration-webhooks/{uuid}/rotate-secret — 201 + nowy sekret. Stara wartość przestaje działać w tej samej chwili.
GET /api/common/integration-webhooks/{uuid}/deliveries — Najnowsze dostarczenia: status, numer próby, kod HTTP, czas trwania, znacznik błędu.
POST /api/common/integration-webhooks/deliveries/{uuid}/replay — Ponownie wysyła pojedyncze dostarczenie: event_id jest ZACHOWYWANY, id dostarczenia jest nowe, payload jest kopiowany dosłownie.
Katalog zdarzeń
Za każdym z 13 poniższych zdarzeń stoi klasa zdarzenia, która jest FAKTYCZNIE wysyłana. W katalogu nie ma nazw typu „byłoby miło”: zdarzenie ogłoszone, ale nigdy niewywołane, to zdarzenie, na które integrator czeka w nieskończoność, a ta awaria jest cicha. Ta tabela również nie jest pisana ręcznie — przy każdym załadowaniu strony jest rysowana z bieżącego katalogu.
invoice.payment_recorded jest celowo NIEOBECNE: ta klasa zdarzenia istnieje w kodzie, ale nie jest nigdzie wysyłana. Zdarzenie płatności zostanie dodane w dniu, w którym klasa będzie naprawdę wywoływana — nie wcześniej. Przedwczesne ogłoszenie zdarzenia jest gorsze niż niedodanie go nigdy.
load.created — A load became visible to your company (created by you or shared with you). (load)
load.status_changed — A load moved to a new status (pending, in_transport, transit, done). (load)
load.driver_assigned — A driver was assigned to a load. (load)
demand.created — A freight demand was created by your company. (demand)
demand.status_changed — A freight demand changed status. (demand)
demand_bid.created — A bid was placed on a demand you are party to. (demand_bid)
demand_bid.revised — A bid was revised (a new revision replaced the previous one). (demand_bid)
demand_bid.accepted — A bid was accepted. (demand_bid)
invoice.created — An invoice draft was created. (invoice)
invoice.issued — An invoice was issued (it now carries an invoice number). (invoice)
invoice.cancelled — An invoice was cancelled. (invoice)
warehouse_reservation.created — A warehouse dock/area reservation was created. (warehouse)
warehouse_reservation.status_changed — A warehouse reservation was approved, rejected or otherwise moved. (warehouse)
Weryfikacja podpisu
Każde żądanie zawiera nagłówek X-Logistivo-Signature: t=,v1=. Podpisywany ciąg to ".", a algorytm to HMAC-SHA256. Prefiks v1 pozwala wersjonować schemat: jeśli kiedyś pojawi się drugi schemat, nagłówek będzie zawierał t=…,v1=…,v2=…, a ty wybierzesz ten, który znasz.
Publikujemy dwa referencyjne odbiorniki bez zależności, jeden dla Node i jeden dla czystego PHP. Oba stosują cztery powyższe reguły i testują się same przez --selftest: prawidłowy podpis, zmanipulowana treść, zły sekret, znacznik czasu poza oknem, nieprawidłowy nagłówek, pułapka ponownej serializacji i oba rodzaje powtórzeń (to samo dostarczenie / ten sam fakt). Weryfikator jest dokładnym odpowiednikiem kodu, którego sami używamy — korzystamy z kontraktu, który publikujemy.
Weryfikuj SUROWĄ treść — Podpis jest liczony z bajtów. Dekodowanie i ponowna serializacja treści (JSON.stringify(req.body), json_encode($request->all())) zamienia te same DANE w inne BAJTY i podpis przestaje się zgadzać. W Node pułapką jest formatowanie liczb (1.50 w transmisji staje się 1.5; duże liczby całkowite tracą precyzję), w PHP — escapowanie znaków (/ staje się \/, İ staje się İ). Używaj express.raw w Express i $request->getContent() w Laravel. To najczęstszy błąd przy pisaniu odbiornika.
Sprawdzaj znacznik czasu — t jest WEWNĄTRZ podpisu. Weryfikacja samego podpisu pozwala każdemu, kto przechwycił prawidłowe żądanie, odtworzyć je kilka godzin później, a odbiornik uznałby je za zweryfikowane zdarzenie. Odrzucaj każde żądanie, dla którego |now − t| > tolerancja, nawet jeśli podpis jest poprawny. Zalecane okno to 300 s.
Porównuj w stałym czasie — hash_equals / timingSafeEqual. Porównanie przez == pozwala atakującemu odgadywać podpis bajt po bajcie.
Deduplikuj po event_id, a nie po id — event_id identyfikuje FAKT: jest taki sam dla dwóch subskrybentów otrzymujących to samo zdarzenie i jest ZACHOWYWANY przy ponownym wysłaniu (replay). id (= X-Logistivo-Delivery) identyfikuje DOSTARCZENIE i zmienia się przy ponownym wysłaniu. Na pytanie „czy to zostało już obsłużone” odpowiadaj za pomocą event_id; odpowiadanie za pomocą id sprawia, że ponowne wysłanie wykona tę samą pracę dwa razy.
Dostarczanie, ponowienia i wyciszanie
Twój odbiornik nie zawsze będzie dostępny. Mechanizm to zakłada: przejściowa awaria trafia do harmonogramu ponowień, trwała wycisza subskrypcję — a POWÓD wyciszenia jest zawsze zapisywany.
Powód wyciszenia jest maszynowo czytelny i stabilny (delivery_failures, endpoint_gone, unsafe_target, key_revoked, by_user) i widać go zarówno w panelu, jak i w `lg webhooks list`. Wyciszenie bez powodu sprawiłoby, że na pytanie „dlaczego nic nie przychodzi” nie byłoby odpowiedzi. Ponowne włączenie zeruje licznik i znacznik.
Adres piszesz ty; żądanie wykonuje NASZ serwer. Bez bramki tenant, który wpisałby adres metadanych chmury, mógłby zmusić nas do wysyłania żądań z wnętrza naszej własnej sieci. Dlatego adres jest sprawdzany zarówno przy rejestracji, jak i przy KAŻDYM dostarczeniu:
Limity czasu — 8 s łącznie, 4 s na połączenie — wolny odbiornik nie może blokować workera. Wstaw pracę do kolejki i od razu zwróć 2xx.
Harmonogram ponowień — 60 · 300 · 1800 · 7200 · 21600 s → łączna liczba prób: 6, okno około 8,6 h.
Jedyna trwała awaria: 410 Gone — Oznacza „usuń mnie”: bez ponowień, subskrypcja jest natychmiast wyciszana. NIGDY nie zwracaj 410 przy błędzie podpisu.
Każda inna awaria — WSZYSTKIE są ponawiane, łącznie z 4xx. Utrata zdarzenia biznesowego kosztuje więcej niż kilka dodatkowych żądań: odbiornik zwracający 403 w trakcie aktualizacji reguły WAF po cichu straciłby zdarzenie „faktura wystawiona” w mechanizmie, który traktuje 4xx jako trwałe.
Retry-After — Respektowany przy 429 i 503 (maksymalnie 6 godzin).
Przekierowania — NIE są wykonywane. Przeskok na adres wewnętrzny przez 302 przebiłby bramkę adresów drugą drogą.
Automatyczne wyciszanie — Po 10 kolejnych dostarczeniach, które wyczerpały ponowienia. 410, niebezpieczny cel oraz unieważnienie powiązanego klucza integracyjnego wyciszają NATYCHMIAST.
tylko https, tylko porty 443/8443, osadzone dane uwierzytelniające (https://user:pass@…) są odrzucane;
localhost, nazwy jednoczłonowe i wewnętrzne sufiksy, takie jak .internal / .local / .svc, są odrzucane — intencja jest odrzucana, zanim w ogóle spojrzymy na wynik rozwiązywania nazwy, więc split-horizon DNS nie przebije bramki;
literały IP i WSZYSTKIE rekordy z rozwiązania DNS muszą być publiczne. Jeśli nazwa rozwiązuje się zarówno na adres publiczny, jak i prywatny, nikt nie pyta nas, który wybrać → nazwa jest od razu odrzucana;
w chwili dostarczenia adres jest rozwiązywany raz, a połączenie jest przypinane do zweryfikowanego adresu: okno na DNS rebinding jest zamknięte;
TREŚĆ odpowiedzi odbiornika nigdy nie jest nigdzie przechowywana (tylko kod statusu, czas trwania i krótki znacznik błędu) — więc ścieżka „odczytu”, która jest tym, co naprawdę daje dziura w bramce adresów, pozostaje zamknięta.
Celowo NIE ma przełącznika konfiguracyjnego „zezwalaj na adresy prywatne”: taki przełącznik pewnego dnia zostaje przez przypadek włączony.
Zwracany JEDEN raz, tylko przy tworzeniu subskrypcji i przy rotate-secret. Jest przechowywany na serwerze w postaci zaszyfrowanej i nigdy nie da się go odczytać; nie ma opcji „pokaż ponownie”.
lg wypisuje go na ekran i na tym poprzestaje — nie zapisuje go w żadnym pliku konfiguracyjnym ani pliku pamięci podręcznej.
Jeśli zostanie utracony, wykonujesz rotację; stara wartość przestaje działać W TEJ SAMEJ CHWILI. Aby przełączenie było płynne, twój odbiornik powinien w okresie przejściowym sprawdzać oba sekrety.
Zmiana adresu NIE dotyka sekretu: rutynowa konserwacja w rodzaju „URL się przeniósł” nie może psuć weryfikacji po stronie odbiorcy.
Stan i status: nikt nie powinien zauważyć cichego mostu przed tobą
Most integracyjny rzadko umiera z hukiem. Zwykle cichnie nad ranem: wygasa token, osoba, w imieniu której działa klucz, odchodzi z zespołu, zakres zostaje zawężony albo endpoint odbierający zaczyna zwracać 403. Pierwszy zauważa to prawie zawsze klient. lg status istnieje po to, by odwrócić tę kolejność.
Jedno polecenie odpowiada na dwa pytania naraz, bo podczas awarii oba padają w tej samej chwili: czy platforma działa i czy mój most jest zdrowy. Linia platformy działa bez tokenu — podczas awarii to właśnie token jest pierwszym podejrzanym, a uzależnienie od niego pytania o status zostawiłoby cię bez odpowiedzi dokładnie wtedy, gdy jej potrzebujesz.
Podsumowanie stanu nie prowadzi nowego rejestru; składa w jedno zdanie trzy istniejące źródła: dzienny licznik użycia (ile wywołań i ile nieudanych), rejestr żądań (które żądanie, kiedy i dlaczego zostało odrzucone) oraz rejestr dostarczeń webhooków wychodzących (czy zdarzenie dotarło do odbiornika). Współczynnik błędów jest zawsze odczytywany z dziennego licznika; rejestr szczegółowy ma limit i wyraźnie to komunikuje, gdy limit zostanie osiągnięty.
To samo podsumowanie pojawia się w panelu: w Settings › Integration › Keys każdy wiersz ma plakietkę, a pod nią powód. Progi nie są liczone po stronie klienta; poziom przypisany przez serwer jest tym, co rysują zarówno panel, jak i lg status, więc dwa ekrany nigdy nie mogą mówić różnych rzeczy o tym samym kluczu.
Twój watchdog nie potrzebuje tokenu. Endpoint zwraca tylko słowa statusu; nie zawiera wersji, nazwy hosta, nazwy kolejki, liczby zadań, tekstu błędu ani danych klientów — i nie może ich zawierać.
Podsumowanie stanu powstaje przy stałej liczbie zapytań na żądanie; liczba zapytań nie rośnie wraz z liczbą kluczy. Po szczegóły sięgnij do ostatnich żądań danego klucza przez lg logs, a do mostu wychodzącego — przez lg webhooks list.
SPRAWNY — Brak zmierzonej usterki i mamy dowód sukcesu: udane wywołanie w rejestrze lub ruch, który w liczniku pozostał bez błędów.
UWAGA — Coś zaczęło się psuć: współczynnik błędów lub seria kolejnych niepowodzeń przekroczyły próg, żądania są odrzucane na bramce, klucz zbliża się do wygaśnięcia albo most, który odzywał się regularnie, ucichł.
AWARIA — Most w tej chwili nie działa: token został unieważniony niezamierzenie, zamknięty klucz jest wciąż wywoływany, wystąpiło pięć niepowodzeń z rzędu, współczynnik błędów przekracza pięćdziesiąt procent albo subskrypcja webhooka została wyciszona.
ZAMKNIĘTY — Klucz został zamknięty celowo i nikt go nie wywołuje. To decyzja, a nie usterka — i nie jest malowana na czerwono.
BRAK DANYCH — Nie ma pomiaru: klucz nigdy nie był wywołany albo sam pomiar się nie powiódł. Żaden z tych przypadków nie jest zielony.
Żadnej fałszywej zieleni. Plakietka SPRAWNY wymaga zmierzonego dowodu sukcesu; klucz, który nigdy nie był wywołany, nigdy nie zmienia się na zielony, bo żaden pomiar nie pokazuje, że działa.
Żadnej fałszywej czerwieni. Klucze zamknięte celowo są pokazywane jako ZAMKNIĘTY. Malowanie wszystkiego na czerwono odbiera czerwieni znaczenie; zamknięty klucz staje się czerwony tylko wtedy, gdy nadal jest wywoływany po zamknięciu — a wtedy most naprawdę jest zepsuty.
„Nie udało się zmierzyć” to nie to samo co „brak danych”. Jeśli zapytanie zawiedzie po stronie serwera, wiersz nie pokazuje po cichu zera; mówi, że pomiaru nie dało się wykonać.
Cisza jest zawsze raportowana, ale nigdy nie zamienia się na ślepo w ostrzeżenie. Most działający na koniec miesiąca, który milknie na trzydzieści godzin, to norma; most, który odzywał się w co najmniej pięciu z ostatnich siedmiu dni, a ucichł, to usterka. Rytm jest mierzony, a nie zakładany.
Samo zapytanie o status nie zaburza liczb o stanie. Wywołania wykonane przez lg status pojawiają się w rejestrze żądań, ale są wyłączone z obliczeń stanu — w przeciwnym razie twoje własne udane zapytanie o status zerowałoby serię niepowodzeń i ukrywało dokładnie tę usterkę, którą ekran ma pokazywać.
Każda linia jest mierzona: na bazie danych wykonywane jest prawdziwe zapytanie, katalog poleceń jest naprawdę budowany, a bieżący zapis workera kolejki jest naprawdę odczytywany. Nic nie jest zakładane.
Sama odpowiedź też jest pomiarem: jeśli możesz odczytać treść, warstwa webowa działa.
Najwyższy poziom wynika wyłącznie z wymaganych komponentów. Gdy kolejka staje, odpowiedź brzmi degraded, a nie down — synchroniczne wywołanie API nie potrzebuje kolejki, a ogłoszenie, że platforma nie działa, byłoby fałszywym alarmem.
Gdy stanu kolejki nie da się zmierzyć, najwyższy poziom pozostaje nienaruszony: niewiedza to nie to samo co zmierzenie, że coś jest zepsute.
Jeśli platforma nie działa, endpoint zwraca HTTP 503. Treść nie ma koperty, aby narzędzia monitorujące mogły alarmować bez jej parsowania, a odpowiedź nigdy nie jest przechowywana w żadnej pamięci podręcznej.
Błędy i kody wyjścia
To, na czym maszyna opiera rozgałęzienia, jest stabilnym ciągiem znaków. Tekst w polu error jest przeznaczony dla człowieka, jest zlokalizowany i zmienia się bez uprzedzenia — integracja, która opiera rozgałęzienia na tekście komunikatu, nie jest wspierana, a jej zepsucie się nie jest błędem.
Dwie taksonomie, dwa pola. error_code to warstwa transportowa (tabela powyżej) i to na nim opierasz rozgałęzienia w pierwszej kolejności. error_key to stabilny klucz reguły biznesowej wewnątrz failed — INSUFFICIENT_CREDITS, NOT_FOUND, DUPLICATE_CONTACT, INSUFFICIENT_STOCK — publikowany jako słownik w katalogu (error_keys) i poniżej. Polecenie, które jeszcze nie emituje klucza, zwraca error_key: null; klucz nieobecny w słowniku traktuj jak ogólne niepowodzenie.
ok — HTTP 200 · error_code — · CLI 0 · —
replayed — HTTP 200 · error_code — · CLI 0 · Odtworzenie idempotentne; praca NIE została wykonana ponownie.
failed — HTTP 422 · error_code failed · CLI 1 · Nie — odrzuciła je reguła biznesowa (zob. error_key). Nie ma sensu, dopóki argument się nie zmieni.
needs_confirmation — HTTP 409 · error_code needs_confirmation · CLI 4 · Tak, z confirm: true.
idempotency_conflict — HTTP 409 · error_code idempotency_conflict · CLI 2 · Nie — klucz został najpierw użyty z innym poleceniem (conflicting_command). Wygeneruj nowy klucz.
forbidden — HTTP 403 · error_code forbidden · CLI 3 · Nie — bramka ról albo klucz z zakresem odczytu w poleceniu zapisującym.
not_found — HTTP 404 · error_code not_found · CLI 2 · Nie — błędna lub usunięta nazwa polecenia.
(schemat) — HTTP 422 · error_code invalid_request · CLI 2 · Nie — treść żądania lub argument nie przeszły walidacji schematu (errors{}); to nie reguła biznesowa.
server_error — HTTP 500 · error_code server_error · CLI 6 · Tak — wykładnicze wydłużanie odstępów z TYM SAMYM kluczem idempotencji; klucz nie został zablokowany.
401 unauthenticated — Token wygasł lub został unieważniony. Ponawianie nie pomoże; token trzeba wymienić.
429 rate_limited — Przekroczono limit żądań dla tego tokenu. Odpowiedź zawsze zawiera Retry-After oraz treść z retry_after, limit i bucket; respektuj ją zamiast wymyślać stałe opóźnienie. lg czeka i ponawia do trzech razy, a potem kończy działanie z kodem 5.
5xx server_error / błąd sieci — Ponów z wykładniczym wydłużaniem odstępów i TYM SAMYM kluczem idempotencji. Zmiana klucza ponownie uruchamia pracę, którą serwer mógł już wykonać. lg ponawia trzy razy (1 s, 2 s, 4 s), a potem kończy działanie z kodem 6 i error_code network_error lub server_error.
Obietnica stabilności
Najdroższe pytanie w kontrakcie integracyjnym brzmi: „czy kod, który piszę dziś, będzie działał jutro?”. Odpowiada na nie jedna liczba: contract_version w katalogu i nagłówek X-Contract-Version w każdej odpowiedzi. Odpowiada ona dokładnie na jedno pytanie — czy wcześniej napisany kod nadal działa bez zmian? Jeśli liczba nie wzrosła — tak. Jeśli wzrosła — nie: coś, na czym opierał się twój kod, zostało usunięte lub zawężone.
Bo ogłoszenie niczego nie usuwa: twój istniejący kod działa dokładnie tak jak wcześniej, także dzień później. Podnoszenie wersji przy ogłoszeniu dałoby dwa sygnały dla jednej zmiany i nauczyłoby cię ignorować pierwszy — osłabiając sygnał, który naprawdę ma znaczenie. Ogłoszenie i tak dociera wraz z wywołaniem, które wykonujesz: deprecated_at i replaced_by w wierszu katalogu, nagłówek X-Deprecated plus blok deprecated w odpowiedzi tego polecenia oraz jednowierszowe ostrzeżenie na stderr, jeśli używasz lg. Nie musisz nic robić, by dowiedzieć się, że coś zniknie; to już jest w twoim logu.
Między ogłoszeniem a usunięciem mijają co najmniej dwa kwartały kalendarzowe. Przez całe okno stare polecenie nadal odpowiada i ostrzega przy każdym wywołaniu. Gdy nazwa CLI zostaje wycofana, jej następca przejmuje tę nazwę jako alias: w trakcie okna stara nazwa trafia do starego polecenia, a w dniu usunięcia to samo wywołanie trafia do nowego — bez wydawania przez ciebie nowej wersji klienta.
preview_invoice → get_invoice (ogłoszone 3 września 2026). get_invoice zwraca ten sam blok podglądu i dodaje pozycje, rozbicie podatków, zarejestrowane płatności, saldo pozostałe do zapłaty oraz adresowanie twoim własnym kluczem ERP (external_ref). preview_invoice nadal działa, podobnie jak lg invoices preview — oba ostrzegają.
bez zmian — Nowe polecenie · nowy OPCJONALNY parametr · nowe pole odpowiedzi · nowy klucz błędu · nowy endpoint — Nic nie rób. Musisz ignorować pola, których nie znasz; parser, który zawodzi na nieznanym polu, jest niezgodny z kontraktem.
bez zmian — OGŁOSZENIE wycofania: zapowiedź, że polecenie zniknie — Twój kod działa dalej. Wpisz zadanie do kalendarza — okno wynosi co najmniej 6 miesięcy.
rośnie — Usunięcie polecenia · wycofanie starej nazwy CLI · usunięcie pola odpowiedzi · zmiana parametru opcjonalnego na wymagany · zawężenie enuma — Oznacza to, że okno zostało przegapione; zapowiedź dotarła do ciebie w trzech różnych miejscach.
Nazwa API polecenia (np. list_loads) jest zamrożona na zawsze; to jej używasz w wywołaniach HTTP.
error_code (transport) i error_key (reguła biznesowa) to stabilne ciągi znaków. Mogą pojawić się nowe — klucz, którego nie znajdziesz w słowniku, traktuj jak ogólne niepowodzenie, a nie jak zerwanie kontraktu.
Odwzorowanie między statusem HTTP a polem status w treści jest stałe.
Numer wersji nigdy nie maleje i można go odczytać z każdej odpowiedzi — także z 304 i 429 bez treści.
TEKST błędów i opisów. Jest zlokalizowany i zmienia się bez uprzedzenia; rozgałęzianie na podstawie tekstu komunikatu nie jest wspierane.
Brak pól, których nie znasz. Dodanie pola nie podnosi wersji.
Autoinkrementowane identyfikatory jako klucze biznesowe. Przekazuj własny klucz przez external_ref.
Dynamiczne klucze błędów wyprowadzane z nazw klas; nie są częścią kontraktu.
Tabela tożsamości poleceń
Poniższa tabela nie jest pisana ręcznie: jest generowana z bieżącego rejestru poleceń za każdym razem, gdy ta strona jest serwowana. Polecenie dodane na serwerze pojawia się tu samo. Kolumna „Bramka” mówi, czy polecenie prosi o potwierdzenie i czy jego efekt można cofnąć; kolumna „Role” mówi, które typy kont znajdą je w swoim katalogu. Plakietki oznaczają polecenia wymagające klucza na poziomie manager, polecenia przyjmujące plik oraz te, które działają tylko z lg.
Nazwa API (list_loads) jest zamrożona i nie zmieni się; to jej używasz w wywołaniach HTTP. Tożsamość CLI (loads list) podlega polityce wersjonowania: po ogłoszeniu zmienia się tylko wraz z podniesieniem wersji i oknem migracji, w trakcie którego katalog serwuje starą parę jako alias. Opisy tutaj pochodzą z własnego rekordu każdego polecenia i są skrócone — pełny tekst, typy parametrów i wartości enum znajdziesz w endpoincie katalogu albo po uruchomieniu lg help . Polecenia dostępne tylko dla afiliantów nie są tu wymienione; konto afilianta widzi je we własnym katalogu.
lg account-settings get — Read the account settings (Settings → Account): the company display name (and legal name, read-only), the signed-in user's own name and e-mail (e-mail is read-only here), the saved load code prefix and how the company… (odczyt · — · nadawca · API: get_account_settings) [klucz manager]
lg account-settings update — Change account settings (Settings → Account): company_name (the company's display name, company-wide), first_name / last_name (the signed-in user's own name — when only one is given the other part is kept),… (zapis · potwierdzenie · nadawca · API: update_account_settings) [klucz manager]
lg accounting-settings get — Read the company's accounting and invoicing settings and say whether they are set up (muhasebe ayarları, fatura ayarları, e-fatura / e-invoice profile, KDV / VAT tax regime, fatura numaralandırma serisi / invoice… (odczyt · — · wszystkie · API: get_accounting_settings)
lg accounting-settings set-status — Turn the company's accounting module on or off (muhasebe modülünü aç/kapa). (zapis · potwierdzenie · wszystkie · API: set_accounting_module)
lg accounting-settings update — Update the company's accounting/invoicing settings (muhasebe ve fatura ayarlarını değiştir): legal name, default currency, provider (local/parasut), country, tax regime (KDV/VAT/GST/none), default invoice line… (zapis · potwierdzenie · wszystkie · API: update_accounting_settings)
lg addresses list — Loading and delivery addresses already used on this company's previous loads (newest first): address_id, name, street, city and country. query filters by name, street or city. limit 1-50 (default 20). (odczyt · — · wszystkie · API: list_worked_addresses)
lg addresses search — Find a place for a route plan stop: the company's own address book first, then a geocoder (counted against the daily routing allowance) when the book has fewer than 3 hits. (odczyt · — · przewoźnik · API: lookup_address)
lg ai-settings get — Read our company's AI switches (Settings → AI), e.g. ai_file_classify ("AI document analysis"): whether files posted into our load chats are read by AI, sorted into document types and split into company documents, or… (odczyt · — · nadawca · API: get_ai_settings) [klucz manager]
lg ai-settings update — Turn our company's AI switches on or off (Settings → AI) — e.g. "stop AI from analysing the files in our load chats" → settings=[{"slug":"ai_file_classify","enabled":false}]. settings is a list of {slug, enabled}; slugs… (zapis · potwierdzenie · nadawca · API: update_ai_settings) [klucz manager]
lg announcements list — Show the system announcements Logistivo sent to this user (new features, maintenance, policy changes) — newest first. (odczyt · — · wszystkie · API: list_announcements)
lg announcements mark-read — Mark system announcements as read for this user. (zapis · — · wszystkie · API: mark_announcements_read)
lg attachments get — Read a file the user attached to THIS conversation (listed in the user message as [Attachments] with their attachment_uuid). (odczyt · — · wszystkie · API: read_attachment) [przyjmuje plik: attachment_uuid]
lg background-jobs get — Check a background job that another command queued and returned a job_id for (document consistency re-analysis, file classification, tariff inquiry, tariff invoice reading, receipt pack…): status pending / running /… (odczyt · — · wszystkie · API: get_background_job)
lg bank-accounts create — Add one of YOUR OWN company bank accounts to the account book (the accounts you get paid into). (zapis · potwierdzenie + nieodwracalne · wszystkie · API: create_company_bank_account) [klucz manager]
lg bank-accounts delete — Delete one of OUR OWN company bank accounts (for example a closed account). (zapis · potwierdzenie + nieodwracalne · wszystkie · API: delete_company_bank_account) [klucz manager]
lg bank-accounts extract — Read a supplier's bank accounts (IBAN, bank, holder, currency) from one of ITS invoices and save them on that business contact. (zapis · potwierdzenie + nieodwracalne · wszystkie · API: extract_supplier_bank_accounts) [przyjmuje plik: attachment_uuid]
lg bank-accounts list — List bank accounts. (odczyt · — · wszystkie · API: list_bank_accounts)
lg bank-accounts preview — Check an IBAN without saving anything: is it valid (country, length, checksum) and which bank it belongs to (detected offline from the bank code where known). (odczyt · — · wszystkie · API: preview_bank_account_iban)
lg bank-accounts set-default — Make one of OUR OWN bank accounts the default — the IBAN printed on our invoices and e-invoices. (zapis · potwierdzenie + nieodwracalne · wszystkie · API: set_default_company_bank_account) [klucz manager]
lg bank-accounts set-status — Confirm or reject a bank account that was read from a document by AI or written by an integration — your own account or a business contact's account (find the ones waiting with list_bank_accounts… (zapis · potwierdzenie + nieodwracalne · wszystkie · API: decide_bank_account_verification) [klucz manager]
lg bank-accounts update — Update one of OUR OWN company bank accounts (the accounts customers pay us into): IBAN, bank, account holder, branch code, account number or currency. (zapis · potwierdzenie + nieodwracalne · wszystkie · API: update_company_bank_account) [klucz manager]
lg banks list — List the banks of Turkey with their bank_id and SWIFT/BIC code — the bank_id that create_company_bank_account and update_company_bank_account need. (odczyt · — · wszystkie · API: list_banks)
lg bids accept — Accept a carrier's bid on one of this company's demands. (zapis · potwierdzenie + nieodwracalne · nadawca · API: accept_demand_bid)
lg bids calculate — Before bidding: what this carrier would earn and how many credits a bid would cost if the customer accepts it. (odczyt · — · przewoźnik · API: calculate_bid_earnings)
lg bids cancel — Withdraw (geri çek) one of THIS carrier company's PENDING bids. (zapis · potwierdzenie + nieodwracalne · przewoźnik · API: cancel_demand_bid)
lg bids create — Submit a bid (teklif ver) on an open demand. amount_per_vehicle is the freight PER VEHICLE, not the total. (zapis · potwierdzenie + nieodwracalne · przewoźnik · API: create_demand_bid)
lg bids get — Detail of ONE bid this carrier company submitted: demand, status (pending / accepted / revised / cancelled / price_too_high), price per vehicle and total, currency, vehicle count, customs included or customs price,… (odczyt · — · przewoźnik · API: get_my_demand_bid)
lg bids list — List the bids (teklif) THIS carrier company has submitted, newest first, with their outcome. (odczyt · — · przewoźnik · API: list_my_bids)
lg bids revise — Revise this carrier's own PENDING bid on a demand: the old bid is marked revised and a NEW bid replaces it (it gets a new bid code). (zapis · potwierdzenie + nieodwracalne · przewoźnik · API: revise_demand_bid)
lg carbon-reports calculate — Calculate the CO2 emission of an EXISTING load (load_code: weight and route from the load, including its Ro-Ro leg) OR of a route you describe (transport_mode road|roro + weight_kg + departure_address + arrival_address,… (odczyt · — · wszystkie · API: calculate_load_carbon_emission)
lg carbon-reports download — Export ALL of the company's saved CO2 emission reports to one Excel file (one row per report: date, route, mode, weight, distance, emission, factor, method) and return a short-lived download link. (odczyt · — · wszystkie · API: export_carbon_emission_reports)
lg carbon-reports generate — Produce the signed CO2 emission report (PDF, with QR code) for a load OR for a route, save it to the company's report list and return a download link. (zapis · potwierdzenie + nieodwracalne · wszystkie · API: generate_carbon_emission_report)
lg carbon-reports get — Read one CO2 emission report in full: total emission in kg, transport mode, weight, distance, emission factor, calculation method and source, the departure/arrival addresses, the leg breakdown for multi-modal routes… (odczyt · — · wszystkie · API: get_carbon_emission_report)
lg carbon-reports list — List the CO2 emission reports this company has generated (newest first): report number, file name, who created it and when. (odczyt · — · wszystkie · API: list_carbon_emission_reports)
lg carrier-routes get — This carrier's route definitions (Rota Yönetimi): the countries served — always ↔ Türkiye in both directions — and the vehicle types and load types operated, with ids and names. (odczyt · — · przewoźnik · API: get_carrier_routes)
lg carrier-routes set — REPLACE this carrier's route definitions (Rota Yönetimi) with the given FULL sets: countries served (each to/from Türkiye, both directions), vehicle types and load types. (zapis · potwierdzenie · przewoźnik · API: set_carrier_routes) [klucz manager]
lg chart-of-accounts list — List the chart of accounts available to this company (Turkish uniform chart: 100 Kasa, 102 Bankalar, 120 Alıcılar, 320 Satıcılar, 391 Hesaplanan KDV, 600/601 Satışlar…), optionally filtered by code/name text or type. (odczyt · — · wszystkie · API: list_chart_of_accounts)
lg checks assign-invoices — Allocate a pending, field-confirmed cheque to one or more open LOCAL invoices of the same contact and currency: in = sales invoices (collection), out = purchase invoices (payment). (zapis · potwierdzenie + nieodwracalne · wszystkie · API: attach_check_to_invoices) [klucz manager]
lg checks bounce — Record that a cheque BOUNCED (came back unpaid). (zapis · potwierdzenie + nieodwracalne · wszystkie · API: mark_check_bounced)
lg checks cancel — CANCEL a pending cheque (e.g. registered by mistake, returned before use): no journal entry is written and any invoice reservation is released. (zapis · potwierdzenie + nieodwracalne · wszystkie · API: cancel_settlement_check) [klucz manager]
lg checks collect — Record that a cheque was COLLECTED (money reached the bank for an incoming cheque, or left the bank for an outgoing one) on its due date. (zapis · potwierdzenie + nieodwracalne · wszystkie · API: mark_check_collected)
lg checks create — Register a cheque in the cheque portfolio. (zapis · potwierdzenie · wszystkie · API: create_settlement_check) [klucz manager] [przyjmuje plik: front_attachment_uuid, back_attachment_uuid]
lg checks get — Read one cheque in full: its identity (number, serial, bank and branch, drawer with tax number, IBAN), the face amount and currency, issue and due dates, the counterparty, the status with every timestamp (executed,… (odczyt · — · wszystkie · API: get_settlement_check)
lg checks list — List the cheque portfolio of this company: cheque number, direction (in = received from a customer, out = given to a supplier), drawer and bank, face amount with its currency, issue and DUE date, the counterparty… (odczyt · — · wszystkie · API: list_settlement_checks)
lg checks remove-invoices — Release a pending cheque's invoice allocation: the reservations are removed (invoices become payable again) and the cheque goes back to the unallocated pending cheques. (zapis · potwierdzenie · wszystkie · API: detach_check_from_invoices) [klucz manager]
lg checks run — EXECUTE a pending, allocated cheque against its invoices: the reservations become payments (the invoice balances close), and the notes receivable (121, received cheque) or notes payable (321, given cheque) journal… (zapis · potwierdzenie + nieodwracalne · wszystkie · API: execute_settlement_check) [klucz manager]
lg checks update — Correct a pending cheque's fields and CONFIRM them — the human sign-off on what AI read from the photo (or on a manual entry). (zapis · potwierdzenie · wszystkie · API: update_settlement_check) [klucz manager]
lg companies add-role — Add a role to this company (firmaya rol ekle): customer (shipper), carrier, customs (customs broker) or affiliate. (zapis · potwierdzenie + nieodwracalne · wszystkie · API: add_company_role) [klucz manager]
lg companies delete-logo — Remove this company's logo (firma logosu) from the branded login portal, documents and the panel. (zapis · potwierdzenie + nieodwracalne · wszystkie · API: delete_company_logo) [klucz manager]
lg companies get — This company's own profile (firma profili): legal name, tax number and tax office, address and postal code, city/country, payment term (vade), the company roles it has (customer/carrier/customs/affiliate) and the roles… (odczyt · — · wszystkie · API: get_company_profile)
lg companies invite — Invite a company that is NOT on Logistivo yet by e-mail (e.g. a carrier we want to give a load to). (zapis · potwierdzenie + nieodwracalne · wszystkie · API: invite_company_to_platform)
lg companies list — Logistivo platform companies this company has already worked with on loads (shared load chats), by company_type: customer (shippers), carrier or customs (customs brokers). (odczyt · — · wszystkie · API: list_platform_companies)
lg companies search — Check whether a company is on Logistivo — by EXACTLY ONE of: tax_number (exact VKN / tax id), vat_number (exact EU/UK VAT number) or email (any e-mail of that company, matched by its domain; then company_type is… (odczyt · — · wszystkie · API: search_platform_companies)
lg companies set-brand-colors — Set the two colours of this company's branded login portal (markalı giriş portalı, /p//login) — primary_color and secondary_color as #RRGGBB hex. (zapis · potwierdzenie · przewoźnik, agencja celna · API: set_company_brand_colors) [klucz manager]
lg companies set-logo — Make an uploaded image this company's logo (firma logosu) — shown on the branded login portal, documents and the panel. attachment_uuid is a JPEG or PNG image (max 8 MB) uploaded to this conversation or with `lg upload`. (zapis · potwierdzenie + nieodwracalne · wszystkie · API: set_company_logo) [klucz manager] [przyjmuje plik: attachment_uuid]
lg companies update — Update this company's profile (firma profili) — send ONLY the fields that change: legal_name (ticaret unvanı), tax_number (VKN / VAT id), tax_branch (vergi dairesi), address_street, postal_code, city_id, country_code… (zapis · potwierdzenie · wszystkie · API: update_company_profile) [klucz manager]
lg company-documents create — File a document the user attached (in this chat, or uploaded to the command surface) as one of the company's own documents (firma evrakı yükle): tax certificate (vergi levhası), signature circulars (imza sirküleri),… (zapis · potwierdzenie · wszystkie · API: upload_company_document) [przyjmuje plik: attachment_uuid]
lg company-documents delete — Remove one of the company's own documents (tax certificate, signature circular, trade registry gazette, permits…) from its document list — e.g. a wrong or outdated upload. document_id is the one shown by… (zapis · potwierdzenie + nieodwracalne · wszystkie · API: delete_company_document)
lg company-documents list — List this company's own filed documents (tax certificate, signature circulars, trade registry gazette, contracts, TIO/L2 permits, files uploaded to chats…) with their type, number, validity date and verification status. (odczyt · — · wszystkie · API: list_company_documents)
lg company-documents list-missing — Which company documents (tax certificate, signature circulars, trade registry gazette, TIO/L2/C2 permits …) this company is REQUIRED to have for its company type and country, which of them are on file and verified, and… (odczyt · — · wszystkie · API: list_missing_company_documents)
lg company-domains create — Add an e-mail domain to our company (e.g. firma.com.tr) and e-mail a 6-digit verification code to a mailbox ON that domain. (zapis · potwierdzenie + nieodwracalne · wszystkie · API: create_company_domain) [klucz manager]
lg company-domains delete — Remove one of our UNVERIFIED company domains (e.g. added by mistake). (zapis · potwierdzenie + nieodwracalne · wszystkie · API: delete_company_domain) [klucz manager]
lg company-domains list — List our company's e-mail domains (Company settings → Domains): each row has company_domain_id, domain, verified (true once the 6-digit code was entered) and, for unverified ones, the mailbox the last code was sent to. (odczyt · — · wszystkie · API: list_company_domains)
lg company-domains resend — E-mail a NEW 6-digit verification code for one of our unverified company domains (the previous code stops working). (zapis · potwierdzenie + nieodwracalne · wszystkie · API: resend_company_domain_code) [klucz manager]
lg company-domains verify — Verify one of our unverified company domains with the 6-digit code that was e-mailed to the mailbox on that domain. (zapis · potwierdzenie + nieodwracalne · wszystkie · API: verify_company_domain) [klucz manager]
lg company-relationships accept — Accept a connection proposal another company sent us (relationship_id from list_company_relationships direction=incoming). (zapis · potwierdzenie + nieodwracalne · wszystkie · API: accept_company_relationship) [klucz manager]
lg company-relationships create — Send a connection proposal to link one of our business contacts with its company on the Logistivo platform (company_id from search_platform_companies). (zapis · potwierdzenie + nieodwracalne · wszystkie · API: create_company_relationship) [klucz manager]
lg company-relationships list — List our company connections on the platform (direction=outgoing, default: the connections in our directory, with status and roles such as carrier/customs_broker/supplier) or the connection proposals other companies… (odczyt · — · wszystkie · API: list_company_relationships)
lg company-relationships reject — Reject a connection proposal another company sent us (relationship_id from list_company_relationships direction=incoming). (zapis · potwierdzenie + nieodwracalne · wszystkie · API: reject_company_relationship) [klucz manager]
lg company-relationships revoke — End a company connection we are a party of (either side may end it), or withdraw a pending proposal. (zapis · potwierdzenie + nieodwracalne · wszystkie · API: revoke_company_relationship) [klucz manager]
lg contacts add-address — Add an address to a business contact (e.g. a warehouse or branch): a label, the full street address and the country (ISO-2 code); postal code optional. (zapis · potwierdzenie · wszystkie · API: add_business_contact_address)
lg contacts add-bank-account — Add a bank account (IBAN) to a business contact so it can be used on payment instructions and invoices. (zapis · potwierdzenie + nieodwracalne · wszystkie · API: add_business_contact_bank_account)
lg contacts add-person — Add a person (yetkili kişi) to a business contact: first name, last name and e-mail are required; phone, phone country code, job title and a note are optional. (zapis · potwierdzenie · wszystkie · API: add_business_contact_person)
lg contacts archive — Archive a business contact (cariyi arşivle): it disappears from lists and pickers and becomes read-only, but nothing is deleted — invoices, loads and bank accounts stay linked, and restore_business_contact brings it… (zapis · potwierdzenie · wszystkie · API: archive_business_contact)
lg contacts create — Create a new business contact (cari) in the company directory. (zapis · potwierdzenie · wszystkie · API: create_business_contact)
lg contacts delete-address — Delete one of a business contact's addresses. (zapis · potwierdzenie + nieodwracalne · wszystkie · API: delete_business_contact_address)
lg contacts delete-bank-account — Delete one of a business contact's bank accounts (for example an old or wrong IBAN). (zapis · potwierdzenie + nieodwracalne · wszystkie · API: delete_business_contact_bank_account)
lg contacts delete-person — Delete a person from a business contact, together with that person's notification preferences. (zapis · potwierdzenie + nieodwracalne · wszystkie · API: delete_business_contact_person)
lg contacts extract — Read a business card, letterhead or invoice header (image or PDF) and return the company details on it — legal name, tax number and office, VAT number, e-mail, phone, IBAN (checksum-checked, bank detected), address,… (odczyt · — · wszystkie · API: extract_business_contact_from_image) [przyjmuje plik: attachment_uuid]
lg contacts extract-text — Read pasted text (Excel/CSV rows, e-mail signatures, a typed list) and return up to 100 draft records of ONE kind: companies, persons, addresses or bank_accounts. (odczyt · — · wszystkie · API: extract_business_contacts_from_text)
lg contacts get — Read one business contact in full (identity, tax data, address, e-mail/phone, bank accounts, platform link) together with its account summary: ledger balance (positive = they owe us), open receivables and open payables. (odczyt · — · wszystkie · API: get_business_contact)
lg contacts invite — Invite a business contact to join Logistivo by e-mail. (zapis · potwierdzenie + nieodwracalne · wszystkie · API: invite_business_contact)
lg contacts list — List the company's business contacts (customers, carriers, suppliers, consignees) with optional text search over name, legal name and tax number. (odczyt · — · wszystkie · API: list_business_contacts)
lg contacts list-addresses — List the saved addresses of one business contact (label, street address, postal code, country) with address_id, needed by update/delete. (odczyt · — · wszystkie · API: list_business_contact_addresses)
lg contacts list-person-notifications — Show which load notifications a contact person receives and on which channel (e-mail, push, SMS), plus the notification types that can be chosen with their allowed channels — use those slugs with… (odczyt · — · wszystkie · API: list_business_contact_person_notifications)
lg contacts list-persons — List the people (yetkili kişiler) saved on one business contact: name, e-mail, phone, job title, note, and which load notifications each one receives. (odczyt · — · wszystkie · API: list_business_contact_persons)
lg contacts list-routes — Show which countries a business contact that is linked to a carrier on the platform serves: its declared route pairs (from-country → to-country) and the distinct country list. (odczyt · — · wszystkie · API: list_business_contact_routes)
lg contacts remove-company-link — Remove the link between a business contact and its company on the Logistivo platform. (zapis · potwierdzenie + nieodwracalne · wszystkie · API: unlink_business_contact_company) [klucz manager]
lg contacts restore — Bring an archived business contact back (cariyi arşivden geri al): it returns to lists and pickers and can be edited again. (zapis · potwierdzenie · wszystkie · API: restore_business_contact)
lg contacts search — Resolve a business contact (customer/partner/recipient) by name, legal name or tax number to its contact_id. (odczyt · — · wszystkie · API: lookup_business_contact)
lg contacts set-default-bank-account — Make one of a business contact's bank accounts its DEFAULT account — the one pre-selected when you pay this contact. (zapis · potwierdzenie + nieodwracalne · wszystkie · API: set_default_business_contact_bank_account)
lg contacts set-person-notifications — Turn load notifications on or off for a contact person, per notification type and channel (e-mail, push, SMS). (zapis · potwierdzenie · wszystkie · API: set_business_contact_person_notifications)
lg contacts update — Update fields of an existing business contact. (zapis · potwierdzenie · wszystkie · API: update_business_contact)
lg contacts update-address — Correct one of a business contact's addresses. (zapis · potwierdzenie · wszystkie · API: update_business_contact_address)
lg contacts update-bank-account — Correct one of a business contact's bank accounts: IBAN, account holder, bank name, BIC/SWIFT, currency, label, account type, branch code or account number. (zapis · potwierdzenie + nieodwracalne · wszystkie · API: update_business_contact_bank_account)
lg contacts update-person — Correct a contact person's details. (zapis · potwierdzenie · wszystkie · API: update_business_contact_person)
lg containers calculate — Decode and validate a container number (konteyner numarası) per ISO 6346 — owner code, category, serial, check digit (is it correct, and what it should be) and, when known, the operating line with its public tracking… (odczyt · — · wszystkie · API: decode_container_number)
lg conversations add-file — Post a file into an OFFER (demand-bid) chat as this user — e.g. a price sheet or a vehicle photo for the other company. conversation_code comes from list_conversations (rows whose subject is demand_bid). (zapis · potwierdzenie + nieodwracalne · wszystkie · API: send_conversation_file) [przyjmuje plik: attachment_uuid]
lg conversations add-invitation — Invite a person from ANOTHER company into a load chat by e-mail (sohbete dışarıdan davet). (zapis · potwierdzenie + nieodwracalne · wszystkie · API: invite_to_conversation)
lg conversations add-message — Post a message into a load/bid conversation AS THIS USER (not as an assistant). (zapis · potwierdzenie + nieodwracalne · wszystkie · API: send_conversation_message)
lg conversations add-participants — Add people to a load/demand conversation (sohbete kişi ekle) — "Ayşe'yi FKZ8515 sohbetine ekle". (zapis · potwierdzenie · wszystkie · API: add_conversation_participants)
lg conversations create — Open the freight chat with a carrier that bid on one of OUR demands (navlun sohbetini başlat) — bid_code comes from get_demand / the bids of a demand. (zapis · potwierdzenie + nieodwracalne · nadawca · API: start_bid_conversation)
lg conversations list — List the chat conversations this user is a member of (load chats, bid chats and private carrier channels), newest activity first. (odczyt · — · wszystkie · API: list_conversations)
lg conversations list-files — List the files shared in a load/bid chat, newest first: document type, title, file name, who posted it and when. (odczyt · — · wszystkie · API: list_conversation_files)
lg conversations list-invitations — Show the e-mail invitations to a load chat that have not been accepted yet: who was invited, by whom and when, and what they will be allowed to see. (odczyt · — · wszystkie · API: list_conversation_invitations)
lg conversations list-messages — Read the most recent messages of one conversation — give it a load code (e.g. (odczyt · — · wszystkie · API: list_conversation_messages)
lg conversations list-participants — Who is in this conversation — name and company of every participant. (odczyt · — · wszystkie · API: list_conversation_participants)
lg conversations mark-read — Mark one conversation as read for this user (clears its unread badge), or with all=true every load, bid and direct-message chat at once. (zapis · — · wszystkie · API: mark_conversation_read)
lg conversations remove-message — Delete one of THIS user's own messages from a conversation (message_id from list_conversation_messages with `mine` true). (zapis · potwierdzenie + nieodwracalne · wszystkie · API: delete_conversation_message)
lg conversations remove-participant — Remove someone from a load/bid chat, cancel a pending e-mail invitation to it, or leave it yourself (give your own user_id). (zapis · potwierdzenie + nieodwracalne · wszystkie · API: remove_conversation_participant)
lg conversations update-message — Edit one of THIS user's own messages in a conversation (message_id comes from list_conversation_messages, where `mine` is true). (zapis · potwierdzenie · wszystkie · API: update_conversation_message)
lg countries search — Resolve a country by name (Turkish, English or the local/native name) or ISO 3166-1 alpha-2 code to its country_id, for the sending/receiving country on a load. (odczyt · — · wszystkie · API: lookup_country)
lg currencies list — The currencies the platform knows (currency_id, code, name, symbol) with the latest exchange rate against the Turkish lira (buying / selling, rate date). currency_id is what forms such as bank accounts take. (odczyt · — · wszystkie · API: list_currencies)
lg custom-reports generate — Custom report counted server-side over ALL records of a dataset: filter, group (dates by month etc.), count/sum/avg/min/max (money per currency) or list rows; format=xlsx|pdf|csv gives a file. (odczyt · — · wszystkie · API: build_report)
lg customs-companies list — Customs broker companies this customer can assign when accepting a bid (accept_demand_bid customs_company_id): the Logistivo customs companies you already work with in your chats. (odczyt · — · nadawca · API: list_customs_companies)
lg customs-locations search — Search customs offices / customs locations (gümrük müdürlüğü, gümrük lokasyonu) by name or street — for the exit and destination customs of a load. (odczyt · — · wszystkie · API: lookup_customs_location)
lg demand-bid-reports get — Bid report across ALL demands at once, counted server-side: for a customer the bids RECEIVED on its demands, for a carrier the bids it PLACED. (odczyt · — · nadawca, przewoźnik · API: get_demand_bid_report)
lg demand-reports get — Demand report (Talep Raporu) with optional filters: status, demanding company, transport mode, pickup / delivery countries, loading-date window. (odczyt · — · nadawca, przewoźnik · API: get_demand_report)
lg demand-settings get — This carrier company's demand settings: whether demands opened by forwarder companies reach the company (accept_demands_from_forwarders). (odczyt · — · przewoźnik · API: get_demand_settings) [klucz manager]
lg demand-settings update — Change this carrier company's demand settings. accept_demands_from_forwarders=false stops demands opened by forwarder companies from reaching the company (only shippers' demands remain); true lets them in again. (zapis · potwierdzenie · przewoźnik · API: update_demand_settings) [klucz manager]
lg demand-targets search — Resolve a pickup/delivery location for a demand to a target token ("5-" = district/postal area, "10-" = seaport address). (odczyt · — · nadawca · API: lookup_demand_target)
lg demands create — Open a freight demand (talep) so carriers can bid. (zapis · potwierdzenie + nieodwracalne · nadawca · API: create_demand) [przyjmuje plik: attachment_uuids]
lg demands download — File for ONE demand owned by this company. export_type=details_pdf: the demand's detail sheet (route, dates, cargo, pallets) as PDF. export_type=sales_xlsx: the sales report workbook — demand information, every bid… (odczyt · — · nadawca · API: download_demand_export)
lg demands extract — Read a freight request text (an e-mail body, a note, a voice transcript) and return the demand fields it contains in the demand wizard's shape: transport mode, countries, ports, locations, dates, load type, vehicle… (odczyt · — · nadawca · API: extract_demand_from_text)
lg demands get — Detail of ONE freight demand. (odczyt · — · nadawca, przewoźnik · API: get_demand)
lg demands list — List freight demands (talep) this carrier is allowed to bid on, newest first. (odczyt · — · przewoźnik · API: list_open_demands)
lg demands list-own — List the freight demands (talep) OWNED by this customer company, newest first, with route, dates, vehicles, status and bid count. (odczyt · — · nadawca · API: list_demands)
lg demands options — Reference lists needed to build a freight demand (talep) with create_demand: vehicle types (id, name, transport mode), payment maturity options (id + days; company_default_maturity_option_id is what the company normally… (odczyt · — · nadawca · API: get_demand_form_options)
lg demands set-status — Close (make passive) one of this company's ACTIVE demands so carriers stop bidding. (zapis · potwierdzenie + nieodwracalne · nadawca · API: close_demand)
lg demands update — Edit one of this company's ACTIVE demands that has NO bids yet (a demand with bids or a closed one cannot be edited). (zapis · potwierdzenie · nadawca · API: update_demand) [przyjmuje plik: attachment_uuids]
lg direct-conversations add-message — Send a direct message AS THIS USER (never as an assistant) — either into an existing chat (conversation_code from list_direct_conversations) or to one person (to_user_id from list_direct_message_contacts; their private… (zapis · potwierdzenie + nieodwracalne · wszystkie · API: send_direct_message)
lg direct-conversations create — Start a direct chat. (zapis · potwierdzenie + nieodwracalne · wszystkie · API: create_direct_conversation)
lg direct-conversations download — Produce the whole direct-message or group chat as a PDF (the same file as the panel's export button: participants and every message with date and time) and return a short-lived download link. (odczyt · — · wszystkie · API: export_direct_conversation_pdf)
lg direct-conversations list — List this user's direct-message (DM) chats and group chats — person-to-person messaging, separate from load/bid chats (those are list_conversations). (odczyt · — · wszystkie · API: list_direct_conversations)
lg direct-conversations list-contacts — List the people this user can direct-message: their own teammates plus people they share a load/bid chat with. (odczyt · — · wszystkie · API: list_direct_message_contacts)
lg direct-conversations list-messages — Read the latest messages of one direct-message or group chat (conversation_code from list_direct_conversations), oldest→newest, with who wrote them. `mine: true` marks this user's own messages; only those, and only… (odczyt · — · wszystkie · API: list_direct_conversation_messages)
lg direct-conversations mark-read — Mark one direct-message or group chat as read for this user (clears its unread badge). (zapis · — · wszystkie · API: mark_direct_conversation_read)
lg direct-conversations remove-message — Delete one of THIS user's own direct messages (message_id from list_direct_conversation_messages, mine and editable true), only within 5 minutes of sending. (zapis · potwierdzenie + nieodwracalne · wszystkie · API: delete_direct_message)
lg direct-conversations update — Rename a GROUP direct chat (private one-to-one chats have no title). (zapis · potwierdzenie · wszystkie · API: rename_direct_conversation)
lg direct-conversations update-message — Edit one of THIS user's own direct messages (message_id from list_direct_conversation_messages, where mine and editable are true). (zapis · potwierdzenie · wszystkie · API: update_direct_message)
lg document-checks run — Cross-check documents the user attached to THIS conversation against each other and report the discrepancies: mismatched party names, quantities, weights, amounts, dates, container or reference numbers between an… (zapis · — · wszystkie · API: check_document_compliance) [przyjmuje plik: attachment_uuids]
lg document-types list — List the platform's document types (slug and name) — the values document_type_slug accepts in upload_company_document, add_driver_document and the vehicle document commands. (odczyt · — · wszystkie · API: list_document_types)
lg documents download — Get a short-lived (15 minute) download/preview link for one document by its document_id (from list_load_documents or list_company_documents). (odczyt · — · wszystkie · API: get_document_link)
lg drive-rest-estimates get — One driver's GPS-ESTIMATED driving/rest status and driving time left under EU 561/2006 / AETR: current activity and since when, driving_left_today_s = the legal driving time left today under the daily, weekly (56 h) AND… (odczyt · — · przewoźnik · API: get_driver_drive_rest_estimate)
lg drive-rest-estimates list — Fleet overview of the GPS-ESTIMATED driving/rest status and driving time left (EU 561/2006 / AETR): per driver the current activity, driving_left_today_s = the legal driving time left today under the daily, weekly (56… (odczyt · — · przewoźnik · API: list_driver_drive_rest_estimates)
lg driver-accounts get — Answer "how much do we owe this driver / how much does the driver owe us". (odczyt · — · nadawca, przewoźnik · API: get_driver_account_summary)
lg driver-accounts list-candidates — Before opening or filling a driver settlement statement: which of ONE driver's receipts and advances can go on it, and why the others cannot. (odczyt · — · nadawca, przewoźnik · API: list_driver_account_candidates)
lg driver-advances cancel — Cancel (void) a recorded driver money movement that did not really happen or was entered with the wrong amount. (zapis · potwierdzenie + nieodwracalne · nadawca, przewoźnik · API: cancel_driver_advance)
lg driver-advances create — Record a money movement between the company and a driver: an advance handed to the driver, money the driver gave back, a closing payout, or a carry-forward opening balance. (zapis · potwierdzenie · nadawca, przewoźnik · API: create_driver_advance) [przyjmuje plik: attachment_uuid]
lg driver-advances delete — Delete a driver money movement that was entered by mistake (duplicate, wrong driver). (zapis · potwierdzenie + nieodwracalne · nadawca, przewoźnik · API: delete_driver_advance)
lg driver-advances list — List the money movements between the company and its drivers: cash advances handed out, money paid back by the driver, closing payouts and carry-forward opening balances. (odczyt · — · nadawca, przewoźnik · API: list_driver_advances)
lg driver-advances update — Correct the non-money details of a recorded driver money movement: its reference, note, or the load it belongs to. (zapis · potwierdzenie · nadawca, przewoźnik · API: update_driver_advance)
lg driver-availabilities create — Record that a driver is unavailable on some days — "Ali is on leave 14-20 November", "Mehmet rests at home next week", "Kemal is sick from today". (zapis · potwierdzenie · przewoźnik · API: create_driver_availability)
lg driver-availabilities delete — Delete ONE availability period (id from list_driver_availabilities) — the driver counts as available again on those days. (zapis · potwierdzenie + nieodwracalne · przewoźnik · API: delete_driver_availability)
lg driver-availabilities list — List drivers' leave, home-rest, sick and other unavailability periods (newest planning input), optionally for one driver and/or a date window. (odczyt · — · przewoźnik · API: list_driver_availabilities)
lg driver-availabilities update — Correct one availability period (id from list_driver_availabilities): kind, dates, Schengen presence or note. (zapis · potwierdzenie · przewoźnik · API: update_driver_availability)
lg driver-expense-settings get — Read this company's driver expense module settings: is the module switched on, which currency receipts and advances are converted into, whether receipts need approval (and above which amount), whether drivers may… (odczyt · — · nadawca, przewoźnik · API: get_driver_expense_settings)
lg driver-expense-settings update — Change this company's driver expense module settings — only the fields you pass change. (zapis · potwierdzenie · nadawca, przewoźnik · API: update_driver_expense_settings) [klucz manager]
lg driver-expenses create — File one or MANY expense receipts the user attached to this conversation (fuel, toll, ferry, parking, repair, meal…) into the driver expense ledger as pending expenses of ONE of this company's drivers. (zapis · potwierdzenie + nieodwracalne · nadawca, przewoźnik · API: process_receipt) [przyjmuje plik: attachment_uuid, attachment_uuids]
lg driver-expenses declare — Record a driver expense WITHOUT a receipt (fişsiz şoför harcaması) — "Mehmet dün 40 EUR otopark ödedi, fişi yok", "log 120 PLN toll for driver X". (zapis · potwierdzenie · nadawca, przewoźnik · API: create_driver_expense)
lg driver-expenses delete — Delete a driver expense entered by mistake (duplicate receipt, wrong driver, test entry). (zapis · potwierdzenie + nieodwracalne · nadawca, przewoźnik · API: delete_driver_expense)
lg driver-expenses download — Get the download link of a receipt pack that generate_driver_receipt_pack prepared in the background. (odczyt · — · nadawca, przewoźnik · API: download_driver_receipt_pack)
lg driver-expenses generate — Produce ONE PDF that contains the driver receipts of a selection — for a trip, a load, a driver statement or a date window — e.g. to hand to accounting or the customer. (odczyt · — · nadawca, przewoźnik · API: generate_driver_receipt_pack)
lg driver-expenses get — Read one driver expense (receipt) by its id: merchant, amount, currency, converted amount, category, payment channel, whether it is charged to the driver, and the approval status. (odczyt · — · nadawca, przewoźnik · API: get_driver_expense)
lg driver-expenses list — List driver expense receipts (fuel, toll, ferry, parking, food, repair…) with a converted total. (odczyt · — · nadawca, przewoźnik · API: list_driver_expenses)
lg driver-expenses list-loads — For ONE driver: which loads they carried and, per load, how many receipts there are, how many still await approval, how much is reimbursable to the driver, how much is company-billed (fuel card / DKV / UTA — never the… (odczyt · — · nadawca, przewoźnik · API: list_driver_expense_loads)
lg driver-expenses list-trips — For ONE driver: which trips (load groups) they drove and, per trip, the number of loads and the driver's OWN receipt figures (count, awaiting approval, reimbursable, company-billed fuel-card / DKV / UTA, still… (odczyt · — · nadawca, przewoźnik · API: list_driver_expense_trips)
lg driver-expenses review — Approve or reject ONE driver expense (receipt) from the chat, or send an already-decided one back to pending. status=approved means the company accepts the expense (an approved reimbursable receipt can then be counted… (zapis · potwierdzenie · nadawca, przewoźnik · API: review_driver_expense)
lg driver-expenses set-in-account — Count driver receipts INTO the driver's account (include=true, default) or take them OUT of it (include=false). (zapis · potwierdzenie · nadawca, przewoźnik · API: set_driver_expenses_in_account)
lg driver-expenses update — Correct a recorded driver expense (receipt or no-receipt): amount, currency, date, category, how it was paid, merchant, description or the load it belongs to — "the parking was 45 EUR not 40", "that fuel was paid with… (zapis · potwierdzenie · nadawca, przewoźnik · API: update_driver_expense)
lg driver-expenses update-conversion — Retry the currency conversion of ONE driver receipt whose exchange rate could not be resolved (it then sits outside every total and cannot go into a driver statement). (zapis · — · nadawca, przewoźnik · API: retry_driver_expense_conversion)
lg driver-schedules accept — Apply ONE schedule suggestion (suggestion_id from get_driver_schedule): the proposed driver is assigned to the load (or every consignment of the trip — consignments still held by another driver are taken over, and the… (zapis · potwierdzenie · przewoźnik · API: apply_driver_schedule_suggestion)
lg driver-schedules generate — Compute schedule suggestions for a 7-90 day window starting within 30 days: which driver should take each unassigned load, trip and route plan so that nobody runs out of Schengen days, leave is respected and vehicles do… (zapis · potwierdzenie · przewoźnik · API: generate_driver_schedule)
lg driver-schedules get — Read one schedule run (schedule_id from generate_driver_schedule / list_driver_schedules): summary (jobs covered, unassignable jobs and why, vehicle idle days before → after, lowest Schengen margin), the suggestions in… (odczyt · — · przewoźnik · API: get_driver_schedule)
lg driver-schedules list — List the company's schedule-suggestion runs, newest first: id (schedule_id), status (queued | running | completed | failed), the planned window, objective and whether the run is out of date (is_stale — planning inputs… (odczyt · — · przewoźnik · API: list_driver_schedules)
lg driver-schedules reject — Dismiss ONE open schedule suggestion (suggestion_id from get_driver_schedule) so it is no longer offered; nothing is assigned or changed elsewhere. (zapis · — · przewoźnik · API: dismiss_driver_schedule_suggestion)
lg driver-statements cancel — Cancel a statement that should not exist (opened by mistake, duplicated). (zapis · potwierdzenie + nieodwracalne · nadawca, przewoźnik · API: cancel_driver_account)
lg driver-statements create — Open a NEW draft settlement statement for a driver. (zapis · potwierdzenie · nadawca, przewoźnik · API: create_driver_account)
lg driver-statements download — Give a short-lived download link to the PDF statement of a FINALISED driver settlement statement — the document the driver sees and signs, with every line, the fuel-card block that is outside the driver maths, and the… (odczyt · — · nadawca, przewoźnik · API: download_driver_account_pdf)
lg driver-statements finalize — FINALISE a draft settlement statement — it freezes the document, makes it visible to the driver and (for settle_cash) writes the counter-entry into the advance ledger. (zapis · potwierdzenie + nieodwracalne · nadawca, przewoźnik · API: finalize_driver_account) [klucz manager]
lg driver-statements get — Read one driver settlement statement in full: its status and revision, the driver, the currency, every total (expenses, advances, repayments, receiptless declarations), the NET balance with the sentence that says which… (odczyt · — · nadawca, przewoźnik · API: get_driver_account)
lg driver-statements list — List the driver settlement statements (mutabakat belgesi) of this company: code, which driver, status (draft / finalized / cancelled), currency, the net balance and what it means, how many expense and advance lines it… (odczyt · — · nadawca, przewoźnik · API: list_driver_accounts)
lg driver-statements reopen — Reopen a FINALISED statement so it can be corrected (a late receipt arrived, a line was wrong). (zapis · potwierdzenie · nadawca, przewoźnik · API: reopen_driver_account) [klucz manager]
lg driver-statements update — Change the note printed on a DRAFT driver settlement statement (e.g. "September trips, fuel excluded"). (zapis · potwierdzenie · nadawca, przewoźnik · API: update_driver_account)
lg driver-statements update-lines — Attach receipts/advances to a DRAFT statement, or detach ones that should not be on it. (zapis · potwierdzenie · nadawca, przewoźnik · API: update_driver_account_lines)
lg driver-statuses list — Fleet command centre — every driver's live operational status in one list: last position and its AGE, signal health (streaming / delayed / stale / no_signal / permission_denied / app_missing), duty (on_trip / assigned /… (odczyt · — · nadawca, przewoźnik · API: list_fleet_driver_statuses)
lg drivers add-document — Record a driver paper — visa, passport, residence permit, driving licence, SRC certificate, psychotechnic certificate, travel health insurance — for ONE of this carrier's drivers, so its expiry is tracked. (zapis · potwierdzenie · przewoźnik · API: add_driver_document) [przyjmuje plik: attachment_uuid]
lg drivers archive — Archive (deactivate) a driver: their account is disabled, open mobile sessions are revoked and the login link stops working. (zapis · potwierdzenie + nieodwracalne · przewoźnik · API: archive_driver)
lg drivers calculate — Check whether ONE driver can take a job: Schengen 90/180 days left at the end of the trip (expected and worst case, counting the drive back out and the driver's later planned work), leave / home-rest / sick periods,… (odczyt · — · przewoźnik · API: check_driver_for_trip)
lg drivers create — Create a new driver account for this carrier company. (zapis · potwierdzenie · przewoźnik · API: create_driver)
lg drivers delete-document — Remove a driver paper from the driver's file. (zapis · potwierdzenie + nieodwracalne · przewoźnik · API: delete_driver_document)
lg drivers get — Full detail of ONE driver of this carrier: identity, archive state, mobile app state, last GPS position, assigned load codes, ALL driver documents (passport, visa, licence, SRC… with expiry and days_to_expiry) and the… (odczyt · — · przewoźnik · API: get_driver)
lg drivers list — List this carrier company's drivers with their status, current country, expiring/expired document counts, assigned load codes and vehicle plates. (odczyt · — · przewoźnik · API: list_drivers)
lg drivers list-candidates — Rank the company's drivers for a job — which drivers are available and can do it (Schengen days at trip end incl. the drive back, leave/home-rest, other jobs, estimated driving/rest readiness, distance to the start)… (odczyt · — · przewoźnik · API: list_trip_driver_candidates)
lg drivers list-documents — List ONE driver's documents (passport, visa, residence permit, licence, SRC, ADR, health insurance…) with document number, issuing country, valid_until, days_to_expiry, is_expired and AI extraction status. (odczyt · — · przewoźnik · API: list_driver_documents)
lg drivers list-locations — A driver's GPS trail — the raw position pings from the driver app in a time window, oldest to newest, with the first and last timestamps and the point count. (odczyt · — · przewoźnik · API: list_driver_locations)
lg drivers login-link — Produce the driver's 48-hour mobile app login link (sensitive credential). (zapis · potwierdzenie · przewoźnik · API: get_driver_login_link)
lg drivers request-location — Ask a driver's phone for a fresh position ("where is Ahmet right now — ping him"). (zapis · — · przewoźnik · API: request_driver_location)
lg drivers search — Resolve one of this company's drivers by name to its driver_id. (odczyt · — · przewoźnik · API: lookup_driver)
lg drivers update — Correct a driver's first/last name. (zapis · potwierdzenie · przewoźnik · API: update_driver)
lg drivers update-document — Correct a driver paper already on file — most often its expiry date (valid_until) after a renewal, but also the document number, the issuing country, the type or the note. (zapis · potwierdzenie · przewoźnik · API: update_driver_document)
lg drivers update-login-link — Generate a NEW 48-hour mobile login link for a driver and kill the old one (lost phone, expired or leaked link). (zapis · potwierdzenie + nieodwracalne · przewoźnik · API: refresh_driver_login_link)
lg equipment-damages create — Open a damage record on one of the company's own vehicles or trailers (dorse hasar kaydı aç) — "33ABC12 dorsesinin sol arka kapısında ezik var", "record a scratch on the rear bumper of the truck". (zapis · potwierdzenie · wszystkie · API: create_equipment_damage)
lg equipment-damages delete — Delete a damage record that was opened by mistake (a duplicate, the wrong vehicle). (zapis · potwierdzenie + nieodwracalne · wszystkie · API: delete_equipment_damage)
lg equipment-damages generate — Produce the equipment damage ledger as an Excel file (the same file as the panel's export button) and return a short-lived download link — e.g. "give me this year's open trailer damages as Excel". (odczyt · — · wszystkie · API: export_equipment_damages)
lg equipment-damages list — List the equipment/trailer damages recorded for this company: which vehicle, where on it (area and angle), damage type and severity, whether it is still open or repaired, the estimated and actual repair cost, who is… (odczyt · — · wszystkie · API: list_equipment_damages)
lg equipment-damages update — Update an existing damage record: mark it repaired (with repair date, cost and note), dismissed or disputed, change severity/type/area/description, set the estimated cost, or set/clear the responsible driver. (zapis · potwierdzenie · wszystkie · API: update_equipment_damage)
lg equipment-inspection-links create — Create a one-time link so a driver or agent who is NOT on the platform (port agent, another company's driver) can upload the hand-over photos of one of the company's trailers/vehicles from a phone, without an account. (zapis · potwierdzenie · wszystkie · API: create_equipment_inspection_link)
lg equipment-inspections create — Record an equipment hand-over inspection of one of the company's own trailers or vehicles on behalf of a driver or the office — "record the pickup inspection of trailer 34ABC12 with these 4 photos, driver Ali".… (zapis · potwierdzenie · wszystkie · API: create_equipment_inspection) [przyjmuje plik: photos[].attachment_uuid]
lg equipment-inspections delete — Delete an equipment inspection that was recorded by mistake (wrong vehicle, duplicate), together with its photos. (zapis · potwierdzenie + nieodwracalne · wszystkie · API: delete_equipment_inspection)
lg equipment-inspections get — Full detail of ONE equipment hand-over inspection: vehicle, event (pickup / dropoff / interim), who did it and where and when, the AI analysis status with its overall condition and summary, the damages that inspection… (odczyt · — · wszystkie · API: get_equipment_inspection)
lg equipment-inspections list — List the equipment hand-over inspections (teslim-tesellüm controls) of this company: which vehicle, the event type (hand-over, take-over, interim), when and where it happened, who performed it (driver or office user, or… (odczyt · — · wszystkie · API: list_equipment_inspections)
lg equipment-inspections run — Run the AI damage analysis again on the photos of one equipment inspection (for example after the analysis failed, or photos were added later). (zapis · potwierdzenie · wszystkie · API: reanalyze_equipment_inspection)
lg equipment-settings get — Read the company's equipment inspection settings: whether the module is on, at which hand-overs an inspection is required (pickup / dropoff), whether photos are required, the minimum photo count, which angles are… (odczyt · — · wszystkie · API: get_equipment_settings)
lg equipment-settings update — Change the company's equipment inspection settings — e.g. "turn on equipment inspection and require at least 4 photos with front, rear, left and right at pickup". (zapis · potwierdzenie · wszystkie · API: update_equipment_settings) [klucz manager]
lg equipment-timelines get — Who has one trailer/vehicle right now (custody: in custody of a driver since the last pickup, or released at the last dropoff), the inspections it went through (newest first) and its OPEN damages — in one read. (odczyt · — · wszystkie · API: get_equipment_timeline)
lg export-documents add-item — Append a line item to an export document. (zapis · — · wszystkie · API: add_export_document_item)
lg export-documents create — Create a new export document draft. (zapis · — · wszystkie · API: create_export_document_draft)
lg export-documents create-set — Create SEVERAL export document drafts (a set, e.g. commercial invoice + packing list) from ONE source in one go: the source is read once by AI and every chosen document is filled from it. (zapis · — · wszystkie · API: create_export_document_set) [przyjmuje plik: attachment_uuid]
lg export-documents delete — Delete one export document of this company (draft or generated). (zapis · potwierdzenie + nieodwracalne · wszystkie · API: delete_export_document)
lg export-documents duplicate — Copy an existing export document into a NEW draft of the same type (same parties, items and terms; no document number, not generated). (zapis · — · wszystkie · API: duplicate_export_document)
lg export-documents extract — Read a pasted order e-mail, offer or confirmation — or an Excel/CSV/TXT item list given as attachment_uuid — and fill an export document from it. (zapis · — · wszystkie · API: extract_export_document_from_text) [przyjmuje plik: attachment_uuid]
lg export-documents generate — Produce the final PDF of an export document AND return a short-lived signed download link for it, so the user gets the file straight from the chat. (zapis · potwierdzenie + nieodwracalne · wszystkie · API: generate_export_document)
lg export-documents generate-set — Generate several export documents as PDFs in one go and return a short-lived download link for each generated one. (zapis · potwierdzenie + nieodwracalne · wszystkie · API: generate_export_document_set)
lg export-documents get — Read one export document in full: every filled field as dot-paths, the line items with their 1-based positions, the server-computed totals and which required fields are still empty. (odczyt · — · wszystkie · API: get_export_document)
lg export-documents list — List the export documents of the current company (proforma invoice, commercial invoice, packing list, shipping instruction, delivery note, certificate/movement applications, exporter declaration, insurance request). (odczyt · — · wszystkie · API: list_export_documents)
lg export-documents options — List the export document types and the ready-made document sets with their credit cost. (odczyt · — · wszystkie · API: get_export_document_options)
lg export-documents preview — Before generating several export documents as PDFs, show what it would cost: which documents would spend a credit, which are free (already generated), the total, the remaining balance and the required fields still empty… (odczyt · — · wszystkie · API: plan_export_document_generation)
lg export-documents remove-item — Delete one line item by its 1-based position. (zapis · — · wszystkie · API: remove_export_document_item)
lg export-documents set — Set one or more fields on an export document draft. (zapis · — · wszystkie · API: set_export_document_fields)
lg export-documents update-item — Change columns of one existing line item, addressed by its 1-based position from get_export_document. (zapis · — · wszystkie · API: update_export_document_item)
lg finance calculate — Build a budget / financial forecast (bütçe tahmini, gelecek yıl bütçesi, nakit/ciro projeksiyonu) from the company's MEASURED history, month by month. (odczyt · — · wszystkie · API: generate_budget_forecast)
lg finance get — One call that returns the measured financial BASE for a period — the numbers a budget, a forecast, a business plan, a cash-flow projection or a board summary is built on, instead of chaining six separate reads. (odczyt · — · wszystkie · API: get_financial_snapshot)
lg fleet-documents list — List fleet documents that expire soon (or already expired): vehicle papers (insurance, inspection, permits) and — for carriers — driver papers (passport, visa, licence, SRC). (odczyt · — · nadawca, przewoźnik · API: list_expiring_documents)
lg freight-invoices archive — Archive (remove from the active list) a freight invoice YOUR company uploaded — e.g. a duplicate or the wrong file. (zapis · potwierdzenie + nieodwracalne · wszystkie · API: archive_freight_invoice)
lg freight-invoices create — Attach 1-20 freight invoices (navlun faturası) to a load. (zapis · potwierdzenie · wszystkie · API: upload_freight_invoices) [przyjmuje plik: attachment_uuids]
lg freight-invoices list — List the freight invoices (navlun faturaları) of a load that your company is a party to: who uploaded it, amount and currency, invoice date, the AI reading status, and which load parties it is shared with. (odczyt · — · wszystkie · API: list_freight_invoices)
lg freight-invoices set-visibility — Choose which load parties can see a freight invoice YOUR company uploaded — e.g. "share the invoice with the receiver too", "only we should see it". (zapis · potwierdzenie · wszystkie · API: set_freight_invoice_visibility)
lg freight-reports get — Freight (navlun) cost report over the loads this company can see: agreed freight totals per currency plus the EUR equivalent, freight-invoice totals, how many loads have NO freight recorded (listed by code), a breakdown… (odczyt · — · nadawca, przewoźnik · API: get_freight_cost_report)
lg fuel-cards create — Register a fuel card (DKV, UTA and the like) in the fleet card book, optionally tied to a driver or a vehicle. (zapis · potwierdzenie · nadawca, przewoźnik · API: create_fuel_card)
lg fuel-cards delete — Delete a fuel / toll card (DKV, UTA, Shell…) that was entered BY MISTAKE. (zapis · potwierdzenie + nieodwracalne · nadawca, przewoźnik · API: delete_fuel_card)
lg fuel-cards list — List the company's fuel and toll cards (DKV, UTA, Eurowag, E100, Shell, OMV, Aral, Petrol Ofisi, Opet…) with the last four digits, the driver or vehicle they are tied to, and whether they are active. (odczyt · — · nadawca, przewoźnik · API: list_fuel_cards)
lg fuel-cards update — Update a fuel card: move it to another driver or vehicle, change its label or note, or DEACTIVATE it (is_active false) when the card is cancelled. (zapis · potwierdzenie · nadawca, przewoźnik · API: update_fuel_card)
lg handoff-links generate — Get the logistivo.com link for work that deliberately stays in the browser: package_purchase (buy or upgrade a package; optional package_slug from list_packages and billing_period monthly|yearly pre-select it — the… (odczyt · — · wszystkie · API: get_browser_handoff_link)
lg import-duties get — Read the Turkish import duty table for one GTİP code: customs duty (İthalat Rejimi Kararı) and additional customs duty / İGV, with every country-group column, plus the statutory duty from the nomenclature. (odczyt · — · wszystkie · API: get_import_duty_rates)
lg integration-keys list — List the company's integration (API) keys: name, uuid, which teammate it acts as, scope (read/write) and allowed domains, access level (manager/employee), environment (live/sandbox), status (active/revoked/expired),… (odczyt · — · wszystkie · API: list_integration_keys) [klucz manager]
lg integration-keys revoke — Revoke one of the company's integration (API) keys by its uuid from list_integration_keys: the key stops working immediately and cannot be re-enabled (issue a new key instead). (zapis · potwierdzenie + nieodwracalne · wszystkie · API: revoke_integration_key) [klucz manager]
lg invitations create — Invite colleagues to this company by e-mail — one address in email, or up to 20 at once in emails (all-or-nothing: the seat limit and every address's domain are checked before anything is sent). (zapis · potwierdzenie + nieodwracalne · wszystkie · API: invite_teammate) [klucz manager]
lg invitations list — List teammate invitations of this company that are not completed yet (pending / e-mail verified / account created), with invitation_code, e-mail, role and expiry. (odczyt · — · wszystkie · API: list_pending_invitations)
lg invitations resend — Re-send a pending teammate invitation e-mail and extend its expiry by 14 days. (zapis · potwierdzenie + nieodwracalne · wszystkie · API: resend_invitation) [klucz manager]
lg invitations revoke — Cancel a pending teammate invitation so its link stops working (it can later be re-sent). (zapis · potwierdzenie · wszystkie · API: revoke_invitation) [klucz manager]
lg invoice-settings get — Read the invoice document settings (fatura ayarları, fatura şablonu ayarları): which invoice templates exist, which template configuration is the company default, which fields of it are filled (logo, seller address,… (odczyt · — · wszystkie · API: get_invoice_settings)
lg invoice-templates create — Create a new invoice template configuration for your company: a base template plus field values (colours, font, header / footer text, IBANs shown, QR code, language; logo and signature from uploaded images). (zapis · potwierdzenie + nieodwracalne · wszystkie · API: create_invoice_template) [klucz manager] [przyjmuje plik: logo_attachment_uuid, signature_image_attachment_uuid]
lg invoice-templates delete — Delete one of your invoice template configurations. (zapis · potwierdzenie + nieodwracalne · wszystkie · API: delete_invoice_template) [klucz manager]
lg invoice-templates get — Show the fillable fields of an invoice template (logo, colours, font, header / footer text, IBANs shown, QR code, signature, language) with their types, options and defaults — and, for one of your configurations, its… (odczyt · — · wszystkie · API: get_invoice_template)
lg invoice-templates set-default — Make one of your invoice template configurations the company default; the previous default stops being default. (zapis · potwierdzenie · wszystkie · API: set_default_invoice_template) [klucz manager]
lg invoice-templates update — Edit one of your invoice template configurations: switch its base template, rename it, change field values (merged over the stored ones — only the keys you pass change), replace the logo / signature image, or make it… (zapis · potwierdzenie + nieodwracalne · wszystkie · API: update_invoice_template) [klucz manager] [przyjmuje plik: logo_attachment_uuid, signature_image_attachment_uuid]
lg invoices add-line — Add a line item to a DRAFT invoice and recompute totals (tax auto-resolved if tax_rate_id omitted). (zapis · — · wszystkie · API: add_invoice_line)
lg invoices add-payment — Record money received (sales invoice) or paid (purchase invoice) against ONE issued invoice: writes the payment, posts the balanced journal entry and reduces the remaining balance. (zapis · potwierdzenie + nieodwracalne · wszystkie · API: record_invoice_payment)
lg invoices cancel — Cancel an ISSUED invoice this company issued: posts the reversing journal entry and marks the invoice cancelled. (zapis · potwierdzenie + nieodwracalne · wszystkie · API: cancel_invoice)
lg invoices create — Create a DRAFT invoice (reversible) issued by the current company to a recipient business contact. (zapis · — · wszystkie · API: create_invoice_draft)
lg invoices delete-draft — Delete a DRAFT invoice of this company together with its lines and taxes. (zapis · potwierdzenie + nieodwracalne · wszystkie · API: delete_invoice_draft)
lg invoices download — Get a short-lived download link for the PDF of an invoice visible to this company (and the e-invoice XML when one exists). (odczyt · — · wszystkie · API: download_invoice_pdf)
lg invoices get — Read one invoice in full: parties, load link, dates, every line with tax, tax breakdown, totals, remaining balance and the payments recorded against it. (odczyt · — · wszystkie · API: get_invoice)
lg invoices issue — Issue (finalize) a DRAFT invoice: assigns a number and posts accounting entries. (zapis · potwierdzenie + nieodwracalne · wszystkie · API: issue_invoice)
lg invoices list — List invoices visible to this company — the ones it issued and the ones issued to it (as a linked party). (odczyt · — · wszystkie · API: list_invoices)
lg invoices preview — Show the user a full preview of a DRAFT invoice (recipient, line items, tax breakdown, totals) WITHOUT issuing it. (odczyt · — · wszystkie · API: preview_invoice · wycofywane: 2026-09-03 · użyj get_invoice)
lg invoices remove-line — Remove one line from a DRAFT invoice your company issued; the totals are recalculated. (zapis · potwierdzenie · wszystkie · API: remove_invoice_line)
lg invoices reverse-payment — Undo ONE payment/collection recorded on an invoice: posts the reversing journal entry, gives the amount back to the invoice's remaining balance and removes the payment row. (zapis · potwierdzenie + nieodwracalne · wszystkie · API: reverse_invoice_payment)
lg invoices update — Edit the header of a DRAFT invoice your company issued: recipient contact, currency, issue / due date, the printed note and the invoice template. (zapis · — · wszystkie · API: update_invoice_draft)
lg invoices update-line — Edit one line of a DRAFT invoice your company issued (text, quantity, unit, net unit price, discount, tax rate, order). (zapis · — · wszystkie · API: update_invoice_line)
lg join-requests approve — Approve a pending join request: the applicant becomes a user of our company with the EMPLOYEE role, takes one team seat and is e-mailed the decision. (zapis · potwierdzenie + nieodwracalne · wszystkie · API: approve_join_request) [klucz manager]
lg join-requests list — List PENDING requests from people asking to join our company (they signed up with an e-mail on one of our verified domains and picked our company). (odczyt · — · wszystkie · API: list_join_requests) [klucz manager]
lg join-requests reject — Reject a pending join request: the applicant does not join our company and is e-mailed the decision. (zapis · potwierdzenie + nieodwracalne · wszystkie · API: reject_join_request) [klucz manager]
lg journal-entries create — Post a manual double-entry journal entry (yevmiye fişi). (zapis · potwierdzenie + nieodwracalne · wszystkie · API: create_journal_entry)
lg journal-entries get — Read one journal entry with its lines (account code/name, debit, credit, counterparty) and totals. (odczyt · — · wszystkie · API: get_journal_entry)
lg journal-entries list — List journal entries (yevmiye fişleri) of the company, newest first, with optional date window. (odczyt · — · wszystkie · API: list_journal_entries)
lg language-settings get — Read the signed-in user's own language settings (dil ayarları). (odczyt · — · wszystkie · API: get_language_settings)
lg language-settings update — Change the signed-in user's OWN language settings — "dilimi İngilizce yap", "e-postalarım Türkçe gelsin", "sohbet mesajlarını Almancaya çevir". (zapis · — · wszystkie · API: set_language)
lg load-ai-settings get — Read our company's load AI reminder setting (Settings → Loads): whether the assistant posts reminders into load chats about loads whose status was not updated (ai_warning_enabled) and on which days (warning_frequency:… (odczyt · — · wszystkie · API: get_load_ai_settings)
lg load-ai-settings update — Change our company's load AI reminders (Settings → Loads): ai_warning_enabled turns the reminders the assistant posts into load chats on or off; warning_frequency picks the days (daily, mon_wed_fri, weekly_wed,… (zapis · potwierdzenie · wszystkie · API: update_load_ai_settings) [klucz manager]
lg load-containers create — Add a sea container number to a load (yüke konteyner ekle) — "add MSC container MSCU1234565 to FKZ8515". (zapis · potwierdzenie · nadawca, przewoźnik · API: add_load_container)
lg load-containers delete — Delete a container record from a load (konteyneri sil) — only while its vessel tracking has NOT started (otherwise refused with INVALID_STATUS). (zapis · potwierdzenie + nieodwracalne · wszystkie · API: delete_load_container)
lg load-containers get — Show one container of a load and the last known position of the ship carrying it (konteyner konumu): ship name/IMO, latitude/longitude, speed, course, destination, ETA and the position time. (odczyt · — · wszystkie · API: get_load_container)
lg load-containers list — List the sea containers recorded on a load (konteynerler) with their shipping line, whether vessel tracking has started and which ship carries them. (odczyt · — · wszystkie · API: list_load_containers)
lg load-containers set-tracking — Start vessel tracking for a load from its containers (konteyner takibini başlat): the shipping line is queried for each container until the vessel carrying it is found; that ship is then tracked on the load's map and… (zapis · potwierdzenie · wszystkie · API: start_load_container_tracking)
lg load-documents create — File one or MANY documents the user attached to this conversation onto a load: each file is stored as a company document and posted into the load's chat, where every participant (customer, carrier, customs broker) sees… (zapis · potwierdzenie + nieodwracalne · wszystkie · API: attach_chat_file_to_load) [przyjmuje plik: attachment_uuid, attachment_uuids]
lg load-documents list — List the documents (CMR, invoice, packing list, customs papers, photos…) filed on a load — i.e. the files shared in that load's chat. (odczyt · — · wszystkie · API: list_load_documents)
lg load-groups add-loads — Merge EXISTING loads into a groupage trip you own as consignments (they keep their own code, chat, documents and participants; only the trip membership changes — nothing is duplicated and NO credit is used). (zapis · potwierdzenie · nadawca, przewoźnik · API: add_loads_to_group)
lg load-groups create — Create a groupage trip (parsiyel/sefer): ONE truck carrying several ISOLATED consignments; each consignment is its own load with its own chat/documents/status and receivers never see each other. (zapis · potwierdzenie + nieodwracalne · nadawca, przewoźnik · API: create_load_group)
lg load-groups download — Download the route report of a groupage trip (sefer / parsiyel, code like LGV00253): route_pdf = detailed route report with map and itinerary, route_xlsx = the same as Excel, driver_sheet_pdf = the simplified driver… (zapis · — · nadawca, przewoźnik · API: download_load_group_report)
lg load-groups get — Detail of one groupage trip: consignments visible to you (load code, status, receiver, route, driver), planned date, optimised master route summary and stop count. (odczyt · — · nadawca, przewoźnik · API: get_load_group)
lg load-groups list — List groupage trips (parsiyel / sefer: one truck, several isolated consignment loads) this company owns or — for carriers — carries, newest first, with visible consignment count and route optimisation state. (odczyt · — · nadawca, przewoźnik · API: list_load_groups)
lg load-groups optimize — Re-optimise the master route of a groupage trip you own and RETURN the new itinerary: the ordered stops (pickup → export customs → import customs → dropoff), each stop's address and consignment codes, the total distance… (zapis · — · nadawca, przewoźnik · API: optimize_trip_route)
lg load-groups remove-load — Take one consignment out of a groupage trip you own. (zapis · potwierdzenie · nadawca, przewoźnik · API: remove_load_from_group)
lg load-heatmaps generate — Produce the load heatmap report (PDF, with QR code and the list of your active loads: code, departure, arrival, date, weight), save it to the company's reports and return a download link. (zapis · potwierdzenie + nieodwracalne · wszystkie · API: generate_load_heatmap_report)
lg load-heatmaps get — Load heatmap data in words: the densest departure and arrival areas of your active loads, ranked by number of loads and by total kilograms. (odczyt · — · wszystkie · API: get_load_heatmap)
lg load-locations create — Report a position for a load on behalf of the carrier (konum bildir) — "FKZ8515 is at Kapıkule now", "the truck is at 41.0, 28.9". (zapis · potwierdzenie + nieodwracalne · przewoźnik · API: report_load_location)
lg load-locations list — Show a load's position history (konum geçmişi) and its last known position — "where is FKZ8515 now", "where was it yesterday", "show the truck's track". (odczyt · — · wszystkie · API: list_load_locations)
lg load-locations list-routes — Show the road route segments drawn on a load's tracking map (rota parçaları), each with distance (metres) and duration (seconds): from the pickup address to the first reported position, between reported positions, and… (odczyt · — · wszystkie · API: list_load_route_segments)
lg load-notifications list-recipients — Show which load parties can receive a load notification (departure, arrival, daily location) and how many of their people are subscribed per channel (e-mail, push, SMS). (odczyt · — · wszystkie · API: list_load_notification_recipients)
lg load-notifications send — Send a departure / arrival / daily-location notification about a load to chosen load parties — e.g. "notify the receiver that FRT6470 arrived". (zapis · potwierdzenie + nieodwracalne · wszystkie · API: send_load_notification)
lg load-notifications send-email — E-mail a departure / arrival / location update about a load to people you choose from YOUR OWN company directory (business contact persons) — e.g. "e-mail Mehmet at Arkas the location of FKZ8515". (zapis · potwierdzenie + nieodwracalne · wszystkie · API: send_load_email_notification)
lg load-participants create — Add a party to a load (yüke taraf ekle) — "FKZ8515'e Arkas'ı alıcı olarak ekle" — or assign a sub-carrier. business_contact_id comes from lookup_business_contact (your own directory). (zapis · potwierdzenie · wszystkie · API: add_load_participant)
lg load-participants delete — Remove a party or a sub-carrier from a load (yükten taraf çıkar) — "FKZ8515'ten alt taşıyıcı Yılmaz Nakliyat'ı kaldır". participant_id comes from list_load_participants. (zapis · potwierdzenie · wszystkie · API: remove_load_participant)
lg load-participants list — List a load's parties (yük tarafları): sender, receiver, carrier and sub-carriers, organizer, sender/receiver customs brokers — with participant_id (needed by every other load-participant command), position (0 = primary… (odczyt · — · wszystkie · API: list_load_participants)
lg load-participants set-order — Put the parties of one role in a new order (load owner only); the first id becomes the primary. participant_ids must list ALL current rows of that role (from list_load_participants). (zapis · potwierdzenie · wszystkie · API: reorder_load_participants)
lg load-participants set-primary — Make a party the primary one in its role (load owner only) — e.g. the main receiver or main customs broker. participant_id from list_load_participants. (zapis · potwierdzenie · wszystkie · API: set_primary_load_participant)
lg load-participants update — Change one load party's settings (load owner only) — "Arkas FKZ8515'i görmesin": share_with_assigned_company (can the linked company see the load; cannot be turned off for a sub-carrier), conversation_user_ids (only… (zapis · potwierdzenie · wszystkie · API: update_load_participant)
lg load-party-suggestions approve — Accept a party suggestion: link the suggested business contact to your OWN load as sender or receiver (business_contact_id and party_role from list_load_party_suggestions). (zapis · potwierdzenie · wszystkie · API: confirm_load_party_suggestion)
lg load-party-suggestions list — Show sender/receiver suggestions for one of your OWN loads: parties named in the load's documents that match a contact in your directory but are not linked to the load yet. (odczyt · — · wszystkie · API: list_load_party_suggestions)
lg load-party-suggestions reject — Close wrong party suggestions on your OWN load so they are not suggested again — "bu önerileri bir daha gösterme". (zapis · — · wszystkie · API: dismiss_load_party_suggestions)
lg load-reports get — Build a report of your ACTIVE loads, optionally filtered by sender, receiver, transport mode, departure country or arrival country. format=summary (default) answers in chat: the number of loads and how many are in each… (odczyt · — · wszystkie · API: get_load_report)
lg load-reports options — List the companies you can filter the load report by — the senders, receivers, carriers and other parties that appear on your active loads — with their company id and role. (odczyt · — · wszystkie · API: get_load_report_options)
lg load-types search — Resolve a load/transport type (e.g. (odczyt · — · wszystkie · API: lookup_load_type)
lg load-vehicles delete — Detach the fleet equipment from a load: both slots by default, or only the tractor unit / only the trailer. (zapis · potwierdzenie · wszystkie · API: clear_load_equipment)
lg load-vehicles get — Show which tractor unit (or truck/van) and which trailer are attached to a load, whether they belong to your own fleet, and whether the load can still be changed. (odczyt · — · wszystkie · API: get_load_equipment)
lg load-vehicles set — Attach one of your own fleet vehicles to a load: the tractor unit / truck slot (plate) and/or the trailer slot (trailer_plate). (zapis · potwierdzenie · wszystkie · API: assign_vehicle_to_load)
lg loads add-order-reference — Attach an order reference to a load (sipariş referansı ekle) — "FKZ8515'e satın alma siparişi PO-4471 ekle". order_type is the kind of order (e.g. purchase, sales), order_no the number. (zapis · potwierdzenie + nieodwracalne · wszystkie · API: add_load_order_reference)
lg loads analyze-documents — Re-run the background AI consistency analysis of a load's documents (does the invoice contradict the CMR, the packing list, the declared weight…) and refresh the load's problem flag with the outcome. (zapis · — · wszystkie · API: reanalyze_load_documents)
lg loads archive — Archive one of the company's OWN loads (yükü arşivle) — "FKZ8515'i arşive al". (zapis · potwierdzenie + nieodwracalne · wszystkie · API: archive_load)
lg loads assign-driver — Assign one of this company's drivers to a load so the driver sees it in the mobile app and starts reporting position. (zapis · potwierdzenie · przewoźnik · API: assign_driver_to_load)
lg loads audit-documents — Cross-check the documents already attached to loads and report, PER LOAD, whether their package counts and gross weights agree. (odczyt · — · wszystkie · API: audit_load_documents)
lg loads close-problem — Close the open document-consistency flag of ONE load, from the chat. action=resolved means the contradiction was actually fixed (a corrected document was uploaded); action=dismissed means it was a false alarm and should… (zapis · potwierdzenie · wszystkie · API: resolve_load_problem_flag)
lg loads create — Open a freight load (yük). (zapis · potwierdzenie + nieodwracalne · wszystkie · API: create_load)
lg loads download — Generate a load's CMR consignment note as a PDF and return a short-lived download link — "FKZ8515'in CMR'ını ver". (odczyt · — · wszystkie · API: download_load_cmr)
lg loads extract — Read a booking/order text (an e-mail body, a note, an ERP export line) and return the load fields it contains, in the quick-load form's shape: transport mode, countries, dates, load type, vehicle type, weight, goods… (odczyt · — · nadawca · API: extract_load_from_text)
lg loads get — Read one load in full by its code: route, dates, weight, current status, parties (sender/receiver/carrier), agreed freight (freight_amount + freight_currency) with its freight invoices (number, date, total), latest… (odczyt · — · wszystkie · API: get_load)
lg loads list — List the freight loads (yük) this company can see, newest first. (odczyt · — · wszystkie · API: list_loads)
lg loads list-associated — List the loads of the same multi-vehicle order as a given load (aynı siparişin diğer araçları) — every active load that shares its vehicle group code (LG…) and that your company can see, with status, date and carrier. (odczyt · — · wszystkie · API: list_associated_loads)
lg loads list-billing-targets — Show who you can invoice for a load: its commercial parties (sender, receiver, carrier) you are allowed to bill, each with recipient_contact_id to pass to create_invoice_draft and in_my_directory (true = already in your… (odczyt · — · wszystkie · API: list_load_billing_targets)
lg loads list-problems — List loads whose uploaded documents the AI consistency check found to CONTRADICT each other (e.g. invoice weight vs CMR weight). (odczyt · — · wszystkie · API: list_load_problem_flags)
lg loads list-status-history — Show a load's status history (durum geçmişi) in order — when it went pending, in transport, transit, delivered (done). (odczyt · — · wszystkie · API: list_load_status_history)
lg loads list-stops — List the stops of a multi-stop load (çok duraklı yük — several pickups/drop-offs on one load) in route order, with type (pickup, dropoff, customs_exit, customs_entry), company, address, leg distance/duration and whether… (odczyt · — · wszystkie · API: list_load_stops)
lg loads optimize — Re-order the stops of a multi-stop load for the shortest driving route (pickups first, then drop-offs) and store the new order with leg distances — "optimise FKZ8515's stops". (zapis · — · wszystkie · API: optimize_load_stops)
lg loads options — Read a load's editable fields, their current values and the allowed options (load types, vehicle types, goods classes, stackability, incoterms, movement types) — "FKZ8515'te neyi değiştirebilirim?". (odczyt · — · wszystkie · API: get_load_edit_form)
lg loads preview-copy — Prepare a copy draft of one of your company's OWN loads (yükü kopyala) — "FKZ8515'in aynısından bir tane daha açalım": transport mode, countries, addresses, load type, vehicle type, weight, goods class, incoterms, ports… (odczyt · — · wszystkie · API: get_load_copy_template)
lg loads remove-driver — Remove the driver from a load (the opposite of assign_driver_to_load): the load disappears from the driver's app and GPS tracking of the load stops. (zapis · potwierdzenie · przewoźnik · API: unassign_driver_from_load)
lg loads search — Full-text search across your loads (yük ara) — company names, pickup/delivery address, order references, load code, text written in the load chat and text read from documents shared in the chat: "içinde PO-4471 geçen… (odczyt · — · wszystkie · API: search_loads)
lg loads set-status — Move a load to a new transport status and append it to the load's status history (this is what the customer sees on the tracking screen). (zapis · potwierdzenie + nieodwracalne · przewoźnik · API: update_load_status)
lg loads set-stop-status — Mark one stop of a multi-stop load as completed, or undo it (completed=false) — "FKZ8515's second drop-off is done". (zapis · potwierdzenie · przewoźnik · API: mark_load_stop_completed)
lg loads set-tracking — Turn a load's GPS location tracking on or off (konum takibi) — "stop location tracking for FKZ8515", "resume tracking". (zapis · potwierdzenie · przewoźnik · API: set_load_location_tracking)
lg loads update — Edit an existing load (yükü düzenle): loading date, weight, load type, vehicle types, goods class, stackability, pickup/delivery address, incoterms, movement type, loading/destination port. (zapis · potwierdzenie + nieodwracalne · wszystkie · API: update_load)
lg maturity-options list — The selectable payment terms (vade): maturity_option_id and the number of days (0 = cash / peşin). maturity_option_id is what update_company_profile takes. (odczyt · — · wszystkie · API: list_maturity_options)
lg notification-settings get — Read our company's notification switches (Settings → Notifications): which e-mail notifications (type "notification") and push notifications (type "web-push") are on for the whole company — e.g. message, load, demand… (odczyt · — · nadawca · API: get_notification_settings) [klucz manager]
lg notification-settings update — Turn our company's notification switches on or off (Settings → Notifications) — e.g. stop load chat push notifications or message e-mails for the whole company. settings is a list of {slug, enabled}; slugs come from… (zapis · potwierdzenie · nadawca · API: update_notification_settings) [klucz manager]
lg notifications list — Read the signed-in user's own notification inbox (the bell icon): what happened, which kind of event it was, when, whether it is still unread, and the panel address the notification points at. (odczyt · — · wszystkie · API: list_notifications)
lg notifications mark-read — Mark ALL of the signed-in user's unread notifications as read (empty the bell). (zapis · — · wszystkie · API: mark_notifications_read)
lg packages get — Read this company's package and CREDIT balance: how many credits are left, how many the package grants per year, how many were used, the renewal date, and the assistant token usage of the current period (1,000,000… (odczyt · — · wszystkie · API: get_credit_balance)
lg packages list — List the Logistivo packages this company can buy: slug, name, monthly price and yearly upfront total in the company's BILLING currency (TRY for Türkiye-billed companies, EUR otherwise — never converted with an exchange… (odczyt · — · wszystkie · API: list_packages)
lg pallets add-measurement — Record a NEW measurement for an existing pallet (dimensions in centimetres and/or gross weight in kilograms). (zapis · potwierdzenie · wszystkie · API: add_pallet_measurement)
lg pallets add-proof — Attach a proof photo to one of this company's pallets (e.g. the wrapped pallet, its label, damage on arrival). (zapis · — · wszystkie · API: add_pallet_proof) [przyjmuje plik: attachment_uuid]
lg pallets calculate — Suggest the missing base side of a pallet from a standard footprint (EUR 120×80, industrial 120×100, half 80×60; ±5 cm) when only one base side is known, and compute the volume when length, width and height are all… (odczyt · — · wszystkie · API: complete_pallet_dimensions)
lg pallets create — Register a NEW pallet in a warehouse, optionally with its first measurement. warehouse_id is required — resolve the warehouse name with lookup_warehouse first. (zapis · potwierdzenie · wszystkie · API: create_pallet)
lg pallets delete — Delete one of this company's pallet records. (zapis · potwierdzenie + nieodwracalne · wszystkie · API: delete_pallet)
lg pallets delete-proof — Remove one proof photo from one of this company's pallets. (zapis · potwierdzenie + nieodwracalne · wszystkie · API: delete_pallet_proof)
lg pallets extract — Estimate a pallet's content label, dimensions (cm) and gross weight (kg) from photo(s) the user attached to THIS conversation. (zapis · — · wszystkie · API: extract_pallet_from_photos) [przyjmuje plik: attachment_uuids]
lg pallets get — Read one pallet in full: its identity (code, label, SKU, barcode), status, warehouse and area, the FULL measurement history (each row with its id, source — manual, lidar, arcore or ai_photo — and confidence), its proof… (odczyt · — · wszystkie · API: get_pallet)
lg pallets list — List the pallets of this company: code, label, SKU/barcode, status, which warehouse and area it sits in, its latest measured dimensions (cm) and gross weight, and how many proof photos it has. (odczyt · — · wszystkie · API: list_pallets)
lg pallets update — Update an existing pallet: its status (in_stock, in_transit, reserved, shipped, disposed), its label/SKU/barcode/note, or MOVE it to another warehouse or area. (zapis · potwierdzenie · wszystkie · API: update_pallet)
lg parasut-contacts create — Create a new customer or supplier contact IN PARAŞÜT and keep its local copy. (zapis · potwierdzenie + nieodwracalne · wszystkie · API: create_parasut_contact)
lg parasut-contacts list — List the customer / supplier contacts held in Paraşüt (the local copy synchronised from Paraşüt): parasut_contact_id (the Paraşüt id used by create_parasut_sales_invoice — NOT a business contact id), name, short name,… (odczyt · — · wszystkie · API: list_parasut_contacts)
lg parasut-invoices create — Issue a SALES invoice in Paraşüt for one of this company's Paraşüt contacts, as an e-invoice (scenario commercial or basic — the recipient must be an e-invoice user) or an e-archive invoice (scenario e_archive); check… (zapis · potwierdzenie + nieodwracalne · wszystkie · API: create_parasut_sales_invoice)
lg parasut-invoices list — List invoices held in Paraşüt (local copy): sales invoices (default) or purchase bills, newest issue date first — invoice id and number, item type, description, issue / due date, net / gross / VAT totals, currency,… (odczyt · — · wszystkie · API: list_parasut_invoices)
lg parasut-invoices options — Return the options of the Paraşüt invoice form: income/expense categories (category_id), the Paraşüt bank and cash accounts, and — with tax_number — whether that VKN is a registered e-invoice user (then use scenario… (odczyt · — · wszystkie · API: get_parasut_invoice_options)
lg parasut-settings delete — Disconnect Paraşüt from this company: the saved credentials are removed, the accounting provider switches back to local when it was Paraşüt, and the LOCAL copies pulled from Paraşüt (contacts, invoices, bank accounts,… (zapis · potwierdzenie + nieodwracalne · wszystkie · API: disconnect_parasut) [klucz manager]
lg parasut-settings get — Show the Paraşüt integration status of this company: whether it is connected, the Paraşüt firm number, the user name, the client id/secret MASKED (last 4 characters only), when it was connected, the token status and the… (odczyt · — · wszystkie · API: get_parasut_settings) [klucz manager]
lg parasut-settings update — Connect this company's Paraşüt account or renew its credentials (replaces an existing connection). (zapis · potwierdzenie · wszystkie · API: connect_parasut) [klucz manager] [tylko CLI]
lg payables list — Payables ("whom do we owe how much"): per-supplier totals of recorded purchase invoices — invoiced, paid, remaining, earliest due date — with a per-currency breakdown and an overall summary. (odczyt · — · wszystkie · API: list_payables)
lg payment-cards delete — Remove a saved payment card (card_id from list_payment_cards). (zapis · potwierdzenie + nieodwracalne · wszystkie · API: delete_payment_card) [klucz manager]
lg payment-cards list — List the company's saved payment cards, MASKED (last four digits only), with the card holder name, expiry and which one is the default card the monthly subscription is charged to. (odczyt · — · wszystkie · API: list_payment_cards)
lg payment-cards set-default — Make one of the saved cards (card_id from list_payment_cards) the DEFAULT card: the monthly package payment is charged to it from now on, and every other card loses the default flag. (zapis · potwierdzenie + nieodwracalne · wszystkie · API: set_default_payment_card) [klucz manager]
lg payment-instructions cancel — CANCEL a pending bank payment instruction: the reservation on its invoices is released so they can be paid another way, and the instruction becomes "cancelled". (zapis · potwierdzenie + nieodwracalne · wszystkie · API: cancel_settlement_instruction)
lg payment-instructions download — Get the bank payment instruction document (PDF) with a short-lived download link. (odczyt · — · wszystkie · API: download_settlement_instruction)
lg payment-instructions get — Read one bank payment instruction: its code, template, effective date, status with timestamps and cancel reason, its note, and — when the PDF has already been rendered — a short-lived signed link to it so the user gets… (odczyt · — · wszystkie · API: get_settlement_instruction)
lg payment-instructions list — List the bank payment instructions of this company: instruction code, which template (bank format) it uses, its effective date, status (pending, executed, cancelled) and when it was executed or cancelled. (odczyt · — · wszystkie · API: list_settlement_instructions)
lg payment-instructions run — EXECUTE a pending bank payment instruction (banka talimatını yürüt / uygula): the reserved invoices are paid, the payments and journal entries are written with the instruction's effective date, and the instruction… (zapis · potwierdzenie + nieodwracalne · wszystkie · API: execute_settlement_instruction)
lg planning-boards get — The planning calendar: for every driver, the stretches of days with planned work inside the Schengen area (planned_in), days assumed inside (drive back, assumed_in), planned work outside (planned_out), leave / rest… (odczyt · — · przewoźnik · API: get_planning_board)
lg plans archive — Close a plan because the user says the work is finished or abandoned. (zapis · — · wszystkie · API: archive_plan)
lg plans create — Write down a multi-step job so it survives between conversations ("link these 5 loads to a trip, then invoice them"). (zapis · potwierdzenie · wszystkie · API: create_plan)
lg plans get — Read one plan: the steps that were agreed AND the commands that actually ran while it was active. (odczyt · — · wszystkie · API: get_plan)
lg plans list — List this company's plans, newest first. (odczyt · — · wszystkie · API: list_plans)
lg ports search — Find a seaport by name or UN/LOCODE (liman ara) — "Mersin", "TRMER", "Trieste". (odczyt · — · wszystkie · API: lookup_port)
lg preferences create — Remember a lasting preference of THIS user, so it applies to every future conversation too ("always show amounts in EUR", "write driver names surname first", "I want the weekly summary on Mondays"). (zapis · — · wszystkie · API: remember_preference)
lg preferences delete — Forget one stored preference of this user. (zapis · — · wszystkie · API: forget_preference)
lg preferences list — List what you have been asked to remember about THIS user, with the labels. (odczyt · — · wszystkie · API: list_preferences)
lg product-brands create — Create a new product brand for this company (the panel's "new brand"). (zapis · potwierdzenie · nadawca · API: create_product_brand)
lg product-brands list — List this company's product brands (id, name, code, active flag, number of products). (odczyt · — · nadawca · API: list_product_brands)
lg product-categories create — Create a new product category for this company (the panel's "new category"). (zapis · potwierdzenie · nadawca · API: create_product_category)
lg product-categories list — List this company's product categories (id, name, code, active flag, number of products). (odczyt · — · nadawca · API: list_product_categories)
lg products add-image — Add a photo to a product's gallery. (zapis · — · nadawca · API: add_product_image) [przyjmuje plik: attachment_uuid]
lg products create — Define a new product in this company's catalogue so stock can be recorded against it: name plus optionally its unit of measure, SKU, barcode, category, brand, minimum stock level, reorder quantity and lot tracking. (zapis · potwierdzenie · nadawca · API: create_product)
lg products delete — Delete a product from this company's catalogue. (zapis · potwierdzenie + nieodwracalne · nadawca · API: delete_product)
lg products delete-image — Remove one photo from a product's gallery (image_id from get_product). (zapis · potwierdzenie + nieodwracalne · nadawca · API: delete_product_image)
lg products extract — Read product details (name, description, SKU, barcode, unit, category, brand) from 1-5 photos of the product or its label — the panel's "fill from photo" button. (zapis · — · nadawca · API: extract_product_from_photos) [przyjmuje plik: attachment_uuids]
lg products get — Show one product of this company in full: code, SKU, barcode, unit, category and brand, low-stock threshold and reorder quantity, lot tracking, its photos (with image_id for delete_product_image /… (odczyt · — · nadawca · API: get_product)
lg products list — List the products of this company: code, name, SKU/barcode, unit, category and brand, whether it is active, and its low-stock threshold. (odczyt · — · nadawca · API: list_products)
lg products list-low-stock — List the products whose quantity on hand is BELOW their low-stock threshold (strictly below — a product exactly at the threshold is not listed), with the quantity on hand and the threshold itself. (odczyt · — · nadawca · API: list_low_stock_products)
lg products options — List the units of measure a product can be held in (slug for create_product / update_product unit, with Turkish and English names). (odczyt · — · nadawca · API: get_product_options)
lg products search — Resolve a product to its product_id + on-hand quantity. (odczyt · — · nadawca · API: lookup_product)
lg products set-primary-image — Make one of a product's photos its cover image (image_id from get_product). (zapis · — · nadawca · API: set_product_primary_image)
lg products update — Correct an existing product: its name, unit, SKU, barcode, category, brand, minimum stock level, reorder quantity, lot tracking, note, or whether it is active. (zapis · potwierdzenie · nadawca · API: update_product)
lg receivables get — Account statement of one contact: every sales invoice issued to them and every collection, in date order with a running balance, plus totals (invoiced, paid, open balance, open invoice count). (odczyt · — · wszystkie · API: get_receivable_statement)
lg receivables list — Receivables ("who owes us how much"): per-contact totals of issued sales invoices — invoiced, paid, remaining — with a per-currency breakdown and an overall summary. (odczyt · — · wszystkie · API: list_receivables)
lg report-files create — Turn a table you compiled from tool results into a downloadable Excel (default), PDF or CSV file — any custom table, list, comparison or export, with optional charts. (odczyt · — · wszystkie · API: create_report_file)
lg reports get — Financial reports from posted journal entries: trial_balance (per-account debit/credit/balance as of a date), balance_sheet (as of a date) or income_statement (revenues/expenses/net income for a date range; defaults to… (odczyt · — · wszystkie · API: get_accounting_report)
lg reservations approve — As the warehouse owner, approve a pending reservation received at your warehouse (the booker is notified). (zapis · potwierdzenie · nadawca · API: approve_reservation)
lg reservations cancel — Cancel (withdraw) a warehouse reservation you booked, or — as the warehouse owner (customer) — cancel a reservation received at your warehouse. (zapis · potwierdzenie + nieodwracalne · wszystkie · API: cancel_reservation)
lg reservations complete — As the warehouse owner, mark an APPROVED reservation at one of your warehouses as completed (the vehicle came and the work is done). (zapis · potwierdzenie + nieodwracalne · nadawca · API: complete_reservation)
lg reservations create — Book a warehouse dock time slot. (zapis · potwierdzenie · wszystkie · API: create_reservation)
lg reservations get — Detail of one warehouse reservation you booked or (customer) one received at your warehouse: warehouse, area, time window, status, contact, notes, rejection reason. (odczyt · — · wszystkie · API: get_reservation)
lg reservations list — List warehouse dock reservations. side=booked_by_me (default): reservations this user/company booked at other companies' warehouses. side=received (customer role only): reservations other companies made at ONE of your… (odczyt · — · wszystkie · API: list_reservations)
lg reservations list-slots — Available dock time slots of one day with remaining capacity. (odczyt · — · wszystkie · API: list_reservation_slots)
lg reservations reject — As the warehouse owner, reject a pending reservation received at your warehouse, with an optional reason shown to the booker. (zapis · potwierdzenie + nieodwracalne · nadawca · API: reject_reservation)
lg reservations reschedule — As the warehouse owner, move a PENDING or APPROVED reservation at one of your warehouses to a new time. (zapis · potwierdzenie · nadawca · API: reschedule_reservation)
lg roro-routes list — For a load you are carrying, list the Ro-Ro (ferry) lines closest to its PICKUP address, nearest first: the line name, its departure and arrival ports and how many kilometres the pickup point is from the departure port. (odczyt · — · przewoźnik · API: list_nearby_roro_routes)
lg roro-routes select — Select the Ro-Ro (ferry) line a load you are carrying will use. (zapis · potwierdzenie · przewoźnik · API: select_roro_route)
lg roro-routes set-required — Mark whether a load you are carrying will travel by Ro-Ro (ferry) or not. (zapis · potwierdzenie · przewoźnik · API: set_load_roro_required)
lg route-plans assign-driver — Assign a driver (and, on a double-crew plan, a co-driver; optionally the vehicle/trailer) to a saved route plan (route_plan_id or route_plan_code). (zapis · potwierdzenie · przewoźnik · API: assign_driver_to_route_plan)
lg route-plans calculate — Calculate a multi-stop truck journey WITHOUT saving it: truck driving time (car time × hgv_factor, capped speed), the EU 561/2006 / AETR breaks, daily and weekly rests, weekend/holiday driving bans and border waits, and… (zapis · potwierdzenie · przewoźnik · API: calculate_route_plan)
lg route-plans create — Save a route plan as a DRAFT (same arguments as calculate_route_plan, plus name, vehicle_id, trailer_id, start_flex_days). (zapis · potwierdzenie · przewoźnik · API: create_route_plan)
lg route-plans delete — Cancel and delete a route plan (route_plan_id or route_plan_code). (zapis · potwierdzenie + nieodwracalne · przewoźnik · API: delete_route_plan)
lg route-plans get — One saved route plan: stops with arrival/departure ranges, the summary (distance, truck driving time, arrival optimistic / expected / conservative, breaks, daily/weekly rests, reduced rests, border waits), Schengen days… (odczyt · — · przewoźnik · API: get_route_plan)
lg route-plans list — List the company's saved route plans, newest first: code, name, status (draft | assigned | converted | cancelled), departure, crew, driver, vehicle, linked load/trip, stops, arrival range and Schengen day count. (odczyt · — · przewoźnik · API: list_route_plans)
lg route-plans preview — Compare 1-6 variants of the same journey side by side — different drivers, departure days or a double crew: arrival range, driving and rest counts, Schengen days left at the end for every crew member, availability /… (zapis · potwierdzenie · przewoźnik · API: compare_route_plan_scenarios)
lg route-plans remove-driver — Take the driver (and co-driver) off an assigned route plan (route_plan_id or route_plan_code); the plan goes back to draft and stops counting as planned Schengen days for them. (zapis · potwierdzenie · przewoźnik · API: unassign_driver_from_route_plan)
lg route-plans select — Link a saved route plan (route_plan_id or route_plan_code) to the load or trip it was planned for — give load_code OR trip_code; give neither to remove the link. (zapis · potwierdzenie · przewoźnik · API: link_route_plan)
lg route-plans update — Change a saved route plan (route_plan_id or route_plan_code): any create_route_plan field — name, departure, stops, crew, options, vehicle. (zapis · potwierdzenie · przewoźnik · API: update_route_plan)
lg schengen-stays calculate — Project ONE driver's Schengen 90/180 days into the future: days used today, then how the remaining days move with the loads, trips and route plans already assigned to him (plus the drive back out) and his leave /… (odczyt · — · przewoźnik · API: get_driver_schengen_projection)
lg schengen-stays create-set — Import drivers' past Schengen entry/exit periods (passport stamps) from an Excel/CSV file — one row per stay: driver code or name, entry date, exit date (empty = still inside). (zapis · potwierdzenie · przewoźnik · API: import_driver_schengen_periods) [przyjmuje plik: attachment_uuid]
lg schengen-stays download — Give a short-lived download link to the Schengen history import template, pre-filled with the company's active drivers (user code + name; entry/exit date cells empty). (odczyt · — · przewoźnik · API: download_schengen_import_template)
lg schengen-stays get — One driver's full Schengen 90/180 picture: days used (confirmed / declared / inferred), days left (signed; negative = overstay), latest exit date, breach date, when days come back (regain schedule), per-country day… (odczyt · — · przewoźnik · API: get_driver_schengen_detail)
lg schengen-stays list — Fleet-wide Schengen 90/180 compliance: which drivers breached the 90-days-in-180 rule or are close to it, how many days each has left (days_remaining is SIGNED — negative means overstay), the latest exit date… (odczyt · — · przewoźnik · API: list_schengen_compliance)
lg schengen-stays list-periods — List the Schengen stay periods DECLARED for a driver (passport stamps / starting balance) with their period_id, entry and exit dates and day count. (odczyt · — · przewoźnik · API: list_driver_schengen_periods)
lg schengen-stays remove-period — Delete ONE wrongly entered declared Schengen period of a driver (period_id from list_driver_schengen_periods). (zapis · potwierdzenie + nieodwracalne · przewoźnik · API: delete_driver_schengen_period)
lg schengen-stays set-baseline — Set a driver's Schengen starting balance — what happened BEFORE GPS tracking: either the exact periods inside the zone from passport stamps (baseline_mode=periods) or just "X days used in the last 180"… (zapis · potwierdzenie · przewoźnik · API: set_driver_schengen_baseline)
lg schengen-stays set-exemption — Exempt a driver from Schengen 90/180 tracking (EU/EFTA passport, residence permit, national long-stay visa) or switch the rule back on. (zapis · potwierdzenie · przewoźnik · API: set_driver_schengen_exemption)
lg settlements cancel — CANCEL a bulk collection / payment (settlement batch). (zapis · potwierdzenie + nieodwracalne · wszystkie · API: cancel_settlement_batch) [klucz manager]
lg settlements create — Close several open invoices of ONE contact in ONE currency in a single bulk collection (direction in) or bulk payment (direction out). instrument transfer = money already moved by bank transfer (payments + journal… (zapis · potwierdzenie + nieodwracalne · wszystkie · API: create_settlement_batch)
lg settlements get — Read one bulk collection / payment (settlement batch) in full: code, direction (in = collection, out = payment), instrument (transfer, bank instruction or cheque), status, counterparty, currency and total, value date,… (odczyt · — · wszystkie · API: get_settlement_batch)
lg settlements list — List bulk collection/payment batches (code, direction, instrument, contact, currency, total, value date, status), newest first. (odczyt · — · wszystkie · API: list_settlement_batches)
lg settlements list-counterparties — List the business contacts that have OPEN local invoices in one money direction — in = customers owing us (sales invoices), out = suppliers we owe (purchase invoices) — each with its default open-invoice currency and… (odczyt · — · wszystkie · API: list_settlement_counterparties)
lg settlements list-invoices — Open LOCAL invoices of one contact in one currency that can be allocated in a bulk collection (direction in = sales invoices) or bulk payment (direction out = purchase invoices), each with payable_remaining (remaining… (odczyt · — · wszystkie · API: list_settlement_invoices)
lg settlements options — Return the options of the bulk collection / payment form: allowed currencies, this company's OWN bank accounts (bank_account_id for create_settlement_batch / attach_check_to_invoices), bank instruction templates, batch… (odczyt · — · wszystkie · API: get_settlement_options)
lg ship-trackings create — Attach a ship to a load and track it on the load's map (yüke gemi bağla), or swap the ship (replace_ship_id = the ship being replaced) — "FKZ8515 sails on MSC Gülsün, track it". (zapis · potwierdzenie · nadawca, przewoźnik · API: track_ship_for_load)
lg ship-trackings delete — Stop tracking a ship on a load (gemi takibini durdur). (zapis · potwierdzenie · nadawca, przewoźnik · API: stop_ship_tracking)
lg ship-trackings get — Show the ship(s) tracked on a load and their position history since the load was created (yükün gemi takibi) — "where is FKZ8515's ship now". (odczyt · — · wszystkie · API: get_load_ship_tracking)
lg ships search — Search the ship registry (gemi sicili) by name, IMO or MMSI — "what is MSC Gülsün's IMO", "find the vessel 9839430". (odczyt · — · wszystkie · API: lookup_ship)
lg stock adjust — Record a stock count correction (sayım düzeltme) or write-off (fire). mode=set sets the absolute on-hand at the slot; mode=delta applies a signed change (negative reduces). reason is required. (zapis · potwierdzenie + nieodwracalne · nadawca · API: create_stock_adjustment)
lg stock list — Read current on-hand stock levels. (odczyt · — · nadawca · API: check_stock_level)
lg stock list-movements — List the stock movements of this company, newest first: which product moved, in or out (or a transfer or a count adjustment), how much, in which warehouse and area, on which pallet, who performed it and when. (odczyt · — · nadawca · API: list_stock_movements)
lg stock move — Record a stock movement: inbound (giriş), outbound (çıkış), or transfer between locations. (zapis · potwierdzenie + nieodwracalne · nadawca · API: create_stock_movement)
lg stock options — List the stock movement types (receipt, issue, transfer, count adjustment …) with their slug and Turkish/English names — the values create_stock_movement and list_stock_movements use. (odczyt · — · nadawca · API: get_stock_options)
lg sub-companies create — Add a group / sub company (alt firma) to this customer company: legal_name (ticaret unvanı), tax_office (vergi dairesi), tax_number and the full address — all four required. (zapis · potwierdzenie · nadawca · API: create_sub_company) [klucz manager]
lg sub-companies delete — Delete one of this customer company's group / sub companies (alt firma) by sub_company_id from list_sub_companies. (zapis · potwierdzenie + nieodwracalne · nadawca · API: delete_sub_company) [klucz manager]
lg sub-companies list — This customer company's group / sub companies (alt firmalar, grup şirketleri — Settings › Sub Companies): sub_company_id, legal name, tax office, tax number and address. (odczyt · — · nadawca · API: list_sub_companies)
lg tariff-chapters get — Answer "which chapter is this GTİP in / what does chapter 76 cover / what do the chapter notes say?". (odczyt · — · wszystkie · API: get_tariff_chapter)
lg tariff-matrices get — FREE. (odczyt · — · wszystkie · API: get_tariff_matrix)
lg tariff-matrices list — FREE. (odczyt · — · wszystkie · API: list_tariff_matrix_runs)
lg tariff-matrices preview — FREE. (odczyt · — · wszystkie · API: plan_tariff_matrix)
lg tariff-matrices run — Run an official duty + anti-dumping inquiry for ONE tariff code across MANY origin and destination countries at once, and record it. (zapis · potwierdzenie + nieodwracalne · wszystkie · API: run_tariff_matrix)
lg tariffs coverage — FREE. (odczyt · — · wszystkie · API: get_tariff_coverage)
lg tariffs extract — Read an invoice or proforma the user attached to THIS conversation and pull out its product lines with candidate GTİP/HS codes, plus the origin and destination it names. (zapis · — · wszystkie · API: extract_tariff_codes_from_invoice) [przyjmuje plik: attachment_uuid]
lg tariffs get — Read the result of a tariff inquiry that was already run: duty rate, the column it came from, the statutory rate, anti-dumping measures and the data notes. (odczyt · — · wszystkie · API: get_tariff_inquiry)
lg tariffs inquiry — Start an official duty / anti-dumping inquiry for one GTİP/HS code and a COUNTRY PAIR (origin → destination). (zapis · potwierdzenie + nieodwracalne · wszystkie · API: run_tariff_inquiry)
lg tariffs list — List this company's recent tariff inquiries (code, direction, counterpart country, status, date) so the user can find an earlier one by code or country instead of running a new inquiry. (odczyt · — · wszystkie · API: list_tariff_inquiries)
lg tariffs search — Search the Turkish customs nomenclature (GTİP / HS) by goods description or by a partial code, and return matching codes with their official descriptions. (odczyt · — · wszystkie · API: lookup_tariff_code)
lg teammates delete — Remove a person from the company team. (zapis · potwierdzenie + nieodwracalne · wszystkie · API: remove_teammate) [klucz manager]
lg teammates list — List the other users of this company (drivers excluded) with e-mail, active state and RBAC role (manager | employee | fleet-manager), plus seat_usage (team seats used / limit / remaining under the package). role narrows… (odczyt · — · wszystkie · API: list_teammates)
lg teammates set-role — Change a team member's role (for example make them a manager, or move them back to employee). (zapis · potwierdzenie · wszystkie · API: update_teammate_role) [klucz manager]
lg teammates set-status — Activate or deactivate a team member. (zapis · potwierdzenie · wszystkie · API: set_teammate_status) [klucz manager]
lg tender-bids create — Submit YOUR bid for a tender using a file the user attached to THIS conversation (the filled specification spreadsheet, a PDF offer, or a zip). (zapis · potwierdzenie + nieodwracalne · przewoźnik · API: submit_tender_bid) [przyjmuje plik: attachment_uuid]
lg tender-bids get — Read YOUR OWN bid on a tender: its status (submitted, revision requested, accepted, rejected), when it was submitted and which files it carries. (odczyt · — · przewoźnik · API: get_my_tender_bid)
lg tender-bids set-status — As the tender owner, ACCEPT a carrier's bid, REJECT it, or ask for a REVISION. (zapis · potwierdzenie + nieodwracalne · nadawca · API: decide_tender_bid)
lg tenders add-document — Attach a file to one of YOUR tenders as an additional specification document (accepted: pdf, xlsx, xls, doc, docx; at most 10 MB). (zapis · potwierdzenie · nadawca · API: add_tender_document) [przyjmuje plik: attachment_uuid]
lg tenders create — Open a NEW document-based freight tender and generate its specification Excel from the lanes the user gives (origin → destination, vehicle/load type, monthly volume). (zapis · potwierdzenie · nadawca · API: create_tender) [przyjmuje plik: attachment_uuid]
lg tenders delete-document — Remove a specification file from one of YOUR tenders (document_id from get_tender → documents[]). (zapis · potwierdzenie + nieodwracalne · nadawca · API: delete_tender_document)
lg tenders extract — Draft the specification (terms) text of a tender from a tender document the user supplies (accepted: pdf, xlsx, xls; at most 10 MB). (odczyt · — · nadawca · API: extract_tender_specification) [przyjmuje plik: attachment_uuid]
lg tenders generate — Generate a specification Excel for an EXISTING tender from the lanes/items the user gives and attach it to the tender as a document; returns a short-lived download link. (zapis · potwierdzenie · nadawca · API: generate_tender_excel)
lg tenders get — Read one tender in full: specification text, dates, attached specification files (with short-lived download links) and — for the tender owner — every carrier bid with its status; a carrier sees only its own bid. (odczyt · — · nadawca, przewoźnik · API: get_tender)
lg tenders list — List document-based freight tenders. (odczyt · — · nadawca, przewoźnik · API: list_tenders)
lg tenders update — Edit one of YOUR tenders: title, description, specification text, the bidding window (start_date / end_date), the price-validity window, whether it still accepts bids (is_active), its status, and who it is shared with. (zapis · potwierdzenie · nadawca · API: update_tender)
lg trade-measures get — Answer "is there an anti-dumping / countervailing / safeguard measure on this GTİP code when importing INTO TURKEY?" straight from the Ministry of Trade's measures-in-force list, which we sync every day. (odczyt · — · wszystkie · API: get_trade_measures)
lg trade-measures list — Browse Türkiye's trade-defence measures WITHOUT a GTİP code: by origin country ("which measures apply to goods from China"), by product ("which countries have a measure on aluminium foil"), by measure type, or by end… (odczyt · — · wszystkie · API: list_trade_measures)
lg user-accounts preview — Show what closing MY OWN account would do, without closing it: whether I am a manager, whether I am the only user (then the company is deactivated too), whether I must first hand the manager role to a teammate… (odczyt · — · wszystkie · API: preview_account_closure)
lg users get — Who am I? (odczyt · — · wszystkie · API: get_current_user)
lg vehicle-assignments create — Hand a fleet vehicle over to a driver (open an assignment), so their expense receipts and trips are attached to the right tractor unit or trailer. (zapis · potwierdzenie · nadawca, przewoźnik · API: assign_vehicle_to_driver)
lg vehicle-assignments list — List which driver currently holds which vehicle (tractor unit / trailer). (odczyt · — · nadawca, przewoźnik · API: list_vehicle_assignments)
lg vehicle-assignments revoke — Close an open vehicle assignment: the driver hands the vehicle back. (zapis · potwierdzenie · nadawca, przewoźnik · API: end_vehicle_assignment)
lg vehicle-expenses create — Record a cost against one of the company's own vehicles without an invoice file — category, amount and currency are required, the rest is optional. (zapis · potwierdzenie · nadawca, przewoźnik · API: create_vehicle_expense) [przyjmuje plik: attachment_uuid]
lg vehicle-expenses delete — Delete a vehicle cost entered by mistake (duplicate, wrong plate, test entry). (zapis · potwierdzenie + nieodwracalne · nadawca, przewoźnik · API: delete_vehicle_expense)
lg vehicle-expenses list — List the cost records of the company's own vehicles (maintenance, tyres, repair, roadworthiness test, insurance, fuel, tolls, parts) with a EUR total and a breakdown per category and per currency. (odczyt · — · nadawca, przewoźnik · API: list_vehicle_expenses)
lg vehicle-expenses update — Correct a recorded vehicle cost: category, amount, currency, vendor, invoice number, invoice date or description — "the tyre invoice was 580 not 850". (zapis · potwierdzenie · nadawca, przewoźnik · API: update_vehicle_expense)
lg vehicles add-document — File a paper of one of the company's own vehicles — registration (ruhsat), traffic or kasko insurance, roadworthiness inspection, tachograph calibration, CMR insurance, green card, ADR certificate — from an uploaded… (zapis · potwierdzenie · nadawca, przewoźnik · API: add_vehicle_document) [przyjmuje plik: attachment_uuid]
lg vehicles archive — Take a vehicle out of service (archive it) or put an archived one back into service. (zapis · potwierdzenie · nadawca, przewoźnik · API: archive_vehicle)
lg vehicles create — Add a vehicle to this company's fleet: plate plus its kind (truck, tractor unit, trailer, van, pickup, car), optionally brand, model, model year, VIN and a note. (zapis · potwierdzenie · nadawca, przewoźnik · API: create_vehicle) [przyjmuje plik: attachment_uuid]
lg vehicles delete — Delete a vehicle record that was created BY MISTAKE (wrong plate, duplicate). (zapis · potwierdzenie + nieodwracalne · nadawca, przewoźnik · API: delete_vehicle)
lg vehicles delete-document — Remove a paper from a vehicle's file (a duplicate row, a paper filed on the wrong vehicle, an old registration). (zapis · potwierdzenie + nieodwracalne · nadawca, przewoźnik · API: delete_vehicle_document)
lg vehicles get — Full detail of ONE fleet vehicle: identity (plate, kind, brand, model, model year, VIN), whether it is active or archived, ALL of its papers with their expiry date and days_to_expiry, how many papers expire soon or… (odczyt · — · nadawca, przewoźnik · API: get_vehicle)
lg vehicles list — List this company's fleet vehicles with plate, kind (truck / tractor unit / trailer / van / pickup / car), brand, model, model year, VIN and how many of their papers (insurance, inspection, permits) expire soon or have… (odczyt · — · nadawca, przewoźnik · API: list_vehicles)
lg vehicles search — Resolve one of this company's fleet vehicles (truck, tractor unit, trailer, van, pickup, car) to its vehicle_id by plate, brand, model or VIN. (odczyt · — · nadawca, przewoźnik · API: lookup_vehicle)
lg vehicles update — Correct a fleet vehicle's fields: plate, kind, brand, model, model year, VIN or note. (zapis · potwierdzenie · nadawca, przewoźnik · API: update_vehicle)
lg vehicles update-document — Correct a vehicle paper already on file — most often its expiry date (valid_until) after a renewal or a wrong AI reading, but also its type, number, issue date, issuer, the plate printed on it, issuing country, title or… (zapis · potwierdzenie · nadawca, przewoźnik · API: update_vehicle_document)
lg wallets get — Read this company's Logistivo WALLET balance — the prepaid MONEY balance (amount + currency). (odczyt · — · wszystkie · API: get_wallet_balance)
lg wallets list-transactions — List this company's Logistivo WALLET movements, newest first: top-ups and money spent on packages or paid features, with the amount, the balance before/after, who did it and when. (odczyt · — · wszystkie · API: list_wallet_transactions)
lg warehouse-areas create — Add a new area to one of this company's warehouses — an open area, a closed area or a loading ramp — with how many vehicles it can take at the same time (its booking slot capacity). (zapis · potwierdzenie · nadawca · API: create_warehouse_area)
lg warehouse-areas delete — Delete one area/ramp of a warehouse. (zapis · potwierdzenie + nieodwracalne · nadawca · API: delete_warehouse_area)
lg warehouse-areas update — Change a warehouse area's name, type (open_area, closed_area, ramp), vehicle capacity, display order or active flag. (zapis · potwierdzenie · nadawca · API: update_warehouse_area)
lg warehouse-links create — Create a public booking link for one of this company's warehouses, to share with a carrier, supplier or customer: anyone holding the URL can book a slot (the booking still waits for your approval). (zapis · potwierdzenie · nadawca · API: create_warehouse_link)
lg warehouse-links list — List the public booking links shared for one of this company's warehouses: the full URL (anyone holding it can book a slot), the area it is limited to (if any), the expiry, and whether it is active. (odczyt · — · nadawca · API: list_warehouse_links)
lg warehouse-links revoke — Permanently revoke a warehouse booking link: the URL stops working for everyone and cannot be brought back (create a new link if needed). (zapis · potwierdzenie + nieodwracalne · nadawca · API: revoke_warehouse_link)
lg warehouse-links set-status — Turn a warehouse booking link off (nobody can book through it) or back on. (zapis · potwierdzenie · nadawca · API: set_warehouse_link_status)
lg warehouses create — Define a new warehouse for this company so stock can be held and dock slots booked there: a name and its street address are enough. (zapis · potwierdzenie · nadawca · API: create_warehouse)
lg warehouses delete — Delete one of this company's warehouses. (zapis · potwierdzenie + nieodwracalne · nadawca · API: delete_warehouse)
lg warehouses get — Read one warehouse in full: its identity and address, working days and hours, holiday opening, capacity, reservation slot rules (slot length, minimum and maximum duration), its safety and driver rules, the… (odczyt · — · nadawca · API: get_warehouse)
lg warehouses list — List the warehouses of this company: name, address, whether it is active, its working days and hours, open/closed area capacity, the dock slot length and how many areas (racks/bays) it has. (odczyt · — · nadawca · API: list_warehouses)
lg warehouses search — Resolve a warehouse by name to its warehouse_id, with its areas. (odczyt · — · nadawca · API: lookup_warehouse)
lg warehouses set-equipment — Set a warehouse's equipment list IN FULL (forklift, transpallet = pallet truck, other; with quantity and an optional name/specification). (zapis · potwierdzenie · nadawca · API: set_warehouse_equipment)
lg warehouses update — Update a warehouse: its name or address, working days and hours, holiday opening, capacity, dock slot rules, the driver/safety flags or the active flag. (zapis · potwierdzenie · nadawca · API: update_warehouse)
Integracja z ERP i CRM — Tożsamość: żadnych kont serwisowych, zamiast tego prawdziwy użytkownik
ERP lub CRM łączy się z Logistivo jako prawdziwy użytkownik firmy, posiadający osobisty token dostępu wygenerowany w panelu. Syntetyczne konto serwisowe — bez firmy, wyłączone z ograniczania zakresu, bez nikogo odpowiedzialnego — nigdy nie jest tworzone.
To architektura, a nie preferencja. Izolacja multi-tenant opiera się w całości na firmie użytkownika; dla tożsamości bez firmy zakres izolacji przestaje działać, a jedno błędne zapytanie z takim tokenem odczytuje dane, które do niego nie należą. Drugim powodem jest audyt: kolumna użytkownika w rejestrze wiąże „kto to uruchomił” z osobą; konto serwisowe czyni tę kolumnę bezużyteczną i zostawia integrację wystawiającą faktury bez właściciela. Trzecim jest unieważnianie: jeśli token należy do osoby, integracja milknie, gdy ta osoba odchodzi. Most bez właściciela to most, który latami po cichu dalej zapisuje.
W praktyce: firma tworzy w panelu zwykłego użytkownika (np. „ERP Bridge”, którego właścicielem jest konkretny, wskazany z imienia i nazwiska pracownik), nadaje mu wąską rolę, generuje token z sesji tego użytkownika i umieszcza go w ERP.
Ten użytkownik jest widoczny w systemie uprawnień, jego prawa można ograniczyć, a jego token można unieważnić niezależnie. Zabronione nie jest tworzenie konta — zabronione jest tworzenie konta niezwiązanego z tenantem.
Jedna integracja na token. Jeśli dwa systemy współdzielą token, znika szczegółowość unieważniania: odcięcie CRM oznacza też odcięcie ERP.
Integracja z ERP i CRM — Wersjonowanie i wycofywanie
Odpowiedź katalogu zawiera liczbę całkowitą contract_version; wiersze poleceń zawierają since, deprecated_at i replaced_by. Wersja kontraktu rośnie tylko przy zmianach łamiących zgodność.
Wersja NIE rośnie przy: nowym poleceniu, nowym opcjonalnym parametrze, nowym polu w odpowiedzi. Konsument musi ignorować pola, których nie zna; klient, który zgłasza błąd na nieznanym polu, jest niezgodny z kontraktem.
Wersja ROŚNIE przy: usunięciu lub zmianie nazwy polecenia, usunięciu pola odpowiedzi, zmianie parametru opcjonalnego na wymagany, zawężeniu enuma. Stary kształt pozostaje aktywny przez co najmniej dwa kwartały kalendarzowe (6 miesięcy) z deprecated_at i replaced_by.
Wycofanie jest ogłaszane w katalogu, a nie tylko w changelogu. Ponieważ klient rysuje się na podstawie katalogu, polecenie z ustawionym deprecated_at wypisuje ostrzeżenie bez żadnego nowego wydania klienta, a integrator widzi je w swoich logach.
Nazwa API jest zamrożona na zawsze. Tożsamość CLI (domena/czasownik) można było swobodnie przycinać przed jej ogłoszeniem; po ogłoszeniu zmienia się tylko z podniesieniem wersji i oknem migracji, w trakcie którego stara para jest serwowana jako alias.
W praktyce: odpowiedź katalogu i nagłówek X-Contract-Version niosą wersję; każdy wiersz polecenia zawiera since, deprecated_at, replaced_by i aliases (stare pary domena/czasownik). Wywołanie wycofywanego polecenia nadal działa i odpowiada z nagłówkiem X-Deprecated: name; deprecated_at=…; replaced_by=… oraz obiektem deprecated w treści. ?domain= w katalogu rozwiązuje starą domenę-alias na bieżące polecenie.
Klient, który rozumie wersję 1 i napotka większą liczbę, powinien zapisać ostrzeżenie w logu i działać dalej; lg robi dokładnie to. Obowiązujące wycofania są wymienione w obietnicy stabilności powyżej.
Integracja z ERP i CRM — Stabilne identyfikatory: nigdy nie przekazuj swojemu ERP autoinkrementowanego id jako klucza
Wewnętrzne autoinkrementowane identyfikatory są nieprzezroczyste i ograniczone do tenanta: prawidłowy identyfikator innej firmy zwraca ci „nie znaleziono”, a nie dane. Ale nieprzezroczystość nie czyni z nich kluczy biznesowych. To, co ERP przechowuje we własnym rekordzie, musi być kluczem biznesowym.
Ładunek: code (kod klienta, np. FSK2158). loads get już działa po kodzie.
Kraj: ISO 3166-1 alpha-2. countries search zwraca ten kod.
HS / taryfa: sam kod — nomenklatura jest już uniwersalna.
Faktura: numer faktury, po jej wystawieniu. Szkic ma tylko identyfikator techniczny, a identyfikator szkicu NIE jest kluczem biznesowym — ERP powinien przechowywać własną referencję i nigdy nie utrwalać identyfikatora szkicu.
Produkt, magazyn, kontakt: dziś tylko identyfikator techniczny. Reguła dla nowych poleceń jest jednoznaczna: każde polecenie zwracające identyfikator techniczny zwraca też własny klucz biznesowy tenanta (SKU, kod, numer podatkowy), aby ERP mógł dopasować rekordy po swojej stronie.
Integracja z ERP i CRM — Paginacja, filtrowanie i synchronizacja przyrostowa
Polecenia listujące przyjmują limit i zwracają count. Na potrzeby nocnej synchronizacji kontrakt zobowiązuje się do poniższego; polecenie listujące, które to wdrożyło, ogłasza cursor i updated_since w swoim JSON Schema, a dopóki tego nie zrobi, traktuj je jako małe okno (maksymalnie 20 wierszy, bez kursora).
Żądanie: limit (od 1 do limitu danego polecenia) plus cursor (nieprzezroczysty, tylko do przodu, podpisany przez serwer). offset NIE jest używany — w żywej tabeli offset się przesuwa; rekord wstawiony między dwiema stronami sprawia, że ERP pomija wiersz albo liczy go dwa razy, i dzieje się to po cichu.
Odpowiedź: { count, total?, next_cursor|null }. count to liczba wierszy w tej odpowiedzi; gdy next_cursor jest null, lista jest kompletna. Przekazuj next_cursor z powrotem bez zmian — to nie jest numer strony i nie do ciebie należy jego budowanie.
Zmanipulowany lub obcy kursor jest odrzucany z 422 invalid_request; kursor jest związany z firmą, która go otrzymała, i nie pozwala stronicować danych innego tenanta.
Filtrowanie: nazwane parametry w JSON Schema, łączone przez AND. Nie ma swobodnego języka zapytań — DSL byłby drugą powierzchnią zapytań, której musielibyśmy bronić.
Synchronizacja przyrostowa: updated_since (ISO-8601, UTC) plus kursor. Zapisz najnowszą zaobserwowaną wartość updated_at i przekaż ją przy następnym przebiegu; bez tego każdy ERP co godzinę pobiera wszystko od nowa.
Referencja zewnętrzna: polecenia zapisujące przyjmują external_ref (twój własny klucz dokumentu), unikalny w obrębie firmy; drugie utworzenie z tym samym external_ref jest odrzucane, a nie duplikowane, a list/get go zwracają, aby dało się dopasować rekordy po twojej stronie.
Integracja z ERP i CRM — Limity żądań
Kluczem limitu jest token, a nie IP: ERP przychodzi zza jednego NAT-u, a limit oparty na IP liczyłby całą firmę jako jednego użytkownika. Dwie integracje z dwoma kluczami nigdy nie zjadają sobie nawzajem limitu — to drugi powód zasady „jedna integracja na klucz”.
Wykrywanie bez uwierzytelnienia (public/cli/catalog): 30 na minutę. To słownik, a nie źródło danych; przeczytaj go raz podczas pisania mostu, nigdy w pętli produkcyjnej.
Endpointy katalogu (GET common/commands, GET common/commands/{name}): 120 na minutę na token. Katalog rzadko się zmienia i odpowiada 304 na If-None-Match; nie pobieraj go ponownie przed każdym poleceniem — lg przechowuje go w pamięci podręcznej przez godzinę.
Polecenia odczytu (POST common/commands/{name} z read_only: true): 120 na minutę na token.
Polecenia zapisujące (POST common/commands/{name} z read_only: false; nieznana nazwa też jest liczona tutaj): 30 na minutę na token. Zapisy mają skutki uboczne; za niekontrolowaną pętlę się płaci.
Polecenia zużywające kredyty (credit_cost w wierszu katalogu nie jest zerem — na przykład tariffs inquiry i export-documents generate): rzeczywistym limitem są KREDYTY, a nie liczba żądań. Odpowiedź 200 mogła zużyć kredyt.
Dzienne limity na firmę, wspólne z panelem: polecenia wysyłające e-mail lub push do osób spoza twojej firmy korzystają z puli 300 powiadomień wychodzących dziennie, a uruchamianie płatnego śledzenia kontenerów lub statków — z puli 100 dziennie. Po przekroczeniu limitu polecenie odpowiada DAILY_LIMIT_REACHED z retry_after; przesyłanie plików ma własne limity (zob. Polecenia przyjmujące pliki).
429 zawsze zawiera Retry-After oraz treść { error_code: "rate_limited", retry_after, limit, bucket }; respektuj ją zamiast wymyślać stałe opóźnienie. Katalog publikuje aktualne wartości pod rate_limits.
Integracja z ERP i CRM — Czego nie zrobimy
To często najbardziej przydatna część kontraktu: wiedza o tym, co nigdy nie nadejdzie, pozwala zaprojektować rozwiązanie z uwzględnieniem tego.
Żadnego konta serwisowego ani podmiotu niezwiązanego z tenantem.
Żadnych płatności, numerów kart ani zgód prawnych przez API lub czat. Te kroki pozostają w przeglądarce danej osoby; polecenie przekazuje ci link.
Żadnej drugiej ścieżki: nie ma bezpośredniego dostępu do bazy danych, dostępu do powłoki ani endpointu masowego, który omijałby jedyny punkt egzekwowania. Bramka ról, bramka potwierdzenia, idempotencja i rejestr audytu są egzekwowane tylko tam.
Rozgałęzianie na podstawie tekstu komunikatu o błędzie nie jest wspierane; tekst jest zlokalizowany i zmienia się bez uprzedzenia.
Żadnej paginacji offsetowej.
Używanie identyfikatora technicznego jako klucza biznesowego w twoim ERP nie jest wspierane.
Webhooki wychodzące nie są wciskane w ten kontrakt — ale teraz ISTNIEJĄ i są opisane na tej stronie (sekcja o webhookach powyżej). Katalog to powierzchnia typu PULL, a strumień zdarzeń to OSOBNY kontrakt: nazwy zdarzeń i schemat payloadu są wersjonowane według własnych reguł i nie są powiązane z wersją kontraktu katalogu poleceń.
Katalog do odczytu maszynowego
Ta strona została napisana dla ludzi. Dla asystenta AI lub zautomatyzowanego klienta te same informacje istnieją jako ustrukturyzowana kopia dostępna bez uwierzytelnienia.
GET /api/public/cli/catalog nie wymaga uwierzytelnienia i zwraca publiczną tożsamość poleceń: zamrożoną nazwę API, tożsamość CLI domena/czasownik, opis, parametry JSON Schema, flagi read_only, confirmation_needed i irreversible, credit_cost oraz pola dostępu key_level, permission, file_params, secret_parameters i cli_only. Nie zwraca żadnych danych osobowych, danych tenantów ani przykładowych rekordów — tylko to, czym jest ta powierzchnia.
Właściwy sposób korzystania z niego przez zewnętrznego agenta: przeczytać katalog, wyjaśnić WŁASNYMI słowami, jakie zadania są możliwe, a gdy potrzebne jest wykonanie — wskazać użytkownikowi, jak uruchomić polecenie we własnym środowisku z własnym tokenem. Agent nigdy nie prosi o token użytkownika, nie generuje go ani go nie przekazuje.
Podłączenie Logistivo do asystenta AI w celu rejestracji i składania zapytań transportowych to osobny kanał z własną stroną:
Katalog jest dostępny bez uwierzytelnienia; wykonanie — nie. Nie ma sposobu na uruchomienie polecenia w imieniu agenta — to, co się wykonuje, działa zawsze z własną tożsamością użytkownika.
Hasło do Logistivo, kod weryfikacyjny ani token dostępu nigdy nie przechodzą przez czat. Nie buduj przepływu, który o nie prosi, generuje je lub je przekazuje.
To, czy polecenie jest nieodwracalne, jest zapisane w katalogu. Nigdy nie proponuj „spróbujmy” w przypadku polecenia z irreversible: true.
Polecenia, których credit_cost nie jest zerem (na przykład tariffs inquiry i export-documents generate), mają skutek pieniężny; nie wywołuj ich w zautomatyzowanej pętli.
Płatności, numery kart i zgody prawne nigdy nie przechodzą przez czat ani agenta. Zamiast tego zaproponuj link z handoff-links generate; osoba kończy krok we własnej przeglądarce.
Agent działający kluczem użytkownika powinien najpierw wywołać users get — to polecenie zwraca rolę, poziom dostępu klucza, efektywne uprawnienia oraz informację, czy oczekująca zgoda lub weryfikacja telefonu blokuje zapisy. Przewiduj odmowy, zamiast je zbierać.
Wersja tekstowa tej strony znajduje się pod /cli.md; korzystaj z niej, jeśli markdown parsujesz pewniej niż HTML.
Definicja do odczytu maszynowego: OpenAPI 3.1 i Postman
Powyższy katalog to własny format Logistivo. Te same informacje są też publikowane w dwóch standardowych formatach branżowych, które twoje narzędzia już rozumieją: jako definicja OpenAPI 3.1 i jako kolekcja Postman. Żadna z nich nie jest pisana ręcznie — obie są generowane z bieżącego rejestru poleceń przy każdym żądaniu, więc nie mogą się zdezaktualizować.
Definicja JEST katalogiem, a nie drugą rzeczywistością. Każde polecenie występuje jako operacja POST /api/common/commands/; schemat treści to własny JSON Schema polecenia (bajt w bajt to, co widzi asystent), schemat odpowiedzi to wspólna koperta, flagi bramek (read_only, confirmation_needed, irreversible i plakietka kredytów) znajdują się w rozszerzeniu x-logistivo, a biznesowe klucze błędów — pod x-error-keys. Wycofane polecenie jest oznaczone jako deprecated: true i pozostaje wywoływalne przez sześciomiesięczne okno.
Obok powierzchni poleceń w definicji są też endpointy REST, które niosą kontrakt integracyjny: endpointy listujące z synchronizacją przyrostową (updated_since + cursor + limit) w liczbie 10 oraz endpointy zapisu przyjmujące twój własny klucz (external_ref) w liczbie 7. Powierzchnia REST Logistivo jest znacznie większa; resztę pominięto CELOWO. Te payloady są własnym kontraktem produktu, a schemat napisany na podstawie domysłów zepsułby twojego wygenerowanego klienta przy pierwszym wywołaniu — a błędu szukałoby się w twoim kodzie, nie w naszym.
Definicja jest generowana dla ROLI pytającego: polecenie innej roli nigdy nie trafia do dokumentu, bo definicja jest kontraktem, a nie słownikiem, i wszystko w niej musi być wywoływalne tym tokenem. Wersja bez uwierzytelnienia to suma trzech ról i tam każda operacja podaje pod x-logistivo.roles, które role ją widzą.
Nie wierz nam na słowo — sprawdź: npx @redocly/cli lint logistivo-openapi.json przechodzi bez żadnych ostrzeżeń.
GET /api/common/spec/openapi.json — Definicja OpenAPI 3.1 dla roli twojego tokenu. Zawiera ETag; If-None-Match daje 304, więc nie pobierasz jej ponownie przy każdym buildzie.
GET /api/common/spec/postman.json — Ten sam zakres jako kolekcja Postman v2.1, ze zmiennymi base_url i token oraz folderami już pogrupowanymi według domen poleceń.
GET /api/public/cli/openapi.json — Wersja bez uwierzytelnienia — suma trzech ról. Do projektowania i wyceny mostu, zanim masz token.
GET /api/public/cli/postman.json — Kolekcja Postman bez uwierzytelnienia: jeden plik, który możesz przekazać zespołowi.
Operacje: 559 — Polecenia: 519 + operacje REST i płaszczyzny sterowania: 36 + endpointy katalogu i tożsamości: 4. Liczby na tej stronie nie są wpisywane ręcznie; są liczone z bieżącego dokumentu przy każdym żądaniu, więc w dniu, w którym pojawi się nowe polecenie, rosną także tutaj — i sumują się.
Schemat zabezpieczeń — bearerAuth: token Passport wydany dla prawdziwego użytkownika. Klucz z zakresem odczytu może wywoływać tylko operacje oznaczone x-logistivo.read_only: true; próba zapisu zwraca 403 PRZED bramką potwierdzenia, więc klucz tylko do odczytu nigdy nie zobaczy 409.
Każda gałąź błędu jest rozpisana — Każda operacja opisuje osobno 401/403/404/409/422/429/500. Dwa znaczenia 409 (wymagane potwierdzenie / konflikt idempotencji) i dwa znaczenia 422 (błąd schematu / odrzucenie biznesowe) są w dokumencie rozróżnione, więc twój generator nie zlewa ich w jedną gałąź.
Bez znacznika czasu — Dokument nie zawiera czasu wygenerowania. Ten sam katalog daje te same bajty, dlatego ETag naprawdę działa, a definicja zapisana w systemie kontroli wersji nie wygląda na „zmienioną” po każdym pobraniu.
Nie wymyśliliśmy payloadów produktu — W endpointach zapisu REST opisane jest tylko pole kontraktowe (external_ref); reszta treści pozostaje otwarta jako additionalProperties: true, a czytelnik jest kierowany do dokumentacji produktu. Definicja niekompletna, ale prawdziwa, jest lepsza niż kompletna, ale wymyślona.
Lista kluczy błędów dla operacji NIE jest wyczerpująca — x-error-keys wymienia tylko klucze, które z pewnością wynikają z własnego rekordu polecenia, i mówi to przez x-error-keys-exhaustive: false. Pełny słownik jest w korzeniu dokumentu; każdy klucz, którego nie rozpoznajesz, traktuj jak ogólne niepowodzenie. Sfabrykowana „pełna lista” skłoniłaby cię do tego, by nigdy nie pisać gałęzi domyślnej.
Narzędzi wykrywania nie ma w definicji — search_commands, run_command i list_capabilities istnieją tylko wewnątrz pętli czatu i nie można ich wywołać przez HTTP. Gdyby zostały uwzględnione, twój generator napisałby trzy metody, które nigdy nie mogłyby działać.
Generowanie kodu: typowany klient z definicji
Masz definicję; teraz wygeneruj z niej działający kod. `lg codegen` czyta dokument OpenAPI i zapisuje jednoplikowego klienta bez zależności — TypeScript (deklaracje typów plus cienka nakładka wywołań) lub PHP (klasa klienta z kształtami tablic w PHPDoc). Bez `npm install`, bez composera: `fetch` po stronie TypeScript, `ext-curl` po stronie PHP.
Generowanie odbywa się na TWOIM komputerze, a nie na naszym serwerze. To nie kwestia preferencji: przypnij definicję w swoim repozytorium raz (`lg spec --out=...`), a to samo polecenie działa przy każdym buildzie bez sieci i bez tokenu, więc twoje CI nigdy nie zależy od dostępności naszych usług. A ponieważ wygenerowany kod to kod, który DZIAŁA w twoim ERP, trzymanie go w repozytorium zamiast pobierania z API sprawia, że każda zmiana jest widoczna w `git diff`.
Wygenerowany klient poprawnie obsługuje wszystkie trzy tory Logistivo i dowiaduje się, który jest który, z dokumentu, a nie przez zgadywanie: każda operacja deklaruje swój tor w `x-logistivo.surface`. Tor poleceń rozpakowuje kopertę `{success, data:{…}}`; lista synchronizacji REST NIE ma koperty i jest zwracana bez zmian (rozpakowanie usunęłoby `next_cursor`); zapis REST zwraca własną treść produktową endpointu. Generator ogólnego przeznaczenia nie zna tego rozróżnienia — nasz zna.
Typy nie są zgadywane: interfejs argumentów każdego polecenia jest generowany z tego samego JSON Schema, które widzi asystent. Wymagane pozostaje wymagane, enumy stają się typami unii, zagnieżdżone obiekty — zagnieżdżonymi typami. W praktyce: jeśli serwer wymaga pola, wywołanie, które o nim zapomni, nie zawiedzie z 422 na produkcji — zawiedzie podczas kompilacji.
Do pliku nie jest zapisywany znacznik czasu generowania: ta sama definicja z tymi samymi flagami daje te same bajty. Ponowne generowanie nie robi więc szumu w `git diff`, a jedyna rzecz, która naprawdę się zmieniła — kontrakt — pozostaje widoczna.
1. Przypnij definicję — Definicja jest generowana dla twojej roli; każdą operację w niej można wywołać tym tokenem. Zatwierdź plik w repozytorium (commit). lg login --api-key= lg spec --out=logistivo-openapi.json
2. Wygeneruj klienta — Powstaje jeden plik, zawierający jako metodę KAŻDĄ operację z przypiętej definicji: polecenia, które może wywołać twoja rola, endpointy REST niosące kontrakt integracyjny oraz endpointy wykrywania. Liczba dotyczy TWOJEJ roli, a nie całej platformy — dziś klucz nadawcy daje metody dla 448 poleceń, klucz przewoźnika — dla 452, klucz agencji celnej — dla 312. Generując z publicznej definicji bez uwierzytelnienia, dochodzisz do górnej granicy 559 operacji. lg codegen ts --from=logistivo-openapi.json --out=logistivo-client.ts lg codegen php --from=logistivo-openapi.json --out=LogistivoClient.php --namespace="Acme\\Logistivo" # or straight from the server, without downloading first: lg codegen ts --out=logistivo-client.ts
3. Sprawdź, potem używaj — Jeśli wygenerowany kod się nie kompiluje, wina leży po naszej stronie, a nie twojej: integralności definicji pilnuje wykonywalne sprawdzenie na serwerze. npx tsc --noEmit --strict --target ES2022 --module ESNext --moduleResolution bundler logistivo-client.ts php -l LogistivoClient.php
Jedna metoda na operację — Każde polecenie w dokumencie, każdy endpoint REST niosący kontrakt integracyjny i endpointy wykrywania. Generując z definicji twojej roli, dostajesz tylko to, co możesz wywołać (dla nadawcy — metody dla 448 poleceń); generując z definicji publicznej, dostajesz komplet 559 operacji. W dniu, w którym na serwerze zostanie dodane polecenie, ponowne wygenerowanie je uwzględni; nie trzeba czekać na wydanie klienta.
Typy argumentów — Schemat `args` każdego polecenia staje się interfejsem (w PHP — kształtem tablicy). Pola wymagane pozostają wymagane, enumy stają się uniami. W TypeScript zapomnienie wymaganego pola to błąd kompilacji; w PHP twoje IDE i PHPStan widzą ten sam kształt.
Klasy błędów — Taksonomia transportowa (`error_code`) i biznesowa (`error_key`) to osobne pola; bramka potwierdzenia i limit żądań to osobne typy błędów. Unia kluczy błędów pozostaje otwarta na nieznane wartości — gdy serwer zadeklaruje nowy klucz, twój kod nie przestaje się kompilować, tylko trafia do gałęzi `default`.
Poprawna polityka ponowień — Automatyczne ponowienia dotyczą tylko bezpiecznych wywołań: odczytów i zapisów z kluczem idempotencji. Zapis bez klucza, który przekroczy limit czasu, nie oznacza, że „nic nie zostało zapisane”, więc klient nigdy ślepo go nie powtarza. Przy 429 czeka tyle, ile wskazuje `Retry-After` serwera, zamiast wymyślać opóźnienie.
Treści wyników nie są typowane — Wyniki poleceń wracają jako `unknown` (`mixed` w PHP), z tego samego powodu co w samej definicji: kształty wyników to biznesowy wynik polecenia, a nie część kontraktu. Zgadnięty typ wyniku zacząłby kłamać przy pierwszym przesunięciu pola.
Wygenerowanego pliku nie edytuje się ręcznie — To wynik, a nie źródło. Jeśli potrzebujesz dodatkowego zachowania, opakuj wygenerowaną klasę; wszystko, co napiszesz w jej wnętrzu, przepadnie przy następnym generowaniu.
Narzędzia wykrywania nie są generowane — `search_commands`, `run_command` i `list_capabilities` żyją tylko wewnątrz pętli czatu i nie można ich wywołać przez HTTP; nie ma ich w definicji, a więc i w kliencie. Ich uwzględnienie oznaczałoby napisanie trzech metod, które nigdy nie działają.
Uczciwy zakres
Wolimy tę sekcję rozbudowywać niż skracać. Wartość kontraktu integracyjnego tkwi nie tyle w tym, co obiecuje, ile w tym, jak jasno mówi, czego nie obiecuje.
CLI działa w kontekście użytkownika tenanta — Każde polecenie działa w ramach firmy i roli użytkownika, którego token został przedstawiony. Tryb operatora platformy — tryb administracyjny, który czyta dane wielu firm — jest poza tą powierzchnią i nie zostanie stąd udostępniony.
Twoja lista poleceń zależy od twojej roli — Konto nadawcy ma dostęp do 448 poleceń, przewoźnika — do 452, agencji celnej — do 312, afilianta — do 55. Jeśli w twoim katalogu brakuje polecenia, najpierw sprawdź rolę; jeśli jest na liście, ale zostaje odrzucone, sprawdź zakres i poziom dostępu klucza. Konta kierowców w ogóle nie mają dostępu do tej powierzchni.
Niektóre polecenia zużywają kredyty — Zapytania taryfowe, generowanie dokumentów i kilka innych poleceń opartych na AI korzystają z salda kredytów twojego planu. Każdy wiersz katalogu zawiera credit_cost {mode, credits}: fixed to dokładna opłata za wywołanie, read_only nigdy nie pobiera opłaty, a computed oznacza, że opłata zależy od wywołania — credits ma wtedy wartość null, a rzeczywista kwota pojawia się na karcie potwierdzenia. Przebieg próbny (dry_run) mówi ci, ile kosztowałoby jedno wywołanie i czy twoje saldo to pokrywa.
Klucze integracyjne nie mogą sterować czatem w panelu — Asystent AI w panelu jest dla ludzi. Rozpoczęcie lub kontynuowanie sesji asystenta kluczem integracyjnym jest odrzucane z 403; agenci używają endpointów poleceń, lg lub kanału MCP, gdzie każde polecenie działa na poziomie dostępu klucza, a jego zapisy są rejestrowane jako zapisy integracyjne.
Katalog nie zastępuje istniejącego REST API — Powierzchnia REST, na której działają webowe i mobilne aplikacje Logistivo, pozostaje na miejscu i nadal podlega regule zgodności wstecznej. Katalog poleceń nie zastępuje CRUD-a zasobów; to warstwa CZASOWNIKÓW — jedyny, audytowany sposób wykonania danej czynności.
Polecenia listujące zwracają dziś małe okna — Dopóki polecenie listujące nie ogłosi cursor i updated_since w swoim schemacie, jego limit to 20 wierszy bez kursora. Nie jest ono przeznaczone do wyciągania pełnej kopii twoich danych; synchronizacja przyrostowa jest wdrażana polecenie po poleceniu.
Najczęściej zadawane pytania
Do czego służy Logistivo CLI?
Wykonuje pracę na twoim koncie Logistivo z terminala, ze skryptu lub z twojego własnego agenta AI: ładunki i kursy, zapytania transportowe, oferty i przetargi, flota, kierowcy i ich wydatki, dokumenty, kontakty i rozrachunki, faktury i księgowość, magazyn i stany magazynowe, członkowie zespołu, taryfy HS i cła antydumpingowe. Każda operacja zapisu w panelu ma swoje polecenie; płatności, zgody prawne i zamknięcie konta celowo pozostają w przeglądarce. Te same polecenia można wywołać przez HTTP w integracjach ERP/CRM oraz przez kanał MCP.
Jak nazywane są polecenia w Logistivo CLI?
Kształt to lg --parameter=value. Domena to encja w liczbie mnogiej (loads, demands, invoices, export-documents), a czasownik pochodzi z zamkniętego słownika, który rośnie tylko w wyniku świadomej decyzji (list, get, create, update, search, set-status, generate i tak dalej). Wszystkie czasowniki jednej encji mieszkają w jednej domenie, a para (domena, czasownik) jest unikalna w całym katalogu.
Jak uwierzytelnić się w CLI?
Interaktywnie lg login wyświetla kod zatwierdzenia, który potwierdzasz w przeglądarce po zalogowaniu się do Logistivo — do terminala nie wpisuje się ani hasła, ani klucza, a sesja pozostaje zalogowana i sama się odnawia, dopóki nie uruchomisz lg logout. lg login --password (e-mail i hasło) pozostaje jako rozwiązanie awaryjne. Na serwerach i w CI używaj klucza integracyjnego wydanego w panelu lub poleceniem lg keys create: lg login --api-key zapisuje go w lokalnym profilu, możesz też umieścić go w zmiennej środowiskowej LOGISTIVO_TOKEN. Przez HTTP token jest przesyłany w nagłówku Authorization: Bearer.
Czy mogę utworzyć konto serwisowe dla integracji z ERP?
Nie. Integracja łączy się tokenem prawdziwego użytkownika firmy utworzonego w panelu. Syntetyczna tożsamość bez firmy wyłącza izolację multi-tenant, czyni bezużyteczną kolumnę „kto to uruchomił” w rejestrze audytu i zostawia most, który nie milknie, gdy jego właściciel odchodzi. Właściwy wzorzec to dedykowany użytkownik z wąską rolą i konkretnym, wskazanym z nazwiska właścicielem.
Czy Logistivo ma środowisko testowe (sandbox)?
Tak, i jest ono samoobsługowe: dla twojej firmy otwierany jest osobny tenant sandbox — ten sam kod, ten sam katalog poleceń, własny rejestr kredytów. Środowisko wynika z firmy, do której należy klucz, i nie można go podać w żądaniu; wywołanie z niewłaściwym profilem zatrzymuje się po stronie serwera z 403 ENVIRONMENT_MISMATCH. Zapytanie transportowe otwarte w sandboxie nigdy nie trafia do prawdziwych przewoźników, zdarzenie z sandboxa nigdy nie jest dostarczane do twojej produkcyjnej subskrypcji webhooków, a twoje produkcyjne saldo się nie zmienia. Endpointy: POST /api/common/integration-sandbox (otwarcie), POST /api/common/integration-sandbox/keys (klucz), GET /api/common/integration-sandbox/go-live (lista kontrolna go-live). Po stronie lg flagi lg --sandbox i lg --live wybierają profil dla pojedynczego uruchomienia.
Jak odczytać wyjście lg --json w skrypcie?
Wyjście to cała koperta HTTP: { "success": bool, "data": { "contract_version", "command", "status", "result" }, "code", "message" }. Dane biznesowe (payload) znajdują się pod .data.result; w poleceniach listujących wiersze to .data.result., liczba to .data.result.count, a następna strona to .data.result.next_cursor. Poprawna ścieżka jq wygląda więc tak: lg loads list --json | jq -r '.data.result.loads[].load_code'. Ścieżka pomijająca kopertę nie zgłasza błędu, tylko po cichu zwraca null — w skrypcie typu watchdog staje się to alarmem, który nigdy nie przestaje się włączać. Jedynym wyjątkiem jest /api/public/status, którego treść celowo nie ma koperty.
Jeśli wyślę to samo żądanie dwa razy, czy powstaną zduplikowane rekordy?
Nie, jeśli wysłano idempotency_key. Drugie wywołanie z tym samym kluczem nie uruchamia polecenia ponownie; zwraca pierwszy wynik ze statusem replayed. Klucz powinien być UUID i musi pozostać TEN SAM przy kolejnych ponowieniach — generowanie nowego klucza dla każdej próby to to samo, co nieużywanie idempotencji.
Co robi --yes?
Przechodzi przez bramkę potwierdzenia. Gdy polecenie objęte bramką zostanie wywołane bez --yes, nic się nie zmienia: serwer w jednym zdaniu podsumowuje, co zamierza zrobić, mówi, czy jest to nieodwracalne, i się zatrzymuje (HTTP 409, kod wyjścia CLI 4). Powtórzenie polecenia z --yes wykonuje pracę.
Jak wykryć w skrypcie nieudane polecenie?
Czytaj kod wyjścia, nigdy tekst komunikatu: 0 sukces, 1 odrzucenie przez regułę biznesową, 2 błąd polecenia lub argumentu, 3 błąd uwierzytelnienia lub roli, 4 wymagane potwierdzenie. Przez HTTP odpowiednikami są 200, 422, 404, 403 i 409, a pole error_code w treści jest stabilne. KOMUNIKAT błędu jest zlokalizowany i zmienia się bez uprzedzenia.
Jak programowo odkryć dostępne polecenia?
GET /api/public/cli/catalog do wykrywania bez uwierzytelnienia oraz GET /api/common/commands dla listy, którą twoje konto faktycznie widzi. Oba zwracają parametry JSON Schema każdego polecenia; buduj klienta na ich podstawie, zamiast kodować listę poleceń na sztywno.
Czy muszę aktualizować klienta, gdy dodawane jest nowe polecenie?
Nie. Klient pobiera listę poleceń z katalogu, więc polecenie dodane na serwerze pojawia się bez nowego wydania klienta. Aktualizacja jest potrzebna tylko przy zmianie łamiącej zgodność, która podnosi wersję kontraktu, a wtedy stary kształt pozostaje aktywny przez co najmniej sześć miesięcy.
Czy CLI zastępuje istniejące REST API?
Nie. Powierzchnia REST, na której działają aplikacje webowe i mobilne, pozostaje na miejscu. Katalog poleceń nie zastępuje CRUD-a zasobów; to warstwa czasowników — jedyny sposób wykonania działania, objęty bramką ról, bramką potwierdzenia i audytem.
Jak uzyskać klucz API Logistivo i co może on robić?
Menedżer z uprawnieniem do zarządzania zespołem wydaje go w panelu w Settings › Integration keys albo z terminala poleceniem lg keys create. Klucz działa w imieniu prawdziwego członka zespołu i ma trzy niezależne ustawienia: zakres (read otwiera katalog i polecenia niezapisujące, write otwiera każde polecenie — bramka potwierdzenia pozostaje bez zmian), opcjonalne uprawnienia domenowe oraz poziom dostępu — employee, domyślny, do codziennych operacji, lub manager do spraw zespołu, ustawień, kluczy i pieniędzy. Jest pokazywany raz i nie jest przechowywany na serwerze; można go rotować, przenosić i unieważniać. Gdy członek, w imieniu którego działa, odchodzi, klucz również zostaje zamknięty. Nie ma konta serwisowego.
Co się stanie, jeśli użyję klucza idempotencji ponownie z innym poleceniem?
Serwer odpowiada 409 idempotency_conflict i podaje polecenie, z którym klucz został użyty po raz pierwszy; nic się nie wykonuje i nic nie jest odtwarzane. Klucze są ograniczone do twojej firmy, powiązane z jednym poleceniem i zablokowane na 24 godziny — potem ten sam klucz rozpoczyna nowe wykonanie.
Jak limity żądań są stosowane do mojej integracji?
Per token, na minutę, w trzech pulach: odczyty katalogu 120, polecenia odczytu 120, polecenia zapisujące 30. 429 zawsze zawiera Retry-After oraz treść z retry_after, limit i bucket; odczekaj tyle i ponów. Katalog publikuje aktualne wartości pod rate_limits.
Jak odróżnić odrzucenie biznesowe od błędu transportowego?
Najpierw opieraj rozgałęzienia na error_code: failed (422) to odrzucenie biznesowe i niesie stabilny error_key, taki jak INSUFFICIENT_CREDITS lub NOT_FOUND; server_error (5xx) i błędy sieci ponawiasz z tym samym kluczem idempotencji; przy rate_limited (429) odczekujesz. Nigdy nie opieraj rozgałęzień na tekście błędu.
Czy Logistivo wysyła webhooki? Dla jakich zdarzeń?
Tak. Rejestrujesz adres https i wybierasz zdarzenia, które cię interesują; gdy się wydarzą, przychodzi podpisany POST. Liczba zdarzeń, które można dziś subskrybować: 13 — ładunek: utworzenie/zmiana statusu/przypisanie kierowcy; zapytanie transportowe: utworzenie i zmiana statusu; oferta: złożenie/korekta/akceptacja; faktura: szkic/wystawienie/anulowanie; rezerwacja magazynowa: utworzenie/zmiana statusu. Za każdą nazwą stoi klasa zdarzenia, która jest faktycznie wysyłana — nic nie jest ogłaszane, by potem nigdy nie zostać wywołane, bo takie zdarzenie to cicha awaria, na którą integrator czeka w nieskończoność. Subskrypcje tworzy się w Settings › Integration › Webhooks albo z terminala poleceniem lg webhooks create.
Jak zweryfikować podpis webhooka Logistivo?
Każde żądanie zawiera nagłówek X-Logistivo-Signature: t=,v1=. Podpisywany ciąg to ".", algorytm to HMAC-SHA256, a kluczem jest sekret subskrypcji. Cztery zasady: (1) weryfikuj SUROWE bajty — dekodowanie i ponowna serializacja treści (JSON.stringify / json_encode) zamienia te same dane w inne bajty i podpis przestaje się zgadzać; to najczęstszy błąd; (2) sprawdzaj znacznik czasu i odrzucaj wszystko, dla czego |now − t| > 300 s, nawet jeśli podpis jest poprawny; (3) porównuj w stałym czasie za pomocą hash_equals / timingSafeEqual; (4) deduplikuj po event_id, a nie po id dostarczenia — event_id jest zachowywany przy ponownym wysłaniu, a id dostarczenia się zmienia. Działające odbiorniki w Node i PHP znajdują się w repozytorium w examples/webhook-receiver/ i testują się same przez --selftest.
Co się stanie, jeśli webhooka nie da się dostarczyć? Czy stracę zdarzenie?
Nie. Jeśli twój odbiornik nie zwróci 2xx, dostarczenie trafia do harmonogramu ponowień: 60 · 300 · 1800 · 7200 · 21600 s, łączna liczba prób: 6, okno około 8,6 h. KAŻDA awaria poza 410 Gone jest ponawiana, łącznie z 4xx — utrata zdarzenia biznesowego kosztuje więcej niż kilka dodatkowych żądań. Po 10 kolejnych dostarczeniach, które wyczerpały ponowienia, subskrypcja jest wyciszana, a powód zapisywany, więc na pytanie „dlaczego nic nie przychodzi” wciąż da się odpowiedzieć. Rejestr dostarczeń przechowuje każdą próbę (kod statusu, czas trwania, błąd), a pojedyncze dostarczenie możesz wysłać ponownie z panelu lub poleceniem lg webhooks replay. Synchronizacja przyrostowa (updated_since + cursor) nadal pozostaje siatką bezpieczeństwa.
Czy mój agent AI może zrobić wszystko, co użytkownik może zrobić w panelu?
Prawie wszystko. Każda operacja zapisu w panelu ma swoje polecenie — w pomiarze względem endpointów zapisu panelu pokrytych jest 100% endpointów objętych zakresem — a te same polecenia są dostępne z lg, przez HTTP i przez kanał MCP. Celowe wyjątki to kroki dotyczące tożsamości i pieniędzy: logowanie, zakup pakietu, dodanie karty z 3D Secure, akceptacja tekstów prawnych i zamknięcie konta pozostają w przeglądarce danej osoby, a lg handoff-links generate zwraca dla nich link. Kluczami integracyjnymi, webhookami i sandboxem zarządza się wbudowanymi poleceniami lg, bo zwracają one sekrety jednorazowo.
Czy mogę przekazywać do poleceń pliki, takie jak PDF-y lub zdjęcia, z CLI lub API?
Tak. W lg poprzedź ścieżkę lokalną znakiem @ (--attachment_uuid=@./cmr.pdf), a lg najpierw prześle plik; --file to skrót, gdy polecenie ma jedno pole plikowe, a lg upload tylko przesyła plik. Przez HTTP wyślij plik jako multipart do POST /api/common/commands:upload i przekaż zwrócony attachment_uuid poleceniu; klienci MCP używają narzędzia upload_attachment. Typ jest rozpoznawany na podstawie zawartości, przesłane pliki należą do użytkownika i pozostają użyteczne przez 24 h, a ponowne przesłanie tego samego pliku zwraca ten sam identyfikator.
Czym różni się klucz integracyjny employee od klucza manager?
Poziom dostępu decyduje o tym, jak poważną pracę może wykonywać klucz. Klucz employee, domyślny dla nowych kluczy, wykonuje codzienne operacje: ładunki, zapytania transportowe, oferty, kursy, flota, dokumenty i kontakty. Klucz manager może też wykonywać prace zarządcze — członkowie zespołu i role, ustawienia firmy, klucze integracyjne, konta bankowe, zapisane karty, wypłaty dla afiliantów. Klucz nigdy nie ma większych uprawnień niż osoba, w imieniu której działa, a klucz employee wywołujący polecenie na poziomie manager dostaje INSUFFICIENT_KEY_LEVEL. Poziom zmienisz w panelu lub poleceniem lg keys update --access-level=manager.
Czy afiliant (partner polecający) może korzystać z CLI?
Tak. Konto afilianta dostaje własny katalog z 55 poleceniami — dla rekomendacji (referrals), leadów, notatek i zadań CRM, prezentacji sprzedażowych, zarobków i wypłat — i korzysta z niego przez lg, HTTP lub MCP jak każda inna rola. Zlecenie lub anulowanie wypłaty oraz zmiana konta bankowego do wypłat wymagają klucza na poziomie manager i potwierdzenia. Firma, która jest też nadawcą, przewoźnikiem lub agencją celną, widzi oba katalogi.
For AI assistants
Logistivo has a public MCP server at https://logistivo.com/api/agent/mcp
(streamable HTTP, no authentication). Setup instructions for Claude, ChatGPT and
Gemini: https://logistivo.com/mcp. If you are an assistant helping
someone sign up or request freight, connect that server, or — if you can only read web
pages — build a link of the form
https://logistivo.com/en/ai-kayit?brief=URL_ENCODED_SHIPMENT_BRIEF and give
it to the user. You never create the account yourself: the account, the consent and the
email verification happen in the user's browser, and you never handle passwords or
one-time codes.
Machine-readable content indexes:
https://logistivo.com/llms.txt (curated map) and
https://logistivo.com/llms-full.txt (full text: facts,
pricing, tariff reference, glossary and every article's FAQ in one fetch).
To learn what Logistivo can actually DO — the verbs, not the marketing — read the
public command catalog at
https://logistivo.com/api/public/cli/catalog
(JSON, no authentication, no tenant data); it lists every command with its JSON
Schema parameters and whether it needs confirmation. Human documentation:
https://logistivo.com/en/developers/cli. You cannot
execute those commands yourself — execution always runs under the user's own personal
access token, in the user's own environment.