Communicate · SMS
Bulk SMS API & user manuals
Connect your product to the SILABI SMS gateway, or learn the web panel step by step. Every endpoint ships with copyable cURL, JavaScript, PHP and Python examples.
https://api.silabi.co.tz/v1/smsGet startedIntroduction
Overview
The SILABI SMS gateway delivers bulk and transactional messages across mobile networks in Tanzania and beyond, through one JSON HTTP API and a web control panel.
- Two-way messaging with routing based on origination or termination
- Network-operator based billing (MCC/MNC) with rate management
- Web control panel with CSV/Excel bulk upload and contact management
- Detailed delivery analytics for both outbound and inbound traffic
Every endpoint shares the base URL https://api.silabi.co.tz/v1/sms and accepts and returns JSON.
Introduction
Getting started
- 1Create a SILABI account and ask your account manager to activate the SMS plugin.
- 2Open the web panel and go to Settings, then API keys, to copy your ApiKey, ClientId and AccessKey.
- 3Register and get approval for at least one Sender ID before sending live traffic.
- 4Test your integration against the balance endpoint, then send your first message.
Placeholders in the code samples on this page — {{API_KEY}}, {{CLIENT_ID}} and {{ACCESS_KEY}} — are replaced with the values from your own account.
Introduction
Authentication
Every request is authenticated with your ApiKey and ClientId, passed URL-encoded for GET requests or in the JSON body for POST requests. An AccessKey header is also required.
| Parameter | Description | Type |
|---|---|---|
| ApiKey | Used for authentication. Pass in URL-encoded format. | String |
| ClientId | Used for authentication. Pass in URL-encoded format. | String |
Headers
| Header | Value |
|---|---|
| Content-Type | application/json |
| AccessKey | {{ACCESS_KEY}} |
Keep your keys on the server. Never expose them in browser or mobile app code, and rotate them from the panel if they leak.
HTTP API
Sending SMS
Send one or many messages with an HTTP POST request.
https://api.silabi.co.tz/v1/sms/SendSMScurl -X POST "https://api.silabi.co.tz/v1/sms/SendSMS" \
-H "Content-Type: application/json" \
-H "AccessKey: {{ACCESS_KEY}}" \
-d '{"ApiKey":"{{API_KEY}}","ClientId":"{{CLIENT_ID}}","SenderId":"SILABI","Message":"Karibu SILABI. Your code is 4821.","MobileNumbers":"255700000001,255700000002","Is_Unicode":false,"Is_Flash":false}'| Parameter | Description | Type |
|---|---|---|
| SenderId | Approved sender name or short code shown to the recipient. | String |
| Message | Message body. Long messages are split into multiple parts. | String |
| MobileNumbers | Comma separated numbers in international format, e.g. 255700000001. | String |
| Is_Unicode | true for non-GSM characters such as Swahili accents or emoji. | Boolean |
| Is_Flash | true to send as a flash message. | Boolean |
| ScheduleTime | Optional delivery time, format yyyy-MM-dd HH:mm. | String |
| GroupId | Optional contact group to send to instead of MobileNumbers. | String |
Successful response
{
"ErrorCode": 0,
"ErrorDescription": "Success",
"Data": [
{
"MobileNumber": "255700000001",
"MessageId": "9f1c8a7e-2c2f-4a1b-9c62-5f8a0f6e1b22",
"MessageErrorCode": 0,
"MessageErrorDescription": "Success"
}
]
}HTTP API
Checking account balance
To check remaining credits, send an HTTP GET request to the balance endpoint.
https://api.silabi.co.tz/v1/sms/Balancecurl -X GET "https://api.silabi.co.tz/v1/sms/Balance?ApiKey=%7B%7BAPI_KEY%7D%7D&ClientId=%7B%7BCLIENT_ID%7D%7D" \
-H "Content-Type: application/json" \
-H "AccessKey: {{ACCESS_KEY}}"| Parameter | Description | Type |
|---|---|---|
| ApiKey | Used for authentication. Pass in URL-encoded format. | String |
| ClientId | Used for authentication. Pass in URL-encoded format. | String |
HTTP response
{
"ErrorCode": 0,
"ErrorDescription": "Success",
"Data": [
{
"PluginType": "SMS",
"Credits": "TZS 1258400.0000"
}
]
}HTTP API
Delivery reports
Query the status of a sent message, or receive status updates automatically on a callback URL configured in the web panel.
https://api.silabi.co.tz/v1/sms/GetDLRcurl -X GET "https://api.silabi.co.tz/v1/sms/GetDLR?ApiKey=%7B%7BAPI_KEY%7D%7D&ClientId=%7B%7BCLIENT_ID%7D%7D&MessageId=9f1c8a7e-2c2f-4a1b-9c62-5f8a0f6e1b22" \
-H "Content-Type: application/json" \
-H "AccessKey: {{ACCESS_KEY}}"| Parameter | Description | Type |
|---|---|---|
| MessageId | Identifier returned by the SendSMS response. | String |
| start / end | Optional date range, format yyyy-MM-dd. | String |
Callback payload
{
"MessageId": "9f1c8a7e-2c2f-4a1b-9c62-5f8a0f6e1b22",
"MobileNumber": "255700000001",
"Status": "DELIVRD",
"SubmitDate": "2026-09-18 10:04:12",
"DoneDate": "2026-09-18 10:04:15"
}| Status | Meaning |
|---|---|
| DELIVRD | Message delivered to the handset. |
| SENT | Accepted by the operator, awaiting final report. |
| EXPIRED | Validity period passed before delivery. |
| UNDELIV | Operator could not deliver the message. |
| REJECTD | Rejected, usually an unapproved sender ID or blocked number. |
HTTP API
Error codes
Every response carries an ErrorCode and ErrorDescription. Zero means success.
| ErrorCode | Description | What to do |
|---|---|---|
| 0 | Success | No action needed. |
| 101 | Invalid ApiKey or ClientId | Re-copy your keys from the web panel. |
| 102 | Account inactive or suspended | Contact SILABI support. |
| 103 | Insufficient credits | Top up your account balance. |
| 104 | Sender ID not approved | Request approval before sending. |
| 105 | Invalid mobile number | Use international format, e.g. 255700000001. |
| 106 | Message body empty or too long | Check the message content. |
| 500 | Internal gateway error | Retry with backoff, then contact support. |
Contacts & groups
Contact groups
Create and list groups so campaigns can target saved audiences.
https://api.silabi.co.tz/v1/sms/Groupscurl -X POST "https://api.silabi.co.tz/v1/sms/Groups" \
-H "Content-Type: application/json" \
-H "AccessKey: {{ACCESS_KEY}}" \
-d '{"ApiKey":"{{API_KEY}}","ClientId":"{{CLIENT_ID}}","GroupName":"Customers-Dar"}'| Parameter | Description | Type |
|---|---|---|
| GroupName | Name of the group, e.g. Customers-Dar. | String |
| GroupId | Identifier returned on creation, used when sending. | String |
Listing groups
https://api.silabi.co.tz/v1/sms/Groupscurl -X GET "https://api.silabi.co.tz/v1/sms/Groups?ApiKey=%7B%7BAPI_KEY%7D%7D&ClientId=%7B%7BCLIENT_ID%7D%7D" \
-H "Content-Type: application/json" \
-H "AccessKey: {{ACCESS_KEY}}"{
"ErrorCode": 0,
"ErrorDescription": "Success",
"Data": [
{ "GroupId": "12045", "GroupName": "Customers-Dar", "ContactCount": 3820 }
]
}Contacts & groups
Contacts and bulk upload
Add contacts one by one through the API, or upload them in bulk from the panel.
https://api.silabi.co.tz/v1/sms/Contactscurl -X POST "https://api.silabi.co.tz/v1/sms/Contacts" \
-H "Content-Type: application/json" \
-H "AccessKey: {{ACCESS_KEY}}" \
-d '{"ApiKey":"{{API_KEY}}","ClientId":"{{CLIENT_ID}}","GroupId":"12045","MobileNumber":"255700000001","FirstName":"Amina","LastName":"Juma"}'CSV or Excel upload
In the panel, go to Contacts then Import and upload a CSV or Excel file with these columns in the first row.
MobileNumber,FirstName,LastName
255700000001,Amina,Juma
255700000002,Baraka,MsollaNumbers must be in international format without a plus sign or spaces. Duplicates within a group are skipped automatically.
Sender ID & templates
Sender ID request
A Sender ID is the name recipients see. It must be registered and approved by the mobile operators before any live traffic is allowed.
- 1In the panel, open Sender IDs then Request new and enter the name, up to 11 characters, no spaces.
- 2Upload a company registration certificate and a signed request letter.
- 3Describe the message use case, for example transactional alerts or marketing.
- 4Approval usually takes 2 to 5 working days; the status turns Approved when ready.
| Field | Rule |
|---|---|
| Length | Maximum 11 alphanumeric characters. |
| Characters | Letters and digits only, no spaces or symbols. |
| Ownership | Must relate to your registered business name or brand. |
Sender ID & templates
Message templates
Templates store approved message bodies with placeholders, which keeps transactional traffic consistent and faster to approve.
Hello {FirstName}, your SILABI balance is {Amount} TZS as of {Date}.https://api.silabi.co.tz/v1/sms/Templatescurl -X POST "https://api.silabi.co.tz/v1/sms/Templates" \
-H "Content-Type: application/json" \
-H "AccessKey: {{ACCESS_KEY}}" \
-d '{"ApiKey":"{{API_KEY}}","ClientId":"{{CLIENT_ID}}","TemplateName":"balance-alert","Template":"Hello {FirstName}, your SILABI balance is {Amount} TZS as of {Date}."}'| Parameter | Description | Type |
|---|---|---|
| TemplateName | Internal name for the template. | String |
| Template | Message body containing {Placeholder} tokens. | String |
| TemplateId | Returned on creation, can be used when sending. | String |
Placeholder values are supplied per recipient at send time; any placeholder left unset is delivered as an empty string.
User manual
Signing in and the dashboard
- 1Open the SILABI web panel and sign in with the email and password supplied to your organisation.
- 2Set a strong password on first login, then enable two-step verification under Profile, Security.
- 3The dashboard shows remaining credits, messages sent today, and delivery rate.
- 4Use Users then Invite to give colleagues their own logins instead of sharing one account.
User manual
Sending a campaign
- 1Go to Campaigns then New campaign and give the campaign a name.
- 2Choose an approved Sender ID from the dropdown.
- 3Pick recipients: paste numbers, choose a contact group, or upload a CSV or Excel file.
- 4Type the message, or load a saved template, and check the character and part counter.
- 5Send now, or set a date and time to schedule it.
- 6Confirm the summary screen: recipient count, parts per message, and estimated cost.
A message longer than 160 characters is sent as multiple parts and is charged per part. Swahili accents or emoji switch the message to Unicode, which reduces the limit to 70 characters per part.
User manual
Reports and top-up
- 1Open Reports then Delivery to filter by date, campaign, sender ID, or status.
- 2Export any report to CSV or Excel for accounting and reconciliation.
- 3Open Billing then Top up to add credits by mobile money or bank transfer.
- 4Set a low-balance alert so the team is emailed before credits run out.
User manual
Support
For sender ID approvals, billing questions, or integration help, contact the SILABI support team through the Help menu in the panel. Include your ClientId and, for delivery issues, the MessageId and recipient number so the message can be traced.
Try it
Test the gateway
Send a test message
Sends one real SMS through your SILABI account. Every test is recorded in your own history.
Sign in to send a test message.
Ask SILABI
Ask a question about the docs
The assistant answers from this documentation only, and can pass unanswered questions to SILABI support.
Documentation assistantAsk anything about the Bulk SMS API or the user manuals. Answers come from this documentation only.
