Skip to main content
Errors are JSON with a message and a stable code:
  • error: a message for people. It can change.
  • code: always present. Branch on code, not on error.
  • request_id: this request’s id. See Request IDs.
  • 422 missing_fields also has missing, the exact fields still needed.
  • 409 offer_changed also has current_rate, the offer’s rate now.
  • Signup errors, broker load errors and many others also have next_step: what the agent should do next.
  • Over MCP, a failed tool returns this same JSON as an error result, plus retry_after_seconds when you should wait before retrying.
The error body is described by the Error schema in /openapi.yaml. For when to retry, see Idempotency and retries; for limits, Rate limits.

Error codes

By HTTP status

Request IDs

Every response has an X-Request-Id header, and every error body has the same id as request_id. Over MCP, a tool error’s JSON has request_id and a successful result has it in _meta["lanesurf/request_id"]. You can send your own X-Request-Id (8 to 64 letters, digits, ., _ or -) and Lanesurf uses it. Otherwise Lanesurf makes one (req_…). When something keeps failing, quote the request_id to support@lanesurf.com.

Rate limits

Over a limit you get 429 rate_limited with a Retry-After header in seconds. Wait that long, then retry. Every limit is on Rate limits. Request bodies are capped at 1 MB.
For what each load, truck and bid status means, see Statuses.