SMS Opt-In Flow — BookieSlip Prime Time SMS alerts

Public reference for A2P 10DLC carrier reviewers and TCR. Documents the end-to-end consent flow that gates outbound SMS to BookieSlip subscribers.

Program at a glance

Program namePrime Time SMS alerts
BrandBookieSlip, Inc. (TCR brand B2T77DT)
Use caseMixed (Notifications + Marketing) — Low Volume
SenderToll-free / 10DLC number attached to Messaging Service
FrequencyUp to 1 message per recipient per day, max
Send schedule6:00 PM ET on weekdays, 11:00 AM ET on weekends
AudienceAuthenticated paid subscribers (Pro / Premium tiers) who have verified their phone number AND explicitly enabled the toggle
Opt-outReply STOP (also STOPALL, UNSUBSCRIBE, CANCEL, END, QUIT, REVOKE)
HelpReply HELP or INFO; or email support@bookieslip.com

How the consent flow works (end-to-end)

BookieSlip is an authenticated subscription product, so the SMS opt-in UI lives behind login on the Notifications tab of the user's Account Settings. No end user is added to the program without completing all five gated steps below, in order, with active consent at every step:

  1. Step 1 — Age gate (21+). Every signup form on app.bookieslip.com/signup includes a "I confirm I am 21 years of age or older" checkbox that is unchecked by default. Submit is blocked client-side AND server-side until the box is checked. The age-gate timestamp is persisted as User.age_verified_at and is a precondition for any communication preferences UI.
  2. Step 2 — Account creation + login. The user creates a paid Pro or Premium account (Stripe-verified subscription). Free tier accounts cannot reach this program; the audience filter at send time excludes free-tier users by definition.
  3. Step 3 — Phone verification (Twilio Verify SMS-OTP). In Account → Notifications, the user enters their mobile number, BookieSlip sends a one-time passcode via Twilio Verify, and the user enters the 6-digit code. phone_verified_at is stamped server-side. Until this field is non-null, the Prime Time toggle is grayed out and disabled.
  4. Step 4 — Explicit opt-in toggle. The user must actively toggle ON the "Prime Time SMS alerts" switch. The toggle is OFF by default and is unrelated to any other preference (push, email). Directly above the toggle is the TCPA-required disclosure reproduced verbatim below.
  5. Step 5 — Server-side consent stamp. The backend stamps sms_primetime_alerts_opt_in_at = NOW() with the user's IP and user-agent for TCPA evidence. The user is NOT added to the next outbound batch until this row exists.

Every toggle is OFF by default. Active consent is required at each step. There is no pre-checked option, no bundled consent, and no "agree to all" mechanic.

Step 1 (age gate) — exact UI on /signup

Sign up

Email [input]

Password [input]

[Submit disabled until checked]

Step 3 (phone verification) — exact UI on /account → Notifications

Verify your phone

We'll text a 6-digit code to verify it's really you.

Mobile number +1 ___ ___ ____

Send code

By entering your number, you agree we may text you a one-time code. Standard message and data rates may apply.

Step 4 (opt-in toggle) — exact UI on /account → Notifications

This is a faithful HTML reproduction of the React component SmsPreferencesCard rendered at https://app.bookieslip.com/account on the Notifications tab. Source code: SmsPreferencesCard.tsx .

📱

Prime Time SMS alerts

We'll text ••• ••• 1234 when Prime Time picks drop (6pm ET weekdays, 11am ET weekends).

TCPA disclosure copy (visible verbatim directly below the toggle):

By enabling, you agree to receive recurring autodialed messages from BookieSlip Prime Time alerts at the verified mobile number. Message frequency: up to 1 message per day. Message and data rates may apply. Reply STOP to unsubscribe. Reply HELP for help, or contact support@bookieslip.com. Mobile numbers are not shared with third parties.

Opt-in evidence stored server-side

When a user toggles ON, the backend (views_sms_prefs.py) enforces these gates and records:

Gate Behavior
Phone verified? If phone_verified_at IS NULL, returns HTTP 409 PHONE_NOT_VERIFIED. UI funnels user back to phone-OTP flow.
Previously opted out via STOP? If sms_opt_out_at IS NOT NULL, returns HTTP 409 SMS_OPT_OUT_LOCKED. Re-opt-in requires support ticket.
On a paid tier? Audience filter excludes free-tier users at send time. Free users cannot opt into this program.

On successful toggle, the User row is updated:

Retention: 4 years from opt-in OR opt-out, whichever is later (TCPA statute of limitations).

STOP and HELP handling

Inbound messages are routed to a Twilio webhook at https://api.bookieslip.com/api/v1/notifications/sms/inbound/ which:

Required carrier disclosures — verbatim

Every outbound message in this campaign starts with:

BookieSlip:

And ends with:

Reply STOP to opt out.

Message frequency: up to 1 message per day.
Message and data rates may apply. Standard message and data rates from your mobile carrier may apply to each message. BookieSlip does not charge a separate fee for SMS notifications. Mobile numbers are not shared with third parties.

Sample messages

  1. BookieSlip: Prime Time picks just dropped. 12 games on the board. See your edges: bookieslip.com/today Reply STOP to opt out.
  2. BookieSlip: Tonight's Prime Time picks are live. 16 games, best edge 8%. View at bookieslip.com/today Reply STOP to opt out.
  3. BookieSlip: NBA + NHL Prime Time picks are ready. 9 games tonight. Open bookieslip.com/today to see your daily slate. Reply STOP to opt out.
  4. BookieSlip: Saturday Prime Time slate just published. 14 games across MLB, NHL, and NBA. View picks: bookieslip.com/today Reply STOP to opt out.
  5. BookieSlip: Your daily Prime Time picks are live. 10 games on the board. Open the app: bookieslip.com/today Reply STOP to opt out, HELP for help.

Legal pages

Contact