API Documentation
Mwongozo kamili wa endpoints na utekelezaji wa SmartsmsService.
Uthibitishaji (Authentication)
Kila ombi linatumia Basic Auth: Base64(apiKey:secretKey) kwenye header ya Authorization. Funguo zako tunazitoa baada ya kuagiza. Zihifadhi kwenye server, si kwenye app ya wateja.
Orodha ya API Endpoints
| Njia | Endpoint URL | Kazi yake |
| POST | https://apisms.beem.africa/v1/send | Kutuma SMS |
| GET | https://apisms.beem.africa/public/v1/vendors/balance | Kuangalia salio la SMS |
| GET | https://apisms.beem.africa/public/v1/sender-names | Orodha ya sender IDs |
| GET | https://apisms.beem.africa/public/v1/sms-templates | Orodha ya templates |
| POST | https://apisms.beem.africa/public/v1/sms-templates | Kutengeneza template |
| PUT | https://apisms.beem.africa/public/v1/sms-templates/{id} | Ku-update template |
| DELETE | https://apisms.beem.africa/public/v1/sms-templates/{id} | Futa template |
| GET | https://dlrapi.beem.africa/public/v1/delivery-reports | Delivery report (smsrtsms) |
Mfano wa haraka (cURL)
curl -X POST https://apisms.beem.africa/v1/send \
-H "Authorization: Basic BASE64(apiKey:secretKey)" \
-H "Content-Type: application/json" \
-d '{
"source_addr": "SENDER_ID",
"schedule_time": "",
"encoding": "0",
"message": "Habari kutoka SmartSMS",
"recipients": [{"recipient_id": 1, "dest_addr": "255700000000"}]
}'
SmartsmsService (Dart / Flutter)
import 'dart:convert';
import 'package:http/http.dart' as http;
class SmartsmsService {
final String apiKey;
final String secretKey;
final String sourceAddr;
SmartsmsService({
required this.apiKey,
required this.secretKey,
required this.sourceAddr,
});
String get _authHeader {
final credentials = '$apiKey:$secretKey';
Codec<String, String> stringToBase64 = utf8.fuse(base64);
return 'Basic ${stringToBase64.encode(credentials)}';
}
/// Kutuma SMS (POST /v1/send)
Future<Map<String, dynamic>> sendSms({
required String recipient,
required String message,
}) async {
final url = Uri.parse('https://apisms.beem.africa/v1/send');
final body = {
'source_addr': sourceAddr,
'schedule_time': '',
'encoding': '0',
'message': message,
'recipients': [
{'recipient_id': 1, 'dest_addr': recipient}
]
};
try {
final response = await http.post(url,
headers: {
'Authorization': _authHeader,
'Content-Type': 'application/json',
},
body: jsonEncode(body));
if (response.statusCode == 200) {
return {'success': true, 'data': jsonDecode(response.body)};
}
return {'success': false, 'error': response.body};
} catch (e) {
return {'success': false, 'error': e.toString()};
}
}
/// Kuangalia salio (GET /public/v1/vendors/balance)
Future<Map<String, dynamic>> checkBalance() =>
_get('https://apisms.beem.africa/public/v1/vendors/balance');
/// Orodha ya sender IDs (GET /public/v1/sender-names)
Future<Map<String, dynamic>> getSenderNames() =>
_get('https://apisms.beem.africa/public/v1/sender-names');
/// Delivery report (GET dlrapi.beem.africa/public/v1/delivery-reports)
Future<Map<String, dynamic>> getDeliveryReport({
required String destAddr,
required String requestId,
}) =>
_get('https://dlrapi.beem.africa/public/v1/delivery-reports'
'?dest_addr=$destAddr&request_id=$requestId');
Future<Map<String, dynamic>> _get(String link) async {
try {
final response = await http.get(Uri.parse(link),
headers: {'Authorization': _authHeader});
if (response.statusCode == 200) {
return {'success': true, 'data': jsonDecode(response.body)};
}
return {'success': false, 'error': response.body};
} catch (e) {
return {'success': false, 'error': e.toString()};
}
}
}