---
title: "Start Registration"
method: POST
path: "/signup/registrations"
tags: ["signup"]
---

# Start Registration

`POST /signup/registrations`

## 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/registrations`
- Auth: none declared

A **browser tab** starts a registration — `/register`, or the branch inside `/authorize`.

Identical to the agent door in everything that matters, with one deliberate difference:
the row is written ``key_purpose=unspecified``, so the token this hands back can only
ever read a status. ``issue_claimed_key`` refuses ``unspecified`` outright, which means a
browser token replayed against the mint route gets a refusal rather than a credential.
That is a real guard rather than a comment — it is asserted end to end, through this
route, in `test_signup_routes.py`.

## Request body

- RegistrationStartIn: A **browser tab** starting a registration. No client name — the tab is the client.
  - `email` string, required
  - `language` 'de' | 'en' | 'fr' | 'it', nullable

## Response `200`

Successful Response

- RegistrationStartOut: **The same answer for every address**, whatever we decide about it. A new address, one that already has an account, and one at a domain the mode does not permit all get this — only the mail differs, and only the mailbox owner sees that. ``claim_token`` is always present, and that is deliberate rather than incidental: the branch where a live link is already in flight (the resend cooldown) returns a *rotated* token for that same request rather than a null, because a null would be a distinguishable answer — an oracle for "somebody started a signup for this address in the last two minutes". It reads a status and mints nothing: the row is written with ``key_purpose=unspecified``, which ``issue_claimed_key`` refuses.
  - `status` string
  - `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)
