Skip to main content
This guide covers SMS messaging, character limits, concatenation, geo permissions, and delivery.

Character Limits

GSM-7 Encoding (Standard Characters)

Message LengthSegmentsCharacters per Segment
1-160 characters1160
161-1600 charactersMultiple153 (7 chars for header)
Maximum: 1,600 characters (splits into ~11 segments)

Unicode Encoding (Special Characters)

Message LengthSegmentsCharacters per Segment
1-70 characters170
71+ charactersMultiple67 (3 chars for header)
When any Unicode character appears in your message, the entire message uses UCS-2 encoding.

Automatic Encoding

Enable automatic encoding to replace Unicode characters with GSM-7 equivalents:
  1. Navigate to Messaging > Settings > Other Settings
  2. Enable Auto-replace
This prevents accidental segmentation from smart quotes, em dashes, etc.

SMS Concatenation

Long messages are automatically split and reassembled.

How It Works

  1. Plivo splits message into segments
  2. Concatenation header added to each segment
  3. Carrier reassembles at delivery
  4. Recipient sees single message

Billing

Each segment is billed separately. A 200-character message = 2 segments = 2x SMS cost.

Send SMS

Single Message

curl -X POST "https://api.plivo.com/v1/Account/{auth_id}/Message/" \
  -u "{auth_id}:{auth_token}" \
  -H "Content-Type: application/json" \
  -d '{
    "src": "14151234567",
    "dst": "14157654321",
    "text": "Hello from Plivo!"
  }'

Bulk Messages

Send to multiple recipients in one request:
curl -X POST "https://api.plivo.com/v1/Account/{auth_id}/Message/" \
  -u "{auth_id}:{auth_token}" \
  -H "Content-Type: application/json" \
  -d '{
    "src": "14151234567",
    "dst": "14157654321<14158765432<14159876543",
    "text": "Bulk message to multiple recipients"
  }'
Separate destinations with < character.

Receive SMS

Configure Inbound URL

  1. Create an application with a message_url
  2. Assign a Plivo number to the application
  3. Plivo POSTs inbound messages to your URL

Message Delivery Flow

StageDescription
ReceivedPlivo receives from carrier (charged)
DeliveredSuccessfully posted to your message_url
UndeliveredFailed to deliver to your URL
If message_url is not configured, messages remain in “received” status.

Source Number Requirements

US and Canada

  • Must use Plivo number as source
  • Non-Plivo numbers not permitted (telecom regulations)

International

  • Dynamic sender IDs may be used
  • Delivery not guaranteed for non-Plivo numbers
  • Check country coverage for sender ID support

Geo Permissions

Control which countries can receive your SMS.

Default Enabled Countries

  • United States
  • United Kingdom
  • India

Configure Geo Permissions

  1. Navigate to Messaging > Settings > Geo Permissions
  2. Enable/disable countries as needed
  3. Set messages-per-hour fraud thresholds

Subaccount Permissions

By default, subaccounts inherit main account settings. Override for subaccount:
  1. Go to Geo Permissions
  2. Select subaccount from dropdown
  3. Customize settings
  4. Subaccount shows “Overridden” tag
Remove override:
  1. Select overridden subaccount
  2. Click Remove Override

Error Code 450

Messages to disabled countries fail with error 450: “destination country barred.”

SMS Pumping Protection

SMS pumping is fraud where attackers flood OTP fields with fake requests to premium numbers.

Protection Features

Enabled by default for all accounts:
  • Automated traffic analysis
  • Suspicious pattern detection
  • Alerts for unusual activity

Prevention Best Practices

  • Enable Geo Permissions
  • Set rate limits on OTP endpoints
  • Implement CAPTCHA on forms
  • Monitor traffic patterns
  • Use Plivo’s fraud detection tools

Access Message Content

Message content is stored for 7 days.

View in Console

  1. Navigate to Messaging > Logs
  2. Search by timeframe or UUID
  3. View message details
Note: Only available if data logging is enabled.

Authorize Content Access

Allow Plivo support to view content for debugging:
  • Helps identify spam filter triggers
  • Assists with delivery issues
  • Enables content policy review

Insufficient Balance

When balance is insufficient:
  1. Messages fail with error code 900
  2. API requests fail for 2 minutes with “Insufficient Credit”
  3. Queued messages continue to fail until recharged
Set up auto-recharge to prevent interruptions.

Carrier Surcharges

Toll-Free Surcharges (US)

CarrierSurcharge per Segment
Verizon$0.0025
T-MobileVaries
AT&TVaries
Surcharges appear as separate invoice line items.

Number Lookup API

Get information about phone numbers:
  • Local and E.164 formatting
  • Carrier information
  • Caller ID name (CNAM)
See Lookup API documentation.