Changelog
What changed. Every release, newest first.
New endpoints, SDK releases, console features and behavior changes, each on its own page. Follow along with the Atom feed, read it all as markdown, or get product updates by email below.
Prepaid credits
Billing is now prepaid. See Credits. Add credits in Console to Billing: $10, $20, $50, $100, or any amount from $5 to $1,000. Your first purchase lifts the free-tier caps. 402 insufficientcredits: a billable live call your balance cannot cover is refused...
What the rate includes, stated once
We said two different things about fees in two places. This is the policy, and the pricing page, the docs and the Terms (section 4.3) now all say it the same way. Carrier fees are included. The per-message fees carriers charge are inside the published...
Recurring schedules, and a sandbox that says what it did
Recurring schedules: POST /v1/schedules sends a message every day, week or month at a local time in an IANA time zone, correct across daylight saving. List, retrieve, change, pause and resume (PATCH with active), delete. Each occurrence is a normal send...
Log in and test webhooks from the terminal
npx joinsimplesms login opens the console for you to approve and stores a new test key for the machine, then prints your sandbox number. No key to copy. Test keys only; login --key still stores one you have. See CLI. npx joinsimplesms listen --forward-to...
Opt-outs you can see
recipientoptedout: a send to an opted-out number now answers 403 with its own code (it was the generic forbidden) and says when and how the person opted out, in the message and as optedoutat, optedoutvia and optedoutmethod. failure.code is still optedout....
Delivered is now SimpleSMS
The product has a new name and a new home, joinsimplesms.com. It is the same service, the same account, the same prices and the same terms; nothing you built has to change. Apart from the API host, everything issued under the Delivered name keeps working...
Sender status
Numbers show where they stand. Every number carries sender (testonly, pending, active, actionneeded with a plain reason). New GET /v1/numbers/{number}, and the number.senderupdated event. See Numbers. Test only until registered. A live US number that is...
Automations
Event-driven flows: POST /v1/track (events.track in the SDKs) records what a person did; a flow listening for that event sends, waits, waits for another event with a timeout, and branches. See Automations. /v1/automations: create, edit, activate, pause...
Contacts API
/v1/contacts: create-or-update by phone number, retrieve, update, delete, and list with tag and phonenumber filters. The same address book the console uses. See Contacts. POST /v1/contacts/import: bulk upsert, up to 500 per request, with skipped rows...
Message observability
Message timeline: every message records each step with a timestamp (accepted to validated to queued to senttocarrier to carrieraccepted to delivered/failed; inbound: received) as timeline on GET /v1/messages/{id}. segments, encoding, price...
Reliability
Automatic carrier retries: temporary carrier failures no longer fail a send. POST /v1/messages answers 202 with the message queued and we retry it after 30s, 2m and 10m. New message fields: attempts, nextattemptat. A message is never submitted twice....
Customers and the Python SDK
Customers (/v1/customers): for platforms sending on behalf of other businesses. Assign numbers to a customer and its messages, verifications, events and webhooks carry customerid; GET /v1/customers/{id}/usage reports per-customer usage by day. See...
Compliance autopilot (registration)
Website disclosure check: POST /v1/registrations checks your website, privacy policy, terms and opt-in page against what carrier reviewers look for, with evidence and copy-paste fixes for every finding. Generated copy: opt-in disclosure, privacy clause...
Account controls
Deliverability: GET /v1/deliverability and Console to Deliverability report delivery rates by day, carrier, and sending number, with failure reasons. Sharp drops raise a deliverability.degraded webhook event. Spend limits: a monthly USD cap on live...
Spam scores retired
GET /v1/lookup/{phone}/spam now answers 410 Gone (endpointretired). Its scores came from data SimpleSMS no longer uses. GET /v1/lookup/{phone} (line type and carrier) is unchanged. The MCP lookupspam tool and the CLI's --spam flag are gone; the SDK's...
Pricing
Outbound SMS is $0.009 per message, all-in. Carrier fees are still included and A2P 10DLC registration is still free; the rate simply now covers what a US text costs to deliver. Verification, numbers, lookups, and the free tier are unchanged.
Consent autopilot (TCPA)
Revocation in plain English: "please stop texting me" now opts a number out, not just the STOP keyword. Three detection tiers (keyword, phrase, AI with confidence scores), per the FCC's April 2025 reasonable-means rule. Consent ledger: every opt-out...
Early access launch
Sandbox-first API surface: /v1/messages (send, get, list, Idempotency-Key support), /v1/numbers (search, purchase, release), /v1/lookup (+/spam), /v1/events, and POST /v1/test/inbound for simulating inbound SMS. Self-serve console at /console: instant free...
Get product updates
New features and API changes, by email. Or follow the Atom feed.