API Reference
Integrate GetWaitly signups into your own forms. Works with any stack — no SDK required.
Endpoint
Request body
Send a JSON body with Content-Type: application/json.
| Field | Type | Required |
|---|---|---|
| string | required | |
| slug | string | required |
| name | string | optional |
| phone | string | optional |
| customFields | Record<string, string> | optional |
| ref | string | optional |
| source | string | optional |
| fingerprint | string | optional |
| utmSource | string | optional |
| utmMedium | string | optional |
| utmCampaign | string | optional |
| utmContent | string | optional |
| utmTerm | string | optional |
| referrer | string | optional |
Responses
All responses return HTTP 200. Use the success and type fields to determine the outcome.
Confirmed
Signup succeeded. Use the returned position and referral link on your thank-you page.
{
"success": true,
"type": "confirmed",
"position": 42,
"referralCode": "abc123defg",
"referralLink": "https://getwaitly.com/ref/abc123defg",
"unsubscribeToken": "550e8400-..."
}Pending confirmation
Email verification required. The visitor must click the link we email them before they count as confirmed.
{
"success": true,
"type": "pending_confirmation",
"email": "visitor@example.com"
}Blocked
The signup was accepted but fraud rules flagged it. Prevented from counting toward referrals or the public waitlist total.
{
"success": true,
"type": "confirmed",
"position": 1,
"referralCode": "",
"referralLink": null,
"unsubscribeToken": ""
}Error
The signup was rejected. Check the error message for the reason.
{
"success": false,
"error": "You're already on this waitlist."
}Common error messages
Invalid email address.Waitlist not found.This waitlist is paused.You're already on this waitlist.This waitlist is currently full.Too many signups from this location. Please try again later.Please use a valid email address.(disposable email)
Examples
cURL
curl -X POST https://getwaitly.com/api/join \
-H "Content-Type: application/json" \
-d '{
"email": "visitor@example.com",
"slug": "my-product",
"name": "Alex",
"source": "landing-page"
}'JavaScript (fetch)
const res = await fetch("https://getwaitly.com/api/join", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
email: "visitor@example.com",
slug: "my-product",
name: "Alex",
source: "landing-page",
ref: referralCode,
referrer: document.referrer,
utmSource: params.get("utm_source"),
utmMedium: params.get("utm_medium"),
}),
});
const data = await res.json();
if (data.success) {
window.location.href = `/thank-you?token=${data.unsubscribeToken}`;
}HTML form (your own site)
<form
action="https://getwaitly.com/api/join"
method="POST"
onsubmit="handleSubmit(event)"
>
<input type="hidden" name="slug" value="my-product" />
<input type="hidden" name="source" value="landing-page" />
<input type="email" name="email" required placeholder="Your email" />
<input type="text" name="name" placeholder="Full name (optional)" />
<button type="submit">Join the waitlist</button>
</form>
<script>
async function handleSubmit(e) {
e.preventDefault();
const form = e.target;
const body = Object.fromEntries(new FormData(form));
const res = await fetch("https://getwaitly.com/api/join", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(body),
});
const data = await res.json();
if (data.success) {
window.location.href = `/thanks?token=${data.unsubscribeToken}`;
}
}
</script>Rate limits
3 signups per IP address per waitlist per 24 hours. Beyond that, signups return the error Too many signups from this location. The IP is determined from the CF-Connecting-IP header (Cloudflare).
Referral tracking
Pass a refparameter with a subscriber's 10-character referral code. The new signup is attributed to that subscriber and they earn 10 points. Referral attribution is only enabled on paid plans (Starter and above).
You can get a subscriber's referral code from the thank-you page response (referralCode field) or from the status page. The referral link format is https://getwaitly.com/ref/{code} — visitors who click it get a cookie that carries the ref value automatically.