Skip to main content

PRACTITIONER_APP_URL

The root address of your practitioner dashboard. Ovok builds the links in practitioner emails on it: accept an invitation, set a password, reset a password.

TypeText setting
Change withPUT /v1/project/settings/values/PRACTITIONER_APP_URL
ValueAn https URL, or an app deep link such as myapp://. null removes it.
Who can change itProject admin
When unsetFalls back to the parent project, an older setting, the request's Origin (for some routes) and the platform default, in that order. Routes that cannot fall back answer 409.
Set on new projectsNot set by any project-creation route
InheritedYes, from the direct parent project, at send time. GET does not show the inherited value.

Set it​

curl --request PUT \
--url 'https://api.sandbox.ovok.com/v1/project/settings/values/PRACTITIONER_APP_URL' \
--header "Authorization: Bearer ${OVOK_TOKEN}" \
--header 'Content-Type: application/json' \
--data '{"value":"https://dashboard.example.com"}'

Ovok stores the canonical form (no trailing slash, lowercase host), so https://dashboard.example.com/ is stored as https://dashboard.example.com. The same rules, errors and gotchas as PATIENT_APP_URL apply to the value you send.

FlowLink
Practitioner invitation, password reset<app URL>/setpassword/<id>/<secret>
Invitation for someone who already has an account<app URL>/accept-invite?invite=<id>&code=<code>

With https://dashboard.example.com the invitation link is https://dashboard.example.com/setpassword/<id>/<secret>. With myapp:// it is myapp:///setpassword/<id>/<secret>.

How the address is chosen​

For a practitioner link, Ovok takes the first of these that exists:

  1. PRACTITIONER_APP_URL on the project.
  2. PRACTITIONER_APP_URL on the parent project.
  3. The older CLINICIAN_DASHBOARD_URL on the project, then on the parent.
  4. The Origin of the request, only for the flows below that allow it, and only if that origin is on the platform's allowed-origins list and is not the API's own host.
  5. The platform default, if your environment has one.

Which routes use it​

RouteUses PRACTITIONER_APP_URL?Uses the request Origin?
POST /v1/projects/me/membersYesYes
POST /auth/invite with type PractitionerYesNo
POST /v1/invites/practitioner and /acceptYesNo
Business-email sign-up (see CLINICIAN_INVITE_ON_BUSINESS_EMAIL)YesNo
POST /v2/auth/reset-passwordYes, for a practitioner who belongs to one projectYes
POST /v1/saas/registerNo: uses the platform addressYes
POST /v1/slim/invite/practitionerNoYes, otherwise the platform default

What callers see when nothing resolves​

RouteResult
POST /auth/invite, POST /v1/projects/me/members, POST /v1/invites/practitioner409 with code app_url_not_configured. Nothing is created.
POST /v1/saas/register409, before anything is written
POST /v2/auth/reset-passwordThe call succeeds; the email can go out without a usable link.

Gotchas​

  • POST /v1/slim/invite/practitioner ignores this setting. Its link points at the app that made the request, or the platform default when the request has no Origin. A call from your server therefore does not produce a link to your dashboard. Prefer POST /v1/projects/me/members if you need the configured address.
  • A practitioner in several projects gets the platform address for password resets, never one project's URL, because no single project's admins may choose where that link goes.
  • The Origin fallback is for convenience in browser apps. It is never used for a link sent to a different audience, and it is ignored unless the origin is on the allowed list. Do not depend on it in production; set the URL.
  • GET shows only this project's stored value. An inherited URL appears as null.
  • Password resets never fail on a missing URL. Set the address before you rely on resets.
  • You edit only your own project. A parent admin cannot set a child's URL.