ROASFormDocs
Webhooks

Changelog

View as Markdown

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.