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

# Quickstart

> Make your first three calls in under 10 minutes.

## Get a sandbox key

Sign up at [console.lmnauto.com](https://console.lmnauto.com/console/signup) — work email and company name, auto-approved, no waiting. Log in with the emailed one-time code, open **Keys**, and create a sandbox key.

The key is displayed **once**, at creation. LMN stores only a hash and cannot recover it for you; if you lose it, revoke and mint a new one.

| Trial account limit | Value                                     |
| ------------------- | ----------------------------------------- |
| Call budget per key | **1,000 calls** (lifetime, not per-month) |
| Active sandbox keys | **2**                                     |
| IP allowlist        | None — call from anywhere                 |

Production keys carry no call budget at all. If you run out of trial calls while still building, use **Request production access** in the console and tell us what you're working on — we can raise your sandbox budget without waiting for the full approval.

## Base URLs

| Environment | Base URL                          |
| ----------- | --------------------------------- |
| Production  | `https://api.lmnauto.com`         |
| Sandbox     | `https://sandbox-api.lmnauto.com` |

All paths below are relative to the chosen base URL. Sandbox mirrors the production API surface and returns current auction inventory for read endpoints, but sandbox orders are non-binding. Use production only when you are ready to place real bid commitments.

## Three calls in 5 minutes

```bash theme={null}
# 1. List filter values for your search UI
curl -H "x-api-key: lmn_stg_YOUR_SANDBOX_KEY" \
  https://sandbox-api.lmnauto.com/v1/vehicles/facets

# 2. Browse inventory
curl -H "x-api-key: lmn_stg_YOUR_SANDBOX_KEY" \
  "https://sandbox-api.lmnauto.com/v1/vehicles?make=Toyota&limit=5"

# 3. Place an order (POST requires Idempotency-Key header)
curl -X POST \
  -H "x-api-key: lmn_stg_YOUR_SANDBOX_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"vehicle_id": "01HXYZ...", "max_bid_amount_usd": 15500}' \
  https://sandbox-api.lmnauto.com/v1/orders
```

Production keys are prefixed `lmn_prd_`; sandbox keys are prefixed `lmn_stg_`. The prefix is checked against the host — sending `lmn_stg_*` to `api.lmnauto.com` returns `401 invalid_api_key`.

### Watch your trial budget

Every response to a budgeted key carries two headers. Read them instead of counting calls yourself:

```
X-Quota-Limit: 100
X-Quota-Remaining: 94
```

`X-Quota-Remaining` is computed **after** the current request is counted, so the value you see is what you have left going forward. Keys without a budget — every production key, plus any sandbox key whose budget we've lifted — send no quota headers at all. Treat their absence as "unlimited", not as "zero". When the budget runs out you get [`429 rate_limited`](/errors#trial-budget-exhausted).

<Note>
  To browse upcoming live auctions in sandbox, use date filters such as `auction_date_from=2026-04-27` and page with `cursor` + `limit`. The API does not support `page`, `perPage`, `fuel_type`, `result`, or `status` filters.
</Note>

## End-to-end walkthrough

A typical integration flows through three phases:

```
Phase 1 — Selection
  GET  /v1/vehicles/facets       → populate filter dropdowns
  GET  /v1/vehicles               → paginated inventory list
  GET  /v1/vehicles/{id}           → full detail + price breakdown

Phase 2 — Acquisition
  POST /v1/orders                 → create order (= bid commitment)
  GET  /v1/orders/{id}             → poll until status = secured
  DELETE /v1/orders/{id}           → cancel (only from placed)

Phase 3 — Fulfillment
  GET  /v1/orders/{id}             → poll through export_processing → in_transit → delivery
  POST /v1/orders/{id}/status       → push partner-side fulfillment updates
```

<Note>
  **Timing constraint:** for auction vehicles, orders must be placed before `order_cutoff_at`. The cutoff equals `auction_date − N minutes`, where N is your integration's pre-negotiated lead time (default 1440 = 24h; lower for integrations without a secondary inspection step). The cutoff is pre-computed on the Vehicle resource — read it from the response, don't recompute. Buy-now vehicles have no cutoff. Orders with `secondary_inspection_required: true` have an earlier, calendar-based deadline — `secondary_inspection_cutoff_at`, end of day (auction day − 2) in your integration's timezone; see [Inspection request cutoff](/endpoints/orders#inspection-request-cutoff-auction-vehicles).
</Note>

## Error handling at a glance

All non-2xx responses share the shape:

```json theme={null}
{
  "error": {
    "code": "past_order_cutoff",
    "message": "The order window for this auction closed at 2026-04-20T12:00:00+09:00.",
    "request_id": "req_8829374"
  }
}
```

Branch client logic on `error.code` only — `error.message` is human-readable and may evolve. Full code matrix in [Errors](/errors).
