---
title: "Email + password sign-up"
method: POST
path: "/auth/signup"
tags: ["Auth"]
---

# Email + password sign-up

`POST /auth/signup`

## Request

- Base URL: `https://api.apphandoff.com/api`
- URL: `https://api.apphandoff.com/api/auth/signup`
- Auth: none required

Admin `generateLink` (signup) + Mailgun confirmation email. Validates browser Origin, rate-limits by IP.
Existing-email cases return the same opaque success as new signups.

## Request body

- object
  - `email` string, email, required
  - `password` string, required
  - `name` string
  - `callback_origin` string

## Response `200`

Signup initiated — check email to confirm

- object
  - `ok` true, required
  - `message` string

## Other responses

- `400`: Invalid request
- `403`: Forbidden
- `429`: Rate limited
- `502`: Supabase or Mailgun failure

---

[API](https://skmtc.dev/apphandoff/apis/apphandoff-api.md) · [All operations](https://skmtc.dev/apphandoff/apis/apphandoff-api/llms.txt) · [OpenAPI document](https://skmtc.dev/apphandoff/apis/apphandoff-api/revisions/9f138fe46d56?raw)
