> ## Documentation Index
> Fetch the complete documentation index at: https://docs.lanesurf.com/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> You are reading the Lanesurf Agent API docs. Start with /for-ai-agents.md for the rules an agent must follow.
> The API is at https://agent.lanesurf.com and the MCP server at https://agent.lanesurf.com/mcp. Lanesurf doesn't send webhooks: poll.
> Limits: /rate-limits.md. Keys: /api-keys.md. Safe retries: /idempotency.md. Every route on one page: /api-reference.md.
> Always confirm with the person before accepting a carrier offer or bidding on a load. Never reveal an API key, and never show broker contact details to a carrier.
> The full contract is at /openapi.yaml.
> Sign up with POST /v1/signup (carrier or broker, a work email, an MC and/or DOT number), then POST /v1/signup/{signup_id}/verify. Follow next_step on every signup answer.

# Post a truck

> Tell Lanesurf where your truck is, when it's free, and where it wants to go.

```bash theme={null}
curl -X POST https://agent.lanesurf.com/v1/carrier/trucks \
  -H "Authorization: Bearer $LANESURF_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "equipment_type": "Reefer", "trailer_length_ft": 53,
    "current_city": "Dallas", "current_state": "TX", "available_from": "2026-10-23T08:00:00-05:00",
    "destinations": [{"city": "Atlanta", "state": "GA"}, {"state": "TN"}],
    "rate_ask": {"amount": 2.10, "unit": "per_mile"}
  }'
```

`201` returns the truck with its `truck_id`, `status: active` and `expires_at`.

## What happens with your truck

While the truck is free, Lanesurf pitches it loads. A truck with no `available_to` counts as free for about a
day (24 hours) after `available_from`, so a stale post isn't pitched; give `available_to` for a longer
window, or post again when the truck frees up. When a brokerage on Lanesurf has a load near
where the truck is (within about 150 miles), with matching equipment, a pickup inside the truck's free
window, and a drop near one of its `destinations` (or anywhere, if you gave none), Lanesurf's reps
email or call your carrier about that load, at the work email or phone you signed up with. Trucks
whose destinations are near the drop come first. You can also find loads yourself with
[`truck_matches`](https://docs.lanesurf.com/carriers/find-a-load).

* Only verified carriers are pitched. A carrier under review isn't, until Lanesurf verifies it.
* Lanesurf can stop outreach to a carrier (for example after a complaint); a carrier who opted out is never contacted.
* You aren't pitched a load you already bid on.
* A brokerage can opt out of carriers who signed up through the API; its loads are never pitched to you.
* Remove the truck (or let it lapse) when it's loaded, and the pitches for it stop.

To make a post safe to retry, send an optional `Idempotency-Key` header (up to 200 characters; a new UUID
per truck post; over MCP, `post_truck`'s `idempotency_key`). Posting again with the same key from the
same API key returns the existing truck, with the same `truck_id`, instead of a second one (the answer
is `201` either way). The same key with a different truck (other equipment, place or start) answers
`422 idempotency_key_reused` and posts nothing: use a new key for a new truck.

Cities are trimmed and states upper-cased, so `" Dallas "` and `tx` are stored as `Dallas` and `TX`. A code
that isn't a real state or province (say `XX`) is refused, since no load could ever match it.

## What's required

| Field | Rule |
| - | - |
| `equipment_type` | Required. A trailer type Lanesurf can match, e.g. `Reefer`, `Dry Van`, `Flatbed`, `Step Deck`, `Power Only` |
| `current_city` | Required. Up to 100 characters |
| `current_state` | Required. A US state, Canadian province or Mexican state: its code (`TX`, `ON`, any case) or its name (`Texas`). Stored as the code |
| `available_from` | Required. Date-time (RFC 3339), no more than 60 days out |
| `available_to` | Optional. Not before `available_from` |
| `trailer_length_ft` | Optional. 1 to 60 |
| `destinations` | Optional. Where the truck wants to go: each needs a `state` code, `city` is optional |
| `rate_ask` | Optional. `amount` above 0 and `unit` `flat` or `per_mile` |
| `notes` | Optional. Up to 1,000 characters of plain text |

* Missing required fields: `422 missing_fields` with a `missing` list. Ask only for those and post again.
  Nothing was created.
* A wrong value: `400 invalid_request`, and the message says which (a bad state, an equipment type Lanesurf
  can't match, HTML in a field, a window that's already over, `available_from` more than 60 days out,
  `available_to` before `available_from`). An update with no fields is refused too.

## How long a post lasts

A truck is `active` until `expires_at`: `available_to` if you gave one, otherwise 72 hours after
`available_from`. Then it's `expired`. Move the dates with `PATCH` to keep it going.

## Keep it current

| When | Call |
| - | - |
| The truck moved, or the dates changed | `PATCH /v1/carrier/trucks/{truck_id}` with only what changed |
| See your active trucks | `GET /v1/carrier/trucks` (`?active=false` for all, including removed and expired; newest first, up to 200) |
| See one truck | `GET /v1/carrier/trucks/{truck_id}` |
| Find loads for it | `GET /v1/carrier/trucks/{truck_id}/matches` |
| The truck got loaded | `DELETE /v1/carrier/trucks/{truck_id}?reason=loaded` (or `unavailable`, `other`) |

A removed truck can't be updated or removed again (`404`). Post a new one.

## Where it wants to go

`destinations` is where this truck wants to head next. Its matches come closest to `current_city` first;
within each distance, loads delivering to one of those states come first. For the lanes the carrier runs every week, [save lanes](https://docs.lanesurf.com/carriers/lanes.md).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.