# 10DLC Pilot Tenant Registration Runbook Authored for GRO-106 Phase 1. --- ## Pre-Flight Checklist Before starting Telnyx registration, collect the following: | Item | Details | |------|---------| | Legal business name | Exact name on EIN / business registration | | EIN (Employer Identification Number) | 9-digit IRS format: XX-XXXXXXX | | Business type | Sole Proprietor / LLC / Corporation | | Primary contact email | General contact address (postmaster@, info@, etc.) | | Primary contact phone | Direct line for carrier verification | | Website URL | Must be live and contain privacy policy | | Sample message templates | See [Sample Templates](#sample-message-templates) below | | Messaging use case | Customer Care / Account Notification | --- ## Step 1 — Telnyx Account Requirements - Active Telnyx account with billing configured. - Role required: **Admin** or **Super User** to register brands and campaigns. --- ## Step 2 — Brand Registration ### Via Telnyx Console 1. Log in to [Telnyx Portal](https://portal.telnyx.com). 2. Navigate to **Messaging → A2P 10DLC → Brands**. 3. Click **Register Brand**. 4. Fill in: - **Brand Name**: Legal business name - **Legal Company Name**: Exact EIN name - **Company Type**: Select from dropdown - **EIN**: XX-XXXXXXX - **Primary Contact**: Name, email, phone - **Website**: Must be accessible - **BusinessVertical**: Select appropriate vertical 5. Acknowledge the **Terms of Service**. 6. Submit. ### Via API ```bash curl -X POST https://api.telnyx.com/v2/10dlc/brands \ -H "Authorization: Bearer $TELNYX_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Your Legal Business Name", "legal_company_name": "Your Legal Business Name", "company_type": "llc", "ein": "XX-XXXXXXX", "primary_contact": { "name": "Jane Doe", "email": "compliance@example.com", "phone": "+1XXXXXXXXXX" }, "website": "https://www.example.com", "business_vertical": "PROFESSIONAL_SERVICES" }' ``` **Response fields to record:** - `brand_id` — required for campaign registration - `brand_score` — affects campaign vetting speed ### Expected Fees | Fee Type | Amount | |----------|--------| | Brand registration fee | ~$0 (no direct fee from Telnyx) | | Campaign registration fee | ~$15–$25 per campaign (Telnyx fee, subject to change) | | Carrier fees | Passed through from T-Mobile/AT&T/Verizon | ### Expected Approval Window - **Vetting by Telnyx**: 1–3 business days after submission. - **Carrier (T-Mobile/AT&T/Verizon) review**: 2–5 business days after Telnyx approval. - Total end-to-end: **3–8 business days**. --- ## Step 3 — Campaign Registration ### Use Case Selection - **Primary**: Customer Care - **Secondary**: Account Notification ### Via Telnyx Console 1. Navigate to **Messaging → A2P 10DLC → Campaigns**. 2. Click **Register Campaign**. 3. Select **Brand** (use the brand registered in Step 2). 4. Fill in: - **Campaign Name**: e.g., `groombook-pilot-customer-care` - **Use Case**: Customer Care / Account Notification - **Sample Messages**: Paste exactly the templates from [Sample Templates](#sample-message-templates) below. - **Description**: Brief description of messaging program - **Estimated Volume**: Enter monthly estimate (e.g., 500) 5. Submit. ### Via API ```bash curl -X POST https://api.telnyx.com/v2/10dlc/campaigns \ -H "Authorization: Bearer $TELNYX_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "brand_id": "YOUR_BRAND_ID", "name": "groombook-pilot-customer-care", "use_case": "CUSTOMER_CARE", "sample_messages": [ "Hi {{first_name}}, this is a reminder from {{business_name}} that your appointment is scheduled for {{date}} at {{time}}. Reply STOP to opt out.", "Your appointment with {{business_name}} is confirmed for {{date}}. Need to reschedule? Reply HELP or call us at {{phone}}." ], "description": "Appointment reminders and account notifications for grooming clients", "estimated_monthly_volume": 500 }' ``` **Response fields to record:** - `campaign_id` — required for messaging profile - `status` — initially `PENDING`, transitions to `ACTIVE` after carrier approval ### Campaign Vetting — STOP/HELP Language Requirements Every campaign **must** include compliant STOP/HELP messaging. The following must appear in your sample messages or be included in your terms of service: - **STOP**: Users can text `STOP` to opt out of all messages. - **HELP**: Users can text `HELP` to receive contact information. Example STOP/HELP block: ``` Text STOP to opt out. Text HELP for help. Msg & data rates may apply. ``` --- ## Step 4 — Messaging Profile + Phone Number Provisioning ### Create Messaging Profile 1. In Telnyx Portal, navigate to **Messaging → Messaging Profiles**. 2. Click **Create Messaging Profile**. 3. Name it (e.g., `groombook-pilot-prod`). 4. Copy the **Messaging Profile ID** (`messaging_profile_id`) — record this in the DB. ### Provision a 10DLC Phone Number 1. Navigate to **Messaging → Phone Numbers**. 2. Search for a number in your desired area code. 3. Confirm the number is 10DLC-capable. 4. Purchase the number. ### Associate Number with Messaging Profile ```bash # Assign number to messaging profile curl -X PATCH https://api.telnyx.com/v2/phone_numbers/YOUR_PHONE_NUMBER_ID \ -H "Authorization: Bearer $TELNYX_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "messaging_profile_id": "YOUR_MESSAGING_PROFILE_ID" }' ``` --- ## Step 5 — Record in Database Once GRO-981 lands, record the following against the business record: ### SQL Path (when GRO-981 is complete) ```sql UPDATE businesses SET messaging_phone_number = '+1XXXXXXXXXX', telnyx_messaging_profile_id = 'YOUR_MESSAGING_PROFILE_ID', telnyx_brand_id = 'YOUR_BRAND_ID', telnyx_campaign_id = 'YOUR_CAMPAIGN_ID', telnyx_brand_status = 'APPROVED', telnyx_campaign_status = 'ACTIVE', updated_at = NOW() WHERE id = 'pilot_business_id'; ``` ### Manual Admin Path (before GRO-981) Until GRO-981 is complete, use the Telnyx Portal to verify and record values manually in your internal ops sheet: | Field | Value | |-------|-------| | `messagingPhoneNumber` | +1XXXXXXXXXX | | `telnyxMessagingProfileId` | xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx | | `telnyxBrandId` | xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx | | `telnyxCampaignId` | xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx | | `brandStatus` | APPROVED / PENDING | | `campaignStatus` | ACTIVE / PENDING | --- ## Sample Message Templates These must match exactly what your system will send. Vetting reviewers compare templates against actual traffic. ### Transactional Appointment Reminder ``` Hi {{first_name}}, this is a reminder from {{business_name}} that your appointment is scheduled for {{date}} at {{time}}. Reply STOP to opt out. Msg & data rates may apply. ``` ### Manual Staff Message ``` Your appointment with {{business_name}} is confirmed for {{date}}. Need to reschedule? Reply HELP for assistance or call us at {{phone}}. Msg & data rates may apply. ``` --- ## Failure Modes + Retry Guidance ### Vetting Rejection — Brand | Rejection Reason | Common Fix | |-----------------|------------| | Legal name mismatch with EIN | Ensure exact EIN name matches legal company name exactly | | Website not accessible / missing privacy policy | Add privacy policy page to website before resubmitting | | Incomplete primary contact | Provide direct phone and real email (no noreply) | | High-risk business vertical | Contact Telnyx support for pre-screening before resubmitting | ### Campaign Rejection | Rejection Reason | Common Fix | |-----------------|------------| | Sample messages do not match actual traffic | Update sample messages to match exactly what the system sends | | Missing STOP/HELP language | Add compliant STOP/HELP block to sample messages | | Volume estimate too low/high | Revise estimate to be realistic | | Use case mismatch | Re-select use case that matches actual messaging | ### Re-submission After fixing the rejection reason, re-submit via the same API endpoint. Telnyx will re-run vetting (typically 24–48 hours). --- ## Cost Summary ### Telnyx Fees (as of 2026) | Fee Type | Amount | Notes | |----------|--------|-------| | 10DLC number (monthly) | ~$1.00–$2.50/number | Varies by type and area code | | Outbound message | $0.005–$0.015/message | Depends on destination carrier | | Inbound message | Included | No charge for received messages | | Campaign registration | ~$15–$25 one-time | Per campaign, subject to change | ### Carrier Fees (T-Mobile / AT&T / Verizon) | Carrier | Outbound Fee | Notes | |---------|-------------|-------| | T-Mobile | ~$0.005–$0.01/message | Varies by message size (segment) | | AT&T | ~$0.005–$0.015/message | Varies by message size (segment) | | Verizon | ~$0.005–$0.01/message | Varies by message size (segment) | **Note**: Carrier fees are subject to change. Check [Telnyx pricing page](https://telnyx.com/pricing) and carrier fee schedules for current rates. ### Example Monthly Cost (Pilot — 500 messages/month) | Line Item | Cost | |-----------|------| | 1x 10DLC number | ~$2.00 | | 500 outbound messages | ~$5.00–$7.50 | | Carrier pass-through | ~$2.50–$7.50 | | **Estimated Monthly Total** | **~$9.50–$17.00** | --- ## Rollback / De-provisioning If the pilot tenant must be de-provisioned: 1. Release the phone number: Telnyx Portal → Phone Numbers → Release. 2. Archive the campaign: set status to `INACTIVE` via API or console. 3. Remove DB record: clear `messagingPhoneNumber`, `telnyxMessagingProfileId`, `telnyxCampaignId` fields in the business record. 4. Brand can remain registered (no harm) but will not be used. --- ## Contacts | Resource | Contact | |----------|---------| | Telnyx Support | support@telnyx.com | | Telnyx Dashboard | portal.telnyx.com | | Internal Engineering | Raise issue in GRO-106 | --- _Owner: Engineering · Last updated: 2026-05-04_