BitelioBitelio

Waitlist with confirmation email

Record each signup as an event, keep every joiner as a contact, and send them a confirmation without lifting a finger

There's no simpler Bitelio setup than a waitlist: your app tracks one event, one workflow reacts to it, and one email goes out.

Setup

Create the confirmation template

Go to Templates → New template and build a Marketing template. Wherever you want contact data to appear, drop in a {{variable}} placeholder:

Subject: You're on the list, {{firstName}}

Hi {{firstName}}, thanks for joining the {{product}} waitlist.
We'll let you know as soon as your spot opens up.

Track the signup from your backend

When the form is submitted, hit POST /v1/track from your server. This must use a secret key (sk_*), so keep the call out of browser code entirely.

curl https://api.bitelio.com/v1/track \
  -H "Authorization: Bearer sk_your_secret_key" \
  -H "Content-Type: application/json" \
  -d '{
    "event": "waitlist.joined",
    "email": "ada@example.com",
    "data": { "firstName": "Ada", "product": "Beta" }
  }'

One request does two things: it upserts the contact (subscribed unless you say otherwise) and logs a waitlist.joined event against them. Every key inside data is written onto the contact, so the template can read it back as {{firstName}}, {{product}}, and so on.

Pick a stable event name

Once a workflow has run even once, its trigger event is locked in permanently. Choose a namespaced name like waitlist.joined instead of a generic one you might later want for something else.

Create the workflow

Under Workflows → New workflow:

  • Trigger: EVENT on waitlist.joined
  • Add a SEND_EMAIL step pointing at the template from step 1

Flip the workflow on. New workflows start disabled, and a disabled workflow never triggers — no matter how many events arrive.

Tagging signups for later

To make waitlist members easy to segment down the road, insert an UPDATE_CONTACT step ahead of the email:

{ "stage": "waitlist", "waitlistSource": "{{event.referrer}}" }

Now a segment on stage == "waitlist" gives you a clean audience for follow-up campaigns — a tidier approach than segmenting on whether waitlist.joined was ever fired.

What's next