Base URL
ProductionAll requests are sent over HTTPS. Use JSON request bodies and expect JSON responses.
https://api.tsconect.com/v1
Authentication and API Keys
Authenticate every request with a bearer token generated from your TSCONECT dashboard. Keep keys private and rotate them when team access changes.
Authorization: Bearer ts_live_xxxxxxxxxxxxxxxxx
Content-Type: application/json
Live KeyProduction traffic
Test KeySandbox traffic
RotateAccess control
Send Single SMS
POSTPOST /messages/send
| Parameter | Type | Required | Description |
|---|---|---|---|
| sender | string | Yes | Approved sender ID. |
| to | string | Yes | Recipient phone number in international format. |
| message | string | Yes | SMS body, up to multipart SMS limits. |
| callback_url | string | No | Webhook URL for delivery updates. |
{
"sender": "TSCONECT",
"to": "+254700000000",
"message": "Your OTP is 847291.",
"callback_url": "https://example.com/sms/callback"
}
{
"message_id": "msg_01HX92",
"status": "queued",
"parts": 1,
"cost_units": 1
}
Bulk Send
POSTUse the bulk endpoint when sending the same campaign to multiple recipients or when merging template variables per contact.
POST /messages/bulk
{
"sender": "TSCONECT",
"template": "Hi {name}, your appointment is {date}.",
"recipients": [
{ "to": "+254700000001", "name": "Jane", "date": "Friday" }
]
}
Message Status Lookup
GETGET /messages/{message_id}
{
"message_id": "msg_01HX92",
"status": "delivered",
"delivered_at": "2026-04-28T09:14:00Z"
}
Delivery Callbacks
Set a callback URL to receive delivery updates. Your endpoint should return a 2xx response quickly.
{
"event": "message.delivered",
"message_id": "msg_01HX92",
"to": "+254700000000",
"status": "delivered",
"timestamp": "2026-04-28T09:14:00Z"
}
Errors
| Code | Status | Meaning | Resolution |
|---|---|---|---|
| 400 | Bad Request | Invalid payload or missing field. | Check required parameters. |
| 401 | Unauthorized | Missing or invalid API key. | Verify bearer token. |
| 402 | Insufficient Credits | Account has no SMS units. | Top up your account. |
| 429 | Rate Limited | Too many requests. | Retry with backoff. |
| 500 | Server Error | Temporary platform issue. | Retry or contact support. |