Implement POST /api/bulktext/send internal transactional SMS

FixVOIPService
Shipped
July 2, 2026 at 7:04 AM UTC
Author
Sage
Commit
49cb1ba

SecurityService's BulkTextSmsClient (password-recovery + account-settings SMS) has always POSTed **************** to /api/bulktext/send, but the controller was never built, so every call 404'd — SMS recovery was dead in prod. The InternalAuthFilter already declared /api/bulktext/send in its PROTECTED_PREFIXES, confirming this was the intended (unbuilt) design. New BulkTextInternalSendController resolves the org's oldest ACTIVE bulk-text instance and sends via BulkTextProviderFactory using that instance's from-number (mirrors **************** Session-less: added an EXACT-match /api/bulktext/send exclusion in OTKValidationFilter (InternalAuthFilter guards it); /api/bulktext/instances stays session-guarded. No provider -> 422; provider fail -> 502; bad input -> 400. Adversarially reviewed (SHIP_AS_IS). 9 unit tests. Follow-up (separate, pre-existing): add rate limiting to SecurityService's public /api/recover/sms/initiate to prevent SMS-bombing now that the send path works.

All changes

Like what you see shipping?

Every one of these updates lands in your workspace automatically. Start free and watch it grow week after week.

Start Free ForeverView Pricing