{"openapi":"3.1.0","info":{"title":"LoadLoom API","version":"v1","description":"The LoadLoom freight API: instant bookable quotes, booking handoff links, tracking, and broker board operations. Auth: `Authorization: Bearer ll_live_...` (or `ll_test_...` for the sandbox: test keys hit the same host but only ever see test objects). Rate limit 120 requests/hour per key. Send `Idempotency-Key` on POSTs to make retries safe; every response carries `X-Request-Id` for support. Within v1, changes are additive only. Governed by the API and Webhooks Agreement at /api-terms.","contact":{"email":"developers@loadloom.com"},"termsOfService":"https://test.loadloom.com/api-terms"},"servers":[{"url":"https://test.loadloom.com"}],"security":[{"bearerAuth":[]}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","description":"Your API key from Account -> Developers. Example placeholder: ll_test_EXAMPLEONLY"}},"parameters":{"idempotencyKey":{"name":"Idempotency-Key","in":"header","required":false,"schema":{"type":"string","maxLength":255},"description":"Any unique string (a UUID is ideal). Identical retries replay the stored response for 24h; a different body under the same key returns 400 idempotency_error."}},"schemas":{"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"type":{"type":"string","enum":["authentication_error","permission_error","invalid_request_error","not_found_error","rate_limit_error","idempotency_error","api_error"]},"message":{"type":"string"}}}}},"Tier":{"type":"object","properties":{"id":{"type":"string","enum":["economy","standard","priority"]},"label":{"type":"string"},"total":{"type":"number"},"perMile":{"type":"number"},"transit":{"type":"string"}}},"Co2":{"type":"object","description":"GLEC-aligned emissions ESTIMATE; informational only, see /co2-methodology.","properties":{"kg":{"type":"integer"},"display":{"type":"string"},"basis":{"type":"string","const":"estimate"},"methodology_url":{"type":"string"}}},"Quote":{"type":"object","properties":{"object":{"type":"string","const":"quote"},"id":{"type":"string","example":"Q-8F3K2Q"},"url":{"type":"string"},"created_at":{"type":"string"},"price_locked_until":{"type":"string","description":"PriceLock 30 expiry"},"currency":{"type":"string"},"miles":{"type":"number"},"tiers":{"type":"array","items":{"$ref":"#/components/schemas/Tier"}},"co2":{"$ref":"#/components/schemas/Co2"},"livemode":{"type":"boolean","description":"false on test-key objects"}}},"BookingLink":{"type":"object","properties":{"object":{"type":"string","const":"booking_link"},"quote_id":{"type":"string"},"tier_id":{"type":"string"},"checkout_url":{"type":"string","description":"Send the human here: tier pre-selected, contract signature and payment happen on LoadLoom. The API never signs or charges."},"price_locked_until":{"type":"string"},"note":{"type":"string"}}},"Booking":{"type":"object","properties":{"object":{"type":"string","const":"booking"},"id":{"type":"string"},"status":{"type":"string"},"category":{"type":"string"},"origin":{"type":["string","null"]},"destination":{"type":["string","null"]},"total":{"type":["number","null"]},"currency":{"type":"string"},"created_at":{"type":"string"},"quote_id":{"type":["string","null"]},"tracking_ref":{"type":"string"}}},"Tracking":{"type":"object","properties":{"object":{"type":"string","const":"tracking"},"ref":{"type":"string"},"status":{"type":"string"},"events":{"type":"array","items":{"type":"object","properties":{"code":{"type":"string"},"label":{"type":"string"},"at":{"type":"string"},"city":{"type":"string"}}}}}},"BrokerLoad":{"type":"object","properties":{"object":{"type":"string","const":"broker_load"},"id":{"type":"string","example":"BL-K4T9AA"},"lane":{"type":"string"},"origin_country":{"type":"string"},"dest_country":{"type":"string"},"equipment":{"type":"string"},"weight_lbs":{"type":["integer","null"]},"commodity":{"type":["string","null"]},"rate":{"type":"number","description":"Honest all-in carrier rate; required, no call-for-rate posts"},"pay_terms":{"type":"string"},"instant_book":{"type":"boolean"},"insurance_min":{"type":["string","null"]},"status":{"type":"string"},"pickup_date":{"type":["string","null"]},"shipper_invoice":{"type":["number","null"]},"created_at":{"type":"string"}}},"List":{"type":"object","properties":{"object":{"type":"string","const":"list"},"data":{"type":"array","items":{}}}}}},"paths":{"/api/v1/quotes":{"post":{"summary":"Create a 30-day price-locked quote","description":"Same engine as loadloom.com. Body mirrors the site's quote forms: category (heavy-equipment | vehicles | rv | boats | freight | moving | containers), pickup, dropoff, and the category's details fields (see /developers/api).","parameters":[{"$ref":"#/components/parameters/idempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["category","pickup","dropoff"],"properties":{"category":{"type":"string"},"pickup":{"type":"string"},"dropoff":{"type":"string"},"details":{"type":"object"}}}}}},"responses":{"200":{"description":"The priced quote","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Quote"}}}},"400":{"description":"Engine could not price the request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing/invalid key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"get":{"summary":"List your saved quotes","parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100}}],"responses":{"200":{"description":"Newest first","content":{"application/json":{"schema":{"$ref":"#/components/schemas/List"}}}},"401":{"description":"Missing/invalid key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/quotes/{id}":{"get":{"summary":"Retrieve one quote","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"The quote","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Quote"}}}},"404":{"description":"Not on this account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"PriceLock expired; create a fresh quote","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/bookings":{"post":{"summary":"Turn a quote + tier into a pre-selected checkout link","description":"Returns checkout_url for the HUMAN to complete: a legal signature and a payment never happen inside someone else's server.","parameters":[{"$ref":"#/components/parameters/idempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["quote_id","tier_id"],"properties":{"quote_id":{"type":"string"},"tier_id":{"type":"string"}}}}}},"responses":{"200":{"description":"The handoff link","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BookingLink"}}}},"404":{"description":"No such quote on this account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"410":{"description":"PriceLock expired","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"get":{"summary":"List your bookings with live statuses","responses":{"200":{"description":"Bookings","content":{"application/json":{"schema":{"$ref":"#/components/schemas/List"}}}},"401":{"description":"Missing/invalid key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/bookings/{id}":{"get":{"summary":"Retrieve one booking","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"The booking","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Booking"}}}},"404":{"description":"Not on this account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/tracking":{"get":{"summary":"City-level milestone tracking","parameters":[{"name":"ref","in":"query","required":true,"schema":{"type":"string"},"description":"Booking (LL-...) or load (LD-...) number. Test keys track the fixture LL-TEST-0001."}],"responses":{"200":{"description":"Milestones (never precise GPS)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Tracking"}}}},"404":{"description":"No shipment found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/broker/loads":{"get":{"summary":"List your broker loads (active broker profiles)","parameters":[{"name":"status","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Loads","content":{"application/json":{"schema":{"$ref":"#/components/schemas/List"}}}},"403":{"description":"No active broker profile","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"summary":"Post a load to the board","description":"Same rules as the desk: honest all-in rate required, plan post limits, and the geographic wall (Canadian-path brokers cannot post US-domestic).","parameters":[{"$ref":"#/components/parameters/idempotencyKey"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["origin_city","origin_state","dest_city","dest_state","equipment","rate"],"properties":{"origin_city":{"type":"string"},"origin_state":{"type":"string"},"origin_country":{"type":"string"},"dest_city":{"type":"string"},"dest_state":{"type":"string"},"dest_country":{"type":"string"},"equipment":{"type":"string"},"weight_lbs":{"type":"integer"},"commodity":{"type":"string"},"rate":{"type":"number"},"pay_terms":{"type":"string"},"instant_book":{"type":"boolean"},"insurance_min":{"type":"string"},"notes":{"type":"string"},"pickup_date":{"type":"string"}}}}}},"responses":{"200":{"description":"The posted load","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrokerLoad"}}}},"400":{"description":"Missing field or no honest rate","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"403":{"description":"Authority wall or no broker profile","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Free plan post limit","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/broker/requests":{"get":{"summary":"Pending carrier requests on your open loads","description":"Pairs with webhook events broker_load.requested / assigned / completed. Accepting stays on-platform: signatures are human acts.","responses":{"200":{"description":"Requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/List"}}}},"403":{"description":"No active broker profile","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/promo-assets":{"get":{"summary":"Publisher content feed with your tracked links","responses":{"200":{"description":"Assets","content":{"application/json":{"schema":{"$ref":"#/components/schemas/List"}}}}}}},"/api/v1/referrals/summary":{"get":{"summary":"Your referral earnings, machine-readable","responses":{"200":{"description":"Summary","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/api/v1/carrier/loads":{"get":{"summary":"The AVAILABLE load feed (carrier keys)","responses":{"200":{"description":"Loads","content":{"application/json":{"schema":{"$ref":"#/components/schemas/List"}}}},"403":{"description":"Carrier keys only","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/v1/carrier/settlements":{"get":{"summary":"Your settlement statuses (carrier keys)","responses":{"200":{"description":"Settlements","content":{"application/json":{"schema":{"$ref":"#/components/schemas/List"}}}},"403":{"description":"Carrier keys only","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}}}