---
title: "Join the Cotal Cloud (hosted mesh) waitlist"
method: POST
path: "/v1/waitlist"
tags: ["intake"]
---

# Join the Cotal Cloud (hosted mesh) waitlist

`POST /v1/waitlist`

## Request

- Base URL: `https://cotal.ai`
- URL: `https://cotal.ai/v1/waitlist`
- Auth: none declared

Open intake, idempotent per email: repeat POSTs upsert the optional fields (one row per email). Supports `X-Sandbox`; `Idempotency-Key` is accepted and ignored because the email already is the key.

## Headers

- `Idempotency-Key` string
- `X-Sandbox` 'true' | 'false'

## Request body

- WaitlistInput
  - `email` string, email, required: Required. One row per email (upsert).
  - `linkedin` string: Optional profile URL.
  - `useCase` string: Optional: what they want the hosted mesh for.
  - `source` string: Page path the form was submitted from.

## Response `200`

On the list (idempotent).

- Ok
  - `ok` true, required
  - `sandbox` boolean: Present and true on X-Sandbox dry runs.

## Other responses

- `400`: Malformed body or validation error (`code`: bad_request | validation_error).
- `413`: Body over the size cap (`code`: payload_too_large).
- `429`: Rate limited (`code`: rate_limited). Retry after `Retry-After` seconds.
- `502`: Transient storage failure (`code`: storage_error). Safe to retry with the same Idempotency-Key.
- `default`: Any other failure. The body is always the Error object, with a stable `code` and a `hint`.

---

[API](https://skmtc.dev/cotal/apis/cotal-ai-public-api.md) · [All operations](https://skmtc.dev/cotal/apis/cotal-ai-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/cotal/apis/cotal-ai-public-api/revisions/34ab992f2172?raw)
