---
title: "Start Signup"
method: POST
path: "/signup/requests"
tags: ["signup"]
---

# Start Signup

`POST /signup/requests`

## Request

- Base URL: `https://app.zeno-works.ch` (the document declares no server; this is the origin it was published from)
- URL: `https://app.zeno-works.ch/signup/requests`
- Auth: none declared

An **agent** starts a signup for somebody with no account. Public by necessity.

The agent receives a claim token and nothing else. It cannot see the link, cannot see
whether the address is known to us, and cannot tell a refused domain from a live
request — it can only wait, exactly as it waits for a human to approve a pairing.

## Request body

- SignupRequestIn: An **agent** starting a signup for somebody who has no account yet.
  - `email` string, required
  - `client_name` string

## Response `200`

Successful Response

- SignupRequestOut: What the agent polls with. **Never carries the activation token.** That separation is the whole reason a mailed link can replace a typed code: the party that started the request holds something that can only *wait*, and the party that holds the mailbox holds the only thing that can *act*. An agent that could read the link could forward it, and we would be back at RFC 8628 §5.2.
  - `claim_token` string, required
  - `expires_at` string, date-time, required
  - `poll_interval_seconds` integer, required

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/zeno-works/apis/zeno-api.md) · [All operations](https://skmtc.dev/zeno-works/apis/zeno-api/llms.txt) · [OpenAPI document](https://skmtc.dev/zeno-works/apis/zeno-api/revisions/1eb93dde146c?raw)
