Skip to main content
LMN sends webhooks to your registered URL on server-side state changes and observed external events. Most partner-initiated API calls are confirmed by the API response and do not also fire a webhook — the exception is the partner’s decision at secondary_inspection_ready (confirm / decline via DELETE), which fires order.status_changed in addition to the synchronous response (amended 2026-07-06; see the firing-rules table below).

Event families

See event types for payload examples and per-event semantics.
Chat events are opt-in. Unlike Orders and Eagle Eye, chat events are off by default — chat.message.created fires once per visible reply; chat.eagle_eye.match_posted fires once per Eagle Eye digest posted into a dealer’s room. Contact LMN to enable either for your integration; delivery otherwise uses the same webhook URL and secret you already have registered.

Order firing rules

* cancellation_reason is one of auction_rescheduled_too_soon, auction_cancelled (pre-acquiring), seller_withdrew (pre-acquiring). ** Inspection is optionalplaced → acquiring directly (row 4) remains valid for orders that skip inspection. secondary_inspection_in_progress and secondary_inspection_ready are LMN-owned statuses; partners cannot set them directly via the status-push endpoint. *** At secondary_inspection_ready, the outcome can be either driver: LMN/admin decides (rows 6, 8) or the partner decides via POST /v1/orders/{id}/confirm or DELETE /v1/orders/{id} (rows 7, 9). Both drivers fire order.status_changed (amended 2026-07-06 — previously the partner-driven rows fired nothing; the partner’s event pipe now carries every outcome of the decision point), in addition to the synchronous API response. Whichever happens first wins; a losing concurrent request gets 409. † No status change — informational signal only.

Eagle Eye firing rule

eagle_eye.match fires per saved watch when LMN observes at least one change worth notifying: Muted watches still collect matches but suppress webhook delivery. Paused watches do not collect new matches until resumed.

Delivery model — fire-and-forget

On state transition, LMN enqueues the event and returns the API/admin response immediately. A background worker picks up pending events on the cron cadence, typically within the next minute. The write path never blocks on webhook delivery. If your endpoint is slow or down, the order transition still completes immediately. Delivery is retried per the retry policy.

Pilot mode — webhooks optional

For pilot integrations, you may skip registering a webhook URL and rely on polling API reads instead. LMN still records events server-side for every qualifying transition; if no URL is registered, delivery is a no-op (recorded as delivery_skipped in the event log). Post-pilot (production volume), webhooks become required — LMN cannot support polling at scale.

Self-service event history

LMN exposes the event log for recovery and audit: Each entry includes delivery status, attempts, response code, and the payload LMN sent. Useful for “did I miss a webhook?” debugging without contacting LMN support.
The two endpoints report delivery_status in different vocabularies. This is long-standing behavior, not a bug, but it will break a shared parser:The watch endpoint collapses the internal states: delivering folds into pending, and both delivery_failed and delivery_skipped fold into failed.The consequence worth knowing: on a watch event, failed does not tell you whether your endpoint rejected the delivery or whether no URL was registered at the time — two situations with opposite remedies. Only the order endpoint distinguishes them. If you need that distinction for a watch event, check whether a webhook URL is registered for that environment before assuming your receiver is at fault.
The partner console shows the same log per order, and adds two self-service actions: View payload (inspect the exact JSON, read-only) and Replay (re-send a past event to your endpoint). See Replaying a webhook — note that a replay reuses the original event_id, which matters if your handler deduplicates.