curl --request POST \
--url https://agent.lanesurf.com/v1/carrier/loads/{load_id}/bids \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"rate": 1900,
"truck_id": "c1d2e3f4-0000-4000-8000-000000000001",
"note": "Empty in Dallas Fri 8am"
}
'import requests
url = "https://agent.lanesurf.com/v1/carrier/loads/{load_id}/bids"
payload = {
"rate": 1900,
"truck_id": "c1d2e3f4-0000-4000-8000-000000000001",
"note": "Empty in Dallas Fri 8am"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
rate: 1900,
truck_id: 'c1d2e3f4-0000-4000-8000-000000000001',
note: 'Empty in Dallas Fri 8am'
})
};
fetch('https://agent.lanesurf.com/v1/carrier/loads/{load_id}/bids', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://agent.lanesurf.com/v1/carrier/loads/{load_id}/bids",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'rate' => 1900,
'truck_id' => 'c1d2e3f4-0000-4000-8000-000000000001',
'note' => 'Empty in Dallas Fri 8am'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://agent.lanesurf.com/v1/carrier/loads/{load_id}/bids"
payload := strings.NewReader("{\n \"rate\": 1900,\n \"truck_id\": \"c1d2e3f4-0000-4000-8000-000000000001\",\n \"note\": \"Empty in Dallas Fri 8am\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://agent.lanesurf.com/v1/carrier/loads/{load_id}/bids")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"rate\": 1900,\n \"truck_id\": \"c1d2e3f4-0000-4000-8000-000000000001\",\n \"note\": \"Empty in Dallas Fri 8am\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://agent.lanesurf.com/v1/carrier/loads/{load_id}/bids")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"rate\": 1900,\n \"truck_id\": \"c1d2e3f4-0000-4000-8000-000000000001\",\n \"note\": \"Empty in Dallas Fri 8am\"\n}"
response = http.request(request)
puts response.read_body{
"bid_id": "b7e1c2d3-0000-4000-8000-0000000000b1",
"load_id": "8f14e45f-0000-4000-8000-0000000000a1",
"rate": 1850,
"status": "submitted",
"created_at": "2026-10-20T09:00:00Z",
"action": "updated"
}Bid on a load
Tell the broker you want to run this load.
curl --request POST \
--url https://agent.lanesurf.com/v1/carrier/loads/{load_id}/bids \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"rate": 1900,
"truck_id": "c1d2e3f4-0000-4000-8000-000000000001",
"note": "Empty in Dallas Fri 8am"
}
'import requests
url = "https://agent.lanesurf.com/v1/carrier/loads/{load_id}/bids"
payload = {
"rate": 1900,
"truck_id": "c1d2e3f4-0000-4000-8000-000000000001",
"note": "Empty in Dallas Fri 8am"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
rate: 1900,
truck_id: 'c1d2e3f4-0000-4000-8000-000000000001',
note: 'Empty in Dallas Fri 8am'
})
};
fetch('https://agent.lanesurf.com/v1/carrier/loads/{load_id}/bids', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://agent.lanesurf.com/v1/carrier/loads/{load_id}/bids",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'rate' => 1900,
'truck_id' => 'c1d2e3f4-0000-4000-8000-000000000001',
'note' => 'Empty in Dallas Fri 8am'
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://agent.lanesurf.com/v1/carrier/loads/{load_id}/bids"
payload := strings.NewReader("{\n \"rate\": 1900,\n \"truck_id\": \"c1d2e3f4-0000-4000-8000-000000000001\",\n \"note\": \"Empty in Dallas Fri 8am\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://agent.lanesurf.com/v1/carrier/loads/{load_id}/bids")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"rate\": 1900,\n \"truck_id\": \"c1d2e3f4-0000-4000-8000-000000000001\",\n \"note\": \"Empty in Dallas Fri 8am\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://agent.lanesurf.com/v1/carrier/loads/{load_id}/bids")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"rate\": 1900,\n \"truck_id\": \"c1d2e3f4-0000-4000-8000-000000000001\",\n \"note\": \"Empty in Dallas Fri 8am\"\n}"
response = http.request(request)
puts response.read_body{
"bid_id": "b7e1c2d3-0000-4000-8000-0000000000b1",
"load_id": "8f14e45f-0000-4000-8000-0000000000a1",
"rate": 1850,
"status": "submitted",
"created_at": "2026-10-20T09:00:00Z",
"action": "updated"
}- Only verified carriers can bid (
403 verification_required). - The body is optional. No body, an empty body or
{}means “I want to run this, send me your rate”. rateis all-in USD. Leave it out to ask for the broker’s rate.truck_idmust be one of this key’s active trucks.- One bid per carrier per load, across all of that carrier’s keys. The carrier is its DOT number,
or its MC number if it has no DOT. Sending again updates that bid (latest terms win): the reply
is
200withaction: updated, oraction: unchangedif nothing changed. Fields you leave out keep their current value. The broker sees the new rate on the same bid. - Once the broker has accepted the bid, it can’t change (
409 bid_decided). A declined bid can be sent again: a new rate reopens it for the broker. - If a bid shows
incompleteinGET /v1/carrier/bids, it was recorded but never reached the broker. Send the bid again to finish it. Within 2 minutes only the key that placed it can, and its original rate, truck and note are used; after that any key of the carrier can, with the new request’s terms.
GET /v1/carrier/bids.Authorizations
One key per broker rep or per carrier signup. Keep it secret.
Path Parameters
The load_id from a search or matches result.
Body
Optional. No body, an empty body or {} bids with no rate, truck or note, which asks for the broker's rate.
Response
This carrier already had a bid on this load: it was updated with the new terms (action: updated),
or nothing changed (action: unchanged). Same bid_id; the broker sees the new rate on it.
submitted: the broker has it and the load is open. accepted / declined: the broker's choice on
this bid. load_closed: the load was covered some other way, closed, or
booked to someone else, and the broker made no choice on this bid. incomplete: the bid was recorded
but never reached the broker (a failure mid-bid); POST it again to finish it (within 2 minutes from
the same key with its original terms, after that from any of the carrier's keys with the new terms).
submitted, accepted, declined, load_closed, incomplete Only in the reply to POST /v1/carrier/loads/{load_id}/bids. created: a new bid. updated: this
carrier's existing bid now has the new terms. unchanged: same terms as before.
created, updated, unchanged