What a jurisdiction contains
TheJurisdiction DTO (jurisdiction.dto.ts) defines the full set of per-jurisdiction configuration:
Identity and URLs
Identity and URLs
name— the jurisdiction’s display name (required, max 256 characters)publicUrl— the base URL of this jurisdiction’s public-facing portalemailFromAddress— the sender address used for all outgoing emails from this jurisdictionnotificationsSignUpUrl— optional link to a notifications sign-up page (e.g., GovDelivery)
Languages and translations
Languages and translations
Each jurisdiction specifies which languages it supports via the
languages array (LanguagesEnum values, e.g., en, es, zh, vi, tl). The TranslationService uses this to serve the correct locale for public portal content. Translations can be defined generically (shared across jurisdictions) or overridden per-jurisdiction.Feature flags
Feature flags
The
featureFlags array holds FeatureFlag records linked to the jurisdiction. Each flag has a name (matching FeatureFlagEnum) and an active boolean. Features that are absent from the array default to their off state. Feature flag evaluation is performed by doJurisdictionHaveFeatureFlagSet() at runtime.Listing configuration
Listing configuration
requiredListingFields— list of field names that must be filled before a listing can be publishedminimumListingPublishImagesRequired— minimum number of images required to publishlistingApprovalPermissions—UserRoleEnumarray defining which roles can approve listingsduplicateListingPermissions—UserRoleEnumarray defining which roles can duplicate listingslistingFeaturesConfiguration— structured configuration of which listing feature sections are visiblevisibleNeighborhoodAmenities— whichNeighborhoodAmenitiesEnumvalues are shown in listings
Application configuration
Application configuration
visibleAccessibilityPriorityTypes— which accessibility priority types are shown on applicationsvisibleSpokenLanguages— which spoken language options appear in demographics (requiresenableSpokenLanguageflag)raceEthnicityConfiguration— structured configuration for race/ethnicity question optionsallowSingleUseCodeLogin— whentrue, allows login via single-use code (magic link) for this jurisdictionenableGeocodingPreferences— enables address geocoding for preference verification (also a direct boolean field on the DTO, mirroring the feature flag)enableGeocodingRadiusMethod— enables radius-based geocoding for preference verificationenablePartnerDemographics— includes demographics in partner exportsenablePartnerSettings— shows the Settings tab in the Partners Portal
Content defaults
Content defaults
rentalAssistanceDefault— default rental assistance text shown on listingswhatToExpect— default “what to expect” body text shown on listingswhatToExpectAdditionalText— extended “what to expect” text (requiresenableWhatToExpectAdditionalFieldflag)whatToExpectUnderConstruction— text shown for listings that are under constructionreferralSummaryDefault— default summary text for referral-type application methodspartnerTerms— terms and conditions text presented to partners on sign-upregions— list of configurable region names available for listings
Multiselect questions
Multiselect questions
multiselectQuestions links the jurisdiction to the set of preferences and programs available for listing configuration. These are referenced by ID and resolve to full MultiselectQuestion records at query time.Multi-jurisdiction support
A single Bloom installation can serve multiple jurisdictions from one database and one API. Each listing, application, and user account is associated with a specific jurisdiction. When a request arrives, the API resolves the relevant jurisdiction through:- The
jurisdictionIdon the listing or application being accessed - The
jurisdictionfilter on listing queries - The
jurisdictionNameorjurisdictionIdpath parameter on jurisdiction-specific endpoints
Feature flags
Feature flags are the primary mechanism for enabling or disabling functionality per jurisdiction. They are stored asFeatureFlag records and evaluated at runtime.
The
FeatureFlagEnum in feature-flags-enum.ts is a reference list to keep backend and frontend in sync. Flags are stored as strings in the database, so new flags can be added without schema migrations.Authentication
Authentication
| Flag | Effect |
|---|---|
enableSingleUseCode | Allows login to this jurisdiction using single-use code (magic link) flow |
disableJurisdictionalAdmin | Prevents jurisdictional admin accounts from being created |
enableSupportAdmin | Allows support admin accounts to be created |
Listings
Listings
| Flag | Effect |
|---|---|
disableCommonApplication | Removes the digital Common Application as an option for listings |
disableBuildingSelectionCriteria | Hides building selection criteria from listings |
disableListingPreferences | Removes the preferences section from listings |
enableGeocodingPreferences | Enables geocoding-based verification for listing preferences |
enableGeocodingRadiusMethod | Enables radius-based geocoding for preference eligibility |
enableHomeType | Enables the home type field on listings |
enableIsVerified | Allows listings to be manually verified |
enableMarketingStatus | Shows marketing status section (coming soon) in listing form |
enableNonRegulatedListings | Enables non-regulated listing type |
enableProperties | Enables the properties feature for grouping listings |
enableRegions | Enables region assignment for listings |
enableUnitGroups | Uses unit groups instead of individual units on listings |
enableListingFavoriting | Shows a Favorite button on public listing cards |
enableListingOpportunity | Sends a GovDelivery email alert when new listings are published |
enableSection8Question | Shows Section 8 acceptance data on listings |
hideCloseListingButton | Hides the manual close button in the listing edit form |
Applications
Applications
| Flag | Effect |
|---|---|
disableEthnicityQuestion | Hides the ethnicity question from application demographics |
disableWorkInRegion | Removes the “Work in Region” question from applications |
enableApplicationStatus | Enables applicant-facing application status tracking |
enableFullTimeStudentQuestion | Shows the full-time student question on applications |
enablePartnerDemographics | Includes demographic data in partner exports |
enableVerifyIncome | Validates reported income against AMI limits on submission |
enableSpokenLanguage | Shows a spoken language question in application demographics |
enablePartnerSettings | Shows the Settings tab in the Partners Portal |
Lottery and waitlist
Lottery and waitlist
| Flag | Effect |
|---|---|
enableWaitlistLottery | Enables lotteries for waitlist-type listings |
enableWaitlistAdditionalFields | Shows additional fields in the waitlist section of the listing form |
enableV2MSQ | Activates the new multiselect question logic for lottery preference ranking |
Creating and managing jurisdictions
Jurisdictions are managed by system administrators. The Partners Portal exposes jurisdiction management for admin-level users.Create a jurisdiction
Send a
POST /jurisdictions request with a JurisdictionCreate payload. Required fields include name, publicUrl, emailFromAddress, languages, whatToExpect, whatToExpectAdditionalText, whatToExpectUnderConstruction, rentalAssistanceDefault, listingApprovalPermissions, duplicateListingPermissions, multiselectQuestions, requiredListingFields, regions, visibleNeighborhoodAmenities, visibleAccessibilityPriorityTypes, and visibleSpokenLanguages.Configure feature flags
After creation, add
FeatureFlag records linked to the jurisdiction to enable or disable platform features. Feature flags can be managed via the jurisdiction update endpoint.Set up translations
Configure the
languages array on the jurisdiction to match the locales you want to support. Add translation records for any jurisdiction-specific content overrides.Jurisdiction service internals
TheJurisdictionService (jurisdiction.service.ts) always fetches jurisdiction records with the featureFlags and multiselectQuestions relations included. Lookups can be performed by either jurisdictionId (UUID) or jurisdictionName (string). The service throws a NotFoundException if no matching jurisdiction is found and a BadRequestException if neither identifier is provided.
API endpoints
| Method | Path | Description |
|---|---|---|
GET | /jurisdictions | List all jurisdictions (includes feature flags and multiselect questions) |
GET | /jurisdictions/:jurisdictionId | Get a jurisdiction by UUID |
GET | /jurisdictions/byName/:jurisdictionName | Get a jurisdiction by name |
POST | /jurisdictions | Create a new jurisdiction |
PUT | /jurisdictions/:jurisdictionId | Update a jurisdiction by UUID |
DELETE | /jurisdictions | Delete a jurisdiction by ID (passed in request body) |