---
title: "Get all clinic configuration domains"
method: GET
path: "/clinic-config"
tags: ["ClinicConfig"]
---

# Get all clinic configuration domains

`GET /clinic-config`

## Request

- Base URL: `https://api.clinicos.vet/backend/business`
- URL: `https://api.clinicos.vet/backend/business/clinic-config`
- Auth: HTTP bearer
- TypeScript: <https://skmtc.dev/clinicos/apis/pawthosx-business-api-v1/docs/clinic-config/get.ts> (a function with typed inputs; its response is checked against the schema)

## Response `200`

Complete clinic configuration including all settings domains

- ClinicConfigDto: Full clinic configuration response (all domains)
  - `id` string
  - `financial` FinancialSettingsDto: Financial and pricing settings
    - `stateTaxRate` union
      - number, double
      - string, double
    - `countyTaxRate` union
      - number, double
      - string, double
    - `cityTaxRate` union
      - number, double
      - string, double
    - `quickAddServiceIds` string[], nullable
    - `xplorPayEnabled` boolean
    - `xplorPayTestMode` boolean
    - `xplorPayCredentialsConfigured` boolean: Whether XplorPay credentials are stored in AWS Secrets Manager. Use /integrations/credentials/xplorpay endpoints to manage.
    - `xplorPayTerminalApiKey` string, nullable
    - `xplorPayPayLinkApiKey` string, nullable
    - `markAsPaidTypes` string[], nullable
    - `defaultPaymentTermsDays` union: Default payment terms in days for on-account (house account) invoices when the client has no per-client terms (ITE-670). 0 = due on receipt.
      - integer
      - string, int32
    - `passProcessingFeesToClient` boolean
    - `depositAccount` string, nullable
    - `accountingMode` string, nullable
    - `taxMode` string, nullable
    - `vatStandardRate` union
      - number, double
      - string, double
    - `vatReducedRate` union
      - number, double
      - string, double
    - `discountStackingMode` string: How the price rule engine resolves multiple discounts hitting the same line (or the order): "best-wins" keeps only the largest, "stack" sums them. An individual rule may override this via `PriceRule.StackingOverride`.
    - `autoCategoryGroups` boolean: File estimate lines that would land ungrouped into automatic category groups (SmartLineGroups). Off by default.
    - `paymentMethodNotices` PaymentMethodNoticeDto[], nullable: Admin-authored notices shown when a given payment method is used at checkout. Keyed by surface (e.g. `payment.check`) so the model can extend beyond payment methods later without a migration.
      - `surfaceKey` string: Keyed surface, e.g. `payment.check`.
      - `text` string: The notice text shown to staff.
      - `severity` string: Severity ("Low" | "Normal" | "High" | "Critical").
  - `communications` CommunicationsSettingsDto: Communications and messaging settings
    - `preHistoryFormsEnabled` boolean
    - `formSendCadence` string
    - `smsEnabled` boolean
    - `defaultCallerId` string, nullable
    - `lowStockAlertsEnabled` boolean
    - `newClientNotificationsEnabled` boolean
    - `coldChainBreachAlertEnabled` boolean
    - `equipmentFailureAlertEnabled` boolean
    - `telnyxPhoneNumber` string, nullable
    - `telnyxApiKeyArn` string, nullable
    - `smsConsentEnabled` boolean
    - `smsConsentBrandName` string, nullable
    - `smsConsentUseCases` string
    - `smsFileLinkExpiryDays` union: Days a file link sent by SMS stays open (ITE-1630), 1–30.
      - integer
      - string, int32
  - `inventory` InventorySettingsDto: Inventory and pharmacy settings
    - `defaultItemMarkup` union
      - number, double
      - string, double
    - `expiryTrackingEnabled` boolean
    - `parLevelMedications` union
      - integer
      - string, int32
    - `parLevelVaccines` union
      - integer
      - string, int32
    - `parLevelSupplies` union
      - integer
      - string, int32
    - `parLevelFood` union
      - integer
      - string, int32
    - `valuationMethod` string
    - `defaultVendor` string, nullable
    - `preferredShippingMethod` string
    - `vendorAccountId` string, nullable
    - `backorderSubstitutionsEnabled` boolean
    - `vetcoveEnabled` boolean
    - `vetcoveApiKey` string, nullable: Write-only: a new Vetcove API key to store in Secrets Manager. Never returned.
    - `vetcoveApiKeyConfigured` boolean: Read-only: whether a Vetcove API key is stored.
    - `vetcoveApiKeyArn` string, nullable: Deprecated (ITE-1467): always null in responses. Clients from before ITE-1467 send the raw key here; it is treated like string? InventorySettingsDto.VetcoveApiKey.
    - `covetrusEnabled` boolean
    - `covetrusApiKey` string, nullable: Write-only: a new Covetrus API key to store in Secrets Manager. Never returned.
    - `covetrusApiKeyConfigured` boolean: Read-only: whether a Covetrus API key is stored.
    - `covetrusApiKeyArn` string, nullable: Deprecated (ITE-1467); see string? InventorySettingsDto.VetcoveApiKeyArn.
    - `transmissionMethod` string
    - `defaultOnlinePharmacy` string
    - `clientPharmacyOverridesAllowed` boolean
    - `defaultDispenseFee` union
      - number, double
      - string, double
    - `defaultDispenseUnit` string
    - `genericSubstitutionAllowed` boolean
    - `showDispenseFeesSeparately` boolean
    - `labelBranding` string, nullable
    - `multiLanguageLabelsEnabled` boolean
    - `autoLogDeaRegister` boolean
    - `mfaForControlledRx` boolean
    - `barcodeScanBeforeDispense` boolean
    - `refrigeratedMedSensors` boolean
    - `enforceVcprCheck` boolean
    - `vcprRequiredDays` union
      - integer
      - string, int32
    - `maxDispenseQuantity` union
      - number, double
      - string, double
    - `negativeInventoryMode` string, nullable: "Strict" (the default), "Warn" or "Allow" — whether a lot-tracked item may be dispensed past its stock on hand (ITE-1410). Only honoured while the NegativeInventory feature flag is on. GET always populates it; on PATCH, null leaves the stored value unchanged.
    - `overdraftSettlementMode` string, nullable: "Automatic" (the default) or "Review" — whether a receive pays off an item's overdraft lot at once, or files an overdraft-settlement approval that a person approves (ITE-1410). GET always populates it; on PATCH, null leaves the stored value unchanged.
    - `allowAppointmentDispenseWithoutWitness` boolean, nullable: When true, appointment-close dispenses of controlled drugs don't need a separate witness (see `InventorySettings.AllowAppointmentDispenseWithoutWitness`). Nullable so a PATCH that omits it keeps the stored value (null = unchanged); GET always populates it, resolving a missing stored key to true.
    - `automatedCountsEnabled` boolean
    - `countFrequency` string
    - `salesVelocityReportEnabled` boolean
  - `diagnostics` DiagnosticsSettingsDto: Diagnostics and equipment settings
    - `courierCutoffTime` string, nullable
    - `autoAttachLabResults` boolean
    - `dicomAeTitle` string, nullable
    - `dicomIp` string, nullable
    - `dicomPort` union
      - integer
      - string, int32
    - `imagingRetentionPolicy` string
    - `autoRouteImages` boolean
    - `teleradiologyVetRad` boolean
    - `teleradiologyStatRad` boolean
    - `autoSubmitStudies` boolean
    - `autoSyncWithRecords` boolean
    - `calibrationAlertsEnabled` boolean
    - `scoutDistressDetection` boolean
    - `scoutPulseCheck` boolean
    - `tempMonitoringEnabled` boolean
    - `fridgeFreezerSensors` boolean
    - `pawsTvEnabled` boolean
    - `pawsTvDefaultChannel` string, nullable
    - `criticalLabResultAlerts` boolean
    - `statCaseResultAlerts` boolean
    - `equipmentCalibrationAlerts` boolean
  - `ai` AiSettingsDto: AI feature settings
    - `modelTiers` boolean: True on every response from a Business API that reads model tiers. The web disables the tier picker when it is missing, i.e. an API from before tiers answered during a rollout (docs/ai-model-tiers.md). Ignored on requests.
    - `patientSummariesEnabled` boolean
    - `chartNotesGenerationEnabled` boolean
    - `defaultSummaryTemplate` string
    - `displayAiLabels` boolean
    - `displayConfidenceScores` boolean
    - `aiEmailResponsesEnabled` boolean
    - `publicPortalChatbotEnabled` boolean
    - `chatbotPersona` string
    - `aiLabAnalysisEnabled` boolean
    - `aiRadiologyAnalysisEnabled` boolean
    - `anonymizeForAiProcessing` boolean
    - `shareAnonymizedDataGlobalMcp` boolean
    - `requireDoctorReviewForAi` boolean
    - `ga4ClarityEnabled` boolean
    - `triageModel` AiModelConfigDto: Configuration for an AI model (provider + model ID)
      - `provider` string: AI provider: "openai" or "anthropic"
      - `modelId` string: Model identifier (e.g., "claude-sonnet-4-6", "gpt-5.4-mini"). Empty = use the infra-configured default. Model ids live in the ModelCatalog config, not hardcoded.
      - `tier` string, nullable: The clinic's tier for a tiered feature ("standard" / "premium"); null = the feature's default tier. On save it is the only field read — provider and model id are ignored and come back as the tier's model (docs/ai-model-tiers.md).
    - `assistantModel` AiModelConfigDto: Configuration for an AI model (provider + model ID)
      - `provider` string: AI provider: "openai" or "anthropic"
      - `modelId` string: Model identifier (e.g., "claude-sonnet-4-6", "gpt-5.4-mini"). Empty = use the infra-configured default. Model ids live in the ModelCatalog config, not hardcoded.
      - `tier` string, nullable: The clinic's tier for a tiered feature ("standard" / "premium"); null = the feature's default tier. On save it is the only field read — provider and model id are ignored and come back as the tier's model (docs/ai-model-tiers.md).
    - `vipModel` AiModelConfigDto: Configuration for an AI model (provider + model ID)
      - `provider` string: AI provider: "openai" or "anthropic"
      - `modelId` string: Model identifier (e.g., "claude-sonnet-4-6", "gpt-5.4-mini"). Empty = use the infra-configured default. Model ids live in the ModelCatalog config, not hardcoded.
      - `tier` string, nullable: The clinic's tier for a tiered feature ("standard" / "premium"); null = the feature's default tier. On save it is the only field read — provider and model id are ignored and come back as the tier's model (docs/ai-model-tiers.md).
    - `noteStyleInstructions` string, nullable: Practice-wide house style for AI-drafted clinical notes — wording and layout only. Empty or absent leaves note drafting exactly as it was.
    - `soapNotesModel` AiModelConfigDto: Configuration for an AI model (provider + model ID)
      - `provider` string: AI provider: "openai" or "anthropic"
      - `modelId` string: Model identifier (e.g., "claude-sonnet-4-6", "gpt-5.4-mini"). Empty = use the infra-configured default. Model ids live in the ModelCatalog config, not hardcoded.
      - `tier` string, nullable: The clinic's tier for a tiered feature ("standard" / "premium"); null = the feature's default tier. On save it is the only field read — provider and model id are ignored and come back as the tier's model (docs/ai-model-tiers.md).
    - `dischargeDocsModel` AiModelConfigDto: Configuration for an AI model (provider + model ID)
      - `provider` string: AI provider: "openai" or "anthropic"
      - `modelId` string: Model identifier (e.g., "claude-sonnet-4-6", "gpt-5.4-mini"). Empty = use the infra-configured default. Model ids live in the ModelCatalog config, not hardcoded.
      - `tier` string, nullable: The clinic's tier for a tiered feature ("standard" / "premium"); null = the feature's default tier. On save it is the only field read — provider and model id are ignored and come back as the tier's model (docs/ai-model-tiers.md).
    - `widgetChatbot` WidgetChatbotConfigDto: B.O.N.D. (Best Optimal Needs Determination) Widget Chatbot configuration
      - `enabled` boolean
      - `welcomeMessage` string, nullable
      - `schedulingEnabled` boolean
      - `medicationRefillEnabled` boolean
      - `triageEnabled` boolean
      - `intakeEnabled` boolean
      - `requireVerificationForScheduling` boolean
      - `maxConversationTurns` union
        - integer
        - string, int32
      - `autoEscalateEmergencies` boolean
      - `emergencyReferralName` string, nullable
      - `emergencyReferralPhone` string, nullable
      - `emergencyReferralAddress` string, nullable
      - `model` AiModelConfigDto: Configuration for an AI model (provider + model ID)
        - `provider` string: AI provider: "openai" or "anthropic"
        - `modelId` string: Model identifier (e.g., "claude-sonnet-4-6", "gpt-5.4-mini"). Empty = use the infra-configured default. Model ids live in the ModelCatalog config, not hardcoded.
        - `tier` string, nullable: The clinic's tier for a tiered feature ("standard" / "premium"); null = the feature's default tier. On save it is the only field read — provider and model id are ignored and come back as the tier's model (docs/ai-model-tiers.md).
  - `compliance` ComplianceSettingsDto: Compliance and data retention settings
    - `hipaaCompliance` boolean
    - `dataRetentionPolicy` string
    - `notificationRetentionDays` union: Days in-app notifications are kept before the retention sweep deletes them (ITE-347). 0 = use the sweep's configured default; negative = disable the sweep for this tenant. Null on PATCH = leave the stored value unchanged (the endpoint replaces the whole Compliance section, so omitting this must not reset the override).
      - integer
      - string, int32
    - `clinicIdentity` ClinicIdentitySettingsDto: Clinic identity disclosure block for CMA compliance.
      - `ownershipType` string, nullable: "Independent" | "Corporate" | "Group" | null.
      - `parentOrganization` string, nullable
      - `ownershipStatement` string, nullable
      - `vatRegistrationNumber` string, nullable: VAT registration number — legally required on UK invoices.
    - `publicPricingEnabled` boolean
    - `rxTransparencyEnabled` boolean
    - `estimateBeforeTreatmentEnabled` boolean
    - `requireUsdaNumberForRabiesCertificates` boolean
    - `promptNextDueAtAdministration` boolean: Show the computed next-due date — editable — while administering a vaccine (ITE-632). Defaults true so a payload from an older client that omits the key doesn't switch it off.
    - `controlledDrugRegisterEnabled` boolean
    - `antimicrobialStewardshipEnabled` boolean
    - `cascadeWorkflowEnabled` boolean
    - `vcprEnforcementEnabled` boolean
  - `clientApp` ClientAppSettingsDto: Client app payment and feature settings
    - `savedPaymentMethodsAllowed` boolean
    - `useCardOnFileAllowed` boolean
    - `sendInvoicesToApp` boolean
    - `preAuthRequired` boolean
    - `endOfVisitPaymentsAllowed` boolean
    - `clientAppNotes` string, nullable
  - `region` RegionSettingsDto: Region and locale settings for internationalization
    - `regionCode` string: BCP 47 locale code: "en-US" or "en-GB"
    - `currencyCode` string: ISO 4217 currency code: "USD" or "GBP"
    - `weightSystem` string: Weight system: "imperial" (lbs) or "metric" (kg)
    - `temperatureSystem` string: Temperature system: "fahrenheit" or "celsius"
    - `distanceSystem` string: Distance system: "miles" or "kilometers"
  - `transparencyPage` TransparencyPageSettingsDto: Admin-editable settings for the public CMA-style transparency pricing page.
    - `heroImageLogoId` string, nullable
    - `prescriptionPolicy` string, nullable
    - `outOfHoursProviderName` string, nullable
    - `outOfHoursProviderHours` string, nullable
    - `outOfHoursInitialFee` union
      - number, double
      - string, double
    - `outOfHoursPhone` string, nullable
  - `erx` ErxSettingsDto: External e-prescribing (VetHubRx) settings — the per-clinic gate only. Platform credentials are environment configuration and never appear in this DTO.
    - `vetHubRxEnabled` boolean
  - `surgery` SurgerySettingsDto: Surgery / anaesthesia settings (ITE-783). The wire contract is a plain bool, not a nullable one: the entity stores null for "never configured" so a backfilled {} section cannot read as OFF, and the controller resolves that to true on the way out. Clients therefore never see, and never have to reason about, the unconfigured state.
    - `pushLoggedDrugsToPlan` boolean: Whether logging a drug in the surgical console also posts a line to the visit's treatment plan. Default true.
  - `recordExport` RecordExportSettingsDto: Patient record export settings (ITE-1333). Like SurgerySettingsDto, the wire value is never null: the controller resolves "never configured" to newest first.
    - `defaultOrder` integer
  - `createdAt` string, date-time
  - `updatedAt` string, date-time

