# Changelog

> Every change to the webhook contract and delivery behavior, newest first.

---
title: Changelog
description: Every change to the webhook contract and delivery behavior, newest first.
---

We announce every payload and behavior change here before or as it ships. Additions never change the `webhookVersion`; removals or renames only happen with a new version, announced with a migration period.

## 2026-07-29

- **`markAbandonedAfterSeconds` is now always a number.** Forms using the default idle window deliver `60` instead of `null`.

- **Renamed the `partial_lead` reason values** to `browser_detection` and `server_detection` (previously `client_signal` / `backstop_cron`).

- **Removed `lead.score`.** Score belongs to a submission, not to the person — a lead can go through several forms. Use `submission.score`.

- **Removed the payload size limit.** The `answers` array is always delivered in full; the `answersTruncated` flag no longer exists.
- **Answers arrive in a guaranteed order.** The `answers` array is now always ordered by when each question was answered.
- **`form_step` always includes the submission.** Previously, forms using the server-driven flow could deliver `form_step` with `submission: null`. Every `form_step` now carries the full submission object.
- **Deleted endings no longer break routing.** If an ending is deleted in the builder after submissions completed, `submission.ending` now falls back to the values saved with the submission (`id` is `null`, `name` and `type` remain) instead of becoming `null`. `ending.id` is documented as nullable for this reason.
- **`appointment.bookingTags` is always an array.** Bookings without configured tags now deliver `[]` instead of `null`.
- **The abandon safety net works without a CRM.** `partial_lead` with `reason: "server_detection"` now also fires for subaccounts that have webhooks but no CRM integration, so abandons whose browser signal was lost (for example mobile tab closes) are still delivered.
- **Docs corrected for `form_step`.** The event fires when contact details are captured (email or phone), at most a couple of times per submission — not on every question step. Both `form_step` and `partial_lead` also require the form's partial capture setting to be enabled.

## 2026-07-01

- Initial webhook contract: five events (`completed_lead`, `form_submission`, `booked_call`, `partial_lead`, `form_step`), signed deliveries, per-webhook version pinning, at-least-once delivery with retries.
