Skip to main content
POST
Accept a carrier's offer
Records that the rep picks this carrier. Lanesurf takes the load off the market (it goes inactive) and stops looking. The load becomes covered with covered_by: lanesurf and winner set. Lanesurf does not contact the carrier or send a rate confirmation: the broker reaches out to the winner (contact_email / contact_phone on winner) to book, and sends the rate confirmation from their own TMS. Lanesurf also emails the brokerage’s reps (the load’s CC list, else the brokerage’s CC list, plus the rep who posted it) the carrier’s details. Confirm with the person before calling this.
  • Accepting the same offer again is safe: you get the same answer. Send the offer’s rate that the person agreed to. If the carrier changed its rate since, nothing is accepted and you get 409 offer_changed with current_rate: ask the person again.
  • 409 already_covered: another offer was already accepted, or the load was marked covered (POST /v1/loads/{id}/covered) or deleted. A load can’t be both accepted and marked covered.
  • 409 offer_changed: the offer’s rate isn’t the one sent (the carrier changed it, or the rate sent was wrong); current_rate has it and error names both. Nothing was accepted.
  • A declined offer can still be accepted later. An offer on a paused load can be accepted too; the load becomes covered. Reopening a covered load puts it back to sourcing, even if it was paused before.
  • 400 invalid_request: no rate was sent, or this carrier hasn’t named a usable rate yet.

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"

session_id
string<uuid>
required

The offer's session_id from GET /v1/loads/{id}.

Body

application/json
rate
number
required

The offer's rate in USD as GET /v1/loads/{id} showed it and the person agreed to.

Example:

1850

Response

Updated status, with winner set.

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).