# | TEXT | | Spec-era default keys with no reader were removed on 2026-09-22 (#850); the three below are read by the app. |
ach.bounce.feeAmount | NUMBER | 0 | bounce fee raised as a PENDING BOUNCE_FEE payment when a processor callback returns a debit; 0 = no fee |
ach.credit.returnWindowDays | NUMBER | 2 | days after a credit settles during which a return is still expected before the status poll treats it as final |
ach.representment.daysBetween | NUMBER | 3 | days between re-presentments |
ach.representment.maxAttempts | NUMBER | 2 | how many times a returned debit is re-presented from the collections queue |
apply.hourlyCap | NUMBER | 200 | submissions accepted per hour across all forms; per-IP stays at 5/hour (#849) |
apply.turnstile.secret | TEXT | | Turnstile secret used to verify each submission server-side; set both keys to turn the captcha on (#849) |
apply.turnstile.siteKey | TEXT | | Cloudflare Turnstile site key rendered on the hosted application form; empty = no captcha (#849) |
bounce.early.count | NUMBER | 2 | bounces within the early window that trigger the red flag + clawback-risk alert |
bounce.early.enabled | BOOL | true | flag deals with early payment failures — bounces within the first days after funding (walkthrough §7) |
bounce.early.notifyMerchant | BOOL | false | also email the merchant when the early-bounce rule fires |
bounce.early.windowDays | NUMBER | 30 | days after funding that count as "early" (matches the commission clawback window) |
bounce.escalate.count | NUMBER | 3 | bounces within the window that trigger escalation |
bounce.escalate.enabled | BOOL | false | flip a weekly deal to daily collections after repeated bounces (W7 §13.3) |
bounce.escalate.mode | ENUM | | AUTO | CONFIRM (default CONFIRM): AUTO flips the schedule itself; CONFIRM notifies the underwriter to decide |
bounce.escalate.windowDays | NUMBER | 30 | rolling window for the bounce count |
branding.displayName | TEXT | | company name shown on portals, emails and documents; empty = the registered company name |
branding.iconUrl | TEXT | | square icon used for the PWA and favicon; set from Settings → Branding |
branding.logoUrl | TEXT | | logo shown in the sidebar, portals and branded email; set from Settings → Branding |
compliance.defaultJurisdiction | TEXT | | (2-letter state): fallback jurisdiction for disclosures and UCC filings when the merchant has no state; empty = US |
email.fromAddress | TEXT | | From address on tenant-facing mail; empty = the platform gateway's address. Set only a domain verified under Email domains, or the provider rejects it (#719) |
email.fromName | TEXT | | display name on the From header of tenant-facing mail (signer invites, offers, letters); empty = the branding display name, else the company's registered name (#719) |
email.inbound.token | TEXT | | shared secret the inbound-email webhook URL must carry (?token=…); empty = inbound email off |
email.intake.enabled | BOOL | false | emailed broker applications auto-create ISO + merchant + deal with attachments filed (competitor-gap build) |
email.replyTo | TEXT | | Reply-To on outbound mail — point it at the shared intake mailbox so replies flow back through email intake and thread onto their deal (walkthrough §2, shared-mailbox flow) |
esign.certificateSubject | TEXT | | display-only — subject and expiry of the company's own signing certificate installed in Settings → E-signature (#694); the bundle itself lives in the control-plane secret store; empty = platform certificate |
esign.consentText | TEXT | | the company's own consent wording shown on the e-sign consent screen, under the standard E-SIGN/UETA disclosure (#684); empty = disclosure only |
esign.expiryDays | TEXT | | INT (default 14): days a signature request stays open after sending; then it expires and the links refuse (#688) |
esign.reminderDays | TEXT | | INT (default 3): days a signer may sit on their turn before the first reminder email, and between reminders (#688) |
esign.reminderMax | TEXT | | INT (default 3): reminders sent per signer before the platform stops chasing; staff can still send one by hand (#688) |
inboundWebhookSecret | TEXT | | shared secret for POST /api/webhooks/inbound/<source>; the sender signs HMAC-SHA256 over "<timestamp>.<body>" into X-Timestamp / X-Signature. Empty = inbound webhooks off (#843) |
partners.dealCentricNav | BOOL | false | hide Merchants/Leads tabs; slim deal creation to merchant+ISO (§11) |
partners.isoPortalEnabled | BOOL | false | allow ISO/broker logins into the partner portal (own deals only) |
partners.mcaOnly | BOOL | false | lock product type to MCA; hide product selectors (§11) |
partners.operatingMode | ENUM | | DIRECT_FUNDER | BROKERAGE | HYBRID (default HYBRID): reshapes pipeline/nav/wording to the tenant's business |
partners.referralsEnabled | BOOL | true | show the ISO Reps tab + rep commission splits |
renewal.eligibility.minDays | NUMBER | | minimum days since funding before a deal is flagged renewal-eligible (Settings → Renewals) |
renewal.eligibility.paidDownPct | NUMBER | | paid-down percentage a funded deal must reach before it is flagged renewal-eligible (Settings → Renewals) |
stips.contractGate | BOOL | true | mandatory stips block sending contracts (e-sign) until completed or waived (owner walkthrough §1) |
stips.fundingGate | BOOL | true | mandatory stips block the FUNDED transition until completed or waived |