Send SMS
Send a single SMS message with comprehensive delivery tracking, automatic number formatting, and real-time status updates.
International Format Support
Automatically converts local Ghanaian numbers (055xxxxxxx) to international format (23355xxxxxxx)
Smart Segmentation
Messages >160 characters are automatically split into multiple segments (max 1530 chars)
Sender ID Verification
Only pre-approved sender IDs can be used. Pending IDs will be automatically rejected.
Delivery Tracking
Real-time delivery status with provider-level feedback and error codes
Authentication Required
150ms
95th percentile
₵0.035
1 credit = 1 SMS
1530
characters (10 segments)
100/s
per API key
Request Body
{"to": "0555539152","from": "YourBrand","message": "Hello from Sendexa!"}
Response
{"success": true,"message": "SMS sent successfully","data": {"id": "clxyz123abc","messageId": "exa_api_123456789_abc123def","status": "delivered","cost": 1,"to": "233555539152","from": "YourBrand","segments": 1,"timestamp": "2024-01-15T10:30:00Z","estimatedDelivery": "2024-01-15T10:30:05Z"}}
Try It Yourself
https://api.sendexa.co/v1/sms/sendCode Examples
curl -X POST 'https://api.sendexa.co/v1/sms/send' \-H 'Content-Type: application/json' \-H 'Authorization: Basic YOUR_DASHBOARD_BASE64_TOKEN' \-d '{"to": "0555539152","from": "YourBrand","message": "Hello from Sendexa SMS API!"}'
Common Use Cases
Two-Factor Authentication
Send verification codes with 5-minute expiry
Promotional Messages
Schedule campaigns with personalized content
Order Confirmations
Real-time updates with delivery tracking
Rate Limits
HTTP Status Codes
| Code | Status | Description |
|---|---|---|
| 200 | OK | SMS sent successfully |
| 400 | Bad Request | Invalid phone number or missing parameters |
| 401 | Unauthorized | Invalid or missing API credentials |
| 403 | Forbidden | Sender ID not approved or insufficient credits |
| 429 | Too Many Requests | Rate limit exceeded (100 requests/second) |
Best Practices
- Always validate phone numbers client-side before sending
- Store messageId for future status checks and resends
- Implement exponential backoff for retries on 429 responses
- Use webhooks instead of polling for delivery status updates