Developers

APIs that stay boring under load

send.et separates test and production credentials, hashes keys at rest, and exposes delivery events you can trust in your own observability stack.

Authentication

Bearer tokens and API keys

Short-lived JWT access tokens pair with refresh rotation for interactive sessions. Server-to-server traffic uses scoped API keys with optional expiry.

bashsend.et
curl -sS https://api.send.et/v1/messages \  -H "Authorization: Bearer sk_test_********" \  -H "Content-Type: application/json" \  -d '{"to":"+251911******","sender":"ACME","body":"hello"}'

API keys

Create, label, rotate, and revoke keys without downtime. Production keys can require IP ranges before traffic is accepted.

Test vs production

Test mode uses separate endpoints and quotas so engineers can integrate safely before KYB approval completes.

CIDR allowlisting

Attach one or more CIDR ranges to production keys to reduce credential misuse risk from unexpected networks.

Webhooks

Signed delivery events

Each webhook includes a signature header with a timestamp so your workers can verify send.et as the origin and drop replays.

jsonsend.et
{  "type": "message.delivered",  "data": {    "message_id": "msg_91ad",    "to": "+251911******",    "operator": "ET-900"  }}

Retries backoff with jitter; failures show up next to the originating message for operators and developers alike.

  • Rate limits return explicit 429 responses with retry guidance.
  • POST /v1/webhooks/test validates your endpoint before go-live.

Delivery status lifecycle

queued

Accepted and scheduled for routing

submitted

Handed to operator gateway

delivered

Delivery receipt captured

failed

Retry policy applies; surfaced in UI and webhooks

Official SDKs

Official SDKs will ship after the public API freeze. Until then, use curl, HTTPie, or your preferred HTTP client against the documented endpoints on send.et.

TypeScript SDK — plannedGo SDK — plannedPython SDK — planned