# Register a practitioner

Canonical page: https://docs.ovok.com/api/tenant-authentication/register-a-practitioner

`POST /auth/tenant/Practitioner/register`

Registers a new practitioner account in a tenant and returns its tokens, so the user is signed in straight away.

**Auth:** none. The tenant is named by `tenantCode`.
**Scope:** the project that owns `tenantCode`.

## Behaviour

- The project setting `PRACTITIONER_REGISTRATION_ENABLED` must be `true`. It is off unless set.
- The new membership gets the project's default practitioner access policy: the text setting `DEFAULT_PRACTITIONER_ACCESS_POLICY`, else `CLINICIAN_INVITE_ACCESS_POLICY`. Without a valid one, nothing is created and the answer is a 409 with `error: "practitioner_registration_not_configured"`.
- An email that already has a practitioner account (a server-wide User) joins this project when the request brings that account's own password: a new practitioner profile and membership, and the password is never changed. It is refused, with nothing written, for any other password, an account with MFA on, an account that is already a practitioner here, and an email that has a patient account in any project.
- The password must have at least 12 characters, not counting spaces at either end, and must not be on Ovok's list of common and breached passwords. Any character is allowed and none is required. A refused password answers 422 with the error on `password`.
- The User, the Practitioner profile and the membership are written in one atomic step. No email is sent.
- Rate limit: 5 requests per minute per IP address.
- Error responses are delayed to take at least one second.
- A 409 with `practitioner_registration_not_configured` means the project has no practitioner registration setup.
- A 429 means more than 5 requests in a minute from your IP address.

## Example

```bash
curl -X POST 'https://api.sandbox.ovok.com/auth/tenant/Practitioner/register' \
  -H 'Content-Type: application/json' \
  -d '{
    "email": "max.mustermann@example.com",
    "password": "your-password",
    "name": "Max",
    "surname": "Mustermann",
    "tenantCode": "my-medical-project"
  }'
```
