Getting Started

Create a campaign and embed the waitlist widget in under 5 minutes.

Step 1 — Create an account

EarlyPass uses magic links — no password required.

  1. Go to api.earlypass.app/dashboard/login
  2. Enter your email address and click Send magic link
  3. Click the link in your email — you're in
Self-hosting? Deploy EarlyPass on your own infrastructure with Docker Compose or Kubernetes, then return here.

Step 2 — Create a campaign

A campaign is your waitlist. You can have multiple campaigns per account (e.g. one per product).

  1. In the dashboard, click New campaign
  2. Give it a name and a URL-friendly slug (e.g. my-product)
  3. Optionally set a Product URL — if set, the widget will only accept signups from that origin (CSRF protection). Leave blank to allow any origin during development.
  4. Click Create

After creation, you'll see your campaign dashboard with a live API key.

Step 3 — Embed the widget

Paste this snippet into any HTML page, replacing your-slug with your campaign slug:

<script
  src="https://api.earlypass.app/widget/widget.js"
  data-campaign="your-slug"
  async
></script>

The widget auto-injects at the location of the <script> tag. It's fully self-contained — no extra CSS imports, no npm package.

For customisation options (dark theme, accent colour, custom domain) see the Widget Reference.

Step 4 — Verify it works

  1. Open your page in a browser
  2. You should see the signup form rendered where you placed the script tag
  3. Submit a test email — you'll receive a verification email (or check the dashboard email preview in dev mode)
  4. After verifying, the widget shows your referral link and your position on the leaderboard

Return to the dashboard to see the signup appear in real time.

Step 5 — Invite your early users

When you're ready to grant access, use the Invite top N button in the dashboard. This sends personalised invite emails to your highest referrers first.

Each invite includes a unique token your product backend can verify:

GET  /api/v1/invites/{token}
     → { "status": "active", "email": "[email protected]", ... }

POST /api/v1/invites/{token}/redeem
     → marks the token redeemed (idempotent)

Next steps