Home
Compliance evidence
For Twilio A2P 10DLC reviewers

SyncBook SMS opt-in — compliance summary

This page documents how the public opt-in page at /sms-signup satisfies each A2P 10DLC requirement. Every claim below can be verified live at that URL without logging in. This page was created in response to Twilio Error 30923 (forced consent) to document that SMS opt-in is now entirely optional and clearly separated from account creation.

Response to Error 30923 (forced consent)
Twilio flagged the previous /sms-signup page because both the phone number field and the consent checkbox were required to progress to account creation. That has been fixed. The current page:
  • Offers a primary green button labeled “Create account without SMS” that is enabled on page load, requires no phone number, requires no consent checkbox, and creates a fully functional SyncBook account.
  • Keeps the phone input, TCPA consent checkbox, and SMS-submit button collapsed and hidden by default. They render only after the visitor actively checks a separate opt-in toggle.
  • Un-checking the opt-in toggle collapses the section AND clears any values entered — visitors can freely change their mind at any point.
  • Displays a blue “SMS is 100% optional” disclosure banner above the opt-in section, restating that every SyncBook feature works without SMS.
A2P 10DLC requirement checklist
1. SMS opt-in must be optional and consumers can decline while still using the service.
Satisfied by
A green primary CTA titled 'Create account without SMS' is the visually dominant path on the page. It requires zero form input, does not collect a phone number, and creates a fully functional SyncBook account. Every SyncBook feature (transactions, budgets, reconcile, forecasting, imports, receipts) is available on that account without SMS ever being enabled.
Visible at /sms-signup — data-testid: skip-sms-create-account. Button is enabled on page load with no prerequisites.
2. Consent must be explicit and unchecked by default.
Satisfied by
The TCPA consent checkbox defaults to unchecked and only becomes visible after the visitor proactively checks a separate 'Optional — also enable text-in transactions' toggle. Even after expanded, the submit button remains disabled until both a phone number is entered AND the TCPA checkbox is manually checked.
React initial state: consent=false, wantsSms=false. Submit disabled attribute: !phone.trim() || !consent.
3. Consent must be specific to the campaign use case.
Satisfied by
The consent copy explicitly states: 'I agree to receive transactional SMS from SyncBook at the number above'. It describes exactly the message types (transaction confirmations and balance summaries), does not lump in marketing or third-party use, and clarifies that SyncBook only replies to messages initiated by the user.
Consent copy near data-testid: sms-signup-consent-wrap.
4. Message frequency must be disclosed.
Satisfied by
Consent copy discloses: 'Message frequency varies (typically 1–5 msgs/day). Message and data rates may apply.'
Within the consent checkbox label at /sms-signup.
5. STOP and HELP instructions must be present.
Satisfied by
Consent copy states: 'Reply STOP to unsubscribe or HELP for help at any time.' Backend also supports STOP and HELP as first-class inbound SMS commands with immediate carrier-compliant auto-replies.
Consent copy at /sms-signup + SMS command handler in server.py.
6. Privacy Policy and Terms links must be present and functional.
Satisfied by
Both links appear inside the consent copy and route to standalone public pages at /privacy and /terms.
7. Consumer information must not be sold or shared with third parties for messaging or marketing.
Satisfied by
Consent copy explicitly states: 'My phone number will not be shared with third parties.' The reviewer-facing bullets on /sms-signup also explicitly declare 'Will not: sell or share your phone number with any third party.'
Consent copy + reviewer bullets at data-testid: sms-signup-details.
What a reviewer sees at /sms-signup
State 1 — On page load (default)
Phone/consent are NOT rendered. Primary action requires no input.
[Green button] Create account without SMS →
Optional — also enable text-in transactions
(phone field, consent, submit are HIDDEN below this line)
State 2 — After user opts in
Only if visitor actively checks the opt-in toggle.
[Green button] Create account without SMS →
Optional — also enable text-in transactions ✓
Phone: [empty text input]
TCPA consent (starts UNCHECKED)
[Disabled] Create account WITH SMS enabled →
Both states are verifiable live at /sms-signup.
Sample messages consumers will receive
SyncBook only replies to inbound messages initiated by the consumer. Every outbound message body used by the program:
  • Confirmation: OK 1: -4.50 coffee | Bal 233.50
  • Chained confirmation: OK 2: -4.50 coffee, -12 lunch | Bal 217.50
  • Balance digest: Main Checking: $233.50 · Savings: $500.00
  • Recent digest: Last 3: 2026-02-22: -$4.50 coffee ...
  • HELP reply: SyncBook: '-4.50 coffee', '+150 pay'. Chain w/ ';': '-4.50 coffee;-12 lunch'. balance | recent | menu | acct:name | force
  • STOP reply (via Twilio): You have successfully been unsubscribed. You will not receive any more messages from this number. Reply START to resubscribe.
  • Unregistered-phone reply: This number isn't linked to a SyncBook account. Log in and add your phone under Profile → SMS.

Full annotated versions of each sample (with the user's inbound message shown side-by-side) are in /terms § 13 (Sample messages).

Questions? Contact hello@sync-book.app. Last updated Feb 2026.