# ROMER waitlist API

Use this to add someone to the ROMER waitlist **only when that person has asked to join**. One email per person; joining again is harmless and changes nothing.

## Endpoint

`POST https://romertrading.io/api/waitlist`

Send JSON (`Content-Type: application/json`) or a form (`application/x-www-form-urlencoded`).

| Field | Required | Notes |
|---|---|---|
| `email` | yes | The person's email address |
| `source` | no | Where the sign-up came from, e.g. `agent` |

Example:

```
curl -X POST https://romertrading.io/api/waitlist \
  -H "Content-Type: application/json" \
  -d '{"email": "trader@example.com", "source": "agent"}'
```

## Responses

- `200 {"ok": true}`: the person is on the waitlist. The reply is the same whether or not they had already joined.
- `400 {"ok": false, "error": "email"}`: the email address isn't valid.

ROMER emails people on the waitlist. There is nothing to pay and no account to create.

## MCP server

`https://romertrading.io/mcp` is an MCP server (Streamable HTTP, JSON responses, no auth, no sessions). Its server card is at https://romertrading.io/mcp/server-card.

| Tool | What it does |
|---|---|
| `search_romer` | Searches ROMER's help and comparison pages. Returns short answers, page URLs and the date each was checked |
| `get_page` | Returns one page as Markdown: `/`, `/help`, `/compare`, `/help/<slug>` or `/compare/<slug>` |
| `join_waitlist` | Adds a person to the waitlist. Only call it when they've asked to join, with their own address |

Each page is also an MCP resource (its Markdown URL).

## A2A agent

`https://romertrading.io/a2a` is an A2A agent (JSON-RPC; `SendMessage` in A2A 1.0, `message/send` in 0.3). It answers questions from the same pages and takes no actions. Agent card: https://romertrading.io/.well-known/agent-card.json.

## Discovery

- AI catalog: https://romertrading.io/.well-known/ai-catalog.json
- Agent skills: https://romertrading.io/.well-known/agent-skills/index.json
- No registration or credentials: https://romertrading.io/auth.md