## Changes

- **2026-10-28** `099cf36186e0`: 39 info
  - added the optional property `ai/assistantModel/tier` to the response with the `200` status (media type: text/plain)
  - added the optional property `ai/assistantModel/tier` to the response with the `200` status (media type: application/json)
  - added the optional property `ai/assistantModel/tier` to the response with the `200` status (media type: text/json)
  - added the optional property `ai/dischargeDocsModel/tier` to the response with the `200` status (media type: text/plain)
  - …35 more
- **2026-10-21** `85ee96c0bb96`: 6 warning, 12 info
  - removed the optional property `communications/defaultEmailFooter` from the response with the `200` status (media type: text/plain)
  - removed the optional property `communications/defaultEmailFooter` from the response with the `200` status (media type: application/json)
  - removed the optional property `communications/defaultEmailFooter` from the response with the `200` status (media type: text/json)
  - removed the optional property `inventory/autoAttachDispenseToInvoice` from the response with the `200` status (media type: text/plain)
  - …14 more
- …earlier changes not shown

[Operation history](https://skmtc.dev/clinicos/apis/pawthosx-business-api-v1/changes/clinic-config/get.md)

---

[API](https://skmtc.dev/clinicos/apis/pawthosx-business-api-v1.md) - [All operations](https://skmtc.dev/clinicos/apis/pawthosx-business-api-v1/llms.txt) - [OpenAPI document](https://skmtc.dev/clinicos/apis/pawthosx-business-api-v1/revisions/099cf36186e0?raw)
