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  }}