Skip to main content

Field naming

snake_case everywhere — both request body fields and response shapes.

Dates & timestamps

All timestamps are ISO 8601 with the source event’s original UTC offset preserved — never normalized to Z (UTC) or any single fixed zone.
  • Korean auction events serialize as +09:00 (KST).
  • Destination-side logistics events (e.g., Lagos customs arrival) serialize in the event’s local offset — +01:00 for WAT, etc.
  • Bare UTC Z is not acceptable in partner-submitted fields — always include the actual offset of the event location.
Implementation note for Node.js consumers: Date.prototype.toISOString() always returns Z and is therefore not suitable. Use a serializer that preserves the offset (e.g., date-fns-tz, Luxon, or equivalent).

Money

  • All amounts are USD integers (whole dollars, not cents).
  • null for unset amounts (e.g., purchase_price_usd is null until the order reaches secured).
  • Partner handles NGN (or other local currency) conversion; LMN does not surface non-USD prices.

IDs

Bare IDs (e.g., 01HXYZ...). No prefixes like ord_ or veh_. Order IDs are ULIDs (26 chars). Vehicle IDs follow the source’s native format.

Pagination

Cursor-based. A cursor is opaque: most lists encode a composite (sort_field, id) position, while dealer vehicles with a non-price sort encode an upstream page number plus the IDs of the most recent 512 listings already returned or skipped as duplicates (see Price-sorted pagination):
  • next_cursor is null on the last page.
  • Cursors are sort-specific — restart from page 1 whenever you change sort or any filter. Orders and invoices reject a cursor reused with a different sort with 400 invalid_cursor; Eagle Eye matches reject it with 400 validation_error (details.field: "cursor"); /v1/vehicles can return 400 validation_error on cursor for incompatible price sorts or a taxonomy version change. Its legacy page-number cursors may instead silently apply page N to the changed result set (see Missing dealer listings → T5).
  • Default page size is 50 (vehicles, orders); max 200. limit > max returns 400 validation_error.

Nullable fields

Always explicit null, never omitted. Clients should treat missing fields as schema bugs.

HTTP methods & status codes

Operational boundary

Versioning

/v1/ is the major-version prefix. Breaking changes increment to /v2/ with a 90-day deprecation window where both versions are served. Every changelog entry identifies what changed: When a version is marked “No request/response model shape changes”, it means no endpoint path, method, required request field, response object field, or field type changed.

Sandbox

Base URL: https://sandbox-api.lmnauto.com/v1/.
  • Read endpoints return current auction inventory, using the same request/response contract as production.
  • Orders are non-binding in sandbox and are safe for integration testing.
  • Orders do not auto-advance. Use POST /v1/orders/{id}/sandbox-status to simulate lifecycle states and enqueue webhook events; coordinate with LMN ops when you want logs monitored during a test.
  • Best-effort SLAs; no production guarantees.

SDK & OpenAPI

OpenAPI 3.1 spec available at GET /v1/openapi.json. Generate clients via openapi-generator or any compatible tool.