auth

Start Signup

Route a freshly authenticated identity that has no MAIA account.

Rate Limited: 5 requests per minute per IP address.

Authenticated, but exempt from the terms gate — an account this new has accepted nothing, and the gate would refuse the very request that creates the account it would gate. Suspension is still enforced.

A POST rather than a side effect on the profile read: this creates an account and sends mail, which a GET must never do.

The body is optional and its default is a free signup, so the rate limit, the terms exemption and the domain rules are one route rather than two: a second paid-only route would be a second surface to gate, and the abuse gates are exactly what the paid door does not get to skip.

post/api/v1/auth/signup

Request body

intent'free' | 'paid'

What a public signup is asking for.

PAID is what a buyer arriving from the pricing page carries. It is not a funding fact — nothing is charged until checkout, and the workspace opens on the same joining grant a free signup gets — so it decides exactly one thing, and this is the one statement of it that the rest of the codebase points at rather than restates: the workspace records WorkspaceOrigin.DIRECT_PAID rather than SELF_SERVE_DISCOVERY, which is what routes the account to checkout.

It exempts nothing. Signup is unconditional, so there is no admission for a buyer to be exempt from, and every abuse gate binds either way — a verified address, the rate limits and the disposable-domain block.

It is therefore not a privilege worth stealing: everything it unlocks is reachable through the free door by anyone the paid door would admit.

Response

Successful Response

status'admitted' | 'preparing' | 'verification_required' | 'already_registered' required
account_idstring uuid nullable
intent'free' | 'paid'

What a public signup is asking for.

PAID is what a buyer arriving from the pricing page carries. It is not a funding fact — nothing is charged until checkout, and the workspace opens on the same joining grant a free signup gets — so it decides exactly one thing, and this is the one statement of it that the rest of the codebase points at rather than restates: the workspace records WorkspaceOrigin.DIRECT_PAID rather than SELF_SERVE_DISCOVERY, which is what routes the account to checkout.

It exempts nothing. Signup is unconditional, so there is no admission for a buyer to be exempt from, and every abuse gate binds either way — a verified address, the rate limits and the disposable-domain block.

It is therefore not a privilege worth stealing: everything it unlocks is reachable through the free door by anyone the paid door would admit.

Changes