SSoftLinkSMSDocs

Changelog

Every change to the API, newest first.

2026-10-19

Added

  • Webhooks. Signed sms.delivered, sms.failed, email.delivered, email.bounced and email.failed events, with retries over 45 hours, a 30-day event log and redelivery. See Webhooks.
  • Idempotency keys. Idempotency-Key on POST /sms and POST /email makes retries safe. See Idempotency.
  • Rate limits. 30 sends and 100 reads per second per account, with 429 and Retry-After. See Rate limits.
  • Delivery tracking. SMS now move to delivered or failed as networks report back, usually within seconds.

Changed

  • Send responses are an object. POST /sms and POST /email now return { batch_id, recipients, total_price, currency, messages } instead of a bare array; the messages are under messages, and each includes batch_id.
  • Money is a decimal string plus currency. price is "0.60" with "currency": "KES" beside it, on messages, send responses and webhook events, instead of "KES 0.6". Webhook events renamed cost to price.
  • One name per field. The SMS text is body (as for email); message is still accepted on requests. Webhook events renamed to to recipient, matching the API.
  • Times are UTC. Every timestamp ends in Z. Times you send without an offset are read as UTC.
  • Webhook scopes. Webhook endpoints now need webhooks:read (to view the endpoint and event log) or webhooks:write (to change the endpoint, rotate its secret, test or redeliver) instead of account:manage. Existing keys with account:manage were given both, so nothing breaks. See Authentication.
  • Per-customer pricing. Prices are now set per customer, across all their accounts, instead of from a public list. Each message's price is what your wallet was charged. See Pricing and segments.
  • A message longer than 3 segments now returns 400 message_too_long instead of 500.
  • Validation errors now report the specific code of the first problem (for example required) instead of always invalid.
  • Send requests no longer list server-set fields (status, message_id, …) as inputs in the schema.

2026-10-18

Added

  • Sending access. traffic_class on sends, GET /sending-profile, and 403 traffic_class_not_permitted. Transactional SMS go out from your own approved sender ID. See Sending access.

Changed

  • Email is transactional-only and needs approval.
  • The API is served from api.softlinksms.co.ke.

On this page