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 toggle gate 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 only two things, and this is the one statement of them that the rest of the codebase points at rather than restates:

  1. None of the free Discovery experiment's controls bind. The seat cap, the waitlist and the operator pause are that experiment's budget, and a buyer is not in it: a paid account holds no seat, so admitting one spends nothing the cap was sized to protect. Its abuse gates still bind — a verified address, the rate limits and the disposable-domain block — because those protect MAIA, not the experiment. The work-email rule is the exception: it decides who the free experiment is offered to, and refusing a buyer for paying from a personal address is a lost sale.
  2. The workspace records WorkspaceOrigin.DIRECT_PAID rather than SELF_SERVE_DISCOVERY.

It is not a privilege worth stealing: everything it unlocks is reachable through the free door by anyone the paid door would admit, except during the hours the free cohort is full or paused.

Response

Successful Response

status'admitted' | 'waitlisted' | '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 only two things, and this is the one statement of them that the rest of the codebase points at rather than restates:

  1. None of the free Discovery experiment's controls bind. The seat cap, the waitlist and the operator pause are that experiment's budget, and a buyer is not in it: a paid account holds no seat, so admitting one spends nothing the cap was sized to protect. Its abuse gates still bind — a verified address, the rate limits and the disposable-domain block — because those protect MAIA, not the experiment. The work-email rule is the exception: it decides who the free experiment is offered to, and refusing a buyer for paying from a personal address is a lost sale.
  2. The workspace records WorkspaceOrigin.DIRECT_PAID rather than SELF_SERVE_DISCOVERY.

It is not a privilege worth stealing: everything it unlocks is reachable through the free door by anyone the paid door would admit, except during the hours the free cohort is full or paused.

Changes