Skip to main content
Hosted SMS lets you add messaging capabilities to phone numbers that stay with your current voice provider. Your existing voice service continues uninterrupted — Telnyx handles only the SMS and MMS routing. This is ideal for:
  • Landline numbers that need texting capabilities
  • Business numbers where you want to keep your voice provider but add programmable messaging
  • Gradual migration — test Telnyx messaging before a full port
Hosting a number is not the same as porting. Your voice service stays with your current provider. Only SMS/MMS traffic routes through Telnyx.

How it works

StepWhat happensTimeline
1. Eligibility checkVerify your numbers can be hostedInstant
2. Create orderSubmit a hosted SMS orderInstant
3. Verify ownershipConfirm you own the numbers via SMS code5 minutes
4. Upload documentsSubmit LOA and recent provider billInstant
5. Telnyx reviewOur team reviews and activates1-3 business days

Step 1: Check number eligibility

Not all numbers can be hosted. Check eligibility before creating an order.
curl -X POST https://api.telnyx.com/v2/messaging_hosted_number_orders/eligibility_numbers_check \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d '{
    "phone_numbers": ["+13125550001", "+13125550002"]
  }'

Eligibility statuses

StatusDescriptionAction
eligibleNumber can be hostedProceed with order
number_is_not_a_us_numberOnly US numbers supportedUse a US number
number_can_not_be_wirelessWireless numbers not supportedUse a landline or VoIP number
number_can_not_be_in_telnyxAlready on Telnyx platformNo hosting needed — number already works
number_can_not_hosted_with_a_telnyx_subscriberAlready hosted by another Telnyx userContact support
number_can_not_be_active_in_your_accountActive in your account alreadyCheck your number inventory
number_is_not_a_valid_routing_numberInvalid routing numberVerify the number with your provider
number_is_not_in_e164_formatWrong formatUse E.164: +1 followed by 10 digits
billing_account_check_failedBilling issueCheck your account billing status
billing_account_is_abolishedAccount closedContact support

Step 2: Create a hosted SMS order

curl -X POST https://api.telnyx.com/v2/messaging_hosted_number_orders \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -d '{
    "messaging_profile_id": "YOUR_MESSAGING_PROFILE_ID",
    "phone_numbers": ["+13125550001"]
  }'
Numbers are created in pending status. They stay pending until you complete verification and document upload.

Step 3: Verify phone number ownership

Prove you own the numbers by receiving and entering SMS verification codes.

3a. Request verification codes

curl -X POST \
  "https://api.telnyx.com/v2/messaging_hosted_number_orders/{order_id}/verification_codes" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "verification_method": "sms",
    "phone_numbers": ["+13125550001"]
  }'

3b. Submit verification codes

curl -X POST \
  "https://api.telnyx.com/v2/messaging_hosted_number_orders/{order_id}/validation_codes" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "verification_codes": [
      {"phone_number": "+13125550001", "code": "87643"}
    ]
  }'
A successful verification returns verified status. The number status then changes to ownership_successful.

Step 4: Upload authorization documents

After verification, upload two PDF documents:
  1. Letter of Authorization (LOA) — signed authorization to host the number
  2. Recent bill — from your current voice provider showing the number
curl -X POST \
  "https://api.telnyx.com/v2/messaging_hosted_number_orders/{order_id}/actions/file_upload" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  --form "loa=@/path/to/loa.pdf" \
  --form "bill=@/path/to/bill.pdf"
After upload, the Telnyx team reviews your order and activates the number(s). This typically takes 1-3 business days.

Check order status

curl -s "https://api.telnyx.com/v2/messaging_hosted_number_orders/{order_id}" \
  -H "Authorization: Bearer YOUR_API_KEY" | jq '{status, phone_numbers: [.phone_numbers[] | {phone_number, status}]}'

Order statuses

StatusMeaning
pendingOrder created, awaiting verification and documents
loa_file_successfulDocuments uploaded successfully
successfulOrder complete — numbers are active
failedActivation failed (see failure statuses)
deletedOrder was cancelled

Webhook notifications

