# Initial setup ```mermaid --- Service lifecycle --- stateDiagram-v2 uninit : Awaiting setup inservice : In service [*] --> uninit uninit --> inservice : POST /api/setup inservice --> [*] ``` New instances of this service require an initial setup step before they can fully enter service. This setup is performed online, via the API endpoints in this section. ## Requests before setup completed Before the service is set up, all API endpoints, other than those specifically documented as exceptions, will return a status of `503 Service Unavailable` to all requests. Initial setup can be completed only once. ## `POST /api/setup` Initial setup performs the following tasks: - Create the first user for the service. This is the only user that does not require an [invitation](./invitations.md). **This endpoint does not require an `identity` cookie.** **This endpoint can be called before initial setup.** ### Request ```json { "name": "example username", "password": "the plaintext password" } ``` The request must have the following fields: | Field | Type | Description | | :--------- | :----- | :------------------------------------------- | | `name` | string | The initial login's name. | | `password` | string | The initial login's password, in plain text. | The proposed `name` must be valid. The precise definition of valid is still up in the air, but, at minimum: - It must be non-empty. - It must not be "too long." (Currently, 64 characters is too long.) - It must begin with a printing character. - It must end with a printing character. - It must not contain runs of multiple whitespace characters. ### Success This endpoint will respond with a status of `204 No Content` when successful. The response will include a `Set-Cookie` header for the `identity` cookie, providing the client with a newly-minted identity token associated with the initial user created for this request. See the [authentication](./authentication) section for details on how this cookie may be used. The cookie will expire if it is not used regularly. ### Name not valid This endpoint will respond with a status of `400 Bad Request` if the proposed `name` is not valid. ### Setup previously completed Once completed, this operation cannot be performed a second time. Subsequent requests to this endpoint will respond with a status of `409 Conflict`.