1
Register
email and password are required. locale accepts any live
language (en, es, de, nl, it, fr, pt) and sets the language of
the account’s emails; it defaults to en.The password is checked against Hi-Doctor’s strength rules and is rejected
with 400 if it is too weak.This returns
200, not 201 — no account exists yet. The registration
is held pending until the emailed code is verified.Registering over an active, privileged, or Google-backed account is
refused by design: accepting an OTP for it would be an account-takeover
path. Only an inactive, unverified password signup can be resumed, and that
reissues a code rather than creating a duplicate.
2
Verify the emailed code
A one-time code is emailed to the address. The account cannot sign in
until it is verified — attempting to do so returns Ask the person for the code and pass it straight through. Both fields are
required; omitting either returns
401.error_name: "VERIFY_EMAIL_INVALID_REQUEST".3
Sign in
access and refresh token pair. From here, follow
Authentication.Complete the profile
Checkout requires a complete profile. If anything is missing it refuses with:Google accounts
POST /v1/users/google-login/ signs in or signs up with a Google credential.
Forgotten passwords
POST /v1/users/forgot-password/ emails a reset link; POST /v1/users/reset-password/
sets the new password from the token in that email. Both are unauthenticated.
What a chat interface should know
- You cannot skip verification. There is no way to activate an account without the emailed code.
- There is no resend-code endpoint. If a code is lost or expires, the person registers again with the same address, which resumes the pending signup and reissues a code — subject to an email cooldown. A throttled retry deliberately does not invalidate the code already in their inbox, so tell them to check for the earlier email rather than promising a new one.
- Some failures are permanent. A
406(REGISTRATION_EMAIL_UNDELIVERABLE) means that address can never receive mail from Hi-Doctor. Ask for a different one instead of retrying. - Never store the password. Exchange it for tokens once and keep the
tokens; refresh with
/v1/users/token/refresh/. - For an AI assistant, prefer the MCP connector. It now handles signup too — a patient with no account can create one, verify the emailed code and approve without ever leaving the connector, and your application never handles their password. Use this API directly only when you are not going through MCP.