Skip to content

Data Model Reference

Fundraising Settings#

The Hierarchy Custom Setting backing every configurable behavior in the package — Stripe routing, receipts, dunning, event defaults, and more.

custom · 97 fields · Platform & Settings

Why it exists#

Settings__c is a Hierarchy Custom Setting, not a regular object — it resolves org-wide defaults with optional profile- or user-level overrides, and (unlike a normal __c record) is readable without an explicit query or FLS check, which is why it's safe to read from guest-user Experience Cloud contexts. It's never queried directly in Apex; everything goes through SettingsService's typed accessors, and it's never written directly either — the setup screens (SetupController) are the only supported way to change it. With 70 fields covering everything from Stripe named-credential routing to receipt email templates to recurring-dunning retry intervals, it's the single place every other feature in the package looks for configuration instead of hardcoding a default.

For what each admin-facing setting actually does when you change it — immediate, next scheduled run, new-records-only, or (for a few) no effect yet — see the Settings console reference.

Relationships#

No lookup/master-detail relationships to or from this object.

Fields#

Field Label Type Notes
Allow_Company_Match__c Allow_Company_Match Checkbox Default corporate-matching prompt setting for new campaigns. Individual campaigns can override this.
Allow_Tribute__c Allow_Tribute Checkbox Turn this off to switch tribute gifts off everywhere at once — no campaign will show the "in honor of / in memory of" section and no honoree e-cards will be sent. Leave it on to let each campaign decide for itself.
Docs: This was a write-once seed for new campaigns until 2026-08-07, when it became a real master switch (gap-audit-2026-08-07 §2.1 — an org had no way to stop honoree e-cards without editing every campaign). Because the field defaults to FALSE, that change would have turned tributes off on upgrade for orgs that never touched it, so PostInstallHandler. adoptTributeMasterSwitch flips it to true when any campaign is visibly using tributes. Enforced in CampaignService (masks the campaign payload) and DonationService (refuses the capture); see SettingsService.tributeEnabled for why both are needed.
Allowed_Embed_Origins__c Allowed Embed Origins TextArea One origin per line or comma-separated, e.g. https://www.acme.org. Include scheme; no trailing slash.
Docs: Parsed by SettingsService.allowedEmbedOrigins() into a normalized (lower-cased, no trailing slash, scheme+host only) set, used as the CORS allowlist by the guest EmbedConfigResource. An empty value means no external origin may load the embed widget, not that all are allowed.
Auto_Receipt_Enabled__c Auto_Receipt_Enabled Checkbox When on, a receipt email is sent automatically as soon as a donation closes. Turn off to send receipts manually.
Brand_Primary_Color__c Email Brand Color (hex) Text Hex color (e.g. #25465f) used for the email letterhead, footer bar, and default buttons. Leave blank to use the built-in slate.
Docs: Hex color used only for transactional email chrome (letterhead, footer, buttons) via SettingsService.emailBrandColor(); a separate concern from Campaign_Design__c.Primary_Color__c, which brands the public donation page. Falls back to the Ember brand coral when blank.
Company_Match_Followup_Days__c Company Match Follow-up Days Number How many days staff have to chase an employer match before the follow-up task is due. Leave blank to use 3 days.
Docs: 3 days rather than same-day because a match request usually needs the donor's employer portal details, which staff rarely have on the day the gift lands; a task due the moment it is created reads as overdue immediately and trains people to ignore the list.
Company_Match_Task_Owner_Id__c Company Match Task Owner Id Text The 18-character Salesforce User Id of the person who chases employer matches. Leave blank and each follow-up task goes to the owner of the campaign the gift came in on, which is the right answer for most organizations.
Docs: A Text field rather than a lookup because Custom Settings cannot hold relationship fields — this is the platform's constraint, not a design preference, and it is why CompanyMatchService validates the Id against an active User before using it instead of trusting the stored value. Storing a User Id in config is not the "no hardcoded Ids" violation the security checklist targets: the value is admin-entered per org, never shipped in source.
Contact_Email__c Contact Email Email The address donors should write to when they have a question before giving.
Docs: Read through SettingsService.contactEmail(), never Settings__c.getInstance() directly. Deliberately separate from Reply_To_Email__c: that one is a transactional sender identity, this one is published on a public page for humans to write to.
Contact_Hours__c Contact Hours Text When someone will actually answer. Setting expectations here reduces unanswered calls.
Docs: Free text rather than structured hours on purpose — orgs describe availability in wildly different ways and no parser consumes this; it is printed verbatim in the contact band. No per-campaign override exists: hours are an org fact.
Data_Retention_Days__c Data Retention (Days) Number How many days of diagnostic logs, Stripe call logs, and completed checkout records to keep before they are automatically and permanently deleted, e.g. 90. Lower this to reduce data storage; raise it to keep history longer.
Debug_Logging__c Debug_Logging Checkbox Turns on extra System.debug() output for troubleshooting. Does not control what is saved to the Log object — see Log Level for that.
Docs: Legacy flag: controls only the AppLogger System.debug() console echo. It does NOT gate Log__c persistence any more; that is Log_Level__c's job. Keep both in mind when a Log__c record is expected but missing: check Log_Level__c, not this field.
Default_Campaign_Type__c Default_Campaign_Type Text Pick the Campaign Type new fundraisers should be created with — this is the field standard Salesforce campaign reports group by. Many organizations add their own "Fundraising" or "Appeal" value first. Leave blank to keep whatever default your org already set.
Docs: Deliberately Text, not a picklist: Campaign.Type is a STANDARD picklist whose values are org-specific, and a packaged picklist could not offer the value a subscriber actually uses. The Settings console renders the org's live Campaign.Type entries with the getPicklistValues wire adapter instead, and SettingsService.defaultCampaignType() re-checks the stored value against the live describe before it is applied, so a value later removed from the picklist degrades to "leave the org default alone" rather than failing the create. Seeded to 'Other' on fresh install by PostInstallHandler (never on upgrade). Applied by FundraiserAdminController.CreateFundraiser only — an existing campaign's Type is never rewritten by an edit.
Default_Currency__c Default_Currency Text Three-letter ISO currency code, e.g. USD, EUR, GBP.
Docs: Single source of truth for BOTH the currency symbol shown to donors and the ISO code Stripe is charged in (SettingsService.currencyCodeForGateway() lower-cases it for the Stripe API). Before this field existed, the two could disagree; an org set to INR could be shown a rupee symbol in one place and charged in USD by the PaymentIntent. Blank reads as USD.
Default_Designation__c Default Designation Text 18-character Id of the fund/designation to credit when a donor does not choose one. Leave blank for no default.
Docs: Stored as text, not a Lookup, because Hierarchy Custom Settings cannot hold relationship fields, so SettingsService.defaultDesignationId() casts it to Id at read time and swallows a blank/malformed value back to null rather than throwing.
Default_Hero_Image_URL__c Default Hero Image URL Url Internal cache of the packaged default hero image's public link. Do not edit directly.
Docs: Idempotency guard as much as a cache — ensureDefaultImagesSeeded() only creates the ContentVersion/ContentDistribution when this is blank, so a package upgrade re-running the post-install script does not stack a duplicate file per upgrade.
Default_Org_Logo_Content_Document_Id__c Default Org Logo Content Document Id Text Internal cache of the default logo's ContentDocument Id. Do not edit directly.
Default_Org_Logo_URL__c Default Org Logo URL Url Internal cache of the default logo's public link. Do not edit directly.
Default_Social_Share_Image_URL__c Default Social Share Image URL Url Internal cache of the packaged default social share image's public link. Do not edit directly.
Docs: Same idempotency role as Default_Hero_Image_URL__c. Note the downstream field it feeds, Campaign_Design__c.Social_Share_Image_URL__c, is not yet rendered into an og:image tag by anything in this package — seeding it gives admins a sensible default in the Designs panel and a value a future social-preview feature can read.
Default_Suggested_Amounts__c Default_Suggested_Amounts Text Comma-separated list of suggested amounts, e.g. "25,50,100,250".
Docs: Read by SettingsService.defaultSuggestedAmounts(); returns null (not a hardcoded list) when unset so the donation form's fallback chain can tell "no org default configured" apart from "use this"; the chain is campaign-level Suggested_Amounts__c, then this field, then a client-side literal fallback.
Default_Thank_You_CTA_Label__c Default Thank-You CTA Label Text Fallback text shown on the thank-you CTA button (e.g. "See Our Impact"), used whenever a campaign leaves its own CTA label blank.
Default_Thank_You_CTA_URL__c Default Thank-You CTA URL Url Fallback destination for the thank-you CTA button, used whenever a campaign leaves its own CTA URL blank.
Dispute_Reconcile_Cursor__c Dispute Reconcile Cursor DateTime Machine-managed. Do not edit — used internally by the reconciliation batch to avoid re-scanning processed disputes.
Docs: Machine-managed high-water mark read and advanced only by RefundReconciliationBatch's dispute-polling pass; a separate cursor from Refund_Reconcile_Cursor__c because disputes and refunds are polled from Stripe as two independent event streams within the same batch job.
Donation_Page_Path__c Donation Page Path Text Only fill this in if you built your Donate page at a URL other than /donate. Enter the path exactly as set in Experience Builder's Page Properties (e.g. /give). Leave blank if you used the default /donate — campaign, fundraiser, and embed links are built using this value.
Donation_Sync_Campaign_Members__c Donation_Sync_Campaign_Members Checkbox When on, a donor who gives to a campaign is added as a Campaign Member on that campaign. Off by default — leave it off if you already add campaign members with your own automation.
Docs: The donation-side counterpart of Event_Sync_Campaign_Members__c, deliberately a SEPARATE switch: an org that wants event attendance in campaign reporting does not necessarily want every donor added too, and the two write paths run at different times (event orders sync inline in EventPurchaseService; donations sync off the DonationFinalized__e subscriber via CampaignMemberSyncService). Read through SettingsService.donationSyncCampaignMembers().
Donor_Portal_Confirmation_Message__c Donor Portal Confirmation Message TextArea Copy shown after a donor submits their email, explaining the link (if sent) and how long it lasts. Leave blank to use the default wording.
Donor_Portal_Confirmation_Title__c Donor Portal Confirmation Title Text Heading shown after a donor submits their email for a portal link. Leave blank to use the default wording.
Donor_Portal_Empty_History_Message__c Donor Portal Empty History Message Text Message shown when a donor has no gift history. Leave blank to use the default wording.
Donor_Portal_Empty_Recurring_Message__c Donor Portal Empty Recurring Message Text Message shown when a donor has no active recurring gifts. Leave blank to use the default wording.
Donor_Portal_Empty_Wallet_Message__c Donor Portal Empty Wallet Message Text Message shown when a donor has no saved cards. Leave blank to use the default wording.
Donor_Portal_Hide_History__c Donor Portal Hide History Checkbox Leave unchecked to show the gift-history panel on the donor portal. Check to hide it.
Docs: One of four Donor_Portal_Hide_ visibility toggles (History, Recurring, Summary, Wallet), all stored inverted for the same backfill-safety reason as Refunds_Disabled__c. These fields, and the Donor_Portal_ copy fields on this object, were migrated from Donor_Portal_Config__mdt on 2026-07-31 because that CMDT type shipped with zero packaged records and required a package upgrade to change; as Settings__c fields they are editable from the setup console like any other org preference.
Donor_Portal_Hide_Recurring__c Donor Portal Hide Recurring Checkbox Leave unchecked to show the recurring-gifts panel on the donor portal. Check to hide it.
Donor_Portal_Hide_Summary__c Donor Portal Hide Summary Checkbox Leave unchecked to show the giving-summary panel on the donor portal. Check to hide it.
Donor_Portal_Hide_Wallet__c Donor Portal Hide Wallet Checkbox Leave unchecked to show the saved-cards panel on the donor portal. Check to hide it.
Donor_Portal_Path__c Donor Portal Path Text Path appended to the Experience Site URL for donor-portal links in emails (default /donor).
Donor_Portal_Request_Subtitle__c Donor Portal Request Subtitle TextArea Copy shown below the heading explaining how the magic-link email works. Leave blank to use the default wording.
Donor_Portal_Request_Title__c Donor Portal Request Title Text Heading shown above the email field when a donor requests portal access. Leave blank to use the default wording.
Donor_Refund_Requests_Enabled__c Donor Refund Requests Enabled Checkbox Check this to let donors ask for a refund from their donor portal. Nothing is refunded automatically — each request lands in the Guest Requests tab for a person to approve and process. Leave unchecked if you would rather donors phone or email you.
Docs: Read by SettingsService.donorRefundRequestsEnabled(). Deliberately NOT inverted, unlike Refunds_Disabled__c: a Checkbox backfills to false on an upgraded org row, and false must mean "off" here so an existing org never starts inviting refund requests it did not ask for. Edited in the Refunds panel of the settings console (setRefunds), not the donor-portal panel, because it is bounded by the same master switch and window as staff-issued refunds.
Dunning_Email_Frequency__c Dunning_Email_Frequency Number Number of days between payment-failure reminder emails, e.g. 3.
Docs: Read by SettingsService.dunningEmailFrequencyDays() (default 3 when unset). Throttles how often the same failed schedule can email its donor, mirroring the reAuthThrottleDays pattern in RecurringDonationService so a donor is never double-emailed within one cool-down window.
EIN__c EIN Text Your organization's federal Employer Identification Number (EIN), shown on tax receipts.
Email_Accent_Color__c Email Accent Color (hex) Text Hex color (e.g. #b4863c) used for the donation-receipt gratitude accent. Alert emails keep their own status colors.
Email_Background_Color__c Email Background Color (hex) Text Hex color (e.g. #F4EDE0) for the outer email canvas behind the message card. Blank = built-in warm parchment.
Email_Heading_Color__c Email Heading Color (hex) Text Hex color (e.g. #1C2B46) for email headings, the gift amount, ledger values, and the footer background. Blank = built-in Midnight.
Email_Signature__c Email Signature TextArea Sign-off shown above the footer on every email (e.g. "With gratitude, The Rivergate team"). Leave blank to use the default.
Embed_Disabled__c Embed Disabled Checkbox Tick this to switch off every donation widget you have embedded on outside websites. Those pages will show a short "not available" notice instead of the donation form, and no new gifts can come through them — your donation pages on your own site are unaffected. Leave it unticked (the normal setting) to keep embedding on. Use it if a widget is misbehaving or you need to stop external giving quickly.
Docs: Read by SettingsService.isEmbedEnabled() using the same inverted-boolean pattern as Refunds_Disabled__c: unchecked (the backfilled default) reads as enabled. Gates the guest EmbedConfigResource CORS-checked donation widget entirely, not just its styling.
Event_Deductible_Mode__c Event_Deductible_Mode Text Controlled values: "Fair Market Value" or "Percentage". Custom Settings do not support the Picklist field type, so this is enforced in Apex rather than a valueSet.
Docs: Stored as free-text rather than a Picklist because Hierarchy Custom Settings cannot hold that field type; EventPurchaseService enforces the two valid values ("Fair Market Value", "Percentage") case-insensitively and falls back to Fair Market Value with a warning on any other stored text, rather than silently treating an unrecognized value as fully deductible.
Event_Donation_Product_Id__c Event Donation Product Id Text Machine-managed. Do not edit — Id of the packaged "Donation" add-on product seeded at install.
Docs: Id (as text) of the generic package Product2 used for the fully-deductible donation add-on line on event ticket orders. Seeded by PostInstallHandler; blank until that runs.
Event_Pricebook_Id__c Event_Pricebook_Id Text 18-character Id of the Pricebook used for event ticket pricing. Leave the seeded default unless you use your own Pricebook.
Docs: Id (as text) of the events Pricebook2 seeded by PostInstallHandler.seedEventPricebook(). Blank until seeded, at which point every Event_Ticket_Type__c PricebookEntry hangs off this Pricebook.
Event_Sync_Campaign_Members__c Event_Sync_Campaign_Members Checkbox When on, each ticket buyer/attendee is added as a Campaign Member for reporting. Off by default.
Docs: Opt-IN, not opt-out: off by default because writing a CampaignMember for every ticket attendee touches Campaign membership automation the subscriber org may already own. When on, finalizing an event order creates a CampaignMember for each attendee that resolved to a Contact.
Experience_Network_Id__c Experience Network Id Text The Experience Cloud site chosen above for your public donation pages. Leave blank to let the package auto-detect a site named "Fundraising" instead.
Experience_Site_URL__c Experience_Site_URL Text Base URL of your Experience Cloud site, e.g. https://yourorg.my.site.com/donate. Usually auto-populated.
Failed_Payment_Retries__c Failed_Payment_Retries Number Number of failed payment attempts allowed before a recurring gift is canceled, e.g. 3.
Docs: Read by SettingsService.maxFailedPaymentRetries() (default 3 when unset): the number of off-session retry attempts a recurring schedule gets before it is marked Failed and starts counting down Grace_Period_Days__c toward cancellation.
Fee_Coverage_Fixed__c Fee Coverage Fixed Amount Number The flat per-transaction part of your payment processor's fee, e.g. 0.30 for Stripe's standard US card rate. Used only to work out the extra amount a donor pays when they tick "cover the processing fee". Leave blank to use 0.30.
Docs: Expressed in Default_Currency__c, not converted per gift — the package is single-currency by design (see Settings__c.Default_Currency__c), so there is no rate to apply. A blank falls back to 0.30 for the same reason Fee_Coverage_Percent__c falls back to 2.9: an unconfigured org should produce a plausible Stripe-shaped estimate, not a silently wrong one. Zero IS a legitimate value here (some processors charge no flat component) and is honoured — only blank triggers the default.
Fee_Coverage_Percent__c Fee Coverage Percent Number The percentage part of your payment processor's fee, e.g. 2.9 for Stripe's standard US card rate. Used only to work out the extra amount a donor pays when they tick "cover the processing fee" — it never changes what your processor actually charges you. Leave blank to use 2.9.
Docs: Deliberately org-level rather than per-campaign: the rate is a property of the payment processor's pricing, not of an appeal, and an admin who has negotiated a different rate has one place to change it. The old Default_Fee_On_Top_Percent__c was removed 2026-08-03 as dead config because nothing consumed it; this field is its replacement and IS consumed, by FeeCoverageService.computeFee. Blank falls back to 2.9 rather than 0 — a zero rate would silently make every "cover the fee" tick add only the fixed component, which reads as a bug rather than as unconfigured.
Finalizer_Heartbeat__c Finalizer Heartbeat DateTime Machine-managed. Do not edit — the finalizer job stamps this every time it completes a pass, and the setup console reads it to tell you whether gifts are still being turned into records.
Docs: This exists because a scheduled-job COUNT cannot detect a job that is scheduled but not running. The setup console's "background jobs" check counts CronTrigger rows, which stay at 24/24 even when every run is aborting; this marker is written from inside the job itself, so it only advances when a pass genuinely completed. The guest donation path reads it before creating a PaymentIntent and, when it is stale, still takes the gift (a donor-facing outage is worse than a delayed record) but writes a PIPELINE_STALE Transaction_Log__c row so the admin's Recent Errors panel and Get Started step both go red. Staleness threshold lives in SettingsService.FINALIZER_STALE_MINUTES; the finalizer itself runs every 5 minutes, so 30 minutes is six missed passes.
Footer_Text__c Public Page Footer Text Text The line at the very bottom of your public pages, usually a copyright notice such as "© 2026 Your Organization". Campaigns can override it if one needs different wording.
Docs: Read through SettingsService.footerText(). Distinct from Receipt_Footer_Text__c, which is the legal block printed on receipts — this one is a single display line at the foot of a web page and carries no tax claim. Moved off Campaign_Design__c on 2026-08-12, where every packaged theme carried an identical copy of the same sentence.
From_Email__c From Email Email The address donor emails come from. It only takes effect if you have created a matching Org-Wide Email Address in Setup that is verified AND has "Allow All Profiles to Use this From Address" ticked. Check Settings - System - Health Check - Donor Email Sender to confirm it is really in use.
Docs: Apex cannot invent a From address. Messaging.SingleEmailMessage sends from the running user unless handed an OrgWideEmailAddress id, which is why this field is a lookup key rather than a value the package can use directly. EmailSenderService.applySender() is the single consumer; note that setOrgWideEmailAddressId() and setSenderDisplayName() are mutually exclusive in the platform API, so From_Name__c is skipped whenever this resolves.
From_Name__c From_Name Text Display name shown as the sender, e.g. "Riverbend Food Bank". If you set a From Email that matches a verified Org-Wide Email Address, that record's own display name is used instead and this field has no effect.
Docs: Skipped by EmailSenderService.applySender() whenever From_Email__c resolves, because setSenderDisplayName() and setOrgWideEmailAddressId() are mutually exclusive on Messaging.SingleEmailMessage.
Grace_Period_Days__c Grace_Period_Days Number Days to wait after the last failed attempt before canceling a recurring gift, e.g. 7.
Docs: Read by SettingsService.gracePeriodDays() (default 7 when unset). Counts days a recurring schedule may sit Failed (Failed_At__c) before RecurringAutoCancelBatch cancels it outright.
Inline_Video_Embeds_Enabled__c Inline Video Embeds Enabled Checkbox Play story videos directly on the public page instead of opening YouTube in a new tab. This only works after you create a CSP Trusted Site for https://www.youtube-nocookie.com yourself — see the Story media section of the Organization setup panel for the exact values. Leave off and videos show a poster card that links out, which needs no setup.
Docs: Read by SettingsService.inlineVideoEmbedsEnabled() and emitted to the guest page as the inlineVideoEnabled key on the CampaignService payload. Turning it on without creating the trusted site produces a blocked iframe, not an error, so the setup panel states the requirement next to the toggle rather than trying to detect it.
Log_Level__c Log Level Text OFF, ERROR, WARN, INFO, or DEBUG. Blank defaults to ERROR.
Docs: Authoritative for AppLogger persistence (OFF/ERROR/WARN/INFO/DEBUG, blank treated as ERROR). Supersedes the legacy Debug_Logging__c checkbox, which now only toggles a System.debug() echo and no longer controls whether a Log__c record is written.
Max_Donation_Amount__c Maximum Donation Amount Number Largest gift amount accepted, e.g. 25000. Leave blank or 0 for no maximum.
Docs: Read by SettingsService.maxDonationAmount(); null or a non-positive value both mean no maximum is enforced, not zero.
Min_Donation_Amount__c Minimum Donation Amount Number Smallest gift amount accepted, e.g. 5. Leave blank or 0 for no minimum.
Docs: Read by SettingsService.minDonationAmount(); null or a non-positive value both mean no minimum is enforced, not zero.
NPSP_Enabled__c NPSP_Enabled Checkbox Read-only. Automatically detected — do not set manually.
Docs: Same detected-AND-enabled precedence as Person_Account_Enabled__c: SettingsService.npspEnabled() requires both this flag and the presence of NPSP's core recurring-donation object. Gates NPSP_GAU_Sync_Enabled__c and NPSP_Sync_Enabled__c, which cannot be true unless this is.
NPSP_GAU_Sync_Enabled__c NPSP_GAU_Sync_Enabled Checkbox When on (and NPSP is installed), designation splits are also written as NPSP GAU Allocations.
Docs: Sub-toggle under NPSP_Enabled__c, read by NpspSyncService: when on, finalizing a donation creates an npsp__Allocation__c per Donation_Designation__c line so fund-level giving mirrors into NPSP's GAU allocation model.
NPSP_Sync_Enabled__c NPSP_Sync_Enabled Checkbox When on (and NPSP is installed), recurring gifts are also mirrored to NPSP Recurring Donations.
Docs: Sub-toggle under NPSP_Enabled__c, read by NpspSyncService: when on, each Recurring_Donation__c schedule gets a parallel npe03__Recurring_Donation__c maintained alongside it, so NPSP-native reports see the same recurring commitments this package tracks natively.
Org_Display_Name__c Org_Display_Name Text Your organization's public-facing name, e.g. "Riverbend Food Bank". Shown on campaign pages, the checkout header, the donor portal and every receipt. If you leave it blank, receipts print your Salesforce org's own name instead of an empty letterhead.
Org_Logo_Content_Document_Id__c Org Logo Content Document Id Text Set automatically when you upload a logo in Setup > Organization > Branding. Do not edit directly.
Org_Logo_Is_Custom__c Org Logo Is Custom Checkbox Set automatically when you upload or remove a logo in Setup > Organization > Branding. Do not edit directly.
Org_Logo_URL__c Org Logo URL Url Set automatically when you upload or remove a logo in the Organization panel — do not edit directly.
Org_Mailing_Address__c Organization Mailing Address TextArea Physical mailing address shown in the email footer. Required for CAN-SPAM (US) and CASL (Canada) compliance.
Person_Account_Enabled__c Person_Account_Enabled Checkbox Read-only. Automatically detected — do not set manually.
Docs: A detection MIRROR for the setup console, not a switch and not a runtime gate. Written only by SettingsService.detectAndUpdateOrgFeatures() and SetupController.detectOrgFeatures(), and shown read-only in the setOrganization panel so an admin can see what the app detected. Nothing in the donation, receipt or portal paths reads it: every runtime Person Account branch goes through DonorResolutionService.isPersonAccountOrg(), a pure Account.IsPersonAccount describe that never touches this record. SettingsService.personAccountEnabled() would combine the two, but has no production caller — see the note above that method for why pointing isPersonAccountOrg() at it would be unsafe while this field defaults to false and is not seeded at install. Never branch on this field directly.
Portal_Token_TTL_Hours__c Portal Link Expiry (Hours) Number Hours a donor-portal magic link stays valid before it expires, e.g. 3. Leave blank for the 3-hour default. Raise it only if donors report links dying before they get to them - the link is a bearer credential sitting in an inbox, so a longer window is a longer exposure.
Docs: Read by SettingsService.portalTokenTtlHours() (default 3h when unset/non-positive, hard-capped at 168h/7 days so a mis-set value cannot make a magic link effectively permanent). Drives how far ahead of issuance DonorPortalService sets Contact/Account.Portal_Token_Expires_At__c. The default was 24h through 1.0.0-16; it was cut to 3h because the token is neither single-use nor device-bound, so the expiry window is the whole of its security.
Privacy_URL__c Privacy URL Url Web address of your privacy policy. Donors see it as a link at the bottom of every public page. Leave blank if you do not publish one — the link is simply left out.
Docs: Read through SettingsService.privacyUrl(). Same 2026-08-12 move off Campaign_Design__c as Terms_URL__c, for the same reason. Campaign.Privacy_URL_Override__c wins when set.
Receipt_Email_Template__c Receipt_Email_Template Text API name of the email template used for donation receipts.
Docs: Admin-configured DeveloperName of an org-owned email template; when blank, ReceiptService falls back to the packaged "DonationReceipt" template rather than failing the send.
Receipt_Footer_Text__c Receipt Footer Text TextArea Your organisation's standing details — legal name, tax-exempt status, EIN, address — shown at the bottom of every receipt. Do not put "no goods or services were provided" here: this text also prints on event-ticket receipts, where that statement is false. Use the Receipt Legal Text fields for wording that depends on the type of gift.
Docs: Case-BLIND, unlike the three Receipt_Legal_Text_ fields. This one string is appended to every receipt the package prints — plain gift, event ticket, partial refund alike — so it cannot carry any claim that is only true for some of them. The package's own scratch-org seed script got this wrong until 2026-08-08: it seeded a footer ending "No goods or services were provided in exchange for this gift", which then printed on a gala receipt directly beneath a line itemising $400 of goods received. Anything conditional belongs in Receipt_Legal_Text_With_Goods__c / Receipt_Legal_Text_Partial_Refund__c / Tax_Receipt_Legal_Text__c, which the package selects between per gift.*
Receipt_Intro_Message__c Receipt Intro Message TextArea Intro paragraph shown on the donation receipt below the amount. Leave blank to use the default wording.
Receipt_Legal_Text_Partial_Refund__c Receipt Legal Text (Partly Refunded) TextArea Wording for the rare receipt covering an event order that was partly refunded. No tax-deductible amount is shown on these, so this text should tell the donor to contact you for it. Leave blank to use the default wording.
Docs: The third case of the legal-statement split (2026-08-08) — see the doc comment on Receipt_Legal_Text_With_Goods__c for why one override field became three. This one covers the single case the package refuses to compute: a partially refunded order that also carried goods. ReceiptStatusHelper.deductibleAmount returns null there on purpose (apportioning a refund across the deductible and non-deductible halves of a gala ticket is a judgement the package has no basis to make), so the statement has to send the donor to the org rather than state a figure. An org that overrides this must keep that property — wording that asserts a deductible amount would contradict the receipt above it, which deliberately shows none.
Receipt_Legal_Text_With_Goods__c Receipt Legal Text (Goods Received) TextArea Wording printed on receipts for event tickets and any other gift where the donor got something back. Must NOT say "no goods or services were provided" — that statement is false for these gifts and is regulated in the US. Leave blank to use the default wording.
Docs: The quid-pro-quo half of the legal-statement split (2026-08-08). Before the split there was one override field, Tax_Receipt_Legal_Text__c, and it won outright on every receipt — so an org that set it to the ordinary "no goods or services were provided" wording had that sentence printed verbatim on a gala receipt itemizing hundreds of dollars of goods received, which is a false IRC section 6115 disclosure. The override is now per-case: the no-goods field keeps its API name and its existing value (no data migration), and the two goods-aware cases get their own fields, blank on upgrade, falling back to the package wording until an admin sets them. Resolved by ReceiptStatusHelper.legalStatement for single receipts and GivingStatementService for annual statements, so the two surfaces can never make different claims about one gift.
Receipt_Number_Prefix__c Receipt Number Prefix Text Short code that starts every receipt number, for example RCPT gives RCPT-2026-000001. Leave blank to use RCPT. Changing this only affects receipts issued from now on.
Docs: Kept to 10 characters so the assembled number stays inside Opportunity.Receipt_Number__c (40). ReceiptNumberService upper-cases the value and strips everything outside A-Z, 0-9 and underscore before use — a prefix containing a space, comma or slash would otherwise produce receipt numbers that break the CSV exports and URL-addressed lookups they exist to identify. Hyphens are stripped too, because the hyphen is the separator between prefix, year and sequence: allowing one inside the prefix would make a receipt number ambiguous to parse. A prefix that sanitises away to nothing falls back to RCPT rather than emitting a number that starts with a stray hyphen.
Record_Type_Mapping_Chunk_1__c Record Type Mapping Chunk 1 Text Machine-managed. Do not edit — this stores part of the record-type mapping configuration and is only ever changed by the Setup console's record-type mapping screen.
Docs: Part of a 4-field chunked storage scheme for RecordTypeMappingService's compact-encoded mapping table (field separator U+00A7 "§", slot separator U+00B6 "¶") — replaces the former Record_Type_Mapping__c custom object, deleted 2026-08-03 because Custom Settings fields cap at 255 chars and don't support Long Text Area, so a dedicated Long-Text-capable object was the only other option; chunking across Settings__c fields was chosen instead to avoid a second custom object.
Record_Type_Mapping_Chunk_2__c Record Type Mapping Chunk 2 Text Machine-managed. Do not edit — this stores part of the record-type mapping configuration and is only ever changed by the Setup console's record-type mapping screen.
Record_Type_Mapping_Chunk_3__c Record Type Mapping Chunk 3 Text Machine-managed. Do not edit — this stores part of the record-type mapping configuration and is only ever changed by the Setup console's record-type mapping screen.
Record_Type_Mapping_Chunk_4__c Record Type Mapping Chunk 4 Text Machine-managed. Do not edit — this stores part of the record-type mapping configuration and is only ever changed by the Setup console's record-type mapping screen.
Recurring_Thankyou_Message__c Recurring Thank-You Message TextArea Body paragraph shown on the recurring-gift confirmation email. Leave blank to use the default wording.
Refund_Reconcile_Cursor__c Refund Reconcile Cursor DateTime Machine-managed. Do not edit — used internally by the reconciliation batch to avoid re-scanning processed refunds.
Docs: Machine-managed high-water mark for the refund-polling pass of RefundReconciliationBatch, independent of Dispute_Reconcile_Cursor__c. Neither cursor advances, and the reconciler does not poll at all, while Refunds_Disabled__c is checked.
Refund_Window_Days__c Refund Window (Days) Number Number of days after a donation's Close Date during which it remains eligible for refund, e.g. 180.
Refunds_Disabled__c Refunds Disabled Checkbox Inverted field: leave UNCHECKED to keep refunds enabled (the default). Check this box ONLY to turn refunds OFF org-wide.
Docs: Read by SettingsService.refundsEnabled(), which inverts the stored value so a Checkbox that backfills to false on an upgraded org row is read as ENABLED with no migration step needed. Follow the same inverted pattern for any future org-wide kill switch rather than a directly-read Is_Enabled field.
Reply_To_Email__c Reply-To Email Email Address donors reach when they reply to an email. Leave blank to use the From Email.
Retry_Interval_Days__c Retry_Interval_Days Number Days between automatic retry attempts for a failed recurring payment, e.g. 3.
Docs: Read by SettingsService.retryIntervalDays() (default 3 when unset). Cadence is flat: every retry waits the same number of days, there is no backoff curve.
Social_Facebook_URL__c Social — Facebook URL Url Full web address of your organization's Facebook page. Leave blank and that icon is not shown at all.
Docs: Read through SettingsService.socialFacebookUrl(). See Social_Twitter_URL__c for why the three networks are separate fields.
Social_Instagram_URL__c Social — Instagram URL Url Full web address of your organization's Instagram profile. Leave blank and that icon is not shown at all.
Docs: Read through SettingsService.socialInstagramUrl(). See Social_Twitter_URL__c for why the three networks are separate fields.
Social_Share_Image_URL__c Social Share Image URL Url The picture that appears when someone shares one of your public pages on social media. Best at 1200x630 pixels. Leave blank to use the packaged default image.
Docs: Read through SettingsService.socialShareImageUrl(), which falls back to Default_Social_Share_Image_URL__c when this is blank. The two are deliberately separate: this one is the admin's choice, the Default_ one caches the ContentDistribution link to the packaged artwork that SettingsService.ensureDefaultImagesSeeded() creates, and an upgrade re-seeds the cache without ever touching an admin's own picture.
Social_Twitter_URL__c Social — X (Twitter) URL Url Full web address of your organization's X (Twitter) profile. Leave blank and that icon is not shown at all.
Docs: Read through SettingsService.socialTwitterUrl(). The three social fields are separate rather than one multi-value field so the footer can render each network's own icon and omit the ones an org does not use, without parsing a delimited string on the guest path.
Soft_Credit_Automation_Enabled__c Soft_Credit_Automation_Enabled Checkbox When on, gifts given in honor of someone are automatically credited to that person, and a donor's household is credited alongside them. Turn it off if you assign soft credit yourself or with your own automation.
Docs: Starts ON for a fresh install, unlike Donation_Sync_Campaign_Members__c which is off for everyone. The difference is what each one writes: campaign membership creates rows in data an org may already own and report on, whereas soft credit only populates package fields that are blank until something fills them, so there is nothing for it to corrupt. The <defaultValue> below governs NEW Settings rows only — Salesforce does not backfill a field default onto records that already exist, so an org upgrading into this release keeps the false its existing Settings row was created with and has to opt in. That asymmetry is intentional: the package will not switch on a new automatic write in an org that is already configured. PostInstallHandler.seedDefaultSettings() sets it explicitly on the fresh-install path so the intent does not rest on the platform default alone. Read through SettingsService.softCreditAutomationEnabled().
Support_Phone__c Support Phone Phone Phone number donors can call for help. Shown in payment-failure and final-notice emails, and on public campaign pages that do not set their own contact number.
Tax_Receipt_Legal_Text__c Receipt Legal Text (No Goods Received) TextArea Legal disclaimer for ordinary donations where the donor received nothing back. Defaults to US 501(c)(3) wording; override for your jurisdiction and entity type. Event tickets and other gifts with goods received use their own wording.
Docs: Narrowed from "the receipt's legal statement" to "the plain-gift legal statement" on 2026-08-08. The API name and any stored value are unchanged so no org has to re-enter wording it had reviewed by counsel — but it no longer wins on receipts where the donor received goods, which is what made it a correctness bug rather than a config choice. See the doc comment on Receipt_Legal_Text_With_Goods__c for the full rationale and the other two cases.
Terms_URL__c Terms URL Url Web address of your terms and conditions page. Donors see it as a link at the bottom of every public page. Leave blank if you do not publish one — the link is simply left out.
Docs: Read through SettingsService.termsUrl(), never Settings__c.getInstance() directly. Lived on Campaign_Design__c until 2026-08-12, where switching a campaign from one theme to another silently changed which terms document donors were pointed at — a policy is a fact about the organisation, not about a colour scheme. Campaign.Terms_URL_Override__c wins when set; CampaignService.resolveIdentity owns that precedence, not this field.

← Back to the diagram