Skip to main content
POST
Send a test webhook

Authorizations

Authorization
string
header
required

Your API key, sent as Authorization: Bearer <key>. Live and test keys are separate; the key you send decides which world the call acts in. To try calls, use a test key (it starts with lst_test_): no real courier is sent and no real money moves, but webhooks fire and the dropoff.phone you give can receive WhatsApp messages, so use your own number. A live key (it starts with lst_live_) books and charges real deliveries.

Body

application/json

Which event to send a sample of.

type
enum<string>
required

The published event type to send a sample of.

Available options:
delivery.status_changed,
delivery.updated,
delivery.courier_location,
withdrawal.updated,
store.updated,
store.connected

Response

Accepted. The test event is the one your endpoint receives, test: true included (the test field of the event). The send is queued and happens right after this answer; its outcome is a new attempt on GET /v1/webhook_deliveries.

Every event your webhook endpoint receives, and every event the debugging reads return: one of the six below, told apart by type. data is the object the event is about, and its shape depends on type. See WebhookEventEnvelope for the fields they all share and for how delivery behaves (at-least-once, unordered).

id
string
required

The event id, evt_ prefixed. Dedupe on this.

Example:

"evt_9pQ2vX7mKdR4tYb1nZ3sLwCe"

created_at
string<date-time>
required

When the event was recorded, ISO-8601 in UTC.

Example:

"2026-07-28T18:41:03Z"

type
enum<string>
required

Which event this is.

Available options:
delivery.status_changed
data
object
required

The shape of a delivery: every field the object can carry, with the nullability each one really has. It is the response of every operation that answers a delivery (the create, the fetch, a list row, the reschedule, the cancel, the retry and the refund) and the data of every full delivery event, so ONE type holds all of them.

Every operation returns the whole object. A field that a given call cannot yet have is present and null rather than missing: a create response has a null courier, because no courier has been assigned yet, and a reschedule only ever answers with a still-scheduled order, so its delivered_at is null.

Money is integer centavos, timestamps are ISO-8601 in UTC, and every enum below is ours rather than a passthrough of anyone else's.

test
boolean

Present, and true, only on a test event you asked for with POST /v1/test_webhooks. A real event does not carry the field at all. A test event's data is a sample whose ids resolve to nothing.

Example:

true