Building a SaaS?Check out our starter kit  

Build your wait list with one line of code"", {email: email, data: {}});

Sign in to claim your domain

We only store subscribers from claimed domains.
You can only access subscribers from domains you claimed.

Start within seconds


Create your account

So we can make sure only you have access to your subscribers.


Claim your domain

We only accept requests from claimed domains.


Start sending requests

Check out quick start or the docs to get started.

Quick Start

This is a minimal example including a component using react and axios.

You should end up with this.

Join the wait list

Of course you can use whatever http client or framwork you want. As long as you can send post requests, you got all you need.

  import axios from "axios";
  import { useRef, useState } from "react";
  export default function WaitList() {
  const emailRef = useRef();
  const [showSuccessMessage, setShowSuccessMessage] = useState(false);

  async function handleClick(e) {
    e.preventDefault();"", { email: emailRef.current.value })
      .then(data => setShowSuccessMessage(true));

  return (
    <div className="bg-orange-600 p-3 rounded-2xl mx-auto max-w-lg" >
      <h3 className="text-3xl font-bold text-white pb-4 text-center ">Join the wait list</h3>
      <form className="flex gap-2">
        <input type="email" ref={emailRef} className="w-full bg-orange-700 border border-orange-500 rounded-sm px-4 h-12 py-4 mb-2 text-white placeholder-orange-400" placeholder="Your best email…" />
        <button onClick={handleClick} className="inline-flex items-center justify-center font-bold w-36 rounded-sm text-orange-600 h-12 bg-orange-100 hover:bg-white shadow">Join</button>
      <p className={`${showSuccessMessage ? "block" : "hidden"} text-left  opacity-85 text-sm`} >Thanks for subscribing!</p>


The endpoint is accepting POST requests under:

A valid request has the following form:

    "email": "",
    "data": "{"newsletter": true}",
    "localhostDomain": "[localhost]-JuStTeStiNg"

Request parameters

  • email (required)

    The email address of the user joining your wait list.

  • data (optional)

    Optional field for whatever data you want to store regarding your subscriber.

    Accepts any json object.

  • localhostDomain (optional)

    Solely for debugging purposes on localhost. See testing from localhost.

Succesful Responses

  • 200 OK

    No Body. Everything worked as expected.

Error Responses

Error responses are formatted like this.

  "type": "",
  "title": "One or more validation errors occurred.",
  "status": 404,
  "instance": "/api/join",
  "traceId": "0HN1--VV1:00000005",
  "errors": [
      "name": "generalErrors",
      "reason": "Wait list for domain 'xD' not found. Claim the domain first on",
      "code": "JoinWaitList.DomainNotFound"


  • JoinWaitList.DomainNotFound

    Domain has not been found. The domain is automatically read from the origin of the request. Try claiming the domain.

  • JoinWaitList.NoLocalhost

    Requests from localhost are not accepted. If you run into this while testing locally, check out testing from localhost

Testing from localhost

We dont accept join requests from localhost.

If you want to test locally you can

  1. 1) Claim a domain with the [localhost]- prefix. E.g "[localhost]-mytest".
  2. 2) Send a request to api/join using the optional localhostDomain parameter.

Waitlists with the [localhost]- prefix will be deleted once a day.