Skip to main content
PATCH
Edit a load
Change what was posted: send only the fields that change, in the same shape as POST /v1/loads (plus reference_number). origins and destinations go together and replace every stop: send all of them, as GET /v1/loads/{id} shows them in load.
  • Lanesurf re-reads the load. Carriers already contacted keep the details they were given.
  • On a load with no rate yet, one of rate_min / rate_max sets both, as on posting.
  • Numbers may be numbers or strings; one that isn’t a number answers 400.
  • Works on open loads. A paused (inactive) load can change everything but its stops, temperature and pallets (resume it first, or change those in the Lanesurf dashboard).
  • 409 invalid_state: the load is covered (reopen it first) or deleted.
  • 422 missing_fields: new stops miss a required city, state or date.

Authorizations

Authorization
string
header
required

One key per broker rep or per carrier signup. Keep it secret.

Path Parameters

id
string
required

The load's load_id, or its tms_id, from POST /v1/loads.

Example:

"3f2a9c4e-1d7b-4c55-8a7e-0b9d6e5f1234"

Body

application/json

An edit: the fields of LoadFields, every one optional. Only the fields sent change. origins and destinations go together and replace every stop (the same rules as posting: the first origin needs city, state and pickup_ready_date, the last destination city, state and delivery_ready_date). On a load with no rate yet, one of rate_min / rate_max sets both. Values are checked as in LoadFields (a rate_min above the stored rate_max is refused too), a field not listed is refused, and a currency other than USD, CAD or MXN answers 400.

reference_number
string
Maximum string length: 100
equipment_type
string
Example:

"Flatbed"

origins
any[]
destinations
any[]
weight_lbs
commodity
string
rate_min
rate_max
Example:

1300

currency
enum<string>
Available options:
USD,
CAD,
MXN
temperature
is_palletized
boolean
pallet_count
driver_requirements
string

"team" for a team load; anything else makes it solo.

special_requirements
string
explicit_special_instructions
string

Response

Updated status, with the updated load.

load_id
string<uuid>
required
status
enum<string>
required

sourcing: Lanesurf is reaching carriers. stalled: the load is open, but no carrier has been contacted 15 minutes after posting (sourcing may not be switched on for this brokerage), or the brokerage signed up through the API and carrier outreach starts after Lanesurf's review. status_reason says which. covered: done; see covered_by. inactive: the load is no longer active and wasn't covered through this API. deleted: the load was deleted.

Available options:
sourcing,
stalled,
covered,
inactive,
deleted
offers
object[]
required

Carriers that named a rate, cheapest first.

outreach
object
required
next_step
string
required

For the agent. Exactly what to do next and which MCP tool to call (REST path in brackets).

agreed_rate
number

Once an offer is accepted: its rate (what was booked at).

max_rate
number
status_reason
string

Why, when the status alone would mislead. Set for stalled.

Example:

"No carrier has been contacted 15 minutes after posting. Sourcing may not be switched on for this brokerage; contact Lanesurf."

covered_by
enum<string>

lanesurf: the rep accepted an offer here. rep: the rep marked it covered elsewhere.

Available options:
lanesurf,
rep
winner
object

The accepted offer, once there is one.

post_with
object

The email and phone to put on the load wherever it is advertised, so carrier replies reach Lanesurf. Only set when Lanesurf has set a posting email and phone for the key; keys made by signing in from an AI app don't have one yet.

load
object

What was posted, as stored. On GET /v1/loads/{id} and every change (edit, pause, resume, reopen, delete, accept, decline, covered).