Subscribed event names. Empty array = all events fire this webhook. Known events: listing.created, listing.updated, listing.deleted — fired on writes via either admin or public API; listing.published — a listing scheduled with publishAt reached its time and is now published. Subscribe to this to stagger a bulk release: schedule the listings apart from one another and each tranche notifies you as it lands, instead of your sitemap gaining every URL at once. Payload is { listingId, listingType, slug }, or the bulk shape { bulk: true, count, listingIds, truncated } when several cross inside one debounce window. NOT fired for a listing whose publishAt passed long before the scheduler saw it — scheduled publishing is evaluated at read time, so such a listing was already public and listing.published would be describing the past; submission.received — an anonymous suggestion or feedback item needs review. Fired ONLY for items that reach pending; spam (honeypot or failed Turnstile) is stored silently and never notifies, so the channel stays worth reading. Payload: { submissionId, kind, listingId }; review.received — a public review is waiting for moderation. Like submission.received, fired ONLY for items that reach pending. Payload: { reviewId, listingId, rating }; review.approved — a review was published and the listing's rating average moved. Consumers that render ratings from a build-time export need this one to know to rebuild. Payload: { reviewId, listingId, rating }; review.rejected — a review that WAS published is no longer public, because it was unpublished, rejected or filed as spam. The mirror of review.approved, and the more urgent of the pair: it is what a consumer rebuilds on to take defamatory or abusive text off their site. Fired ONLY on the approved -> not-approved transition — rejecting a pending review was never public and fires nothing. Payload: { reviewId, listingId, rating }; comment.received — a page comment is waiting for moderation. Fired ONLY for items that reach pending. Payload: { commentId, path }; comment.approved — a page comment was published. A static site that renders comments rebuilds on this. Payload: { commentId, path }; comment.rejected — a page comment that WAS published is no longer public (rejected, unpublished or filed as spam). Fired ONLY on the approved -> not-approved transition; subscribe to it if you render comments, since it is what takes one down. Payload: { commentId, path }; comment.updated — the editors' reply on a currently-approved comment was set, changed or cleared. Not fired for replies on unpublished comments. Payload: { commentId, path }; listing.boosted — a listing became a premium listing, by purchase or by an operator grant. Payload: { listingId, paymentId?, amountCents?, currency? }. A listing.updated is ALWAYS fired alongside it, so a consumer already subscribed to that will rebuild without subscribing to this one; subscribe to this if you want to treat a boost specially. test.ping — only fired from the test endpoint, bypasses debounce. Unknown names are REJECTED with 400. They used to be accepted for forward-compat, but a typo then produced a webhook that looked healthy and never fired — subscribe to a new event once it exists.