{"activeVersionTag":"latest","latestAvailableVersionTag":"latest","collection":{"info":{"_postman_id":"e94f7e52-c11e-4fe2-ad27-4cd29d825d7b","name":"FACTS XML API: Conformance (spec 1.4.0)","description":"Optional conformance checks for integrators of the CLI FACTS XML API on Line Drive Trucking (LDTN) tenants, written against reference spec 1.4.0 (https://ldtn.net/docs/facts-xml-api/). Unofficial and LDT-maintained: CLI publishes no formal contract for this API, and the reference wins over anything here.\n\nCovers 9 of the 11 documented operations (8 of the 9 paths). freightcharges.xml is not exercised: access to freight charges depends on your login's entitlements.\n\nHOW TO USE\n1. Select the 'FACTS XML API: fill locally' environment and enter the credentials Line Drive issued you as current values. They stay on your machine. Every credentialed request first checks that the login is filled and is not sent when it is empty.\n2. Confirm facts_base before every run. The collection default is LDTN TEST. TEST (ldtn-test.pol) is a separate tenant with separately provisioned, tenant-scoped credentials; TEST writes persist there and can create real pickup stops; CLI has not documented isolation from PROD; TEST results (pricing, catalog, lanes, images) do not prove PROD behavior. Never assume one tenant's credentials work on the other.\n3. Run requests 1 to 7 (including 2b and 5b) and folder 8. They are reads plus one negative control; none changes FACTS state, and no rate quote sends quotenumber. Request 2b proves the login authenticates before anything else uses it. Requests 4 to 6 pass only after you enter one of your own shipments (known_pro, bol_number and bol_shipdate).\n4. Folder 8 shows which overlength mode prices your account's over-dimension freight (reads only). Read its description before sending any OVR* band in production.\n5. Folder 9 holds the two state-changing requests. It runs last and is disabled by default: each request skips itself unless RUN_STATEFUL equals the exact phrase below AND facts_base is exactly the LDTN TEST base URL, and its target stays an unroutable .invalid host otherwise. They can never be sent to PROD from this collection. Arrange any PROD write with Line Drive directly.\n   Exact phrase: I confirm a supervised LDTN TEST write\n\nWHAT THE TESTS CHECK\nEvery response walks the same ladder as the LDT SDKs: HTTP 200, not an HTML page, no DOCTYPE or ENTITY, a strict XML parse, the expected root element, <success>Yes</success> where the route has it, and no <errormessage> anywhere when success is expected. HTTP 200 alone is never success. Authenticated tracking also fails when FACTS answers with the public tracking body, which is what it does when credentials are not applied. Saved examples are the reference's synthetic examples, not captured prices.\n\nA green run is not proof of anything beyond the bounded request/response paths represented here. The credential checks fail on 'Invalid username/password' in any letter case; they do not prove that a login covers every account or route.\n\nCONVENTIONS THAT PREVENT MOST FAILURES\n- Dates are MM/DD/YYYY and pickup dates must be today or later (this collection uses the next business day automatically; holidays are not skipped).\n- Send length, width and height for every freight line.\n- Branch on numeric status codes, never status text.\n- Never auto-retry a failed BOL submission; reconcile first.\n- BOL creation normally returns a ten-digit tracking handle and a blank pronumber; keep the handle and poll it until the final PRO appears.\n- If Line Drive issued a preassigned e-PRO block, send the next unused number as refnoN with matching refnotypeN=RF. On the reviewed LDTN XML BOL-entry surface, the API did not assign it as the official PRO during creation.\n- Accessorial query keys are the codes themselves from keywordlist.xml (for example LGDEL=Yes). ratequote.xml prices only CODE=Yes keys and ignores accessoriallist.\n\nSDKs: prefer the LDT SDKs (Python, Node, C#) over Postman's generated code snippets, which put credentials in URLs and have none of the SDK guardrails. See the 'FACTS XML API: SDK downloads and quick starts' collection.\n\nFull reference: https://ldtn.net/docs/facts-xml-api/\n\nCollection variables (Postman's API keeps no variable descriptions, so they are listed here):\n- `facts_base`: Selected FACTS tenant for requests 1 to 8. Default: LDTN TEST. Change it to the PROD base (https://tracking.carrierlogistics.com/scripts/ldtn.pol) only for reads with PROD credentials. Folder 9 never follows this value to PROD.\n- `known_pro`: Synthetic default (1000099999). Replace with one of YOUR final PRO numbers or the saved ten-digit BOL-creation tracking handle; requests 4 and 5 fail until you do.\n- `expected_epro`: Optional: the preassigned e-PRO selected from your LDT-issued block. When set, public-tracking assertions require this exact value after lifecycle promotion.\n- `expected_bol`: Optional: the exact customer BOL submitted with the booking handle. When set, public-tracking assertions require an exact billno echo.\n- `bol_number`: Synthetic default. Replace with one of your BOL references; request 6 fails until you do.\n- `bol_shipdate`: YYYYMMDD ship date matching bol_number (synthetic default).\n- `alert_email`: Deliberately undeliverable default for the alert-subscribe exercise.\n- `expected_overlength_mode`: Overlength mode folder 8 expects on PROD: caller-band or auto-oversize. Default caller-band, the mode spec 1.4.0 documents (observed 2026-09-30). Change it only when the reference changes.\n- `expected_overlength_mode_test`: Overlength mode folder 8 expects on LDTN TEST: auto-oversize since 2026-09-08.\n- `spec_version`: Reference spec version these checks were written against (shown in mismatch messages).\n- `stateful_base`: Target for folder 9. Always overwritten by the folder 9 pre-request guard: the exact LDTN TEST base when armed, otherwise an unroutable .invalid host so nothing reaches FACTS even where request skipping or the scripts themselves are unsupported.","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","isPublicCollection":false,"owner":"55567458","team":16727307,"collectionId":"e94f7e52-c11e-4fe2-ad27-4cd29d825d7b","publishedId":"2sBYAuRr5C","public":true,"publicUrl":"https://postman.ldtn.net","privateUrl":"https://go.postman.co/documentation/55567458-e94f7e52-c11e-4fe2-ad27-4cd29d825d7b","customColor":{"top-bar":"0B2545","right-sidebar":"0B1220","highlight":"1D4ED8"},"documentationLayout":"classic-double-column","customisation":{"metaTags":[{"name":"description","value":"Executable request examples, saved XML responses, and guarded conformance checks for Line Drive Trucking's FACTS XML API."},{"name":"title","value":"LDTN FACTS XML API"}],"appearance":{"default":"dark","themes":[{"name":"dark","logo":null,"colors":{"top-bar":"0B2545","right-sidebar":"0B1220","highlight":"60A5FA"}},{"name":"light","logo":null,"colors":{"top-bar":"0B2545","right-sidebar":"0B1220","highlight":"1D4ED8"}}]}},"version":"8.12.10","publishDate":"2026-08-28T09:40:58.000Z","activeVersionTag":"latest","documentationTheme":"light","metaTags":{"title":"LDTN FACTS XML API","description":"Executable request examples, saved XML responses, and guarded conformance checks for Line Drive Trucking's FACTS XML API."},"logos":{"logoLight":null,"logoDark":null}},"statusCode":200},"environments":[{"name":"FACTS XML API: fill locally","id":"170d0c69-8d5d-4ded-a0e2-9080d73edfe4","owner":"55567458","values":[{"enabled":true,"key":"xmluser","value":"","type":"secret","description":"Your issued FACTS web login. Fill locally; LDT never stores it in this workspace."},{"enabled":true,"key":"xmlpass","value":"","type":"secret","description":"Your issued password. Fill locally as a current value only."},{"enabled":true,"key":"customer_account","value":"","type":"default","description":"Optional account override (custno). Leave empty unless Line Drive told you to rate under a specific account; rate requests omit custno while this is empty."},{"enabled":false,"key":"known_pro","value":"","type":"default","description":"One of your final PRO numbers or the saved ten-digit BOL-creation tracking handle. Enable this key after you fill it; while disabled the collection's synthetic default applies."},{"enabled":false,"key":"expected_epro","value":"","type":"default","description":"Optional preassigned e-PRO expected after the saved booking handle advances to a positive lifecycle code. Enable this key after you fill it; while disabled the collection's synthetic default applies."},{"enabled":false,"key":"expected_bol","value":"","type":"default","description":"Optional exact customer BOL expected in the public-tracking response for the saved booking handle. Enable this key after you fill it; while disabled the collection's synthetic default applies."},{"enabled":false,"key":"bol_number","value":"","type":"default","description":"One of your BOL references (pairs with bol_shipdate). Enable this key after you fill it; while disabled the collection's synthetic default applies."},{"enabled":false,"key":"bol_shipdate","value":"","type":"default","description":"YYYYMMDD ship date for bol_number. Enable this key after you fill it; while disabled the collection's synthetic default applies."},{"enabled":true,"key":"bol_xml","value":"","type":"default","description":"Complete <bol> document for the deliberate LDTN TEST tbolentry4 run in folder 9 (it carries your TEST login as UserName and Password). Build it from https://ldtn.net/docs/facts-xml-api/. If LDT issued a preassigned e-PRO, send it as refnoN with matching refnotypeN=RF. Clear it after the supervised session."},{"enabled":false,"key":"RUN_STATEFUL","value":"","type":"default","description":"Leave disabled and empty. Folder 9 sends its two state-changing requests only when this equals the exact phrase 'I confirm a supervised LDTN TEST write' and facts_base is the LDTN TEST base. Clear it again after a supervised TEST session."}],"published":true}],"user":{"authenticated":false,"permissions":{"publish":false}},"run":{"button":{"js":"https://run.pstmn.io/button.js","css":"https://run.pstmn.io/button.css"}},"web":"https://www.getpostman.com/","team":{"logo":"https://res.cloudinary.com/postman/image/upload/t_team_logo_pubdoc/v1/team/e9c8d2f790d1fb6c9d39d842d95bd163b7aa16670b868aa9e800f8952d57f150","favicon":"https://ldtn.net/favicon.ico"},"isEnvFetchError":false,"languages":"[{\"key\":\"csharp\",\"label\":\"C#\",\"variant\":\"HttpClient\"},{\"key\":\"csharp\",\"label\":\"C#\",\"variant\":\"RestSharp\"},{\"key\":\"curl\",\"label\":\"cURL\",\"variant\":\"cURL\"},{\"key\":\"dart\",\"label\":\"Dart\",\"variant\":\"http\"},{\"key\":\"go\",\"label\":\"Go\",\"variant\":\"Native\"},{\"key\":\"http\",\"label\":\"HTTP\",\"variant\":\"HTTP\"},{\"key\":\"java\",\"label\":\"Java\",\"variant\":\"OkHttp\"},{\"key\":\"java\",\"label\":\"Java\",\"variant\":\"Unirest\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"Fetch\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"jQuery\"},{\"key\":\"javascript\",\"label\":\"JavaScript\",\"variant\":\"XHR\"},{\"key\":\"c\",\"label\":\"C\",\"variant\":\"libcurl\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Axios\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Native\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Request\"},{\"key\":\"nodejs\",\"label\":\"NodeJs\",\"variant\":\"Unirest\"},{\"key\":\"objective-c\",\"label\":\"Objective-C\",\"variant\":\"NSURLSession\"},{\"key\":\"ocaml\",\"label\":\"OCaml\",\"variant\":\"Cohttp\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"cURL\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"Guzzle\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"HTTP_Request2\"},{\"key\":\"php\",\"label\":\"PHP\",\"variant\":\"pecl_http\"},{\"key\":\"powershell\",\"label\":\"PowerShell\",\"variant\":\"RestMethod\"},{\"key\":\"python\",\"label\":\"Python\",\"variant\":\"http.client\"},{\"key\":\"python\",\"label\":\"Python\",\"variant\":\"Requests\"},{\"key\":\"r\",\"label\":\"R\",\"variant\":\"httr\"},{\"key\":\"r\",\"label\":\"R\",\"variant\":\"RCurl\"},{\"key\":\"ruby\",\"label\":\"Ruby\",\"variant\":\"Net::HTTP\"},{\"key\":\"shell\",\"label\":\"Shell\",\"variant\":\"Httpie\"},{\"key\":\"shell\",\"label\":\"Shell\",\"variant\":\"wget\"},{\"key\":\"swift\",\"label\":\"Swift\",\"variant\":\"URLSession\"}]","languageSettings":[{"key":"csharp","label":"C#","variant":"HttpClient"},{"key":"csharp","label":"C#","variant":"RestSharp"},{"key":"curl","label":"cURL","variant":"cURL"},{"key":"dart","label":"Dart","variant":"http"},{"key":"go","label":"Go","variant":"Native"},{"key":"http","label":"HTTP","variant":"HTTP"},{"key":"java","label":"Java","variant":"OkHttp"},{"key":"java","label":"Java","variant":"Unirest"},{"key":"javascript","label":"JavaScript","variant":"Fetch"},{"key":"javascript","label":"JavaScript","variant":"jQuery"},{"key":"javascript","label":"JavaScript","variant":"XHR"},{"key":"c","label":"C","variant":"libcurl"},{"key":"nodejs","label":"NodeJs","variant":"Axios"},{"key":"nodejs","label":"NodeJs","variant":"Native"},{"key":"nodejs","label":"NodeJs","variant":"Request"},{"key":"nodejs","label":"NodeJs","variant":"Unirest"},{"key":"objective-c","label":"Objective-C","variant":"NSURLSession"},{"key":"ocaml","label":"OCaml","variant":"Cohttp"},{"key":"php","label":"PHP","variant":"cURL"},{"key":"php","label":"PHP","variant":"Guzzle"},{"key":"php","label":"PHP","variant":"HTTP_Request2"},{"key":"php","label":"PHP","variant":"pecl_http"},{"key":"powershell","label":"PowerShell","variant":"RestMethod"},{"key":"python","label":"Python","variant":"http.client"},{"key":"python","label":"Python","variant":"Requests"},{"key":"r","label":"R","variant":"httr"},{"key":"r","label":"R","variant":"RCurl"},{"key":"ruby","label":"Ruby","variant":"Net::HTTP"},{"key":"shell","label":"Shell","variant":"Httpie"},{"key":"shell","label":"Shell","variant":"wget"},{"key":"swift","label":"Swift","variant":"URLSession"}],"languageOptions":[{"label":"C# - HttpClient","value":"csharp - HttpClient - C#"},{"label":"C# - RestSharp","value":"csharp - RestSharp - C#"},{"label":"cURL - cURL","value":"curl - cURL - cURL"},{"label":"Dart - http","value":"dart - http - Dart"},{"label":"Go - Native","value":"go - Native - Go"},{"label":"HTTP - HTTP","value":"http - HTTP - HTTP"},{"label":"Java - OkHttp","value":"java - OkHttp - Java"},{"label":"Java - Unirest","value":"java - Unirest - Java"},{"label":"JavaScript - Fetch","value":"javascript - Fetch - JavaScript"},{"label":"JavaScript - jQuery","value":"javascript - jQuery - JavaScript"},{"label":"JavaScript - XHR","value":"javascript - XHR - JavaScript"},{"label":"C - libcurl","value":"c - libcurl - C"},{"label":"NodeJs - Axios","value":"nodejs - Axios - NodeJs"},{"label":"NodeJs - Native","value":"nodejs - Native - NodeJs"},{"label":"NodeJs - Request","value":"nodejs - Request - NodeJs"},{"label":"NodeJs - Unirest","value":"nodejs - Unirest - NodeJs"},{"label":"Objective-C - NSURLSession","value":"objective-c - NSURLSession - Objective-C"},{"label":"OCaml - Cohttp","value":"ocaml - Cohttp - OCaml"},{"label":"PHP - cURL","value":"php - cURL - PHP"},{"label":"PHP - Guzzle","value":"php - Guzzle - PHP"},{"label":"PHP - HTTP_Request2","value":"php - HTTP_Request2 - PHP"},{"label":"PHP - pecl_http","value":"php - pecl_http - PHP"},{"label":"PowerShell - RestMethod","value":"powershell - RestMethod - PowerShell"},{"label":"Python - http.client","value":"python - http.client - Python"},{"label":"Python - Requests","value":"python - Requests - Python"},{"label":"R - httr","value":"r - httr - R"},{"label":"R - RCurl","value":"r - RCurl - R"},{"label":"Ruby - Net::HTTP","value":"ruby - Net::HTTP - Ruby"},{"label":"Shell - Httpie","value":"shell - Httpie - Shell"},{"label":"Shell - wget","value":"shell - wget - Shell"},{"label":"Swift - URLSession","value":"swift - URLSession - Swift"}],"layoutOptions":[{"value":"classic-single-column","label":"Single Column"},{"value":"classic-double-column","label":"Double Column"}],"versionOptions":[],"environmentOptions":[{"value":"0","label":"No Environment"},{"label":"FACTS XML API: fill locally","value":"55567458-170d0c69-8d5d-4ded-a0e2-9080d73edfe4"}],"canonicalUrl":"https://postman.ldtn.net/view/metadata/2sBYAuRr5C"}