Organization Customization
How VisitNote adapts to your organization — feature flags, terminology, form templates, and self-serve onboarding.
The model: server-driven configuration
Every organization is different. A staffing company's clinicians are paid per visit and never touch billing codes; a solo outpatient PT wants ICD-10 suggestions front and center. VisitNote resolves this on the server: the app renders whatever GET /my-organization/config says, so an admin's change takes effect for every clinician without an app update.
Configuration resolves in layers:
- Base defaults for the caller's context — solo defaults for independents, or the defaults of the org's type for members.
- Stored overrides — the org's own feature and terminology overrides, set by an admin via
PUT /my-organization/config. For solo clinicians, their personal overrides fromPUT /my-settings/featuresinstead.
The response includes source: "solo" | "organization" so clients know which regime applies. The moment a clinician takes an organization seat, the org's configuration wins and personal overrides are ignored.
Organization types and their defaults
An organization declares one of five types. The type sets sensible feature defaults; stored overrides always win on top.
- staffing_company — staffing offers, earnings, coverage areas, follow-ups, and back-office credential/coverage sync all on; billing codes off (the office is the system of record).
- home_health_agency — follow-ups on; billing codes off (the agency bills, not the clinician).
- clinic, private_practice, hospital — match solo defaults.
Solo defaults are deliberately billing-off: billing_codes and icd10_suggestions start disabled until the clinician opts in — most independents document, they don't code.
The 11 feature flags
billing_codes— CPT/ICD/HCPCS billing-code widgets and fieldsicd10_suggestions— ICD-10 suggestion widget on the documentation screenstaffing_offers— org staffing offers (open cases to claim)earnings— org-pushed per-visit earnings screenscoverage_areas— coverage-area managementfollow_ups— office follow-ups pushed by the orgai_conversation— conversational form completion (text chat)ai_voice— voice conversation modecopy_last_visit— "copy last visit" prefillcredential_sync— in-app credential uploads flow back to the org's back officecoverage_sync— in-app coverage-area edits flow back to the org's back office
credential_sync and coverage_sync are additionally forced off unless the server is actually wired to that org's back office — the app never shows a sync affordance that would silently do nothing.
Terminology
Orgs can rename core nouns — call patients "clients", call visit notes "session notes". Defaults:
{
"patient": "patient",
"visit": "visit",
"note": "visit note",
"organization": "organization"
}Org-scoped form templates
Documentation templates resolve per organization: an org can carry its own form set (its evaluation, its visit note, its discharge forms), and clinicians in that org see those forms in the app automatically. Independents get the standard discipline-specific library. Template onboarding for a new org is handled with our team during setup — contact sales.
Onboarding a new organization
There are two self-serve paths in:
1. Your clinician invites you
- A clinician already using VisitNote sends an invite from the app (
POST /organizations/invite) with your name and email. - You receive a claim link. Opening it shows a public preview (
GET /organizations/claim/:token) — no account needed to look. - You register (or log in) and claim the organization (
POST /organizations/claim). In one transaction you become the org admin, the org goes live, and the inviting clinician is seated as a member. - From there you invite the rest of your team by email (
POST /my-organization/invitations) and customize the app (PUT /my-organization/config).
2. You invite your clinicians
- Admins invite clinicians by email. New users get a deep link that creates their account and seats them on verification; existing solo users see the invitation in-app (
GET /my-invitations) and accept with one tap. - Invitations can be listed and revoked at any time, and billing is per active seat.
Quick reference
# What should this clinician's app show?
curl 'https://visitnote-api-production.up.railway.app/api/therapist/v1/my-organization/config' \
-H 'Authorization: Bearer <token>'
# Org admin: hide billing codes, rename patients to clients
curl -X PUT 'https://visitnote-api-production.up.railway.app/api/therapist/v1/my-organization/config' \
-H 'Authorization: Bearer <token>' \
-H 'Content-Type: application/json' \
-d '{"features": {"billing_codes": false},
"terminology": {"patient": "client"}}'Full endpoint reference: Organization endpoints.