US carriers require campaign registration before a phone number can send any meaningful volume of SMS. AppEngine handles this through Twilio's A2P 10DLC workflow for local numbers and toll-free verification for toll-free numbers. The submission is automated; the carrier review still takes days.
Check status first
/phone/numbers/sms-status/{phoneId}JWTTells you whether the number is registered, pending review, approved, or rejected. Returns the Twilio campaign / messaging-service SID and any rejection reasons.
See requirements
/phone/numbers/{phoneId}/sms-requirementsJWTLists the fields you'll need before submitting and any registration fees. Local numbers (10-digit) need brand + campaign info; toll-free numbers only need verification details. The exact fee depends on use case and is fronted by Twilio.
Submit registration
/phone/numbers/register-sms/{phoneId}JWT{
"useCase": "customer_care",
"brandName": "Acme Corp",
"brandDescription": "Acme provides cloud project management software for small businesses.",
"sampleMessages": [
"Hi {{firstName}}, your password reset code is 123456. It expires in 10 minutes.",
"Acme: Your weekly project digest is ready. View at https://acme.app/digest"
]
}
| Field | Type | Description |
|---|---|---|
| useCase* | string | One of |
| brandName | string | Legal entity sending the messages. Required for 10DLC; ignored for toll-free. |
| brandDescription | string | What your business does. Carriers actually read this. |
| sampleMessages | string[] | 2-5 representative messages. Use real templates with |
The endpoint creates (or reuses) the org's brand record in Twilio, attaches the number to a messaging service, and submits a campaign of the chosen type. It does not block on carrier review — status moves to pending and you poll /phone/numbers/sms-status/{phoneId} (or wait for a webhook).
A2P 10DLC implications
Once you call this endpoint:
- Brand vetting — Twilio submits your
brandName/brandDescriptionto The Campaign Registry. A standard brand vetting fee is charged to the connected Twilio account. - Campaign approval — typically 1-3 weeks for marketing, faster for customer_care.
- Throughput — approved campaigns get higher per-second throughput. Unregistered local numbers are throttled to ~1 message/sec and may be filtered entirely.
- Opt-out keywords — STOP / UNSUBSCRIBE / CANCEL are honored automatically by Twilio. The opt-out is also recorded against the contact in CRM so subsequent automations skip them.
- Help keyword — replies to HELP get an auto-response with brand identification. Configure the response per phone via
PUT /phone/numbers/{phoneId}smsConfig.autoReplyMessage.
Sending marketing SMS from an unregistered 10DLC number gets the campaign auto-rejected and the number sometimes blocked. If sms-status is anything other than approved, route messages through an approved number or wait.
Toll-free verification
Toll-free SMS uses a separate verifyTollFree flow Twilio offers. The register-sms endpoint detects the number type and submits the right form. Approval is typically faster (3-5 business days) but the per-message price is higher.
Inbound SMS routing
Twilio POSTs every inbound SMS to:
/connect/webhook/twilio/smsNo authThe webhook resolves the destination number, looks up its routing config, and:
- Stores the message as a
chat_message(orcrm_communication) so it shows up in the unified inbox. - Pushes it to assigned softphones via the chat WebSocket if any are subscribed with capability
'sms'. - Triggers any matching SMS keyword automation (configured per IVR routing record under
sms.keywords[]). - Sends an auto-reply if the phone's
smsConfig.autoReplyEnabledistrue.
Outbound SMS
Outbound goes through the broadcast module for campaigns or the send_sms automation action for one-offs:
// Inside an automation flow
{ type: 'send_sms', config: { to: '{{contact.phone}}', message: 'Hi {{contact.firstName}}, ...' } }
The send routes through the messaging service Twilio assigned during registration, so throughput limits and opt-out handling are enforced automatically.
Configure auto-reply
/phone/numbers/{phoneId}JWT{ "smsConfig": { "autoReplyEnabled": true, "autoReplyMessage": "Thanks! A team member will reply shortly." } }
Cost
Per-message SMS costs are billed by Twilio and metered through the org's Upstream connection. Brand vetting, campaign fees, and per-message charges are all visible in Usage > SMS once tracking is enabled.