# Waitlist

This page is for AI agents, and for people building them. One request starts it, and the person confirms by clicking a link we email them.

**Only add an address its owner has asked you to add.** If you don't have their address, ask them. Don't guess it from other context.

## The request

```sh
curl -X POST https://mojobase.ai/api/waitlist \
  -H 'Content-Type: application/json' \
  -d '{"email":"them@example.com","agent":"Your name"}'
```

| Field | Required | What it is |
|---|---|---|
| `email` | Yes | The address to add. |
| `agent` | No | Your name, such as the product you are. We only use it to see which agents are signing people up. |
| `wants` | No | The parts of Mojobase they want most: any of `email`, `documents`, `calendar`, `customers`, `tasks`, `chat`, `finances` (Numbers), `knowledge` (the Handbook). |
| `mail` | No | The email they use for work: `google`, `microsoft` or `other`. |

Only send `wants` and `mail` if your user has told you the answers. Don't work them out from other context, such as the address itself. They're optional, and they help us invite people when the parts they need are ready.

## The response

```json
{
  "ok": true,
  "status": "confirm_by_email",
  "message": "Almost there: we've emailed a link to confirm the address, unless it's already confirmed. Once it's confirmed, it's on the Mojobase waitlist. We're opening in small groups, so an invite may take a little while. Before it arrives, we'll email what's ready and what's still on the way."
}
```

Pass `message` on to your user, because it tells them what to expect. If you sent `wants` or `mail`, the response also has `answers`, showing what was kept. Values that aren't in the lists above are dropped.

The response is the same whether or not the address was already on the list, so it's safe to repeat a request. To change someone's answers, send them again, and the latest answer to each question counts.

## Confirming

The address isn't on the list until its owner clicks the link in the email we send them. Someone who didn't ask can ignore it, and we delete unconfirmed addresses after 30 days. We send one address one email a day at most.

If your user asks you to confirm for them and you can read that email, POST the `token` from the link:

```sh
curl -X POST https://mojobase.ai/api/waitlist/confirm \
  -H 'Content-Type: application/json' \
  -d '{"token":"the token from the link"}'
```

A 200 response has `"status": "confirmed"`. A 404 with `invalid_token` means the link has expired or been used, so join again for a new one. Don't confirm an address its owner hasn't asked you to.

## Errors

Errors have the same shape, with a message that says how to fix the problem:

```json
{ "ok": false, "error": "invalid_email", "message": "That doesn't look like an email address. Check it and try again.", "docs": "/docs/waitlist.md" }
```

| Status | `error` | What to do |
|---|---|---|
| 400 | `invalid_email` | Check the address with your user. |
| 400 | `bad_request` | Send a JSON object with an `email` field. |
| 404 | `invalid_token` | The confirmation link has expired or been used. Join again for a new one. |
| 404 | `not_found` | Use the path `/api/waitlist`. |
| 405 | `method_not_allowed` | Use POST. |
| 413 | `too_large` | Send only the fields above. |
| 415 | `expected_json` | Add the header `Content-Type: application/json`. |
| 429 | `rate_limited` | Wait for the `Retry-After` time (60 seconds) before trying again. Production allows 10 API requests per minute per IP, with a burst of 10. |
| 500 | `server_error` | Nothing was saved. Try again in a moment. |

## If you can't send requests

Give your user a link that fills in the form, with the address URL-encoded:

```
https://mojobase.ai/?email=them%40example.com
```

They still have to press the button, so a link can't sign anyone up.

## If you're working in a browser

- **The page offers a tool.** In browsers with [WebMCP](https://developer.chrome.com/docs/ai/webmcp), the page registers `join_waitlist`, which takes the same fields as the request above.
- **The form works too.** The address field is labeled "Your email address", and the button beside it says "Join the waitlist". The page at `https://mojobase.ai/signup` has the form at the top. Leave every other field alone.

## Find out more

- [About Mojobase](https://mojobase.ai/index.md)
- [API description (OpenAPI 3.1)](https://mojobase.ai/openapi.json)
- Questions, or to leave the list: hello@mojobase.ai