Hosted SMS orders trigger webhooks to your messaging profile’s configured webhook URL. Set up a handler to track order progress in real time.
from flask import Flask, request

app = Flask(__name__)

@app.route("/webhooks/hosted-sms", methods=["POST"])
def hosted_sms_webhook():
    event = request.json["data"]
    event_type = event["event_type"]
    payload = event["payload"]

    order_id = payload["order_id"]
    order_status = payload["order_status"]

    print(f"Event: {event_type}")
    print(f"Order {order_id}: {order_status}")

    for num in payload.get("numbers", []):
        print(f"  {num['value']}: {num['status']}")

    # Handle specific events
    if order_status == "successful":
        print("Numbers are active! Ready to send messages.")
    elif order_status == "failed":
        print("Order failed. Check number statuses for details.")

    return "", 200

Webhook event types

EventTriggered when
messaging_hosted_numbers_orders.createdOrder is created
messaging_hosted_numbers_orders.updatedStatus changes (verification, LOA upload, activation, failure)
messaging_hosted_numbers_orders.deletedOrder is deleted

Email and Portal notifications

You can also receive email notifications:
1

Create notification profile

Go to Advanced Features → Notifications and click New Profile.
2

Add email channel

Click New Channel, select your profile, choose Email, and enter your address.
3

Configure settings

Click New Settings, select Messaging Hosted SMS Activity, and link to your profile.

Troubleshooting failed orders

Cause: The losing carrier (your current voice provider) rejected the hosting request.Common reasons:
  • Number is under contract with restrictions on SMS routing changes
  • Provider doesn’t support hosted SMS arrangements
  • Account information mismatch between LOA and provider records
Fix:
  • Contact your voice provider to understand the rejection
  • Verify your LOA matches the account holder name exactly
  • Some carriers require you to call and authorize the SMS routing change
Cause: The number’s carrier does not support hosted SMS with Telnyx.Fix:
  • Consider porting the number fully to Telnyx instead
  • Contact Telnyx support to check if the carrier has been added since your last attempt
Cause: Specific number was rejected by the losing carrier while other numbers in the order may have succeeded.Fix:
  • Check if this specific number has different account ownership
  • Create a separate order for this number after resolving with your provider
Cause: The number is already hosted on Telnyx by another account.Fix:
  • If you own both accounts, remove the hosting from the other account first
  • If not, contact Telnyx support to resolve the conflict
Cause: The activation process timed out waiting for carrier response.Fix:
  • Create a new order for the same number
  • If it fails again, contact Telnyx support — the carrier may need manual intervention
Cause: The SMS verification code wasn’t delivered to the phone number.Fix:
  • Ensure the number can receive SMS (landlines may need the current provider to enable it)
  • Check if the number has any SMS blocking enabled
  • Request the code again — you can retry multiple times
  • If the number truly cannot receive SMS, contact Telnyx support for alternative verification
Cause: The Letter of Authorization didn’t meet requirements.Common issues:
  • LOA not signed
  • Name on LOA doesn’t match the voice provider account
  • LOA template is outdated
Fix:
  • Download the latest LOA template from Telnyx support
  • Ensure the authorized signer matches the account holder
  • Upload a new LOA via the API or Portal
Known limitation: Hosted numbers may not appear in the Portal number inventory. They are accessible via the API.
# List your hosted numbers
curl -s "https://api.telnyx.com/v2/messaging_hosted_number_orders" \
  -H "Authorization: Bearer YOUR_API_KEY" | jq '.data[] | select(.status == "successful")'

Failed order and number statuses reference

Order statuses

StatusDescription
carrier_rejectedLosing carrier rejected the porting request
failedOrder closed — contact support
ineligible_carrierNumber’s carrier doesn’t support hosted SMS

Number statuses

StatusDescription
failedNumber closed — contact support
failed_carrier_rejectedLosing carrier rejected this number
failed_ineligible_carrierNumber’s carrier doesn’t support hosted SMS
failed_number_already_hostedAlready hosted by another Telnyx user
failed_number_not_foundNumber not found in routing database
failed_timeoutActivation timed out

Next steps