A multi-tenant, rate-limited, CORS-aware email waitlist API. Register a project, drop in one API call, and start collecting emails.
const res = await fetch('https://emailwaitlist.ayushojha.com/api/v1/subscribe', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-API-Key': 'wl_your_project_key'
},
body: JSON.stringify({ email: 'user@example.com' })
});
const data = await res.json();
// { "message": "Successfully joined the waitlist!" }curl -X POST https://emailwaitlist.ayushojha.com/api/v1/subscribe \
-H "Content-Type: application/json" \
-H "X-API-Key: wl_your_project_key" \
-d '{"email":"user@example.com"}'
# Response:
# {"message":"Successfully joined the waitlist!","subscriber":{...}}<form id="waitlist">
<input type="email" id="email" placeholder="you@example.com" required />
<button type="submit">Join Waitlist</button>
</form>
<script>
document.getElementById('waitlist').addEventListener('submit', async (e) => {
e.preventDefault();
const res = await fetch('https://emailwaitlist.ayushojha.com/api/v1/subscribe', {
method: 'POST',
headers: { 'Content-Type': 'application/json', 'X-API-Key': 'wl_...' },
body: JSON.stringify({ email: document.getElementById('email').value })
});
});
</script>Everything you need for email collection, nothing you don't.
Each project gets isolated API keys and subscriber lists. One instance serves all your apps.
Built-in per-IP rate limiting on subscribe endpoints prevents abuse without extra infrastructure.
Per-project allowed origins. Works seamlessly from any frontend framework or static site.
Export your entire subscriber list as CSV with one API call. Ready for Mailchimp, Resend, or a spreadsheet.
Subscriber counts by day, week, month. Track growth trends without a separate analytics tool.
Attach arbitrary JSON to each subscriber — name, referral source, plan interest, or anything else.
Add email collection to any project in under 5 minutes.
Create a project with the admin key. You'll get a unique wl_ API key.
curl -X POST /api/v1/projects \
-H "X-Admin-Key: $ADMIN_KEY" \
-d '{"name":"My App","slug":"my-app",
"allowed_origins":["https://myapp.com"]}'
One POST request from your frontend collects the email.
fetch('/api/v1/subscribe', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-API-Key': 'wl_your_key'
},
body: JSON.stringify({
email: 'user@example.com'
})
})
List subscribers, check stats, or export as CSV anytime.
# Stats
GET /api/v1/stats
# List
GET /api/v1/subscribers?limit=50
# Export
GET /api/v1/subscribers/export
Full documentation available at /docs
| Method | Endpoint | Description | Auth |
|---|---|---|---|
| POST | /api/v1/subscribe |
Collect an email address | API Key |
| GET | /api/v1/subscribers |
List subscribers (paginated) | API Key |
| GET | /api/v1/subscribers/export |
Export subscribers as CSV | API Key |
| DELETE | /api/v1/subscribers/{email} |
Remove a subscriber | API Key |
| GET | /api/v1/stats |
Subscriber growth stats | API Key |
| POST | /api/v1/projects |
Create a new project | Admin |
| GET | /api/v1/projects |
List all projects | Admin |
| GET | /health |
Health check | None |
Read the full API documentation with integration examples for React, vanilla JS, and more.
View Full Docs