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:

  1. Base defaults for the caller's context — solo defaults for independents, or the defaults of the org's type for members.
  2. 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 from PUT /my-settings/features instead.

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 fields
  • icd10_suggestions — ICD-10 suggestion widget on the documentation screen
  • staffing_offers — org staffing offers (open cases to claim)
  • earnings — org-pushed per-visit earnings screens
  • coverage_areas — coverage-area management
  • follow_ups — office follow-ups pushed by the org
  • ai_conversation — conversational form completion (text chat)
  • ai_voice — voice conversation mode
  • copy_last_visit — "copy last visit" prefill
  • credential_sync — in-app credential uploads flow back to the org's back office
  • coverage_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

  1. A clinician already using VisitNote sends an invite from the app (POST /organizations/invite) with your name and email.
  2. You receive a claim link. Opening it shows a public preview (GET /organizations/claim/:token) — no account needed to look.
  3. 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.
  4. 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

  1. 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.
  2. 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.