---
title: "Sign up"
method: POST
path: "/auth/signup"
---

# Sign up

`POST /auth/signup`

## Request

- Base URL: `https://app.yoping.me/api/v1`
- URL: `https://app.yoping.me/api/v1/auth/signup`
- Auth: none required

Creates an account and mails a verification link. The response is uniform whether or not the email is already registered, so it never reveals account existence. Signups are limited to 5 per IP per hour.

## Request body

- SignupRequest
  - `email` string, email, required
  - `password` string, required
  - `account_name` string: Display name for the account; defaults to the local part of the email.
  - `accept_terms` boolean, required: Must be true: explicit acceptance of the terms of service and privacy policy. Acceptance time and client IP are recorded.

## Response `200`

Success with a human-readable message.

- object: Uniform success envelope: the payload is always under `data`.
  - `data` MessageData, required
    - `message` string, required

## Other responses

- `400`: Invalid input (code `validation_failed`): malformed JSON, a missing or out-of-range field, bad pagination parameters, or a rejected token.
- `403`: Forbidden. Code `forbidden` for a cross-origin (CSRF) request blocked by origin validation or for API-key management attempted without a browser session; `account_suspended` when a suspended account attempts a mutation; `account_deleted` when an account in its deletion grace window calls a non-exempt route.
- `429`: Too many requests (code `rate_limited`). A global per-IP budget of 300 requests/minute (burst 60) applies to every endpoint; login, signup, and test alerts have tighter dedicated limits.

---

[API](https://skmtc.dev/yoping/apis/yopingme-api.md) · [All operations](https://skmtc.dev/yoping/apis/yopingme-api/llms.txt) · [OpenAPI document](https://skmtc.dev/yoping/apis/yopingme-api/revisions/76d8deb40173?raw)
