Production is locked until a market agreement is recorded

Webhooks

One endpoint per concern. Every delivery is signed, ordered by aggregate_version and kept for 30 days, so a replay is a click rather than a support ticket.

1 healthy1 failing1 paused

Endpoints

Where we send your events

Paused endpoints keep their secret and their subscription. Nothing is lost for 72 hours.

New

Add an endpoint

Catalogue

Events you can subscribe to

Grouped by the aggregate they belong to. Subscribing to a context you do not handle costs you nothing but noise.

  • order.*3 events

    The order aggregate. One event per accepted command, with `aggregate_version`.

    • order.createdAccepted and queued for the store.
    • order.state_changedAny move in the order machine, with the customer-facing phase.
    • order.cancelledCancelled by customer, store, ops or the system, with the reason code.
  • payment.*5 events

    The payment leg. Cash orders emit `promised` and `collected`, never `pushed`.

    • payment.pushedA push request left for the rail; the customer has a window to confirm.
    • payment.confirmedThe rail confirmed. Money is not yet captured on card markets.
    • payment.failedDeclined, wrong PIN or cancelled on the handset.
    • payment.expiredThe push window closed with no answer.
    • payment.refundedFull or partial refund settled on the original rail.
  • fulfilment.*5 events

    The delivery leg. Pickup orders skip every courier event.

    • fulfilment.courier_assignedA courier accepted the offer; carries vehicle and masked phone.
    • fulfilment.picked_upCollected at the store.
    • fulfilment.arrivingInside the arrival geofence; a hint, never proof.
    • fulfilment.deliveredProof accepted (customer OTP or photo).
    • fulfilment.failedNot delivered; the order is returning to the store.
  • dispatch.*2 events

    Supply signals for the cell your order sits in. Useful for scheduling, not for retries.

    • dispatch.no_courierNo courier took the offer inside the lease.
    • dispatch.supply_lowThe cell is short of couriers for the next half hour.
  • catalog.*2 events

    Answers to your catalogue pushes, per offer.

    • catalog.offer_rejectedAn offer was refused, with the field and the reason.
    • catalog.availability_changedThe store changed availability from its own app.
  • ticket.*4 events

    Events you organise.

    • ticket.issuedA ticket was issued against a tier.
    • ticket.checked_inScanned at the door.
    • ticket.voidedVoided by the organiser or on refund.
    • ticket.transferredMoved to another phone number.