Documentation preview
send.et HTTP API (preview)
This page previews structure and payloads. Final paths, headers, and enums will ship with the public release notes for send.et.
Authentication
Include Authorization: Bearer <api_key> on every request. JWT flows for interactive sessions are documented in the developer hub.
Send SMS
httpsend.et
POST https://api.send.et/v1/messagesAuthorization: Bearer sk_live_********Content-Type: application/json { "to": "+251911******", "sender": "ACMEAlerts", "body": "Your statement is ready."}Bulk SMS (campaigns)
httpsend.et
POST https://api.send.et/v1/campaignsAuthorization: Bearer sk_live_********Content-Type: application/json { "name": "April notices", "sender": "ACMEBank", "template_id": "tmpl_notice_v2", "group_id": "grp_retail_north"}OTP endpoint
httpsend.et
POST https://api.send.et/v1/otp/sendAuthorization: Bearer sk_live_********Content-Type: application/json { "to": "+251911******", "purpose": "withdrawal_confirm", "ttl_seconds": 300}Contacts
httpsend.et
GET https://api.send.et/v1/contacts?group_id=grp_retail_northAuthorization: Bearer sk_live_********Webhook event example
jsonsend.et
{ "id": "evt_7f3c21", "type": "message.delivered", "created_at": "2026-05-11T12:04:11+03:00", "data": { "message_id": "msg_91ad", "to": "+251911******", "operator": "ET-900" }, "signature": "t=1715425451,v1=9f8b…"}Error response format
jsonsend.et
{ "error": { "code": "invalid_parameter", "message": "sender is not approved for this organization", "request_id": "req_8c21" }}Rate limit response
jsonsend.et
{ "error": { "code": "rate_limited", "message": "Too many requests", "request_id": "req_9aa1", "retry_after_seconds": 2 }}