All docs

Compliance

STOP/HELP autoresponse, opt-out registry, and the no-10DLC story.

senderZ handles the core CTIA / TCPA obligations automatically. You do not run a separate STOP list, do not register a 10DLC campaign, and do not write a HELP autoresponder.

STOP keyword (opt-out)

Inbound message normalized to one of:

STOP, STOPALL, UNSUBSCRIBE, CANCEL, END, QUIT

Triggers:

  1. We INSERT a row in opt_outs for (tenant_id, phone_number).
  2. Future sends from any of your API keys to that number fail at the router with 403 OPTED_OUT.
  3. You still receive the message.received webhook for the STOP message itself.

The opt-out registry is per-tenant. Two different tenants in our system maintain independent opt-out lists.

START keyword (opt-in)

Inbound message normalized to START, UNSTOP, or YES re-enables sends to that number for the same tenant.

HELP keyword (autoresponse)

Inbound HELP / INFO / AIDE triggers a CTIA-compliant outbound reply assembled from your persona profile:

{business_name}: For support, contact {help_contact}. Reply STOP to unsubscribe.

business_name comes from ai_personas.business_name, falling back to tenants.name. help_contact comes from ai_personas.voice_handoff_number. When neither is set we send a generic fallback.

Override the HELP text

Set ai_personas.help_response via PUT /v1/ai/persona:

curl -X PUT https://api.senderz.com/v1/ai/persona \
  -H "Authorization: Bearer tf_live_YOUR_KEY" \
  -d '{
    "help_response": "Bella Cafe support: bella@example.com. Reply STOP to unsubscribe."
  }'

When help_response is set, it replaces the entire template (no variable substitution).

Quiet hours

Marketing messages (message_type: "marketing") are blocked between 20:00 and 08:00 in the recipient’s local time zone. OTP and alert types are exempt — emergency comms must always go through.

A2P 10DLC

senderZ does not use 10DLC. We deliver via a proprietary iMessage bridge with SMS fallback through dedicated devices, not via long-code carrier registration. You do not need a Brand or Campaign at The Campaign Registry. Same for toll-free verification — irrelevant.

If your downstream compliance program asks “what’s your 10DLC campaign ID?” the answer is “we don’t operate on 10DLC.”

Phone warming

New numbers in our pool ramp up traffic gradually to avoid carrier filtering:

Days since first sendDaily new-contact cap per number
1–710
8–1425
15+50

This is the routing layer enforcing it on your behalf — you don’t see the cap directly, just longer queue times when too many new contacts hit one number.

Every send records the consent state we believed at send time. Pull the audit trail with:

curl https://api.senderz.com/v1/compliance/consent \
  -H "Authorization: Bearer tf_live_YOUR_KEY"
  • Webhooks — STOP/HELP message visibility