Webhooks & Integrations
Get real-time notifications via webhooks, Slack, and Discord.
Overview
MakeEmWait can send real-time notifications when events happen on your waitlist. Three notification channels are available:
| Channel | Format | Setup |
|---|---|---|
| Webhook | JSON POST to your URL | Any HTTPS endpoint |
| Slack | Formatted message via incoming webhook | Slack incoming webhook URL |
| Discord | Embedded message via webhook | Discord webhook URL |
All notifications are fire-and-forget with a 5-second timeout. If a notification fails, it does not block the signup or affect the user experience.
Webhook Events
Two events are available:
| Event | Fires When |
|---|---|
signup.created |
A new person signs up for the waitlist |
referral.credited |
A referrer receives credit for a new referral |
Configure which events trigger webhooks in your waitlist settings.
Generic Webhooks
Set a webhook_url in your waitlist settings to receive JSON payloads at your own endpoint.
Setup
- Go to the Dashboard and click Edit on your waitlist
- Enter your HTTPS webhook URL
- Select which events to receive:
signup.created,referral.credited, or both
Payload Format
All webhooks are sent as POST requests with Content-Type: application/json. The top-level structure is the same for every event:
| Field | Type | Description |
|---|---|---|
event |
string | The event type (signup.created or referral.credited) |
waitlist_id |
string | The ID of the waitlist where the event occurred |
timestamp |
string | ISO 8601 timestamp of when the event fired |
data |
object | Event-specific data (see below) |
signup.created
Fires when a new person signs up for the waitlist. The data object contains the signup details:
{
"event": "signup.created",
"waitlist_id": "abc123def456",
"timestamp": "2024-01-15T10:30:00.000Z",
"data": {
"email": "user@example.com",
"first_name": "Jane",
"last_name": "Doe",
"position": 42,
"referral_token": "a1b2c3d4e5f6..."
}
}
| Field | Type | Description |
|---|---|---|
email |
string | The signup’s email address |
first_name |
string | First name (may be empty if not collected) |
last_name |
string | Last name (may be empty if not collected) |
position |
number | The signup’s position in the waitlist |
referral_token |
string | Unique referral token for this signup |
referral.credited
Fires when a referrer receives credit for bringing in a new signup. The data object contains the referrer’s updated stats:
{
"event": "referral.credited",
"waitlist_id": "abc123def456",
"timestamp": "2024-01-15T10:30:00.000Z",
"data": {
"email": "referrer@example.com",
"referral_count": 5,
"position": 3
}
}
| Field | Type | Description |
|---|---|---|
email |
string | The referrer’s email address |
referral_count |
number | Total number of successful referrals |
position |
number | The referrer’s updated position (moves up with each referral) |
URL Validation
All webhook URLs must be HTTPS. This is validated when you save your waitlist settings, not at the time the webhook fires.
Webhook URLs are also validated against SSRF (Server-Side Request Forgery). The following are blocked:
localhost,127.0.0.1,::1- Private IP ranges:
10.0.0.0/8,172.16.0.0/12,192.168.0.0/16 - Link-local addresses:
169.254.0.0/16(including cloud metadata endpoints)
If you need to test webhooks locally, use a service like webhook.site or ngrok to create a public HTTPS endpoint.
Retry Behavior
Webhook delivery is fire-and-forget with a 5-second timeout using fetch() and AbortController. There are no retries. If your webhook endpoint is down, slow, or returns an error, the event is lost. The signup still succeeds regardless of whether the webhook was delivered successfully.
If you need reliable delivery with retries, consider using a webhook relay service that queues and retries on your behalf.
Slack Integration (Pro)
Send formatted notifications to a Slack channel whenever someone joins your waitlist. Slack notifications only fire for signup.created events, not for referral.credited.
Setup
- Create an incoming webhook in your Slack workspace
- Copy the webhook URL (starts with
https://hooks.slack.com/) - Paste it into the Slack Webhook URL field in your waitlist settings
Message Format
Slack notifications are formatted using Slack Block Kit with a section block. Only signup.created events are sent to Slack – referral.credited events are not included.
The message includes:
- Email address
- Position number
- Waitlist ID
Example Slack payload:
{
"text": "New signup on waitlist abc123def456: user@example.com",
"blocks": [
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": "*New Signup* on waitlist `abc123def456`\n*Email:* user@example.com\n*Position:* #42"
}
}
]
}
Discord Integration (Pro)
Send embedded notifications to a Discord channel whenever someone joins your waitlist. Discord notifications only fire for signup.created events, not for referral.credited.
Setup
- In your Discord server, go to Server Settings > Integrations > Webhooks
- Create a new webhook and choose the target channel
- Copy the webhook URL
- Paste it into the Discord Webhook URL field in your waitlist settings
Message Format
Discord notifications are sent as rich embeds using the MakeEmWait brand color #6366f1 (indigo/purple). Only signup.created events are sent to Discord – referral.credited events are not included.
The embed includes:
- Email address
- Position number
- A timestamp
Example Discord payload:
{
"embeds": [
{
"title": "New Signup",
"description": "**Email:** user@example.com\n**Position:** #42",
"color": 6513393,
"timestamp": "2024-01-15T10:30:00.000Z"
}
]
}
The color value 6513393 is the decimal representation of #6366f1.
Webhook Authenticity
MakeEmWait webhook payloads are not signed. If you need to verify that a webhook request genuinely came from MakeEmWait, consider these approaches:
- Secret URL path — use a long, random URL path as your webhook endpoint (e.g.,
https://yoursite.com/webhooks/mew-a1b2c3d4e5f6). Anyone who doesn’t know the URL can’t send fake events. - Cross-check via API — when you receive a
signup.createdwebhook, verify the signup exists by callingGET /public/waitlists/{id}/signups/{email}/status.
Testing Webhooks
To test your webhook integration:
- Set up your webhook URL, Slack, or Discord webhook in your waitlist settings
- Submit a test signup on your waitlist
- Check that the notification arrived at your endpoint
Related
- Creating Waitlists — configure webhook URLs and events in waitlist settings
- Referral System — how referral.credited events are triggered
- Security — SSRF protection and URL validation details