---
title: "Join the app waitlist"
method: POST
path: "/api/waitlist"
tags: ["account"]
---

# Join the app waitlist

`POST /api/waitlist`

## Request

- Base URL: `https://voltplan.app`
- URL: `https://voltplan.app/api/waitlist`
- Auth: none required

No authentication. Creates an `app_waitlist` record `{ email, platform, locale, source }` with an unauthenticated PocketBase client (`POCKETBASE_URL`); no superuser client is involved.

- An empty or malformed email answers 400 `A valid email is required`.
- A PocketBase `validation_not_unique` error on any field (unique index on email + platform) answers 200 with `isExisting: true`.
- Any other PocketBase failure answers 500 `Failed to sign up`; a non-JSON or `null` body answers 500 `Internal server error`.

## Request body

- WaitlistRequest
  - `email` string, required: Trimmed and lowercased server-side (`trim().toLowerCase()`); must then match `^[^\s@]+@[^\s@]+\.[^\s@]+$`. A non-string value is treated as missing.
  - `platform` 'android' | 'ios': Any other value is stored as android.
  - `locale` string: Truncated to 8 characters; default empty string.
  - `source` string: Truncated to 64 characters.

## Response `200`

On the waitlist (new or existing).

- union: Newly added to, or already on, the waitlist.
  - WaitlistCreatedResponse: Added to the waitlist.
    - `success` unknown, required
    - `message` 'You are on the waitlist', required
  - WaitlistExistingResponse: Already on the waitlist for this platform.
    - `success` unknown, required
    - `message` 'Already on the waitlist', required
    - `isExisting` unknown, required

## Other responses

- `400`: Email missing or malformed.
- `500`: PocketBase failed, or the body could not be read.

---

[API](https://skmtc.dev/voltplan/apis/voltplan-api.md) · [All operations](https://skmtc.dev/voltplan/apis/voltplan-api/llms.txt) · [OpenAPI document](https://skmtc.dev/voltplan/apis/voltplan-api/revisions/575b86a7af92?raw)
