- Shipped
- September 5, 2026 at 8:32 PM UTC
- Author
- Kamo
- Commit
- ce555a4
`PUT **************** publishes or retires a product's public page and records which web chat its support widget speaks through. Enabling without one is refused: a borrower filling in a mortgage application will have a question, and a form with no way to ask one is where they stop. The public endpoint now 404s a product nobody has published — the same answer as a deleted one, so a link that was live yesterday and retired today says what a mistyped one says. Before this, every mortgage product had a live public endpoint from the moment it was created. And it returns the widget's site key, resolved from the integration the product was published with. That has to happen here: one deployment serves every lender, so the key cannot be a build-time variable — the product id in the URL chooses it, the same way it already chooses the branding and the disclosures. The chat block answers `enabled: false` rather than failing when the integration has been deleted, disabled, belongs to another org, or was never given a hosted key. The application matters more than the bubble; a borrower who cannot apply because a chat widget is misconfigured is the worst of the three outcomes.