하나의 명령 카탈로그가 세 가지 표면에 공급됩니다: lg 터미널 클라이언트, 대시보드 안의 AI 어시스턴트, 그리고 외부 AI 어시스턴트가 연결하는 채널입니다. 기능은 한 번 작성되면 세 곳 모두에 나타나며, 이제 패널의 모든 쓰기 작업에 명령이 있으므로 여러분의 스크립트와 자체 AI 에이전트가 팀이 화면에서 하는 일을 수행할 수 있습니다. 결제, 법적 동의, 계정 해지는 의도적으로 브라우저에 남겨 둡니다. 이 페이지는 계약입니다. 아래 명령 표는 사람이 직접 작성한 것이 아니라, 요청이 있을 때마다 실시간 명령 레지스트리에서 생성됩니다.
Logistivo CLI란 무엇입니까?
Logistivo CLI(lg)는 Logistivo 계정의 업무 — 화물과 운행, 운송 요청, 입찰과 텐더, 차량과 운전기사, 문서, 거래처와 거래처 원장, 인보이스와 회계, 창고와 재고, 팀 구성원, 관세율표 — 를 터미널, 스크립트 또는 자체 AI 에이전트에서 실행하는 명령줄 클라이언트입니다. 명령은 클라이언트에 내장되어 있지 않습니다. 클라이언트는 서버에서 명령 카탈로그를 가져와 그것을 바탕으로 스스로를 그려 냅니다. 같은 명령은 아무것도 설치하지 않고 HTTP로도 호출할 수 있으며 — ERP 및 CRM 연동이 사용하는 경로가 바로 이것입니다 — 외부 AI 어시스턴트가 연결하는 MCP 채널을 통해서도 호출할 수 있습니다.
하나의 명령 형태: lg --parameter=value. 현재 카탈로그에는 125개 도메인에 걸쳐 519개 명령이 있으며, 단일 역할이 보는 가장 넓은 목록은 112개 도메인에 걸친 452개 명령입니다.
패널의 모든 쓰기 작업에는 명령이 있습니다 — 패널의 쓰기 엔드포인트와 대조해 측정한 결과, 범위 내 엔드포인트의 100%가 커버됩니다. 결제(3D Secure), 법적 동의, 계정 해지는 의도적으로 브라우저에 남겨 두며, 이 경우 명령은 대신 링크를 반환합니다.
문서나 사진을 받는 명령도 브라우저 밖에서 동작합니다: --attachment_uuid=@./cmr.pdf 라고 쓰면 lg가 먼저 파일을 업로드합니다. HTTP에서는 /api/common/commands:upload 경로에 업로드하고 반환된 attachment_uuid 값을 전달합니다.
연동 키에는 접근 수준이 있습니다: 일상 업무용 employee(새 키의 기본값), 팀·설정·키·금전 업무용 manager. 키는 자신이 대리하는 사람보다 더 많은 권한을 결코 갖지 않습니다.
플래그는 결코 임의로 만들어지지 않습니다: 모든 플래그는 해당 명령 자체의 JSON Schema에 있는 파라미터 이름이며, 그 타입과 필수 여부도 마찬가지로 스키마에서 옵니다.
쓰기 명령은 확인을 요청하며, 되돌릴 수 없는 명령은 확인 없이 절대 실행되지 않습니다(HTTP 409, CLI 종료 코드 4).
재시도해도 중복이 생기지 않습니다: idempotency_key 값을 담은 호출은 최대 한 번만 실행됩니다.
모든 실행은 하나의 감사 원장에 기록됩니다 — 터미널에서 왔는지, 채팅에서 왔는지, 어시스턴트에서 왔는지가 기록에 남습니다.
현재 운영 중인 것과 준비 중인 것
이 섹션은 의도적으로 페이지 맨 위에 있습니다. 연동 문서가 저지를 수 있는 가장 값비싼 실수는 아직 열리지 않은 엔드포인트를 열린 것처럼 설명하는 것입니다: 연동 개발자가 코드를 작성하고, 엔드포인트는 404 응답을 반환하며, 신뢰는 돌아오지 않습니다.
계약이 고정되어 있으므로, 오늘 작성한 연동 코드는 나머지 부분이 열리더라도 계속 동작합니다. 알지 못하는 필드는 무시해야 합니다. 이 규칙이 있기에 우리는 깨뜨리지 않고 추가할 수 있습니다.
명령 카탈로그와 식별자 표 — 모든 명령의 공개 도메인/동사 식별자는 고정되어 있으며, 계약 버전은 모든 카탈로그 응답과 X-Contract-Version 헤더에 1로 게시됩니다. 이 페이지의 표는 실시간 레지스트리에서 생성됩니다: 서버에 추가된 명령은 여기에 저절로 나타나고, 제거된 명령은 사라집니다.
인증 없는 탐색 엔드포인트 — GET /api/public/cli/catalog — 명령 이름, 도메인/동사 식별자, 설명, JSON Schema 파라미터, 게이트 플래그, 버전 관리 필드(since, deprecated_at, replaced_by, aliases). 인증이 필요 없습니다: 토큰 발급은 연동 결정 이전이 아니라 그 이후에 오는 단계입니다. 응답에는 테넌트 데이터가 전혀 포함되지 않습니다.
인증이 필요한 카탈로그 및 실행 엔드포인트 — GET /api/common/commands, GET /api/common/commands/{name}, 그리고 POST /api/common/commands/{name}. 역할 게이트, 확인 게이트, 멱등성, 감사 원장은 채팅과 터미널도 거쳐 가는 단일 적용 지점에 있습니다.
패널 커버리지: 모든 쓰기 작업에 명령이 있습니다 — 125개 도메인에 걸친 519개 명령을 패널의 쓰기 엔드포인트와 대조했습니다: 범위 내 모든 엔드포인트는 명령(엔드포인트의 미러 또는 동일한 공유 서비스)으로 뒷받침되며, 입증되지 않은 것은 하나도 없습니다. 의도적으로 범위에서 제외된 것: 브라우저에 남는 3D Secure 결제, 법적 동의, 계정 해지, 로그인; lg 내장 명령인 키·웹훅·샌드박스 관리; 그리고 운전기사 앱 자체의 엔드포인트.
프리플라이트(dry_run): 실행하지 않고 미리 보기 — 요청 본문에 dry_run: true를 넣으면 명령은 실행되지 않습니다: 검증, 역할/스코프 게이트, 대상 해석, 크레딧 계산이 모두 수행되고 미리 보기가 반환됩니다. 아무것도 기록되지 않고, 크레딧이 소비되지 않으며, 멱등성 키도 소모되지 않습니다. 배치 엔드포인트도 배치 단위로 이를 받습니다. 프리플라이트는 명령의 핸들러에 절대 진입하지 않습니다. 이 기능이 출시되었을 때, 당시 카탈로그의 모든 쓰기 명령에 걸쳐 실행한 178 건의 프리플라이트에서 쓰기 구문은 단 하나도 발생하지 않았습니다.
연동 키 — 실제 팀 구성원을 대리하여 동작하는 API 키로, 패널에서 또는 lg keys create 명령으로 발급합니다: 읽기/쓰기 스코프, 접근 수준(기본값 employee, 또는 manager), 수명, 마지막 사용, 교체(rotate), 이전(transfer), 폐기(revoke). lg login --api-key, lg whoami, 그리고 서버 측에서 폐기하는 lg logout 명령이 이를 기반으로 만들어졌습니다.
샌드박스 — 운영 환경을 건드리지 않고 쓰기를 리허설 — 회사마다 동일한 명령 카탈로그를 갖춘 별도의 샌드박스 테넌트가 있습니다. 셀프서비스로 열 수 있으며 자체 키를 발급합니다. 크레딧, 마켓플레이스, 웹훅 라우팅은 두 환경 간에 분리되어 있습니다. 환경은 키의 회사에서 도출되며 요청으로 지정할 수 없습니다.
버전 관리, 오류 분류 체계, 멱등성, 속도 제한 — 명령은 since / deprecated_at / replaced_by / aliases 필드를 가지며, 지원 중단(deprecated)된 명령은 X-Deprecated 헤더와 함께 응답합니다. 비즈니스 실패는 전송 계층의 error_code 옆에 안정적인 error_key 값을 함께 담으며, 키 사전은 카탈로그에 게시됩니다. 멱등성 키는 여러분의 회사 범위로 한정되고, 하나의 명령에 묶이며, 24시간 동안 잠깁니다. 속도 제한(rate limit)은 토큰 단위로 세 개의 버킷에 적용되며, 모든 429 응답에는 Retry-After 헤더가 포함됩니다.
발신 웹훅: 무언가 발생하면 POST 요청 — 서명된 푸시가 13개 이벤트에 대해 운영 중입니다. 구독은 패널에서 또는 lg webhooks 명령으로 관리합니다. 서명에는 자체 타임스탬프가 포함되고, 재시도 일정은 60 · 300 · 1800 · 7200 · 21600초이며, 음소거(muting) 사유는 항상 기록됩니다. 모든 이벤트 이름은 실제로 발송되는 이벤트 클래스로 뒷받침됩니다 — 발표만 하고 보내지 않는 것은 없습니다. 풀(pull) 경로(updated_since + cursor)는 제거되지 않았습니다: 푸시는 그것을 대체한 것이 아니라 그 옆에 추가되었습니다.
파일을 받는 명령 — 33개 명령이 문서나 사진을 받습니다 — CMR, 인보이스, 차량 등록증, 팔레트 사진. POST /api/common/commands:upload 경로에 한 번 업로드하거나 --attachment_uuid=@./file.pdf 형식으로 lg에 맡긴 뒤, 반환된 attachment_uuid 값을 전달하십시오. MCP 클라이언트는 upload_attachment 도구를 사용합니다. 파일 형식은 내용에서 감지되며, 업로드한 파일은 24시간 동안 사용할 수 있습니다.
lg 터미널 클라이언트 — MIT 라이선스로 npm에 게시되어 있습니다: `npm install -g @lgstv/lg`로 설치하거나, `npx @lgstv/lg`로 설치 없이 실행하십시오. 의존성이 없는 단일 파일이며, HTTP 표면이 공개되어 있으므로 이것 없이도 연동할 수 있습니다. 브라우저에서 확인하는 승인 코드로 로그인한 뒤, 세션을 스스로 갱신하며 로그인 상태를 유지합니다. 로컬 파일을 대신 업로드하고(@path, --file, lg upload), 연동 키를 관리하며(lg keys), 명령줄에서 비밀 값을 절대 받지 않고, Retry-After 헤더를 준수하며, 5xx 오류를 동일한 멱등성 키로 재시도하고, 지원 중단된 명령과 더 새로운 계약 버전에 대해 경고합니다.
증분 동기화: 커서 페이지네이션과 updated_since — 아래 계약(limit + 불투명한 서명 cursor, next_cursor, updated_since)은 고정되어 있으며 목록 명령 전반에 단계적으로 적용되고 있습니다. 특정 목록 명령이 JSON Schema에 cursor 및 updated_since 파라미터를 명시하기 전까지는 그 명령을 작은 창으로 취급하십시오: 상한 20행, 커서 없음.
무엇이 다른가: 클라이언트는 명령을 알지 못하고, 명령을 그려 냅니다
이 페이지의 나머지를 의미 있게 만드는 단 하나의 결정이 바로 이것입니다. 일반적인 CLI에서는 명령이 클라이언트 안에 있지만, Logistivo에서는 서버에 있습니다.
전통적인 방식에서는 서버가 기능을 얻으면 클라이언트는 새 릴리스가 필요하고 사용자는 그것을 설치해야 합니다. 그 사이에 양쪽은 서로 다른 것을 알게 되며 — 이것이 연동에서 가장 조용한 실패 유형입니다: 스크립트는 실행되고, 종료 코드는 0이며, 명령은 그저 서버가 할 수 있는 일을 설명하지 못합니다.
Logistivo에서 명령의 정의는 하나의 레코드입니다: 이름, 하는 일, JSON Schema 파라미터, 어떤 역할이 볼 수 있는지, 확인이 필요한지, 그리고 효과를 되돌릴 수 있는지. lg는 시작할 때 그 카탈로그를 가져와 도움말 텍스트, 플래그, 입력 검증을 그로부터 생성합니다. 서버에 명령이 추가되는 순간 lg는 그것을 알게 됩니다 — 클라이언트 업데이트 없이.
같은 카탈로그가 대시보드의 AI 어시스턴트와 외부 AI 어시스턴트가 연결하는 채널에도 공급됩니다. 기능은 한 번 작성되어 세 곳에 나타나며, 세 곳 모두 같은 역할 게이트, 같은 확인 게이트, 같은 감사 원장을 거칩니다. 별도의 CLI 명령 목록은 없습니다. 만약 있었다면 세 표면은 6개월 안에 조용히 서로 어긋났을 것입니다.
버전 차이가 없습니다 — 클라이언트가 아는 명령 목록은 구조상 서버가 가진 목록과 같습니다. "어느 lg 버전에 이 명령이 있나요?"라는 질문은 존재하지 않습니다.
플래그 이름을 추측하지 않습니다 — 명령의 플래그는 정확히 그 JSON Schema의 파라미터 이름입니다. 명령이 무엇을 받는지 알아내는 방법은 문서를 읽는 것이 아니라 카탈로그를 읽는 것이며 — 카탈로그는 항상 최신입니다.
CLI의 크기는 계정의 크기와 같습니다 — 카탈로그는 역할별로 필터링됩니다: 여러분의 역할이 볼 수 없는 명령은 목록에 절대 나타나지 않습니다. 운송사 계정은 452개 명령, 화주는 448개, 관세사는 312개를 보며, 어필리에이트(추천 파트너) 계정은 자체 세트인 55개 명령을 봅니다.
문서가 뒤처질 수 없습니다 — 이 페이지의 명령 표는 같은 레지스트리에서 나옵니다. 사람이 현실과 동기화해야 하는 목록은 어디에도 없습니다.
명명 규칙 — 명령 이름은 어떻게 늘어나는가
카탈로그는 커질 것입니다. 새 명령은 즉흥적으로 이름 붙지 않으며, 여섯 가지 규칙이 적용됩니다. 이 규칙을 여기에 공개하는 이유는 이것이 여러분의 연동 코드가 수년간 쓰게 될 이름들이고, 그 예측 가능성이 여러분에게 가치가 있기 때문입니다.
도메인은 복수형 엔터티입니다 — loads, demands, invoices, export-documents. 두 단어로 된 도메인은 kebab-case로 씁니다. 유일한 예외는 불가산 명사입니다: stock은 절대 복수형으로 쓰지 않습니다. "stocks"는 다른 것을 뜻하기 때문입니다.
한 엔터티의 모든 동사는 하나의 도메인에 있습니다 — loads 도메인에는 화물에 작용하는 모든 동사가 있습니다: create, list, get, update, set-status, assign-driver, list-problems, archive 등. 동사마다 새 도메인(load-statuses, load-drivers)을 연다면 사용자는 같은 엔터티를 세 곳에서 찾아다녀야 할 것입니다.
동사는 도메인으로 새어 나가지 않습니다. 도메인은 '변경되는' 대상입니다 — 운전기사를 배정하면 바뀌는 것은 운전기사가 아니라 화물이므로 lg loads assign-driver 명령입니다. 간접 목적어(-driver)는 도메인이 아니라 항상 동사에 붙습니다.
하위 리소스는 자체 도메인을 갖지 않습니다 — 인보이스 라인과 문서 항목은 단독으로 나열할 수 없으며, 소유자를 통해 다룹니다 — lg invoices add-line, lg export-documents add-item. 하나의 테스트로 결정됩니다: 그것을 독립적으로 list 또는 get 할 수 없다면 도메인이 아닙니다.
범위 좁히기는 새 동사가 아니라 플래그입니다 — lg fleet-documents list --days=30 이 올바른 형태입니다. 기간은 이미 파라미터이므로 별도의 "list-expiring" 동사는 없습니다. 한정된 동사는 반환하는 행이 도메인 엔터티가 아닐 때만 사용합니다: loads list-problems 는 화물이 아니라 문제 플래그를 반환합니다.
(도메인, 동사) 쌍은 카탈로그 전체에서 고유합니다 — 역할이 결코 겹치지 않는 두 명령이라도 마찬가지입니다. 같은 쌍이 두 명령에 주어진다면, 여러분의 연동 코드는 하나의 이름을 보고 있는데 CLI는 누가 호출했는지에 따라 서로 다른 것을 실행하게 됩니다.
커버리지: 패널의 모든 것을 명령으로
많은 팀이 Logistivo를 자체 AI 에이전트나 자동화 하네스에 연결하며, 에이전트는 작업을 끝까지 마칠 수 있을 때만 쓸모가 있습니다. 그래서 규칙은 간단합니다: 사무실 사용자가 패널에서 바꿀 수 있는 것은 무엇이든 명령으로도 바꿀 수 있습니다 — 같은 역할 게이트, 같은 확인 게이트, 같은 감사 원장 뒤에서.
이것은 주장이 아니라 측정입니다. 패널 뒤의 모든 쓰기 엔드포인트를 명령 레지스트리와 대조하며, 어떤 명령이 그 엔드포인트를 자신의 HTTP 미러로 선언하거나 같은 공유 서비스를 호출할 때만 커버된 것으로 셉니다. 범위 내 쓰기 엔드포인트의 100%가 커버되며, 입증되지 않은 것은 하나도 없습니다. 제외된 모든 엔드포인트에는 서면 사유가 있습니다 — 신원 및 결제 단계, 연동 컨트롤 플레인, 운전기사 앱 자체의 엔드포인트, 클라이언트 텔레메트리, 호출자가 없는 죽은 사본 — 그리고 연동 개발자에게 중요한 것들은 아래에 나열되어 있습니다.
파일을 받는 명령도 같은 규칙을 따릅니다: 표의 33개 명령이 문서나 사진을 받으며, 모두 lg, HTTP, MCP에서 동작합니다("파일을 받는 명령" 참조).
관리 업무도 더 강한 키 뒤에서 커버됩니다: 표의 62개 명령 — 팀 구성원과 역할, 회사 설정, 은행 계좌, 저장된 카드, 연동 키 — 에는 manager 수준 연동 키가 필요합니다. 기본값인 employee 수준 키는 일상 업무를 실행하며, 이런 명령은 INSUFFICIENT_KEY_LEVEL 오류로 거부됩니다.
어필리에이트(추천 파트너) 계정은 자체 카탈로그를 갖습니다: 20개 도메인에 걸친 55개 명령 — 추천, 리드, CRM 메모와 작업, 영업 자료, 수익과 지급, 그리고 모든 역할이 가진 계정 및 팀 명령. 어필리에이트 전용 명령은 세 가지 패널 역할을 나열하는 아래의 공개 표에는 없습니다. 어필리에이트 계정은 GET /api/common/commands 엔드포인트와 lg commands 명령에서 그 명령들을 봅니다. 어필리에이트이면서 동시에 화주, 운송사 또는 관세사인 회사는 두 세트를 모두 봅니다.
에이전트는 lg users get(API 이름 get_current_user)으로 시작해야 합니다: 역할, 사용 중인 키의 접근 수준, 실효 권한, 그리고 대기 중인 법적 승인이나 인증되지 않은 전화번호가 현재 쓰기를 막고 있는지를 반환합니다 — 그래서 에이전트는 거부를 하나씩 겪는 대신 미리 예측할 수 있습니다.
커버리지는 명령 레지스트리와 패널의 쓰기 엔드포인트를 비교하는 보고서로 측정됩니다. 명령 없이 추가된 패널 엔드포인트는 그 보고서에 입증되지 않은 것으로 나타납니다. 명령으로 도달할 수 없는 패널 작업을 발견하면 지원팀에 알려 주십시오.
1. 링크 요청하기 — 당사자 자신의 브라우저 세션에서 이루어져야 하는 작업은 명령이 아니지만, 명령 표면은 그것을 알고 있습니다. lg handoff-links generate(API 이름 get_browser_handoff_link)는 여러분의 역할이 허용하는 목적에 대해 logistivo.com 링크를 반환합니다: package_purchase, payment_cards, legal_documents, integration_keys, affiliate_demo_accounts, account_close. 무료이고, 아무것도 쓰지 않으며, 링크에는 비밀이 담기지 않습니다 — 당사자는 평소처럼 로그인합니다.
2. 당사자에게 전달하기 — 링크를 사용자에게 보여 주거나 여러분 자신의 채널로 보내십시오. 당사자는 그곳에서 단계를 마칩니다: 패키지의 계약 승인과 3D Secure 결제, 카드 추가, 대기 중인 법적 문서 승인, 비밀 값이 한 번만 표시되는 API 키 발급, 또는 자신의 계정 해지.
3. 결과를 명령으로 읽기 — 단계가 끝나면 그 결과는 다시 명령에서 보입니다: 패키지와 크레딧 잔액, 저장된 카드(마스킹되어 마지막 네 자리만 표시), 키 목록의 새 키. 에이전트는 채팅에서 카드 번호, 결제, 동의를 결코 받지 않습니다.
결제와 3D Secure — 패키지 구매나 업그레이드, 카드 추가에는 브라우저에서의 3D Secure가 필요합니다. 명령은 패키지와 가격을 나열하고, 잔액과 그 이력을 읽고, 저장된 카드(마스킹)를 나열하며, 기본 카드를 설정하고 카드를 제거합니다. 구매 자체는 핸드오프 링크를 거칩니다.
법적 동의 — 법적 문서 승인은 당사자가 브라우저에서 합니다. lg users get 명령은 승인이 대기 중임을 알려 주지만, 어떤 명령도 승인을 대신할 수 없습니다.
계정 해지, 로그인, 비밀번호 — 자신의 계정 해지, 로그인, 비밀번호 변경은 신원 관련 단계이며 브라우저에 남습니다. lg user-accounts preview 명령은 계정 해지가 무엇을 의미하는지를 실제로 해지하지 않고 보여 줍니다.
연동 키, 웹훅, 샌드박스 — 이들을 관리하면 터미널에서 한 번만 표시되어야 하는 비밀 값이 반환되므로, 카탈로그 명령이 아니라 자체 HTTP 엔드포인트 위의 lg 내장 명령(lg keys, lg webhooks, lg sandbox)입니다. 카탈로그에는 비밀 값이 없는 두 개의 키 명령만 있습니다: integration-keys list와 integration-keys revoke.
대시보드 어시스턴트 채팅 — 연동 키로는 대시보드 안의 AI 어시스턴트 채팅을 구동할 수 없습니다. 키로 실행을 시작하거나 이어 가면 403 응답을 받습니다. 에이전트는 대신 명령 엔드포인트, lg 또는 MCP 채널로 연결합니다 — 그곳에서는 각 명령이 키의 접근 수준으로 실행되고 그 쓰기는 연동 쓰기로 기록됩니다.
운전기사 앱 — 운전기사 계정에는 명령 카탈로그가 없으며, 운전기사 앱은 자체 엔드포인트를 유지합니다. 사무실 사용자는 운전기사, 그들의 문서, 경비, 운행을 명령으로 관리합니다.
설치와 인증
lg는 의존성이 없는 단일 파일 Node 스크립트(Node 18+)이며, npm에 @lgstv/lg로 게시되어 있습니다. 패키지는 동일한 두 명령 lg와 logistivo를 설치합니다 — 여러분의 머신에서 lg가 이미 별칭(alias)으로 쓰이고 있다면 logistivo를 사용하십시오. 단일 파일이므로 lg.mjs를 고객의 ERP 서버에 복사해도 동작합니다. ERP/CRM 연동을 만드는 데 클라이언트가 필요하지는 않습니다 — 같은 명령을 HTTP로 사용할 수 있습니다.
1. 설치 — 필요한 것은 Node 18 이상뿐이며, 다른 의존성은 없습니다. 전역으로 설치하거나 npx로 설치 없이 실행하십시오.
2. 승인 코드로 로그인하기 — lg login 명령은 짧은 승인 코드를 표시하고 브라우저에서 logistivo.com/connect 주소를 엽니다. SSH 환경이나 CI에서, 또는 --no-browser 플래그를 쓰면 주소만 출력하며, 그 주소는 휴대폰을 포함한 어떤 기기에서든 열 수 있습니다. 그곳에서 평소처럼 로그인하고, 페이지의 코드가 터미널의 코드와 같은지 확인한 뒤, '읽기 전용' 또는 '읽기 및 작업 수행' 접근을 선택하고 승인하십시오. 터미널에는 비밀 값을 전혀 입력하지 않습니다: 비밀번호도, 키도, 일회용 코드도 없습니다. 이후 세션은 그 컴퓨터에서 로그인 상태로 유지됩니다 — 터미널을 닫아도 로그아웃되지 않으며, lg가 액세스 토큰이 만료되기 전에 스스로 갱신합니다. lg logout 명령은 서버에서도 세션을 종료하며, 패널의 Settings › Integration keys › AI and CLI connections에서 세션을 제거할 수도 있습니다. lg login --password(이메일과 비밀번호)는 대체 수단으로 계속 제공됩니다. lg 0.11 이상이 필요합니다.
3. 서버와 CI용: 승인 코드가 아니라 키 — 서버나 CI 작업에는 브라우저에서 코드를 승인할 사람이 없습니다. 패널(Settings › Integration keys)에서 또는 lg keys create 명령으로 키를 발급하고 — 필요하면 좁은 범위만 가진 전용 팀 구성원을 대리하도록 — LOGISTIVO_TOKEN 변수에 넣거나 lg login --api-key 명령으로 저장하십시오. 이 변수가 설정되어 있는 동안 설정 파일은 결코 읽히지 않습니다. 자세한 내용: "API 키로 연결하기" 섹션.
4. 확인하고 카탈로그 둘러보기 — lg commands 명령은 여러분의 역할이 볼 수 있는 모든 명령을 도메인별로 묶어 나열합니다. lg help 은 그 도메인의 동사를 출력하고, lg help 는 한 명령의 전체 파라미터 목록을 타입 및 필수 여부와 함께 출력합니다. 이 텍스트는 어느 것도 클라이언트 안에 있지 않습니다 — 모두 카탈로그에서 옵니다. 목록은 역할에 따라 달라진다는 점을 기억하십시오: 한 도메인의 동사는 운송사와 화주에게 같지 않습니다(예를 들어 loads set-status는 운송사 카탈로그에만 있습니다). 동사가 보이지 않으면 설치를 확인하기 전에 역할부터 확인하십시오.
키를 버전 관리, CI 로그 또는 채팅 창에 절대 넣지 마십시오. 승인 코드나 연동 키로 로그인했다면 lg logout 명령은 서버에서도 해당 세션을 종료합니다. 비밀번호 세션(lg login --password)에서는 '로컬' 사본만 삭제하며 그 사실을 명시적으로 알려 줍니다. 감사 원장은 인수를 저장하지만, 이름에 token, password, IBAN, card 또는 OTP가 들어간 모든 필드와 명령이 비밀로 선언한 모든 파라미터를 ***로 마스킹합니다.
LOGISTIVO_TOKEN — 개인 액세스 토큰. 설정되어 있는 동안 설정 파일은 결코 읽히지 않습니다 — CI와 서버에서 권장되는 방식입니다.
LOGISTIVO_BASE_URL — 서버 루트. 기본값은 https://logistivo.com 입니다. 자체 환경을 가리키는 경우에만 변경하십시오. --base-url 플래그는 단일 명령에 대해 같은 일을 합니다.
LOGISTIVO_HOME — 설정 파일과 카탈로그 캐시를 위한 디렉터리. 기본값은 ~/.logistivo 입니다. 한 머신에서 두 계정으로 작업한다면 분리하십시오.
LOGISTIVO_PROFILE — 어떤 프로필로 실행할지 지정합니다. `lg profile use`는 지속적인 선택이고, 이 변수는 한 번의 실행용이며 CI에서 실서비스(live) 프로필과 샌드박스 프로필을 전환하는 가장 짧은 방법입니다. 알 수 없는 프로필 이름은 조용히 무시되지 않고 오류가 됩니다.
NO_COLOR — 설정하면 ANSI 색상이 출력되지 않습니다(`--no-color` 플래그의 영구적인 형태). 로그 파일이나 CI 출력에 기록하는 브리지에서는 켜 두십시오. 색상 이스케이프 시퀀스는 나중에 그 로그를 읽는 도구를 망가뜨립니다.
클라이언트 사용성
이 기능들은 `lg` 클라이언트의 일상적인 사용을 더 쉽게 만듭니다. 어느 것도 HTTP 계약을 바꾸지 않습니다 — HTTP로 직접 연동한다면 이 섹션은 건너뛰십시오.
여러 환경과 키 — 스테이징과 운영, 또는 화주용과 운송사용 브리지를 별도의 프로필로 유지하십시오. 프로필 목록은 토큰을 절대 출력하지 않으며, 각 행에는 토큰의 sha256 지문이 표시됩니다. 명령 카탈로그는 프로필, 호스트, 토큰별로 캐시되므로 두 역할이 서로의 명령 목록을 보는 일은 결코 없습니다.
증분 동기화: lg sync — 쿡북의 동기화 루프를 명령 하나로 실행합니다: 엔터티별 워터마크, cursor와 함께 쓰는 updated_since, JSONL 출력, 5분의 안전 여유. 첫 백필(backfill)에는 --full을 사용하십시오. 이 명령은 읽기 전용이며 --write 플래그는 없습니다. lg sync --list는 여러분의 역할에서 동기화 가능한 엔터티를 카탈로그로부터 도출합니다.
오류 경험과 셸 자동 완성 — 422 응답에서 클라이언트는 거부된 필드를 여러분이 입력한 플래그 이름으로 알려 주고, 안정적인 error_key 값과 그에 대한 카탈로그 자체의 설명을 함께 보여 줍니다. 409 응답에서는 바로 쓸 수 있는 --yes 명령줄을 출력하고, 429 응답에서는 Retry-After 시간만큼 기다립니다. 셸 자동 완성은 도메인, 동사, 플래그, enum 값을 다루며 오프라인에서도 동작합니다.
비밀 파라미터는 절대 명령줄에 올라가지 않습니다 — 몇몇 명령은 비밀 값을 받습니다 — 예를 들어 Paraşüt 회계 연동을 연결하려면 그 시스템의 클라이언트 자격 증명과 비밀번호가 필요합니다. lg는 이런 값을 플래그로 절대 받지 않습니다. 셸 기록과 ps 출력에 남게 되기 때문입니다: 화면에 표시하지 않고 입력받거나, ---file=PATH 또는 stdin(---file=-)에서 읽으며, 메모리에만 보관합니다. 필수 파라미터가 비밀인 명령은 lg에서만 실행됩니다: 채팅, MCP 또는 lg batch 안에서 호출하면 SECRET_REQUIRES_CLI 오류로 거부됩니다. 감사 원장은 그 값을 항상 ***로 기록합니다.
API 키로 연결하기
ERP, CRM, 스크립트 또는 AI 에이전트는 패널에서 또는 lg keys create 명령으로 발급한 연동 키로 Logistivo에 연결합니다. 키는 실제 팀 구성원을 대리하여 동작합니다: 그 사람의 역할이 명령 목록을 결정하고, 키의 접근 수준이 작업의 무게를 결정하며, 그 사람이 팀을 떠나면 키도 함께 사라집니다. 합성 "서비스 계정"은 없으며 앞으로도 없을 것입니다 — 멀티테넌트 격리는 사용자에 묶여 있고, 소유자 없는 브리지는 수년간 조용히 계속 쓰기를 하는 종류의 브리지입니다.
1. 패널에서 키 발급하기 — Settings › Integration keys › New key. 이름을 지정하고("ERP 야간 동기화"), 스코프와 접근 수준을 고르고, 필요하면 수명을 줄이십시오. 키는 그 화면에서 한 번만 표시되며, 서버는 키를 저장하지 않습니다. 분실하면 Rotate로 새 키를 발급하십시오 — 이전 키는 즉시 무효가 됩니다.
2. 터미널에서 연결하기 — lg login --api-key 명령은 키를 검증하고, 신원과 스코프를 출력하며, 명령 카탈로그를 내려받습니다. lg whoami 명령은 여러분이 어떤 사용자, 회사, 역할, 스코프로 실행 중인지 서버에 묻습니다. lg logout 명령은 승인 코드 세션을 서버에서 종료하는 것과 마찬가지로 서버에서도 키를 폐기합니다(비밀번호 세션의 lg logout만은 그렇게 할 수 없습니다).
3. 또는 순수 HTTP — 키는 Authorization: Bearer 헤더로 전달되는 액세스 토큰이며 세 개의 명령 엔드포인트에 직접 사용할 수 있습니다. 서버나 CI에서는 LOGISTIVO_TOKEN 변수에 넣으십시오. 이 변수가 설정되어 있는 동안 설정 파일은 결코 읽히지 않습니다.
4. 또는 터미널에서 키 관리하기: lg keys — lg keys 명령은 패널 화면의 터미널 버전입니다: 같은 엔드포인트, 같은 게이트(팀 관리 권한, 그리고 키로 호출할 때는 manager 수준 키). create, rotate, transfer는 새 토큰을 한 번 반환합니다: --save-profile=NAME 플래그를 쓰면 토큰은 곧바로 로컬 프로필에 들어가고 절대 출력되지 않습니다. 그렇지 않으면 lg가 한 번 출력합니다. --json 모드에서는 --show-secret을 추가한 경우에만 토큰이 포함되며, 두 플래그 중 어느 것도 없는 --json 호출은 요청을 보내기 전에 거부되므로 토큰이 스크립트 출력에 조용히 들어갈 수 없습니다. rotate, transfer, revoke는 확인(--yes)을 요청합니다. 키는 정확한 이름이나 uuid로 지정하며, 추측으로 지정하는 일은 없습니다. 접근 수준은 교체되거나 이전된 키에 변경 없이 이어집니다.
스코프는 명령 카탈로그뿐 아니라 API 표면 전체에 강제됩니다: 읽기 전용 키는 읽기 요청(GET/HEAD/OPTIONS)을 통과시키고, 그 밖의 모든 쓰기 요청은 403 forbidden 응답을 받습니다. 의도적인 예외가 두 가지 있으며 둘 다 더 세밀한 게이트로 보호됩니다: 명령 실행 엔드포인트(쓰기를 하지 않는 명령도 POST 메서드로 호출되므로, 판단은 명령 자체의 read_only 플래그에서 옵니다)와 키가 자기 자신을 폐기하는 경우(lg logout, 읽기 전용 키에도 허용). 스코프, 도메인 권한 부여, 접근 수준은 세 개의 독립적인 축이며 모두 통과해야 합니다: 읽기 키는 manager 수준이라도 쓸 수 없고, employee 쓰기 키는 팀을 관리할 수 없으며, loads:write 도메인 권한 부여는 관리 작업을 열어 주지 않습니다. 필요를 충족하는 가장 낮은 권한의 구성원을 대리하도록 키를 발급하십시오: 애초에 어떤 레코드를 볼 수 있는지는 역할이 결정합니다.
read — 명령 카탈로그와 쓰기를 하지 않는 명령(list, search, preview). 쓰기 명령은 확인 게이트 이전에 403 forbidden 응답을 반환합니다. 읽기 전용 키는 409 응답을 볼 일조차 없습니다. 야간 동기화와 보고에 알맞은 선택입니다.
write — 모든 명령. 확인이 필요한 명령은 여전히 409 응답으로 확인을 요청합니다. confirm: true(CLI에서는 --yes)는 이전과 똑같이 동작합니다. 스코프가 확인 게이트를 느슨하게 만드는 일은 결코 없습니다.
employee — 모든 새 키의 기본값. 일상 업무: 화물, 운송 요청, 입찰, 운행, 차량 및 차량 문서, 문서, 거래처 — 관리 권한이 필요 없는 모든 명령과 차량 관련 권한. 그 이상이 필요한 명령은 422 응답으로 error_key INSUFFICIENT_KEY_LEVEL 및 required_key_level: manager 값을 반환하고, 대응하는 REST 엔드포인트는 같은 키와 함께 403 응답을 반환합니다. ERP 야간 동기화, 텔레매틱스 브리지, 운영 스크립트에 알맞은 수준입니다.
manager — 키가 대리하는 사람이 할 수 있는 모든 것, 관리 업무 포함: 팀 구성원과 역할, 회사 설정, 연동 키, 은행 계좌와 그 검증, 저장된 카드, 회사 간 관계, 어필리에이트 지급. manager 키는 그 사람에게 없는 권한을 결코 추가하지 않습니다 — 팀 관리 권한이 없으면 여전히 팀을 관리할 수 없습니다. 접근 수준이 도입되기 전에 있던 키는 manager 키이므로, 이전과 정확히 똑같이 동작합니다.
연동 하나에 키 하나 — CRM과 ERP가 키를 공유하면 하나를 끊는 것이 다른 하나도 끊는 것이 됩니다. 브리지마다 자체 키를 주십시오. 어차피 목록에는 이름으로 표시됩니다.
교체(Rotate) — 새 토큰을 발급하고 이전 토큰을 즉시 폐기합니다. 남은 수명은 유지됩니다. 유출이 의심될 때와 정기적으로 사용하십시오. 연동은 새 토큰으로 갱신될 때까지 401 응답을 받습니다.
폐기(Revoke) — 키가 영구적으로 닫힙니다. 되돌릴 수 없으므로 필요하면 새 키를 발급하십시오. 키가 대리하는 구성원이 팀에서 제거되거나 비활성화되면 키는 저절로 사라집니다.
수명과 한도 — 기본 유효 기간은 180 일입니다. 생성 시 줄일 수는 있지만 늘릴 수는 없습니다. 사용자 한 명은 최대 10개의 활성 키를 가질 수 있습니다. 마지막 사용 시각은 목록에서 볼 수 있으며, 한 번도 사용되지 않은 키는 그 사실을 명시합니다.
관리 주체 — 발급, 교체, 이전, 폐기는 팀 관리 권한을 가진 관리자에게 열려 있으며 — 팀 구성원을 추가하거나 제거하는 것과 같은 게이트입니다 — 연동 키로 수행할 때는 그 키가 manager 수준이어야 합니다. 관리자는 다른 구성원을 대리하는 키를 발급할 수 있습니다. 브리지에는 좁은 범위만 가진 전용 구성원을 권장합니다.
처음 10분: 패널에서 첫 호출까지
연동에서 가장 값비싼 시간은 처음 10분입니다. 아래 네 단계는 그 경로를 순서대로 보여 줍니다. 같은 순서가 패널에 마법사(Settings › Integration › Setup wizard)로 있으며, 마법사는 여기에 설명된 엔드포인트를 정확히 그대로 호출합니다. 마법사에 접근할 수 없는 개발자도 이 섹션을 읽으면 같은 곳에 도달합니다.
네 단계 중 어느 것도 "보냈다"로 끝나지 않습니다. 키가 정말로 동작하는지는 요청 원장이 답하고, 웹훅이 정말로 도착하는지는 전달 원장이 답합니다. 둘 다 패널과 lg에서 열려 있습니다. 한 번도 측정되지 않은 설정은 그저 동작한다고 믿어지는 설정일 뿐입니다.
1. 무엇을 할지 결정하기 — 스코프부터 정하십시오 — 키가 무엇을 볼 수 있는지 나중에 정하는 일은 없습니다: 스코프는 발급할 때 선택합니다. 축은 두 가지입니다. 거친 스코프(read / write)는 "쓸 수 있는가"에만 답합니다. 세밀한 스코프(도메인 권한 부여: loads:read, invoices:write)는 어떤 도메인을 건드릴 수 있는지를 말하며, 설정되는 순간 키는 fail-closed가 됩니다 — 선택하지 않은 모든 도메인과 어떤 도메인에도 대응하지 않는 모든 엔드포인트는 403 응답을 반환합니다. 패널의 도메인 목록은 사람이 작성한 목록이 아닙니다. 여러분 역할의 실시간 명령 카탈로그에서 도출되며, 각 도메인이 몇 개의 명령과 REST 엔드포인트를 여는지 보여 줍니다. 명령 카탈로그, "나는 누구인가"(current), "로그아웃" 엔드포인트는 항상 스코프에서 면제됩니다: 키는 언제나 자기 자신을 설명하고 닫을 수 있어야 합니다. 세 번째 축은 접근 수준입니다: employee(기본값)는 일상 업무를 실행하고, manager는 팀, 설정, 키, 금전 업무도 합니다. 브리지가 관리 업무를 하지 않는다면 employee를 선택하십시오.
2. 키 발급하기 — 토큰은 한 번만 표시됩니다 — Settings › Integration › New key. 이름을 지정하고("ERP 야간 동기화"), 키가 대리할 사용자와 접근 수준을 고르고, 원하면 수명을 줄이십시오. 원시 토큰은 그 응답에서만 반환됩니다. 서버는 토큰을 저장하지 않으며 패널에 "다시 보기"는 없습니다. 분실하면 교체(rotate)하여 새 토큰을 받으십시오. 이전 토큰은 즉시 무효가 됩니다. 토큰을 버전 관리, CI 로그 또는 채팅 창에 절대 넣지 마십시오. 대상 시스템의 비밀 저장소에 넣으십시오.
3. 첫 호출을 하고 — 그것이 '정말로' 도착했는지 확인하기 — 요청 두 개면 충분합니다. 첫 번째는 신원을 증명합니다(스코프에서 면제되며 모든 키로 동작합니다): 스코프가 예상한 대로인지, 상태가 active인지, expires_at 값이 다가오고 있는지. 두 번째는 선택한 도메인에서 실제 데이터를 읽습니다. 통과하면 신원, 스코프, 이메일 게이트, 네트워크 경로가 모두 올바른 것입니다. 통과하지 못하면 추측하지 마십시오: 키 자체의 요청 원장이 어떤 엔드포인트가 어떤 코드와 어떤 안정적인 오류 키(INSUFFICIENT_SCOPE, IP_NOT_ALLOWED, KEY_ACTOR_BLOCKED …)로 거부되었는지 행 단위로 보여 줍니다. 패널에서는 그 원장이 "Recent requests" 창이고, 터미널에서는 lg logs 명령입니다. 마법사는 정확히 이 원장을 지켜보며, 실제로 성공한 호출을 보기 전까지는 단계를 초록색으로 바꾸지 않습니다.
4. 웹훅을 설정하고 — 무엇보다 먼저 서명을 검증하기 — 이벤트를 기다리는 것이 1분마다 묻는 것보다 저렴합니다. https 주소를 등록하고, 관심 있는 이벤트를 고르고, 구독을 여러분의 키에 묶으십시오: 키가 폐기되면 전달도 멈춥니다. 비밀 키는 생성할 때 한 번만 표시됩니다. 수신 엔드포인트는 먼저 서명을 검증해야 합니다: 서명 대상 문자열은 "{t}.{raw body}"이고 알고리즘은 HMAC-SHA256입니다. 타임스탬프는 서명 '안에' 있으므로, 서명이 유효하더라도 300 초보다 오래된 요청은 버리십시오. 상수 시간으로 비교하고 본문을 절대 다시 직렬화하지 마십시오 — JSON을 파싱해 다시 출력하는 순간 서명은 더 이상 일치하지 않습니다. 패널에서 "Send test"를 누르면 실제 서명된 ping이 발송되며, 전달을 시도 단위로 지켜볼 수 있습니다.
샌드박스: 운영 환경을 건드리지 않고 쓰기 연습하기
프리플라이트(dry_run)는 명령이 무엇을 '할지' 알려 줍니다. 하지만 멱등성이 정말로 재생되는지, 웹훅이 정말로 전달되는지, 오류 분기가 어떤 모습인지, 크레딧이 어디서 나오는지는 '실제' 쓰기에서만 볼 수 있습니다. 샌드박스는 바로 그것을 위한 것입니다: 여러분의 회사를 반영하는 별도의 테넌트 — 같은 코드, 같은 명령 카탈로그 — 이며, 실서비스 원장은 절대 건드리지 않습니다.
샌드박스는 요청 플래그가 아니라 '테넌트'입니다. 여러분의 회사를 위해 열린 별도의 Logistivo 회사로, 자체 사용자, 자체 패키지, 자체 크레딧 원장, 자체 웹훅 구독을 갖습니다. 환경은 키의 회사에서 '도출'되며 호출자가 지정할 수 없으므로, 잘못된 프로필을 고르더라도 요청은 서버 측에서 403 ENVIRONMENT_MISMATCH 오류로 중단됩니다. "샌드박스에 쓰는 줄 알았는데 운영에 썼다"는 일은 구조적으로 불가능합니다.
표면은 동일합니다 — 측정 결과: 샌드박스 키가 그려 내는 카탈로그는 실서비스 키가 그려 내는 것과 같습니다(화주 키의 경우 양쪽 모두 448개 명령). 샌드박스에서 동작하는 브리지는 운영 환경에서도 동작합니다. 배운 것을 두 번 배울 필요가 없습니다.
샌드박스는 비어 있는 상태로 열리지 않습니다: 생성된(복사된 것이 '아닌') 시드 데이터 — 거래처, 양방향 화물, 운송 요청 — 가 들어 있습니다. 이름은 명백히 지어낸 것이고 이메일 주소는 @sandbox.invalid 도메인에 있습니다. 실제 테넌트의 행을 읽거나, 복제하거나, 템플릿으로 사용하는 일은 결코 없습니다.
초기화 버튼은 의도적으로 '없으며', 어떤 레코드, 파일, 문서도 결코 삭제되지 않습니다. 깨끗하게 다시 시작하고 싶다면, 갱신이 새 세대를 열고 이전 세대는 은퇴한 상태로 남습니다. 수백 개의 리허설 행이 쌓이는 비용은 잘못된 테넌트에 연결된 삭제 루틴에 비하면 아무것도 아닙니다.
1. 샌드박스 열기 — 회사당 샌드박스 하나. 이 엔드포인트에는 팀 관리 권한(team.manage)이 필요하므로, 회사의 관리자가 이 작업을 합니다. 이미 존재한다면 같은 엔드포인트가 GET 요청에 그 상태로 응답합니다: 회사 id, 남은 크레딧, 활성 키 수, 구독, 생성 이력, 상한.
2. 샌드박스 키를 발급해 두 번째 프로필로 보관하기 — 키는 샌드박스 자체의 브리지 사용자를 대리하여 발급되며 environment: sandbox 표시가 붙어 돌아옵니다. 원시 토큰은 그 한 번의 응답에만 나타납니다. lg 쪽에서는 실서비스 키를 교체하지 말고 — '둘 다' 별도의 프로필로 보관하십시오. --sandbox와 --live는 1회 실행용 선택자입니다.
3. 실제로 쓰기 — 여기서는 --dry-run을 쓰지 않습니다. 쓰는 것이 핵심이기 때문입니다. 같은 멱등성 키를 두 번 보내고 두 번째 응답이 status: replayed로 돌아오는 것을 확인하십시오 — 이것이 샌드박스에서 측정한 결과입니다. 게이트가 있는 명령을 일부러 확인 없이 호출해 409 응답 본문을 읽고, 스코프 밖의 명령을 시도해 거부 내용을 읽으십시오. 그 어느 것도 실서비스 원장에 흔적을 남기지 않습니다: 같은 실행 동안 실서비스 잔액은 변하지 않습니다.
4. 운영 전환 전에 체크리스트 읽기 — go-live 엔드포인트는 여러분이 샌드박스에서 '실제로' 한 일을 바탕으로 답합니다: 쓰기를 했는가, 오류 분기를 보았는가, 웹훅이 전달되었는가, 수신기를 리허설 주소에서 옮겼는가, 키에 만료를 설정했는가. 각 항목은 pass / todo / unknown으로 돌아옵니다. 같은 응답에는 실제로 호출한 명령에서 도출한 '스코프 제안'도 담겨 있습니다 — 이를 사용해 실서비스 키를 필요 이상으로 넓지 않게 발급하십시오.
크레딧과 청구 — 샌드박스에는 자체 크레딧 원장이 있으며 실서비스 잔액은 변하지 않습니다. 이것은 검사가 아니라 구조입니다: 크레딧은 회사별로 계산되고 샌드박스는 별도의 회사입니다. 무료 등급으로 열리고, 결제 수단이 없으며, 월별 수금 기간 밖에 있습니다 — 어떤 경로로도 인보이스에 도달할 수 없습니다.
마켓플레이스 — 샌드박스에서 연 운송 요청은 실제 운송사의 화면에 나타나지 '않고' 그들의 이메일이나 푸시 수신함에도 도달하지 '않습니다'. 그리고 여러분도 실제 운송 요청을 보지 않습니다. 분리는 대칭적이며 두 개의 별도 쿼리에서 강제됩니다: 운송 요청이 누구에게 '보이는지'와 누구에게 '보내지는지'는 서로 다른 질문입니다.
웹훅 — 구독에도 환경 표시가 붙습니다. 샌드박스 이벤트는 실서비스 구독으로 절대 전달되지 않고 실서비스 이벤트는 샌드박스 구독에 절대 도달하지 않습니다. 표시가 어긋난 구독에는 전달이 아예 열리지 않습니다. 구독 상한은 회사별이므로 리허설 구독이 실서비스 할당량을 잠식하지 않습니다.
시드 데이터 — 샌드박스 안의 샘플 레코드는 '생성'된 것이며, 실제 테넌트에서 복사한 것이 결코 아닙니다. 시딩은 멱등적입니다: 두 번째 호출이 여러분 자신의 레코드 위에 두 번째 시드를 깔지 않습니다.
같은 카탈로그 — 샌드박스에서도 여러분의 역할은 여러분의 역할이며, 명령 목록은 동일합니다 — 측정 결과 양쪽 모두 448개 명령. 샌드박스는 축소된 데모가 아니라 여러분 회사의 쌍둥이입니다.
현재의 한계: 샌드박스 키로는 웹훅 구독을 관리할 수 없습니다 — 구독 엔드포인트에는 팀 관리 권한(team.manage)이 필요한데, 샌드박스의 브리지 사용자에게는 팀 역할이 없으므로 `lg --sandbox webhooks …`는 현재 403 응답을 반환합니다. 명령 표면 전체는 동작합니다 — 제한은 구독 원장에만 있습니다. 샌드박스에서 웹훅을 리허설하고 싶다면 지원팀에 문의하십시오. 이는 측정되어 열린 공백으로 기록되어 있습니다.
GET /api/common/integration-sandbox — 상태: 존재 여부, 어떤 회사인지, 남은 크레딧, 활성 키 및 구독 수, 생성 이력, 상한, 그리고 어떤 명령이 어떤 이벤트를 발생시키는지 보여 주는 트리거 가이드.
POST /api/common/integration-sandbox — 샌드박스를 엽니다(회사당 하나, 멱등적). team.manage 권한이 필요합니다.
POST /api/common/integration-sandbox/keys — 201 + 키와 원시 토큰(여기서만, 한 번만). environment: sandbox 표시는 회사에서 도출되며, 호출자가 지정할 수 없습니다.
GET /api/common/integration-sandbox/go-live — 운영 전환 체크리스트와 스코프 제안 — 샌드박스에서의 실제 트래픽으로부터 계산됩니다.
POST /api/common/integration-sandbox/renew — 새 샌드박스 '세대'를 열고 이전 세대를 은퇴시킵니다.
명령 모델
문법은 하나이며 예외가 없습니다. 명령을 어떻게 호출하는지 알기 위해 필요한 것은 카탈로그가 그 명령에 대해 말하는 내용뿐입니다.
lg loads list --status=in_transport --limit=20 --json
플래그 이름은 스키마의 파라미터 이름이며, lg는 두 가지 표기를 모두 받습니다: --load_code와 --load-code는 같은 필드에 도달합니다(lg help는 kebab-case 형태를 출력합니다). 따라서 플래그를 보면 그것이 어느 JSON 필드로 들어가는지 알 수 있고, CLI에서 HTTP로 옮길 때 이름을 변환할 필요가 없습니다. 값 없이 쓴 boolean 파라미터는 true입니다(--only_open). 그 반대는 --no-only_open입니다. 대시로 시작하는 값을 가진 인수는 --flag=value 형태로 쓰십시오. 그렇지 않으면 빠뜨린 플래그가 다음 플래그를 조용히 자기 값으로 삼켜 버립니다. 파일을 받는 명령에서는 로컬 경로 앞에 @를 붙이십시오(--attachment_uuid=@./cmr.pdf) — "파일을 받는 명령"을 참조하십시오.
lg — 클라이언트.
loads — 도메인 — 작업 대상 엔터티이며, 복수형입니다.
list — 동사 — 그 엔터티에 대해 하는 일로, 의도적인 결정에 의해서만 늘어나는 닫힌 어휘에서 가져옵니다: 단순 동사(list, get, create, update, delete, search, preview, generate, extract …)와, 붙이거나 바꾸는 대상을 이름에 담은 복합 동사(add-document, set-status, assign-driver). lg help 은 한 도메인의 동사를 나열합니다.
--status=in_transport — 파라미터 — 이름은 정확히 JSON Schema 파라미터 이름이며 값은 스키마 타입과 일치해야 합니다. enum 필드에 잘못된 값을 넣으면 그 값은 서버에 도달하지 않습니다.
--limit=20 — 목록 명령의 행 수. 상한은 각 명령의 파라미터 설명에 명시되어 있습니다 — 일반 목록 호출은 보통 20 행, 동기화 모드(cursor 또는 updated_since 사용)에서는 최대 100 행입니다.
--json — 원시 JSON 출력.
--json — 원시 JSON을 출력합니다. 스크립트에 올바른 형태는 이것뿐입니다: 기본 정렬 표는 사람을 위한 것으로, 데이터에서 열을 고르며 예고 없이 레이아웃이 바뀔 수 있습니다. 표 출력을 파싱하는 스크립트는 절대 작성하지 마십시오.
--yes, -y — 확인 게이트를 통과시킵니다(HTTP에서는 confirm: true). 자신이 무엇을 하려는지 아는 스크립트에서만 사용하십시오. 되돌릴 수 없는 명령에서 이 플래그는 "되돌리기가 없다"는 뜻의 약칭입니다.
--idempotency-key= — 쓰기 명령의 재시도를 안전하게 만듭니다. 같은 키로 두 번째 호출을 하면 명령이 다시 실행되지 않고 첫 번째 결과가 반환됩니다. 재시도 루프를 만든다면 키를 여러분이 직접 생성하고 모든 시도에서 같은 키를 보내십시오.
--dry-run — 명령 대신 프리플라이트를 실행합니다: 검증, 게이트, 크레딧 계산은 수행되지만 아무것도 기록되지 않습니다(프리플라이트 섹션 참조). 모든 명령과 lg batch에서 유효합니다.
--refresh — 카탈로그를 강제로 새로 고칩니다. lg는 카탈로그를 한 시간 동안 캐시합니다. 서버에 방금 명령이 추가된 것을 알고 있다면 기다리는 대신 이것을 사용하십시오.
--help, -h — 명령의 카탈로그 설명, 모든 파라미터, 그 타입, enum 값, 필수 여부를 출력합니다. 클라이언트 안에는 도움말 파일이 없습니다.
--profile=, --sandbox, --live — 이번 한 번의 호출을 어떤 프로필로 실행할지 지정합니다. --sandbox와 --live는 샌드박스 키 또는 실서비스 키를 가진 프로필을 고릅니다. 환경은 서버에서 키로부터 도출되므로, 불일치가 있으면 잘못된 곳에 쓰는 대신 403 ENVIRONMENT_MISMATCH 오류로 중단됩니다.
--base-url, --timeout, --verbose, --no-color, --version — 각각: 한 명령을 다른 서버로 향하게 하기, 초 단위 타임아웃, 요청/응답 상세 정보, ANSI 색상 끄기, 클라이언트 버전.
실제 예시
아래의 모든 명령은 현재 카탈로그에 존재하며, 여기에 있는 이름이나 파라미터는 하나도 지어낸 것이 아닙니다. 출력은 축약되어 있습니다. 출력은 `data.result` 수준을 보여 줍니다. HTTP에서는 같은 객체가 `{success, data:{…}}` 봉투(envelope) 안에 담겨 옵니다(HTTP 명령 API 참조).
현재 운송 중인 화물 — lg loads list --status=in_transport --limit=20
화물 하나의 전체 정보, 원시 JSON — lg loads get --load_code=FSK2158 --json
열려 있는 문서 일관성 플래그 — lg loads list-problems --only_open=true --limit=10
국가 해석하기 — lg countries search --query=Germany --json
해석된 id로 필터링 — lg loads list --receiving_country_id=57 --date_from=2026-09-01 --limit=20
제품명으로 HS 코드 찾기 — lg tariffs search --query="aluminium profile"
화물을 다음 단계로 진행(운송사 역할 전용) — lg loads set-status --load_code=FSK2158 --status=transit --date=2026-08-21 --yes
초안 — lg export-documents create --doc_type=proforma-invoice --currency_code=EUR --json
생성(게이트 있음) — lg export-documents generate --document_id=8412 --yes
클라이언트 없이: HTTP 명령 API
lg는 편의 도구일 뿐, 유일한 문은 아닙니다. 카탈로그와 실행 모두 세 개의 HTTP 엔드포인트를 거칩니다(파일에는 네 번째인 업로드 엔드포인트가 있습니다 — "파일을 받는 명령" 참조). ERP 또는 CRM 연동은 여기에 직접 연결합니다. 신원은 Authorization: Bearer 헤더로 전달되는 개인 액세스 토큰입니다. 모든 응답은 같은 봉투로 돌아옵니다: `{ "success": bool, "data": { … }, "code": "…", "message": { … } }`. 계약 전체는 `data` 안에 있습니다 — `contract_version`, `command`, `status`, 그리고 명령의 출력인 `result`; 실패 시에는 `error_code`, `error_key`, `error`. 이 페이지의 응답 예시는 공간을 아끼기 위해 봉투가 아니라 `data` 객체를 보여 줍니다. 여러분의 코드에서는 `data`를 꺼내는 것을 잊지 마십시오. `lg --json`도 봉투 전체를 출력하며, 그래서 jq 경로가 `.data.result…`로 시작합니다. 유일한 예외는 `/api/public/status`입니다: 이 엔드포인트는 감시 도구가 파싱 없이 경보를 낼 수 있도록 봉투가 없습니다.
200 + ok:false 형태로 확인을 요청하는 것은 금지되어 있으며 결코 일어나지 않습니다. 이유는 간단합니다: 클라이언트는 200 응답을 성공으로 처리하므로, 200 상태로 반환된 확인 요청은 흐름을 조용히 끊어 버리고 아무도 알아차리지 못할 것입니다. 확인은 항상 409 응답입니다.
GET /api/common/commands — 여러분의 역할이 볼 수 있는 카탈로그 전체: contract_version; 명령마다 name, domain, verb, description, JSON Schema, read_only, confirmation_needed, irreversible, credit_cost, since, deprecated_at, replaced_by, aliases, 그리고 접근 필드 key_level, permission, file_params, secret_parameters, cli_only; 최상위에는 error_keys 사전, rate_limits, idempotency_ttl_hours, 여러분의 카탈로그 역할, 첨부 파일(upload) 계약, 그리고 호출에 사용 중인 키의 접근 수준. ETag를 보내며, If-None-Match 요청에는 304 응답을 반환합니다. ?domain= 은 옛(alias) 도메인에도 일치합니다. 여기서 클라이언트를 그려 내십시오. 명령 목록을 하드코딩하지 마십시오.
GET /api/common/commands/{name} — 명령 하나의 전체 정보. name은 카탈로그의 고정된 명령 이름(list_loads)이며, CLI 식별자가 아닙니다. 지원 중단된 명령은 X-Deprecated 헤더와 함께 응답합니다.
POST /api/common/commands/{name} — 실행. 본문: { args, confirm?, idempotency_key? }. 응답의 HTTP 상태 자체가 결과입니다 — 200 이외의 모든 것은 소음이 아니라 정보입니다. 오류에는 error_code(전송)와, 비즈니스 거부의 경우 error_key 값이 담깁니다.
파일을 받는 명령
표의 33개 명령이 문서나 사진을 받습니다: 화물에 CMR 첨부, 인보이스에서 HS 코드 읽기, 차량 등록증으로 차량 생성, 사진으로 팔레트 추정, 회사 문서 업로드, 인보이스와 패킹 리스트 교차 검증. 브라우저에서는 파일을 양식에 끌어다 놓지만, 그 밖의 모든 곳에서는 두 단계가 필요합니다 — 파일을 업로드한 다음, 그 id를 명령에 전달합니다.
파라미터 이름이 attachment_uuid 또는 attachment_uuids 형태로 끝나면 그 파라미터는 파일을 받습니다 — 목록 안의 photos[].attachment_uuid, 수표의 front_attachment_uuid 같은 것입니다. 이를 기억할 필요는 없습니다: 모든 카탈로그 행에는 정확한 경로를 담은 file_params 값이 있고, 스키마는 그런 필드를 표시하며(format: uuid, x-logistivo-file: true), 카탈로그 응답에는 업로드 주소, 허용되는 형식, 크기 제한, 유효 시간을 담은 attachments 블록이 있습니다. lg help 도 이를 보여 줍니다.
업로드는 쓰기이므로 읽기 스코프 키로는 업로드할 수 없습니다. 쓰기 스코프 키라면 어느 접근 수준이든 업로드할 수 있습니다. 업로드는 키가 아니라 사용자에게 속합니다: 같은 사용자의 두 키는 같은 업로드를 보며, 누구도 다른 사람의 업로드를 사용할 수 없습니다. 알 수 없거나, 만료되었거나, 여러분의 것이 아닌 id는 그냥 찾을 수 없는 것으로 처리되며, 그 이유는 공개되지 않습니다.
대시보드 채팅 첨부 파일과 명령 업로드는 별개의 공간입니다: 어시스턴트 채팅에 첨부한 파일은 id로 명령에 전달할 수 없으며, 명령 업로드는 채팅 스레드에 절대 나타나지 않습니다.
업로드는 명령이 아니며 그 자체로는 비즈니스 효과가 없습니다: 명령이 그 id를 사용하기 전까지 여러분의 데이터에는 아무 일도 일어나지 않습니다. 업로드가 확인을 요청하지 않는 이유도 그 때문입니다 — 파일을 소비하는 명령이 게이트를 가집니다.
1. lg: 로컬 경로 앞에 @ 붙이기 — lg가 먼저 파일을 업로드한 다음 반환된 id로 명령을 실행합니다. @가 없는 값은 이전에 업로드한 파일의 id입니다. 목록은 쉼표로 구분한 경로나 반복된 플래그를 받고, 중첩 필드는 JSON을 받으며, 명령에 최상위 파일 필드가 정확히 하나일 때는 --file 가 단축 형태입니다. lg는 무엇이든 보내기 전에 각 파일을 로컬에서 검증하며(존재 여부, 크기, 형식), lg batch는 배치가 실행되기 전에 서로 다른 파일을 각각 한 번씩 업로드합니다.
2. HTTP: 업로드한 다음 attachment_uuid 전달하기 — 파일을 file이라는 이름의 필드에 multipart/form-data로 보내십시오. 새 업로드는 201 응답을 받습니다. 같은 사용자가 같은 파일을 다시 업로드하면 replayed 상태와 같은 id를 담은 200 응답을 받으며, 아무것도 기록되지 않습니다. 이 페이지의 다른 곳과 마찬가지로, 예시는 봉투 안의 data 객체를 보여 줍니다.
3. MCP: upload_attachment 도구 — MCP 클라이언트는 multipart를 보낼 수 없으므로, 채널은 카탈로그에 없는 추가 도구 하나를 제공합니다: upload_attachment 도구는 파일 이름과 base64 콘텐츠를 받아 같은 attachment_uuid 값을 반환합니다. HTTP 업로드와 같은 서비스를 같은 규칙으로 호출합니다.
형식은 내용에서 결정됩니다 — 파일 이름과 선언된 형식은 무시되며, 저장되는 확장자는 감지된 것입니다. 업로드 허용 형식: jpg, jpeg, png, webp, heic, heif, pdf, xlsx, xls, csv, txt, doc, docx, xml, zip. 각 명령은 실행 전에 자체적인 더 좁은 목록을 적용하며, 허용 형식과 함께 UNSUPPORTED_FILE_TYPE 오류 또는 FILE_TOO_LARGE 오류로 응답합니다.
크기 — 이미지는 최대 10 MB, 그 밖의 파일은 최대 15 MB.
유효 시간 — 업로드는 24시간 동안 사용할 수 있습니다. 그 이후에는 더 이상 해석되지 않지만(ATTACHMENT_NOT_FOUND) — 삭제되지는 않습니다. 명령이 그 이유로 실패하면 다시 업로드하십시오.
같은 파일, 같은 id — 같은 파일(같은 이름, 크기, 내용)을 다시 업로드하면, 남은 시간이 최소 한 시간 이상인 한 새로 기록하는 대신 기존 id를 반환하며, 일일 상한도 소모하지 않습니다.
일일 상한 — 사용자당 하루 300건 업로드(TOO_MANY_FILES), 회사당 하루 2 GB(DAILY_LIMIT_REACHED). 둘 다 retry_after 값과 함께 429 응답을 반환합니다.
POST /api/common/commands:upload — file 필드에 담은 multipart 업로드. 새 업로드에는 201, 같은 파일에는 replayed 상태와 함께 200. data.attachment 객체를 반환합니다: attachment_uuid, filename, mime_type, size_bytes, sha256, extraction_status, expires_at, reused.
확인 게이트와 되돌릴 수 없는 명령
카탈로그의 모든 명령에는 두 개의 플래그가 있습니다: confirmation_needed(실행 전에 명시적 승인이 필요한가)와 irreversible(그 효과를 되돌릴 수 있는가). 이 둘은 별개의 질문이며, 둘 다 클라이언트의 선의에 맡겨지지 않고 서버에서 강제됩니다.
게이트는 비즈니스 규칙이 아니라 책임에 관한 것입니다. 입찰을 넣는 것은 운송 계약으로 가는 첫걸음이고, 인보이스 발행은 회계 분개를 만들며, 재고 이동은 원장을 바꿉니다. 이들 중 어느 것도 실수로 두 번 실행할 수 있는 일이어서는 안 됩니다.
게이트는 '실제로 실행되는' 명령에서 읽습니다. 한 명령이 다른 명령을 감쌀 때 — 채팅의 범용 실행기가 그렇듯이 — 게이트는 감싸는 명령이 아니라 실제로 실행될 명령의 플래그에서 옵니다. 플래그가 고정되어 있다면 두 가지 실패 중 하나는 피할 수 없었을 것입니다: 인보이스 명령이 확인 없이 실행되거나, 국가 조회마다 확인 카드가 뜨거나.
read_only 플래그와 '게이트 없음'은 같은 것이 아닙니다. 서로 다른 세 가지 상태가 있습니다: invoices preview는 게이트가 없고 아무것도 쓰지 않습니다. loads create는 게이트가 있고 씁니다. invoices create는 게이트가 없지만 씁니다 — 초안이 생겨납니다. 하나의 테스트로 판정됩니다: 명령이 반환되었을 때 데이터베이스의 행이 바뀌었는가?
일부 작업은 애초에 명령이 아니기 때문에 이 게이트 뒤에 있지 않습니다: 패키지 구매, 3D Secure로 카드 추가, 법적 문서 승인, 계정 해지는 당사자 자신의 브라우저에서 이루어집니다. 이런 경우 lg handoff-links generate 명령은 logistivo.com 링크를 반환합니다 — 무료이고, 아무것도 쓰지 않으며, 비밀을 담지 않습니다 — 그리고 당사자가 그곳에서 단계를 마칩니다. 어떤 플래그를 어떻게 설정하더라도 결제나 동의가 API 호출로 바뀌지는 않습니다.
연동이 모든 호출에서 게이트를 자동으로 통과시키는 것은 기술적으로 가능하지만 권장되지 않습니다. 올바른 패턴은 되돌릴 수 있다고 알고 있는 명령에 대해서만 게이트를 자동화하고, 되돌릴 수 없는 명령은 사람의 대기열로 보내는 것입니다.
1. 호출 — 게이트가 있는 명령을 confirm 없이 호출합니다. 아무것도 바뀌지 않습니다.
2. 요약 읽기 — 409 응답을 받습니다. 본문의 confirmation.summary는 원시 인수의 덤프가 아니라 사람을 위해 쓴 문장입니다("About to issue an invoice: X Ltd, 1,200.00 TRY"). 금전 관련 명령은 구조화된 미리 보기도 담습니다: 라인 항목, 합계, 경고.
3. 확인 — 같은 호출을 confirm: true(CLI에서는 --yes)로 반복합니다. 되돌릴 수 없는 명령은 최대 한 번만 실행되도록 표시되어 있습니다.
프리플라이트: 쓰기 명령이 무엇을 할지 실행하지 않고 확인하기
ERP 브리지를 연결할 때 가장 값비싼 단계는 요청 본문이 올바른지를 명령을 '실제로' 실행해 보고서야 알아내는 것입니다: 실서비스 원장에 생긴 인보이스 초안, 소진된 크레딧, 수작업 정리. dry_run 플래그가 이를 끝냅니다 — 요청에 필드 하나를 추가하면 명령은 실행되지 않고, 무슨 일이 일어날지를 읽을 수 있습니다.
현재 레지스트리에는 519개 명령이 있으며, 그중 233개는 읽기만 하고 아무것도 쓰지 않습니다. 나머지 286개 쓰기 명령 중 251개는 게이트가 있습니다: confirm 없이 호출하면 이미 409 응답을 반환하고 무엇을 할지 설명합니다. 빈틈은 나머지 35개였습니다 — 인보이스 초안, 수출 서류 초안, 라인 항목: 바로 브리지가 가장 먼저 연결하는 체인입니다. 이 명령들은 호출하는 것이 곧 실행하는 것이었습니다.
게이트가 있는 명령에도 두 번째 빈틈이 있었습니다: 스키마 검증은 게이트 '이후'에 실행됩니다. 그래서 인수가 빠진 호출은 먼저 확인 카드를 받고, 그것을 확인한 뒤에야 "이 필드가 없습니다"라는 말을 들었습니다. 프리플라이트는 두 가지를 한 번의 왕복으로 답합니다.
그리고 가장 흔하면서도 가장 늦게 발견되는 브리지 버그는 이것입니다: 스키마에 없는 필드를 보내면(recipient_contact_id 필드가 기대되는 곳에 customer_id 필드), 서버는 그것을 조용히 버리고, 명령은 200 응답을 반환하며, 레코드는 엉뚱한 곳에 저장됩니다. 프리플라이트 응답은 그런 필드를 arguments.ignored 아래에 이름으로 나열합니다. 오류 메시지는 결코 그렇게 하지 않을 것입니다.
프리플라이트는 아무것도 쓰지 않으며, 이는 측정 이전에 구조적인 사실입니다: 프리플라이트 경로는 명령의 핸들러에 절대 진입하지 않으므로, 나중에 추가되는 명령을 포함한 모든 명령에 적용됩니다. 출시 당시에는 측정도 했습니다: 당시 카탈로그의 모든 쓰기 명령을 프리플라이트하는 동안 발생한 모든 SQL 문을 수집했습니다(두 가지 인수 세트, 두 가지 역할, 178 건의 프리플라이트). INSERT/UPDATE/DELETE 구문은 단 하나도, 대기열 작업도 단 하나도, 이메일도 단 한 통도 없었으며, 31개 테이블의 행 수와 크레딧 잔액은 변하지 않았습니다.
종료 코드는 실제 호출이 낼 것과 같습니다 — 실행될 경우 0, 확인 게이트 4, 멱등성 충돌 2, 그 밖의 모든 경우 1 — 따라서 "lg … --dry-run || exit"는 CI 단계에서 의미 있는 게이트입니다.
1. dry_run 필드를 넣어 호출 — 요청 본문에 "dry_run": true를 추가합니다. 검증, 역할 및 스코프 게이트, 대상 해석, 크레딧 계산은 모두 실행되지만 명령은 실행되지 않습니다.
2. would_execute 읽기 — 분기에 사용할 플래그는 이것 하나입니다. 값이 false이면 would_stop.at 필드가 실제 호출이 어디서 멈출지를 알려 줍니다: idempotency, target_precheck, confirmation_gate 또는 arguments.
4. dry_run 제거 — would_execute 값이 true가 될 때까지 반복한 다음, 플래그를 제거하고 실제 호출을 하십시오. 프리플라이트 중에 보낸 멱등성 키는 소모되지 않았으므로 실제 호출은 정상적으로 실행됩니다.
HTTP 상태는 항상 200 — "명령이 실패할 것"이라는 결과는 결코 4xx로 오지 않습니다 — 프리플라이트 자체는 성공했고 예측은 본문에 있습니다. 예외는 전송 수준의 거부이며, 이 경우에는 실제 호출과 정확히 같게 동작합니다: 404 알 수 없는 명령, 403 역할/스코프, 429 속도 제한.
읽기 스코프 키로는 쓰기 명령을 드라이 런할 수 없습니다 — 403 응답을 받습니다. 프리플라이트는 "지금 '이 키로' 이것을 호출하면 어떻게 되는가"에 답합니다. 읽기 키에 초록불을 준 뒤 실제 호출에서 403 응답을 주는 것은 프리플라이트가 막기 위해 존재하는 바로 그 뜻밖의 상황일 것입니다.
멱등성 키는 소모되지 않습니다 — 프리플라이트 중에 보낸 키는 원장 행을 열지 않으며, 만료된 잠금도 해제되지 않습니다. 그러므로 실제로 사용할 키를 보내십시오: 프리플라이트는 그 키가 아직 비어 있는지, 이전 실행을 재생(replay)할지, 다른 명령과 충돌하는지 알려 줍니다.
confirm과 함께 쓸 수 있습니다 — dry_run 필드와 confirm 필드를 함께 보내면 질문은 "확인하면 무슨 일이 일어나는가?"가 됩니다. 그래도 아무것도 실행되지 않습니다.
배치 프리플라이트는 배치 단위입니다 — commands:batch 엔드포인트도 dry_run 필드를 받지만, 이 플래그는 항목이 아니라 배치에 속합니다(항목에 보내면 422 응답). 항목별 보고서와 배치의 총 크레딧 비용을 받으며, 잔액 부족은 거부되지 않고 보고됩니다.
무료가 아닙니다 — 모든 프리플라이트는 실제 쿼리(미리 보기, 잔액)를 실행하며 속도 제한에 포함됩니다. 배포할 때마다 카탈로그 전체를 프리플라이트하지 말고, 변경한 명령만 프리플라이트하십시오.
멱등성: 재시도해도 중복이 생기지 않는 이유
ERP는 여러분의 오류 메시지를 읽지 않고, 화면을 보지 않으며, 타임아웃 후에는 같은 요청을 다시 보냅니다. 이 섹션은 바로 그 동작 때문에 존재합니다.
idempotency_key 값을 담은 호출은 최대 한 번만 실행됩니다. 두 번째 호출은 명령을 다시 실행하지 않고, 기록된 결과를 replayed 상태와 함께 반환합니다. 네트워크가 끊기거나, 요청이 타임아웃되거나, 대기열이 같은 작업을 두 번 가져가더라도, 중복 인보이스 대신 첫 번째 결과를 받습니다.
모든 쓰기 명령에 키를 사용하십시오. 카탈로그의 read_only 필드가 그 구분을 공짜로 알려 줍니다: read_only: false인 모든 명령에는 멱등성 키를 쓸 가치가 있습니다.
재시도 전략은 지수 백오프를 사용하고 모든 시도에서 '같은' 키를 보내야 합니다. 시도마다 새 키를 생성하는 것은 멱등성을 전혀 사용하지 않는 것과 같습니다. 같은 키를 병렬로 보내지 마십시오: 최대 1회 실행은 순차적인 재시도에 대해 보장되며, 서로 경쟁하는 두 요청에 대해서는 보장되지 않습니다.
함정 1 — 실패도 고정됩니다 — 첫 실행이 비즈니스 규칙에 의해 거부되었다면(failed), 같은 키로 한 두 번째 호출은 같은 오류와 같은 error_key 값을 반환하며 재시도하지 않습니다. 인수를 고쳐 다시 시도하려면 '새' 키가 필요합니다. 키는 의도가 아니라 시도를 나타냅니다.
함정 2 — 큰 결과는 본문 없이 재생됩니다 — 원장은 64 KB 미만인 결과만 저장합니다. 더 큰 결과는 replayed 상태로 재생되지만 본문은 비어 있습니다. 연동은 본문이 아니라 "replayed" 신호에 의존해야 하며, 데이터는 해당하는 get 명령으로 가져와야 합니다.
함정 3 — 키는 하나의 명령에 속합니다 — 같은 키를 다른 명령과 함께 보내면 409 idempotency_conflict 응답과 함께 conflicting_command 값이 반환됩니다. 아무것도 실행되지 않고 아무것도 재생되지 않습니다. 두 동사에 하나의 키를 공유하는 클라이언트는 고장 난 것이며, 그 사실을 조용한 재생이 아니라 오류로 알게 됩니다.
함정 4 — 잠금은 영원히가 아니라 24시간 지속됩니다 — 24시간이 지나면 같은 키는 새로운 실행입니다. 네트워크 재시도는 몇 분 안에 도착합니다. ERP에서 해마다 반복되는 문서 번호가 영원히 "replayed" 상태로 남아서는 안 됩니다. 카탈로그는 이 기간을 idempotency_ttl_hours 값으로 게시합니다.
함정 5 — 서버 오류는 키를 잠그지 않습니다 — 5xx server_error 오류는 비즈니스 거부가 아닙니다: 키가 묶이지 않으므로, 같은 키로 재시도하면 명령이 실제로 실행됩니다. 키를 잠그는 것은 failed뿐입니다(함정 1).
범위와 형식 — 여러분의 회사, 임의의 문자열, UUID 권장 — 고유성은 (여러분의 회사, 키) 단위로 강제됩니다: 다른 테넌트의 INV-1001은 여러분의 것과 절대 충돌하지 않으며 여러분의 결과를 재생할 수도 없습니다. 일반 UUID나 {ERP-document-no}:{verb}처럼 구조상 고유한 복합 값을 사용하십시오.
증분 동기화와 페이지네이션
ERP/CRM 브리지는 매시간 전부가 아니라 바뀐 것만 가져와야 합니다. 모든 목록 명령 — loads list, demands list-own, contacts list, invoices list, teammates list, load-groups list, reservations list, drivers list, tenders list, products search, warehouses search — 은 두 개의 공통 파라미터를 받고 하나의 공통 필드를 반환합니다.
offset이 없는 이유: 실시간으로 바뀌는 테이블에서 offset은 어긋납니다. 두 페이지 사이에 삽입된 행 때문에 레코드를 건너뛰거나 두 번 세게 되며, 그것도 조용히 일어납니다. 커서는 앞으로만 진행하므로, 순회 도중 삽입되거나 갱신된 레코드는 목록의 끝에 놓입니다: 아무것도 잃지 않고, 아무것도 중복되지 않습니다.
전체 초기 적재도 같은 메커니즘입니다: updated_since=1970-01-01T00:00:00Z로 시작하여 next_cursor 값이 null이 될 때까지 따라가십시오. 별도의 “내보내기” 엔드포인트는 필요하지 않으므로 존재하지 않습니다.
lg로도 같습니다: lg loads list --updated_since=2026-09-01T00:00:00Z --limit=100 --json, 그다음 lg loads list --cursor= --json.
다음 동기화에서는 updated_since 값을 여러분이 본 가장 큰 updated_at 값으로 설정하십시오. 타임스탬프는 1초 정밀도이므로 경계에 있는 레코드가 두 번 도착할 수 있습니다 — 여러분 쪽에서 external_ref 또는 code 기준으로 upsert한다면 무해합니다. updated_since 또는 cursor 없이 실행하면 명령은 채팅 모드로 동작합니다: 사람을 위한 정렬, 최대 20행, next_cursor 값은 null, 그리고 truncated 필드가 “더 있음”을 알립니다. 동기화에는 이 모드를 사용하지 마십시오.
이 섹션의 기계 판독용 오류 키: INVALID_CURSOR, INVALID_UPDATED_SINCE, DUPLICATE_EXTERNAL_REF, EXTERNAL_REF_TOO_LONG, EXTERNAL_REF_INVALID. 모두 HTTP 422 응답으로, 본문에 error_code: "failed" 및 result.error_key 값을 담아 응답합니다. 텍스트가 아니라 키로 분기하십시오.
updated_since — ISO-8601 타임스탬프(UTC 권장, 예: 2026-09-01T00:00:00Z). 이 시점 또는 그 이후에 갱신된 행. 명령을 동기화 모드로 전환합니다: 고정 순서 (updated_at, id) 오름차순, limit 상한 100.
cursor — 이전 응답의 next_cursor 값을 그대로 넣습니다. 불투명하고 서명되어 있습니다: 직접 만들거나 수정하지 말고, 다른 회사나 다른 명령의 커서를 재사용하지 마십시오. 이런 경우는 모두 INVALID_CURSOR 오류로 거부됩니다.
limit — 페이지 크기. 동기화 모드에서 1-100(기본값 10).
next_cursor (응답) — 다음 페이지를 위한 커서. null은 목록이 끝났음을 뜻하며, “더 있는가”에 대한 유일하게 올바른 답입니다.
total (응답) — 페이지와 무관하게 필터와 일치하는 행 수 — 진행 상황 보고용.
여러분 자신의 키: external_ref
우리의 자동 증가 id(invoice_id, contact_id)를 ERP의 비즈니스 키로 삼지 마십시오. 이 id들은 불투명하며 여러분의 회사에만 한정됩니다. 화물, 운송 요청, 거래처, 인보이스, 제품, 창고는 대신 여러분의 키를 담습니다.
쓸 때 설정하기 — loads create, demands create, contacts create 및 contacts update, invoices create는 선택적 external_ref 값(최대 120 문자)을 받아 변경 없이 반환합니다.
읽을 때 사용하기 — loads get --external_ref=ORD-2026-0917, invoices get --external_ref=..., contacts get --external_ref=..., demands get --external_ref=... 모두 동작합니다. 목록 및 검색 명령에서 --external_ref= 는 정확히 일치하는 필터입니다.
회사별로 고유 — 같은 키를 가진 두 번째 레코드는 422 응답(result.error_key = DUPLICATE_EXTERNAL_REF)으로 거부됩니다. 다른 회사의 키에는 “찾을 수 없음”으로 응답합니다. 대소문자를 구분하지 않고 일치시킵니다(ord-1 = ORD-1). 보관(archive)된 레코드는 키를 유지하므로, 키를 재사용하려면 먼저 복원하십시오.
idempotency_key 값도 함께 보내십시오 — 네트워크 타임아웃 후의 재시도는 중복을 만드는 대신 첫 번째 결과를 반환합니다. 둘은 서로 대체할 수 없습니다: external_ref 값은 여러분의 비즈니스 키이고, idempotency_key 값은 한 번의 시도를 식별합니다.
발신 웹훅: 무언가 발생하면 여러분에게 POST 요청을 보냅니다
지금까지의 모든 것은 풀(pull) 방식이었습니다: 여러분이 묻고, 우리가 답합니다. ERP 브리지는 화물 상태가 바뀌었는지, 인보이스가 발행되었는지, 입찰이 도착했는지 알기 위해 1분마다 물어봐야 했습니다. 이제는 그렇지 않습니다: https 주소를 등록하고 관심 있는 이벤트를 고르면, 이벤트가 발생할 때 서명된 POST 요청이 도착합니다.
푸시는 풀을 대체한 것이 아니라 그 '옆에' 추가되었습니다. 증분 동기화(updated_since + cursor)는 그대로이며 여전히 올바른 도구입니다: 첫 전체 적재, 이력 백필, "놓친 것이 있는가"에 대한 답은 모두 그쪽에 있습니다. 웹훅은 지연 시간을 분 단위에서 초 단위로 줄입니다. 건강한 브리지는 둘 다 사용합니다 — 웹훅은 트리거로, 동기화는 안전망으로.
페이로드는 레코드의 사본이 아니라 '신호'입니다. 식별자(id, 여러분 자신의 external_ref, status, 시간)를 담고 있으며, 상세 내용은 여러분의 키로 GET 요청을 보내 가져옵니다. 그 호출은 이미 여러분 자신의 권한 게이트를 거칩니다. 따라서 노출 표면은 식별자 수준에 머뭅니다. 두 필드는 의도적으로 빠져 있습니다: 입찰한 회사의 신원(블라인드 입찰은 패널에서 별칭으로 표시되며, 신원을 웹훅에 넣으면 두 번째 채널을 통해 그 비공개성을 뚫게 됩니다)과 예약 연락처 정보(개인 데이터를 추가 채널로 옮길 필요가 없습니다).
이벤트 이름은 '고정'되어 있습니다. 이름의 의미가 바뀌면 새 이름을 열고, 옛 이름은 지원 중단 기간 동안 유지됩니다. 페이로드에 새 필드를 추가해도 계약 버전은 올라가지 '않습니다' — 소비자는 알지 못하는 필드를 무시해야 합니다.
GET /api/common/integration-webhooks — 원장과 함께 이벤트 카탈로그, 한도, 헤더 이름. 모든 행에는 음소거 사유와 7일간의 전달 요약이 포함됩니다.
POST /api/common/integration-webhooks — 201 + { webhook, secret, shown_once: true }. 비밀 키는 여기에만 나타납니다.
PATCH /api/common/integration-webhooks/{uuid} — 이름 / 주소 / 이벤트 / 활성 플래그. 비밀 키는 건드리지 '않습니다'.
DELETE /api/common/integration-webhooks/{uuid} — 제거합니다: 행은 소프트 삭제되고(이력은 계속 조회 가능) 대기 중인 전달은 취소됩니다.
POST /api/common/integration-webhooks/{uuid}/rotate-secret — 201 + 새 비밀 키. 이전 값은 그 순간 동작을 멈춥니다.
POST /api/common/integration-webhooks/{uuid}/test — ping 이벤트 — 실제 서명, 실제 경로, 실제 재시도 일정.
GET /api/common/integration-webhooks/{uuid}/deliveries — 가장 최근의 전달: 상태, 시도 번호, HTTP 코드, 소요 시간, 오류 태그.
POST /api/common/integration-webhooks/deliveries/{uuid}/replay — 단일 전달을 다시 보냅니다: event_id 값은 '유지'되고, 전달 id는 새로 발급되며, 페이로드는 그대로 복사됩니다.
이벤트 카탈로그
아래 13개 이벤트는 모두 '실제로' 발송되는 이벤트 클래스로 뒷받침됩니다. 카탈로그에 "있으면 좋을" 이름은 없습니다: 발표되었지만 한 번도 발생하지 않는 이벤트는 연동 개발자가 영원히 기다리게 되는 이벤트이며, 그 실패는 조용합니다. 이 표 역시 사람이 작성한 것이 아니라, 페이지를 불러올 때마다 실시간 카탈로그에서 그려집니다.
invoice.payment_recorded 이벤트는 의도적으로 '빠져' 있습니다: 그 이벤트 클래스는 코드에 존재하지만 어디에서도 발송되지 않습니다. 결제 이벤트는 그 클래스가 실제로 발생하는 날에 추가될 것이며, 그 전에는 추가되지 않습니다. 이벤트를 미리 발표하는 것은 아예 추가하지 않는 것보다 나쁩니다.
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)
서명 검증
모든 요청에는 X-Logistivo-Signature 헤더가 있습니다: t=,v1=. 서명 대상 문자열은 "."이고 알고리즘은 HMAC-SHA256입니다. v1 접두사는 체계를 버전 관리할 수 있게 해 줍니다: 언젠가 두 번째 체계가 생기면 헤더는 t=…,v1=…,v2=…를 담고, 여러분은 아는 것을 고르면 됩니다.
의존성이 없는 참조 수신기 두 개를 게시합니다. 하나는 Node용, 하나는 순수 PHP용입니다. 둘 다 위의 네 가지 규칙을 적용하며 --selftest로 스스로를 테스트합니다: 유효한 서명, 변조된 본문, 잘못된 비밀 키, 허용 범위를 벗어난 타임스탬프, 형식이 잘못된 헤더, 재직렬화 함정, 그리고 두 종류의 반복(같은 전달 / 같은 사실). 검증 코드는 우리가 직접 사용하는 코드와 정확히 대응합니다 — 우리는 우리가 게시하는 계약을 직접 소비합니다.
'원시(RAW)' 본문을 검증하십시오 — 서명은 바이트를 대상으로 계산됩니다. 본문을 디코딩한 뒤 다시 직렬화하면(JSON.stringify(req.body), json_encode($request->all())) 같은 '데이터'가 다른 '바이트'가 되어 서명이 더 이상 일치하지 않습니다. Node에서의 함정은 숫자 서식이고(전송된 1.50은 1.5가 되며, 큰 정수는 정밀도를 잃습니다), PHP에서는 문자 이스케이프입니다(/는 \/가 되고, İ는 İ이 됩니다). Express에서는 express.raw를, Laravel에서는 $request->getContent()를 사용하십시오. 이것이 수신기를 작성할 때 가장 흔한 실수입니다.
타임스탬프를 확인하십시오 — t는 서명 '안에' 있습니다. 서명만 검증하면 유효한 요청을 가로챈 누구든 몇 시간 뒤에 그것을 재전송할 수 있고, 수신기는 그것을 검증된 이벤트로 셀 것입니다. 서명이 올바르더라도 |now − t| > tolerance인 요청은 버리십시오. 권장 허용 범위는 300초입니다.
상수 시간으로 비교하십시오 — hash_equals / timingSafeEqual. == 연산자로 비교하면 공격자가 서명을 바이트 단위로 추측할 수 있습니다.
id가 아니라 event_id 값으로 중복을 제거하십시오 — event_id 값은 '사실'을 식별합니다: 같은 이벤트를 받는 두 구독자에게 동일하며, 재전송(replay) 시에도 '유지'됩니다. id(= X-Logistivo-Delivery)는 '전달'을 식별하며 재전송 시 바뀝니다. "이미 처리했는가"는 event_id 값으로 답하십시오. id로 답하면 재전송 때 같은 작업이 두 번 실행됩니다.
전달, 재시도, 음소거
여러분의 수신기가 항상 살아 있지는 않을 것입니다. 이 경로는 그것을 전제로 합니다: 일시적인 실패는 재시도 일정에 들어가고, 영구적인 실패는 구독을 음소거하며 — 음소거의 '사유'는 항상 기록됩니다.
음소거 사유는 기계가 읽을 수 있고 안정적이며(delivery_failures, endpoint_gone, unsafe_target, key_revoked, by_user), 패널과 `lg webhooks list` 양쪽에 표시됩니다. 사유 없는 음소거는 "왜 아무것도 도착하지 않는가"를 답할 수 없게 만들 것입니다. 다시 활성화하면 카운터와 타임스탬프가 초기화됩니다.
주소는 여러분이 쓰지만, 요청은 '우리' 서버가 보냅니다. 게이트가 없다면 클라우드 메타데이터 주소를 입력한 테넌트가 우리 자신의 네트워크 안에서 요청을 보내게 만들 수 있습니다. 그래서 주소는 등록할 때와 '모든' 전달 시에 검사됩니다:
타임아웃 — 전체 8초, 연결 4초 — 느린 수신기가 워커를 점유해서는 안 됩니다. 작업은 대기열에 넣고 즉시 2xx를 반환하십시오.
재시도 일정 — 60 · 300 · 1800 · 7200 · 21600초 → 6회 시도, 대략 8.6시간의 기간.
유일한 영구 실패: 410 Gone — "나를 삭제하라"는 뜻입니다: 재시도하지 않고 구독을 즉시 음소거합니다. 서명 실패에 410 응답을 '절대' 반환하지 마십시오.
그 밖의 모든 실패 — 4xx를 포함해 '모두' 재시도됩니다. 비즈니스 이벤트를 잃는 것은 요청 몇 번이 더 드는 것보다 비쌉니다: 4xx를 영구 실패로 취급하는 경로라면, WAF 규칙을 갱신하는 동안 403 응답을 반환하는 수신기는 "인보이스 발행" 이벤트를 조용히 잃게 될 것입니다.
Retry-After — 429 및 503 응답에서 준수됩니다(최대 6시간).
리디렉션 — 따라가지 '않습니다'. 302 응답을 통해 내부 주소로 건너뛰면 두 번째 경로로 주소 게이트를 뚫게 됩니다.
자동 음소거 — 전달이 연속으로 10번 소진된 후. 410 응답, 안전하지 않은 대상, 연결된 연동 키의 폐기는 '즉시' 음소거합니다.
localhost, 단일 레이블 이름, .internal / .local / .svc 같은 내부 접미사는 거부됩니다 — 해석 결과를 보기도 전에 의도 자체를 거부하므로 split-horizon DNS로 게이트를 뚫을 수 없습니다;
IP 리터럴과 DNS 해석의 '모든' 레코드는 공인 주소여야 합니다. 이름이 공인 주소와 사설 주소 양쪽으로 해석되면 어느 쪽을 고를지 우리에게 묻는 사람은 없으므로 → 그 이름은 곧바로 거부됩니다;
전달 시점에 주소는 한 번 해석되고 연결은 검증된 주소에 고정됩니다: DNS 리바인딩 창이 닫힙니다;
수신기의 응답 '본문'은 어디에도 저장되지 않습니다(상태 코드, 소요 시간, 짧은 오류 태그만) — 그래서 주소 게이트 구멍이 실제로 가치를 갖는 "읽기" 경로는 닫힌 채로 유지됩니다.
"사설 주소 허용" 구성 스위치는 의도적으로 '없습니다': 그런 스위치는 언젠가 실수로 켜진 채 남게 됩니다.
구독을 생성할 때와 rotate-secret 시에만 '한 번' 반환됩니다. 서버에 암호화되어 저장되며 다시 읽을 수 없습니다. "다시 보기"는 없습니다.
lg는 이를 화면에 출력하고 그대로 둡니다 — 어떤 구성 파일이나 캐시 파일에도 기록하지 않습니다.
분실하면 교체(rotate)하십시오. 이전 값은 '그 순간' 동작을 멈춥니다. 끊김 없이 전환하려면 수신기가 전환 기간 동안 두 비밀 키를 모두 시도해야 합니다.
주소를 변경해도 비밀 키는 바뀌지 '않습니다': "URL이 옮겨졌다" 같은 일상적인 유지 보수가 수신 측의 검증을 깨뜨려서는 안 됩니다.
상태와 헬스: 조용히 멈춘 브리지를 여러분보다 먼저 알아차리는 사람이 없어야 합니다
연동 브리지는 요란하게 죽는 일이 드뭅니다. 보통은 새벽 시간에 조용해집니다: 토큰이 만료되거나, 키가 대리하는 사람이 팀을 떠나거나, 스코프가 좁혀지거나, 수신 엔드포인트가 403 응답을 반환하기 시작합니다. 가장 먼저 알아차리는 사람은 거의 언제나 고객입니다. lg status 명령은 그 순서를 뒤집기 위해 존재합니다.
명령 하나가 두 질문에 동시에 답합니다. 장애 중에는 두 질문이 같은 순간에 나오기 때문입니다: 플랫폼이 살아 있는가, 그리고 내 브리지는 건강한가. 플랫폼 상태 줄은 토큰 없이도 동작합니다 — 장애 중에는 토큰 자체가 첫 번째 용의자이며, 상태 질문을 토큰에 묶으면 정작 답이 필요할 때 답을 얻지 못하게 됩니다.
헬스 요약은 새로운 원장을 두지 않습니다. 기존의 세 가지 소스를 한 문장으로 접습니다: 일일 사용량 카운터(얼마나 호출했고 얼마나 실패했는가), 요청 원장(어떤 요청이 언제, 왜 거부되었는가), 발신 웹훅 전달 원장(이벤트가 수신기에 도달했는가). 오류율은 항상 일일 카운터에서 읽습니다. 상세 원장에는 상한이 있으며, 상한에 도달하면 그 사실을 분명히 밝힙니다.
같은 요약이 패널에도 표시됩니다: Settings › Integration › Keys 아래의 모든 행에는 배지가 있고, 그 아래에 사유가 표시됩니다. 임계값은 클라이언트 측에서 계산되지 않습니다. 서버가 지정한 수준을 패널과 lg status 명령이 그대로 표시하므로, 두 화면이 같은 키에 대해 서로 다른 말을 할 수 없습니다.
감시 도구에는 토큰이 필요 없습니다. 이 엔드포인트는 상태 단어만 반환합니다. 버전, 호스트 이름, 대기열 이름, 작업 수, 오류 텍스트, 고객 데이터를 담지 않으며 — 담을 수도 없습니다.
헬스 요약은 요청당 일정한 수의 쿼리로 만들어집니다. 쿼리 수는 키의 개수에 따라 늘어나지 않습니다. 상세 정보가 필요하면 lg logs 명령으로 해당 키의 최근 요청을, lg webhooks list 명령으로 발신 브리지를 확인하십시오.
정상 — 측정된 결함이 없고 성공의 증거가 있습니다: 원장에 성공한 호출이 있거나, 카운터상 트래픽에 오류가 없었습니다.
주의 — 무언가가 깨지기 시작했습니다: 오류율이나 연속 실패 횟수가 임계값을 넘었거나, 요청이 게이트에서 거부되고 있거나, 키 만료가 가까웠거나, 규칙적으로 호출하던 브리지가 조용해졌습니다.
실패 — 브리지가 지금 동작하지 않습니다: 토큰이 의도치 않게 폐기되었거나, 닫힌 키가 여전히 호출되고 있거나, 다섯 번 연속 실패했거나, 오류율이 50%를 넘었거나, 웹훅 구독이 음소거되었습니다.
닫힘 — 키가 의도적으로 닫혔고 아무도 호출하지 않습니다. 이는 결함이 아니라 결정이며 — 빨간색으로 표시되지 않습니다.
데이터 없음 — 측정값이 없습니다: 키가 한 번도 호출되지 않았거나, 측정 자체가 실패했습니다. 둘 중 어느 것도 초록색이 아닙니다.
거짓 초록은 없습니다. 정상 배지에는 측정된 성공의 증거가 필요합니다. 한 번도 호출되지 않은 키는 결코 초록색이 되지 않습니다. 그것이 동작한다는 측정값이 단 하나도 없기 때문입니다.
거짓 빨강은 없습니다. 여러분이 의도적으로 닫은 키는 '닫힘'으로 표시됩니다. 모든 것을 빨간색으로 칠하면 빨간색은 의미를 잃습니다. 닫힌 키는 닫힌 후에도 여전히 호출될 때만 빨간색이 되며 — 그때는 브리지가 정말로 고장 난 것입니다.
측정할 수 없음은 데이터 없음과 같지 않습니다. 서버 측에서 쿼리가 실패하면 그 행은 조용히 0을 표시하지 않고, 측정을 할 수 없었다고 알립니다.
침묵은 항상 보고되지만 맹목적으로 경고로 바뀌지는 않습니다. 월말에만 동작하는 브리지가 30시간 동안 조용한 것은 정상입니다. 지난 7일 중 최소 5일 호출하던 브리지가 조용해지는 것은 결함입니다. 리듬은 가정하지 않고 측정합니다.
상태 조회 자체는 헬스 수치를 오염시키지 않습니다. lg status 명령이 만든 호출은 요청 원장에 나타나지만 헬스 계산에서는 제외됩니다 — 그렇지 않으면 여러분 자신의 성공한 상태 조회가 연속 실패 횟수를 초기화해, 화면이 보여 주기 위해 존재하는 바로 그 결함을 숨기게 됩니다.
모든 줄은 측정값입니다: 데이터베이스에 실제 쿼리를 실행하고, 명령 카탈로그를 실제로 구성하며, 대기열 워커의 실시간 기록을 실제로 읽습니다. 가정하는 것은 없습니다.
응답 자체도 측정값입니다: 본문을 읽을 수 있다면 웹 계층은 살아 있습니다.
최상위 상태는 필수 구성 요소에서만 도출됩니다. 대기열이 멈추면 답은 down이 아니라 degraded입니다 — 동기식 API 호출에는 대기열이 필요 없으며, 플랫폼이 다운되었다고 선언하는 것은 거짓 경보가 될 것입니다.
대기열 상태를 측정할 수 없으면 최상위 상태는 그대로 둡니다: 모르는 것은 무언가 고장 났다고 측정한 것과 같지 않습니다.
플랫폼이 다운되면 엔드포인트는 HTTP 503 응답을 반환합니다. 본문에는 봉투가 없어 모니터링 도구가 파싱 없이 경보를 낼 수 있으며, 응답은 어떤 캐시에도 저장되지 않습니다.
오류와 종료 코드
기계가 분기 기준으로 삼는 것은 안정적인 문자열입니다. error 필드의 텍스트는 사람을 대상으로 하고, 현지화되며, 예고 없이 바뀝니다 — 메시지 텍스트로 분기하는 연동은 지원되지 않으며, 그것이 깨지는 것은 버그가 아닙니다.
두 가지 분류 체계, 두 개의 필드. error_code 필드는 전송 계층(위 표)이며 가장 먼저 분기에 사용하는 값입니다. error_key 필드는 failed 안의 안정적인 비즈니스 규칙 키로 — INSUFFICIENT_CREDITS, NOT_FOUND, DUPLICATE_CONTACT, INSUFFICIENT_STOCK — 카탈로그(error_keys)와 아래에 사전으로 게시됩니다. 아직 키를 내보내지 않는 명령은 error_key: null을 반환합니다. 사전에 없는 키는 일반적인 실패로 취급하십시오.
ok — HTTP 200 · error_code — · CLI 0 · —
replayed — HTTP 200 · error_code — · CLI 0 · 멱등 재생입니다. 작업은 다시 실행되지 '않았습니다'.
failed — HTTP 422 · error_code failed · CLI 1 · 아니요 — 비즈니스 규칙이 거부했습니다(error_key 참조). 인수가 바뀌기 전까지는 의미가 없습니다.
429 rate_limited — 이 토큰에 대한 속도 제한입니다. 응답에는 항상 Retry-After 헤더와 retry_after, limit, bucket을 담은 본문이 포함됩니다. 고정 지연을 임의로 정하지 말고 이를 따르십시오. lg는 최대 세 번까지 기다렸다가 재시도한 뒤, 종료 코드 5로 끝납니다.
5xx server_error / network error — 지수 백오프와 '같은' 멱등성 키로 재시도하십시오. 키를 바꾸면 서버가 이미 완료했을 수도 있는 작업이 다시 실행됩니다. lg는 세 번(1 s, 2 s, 4 s) 재시도한 뒤, 종료 코드 6과 error_code 값 network_error 또는 server_error 상태로 끝납니다.
안정성 약속
연동 계약에서 가장 값비싼 질문은 “오늘 작성한 코드가 내일도 실행될까?”입니다. 숫자 하나가 이에 답합니다: 카탈로그의 contract_version 값과 모든 응답의 X-Contract-Version 헤더. 이 숫자는 정확히 한 가지 질문에 답합니다 — 이전에 작성한 코드가 변경 없이 여전히 실행되는가? 숫자가 증가하지 않았다면 그렇습니다. 증가했다면 아닙니다: 여러분이 의존하던 무언가가 제거되었거나 좁혀졌습니다.
공지는 아무것도 제거하지 않기 때문입니다: 기존 코드는 공지 다음 날에도 이전과 정확히 똑같이 실행됩니다. 공지 시점에 버전을 올리면 하나의 변경에 두 개의 신호를 내보내게 되고, 여러분이 첫 번째 신호를 무시하도록 길들여 — 정말 중요한 신호를 약하게 만듭니다. 공지는 이미 여러분이 하는 호출에 실려 옵니다: 카탈로그 행의 deprecated_at 및 replaced_by 값, 그 명령의 응답에 붙는 X-Deprecated 헤더와 deprecated 블록, 그리고 lg를 사용한다면 한 줄짜리 stderr 경고. 무언가가 사라진다는 것을 알기 위해 아무것도 할 필요가 없습니다. 이미 여러분의 로그에 있습니다.
공지와 제거 사이에는 최소 두 개의 역년 분기가 지나갑니다. 기간 내내 옛 명령은 여전히 응답하며, 호출할 때마다 경고합니다. CLI 이름이 폐기되면 그 후속 명령이 그 이름을 별칭으로 넘겨받습니다: 기간 동안 옛 이름은 옛 명령에 도달하고, 제거되는 날 같은 호출은 새 명령에 도달합니다 — 여러분이 클라이언트 릴리스를 내지 않아도 됩니다.
preview_invoice → get_invoice (2026년 9월 3일 공지). get_invoice 명령은 같은 미리 보기 블록을 반환하며 라인 항목, 세금 내역, 기록된 결제, 잔액, 그리고 여러분 자신의 ERP 키(external_ref)에 의한 조회를 추가로 제공합니다. preview_invoice 명령은 계속 동작하며, lg invoices preview도 마찬가지입니다 — 둘 다 경고를 냅니다.
변경 없음 — 새 명령 · 새 '선택적' 파라미터 · 새 응답 필드 · 새 오류 키 · 새 엔드포인트 — 아무것도 하지 않아도 됩니다. 알지 못하는 필드는 무시해야 합니다. 알 수 없는 필드에서 실패하는 파서는 규격을 따르지 않는 것입니다.
변경 없음 — 지원 중단 '공지': 명령이 사라질 예정이라는 알림 — 코드는 계속 실행됩니다. 캘린더에 작업을 넣어 두십시오 — 기간은 최소 6개월입니다.
증가 — 명령 제거 · 옛 CLI 이름 폐기 · 응답 필드 삭제 · 선택적 파라미터를 필수로 변경 · enum 범위 축소 — 기간을 놓쳤다는 뜻입니다. 공지는 세 군데에서 따로 여러분에게 전달되었습니다.
명령의 API 이름(예: list_loads)은 영원히 고정되며, HTTP 호출에 사용하는 이름입니다.
error_code(전송)와 error_key(비즈니스 규칙)는 안정적인 문자열입니다. 새 값이 나타날 수는 있습니다 — 사전에서 찾을 수 없는 키는 깨짐이 아니라 일반적인 실패로 취급하십시오.
HTTP 상태와 본문의 status 필드 사이의 대응 관계는 고정되어 있습니다.
버전 번호는 결코 줄어들지 않으며, 본문이 없는 304 및 429 응답을 포함한 모든 응답에서 읽을 수 있습니다.
오류와 설명의 '텍스트'. 현지화되며 예고 없이 바뀝니다. 메시지 텍스트로 분기하는 것은 지원되지 않습니다.
알지 못하는 필드가 없을 것이라는 가정. 필드를 추가해도 버전은 올라가지 않습니다.
비즈니스 키로서의 자동 증가 id. 여러분 자신의 키는 external_ref 필드로 담으십시오.
클래스 이름에서 파생된 동적 오류 키. 계약의 일부가 아닙니다.
명령 식별자 표
아래 표는 사람이 작성한 것이 아닙니다: 이 페이지가 제공될 때마다 실시간 명령 레지스트리에서 생성됩니다. 서버에 추가된 명령은 여기에 저절로 나타납니다. "게이트" 열은 명령이 확인을 요청하는지와 그 효과를 되돌릴 수 있는지를, "역할" 열은 어떤 계정 유형의 카탈로그에서 그 명령을 찾을 수 있는지를 알려 줍니다. 배지는 manager 수준 키가 필요한 명령, 파일을 받는 명령, lg에서만 실행되는 명령을 표시합니다.
API 이름(list_loads)은 고정되어 바뀌지 않으며, HTTP 호출에 사용하는 이름입니다. CLI 식별자(loads list)는 버전 관리 정책을 따릅니다: 한 번 공지되면 버전 증가와 마이그레이션 기간을 거쳐서만 바뀌며, 그 기간 동안 카탈로그는 옛 쌍을 별칭으로 제공합니다. 여기의 설명은 각 명령 자체의 레코드에서 가져와 축약한 것입니다 — 전체 텍스트, 파라미터 타입, enum 값은 카탈로그 엔드포인트를 읽거나 lg help 를 실행하여 확인하십시오. 어필리에이트 전용 명령은 여기에 나열되지 않습니다. 어필리에이트 계정은 자체 카탈로그에서 그 명령들을 봅니다.
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… (읽기 · — · 화주 · API: get_account_settings) [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),… (쓰기 · 확인 · 화주 · API: update_account_settings) [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… (읽기 · — · 전체 · API: get_accounting_settings)
lg accounting-settings set-status — Turn the company's accounting module on or off (muhasebe modülünü aç/kapa). (쓰기 · 확인 · 전체 · 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… (쓰기 · 확인 · 전체 · 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). (읽기 · — · 전체 · 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. (읽기 · — · 운송사 · 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… (읽기 · — · 화주 · API: get_ai_settings) [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… (쓰기 · 확인 · 화주 · API: update_ai_settings) [manager 키]
lg announcements list — Show the system announcements Logistivo sent to this user (new features, maintenance, policy changes) — newest first. (읽기 · — · 전체 · API: list_announcements)
lg announcements mark-read — Mark system announcements as read for this user. (쓰기 · — · 전체 · 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). (읽기 · — · 전체 · API: read_attachment) [파일 입력: 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 /… (읽기 · — · 전체 · 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). (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · API: create_company_bank_account) [manager 키]
lg bank-accounts delete — Delete one of OUR OWN company bank accounts (for example a closed account). (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · API: delete_company_bank_account) [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. (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · API: extract_supplier_bank_accounts) [파일 입력: attachment_uuid]
lg bank-accounts list — List bank accounts. (읽기 · — · 전체 · 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). (읽기 · — · 전체 · 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. (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · API: set_default_company_bank_account) [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… (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · API: decide_bank_account_verification) [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. (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · API: update_company_bank_account) [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. (읽기 · — · 전체 · API: list_banks)
lg bids accept — Accept a carrier's bid on one of this company's demands. (쓰기 · 확인 + 되돌릴 수 없음 · 화주 · 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. (읽기 · — · 운송사 · API: calculate_bid_earnings)
lg bids cancel — Withdraw (geri çek) one of THIS carrier company's PENDING bids. (쓰기 · 확인 + 되돌릴 수 없음 · 운송사 · 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. (쓰기 · 확인 + 되돌릴 수 없음 · 운송사 · 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,… (읽기 · — · 운송사 · API: get_my_demand_bid)
lg bids list — List the bids (teklif) THIS carrier company has submitted, newest first, with their outcome. (읽기 · — · 운송사 · 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). (쓰기 · 확인 + 되돌릴 수 없음 · 운송사 · 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,… (읽기 · — · 전체 · 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. (읽기 · — · 전체 · 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. (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · 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… (읽기 · — · 전체 · 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. (읽기 · — · 전체 · 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. (읽기 · — · 운송사 · 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. (쓰기 · 확인 · 운송사 · API: set_carrier_routes) [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. (읽기 · — · 전체 · 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). (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · API: attach_check_to_invoices) [manager 키]
lg checks bounce — Record that a cheque BOUNCED (came back unpaid). (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · 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. (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · API: cancel_settlement_check) [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. (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · API: mark_check_collected)
lg checks create — Register a cheque in the cheque portfolio. (쓰기 · 확인 · 전체 · API: create_settlement_check) [manager 키] [파일 입력: 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,… (읽기 · — · 전체 · 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… (읽기 · — · 전체 · 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. (쓰기 · 확인 · 전체 · API: detach_check_from_invoices) [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… (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · API: execute_settlement_check) [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). (쓰기 · 확인 · 전체 · API: update_settlement_check) [manager 키]
lg companies add-role — Add a role to this company (firmaya rol ekle): customer (shipper), carrier, customs (customs broker) or affiliate. (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · API: add_company_role) [manager 키]
lg companies delete-logo — Remove this company's logo (firma logosu) from the branded login portal, documents and the panel. (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · API: delete_company_logo) [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… (읽기 · — · 전체 · 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). (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · 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). (읽기 · — · 전체 · 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… (읽기 · — · 전체 · 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. (쓰기 · 확인 · 운송사, 관세사 · API: set_company_brand_colors) [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`. (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · API: set_company_logo) [manager 키] [파일 입력: 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… (쓰기 · 확인 · 전체 · API: update_company_profile) [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),… (쓰기 · 확인 · 전체 · API: upload_company_document) [파일 입력: 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… (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · 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. (읽기 · — · 전체 · 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… (읽기 · — · 전체 · 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. (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · API: create_company_domain) [manager 키]
lg company-domains delete — Remove one of our UNVERIFIED company domains (e.g. added by mistake). (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · API: delete_company_domain) [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. (읽기 · — · 전체 · 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). (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · API: resend_company_domain_code) [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. (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · API: verify_company_domain) [manager 키]
lg company-relationships accept — Accept a connection proposal another company sent us (relationship_id from list_company_relationships direction=incoming). (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · API: accept_company_relationship) [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). (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · API: create_company_relationship) [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… (읽기 · — · 전체 · API: list_company_relationships)
lg company-relationships reject — Reject a connection proposal another company sent us (relationship_id from list_company_relationships direction=incoming). (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · API: reject_company_relationship) [manager 키]
lg company-relationships revoke — End a company connection we are a party of (either side may end it), or withdraw a pending proposal. (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · API: revoke_company_relationship) [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. (쓰기 · 확인 · 전체 · 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. (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · 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. (쓰기 · 확인 · 전체 · 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… (쓰기 · 확인 · 전체 · API: archive_business_contact)
lg contacts create — Create a new business contact (cari) in the company directory. (쓰기 · 확인 · 전체 · API: create_business_contact)
lg contacts delete-address — Delete one of a business contact's addresses. (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · 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). (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · API: delete_business_contact_bank_account)
lg contacts delete-person — Delete a person from a business contact, together with that person's notification preferences. (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · 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,… (읽기 · — · 전체 · API: extract_business_contact_from_image) [파일 입력: 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. (읽기 · — · 전체 · 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. (읽기 · — · 전체 · API: get_business_contact)
lg contacts invite — Invite a business contact to join Logistivo by e-mail. (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · 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. (읽기 · — · 전체 · 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. (읽기 · — · 전체 · 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… (읽기 · — · 전체 · 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. (읽기 · — · 전체 · 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. (읽기 · — · 전체 · API: list_business_contact_routes)
lg contacts remove-company-link — Remove the link between a business contact and its company on the Logistivo platform. (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · API: unlink_business_contact_company) [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. (쓰기 · 확인 · 전체 · 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. (읽기 · — · 전체 · 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. (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · 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). (쓰기 · 확인 · 전체 · API: set_business_contact_person_notifications)
lg contacts update — Update fields of an existing business contact. (쓰기 · 확인 · 전체 · API: update_business_contact)
lg contacts update-address — Correct one of a business contact's addresses. (쓰기 · 확인 · 전체 · 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. (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · API: update_business_contact_bank_account)
lg contacts update-person — Correct a contact person's details. (쓰기 · 확인 · 전체 · 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… (읽기 · — · 전체 · 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). (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · API: send_conversation_file) [파일 입력: attachment_uuid]
lg conversations add-invitation — Invite a person from ANOTHER company into a load chat by e-mail (sohbete dışarıdan davet). (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · API: invite_to_conversation)
lg conversations add-message — Post a message into a load/bid conversation AS THIS USER (not as an assistant). (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · 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". (쓰기 · 확인 · 전체 · 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. (쓰기 · 확인 + 되돌릴 수 없음 · 화주 · 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. (읽기 · — · 전체 · 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. (읽기 · — · 전체 · 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. (읽기 · — · 전체 · API: list_conversation_invitations)
lg conversations list-messages — Read the most recent messages of one conversation — give it a load code (e.g. (읽기 · — · 전체 · API: list_conversation_messages)
lg conversations list-participants — Who is in this conversation — name and company of every participant. (읽기 · — · 전체 · 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. (쓰기 · — · 전체 · 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). (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · 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). (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · 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). (쓰기 · 확인 · 전체 · 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. (읽기 · — · 전체 · 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. (읽기 · — · 전체 · 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. (읽기 · — · 전체 · 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. (읽기 · — · 화주 · 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. (읽기 · — · 전체 · 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. (읽기 · — · 화주, 운송사 · 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. (읽기 · — · 화주, 운송사 · 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). (읽기 · — · 운송사 · API: get_demand_settings) [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. (쓰기 · 확인 · 운송사 · API: update_demand_settings) [manager 키]
lg demand-targets search — Resolve a pickup/delivery location for a demand to a target token ("5-" = district/postal area, "10-" = seaport address). (읽기 · — · 화주 · API: lookup_demand_target)
lg demands create — Open a freight demand (talep) so carriers can bid. (쓰기 · 확인 + 되돌릴 수 없음 · 화주 · API: create_demand) [파일 입력: 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… (읽기 · — · 화주 · 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… (읽기 · — · 화주 · API: extract_demand_from_text)
lg demands get — Detail of ONE freight demand. (읽기 · — · 화주, 운송사 · API: get_demand)
lg demands list — List freight demands (talep) this carrier is allowed to bid on, newest first. (읽기 · — · 운송사 · 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. (읽기 · — · 화주 · 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… (읽기 · — · 화주 · API: get_demand_form_options)
lg demands set-status — Close (make passive) one of this company's ACTIVE demands so carriers stop bidding. (쓰기 · 확인 + 되돌릴 수 없음 · 화주 · 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). (쓰기 · 확인 · 화주 · API: update_demand) [파일 입력: 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… (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · API: send_direct_message)
lg direct-conversations create — Start a direct chat. (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · 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. (읽기 · — · 전체 · 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). (읽기 · — · 전체 · 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. (읽기 · — · 전체 · 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… (읽기 · — · 전체 · 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). (쓰기 · — · 전체 · 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. (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · API: delete_direct_message)
lg direct-conversations update — Rename a GROUP direct chat (private one-to-one chats have no title). (쓰기 · 확인 · 전체 · 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). (쓰기 · 확인 · 전체 · 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… (쓰기 · — · 전체 · API: check_document_compliance) [파일 입력: 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. (읽기 · — · 전체 · 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). (읽기 · — · 전체 · 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… (읽기 · — · 운송사 · 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… (읽기 · — · 운송사 · 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". (읽기 · — · 화주, 운송사 · 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. (읽기 · — · 화주, 운송사 · 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. (쓰기 · 확인 + 되돌릴 수 없음 · 화주, 운송사 · 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. (쓰기 · 확인 · 화주, 운송사 · API: create_driver_advance) [파일 입력: attachment_uuid]
lg driver-advances delete — Delete a driver money movement that was entered by mistake (duplicate, wrong driver). (쓰기 · 확인 + 되돌릴 수 없음 · 화주, 운송사 · 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. (읽기 · — · 화주, 운송사 · 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. (쓰기 · 확인 · 화주, 운송사 · 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". (쓰기 · 확인 · 운송사 · 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. (쓰기 · 확인 + 되돌릴 수 없음 · 운송사 · 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. (읽기 · — · 운송사 · API: list_driver_availabilities)
lg driver-availabilities update — Correct one availability period (id from list_driver_availabilities): kind, dates, Schengen presence or note. (쓰기 · 확인 · 운송사 · 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… (읽기 · — · 화주, 운송사 · API: get_driver_expense_settings)
lg driver-expense-settings update — Change this company's driver expense module settings — only the fields you pass change. (쓰기 · 확인 · 화주, 운송사 · API: update_driver_expense_settings) [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. (쓰기 · 확인 + 되돌릴 수 없음 · 화주, 운송사 · API: process_receipt) [파일 입력: 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". (쓰기 · 확인 · 화주, 운송사 · API: create_driver_expense)
lg driver-expenses delete — Delete a driver expense entered by mistake (duplicate receipt, wrong driver, test entry). (쓰기 · 확인 + 되돌릴 수 없음 · 화주, 운송사 · 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. (읽기 · — · 화주, 운송사 · 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. (읽기 · — · 화주, 운송사 · 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. (읽기 · — · 화주, 운송사 · API: get_driver_expense)
lg driver-expenses list — List driver expense receipts (fuel, toll, ferry, parking, food, repair…) with a converted total. (읽기 · — · 화주, 운송사 · 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… (읽기 · — · 화주, 운송사 · 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… (읽기 · — · 화주, 운송사 · 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… (쓰기 · 확인 · 화주, 운송사 · 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). (쓰기 · 확인 · 화주, 운송사 · 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… (쓰기 · 확인 · 화주, 운송사 · 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). (쓰기 · — · 화주, 운송사 · 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… (쓰기 · 확인 · 운송사 · 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… (쓰기 · 확인 · 운송사 · 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… (읽기 · — · 운송사 · 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… (읽기 · — · 운송사 · 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. (쓰기 · — · 운송사 · API: dismiss_driver_schedule_suggestion)
lg driver-statements cancel — Cancel a statement that should not exist (opened by mistake, duplicated). (쓰기 · 확인 + 되돌릴 수 없음 · 화주, 운송사 · API: cancel_driver_account)
lg driver-statements create — Open a NEW draft settlement statement for a driver. (쓰기 · 확인 · 화주, 운송사 · 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… (읽기 · — · 화주, 운송사 · 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. (쓰기 · 확인 + 되돌릴 수 없음 · 화주, 운송사 · API: finalize_driver_account) [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… (읽기 · — · 화주, 운송사 · 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… (읽기 · — · 화주, 운송사 · 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). (쓰기 · 확인 · 화주, 운송사 · API: reopen_driver_account) [manager 키]
lg driver-statements update — Change the note printed on a DRAFT driver settlement statement (e.g. "September trips, fuel excluded"). (쓰기 · 확인 · 화주, 운송사 · 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. (쓰기 · 확인 · 화주, 운송사 · 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 /… (읽기 · — · 화주, 운송사 · 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. (쓰기 · 확인 · 운송사 · API: add_driver_document) [파일 입력: attachment_uuid]
lg drivers archive — Archive (deactivate) a driver: their account is disabled, open mobile sessions are revoked and the login link stops working. (쓰기 · 확인 + 되돌릴 수 없음 · 운송사 · 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,… (읽기 · — · 운송사 · API: check_driver_for_trip)
lg drivers create — Create a new driver account for this carrier company. (쓰기 · 확인 · 운송사 · API: create_driver)
lg drivers delete-document — Remove a driver paper from the driver's file. (쓰기 · 확인 + 되돌릴 수 없음 · 운송사 · 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… (읽기 · — · 운송사 · 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. (읽기 · — · 운송사 · 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)… (읽기 · — · 운송사 · 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. (읽기 · — · 운송사 · 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. (읽기 · — · 운송사 · API: list_driver_locations)
lg drivers login-link — Produce the driver's 48-hour mobile app login link (sensitive credential). (쓰기 · 확인 · 운송사 · 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"). (쓰기 · — · 운송사 · API: request_driver_location)
lg drivers search — Resolve one of this company's drivers by name to its driver_id. (읽기 · — · 운송사 · API: lookup_driver)
lg drivers update — Correct a driver's first/last name. (쓰기 · 확인 · 운송사 · 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. (쓰기 · 확인 · 운송사 · 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). (쓰기 · 확인 + 되돌릴 수 없음 · 운송사 · 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". (쓰기 · 확인 · 전체 · API: create_equipment_damage)
lg equipment-damages delete — Delete a damage record that was opened by mistake (a duplicate, the wrong vehicle). (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · 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". (읽기 · — · 전체 · 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… (읽기 · — · 전체 · 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. (쓰기 · 확인 · 전체 · 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. (쓰기 · 확인 · 전체 · 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".… (쓰기 · 확인 · 전체 · API: create_equipment_inspection) [파일 입력: photos[].attachment_uuid]
lg equipment-inspections delete — Delete an equipment inspection that was recorded by mistake (wrong vehicle, duplicate), together with its photos. (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · 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… (읽기 · — · 전체 · 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… (읽기 · — · 전체 · 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). (쓰기 · 확인 · 전체 · 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… (읽기 · — · 전체 · 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". (쓰기 · 확인 · 전체 · API: update_equipment_settings) [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. (읽기 · — · 전체 · API: get_equipment_timeline)
lg export-documents add-item — Append a line item to an export document. (쓰기 · — · 전체 · API: add_export_document_item)
lg export-documents create — Create a new export document draft. (쓰기 · — · 전체 · 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. (쓰기 · — · 전체 · API: create_export_document_set) [파일 입력: attachment_uuid]
lg export-documents delete — Delete one export document of this company (draft or generated). (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · 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). (쓰기 · — · 전체 · 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. (쓰기 · — · 전체 · API: extract_export_document_from_text) [파일 입력: 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. (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · 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. (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · 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. (읽기 · — · 전체 · 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). (읽기 · — · 전체 · API: list_export_documents)
lg export-documents options — List the export document types and the ready-made document sets with their credit cost. (읽기 · — · 전체 · 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… (읽기 · — · 전체 · API: plan_export_document_generation)
lg export-documents remove-item — Delete one line item by its 1-based position. (쓰기 · — · 전체 · API: remove_export_document_item)
lg export-documents set — Set one or more fields on an export document draft. (쓰기 · — · 전체 · 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. (쓰기 · — · 전체 · 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. (읽기 · — · 전체 · 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. (읽기 · — · 전체 · 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). (읽기 · — · 화주, 운송사 · 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. (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · API: archive_freight_invoice)
lg freight-invoices create — Attach 1-20 freight invoices (navlun faturası) to a load. (쓰기 · 확인 · 전체 · API: upload_freight_invoices) [파일 입력: 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. (읽기 · — · 전체 · 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". (쓰기 · 확인 · 전체 · 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… (읽기 · — · 화주, 운송사 · 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. (쓰기 · 확인 · 화주, 운송사 · API: create_fuel_card)
lg fuel-cards delete — Delete a fuel / toll card (DKV, UTA, Shell…) that was entered BY MISTAKE. (쓰기 · 확인 + 되돌릴 수 없음 · 화주, 운송사 · 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. (읽기 · — · 화주, 운송사 · 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. (쓰기 · 확인 · 화주, 운송사 · 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… (읽기 · — · 전체 · 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. (읽기 · — · 전체 · 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),… (읽기 · — · 전체 · API: list_integration_keys) [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). (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · API: revoke_integration_key) [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). (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · API: invite_teammate) [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. (읽기 · — · 전체 · API: list_pending_invitations)
lg invitations resend — Re-send a pending teammate invitation e-mail and extend its expiry by 14 days. (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · API: resend_invitation) [manager 키]
lg invitations revoke — Cancel a pending teammate invitation so its link stops working (it can later be re-sent). (쓰기 · 확인 · 전체 · API: revoke_invitation) [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,… (읽기 · — · 전체 · 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). (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · API: create_invoice_template) [manager 키] [파일 입력: logo_attachment_uuid, signature_image_attachment_uuid]
lg invoice-templates delete — Delete one of your invoice template configurations. (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · API: delete_invoice_template) [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… (읽기 · — · 전체 · 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. (쓰기 · 확인 · 전체 · API: set_default_invoice_template) [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… (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · API: update_invoice_template) [manager 키] [파일 입력: 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). (쓰기 · — · 전체 · 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. (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · API: record_invoice_payment)
lg invoices cancel — Cancel an ISSUED invoice this company issued: posts the reversing journal entry and marks the invoice cancelled. (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · API: cancel_invoice)
lg invoices create — Create a DRAFT invoice (reversible) issued by the current company to a recipient business contact. (쓰기 · — · 전체 · API: create_invoice_draft)
lg invoices delete-draft — Delete a DRAFT invoice of this company together with its lines and taxes. (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · 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). (읽기 · — · 전체 · 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. (읽기 · — · 전체 · API: get_invoice)
lg invoices issue — Issue (finalize) a DRAFT invoice: assigns a number and posts accounting entries. (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · 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). (읽기 · — · 전체 · 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. (읽기 · — · 전체 · API: preview_invoice · 지원 중단: 2026-09-03 · 대체 명령 get_invoice)
lg invoices remove-line — Remove one line from a DRAFT invoice your company issued; the totals are recalculated. (쓰기 · 확인 · 전체 · 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. (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · 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. (쓰기 · — · 전체 · 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). (쓰기 · — · 전체 · 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. (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · API: approve_join_request) [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). (읽기 · — · 전체 · API: list_join_requests) [manager 키]
lg join-requests reject — Reject a pending join request: the applicant does not join our company and is e-mailed the decision. (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · API: reject_join_request) [manager 키]
lg journal-entries create — Post a manual double-entry journal entry (yevmiye fişi). (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · API: create_journal_entry)
lg journal-entries get — Read one journal entry with its lines (account code/name, debit, credit, counterparty) and totals. (읽기 · — · 전체 · API: get_journal_entry)
lg journal-entries list — List journal entries (yevmiye fişleri) of the company, newest first, with optional date window. (읽기 · — · 전체 · API: list_journal_entries)
lg language-settings get — Read the signed-in user's own language settings (dil ayarları). (읽기 · — · 전체 · 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". (쓰기 · — · 전체 · 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:… (읽기 · — · 전체 · 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,… (쓰기 · 확인 · 전체 · API: update_load_ai_settings) [manager 키]
lg load-containers create — Add a sea container number to a load (yüke konteyner ekle) — "add MSC container MSCU1234565 to FKZ8515". (쓰기 · 확인 · 화주, 운송사 · 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). (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · 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. (읽기 · — · 전체 · 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. (읽기 · — · 전체 · 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… (쓰기 · 확인 · 전체 · 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… (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · API: attach_chat_file_to_load) [파일 입력: 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. (읽기 · — · 전체 · 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). (쓰기 · 확인 · 화주, 운송사 · 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. (쓰기 · 확인 + 되돌릴 수 없음 · 화주, 운송사 · 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… (쓰기 · — · 화주, 운송사 · 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. (읽기 · — · 화주, 운송사 · 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. (읽기 · — · 화주, 운송사 · 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… (쓰기 · — · 화주, 운송사 · API: optimize_trip_route)
lg load-groups remove-load — Take one consignment out of a groupage trip you own. (쓰기 · 확인 · 화주, 운송사 · 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. (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · 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. (읽기 · — · 전체 · 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". (쓰기 · 확인 + 되돌릴 수 없음 · 운송사 · 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". (읽기 · — · 전체 · 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… (읽기 · — · 전체 · 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). (읽기 · — · 전체 · 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". (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · 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". (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · 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). (쓰기 · 확인 · 전체 · 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. (쓰기 · 확인 · 전체 · 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… (읽기 · — · 전체 · 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). (쓰기 · 확인 · 전체 · 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. (쓰기 · 확인 · 전체 · 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… (쓰기 · 확인 · 전체 · 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). (쓰기 · 확인 · 전체 · 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. (읽기 · — · 전체 · 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". (쓰기 · — · 전체 · 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… (읽기 · — · 전체 · 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. (읽기 · — · 전체 · API: get_load_report_options)
lg load-types search — Resolve a load/transport type (e.g. (읽기 · — · 전체 · 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. (쓰기 · 확인 · 전체 · 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. (읽기 · — · 전체 · 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). (쓰기 · 확인 · 전체 · 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. (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · 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. (쓰기 · — · 전체 · API: reanalyze_load_documents)
lg loads archive — Archive one of the company's OWN loads (yükü arşivle) — "FKZ8515'i arşive al". (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · 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. (쓰기 · 확인 · 운송사 · 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. (읽기 · — · 전체 · 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… (쓰기 · 확인 · 전체 · API: resolve_load_problem_flag)
lg loads create — Open a freight load (yük). (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · 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". (읽기 · — · 전체 · 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… (읽기 · — · 화주 · 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… (읽기 · — · 전체 · API: get_load)
lg loads list — List the freight loads (yük) this company can see, newest first. (읽기 · — · 전체 · 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. (읽기 · — · 전체 · 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… (읽기 · — · 전체 · 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). (읽기 · — · 전체 · 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). (읽기 · — · 전체 · 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… (읽기 · — · 전체 · 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". (쓰기 · — · 전체 · 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?". (읽기 · — · 전체 · 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… (읽기 · — · 전체 · 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. (쓰기 · 확인 · 운송사 · 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… (읽기 · — · 전체 · 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). (쓰기 · 확인 + 되돌릴 수 없음 · 운송사 · 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". (쓰기 · 확인 · 운송사 · 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". (쓰기 · 확인 · 운송사 · 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. (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · 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. (읽기 · — · 전체 · 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… (읽기 · — · 화주 · API: get_notification_settings) [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… (쓰기 · 확인 · 화주 · API: update_notification_settings) [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. (읽기 · — · 전체 · API: list_notifications)
lg notifications mark-read — Mark ALL of the signed-in user's unread notifications as read (empty the bell). (쓰기 · — · 전체 · 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… (읽기 · — · 전체 · 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… (읽기 · — · 전체 · API: list_packages)
lg pallets add-measurement — Record a NEW measurement for an existing pallet (dimensions in centimetres and/or gross weight in kilograms). (쓰기 · 확인 · 전체 · 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). (쓰기 · — · 전체 · API: add_pallet_proof) [파일 입력: 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… (읽기 · — · 전체 · 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. (쓰기 · 확인 · 전체 · API: create_pallet)
lg pallets delete — Delete one of this company's pallet records. (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · API: delete_pallet)
lg pallets delete-proof — Remove one proof photo from one of this company's pallets. (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · 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. (쓰기 · — · 전체 · API: extract_pallet_from_photos) [파일 입력: 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… (읽기 · — · 전체 · 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. (읽기 · — · 전체 · 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. (쓰기 · 확인 · 전체 · API: update_pallet)
lg parasut-contacts create — Create a new customer or supplier contact IN PARAŞÜT and keep its local copy. (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · 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,… (읽기 · — · 전체 · 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… (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · 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,… (읽기 · — · 전체 · 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… (읽기 · — · 전체 · 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,… (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · API: disconnect_parasut) [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… (읽기 · — · 전체 · API: get_parasut_settings) [manager 키]
lg parasut-settings update — Connect this company's Paraşüt account or renew its credentials (replaces an existing connection). (쓰기 · 확인 · 전체 · API: connect_parasut) [manager 키] [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. (읽기 · — · 전체 · API: list_payables)
lg payment-cards delete — Remove a saved payment card (card_id from list_payment_cards). (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · API: delete_payment_card) [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. (읽기 · — · 전체 · 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. (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · API: set_default_payment_card) [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". (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · API: cancel_settlement_instruction)
lg payment-instructions download — Get the bank payment instruction document (PDF) with a short-lived download link. (읽기 · — · 전체 · 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… (읽기 · — · 전체 · 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. (읽기 · — · 전체 · 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… (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · 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… (읽기 · — · 운송사 · API: get_planning_board)
lg plans archive — Close a plan because the user says the work is finished or abandoned. (쓰기 · — · 전체 · 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"). (쓰기 · 확인 · 전체 · API: create_plan)
lg plans get — Read one plan: the steps that were agreed AND the commands that actually ran while it was active. (읽기 · — · 전체 · API: get_plan)
lg plans list — List this company's plans, newest first. (읽기 · — · 전체 · API: list_plans)
lg ports search — Find a seaport by name or UN/LOCODE (liman ara) — "Mersin", "TRMER", "Trieste". (읽기 · — · 전체 · 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"). (쓰기 · — · 전체 · API: remember_preference)
lg preferences delete — Forget one stored preference of this user. (쓰기 · — · 전체 · API: forget_preference)
lg preferences list — List what you have been asked to remember about THIS user, with the labels. (읽기 · — · 전체 · API: list_preferences)
lg product-brands create — Create a new product brand for this company (the panel's "new brand"). (쓰기 · 확인 · 화주 · API: create_product_brand)
lg product-brands list — List this company's product brands (id, name, code, active flag, number of products). (읽기 · — · 화주 · API: list_product_brands)
lg product-categories create — Create a new product category for this company (the panel's "new category"). (쓰기 · 확인 · 화주 · API: create_product_category)
lg product-categories list — List this company's product categories (id, name, code, active flag, number of products). (읽기 · — · 화주 · API: list_product_categories)
lg products add-image — Add a photo to a product's gallery. (쓰기 · — · 화주 · API: add_product_image) [파일 입력: 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. (쓰기 · 확인 · 화주 · API: create_product)
lg products delete — Delete a product from this company's catalogue. (쓰기 · 확인 + 되돌릴 수 없음 · 화주 · API: delete_product)
lg products delete-image — Remove one photo from a product's gallery (image_id from get_product). (쓰기 · 확인 + 되돌릴 수 없음 · 화주 · 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. (쓰기 · — · 화주 · API: extract_product_from_photos) [파일 입력: 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 /… (읽기 · — · 화주 · 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. (읽기 · — · 화주 · 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. (읽기 · — · 화주 · 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). (읽기 · — · 화주 · API: get_product_options)
lg products search — Resolve a product to its product_id + on-hand quantity. (읽기 · — · 화주 · API: lookup_product)
lg products set-primary-image — Make one of a product's photos its cover image (image_id from get_product). (쓰기 · — · 화주 · 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. (쓰기 · 확인 · 화주 · 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). (읽기 · — · 전체 · 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. (읽기 · — · 전체 · 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. (읽기 · — · 전체 · 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… (읽기 · — · 전체 · API: get_accounting_report)
lg reservations approve — As the warehouse owner, approve a pending reservation received at your warehouse (the booker is notified). (쓰기 · 확인 · 화주 · 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. (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · 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). (쓰기 · 확인 + 되돌릴 수 없음 · 화주 · API: complete_reservation)
lg reservations create — Book a warehouse dock time slot. (쓰기 · 확인 · 전체 · 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. (읽기 · — · 전체 · 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… (읽기 · — · 전체 · API: list_reservations)
lg reservations list-slots — Available dock time slots of one day with remaining capacity. (읽기 · — · 전체 · 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. (쓰기 · 확인 + 되돌릴 수 없음 · 화주 · 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. (쓰기 · 확인 · 화주 · 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. (읽기 · — · 운송사 · API: list_nearby_roro_routes)
lg roro-routes select — Select the Ro-Ro (ferry) line a load you are carrying will use. (쓰기 · 확인 · 운송사 · API: select_roro_route)
lg roro-routes set-required — Mark whether a load you are carrying will travel by Ro-Ro (ferry) or not. (쓰기 · 확인 · 운송사 · 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). (쓰기 · 확인 · 운송사 · 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… (쓰기 · 확인 · 운송사 · 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). (쓰기 · 확인 · 운송사 · API: create_route_plan)
lg route-plans delete — Cancel and delete a route plan (route_plan_id or route_plan_code). (쓰기 · 확인 + 되돌릴 수 없음 · 운송사 · 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… (읽기 · — · 운송사 · 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. (읽기 · — · 운송사 · 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 /… (쓰기 · 확인 · 운송사 · 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. (쓰기 · 확인 · 운송사 · 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. (쓰기 · 확인 · 운송사 · 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. (쓰기 · 확인 · 운송사 · 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 /… (읽기 · — · 운송사 · 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). (쓰기 · 확인 · 운송사 · API: import_driver_schengen_periods) [파일 입력: 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). (읽기 · — · 운송사 · 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… (읽기 · — · 운송사 · 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… (읽기 · — · 운송사 · 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. (읽기 · — · 운송사 · 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). (쓰기 · 확인 + 되돌릴 수 없음 · 운송사 · 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"… (쓰기 · 확인 · 운송사 · 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. (쓰기 · 확인 · 운송사 · API: set_driver_schengen_exemption)
lg settlements cancel — CANCEL a bulk collection / payment (settlement batch). (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · API: cancel_settlement_batch) [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… (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · 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,… (읽기 · — · 전체 · API: get_settlement_batch)
lg settlements list — List bulk collection/payment batches (code, direction, instrument, contact, currency, total, value date, status), newest first. (읽기 · — · 전체 · 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… (읽기 · — · 전체 · 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… (읽기 · — · 전체 · 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… (읽기 · — · 전체 · 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". (쓰기 · 확인 · 화주, 운송사 · API: track_ship_for_load)
lg ship-trackings delete — Stop tracking a ship on a load (gemi takibini durdur). (쓰기 · 확인 · 화주, 운송사 · 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". (읽기 · — · 전체 · 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". (읽기 · — · 전체 · 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. (쓰기 · 확인 + 되돌릴 수 없음 · 화주 · API: create_stock_adjustment)
lg stock list — Read current on-hand stock levels. (읽기 · — · 화주 · 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. (읽기 · — · 화주 · API: list_stock_movements)
lg stock move — Record a stock movement: inbound (giriş), outbound (çıkış), or transfer between locations. (쓰기 · 확인 + 되돌릴 수 없음 · 화주 · 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. (읽기 · — · 화주 · 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. (쓰기 · 확인 · 화주 · API: create_sub_company) [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. (쓰기 · 확인 + 되돌릴 수 없음 · 화주 · API: delete_sub_company) [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. (읽기 · — · 화주 · 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?". (읽기 · — · 전체 · API: get_tariff_chapter)
lg tariff-matrices get — FREE. (읽기 · — · 전체 · API: get_tariff_matrix)
lg tariff-matrices list — FREE. (읽기 · — · 전체 · API: list_tariff_matrix_runs)
lg tariff-matrices preview — FREE. (읽기 · — · 전체 · 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. (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · API: run_tariff_matrix)
lg tariffs coverage — FREE. (읽기 · — · 전체 · 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. (쓰기 · — · 전체 · API: extract_tariff_codes_from_invoice) [파일 입력: 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. (읽기 · — · 전체 · 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). (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · 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. (읽기 · — · 전체 · 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. (읽기 · — · 전체 · API: lookup_tariff_code)
lg teammates delete — Remove a person from the company team. (쓰기 · 확인 + 되돌릴 수 없음 · 전체 · API: remove_teammate) [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… (읽기 · — · 전체 · 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). (쓰기 · 확인 · 전체 · API: update_teammate_role) [manager 키]
lg teammates set-status — Activate or deactivate a team member. (쓰기 · 확인 · 전체 · API: set_teammate_status) [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). (쓰기 · 확인 + 되돌릴 수 없음 · 운송사 · API: submit_tender_bid) [파일 입력: 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. (읽기 · — · 운송사 · 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. (쓰기 · 확인 + 되돌릴 수 없음 · 화주 · 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). (쓰기 · 확인 · 화주 · API: add_tender_document) [파일 입력: 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). (쓰기 · 확인 · 화주 · API: create_tender) [파일 입력: attachment_uuid]
lg tenders delete-document — Remove a specification file from one of YOUR tenders (document_id from get_tender → documents[]). (쓰기 · 확인 + 되돌릴 수 없음 · 화주 · 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). (읽기 · — · 화주 · API: extract_tender_specification) [파일 입력: 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. (쓰기 · 확인 · 화주 · 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. (읽기 · — · 화주, 운송사 · API: get_tender)
lg tenders list — List document-based freight tenders. (읽기 · — · 화주, 운송사 · 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. (쓰기 · 확인 · 화주 · 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. (읽기 · — · 전체 · 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… (읽기 · — · 전체 · 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… (읽기 · — · 전체 · API: preview_account_closure)
lg users get — Who am I? (읽기 · — · 전체 · 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. (쓰기 · 확인 · 화주, 운송사 · API: assign_vehicle_to_driver)
lg vehicle-assignments list — List which driver currently holds which vehicle (tractor unit / trailer). (읽기 · — · 화주, 운송사 · API: list_vehicle_assignments)
lg vehicle-assignments revoke — Close an open vehicle assignment: the driver hands the vehicle back. (쓰기 · 확인 · 화주, 운송사 · 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. (쓰기 · 확인 · 화주, 운송사 · API: create_vehicle_expense) [파일 입력: attachment_uuid]
lg vehicle-expenses delete — Delete a vehicle cost entered by mistake (duplicate, wrong plate, test entry). (쓰기 · 확인 + 되돌릴 수 없음 · 화주, 운송사 · 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. (읽기 · — · 화주, 운송사 · 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". (쓰기 · 확인 · 화주, 운송사 · 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… (쓰기 · 확인 · 화주, 운송사 · API: add_vehicle_document) [파일 입력: attachment_uuid]
lg vehicles archive — Take a vehicle out of service (archive it) or put an archived one back into service. (쓰기 · 확인 · 화주, 운송사 · 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. (쓰기 · 확인 · 화주, 운송사 · API: create_vehicle) [파일 입력: attachment_uuid]
lg vehicles delete — Delete a vehicle record that was created BY MISTAKE (wrong plate, duplicate). (쓰기 · 확인 + 되돌릴 수 없음 · 화주, 운송사 · 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). (쓰기 · 확인 + 되돌릴 수 없음 · 화주, 운송사 · 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… (읽기 · — · 화주, 운송사 · 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… (읽기 · — · 화주, 운송사 · 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. (읽기 · — · 화주, 운송사 · API: lookup_vehicle)
lg vehicles update — Correct a fleet vehicle's fields: plate, kind, brand, model, model year, VIN or note. (쓰기 · 확인 · 화주, 운송사 · 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… (쓰기 · 확인 · 화주, 운송사 · API: update_vehicle_document)
lg wallets get — Read this company's Logistivo WALLET balance — the prepaid MONEY balance (amount + currency). (읽기 · — · 전체 · 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. (읽기 · — · 전체 · 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). (쓰기 · 확인 · 화주 · API: create_warehouse_area)
lg warehouse-areas delete — Delete one area/ramp of a warehouse. (쓰기 · 확인 + 되돌릴 수 없음 · 화주 · 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. (쓰기 · 확인 · 화주 · 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). (쓰기 · 확인 · 화주 · 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. (읽기 · — · 화주 · 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). (쓰기 · 확인 + 되돌릴 수 없음 · 화주 · API: revoke_warehouse_link)
lg warehouse-links set-status — Turn a warehouse booking link off (nobody can book through it) or back on. (쓰기 · 확인 · 화주 · 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. (쓰기 · 확인 · 화주 · API: create_warehouse)
lg warehouses delete — Delete one of this company's warehouses. (쓰기 · 확인 + 되돌릴 수 없음 · 화주 · 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… (읽기 · — · 화주 · 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. (읽기 · — · 화주 · API: list_warehouses)
lg warehouses search — Resolve a warehouse by name to its warehouse_id, with its areas. (읽기 · — · 화주 · 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). (쓰기 · 확인 · 화주 · 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. (쓰기 · 확인 · 화주 · API: update_warehouse)
ERP 및 CRM 연동 — 신원: 서비스 계정이 아니라 실제 사용자
ERP나 CRM은 패널에서 발급한 개인 액세스 토큰을 가진 실제 회사 사용자로서 Logistivo에 연결합니다. 회사도 없고, 범위 제한에서 면제되며, 아무도 책임지지 않는 합성 서비스 계정은 결코 만들어지지 않습니다.
이것은 선호가 아니라 아키텍처입니다. 멀티테넌트 격리는 전적으로 사용자의 회사에 기반합니다. 회사가 없는 신원에서는 격리 범위가 작동하지 않게 되며, 그 토큰에서 잘못된 쿼리 하나가 자신의 것이 아닌 데이터를 읽게 됩니다. 두 번째 이유는 감사입니다: 원장의 사용자 열은 "누가 이것을 실행했는가"를 한 사람에게 묶습니다. 서비스 계정은 그 열을 무의미하게 만들고, 인보이스를 발행하는 연동에 소유자가 없게 만듭니다. 세 번째는 폐기입니다: 토큰이 한 사람에게 속하면 그 사람이 떠날 때 연동은 조용해집니다. 소유자 없는 브리지는 수년간 조용히 계속 쓰기를 하는 브리지입니다.
실무에서는: 회사가 패널에서 일반 사용자를 만들고(예: 지정된 직원이 소유하는 "ERP Bridge"), 좁은 역할을 부여한 뒤, 그 사용자의 세션에서 토큰을 발급해 ERP에 넣습니다.
그 사용자는 권한 시스템에서 보이고, 권한을 줄일 수 있으며, 그 토큰은 단독으로 폐기할 수 있습니다. 금지되는 것은 계정을 만드는 것이 아니라 테넌트에 묶이지 않은 계정을 만드는 것입니다.
토큰 하나에 연동 하나. 두 시스템이 토큰을 공유하면 폐기의 세분성이 사라집니다: CRM을 끊으면 ERP도 끊기게 됩니다.
ERP 및 CRM 연동 — 버전 관리와 지원 중단
카탈로그 응답에는 정수 contract_version 값이 있고, 명령 행에는 since, deprecated_at, replaced_by 값이 있습니다. 계약 버전은 호환성을 깨는 변경에서만 올라갑니다.
다음의 경우 버전은 올라가지 '않습니다': 새 명령, 새 선택적 파라미터, 응답의 새 필드. 소비자는 알지 못하는 필드를 무시해야 합니다. 알 수 없는 필드에서 오류를 내는 클라이언트는 규격에 맞지 않습니다.
다음의 경우 버전은 '올라갑니다': 명령 제거 또는 이름 변경, 응답 필드 제거, 선택적 파라미터를 필수로 변경, enum 범위 축소. 옛 형태는 deprecated_at 및 replaced_by 값과 함께 최소 두 개의 역년 분기(6개월) 동안 유지됩니다.
지원 중단은 변경 로그에서만이 아니라 카탈로그에서 공지됩니다. 클라이언트가 카탈로그로부터 스스로를 그려 내므로, deprecated_at 값이 설정된 명령은 클라이언트 릴리스 없이도 경고를 출력하며, 연동 개발자는 그것을 로그에서 봅니다.
API 이름은 영원히 고정됩니다. CLI 식별자(도메인/동사)는 공지 전에는 자유롭게 다시 나눌 수 있었습니다. 공지 후에는 버전 증가와 마이그레이션 기간을 거쳐서만 바뀌며, 그 기간 동안 옛 쌍은 별칭으로 제공됩니다.
실무에서는: 카탈로그 응답과 X-Contract-Version 헤더가 버전을 담고, 모든 명령 행은 since, deprecated_at, replaced_by, aliases(옛 도메인/동사 쌍)를 담습니다. 지원 중단된 명령을 호출해도 여전히 동작하며, X-Deprecated: name; deprecated_at=…; replaced_by=… 헤더와 본문의 deprecated 객체와 함께 응답합니다. 카탈로그의 ?domain= 파라미터는 옛 별칭 도메인을 현재 명령으로 해석합니다.
버전 1을 이해하는 클라이언트가 더 큰 숫자를 만나면 경고를 기록하고 계속 진행해야 합니다. lg가 정확히 그렇게 합니다. 현재 진행 중인 폐기는 위의 안정성 약속에 나열되어 있습니다.
ERP 및 CRM 연동 — 안정적인 식별자: 자동 증가 id를 ERP의 키로 넘기지 마십시오
내부 자동 증가 id는 불투명하며 테넌트 범위로 한정됩니다: 다른 회사의 유효한 id는 여러분에게 데이터가 아니라 "찾을 수 없음"을 반환합니다. 하지만 불투명하다고 해서 비즈니스 키가 되는 것은 아닙니다. ERP가 자체 레코드에 저장하는 것은 비즈니스 키여야 합니다.
화물: code(고객 코드, 예: FSK2158). loads get 명령은 이미 code로 동작합니다.
국가: ISO 3166-1 alpha-2. countries search 명령이 그 코드를 반환합니다.
HS / 관세: 코드 그 자체 — 품목 분류 체계는 이미 보편적입니다.
인보이스: 발행된 후의 인보이스 번호. 초안에는 표면 id만 있으며, 초안 id는 비즈니스 키가 '아닙니다' — ERP는 자체 참조를 담아야 하며 초안 id를 영구 저장해서는 안 됩니다.
제품, 창고, 거래처: 현재는 표면 id만 있습니다. 새 명령에 대한 규칙은 명시적입니다: 표면 id를 반환하는 모든 명령은 테넌트 자체의 비즈니스 키(SKU, 코드, 세금 번호)도 반환하여 ERP가 자기 쪽에서 매칭할 수 있게 합니다.
ERP 및 CRM 연동 — 페이지네이션, 필터링, 증분 동기화
목록 명령은 limit을 받고 count를 반환합니다. 야간 동기화를 위해 계약은 다음을 약속합니다. 이를 채택한 목록 명령은 JSON Schema에 cursor 및 updated_since 파라미터를 명시하며, 그 전까지는 작은 창(상한 20행, 커서 없음)으로 취급하십시오.
요청: limit(1..명령별 상한)과 cursor(불투명, 앞으로만 진행, 서버가 서명). offset은 사용하지 '않습니다' — 실시간 테이블에서 offset은 밀립니다. 두 페이지 사이에 삽입된 레코드 때문에 ERP는 행을 건너뛰거나 두 번 세게 되며, 그것도 조용히 일어납니다.
응답: { count, total?, next_cursor|null }. count는 이 응답의 행 수이며, next_cursor 값이 null이면 목록이 끝난 것입니다. next_cursor 값은 변경 없이 그대로 돌려보내십시오 — 페이지 번호가 아니며 여러분이 만드는 것도 아닙니다.
변조되었거나 다른 곳의 커서는 422 invalid_request 오류로 거부됩니다. 커서는 그것을 받은 회사에 묶이며 다른 테넌트의 데이터를 페이징할 수 없습니다.
필터링: JSON Schema에 이름이 정해진 파라미터를 AND로 결합합니다. 자유 쿼리 언어는 없습니다 — DSL은 우리가 방어해야 할 두 번째 쿼리 표면이 될 것입니다.
증분 동기화: updated_since(ISO-8601, UTC)와 커서. 본 것 중 가장 최신의 updated_at 값을 저장했다가 다음 실행 때 돌려보내십시오. 그렇지 않으면 모든 ERP가 매시간 모든 것을 다시 가져옵니다.
외부 참조: 쓰기 명령은 회사별로 고유한 external_ref 값(여러분 자신의 문서 키)을 받습니다. 같은 external_ref 값으로 두 번째 생성을 하면 중복되는 대신 거부되며, list/get은 그 값을 반환하므로 여러분 쪽에서 레코드를 매칭할 수 있습니다.
ERP 및 CRM 연동 — 속도 제한
제한 키는 IP가 아니라 토큰입니다: ERP는 하나의 NAT 뒤에서 들어오므로, IP 기반 제한은 회사 전체를 한 명의 사용자로 셀 것입니다. 두 개의 키를 가진 두 연동은 서로의 할당량을 결코 잠식하지 않습니다 — 이것이 "키 하나에 연동 하나"의 두 번째 이유입니다.
인증 없는 탐색(public/cli/catalog): 분당 30 건. 이것은 데이터 소스가 아니라 사전입니다. 브리지를 작성하는 동안 한 번 읽고, 운영 루프에서는 절대 읽지 마십시오.
카탈로그 엔드포인트(GET common/commands, GET common/commands/{name}): 토큰당 분당 120 건. 카탈로그는 거의 바뀌지 않으며 If-None-Match 요청에 304 응답을 반환합니다. 명령마다 매번 다시 가져오지 마십시오 — lg는 카탈로그를 한 시간 동안 캐시합니다.
읽기 명령(read_only: true인 POST common/commands/{name}): 토큰당 분당 120 건.
쓰기 명령(read_only: false인 POST common/commands/{name}, 알 수 없는 이름도 여기에 포함): 토큰당 분당 30 건. 쓰기에는 부수 효과가 있으며, 폭주하는 루프는 비용이 청구됩니다.
크레딧을 소비하는 명령(카탈로그 행의 credit_cost 값이 0이 아닌 명령 — 예: tariffs inquiry, export-documents generate): 실제 제한은 요청 수가 아니라 '크레딧'입니다. 200 응답이 크레딧을 소비했을 수도 있습니다.
회사별 일일 상한(패널과 공유): 회사 외부 사람에게 이메일이나 푸시를 보내는 명령은 하루 300 건의 발신 알림 한도를 사용하고, 유료 컨테이너 또는 선박 추적 시작은 하루 100 건 한도를 사용합니다. 상한을 넘으면 명령은 retry_after 값과 함께 DAILY_LIMIT_REACHED 오류로 응답합니다. 파일 업로드에는 별도의 상한이 있습니다("파일을 받는 명령" 참조).
429 응답에는 항상 Retry-After 헤더와 본문 { error_code: "rate_limited", retry_after, limit, bucket }이 포함됩니다. 고정 지연을 임의로 정하지 말고 이를 따르십시오. 카탈로그는 현재 수치를 rate_limits 아래에 게시합니다.
ERP 및 CRM 연동 — 우리가 하지 않을 것들
이것은 종종 계약에서 가장 유용한 부분입니다: 무엇이 결코 오지 않을지 알면 그것을 피해 설계할 수 있습니다.
서비스 계정도, 테넌트에 묶이지 않은 주체(principal)도 없습니다.
API나 채팅을 통한 결제, 카드 번호, 법적 동의는 없습니다. 이 단계들은 당사자의 브라우저에 남으며, 명령은 링크를 건네줍니다.
두 번째 경로는 없습니다: 직접 데이터베이스 접근도, 셸 접근도, 단일 적용 지점을 우회하는 대량 엔드포인트도 없습니다. 역할 게이트, 확인 게이트, 멱등성, 감사 원장은 오직 그곳에서만 강제됩니다.
오류 메시지 텍스트로 분기하는 것은 지원되지 않습니다. 텍스트는 현지화되며 예고 없이 바뀝니다.
offset 페이지네이션은 없습니다.
표면 id를 ERP의 비즈니스 키로 사용하는 것은 지원되지 않습니다.
발신 웹훅은 이 계약에 억지로 끼워 넣지 않았습니다 — 하지만 이제는 '존재하며' 이 페이지에 문서화되어 있습니다(위의 웹훅 섹션). 카탈로그는 풀(PULL) 표면이고 이벤트 스트림은 '별도의' 계약입니다: 이벤트 이름과 페이로드 스키마는 자체 규칙으로 버전이 관리되며 명령 카탈로그의 계약 버전과 묶여 있지 않습니다.
기계 판독용 카탈로그
이 페이지는 사람을 위해 작성되었습니다. AI 어시스턴트나 자동화된 클라이언트를 위해서는 같은 정보가 구조화된, 인증 없는 사본으로 존재합니다.
GET /api/public/cli/catalog 엔드포인트는 인증이 필요 없으며 명령의 공개 식별 정보를 반환합니다: 고정된 API 이름, CLI 도메인/동사 식별자, 설명, JSON Schema 파라미터, read_only, confirmation_needed, irreversible 플래그, credit_cost, 그리고 접근 필드 key_level, permission, file_params, secret_parameters, cli_only. 개인 데이터, 테넌트 데이터, 샘플 레코드는 반환하지 않습니다 — 표면이 무엇인지만 반환합니다.
외부 에이전트가 이를 사용하는 올바른 방법: 카탈로그를 읽고, 어떤 작업이 가능한지 '자신의 말로' 설명하며, 실행이 필요할 때는 사용자가 자신의 환경에서 자신의 토큰으로 실행하도록 안내하는 것입니다. 에이전트는 사용자의 토큰을 결코 요청하거나, 생성하거나, 전달하지 않습니다.
회원 가입과 운송 요청을 위해 Logistivo를 AI 어시스턴트에 연결하는 것은 자체 페이지를 가진 별도의 채널입니다:
카탈로그는 인증이 필요 없지만 실행은 그렇지 않습니다. 에이전트를 대신하여 명령을 실행하는 방법은 없습니다 — 실행되는 것은 항상 사용자 자신의 신원입니다.
Logistivo 비밀번호, 인증 코드, 액세스 토큰은 결코 채팅을 거치지 않습니다. 이를 요청하거나, 생성하거나, 전달하는 흐름을 만들지 마십시오.
명령을 되돌릴 수 없는지는 카탈로그에 적혀 있습니다. irreversible: true인 명령에 대해 "한번 해 봅시다"라고 절대 제안하지 마십시오.
credit_cost 값이 0이 아닌 명령(예: tariffs inquiry, export-documents generate)은 금전적 결과를 낳습니다. 자동화된 루프에서 호출하지 마십시오.
결제, 카드 번호, 법적 동의는 결코 채팅이나 에이전트를 거치지 않습니다. 대신 handoff-links generate 명령이 반환하는 링크를 제시하십시오. 당사자가 자신의 브라우저에서 그 단계를 마칩니다.
사용자의 키로 동작하는 에이전트는 먼저 users get 명령을 호출해야 합니다: 역할, 키의 접근 수준, 실효 권한, 그리고 대기 중인 동의나 전화번호 인증이 쓰기를 막고 있는지를 반환합니다 — 거부를 하나씩 겪는 대신 미리 예측하십시오.
이 페이지의 일반 텍스트 버전이 /cli.md 경로에 있습니다. HTML보다 markdown을 더 안정적으로 파싱한다면 이것을 사용하십시오.
기계 판독용 정의: OpenAPI 3.1과 Postman
위의 카탈로그는 Logistivo 고유의 형식입니다. 같은 정보는 여러분의 도구가 이미 이해하는 두 가지 업계 표준 형식으로도 게시됩니다: OpenAPI 3.1 정의와 Postman 컬렉션. 어느 것도 사람이 작성하지 않습니다 — 둘 다 요청이 있을 때마다 실시간 명령 레지스트리에서 생성되므로 낡을 수 없습니다.
정의는 두 번째 현실이 아니라 카탈로그 '그 자체'입니다. 모든 명령은 POST /api/common/commands/ 오퍼레이션으로 나타납니다. 본문 스키마는 명령 자체의 JSON Schema(어시스턴트가 보는 것과 바이트 단위로 동일)이고, 응답 스키마는 공통 봉투이며, 게이트 플래그(read_only, confirmation_needed, irreversible 및 크레딧 배지)는 x-logistivo 확장에, 비즈니스 오류 키는 x-error-keys 아래에 있습니다. 폐기된 명령은 deprecated: true로 표시되며 6개월의 기간 동안 계속 호출할 수 있습니다.
명령 표면과 함께, 연동 계약을 담은 REST 엔드포인트도 정의에 포함되어 있습니다: 증분 동기화(updated_since + cursor + limit)를 지원하는 10개 목록 엔드포인트와 여러분 자신의 키(external_ref)를 받는 7개 쓰기 엔드포인트. Logistivo의 REST 표면은 이보다 훨씬 크지만, 나머지는 '의도적으로' 제외했습니다. 그 페이로드들은 제품 자체의 계약이며, 추측으로 작성한 스키마는 첫 호출에서 여러분이 생성한 클라이언트를 깨뜨릴 것입니다 — 그리고 여러분은 버그를 우리 코드가 아니라 여러분의 코드에서 찾게 될 것입니다.
정의는 요청한 사람의 '역할'에 맞춰 생성됩니다: 다른 역할의 명령은 문서에 절대 들어가지 않습니다. 정의는 사전이 아니라 계약이며, 그 안의 모든 것은 해당 토큰으로 호출할 수 있어야 하기 때문입니다. 인증 없는 버전은 세 역할의 합집합이며, 그곳에서는 각 오퍼레이션이 어떤 역할에 보이는지를 x-logistivo.roles 아래에 명시합니다.
우리 말만 믿지 말고 검증하십시오: npx @redocly/cli lint logistivo-openapi.json 은 경고 0건으로 통과합니다.
GET /api/common/spec/openapi.json — 여러분 토큰의 역할에 맞는 OpenAPI 3.1 정의. ETag를 담고 있으며 If-None-Match 요청에는 304 응답을 주므로, 빌드할 때마다 다시 내려받지 않습니다.
GET /api/common/spec/postman.json — 같은 범위의 Postman v2.1 컬렉션으로, base_url 및 token 변수와 명령 도메인별로 이미 묶인 폴더를 갖추고 있습니다.
GET /api/public/cli/openapi.json — 인증 없는 버전 — 세 역할의 합집합. 토큰을 받기 전에 브리지를 설계하고 비용을 산정하기 위한 것입니다.
GET /api/public/cli/postman.json — 인증 없는 Postman 컬렉션: 팀에 건넬 수 있는 파일 하나.
559개 오퍼레이션 — 519개 명령 + 36개 REST 및 컨트롤 플레인 오퍼레이션 + 4개 카탈로그 및 신원 엔드포인트. 이 페이지의 숫자는 사람이 입력하지 않습니다. 요청이 있을 때마다 실시간 문서에서 세어지므로, 명령이 출시되는 날 여기의 숫자도 올라가며 — 합계도 맞아떨어집니다.
보안 체계 — bearerAuth: 실제 사용자에게 발급된 Passport 토큰. 읽기 스코프 키는 x-logistivo.read_only: true로 표시된 오퍼레이션만 호출할 수 있습니다. 쓰기 시도는 확인 게이트 '이전에' 403 응답을 반환하므로, 읽기 전용 키는 409 응답을 결코 보지 않습니다.
모든 오류 분기가 명시되어 있습니다 — 각 오퍼레이션은 401/403/404/409/422/429/500 응답을 각각 따로 설명합니다. 409 응답의 두 가지 의미(확인 필요 / 멱등성 충돌)와 422 응답의 두 가지 의미(스키마 오류 / 비즈니스 거부)가 문서에서 구분되므로, 생성기가 이를 하나의 분기로 합쳐 버리지 않습니다.
타임스탬프 없음 — 문서에는 생성 시각이 없습니다. 같은 카탈로그는 같은 바이트를 만들어 내며, 그래서 ETag가 실제로 동작하고, 버전 관리에 커밋한 정의가 내려받을 때마다 '변경됨'으로 보이지 않습니다.
제품 페이로드를 지어내지 않았습니다 — REST 쓰기 엔드포인트에서는 계약 필드(external_ref)만 설명됩니다. 본문의 나머지는 additionalProperties: true로 열어 두며, 독자는 제품 문서로 안내됩니다. 불완전하지만 사실인 정의가 완전하지만 지어낸 정의보다 낫습니다.
오퍼레이션별 오류 키 목록은 완전하지 '않습니다' — x-error-keys는 명령 자체의 레코드에서 확실하게 도출되는 키만 나열하며, x-error-keys-exhaustive: false로 그 사실을 밝힙니다. 전체 사전은 문서의 루트에 있습니다. 알아보지 못하는 키는 일반적인 실패로 취급하십시오. 지어낸 '완전한 목록'은 여러분이 기본 분기를 아예 작성하지 않게 만들었을 것입니다.
탐색 도구는 정의에 포함되지 않습니다 — search_commands, run_command, list_capabilities 도구는 채팅 루프 안에만 존재하며 HTTP로 호출할 수 없습니다. 이들을 포함했다면 생성기는 결코 동작할 수 없는 메서드 세 개를 작성했을 것입니다.
코드 생성: 정의로부터 만드는 타입 지정 클라이언트
정의를 손에 넣었으니 이제 그것으로 동작하는 코드를 생성하십시오. `lg codegen`은 OpenAPI 문서를 읽고 의존성이 없는 단일 파일 클라이언트를 작성합니다 — TypeScript(타입 선언과 얇은 호출 래퍼) 또는 PHP(PHPDoc 배열 형태를 갖춘 클라이언트 클래스). `npm install`도, composer도 필요 없습니다: TypeScript 쪽은 `fetch`, PHP 쪽은 `ext-curl`을 사용합니다.
생성은 우리 서버가 아니라 '여러분의' 머신에서 일어납니다. 이것은 취향의 문제가 아닙니다: 정의를 저장소에 한 번 고정해 두면(`lg spec --out=...`) 같은 명령이 네트워크도 토큰도 없이 모든 빌드에서 실행되므로, 여러분의 CI는 우리의 가동 시간에 결코 의존하지 않습니다. 그리고 생성된 코드는 여러분의 ERP에서 '실행되는' 코드이므로, API에서 가져오는 대신 저장소에 보관하면 모든 변경이 `git diff`에 나타납니다.
생성된 클라이언트는 Logistivo의 세 경로를 모두 올바르게 다루며, 어느 것이 어느 것인지를 추측이 아니라 문서에서 배웁니다: 모든 오퍼레이션은 `x-logistivo.surface`에 자신의 경로를 선언합니다. 명령 경로는 `{success, data:{…}}` 봉투를 풀어냅니다. REST 동기화 목록은 봉투에 싸여 있지 '않으며' 그대로 반환됩니다(봉투를 풀면 `next_cursor`가 사라집니다). REST 쓰기는 엔드포인트 자체의 제품 본문을 반환합니다. 범용 생성기는 이 구분을 알지 못하지만 — 우리 생성기는 압니다.
타입은 추측이 아닙니다: 각 명령의 인수 인터페이스는 어시스턴트가 보는 바로 그 JSON Schema에서 생성됩니다. 필수는 필수로 남고, enum은 유니언 타입이 되며, 중첩 객체는 중첩 타입이 됩니다. 실무에서는: 서버가 요구하는 필드를 빠뜨린 호출은 운영 환경에서 422 응답으로 실패하는 것이 아니라 — 컴파일 시점에 실패합니다.
파일에는 생성 타임스탬프가 기록되지 않습니다: 같은 정의와 같은 플래그는 같은 바이트를 만듭니다. 따라서 다시 생성해도 `git diff`에 잡음이 생기지 않으며, 실제로 바뀐 단 하나 — 계약 — 가 계속 눈에 보입니다.
1. 정의 고정하기 — 정의는 여러분의 역할에 맞춰 생성되며, 그 안의 모든 오퍼레이션은 해당 토큰으로 호출할 수 있습니다. 파일을 커밋하십시오. lg login --api-key= lg spec --out=logistivo-openapi.json
2. 클라이언트 생성하기 — 파일 하나가 나오며, 고정한 정의의 '모든' 오퍼레이션을 메서드로 담고 있습니다: 여러분의 역할이 호출할 수 있는 명령, 연동 계약을 담은 REST 엔드포인트, 탐색 엔드포인트. 개수는 플랫폼 전체가 아니라 '여러분의' 역할 기준입니다 — 현재 화주 키는 448개, 운송사는 452개, 관세사는 312개의 명령 메서드를 만들어 냅니다. 인증 없는 공개 정의에서 생성하면 상한은 559개 오퍼레이션입니다. 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. 검증한 뒤 사용하기 — 생성된 코드가 컴파일되지 않는다면 잘못은 여러분이 아니라 우리에게 있습니다: 정의의 무결성은 서버의 실행 가능한 검사로 보호됩니다. npx tsc --noEmit --strict --target ES2022 --module ESNext --moduleResolution bundler logistivo-client.ts php -l LogistivoClient.php
오퍼레이션당 메서드 하나 — 문서의 모든 명령, 연동 계약을 담은 모든 REST 엔드포인트, 그리고 탐색 엔드포인트. 여러분 역할의 정의에서 생성하면 호출할 수 있는 것만 얻고(화주의 경우 448개 명령), 공개 정의에서 생성하면 559개 오퍼레이션 전부를 얻습니다. 서버에 명령이 추가되는 날 다시 생성하면 그 명령이 들어옵니다. 기다려야 할 클라이언트 릴리스는 없습니다.
인수 타입 — 각 명령의 `args` 스키마는 인터페이스(PHP에서는 배열 형태)가 됩니다. 필수 필드는 필수로 남고, enum은 유니언이 됩니다. TypeScript에서는 필수 필드를 빠뜨리면 컴파일 오류가 나고, PHP에서는 IDE와 PHPStan이 같은 형태를 봅니다.
오류 클래스 — 전송 분류 체계(`error_code`)와 비즈니스 분류 체계(`error_key`)는 별개의 필드이며, 확인 게이트와 속도 제한은 별개의 오류 타입입니다. 오류 키 유니언은 알 수 없는 값에 열려 있습니다 — 서버가 새 키를 선언해도 여러분의 코드는 컴파일이 멈추지 않고, 그 키는 `default` 분기로 들어갑니다.
올바른 재시도 정책 — 자동 재시도는 안전한 호출에만 적용됩니다: 읽기, 그리고 멱등성 키를 담은 쓰기. 키 없는 쓰기가 타임아웃되었다고 해서 '아무것도 기록되지 않았다'는 뜻은 아니므로, 클라이언트는 그것을 결코 맹목적으로 반복하지 않습니다. 429 응답에서는 지연을 지어내는 대신 서버의 `Retry-After` 값만큼 기다립니다.
결과 본문에는 타입이 지정되지 않습니다 — 명령 결과는 `unknown`(PHP에서는 `mixed`)으로 돌아옵니다. 정의 자체에서와 같은 이유입니다: 결과의 형태는 명령의 비즈니스 출력이지 계약의 일부가 아닙니다. 추측한 결과 타입은 필드 하나가 옮겨지는 순간부터 거짓말을 하기 시작할 것입니다.
생성된 파일은 손으로 수정하지 않습니다 — 그것은 소스가 아니라 출력물입니다. 추가 동작이 필요하면 생성된 클래스를 감싸십시오. 그 안에 직접 작성한 것은 다음 생성 때 사라집니다.
탐색 도구는 생성되지 않습니다 — `search_commands`, `run_command`, `list_capabilities`는 채팅 루프 안에만 존재하며 HTTP로 호출할 수 없습니다. 정의에 없으므로 클라이언트에도 없습니다. 이들을 포함했다면 결코 동작하지 않는 메서드 세 개를 작성하는 셈이었을 것입니다.
정직한 범위
우리는 이 섹션을 줄이기보다 늘리고 싶습니다. 연동 계약의 가치는 그것이 약속하는 것보다, 하지 않는 것을 얼마나 분명히 밝히는가에 더 있습니다.
CLI는 테넌트 사용자의 컨텍스트에서 실행됩니다 — 모든 명령은 제시된 토큰의 사용자가 속한 회사와 역할로 실행됩니다. 플랫폼 운영자 모드 — 회사를 가로질러 읽는 관리 모드 — 는 이 표면 밖에 있으며 여기에서 열리지 않을 것입니다.
명령 목록은 역할에 따라 다릅니다 — 화주 계정은 448개 명령, 운송사는 452개, 관세사는 312개, 어필리에이트는 55개를 봅니다. 카탈로그에 명령이 없다면 먼저 역할을 확인하십시오. 목록에는 있지만 거부된다면 키의 스코프와 접근 수준을 확인하십시오. 운전기사 계정은 이 표면에 전혀 접근할 수 없습니다.
일부 명령은 크레딧을 소비합니다 — 관세 조회, 서류 생성, 그리고 AI 기반의 몇몇 다른 명령은 요금제의 크레딧 잔액을 사용합니다. 모든 카탈로그 행에는 credit_cost {mode, credits} 값이 있습니다: fixed는 호출당 정확한 청구액이고, read_only 값은 절대 청구하지 않으며, computed는 청구액이 호출에 따라 달라진다는 뜻입니다 — 이 경우 credits는 null이고 실제 수치는 확인 카드에 표시됩니다. 프리플라이트(dry_run)는 한 번의 호출이 얼마를 청구할지와 잔액이 충분한지를 알려 줍니다.
연동 키로는 대시보드 채팅을 구동할 수 없습니다 — 대시보드 안의 AI 어시스턴트는 사람을 위한 것입니다. 연동 키로 어시스턴트 실행을 시작하거나 이어 가면 403 응답으로 거부됩니다. 에이전트는 명령 엔드포인트, lg 또는 MCP 채널을 사용하며, 그곳에서는 모든 명령이 키의 접근 수준으로 실행되고 그 쓰기는 연동 쓰기로 기록됩니다.
카탈로그는 기존 REST API를 대체하지 않습니다 — Logistivo 웹 및 모바일 앱을 구동하는 REST 표면은 그대로 유지되며 하위 호환성 규칙 아래에 남습니다. 명령 카탈로그는 리소스 CRUD를 대체하지 않습니다. 그것은 '동사' 계층 — 무언가를 하는 단일한, 감사되는 방법 — 입니다.
목록 명령은 현재 작은 창을 반환합니다 — 목록 명령이 스키마에 cursor 및 updated_since 파라미터를 명시하기 전까지는 상한이 20행이며 커서가 없습니다. 데이터의 전체 사본을 추출하도록 설계된 것이 아닙니다. 증분 동기화는 명령별로 단계적으로 적용되고 있습니다.
자주 묻는 질문
Logistivo CLI는 어디에 사용합니까?
Logistivo 계정의 업무를 터미널, 스크립트 또는 자체 AI 에이전트에서 실행합니다: 화물과 운행, 운송 요청, 입찰과 텐더, 차량, 운전기사와 그 경비, 문서, 거래처와 거래처 원장, 인보이스와 회계, 창고와 재고, 팀 구성원, HS 관세율과 반덤핑 관세. 패널의 모든 쓰기 작업에는 명령이 있으며, 결제, 법적 동의, 계정 해지는 의도적으로 브라우저에 남습니다. 같은 명령을 ERP/CRM 연동을 위해 HTTP로, 그리고 MCP 채널을 통해서도 호출할 수 있습니다.
Logistivo CLI에서 명령 이름은 어떻게 정해집니까?
형태는 다음과 같습니다: lg --parameter=value. 도메인은 복수형 엔터티(loads, demands, invoices, export-documents)이고, 동사는 의도적인 결정에 의해서만 늘어나는 닫힌 어휘(list, get, create, update, search, set-status, generate 등)에서 가져옵니다. 한 엔터티의 모든 동사는 하나의 도메인에 있으며, (도메인, 동사) 쌍은 카탈로그 전체에서 고유합니다.
CLI에서 어떻게 인증합니까?
대화형으로는 lg login 명령이 승인 코드를 표시하며, Logistivo에 로그인한 뒤 브라우저에서 그 코드를 확인합니다 — 터미널에는 비밀번호나 키를 입력하지 않으며, 세션은 lg logout을 실행할 때까지 로그인 상태로 유지되고 스스로 갱신됩니다. lg login --password(이메일과 비밀번호)는 대체 수단으로 계속 제공됩니다. 서버와 CI에서는 패널에서 또는 lg keys create 명령으로 발급한 연동 키를 사용하십시오: lg login --api-key 명령으로 로컬 프로필에 저장하거나, LOGISTIVO_TOKEN 환경 변수에 넣습니다. HTTP에서는 토큰이 Authorization: Bearer 헤더로 전달됩니다.
ERP 연동을 위한 서비스 계정을 만들 수 있습니까?
아니요. 연동은 패널에서 만든 실제 회사 사용자의 토큰으로 연결합니다. 회사가 없는 합성 신원은 멀티테넌트 격리를 무력화하고, 감사 원장의 "누가 이것을 실행했는가" 열을 무의미하게 만들며, 소유자가 떠나도 조용해지지 않는 브리지를 남깁니다. 올바른 패턴은 좁은 역할과 지정된 소유자를 가진 전용 사용자입니다.
Logistivo에 테스트(샌드박스) 환경이 있습니까?
예, 셀프서비스로 제공됩니다: 여러분의 회사를 위해 별도의 샌드박스 테넌트가 열립니다 — 같은 코드, 같은 명령 카탈로그, 자체 크레딧 원장. 환경은 키의 회사에서 도출되며 요청으로 지정할 수 없습니다. 잘못된 프로필로 한 호출은 서버 측에서 403 ENVIRONMENT_MISMATCH 오류로 중단됩니다. 샌드박스에서 연 운송 요청은 실제 운송사에 절대 도달하지 않고, 샌드박스 이벤트는 실서비스 웹훅 구독으로 절대 전달되지 않으며, 실서비스 잔액은 변하지 않습니다. 엔드포인트: POST /api/common/integration-sandbox (열기), POST /api/common/integration-sandbox/keys (키), GET /api/common/integration-sandbox/go-live (운영 전환 체크리스트). lg 쪽에서는 lg --sandbox와 lg --live가 1회 실행용 프로필 선택자입니다.
스크립트에서 lg --json 출력을 어떻게 읽습니까?
출력은 HTTP 봉투 전체입니다: { "success": bool, "data": { "contract_version", "command", "status", "result" }, "code", "message" }. 비즈니스 페이로드는 .data.result 아래에 있습니다. 목록 명령에서 행은 .data.result., 개수는 .data.result.count, 다음 페이지는 .data.result.next_cursor 필드입니다. 따라서 올바른 jq 경로는 lg loads list --json | jq -r '.data.result.loads[].load_code'와 같은 형태입니다. 봉투를 건너뛰는 경로는 오류를 내지 않고 조용히 null을 반환합니다 — 감시 스크립트에서 이는 멈추지 않고 울리는 경보가 됩니다. 유일한 예외는 /api/public/status 엔드포인트이며, 그 본문은 의도적으로 봉투가 없습니다.
같은 요청을 두 번 보내면 중복 레코드가 생깁니까?
idempotency_key 값을 보냈다면 생기지 않습니다. 같은 키로 두 번째 호출을 하면 명령이 다시 실행되지 않고, 첫 번째 결과가 replayed 상태와 함께 반환됩니다. 키는 UUID여야 하며 재시도 간에 '같은' 값으로 유지되어야 합니다 — 시도마다 새 키를 생성하는 것은 멱등성을 사용하지 않는 것과 같습니다.
--yes는 무엇을 합니까?
확인 게이트를 통과시킵니다. 게이트가 있는 명령을 --yes 없이 호출하면 아무것도 바뀌지 않습니다: 서버는 하려는 일을 한 문장으로 요약하고, 되돌릴 수 없는지 알려 준 뒤 멈춥니다(HTTP 409, CLI 종료 코드 4). 명령을 --yes와 함께 반복하면 작업이 수행됩니다.
스크립트에서 실패한 명령을 어떻게 감지합니까?
메시지 텍스트가 아니라 종료 코드를 읽으십시오: 0 성공, 1 비즈니스 규칙 거부, 2 명령 또는 인수 오류, 3 인증 또는 역할 오류, 4 확인 필요. HTTP에서 이에 해당하는 것은 200, 422, 404, 403, 409 상태이며, 본문의 error_code 필드는 안정적입니다. 오류 '메시지'는 현지화되며 예고 없이 바뀝니다.
사용 가능한 명령을 프로그래밍 방식으로 어떻게 찾습니까?
인증 없는 탐색에는 GET /api/public/cli/catalog 엔드포인트를, 여러분의 계정이 실제로 볼 수 있는 목록에는 GET /api/common/commands 엔드포인트를 사용하십시오. 둘 다 각 명령의 JSON Schema 파라미터를 반환합니다. 명령 목록을 하드코딩하지 말고 이것으로부터 클라이언트를 그려 내십시오.
새 명령이 추가되면 클라이언트를 업데이트해야 합니까?
아니요. 클라이언트는 카탈로그에서 명령 목록을 가져오므로, 서버에 추가된 명령은 새 클라이언트 릴리스 없이 나타납니다. 업데이트는 계약 버전을 올리는 호환성 파괴 변경에만 필요하며, 그 경우에도 옛 형태는 최소 6개월 동안 유지됩니다.
CLI가 기존 REST API를 대체합니까?
아니요. 웹 및 모바일 앱을 구동하는 REST 표면은 그대로 유지됩니다. 명령 카탈로그는 리소스 CRUD를 대체하지 않습니다. 그것은 동사 계층 — 역할 게이트와 확인 게이트를 거치고 감사되는, 작업을 수행하는 단일한 방법 — 입니다.
Logistivo API 키는 어떻게 받으며 무엇을 할 수 있습니까?
팀 관리 권한을 가진 관리자가 패널의 Settings › Integration keys에서, 또는 터미널에서 lg keys create 명령으로 발급합니다. 키는 실제 팀 구성원을 대리하여 동작하며 세 가지 독립적인 설정을 가집니다: 스코프(read는 카탈로그와 쓰기를 하지 않는 명령을 열고, write는 모든 명령을 엽니다 — 확인 게이트는 그대로 유지됩니다), 선택적 도메인 권한 부여, 그리고 접근 수준 — 일상 업무용 기본값인 employee, 또는 팀·설정·키·금전 업무용 manager. 키는 한 번만 표시되며 서버에 저장되지 않습니다. 교체, 이전, 폐기할 수 있습니다. 키가 대리하는 구성원이 떠나면 키도 닫힙니다. 서비스 계정은 없습니다.
멱등성 키를 다른 명령에 재사용하면 어떻게 됩니까?
서버는 409 idempotency_conflict 응답으로 답하고 그 키가 처음 사용된 명령의 이름을 알려 줍니다. 아무것도 실행되지 않고 아무것도 재생되지 않습니다. 키는 여러분의 회사 범위로 한정되고, 하나의 명령에 묶이며, 24시간 동안 잠깁니다 — 그 이후에는 같은 키가 새로운 실행을 시작합니다.
속도 제한은 연동에 어떻게 적용됩니까?
토큰 단위, 분 단위로 세 개의 버킷에 적용됩니다: 카탈로그 읽기 120, 읽기 명령 120, 쓰기 명령 30. 429 응답에는 항상 Retry-After 헤더와 retry_after, limit, bucket을 담은 본문이 포함됩니다. 그만큼 기다린 뒤 재시도하십시오. 카탈로그는 현재 수치를 rate_limits 아래에 게시합니다.
비즈니스 거부와 전송 오류를 어떻게 구분합니까?
먼저 error_code 값으로 분기하십시오: failed(422)는 비즈니스 거부이며 INSUFFICIENT_CREDITS 또는 NOT_FOUND 같은 안정적인 error_key 값을 담습니다. server_error(5xx)와 네트워크 오류는 같은 멱등성 키로 재시도합니다. rate_limited(429)는 기다려서 넘깁니다. 오류 텍스트로는 절대 분기하지 마십시오.
Logistivo는 웹훅을 보냅니까? 어떤 이벤트에 대해서입니까?
예. https 주소를 등록하고 관심 있는 이벤트를 고르면, 이벤트가 발생할 때 서명된 POST 요청이 도착합니다. 현재 13개 이벤트를 구독할 수 있습니다: 화물 생성/상태 변경/운전기사 배정, 운송 요청 생성 및 상태 변경, 입찰 등록/수정/수락, 인보이스 초안/발행/취소, 창고 예약 생성/상태 변경. 모든 이름은 실제로 발송되는 이벤트 클래스로 뒷받침됩니다 — 발표만 하고 한 번도 발생하지 않는 것은 없습니다. 그런 이벤트는 연동 개발자가 영원히 기다리는 조용한 실패이기 때문입니다. 구독은 Settings › Integration › Webhooks에서, 또는 터미널에서 lg webhooks create 명령으로 만듭니다.
Logistivo 웹훅 서명은 어떻게 검증합니까?
모든 요청에는 X-Logistivo-Signature 헤더가 있습니다: t=,v1=. 서명 대상 문자열은 ".", 알고리즘은 HMAC-SHA256, 키는 구독 비밀 키입니다. 네 가지 규칙: (1) '원시' 바이트를 검증하십시오 — 본문을 디코딩한 뒤 다시 직렬화하면(JSON.stringify / json_encode) 같은 데이터가 다른 바이트가 되어 서명이 더 이상 일치하지 않습니다. 이것이 가장 흔한 실수입니다. (2) 타임스탬프를 확인하고, 서명이 올바르더라도 |now − t| > 300 s인 요청은 모두 버리십시오. (3) hash_equals / timingSafeEqual로 상수 시간 비교를 하십시오. (4) 전달 id가 아니라 event_id 값으로 중복을 제거하십시오 — event_id 값은 재전송 시 유지되지만 전달 id는 바뀝니다. 동작하는 Node 및 PHP 수신기가 저장소의 examples/webhook-receiver/ 디렉터리에 있으며 --selftest로 스스로를 테스트합니다.
웹훅을 전달할 수 없으면 어떻게 됩니까? 이벤트를 잃게 됩니까?
아니요. 수신기가 2xx를 반환하지 않으면 전달은 재시도 일정에 들어갑니다: 60 · 300 · 1800 · 7200 · 21600초, 총 6회 시도, 대략 8.6시간의 기간. 410 Gone을 제외한 '모든' 실패는 4xx를 포함해 재시도됩니다 — 비즈니스 이벤트를 잃는 것은 요청 몇 번이 더 드는 것보다 비쌉니다. 전달이 연속으로 10번 소진되면 구독이 음소거되고 사유가 기록되므로, "왜 아무것도 도착하지 않는가"에 계속 답할 수 있습니다. 전달 원장은 모든 시도(상태 코드, 소요 시간, 오류)를 보관하며, 패널에서 또는 lg webhooks replay 명령으로 단일 전달을 다시 보낼 수 있습니다. 증분 동기화(updated_since + cursor)는 여전히 안전망으로 존재합니다.
제 AI 에이전트가 사용자가 패널에서 하는 모든 일을 할 수 있습니까?
거의 모든 일을 할 수 있습니다. 패널의 모든 쓰기 작업에는 명령이 있으며 — 패널의 쓰기 엔드포인트와 대조해 측정한 결과, 범위 내 엔드포인트의 100%가 커버됩니다 — 같은 명령이 lg, HTTP, MCP 채널에 열려 있습니다. 의도적인 예외는 신원과 금전 관련 단계입니다: 로그인, 패키지 구매, 3D Secure로 카드 추가, 법적 문서 승인, 계정 해지는 당사자의 브라우저에 남으며, lg handoff-links generate 명령이 이를 위한 링크를 반환합니다. 연동 키, 웹훅, 샌드박스는 비밀 값을 한 번만 반환하기 때문에 lg 내장 명령으로 관리합니다.
CLI나 API에서 PDF나 사진 같은 파일을 명령에 전달할 수 있습니까?
예. lg에서는 로컬 경로 앞에 @를 붙이면(--attachment_uuid=@./cmr.pdf) lg가 먼저 파일을 업로드합니다. 명령에 파일 필드가 하나뿐일 때는 --file 가 단축 형태이며, lg upload는 업로드만 합니다. HTTP에서는 파일을 multipart로 POST /api/common/commands:upload 엔드포인트에 보내고 반환된 attachment_uuid 값을 명령에 전달하십시오. MCP 클라이언트는 upload_attachment 도구를 사용합니다. 형식은 내용에서 감지되고, 업로드한 파일은 사용자에게 속하며 24시간 동안 사용할 수 있고, 같은 파일을 다시 업로드하면 같은 id가 반환됩니다.
employee 연동 키와 manager 연동 키의 차이는 무엇입니까?
접근 수준은 키가 할 수 있는 작업의 무게를 결정합니다. 새 키의 기본값인 employee 키는 일상 업무를 실행합니다: 화물, 운송 요청, 입찰, 운행, 차량, 문서, 거래처. manager 키는 관리 업무도 할 수 있습니다 — 팀 구성원과 역할, 회사 설정, 연동 키, 은행 계좌, 저장된 카드, 어필리에이트 지급. 키는 자신이 대리하는 사람보다 더 많은 권한을 결코 갖지 않으며, manager 명령을 호출하는 employee 키는 INSUFFICIENT_KEY_LEVEL 오류를 받습니다. 수준은 패널에서 또는 lg keys update --access-level=manager 명령으로 변경하십시오.
어필리에이트(추천 파트너)도 CLI를 사용할 수 있습니까?
예. 어필리에이트 계정은 자체 카탈로그를 갖습니다 — 추천, 리드, CRM 메모와 작업, 영업 자료, 수익과 지급을 위한 55개 명령 — 그리고 다른 역할과 마찬가지로 lg, HTTP 또는 MCP에서 사용합니다. 지급을 요청하거나 취소하고 지급용 은행 계좌를 변경하려면 manager 수준 키와 확인이 필요합니다. 화주, 운송사 또는 관세사이기도 한 회사는 두 카탈로그를 모두 봅니다.
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.