Webhooks logo

Fan event sign-ups out to your own services

One POST per RSVP writes the attendee to your database and publishes a message the rest of your services can listen for.

When this happens

New submission on your event registration form

Do this

POST the registrant JSON to an endpoint that writes to your attendee database and publishes a message to your internal event bus

One-directional. A submission triggers the action — nothing is written back into your form.

An events team running its own tooling has more than one thing to do with an RSVP: record the attendee, count the catering, tell the badge printer, send a confirmation. Doing that through four separate integrations means four places to fix when the form changes.

One webhook is easier to reason about. The endpoint writes the attendee row, then publishes a message on your internal bus, and every downstream service subscribes to that rather than to the form. Adding a service later needs no change to the form at all.

Setting it up

  1. 1

    Publish the registration form and keep Ticket Type a select whose option names match the ticket classes your attendee database already uses.

  2. 2

    Add a POST route — /webhooks/rsvp — that accepts JSON, and settle now that it writes the row before it publishes anything.

  3. 3

    Enable the outgoing webhook in the form's settings, paste the route URL, and save the form.

  4. 4

    Send one test RSVP and log the body, checking the keys for Ticket Type, Number of Additional Guests and Dietary Restrictions.

  5. 5

    Insert the attendee row in a transaction keyed on Email Address, so a re-submitted RSVP updates the booking rather than adding a second seat.

  6. 6

    Cast Number of Additional Guests to an integer and add it to the head count in the same transaction, so catering numbers never drift from the attendee table.

  7. 7

    Publish an attendee.registered message after the commit, carrying the attendee id rather than the whole payload, so subscribers read a row they can trust.

  8. 8

    Return 2xx only once the publish is acknowledged; a non-2xx tells you the RSVP needs replaying instead of leaving a silent gap in the list.

What maps where

Using the Event Registration Form as the starting point. These are its real fields — swap in your own and the mapping works the same way.

Form fieldWebhooks
Full Nameattendee name on the new row
Email Addressunique key on the attendee table
Ticket Typeticket class on the attendee row
Number of Additional Guestshead count, added in the same transaction
Dietary Restrictionscatering field on the attendee row
Accessibility Requirementsaccessibility note passed to the venue

Variations worth knowing

Publish one message per downstream job

Instead of a single attendee.registered event, emit catering.updated and badge.requested from the same handler. Subscribers stay narrow, and a failure in badge printing does not retry the catering count. It costs you more topics, and it earns its keep once more than two services care about an RSVP.

Keep accessibility notes off the general bus

Accessibility Requirements and Dietary Restrictions describe a person, not a booking. Write them to the attendee row and give the venue a scoped read rather than broadcasting them to every subscriber. The published message carries the attendee id, so a service that genuinely needs them can ask.

If something isn't arriving

Head counts are higher than the number of attendees.

Number of Additional Guests is being added on every delivery, repeats included. Make the write idempotent — key it on the submission id, or on Email Address with an update on conflict — because nothing is written back to the form to mark an RSVP as already counted.

Downstream services act on an attendee that does not exist yet.

The message is published before the transaction commits, so a subscriber reads the row a moment too early. Publish after the commit, or write to an outbox table inside the same transaction and let a poller drain it, which keeps the row and the message in step.

Frequently asked questions

Can attendees change their RSVP later?

They can submit the form again, and your handler decides what that means. Keying the attendee row on Email Address with an update on conflict turns a second RSVP into an edit. Nothing is written back into the form, so their earlier answers are not shown to them.

Why publish a message instead of calling each service from the handler?

Calling them directly makes the RSVP handler responsible for every downstream failure, and the delivery status starts reflecting whether your badge printer is awake. A message keeps the handler's job small: write the row, announce it, return 2xx.

Do I need a separate webhook for each event I run?

Only if each event has its own form. One form per event gives each its own webhook URL and keeps the attendee tables apart. A single form works too — add a question naming the event and route on that answer inside the handler.

Related automations

Build the form first

The automation needs somewhere to fire from. Publish a form, connect it once, and every submission from then on runs this flow.

Start free