Documentation

SMS and registration

Register a number for SMS, complete A2P 10DLC, and route inbound messages.

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

GET/phone/numbers/sms-status/{phoneId}JWT

Tells you whether the number is registered, pending review, approved, or rejected. Returns the Twilio campaign / messaging-service SID and any rejection reasons.

See requirements

GET/phone/numbers/{phoneId}/sms-requirementsJWT

Lists 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

POST/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"
  ]
}
FieldTypeDescription
useCase*string

One of marketing, customer_care, transactional, mixed, low_volume. Determines the campaign type Twilio submits to the carriers.

brandNamestring

Legal entity sending the messages. Required for 10DLC; ignored for toll-free.

brandDescriptionstring

What your business does. Carriers actually read this.

sampleMessagesstring[]

2-5 representative messages. Use real templates with {{variables}} so reviewers see context.

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 / brandDescription to 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.
Don't send before approval

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:

POST/connect/webhook/twilio/smsNo auth

The webhook resolves the destination number, looks up its routing config, and:

  1. Stores the message as a chat_message (or crm_communication) so it shows up in the unified inbox.
  2. Pushes it to assigned softphones via the chat WebSocket if any are subscribed with capability 'sms'.
  3. Triggers any matching SMS keyword automation (configured per IVR routing record under sms.keywords[]).
  4. Sends an auto-reply if the phone's smsConfig.autoReplyEnabled is true.

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

PUT/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.