Octeth v5.9.3 Now Available! See What's New

Octeth v5.9.3 Released: 258 Fixes, Account Usage APIs, and Why We're Telling You the Number

Octeth v5.9.3 ships today, and it's a hardening release: 258 of its 269 changes are fixes. We spent the cycle auditing our own API surface rather than adding features, and we're publishing the full accounting — because when you host your own platform, you get to see what a maintenance release actually contains. It also brings account usage APIs for agencies who bill on sending volume, spreadsheet-safe CSV exports, and delivery workers that recover on their own.

Octeth Team

Email Marketing Experts

7 min read
Octeth v5.9.3 Released: 258 Fixes, Account Usage APIs, and Why We're Telling You the Number

We shipped Octeth v5.9.3 today. Three weeks of development, 186 merged pull requests, and a ratio I want to put right at the top: 258 of the 269 changes in this release are bug fixes.

That's not the sentence a software company usually opens with. Let me explain why I'm opening with it anyway.

The Release Your SaaS Platform Shipped Last Month

Every email platform you've ever used has shipped a release like this one. Security fixes. Correctness fixes. Tenant-isolation work that nobody outside the engineering team ever hears about.

If that platform is SaaS, you found out about it never. You weren't told what was wrong. You didn't choose when the fix landed. You have no way to audit what was happening in the weeks before it did.

That isn't a criticism of any particular vendor — it's just what the model is. When you rent your infrastructure, maintenance happens to you, on someone else's schedule, described in a changelog you'll never read.

Octeth runs on your servers. So this week we're publishing the full accounting, including the parts that were broken. You read it, you decide when it lands, and you pick the maintenance window.

I think that's the more honest arrangement, and I'd rather demonstrate it than describe it.

Account Isolation, Reviewed End to End

The substantial work in this release was a systematic review of account scoping across the API — campaign, subscriber, import, preview, and journey operations — making sure every request is constrained to the account that made it.

Here's why that specific work, and not something more exciting.

A typical Octeth installation runs 10, 30, sometimes 50 client accounts side by side. For an agency, the separation between those accounts isn't a feature on a comparison table. It's the entire business model. If it holds, you can put your whole client book on one installation. If it doesn't, you don't have a business.

We'd built that separation, and it worked. But "it works" and "we went through every endpoint and verified it" are different statements, and only one of them is worth much when a client asks. This release makes the second one true.

Alongside it, we rebuilt administrator password reset on signed, expiring, single-use tokens, moved API key generation onto a cryptographically secure random source, and hardened input handling across administrative listing, deletion, sorting, and reporting operations.

None of that shows up in a demo. It's the kind of work that only becomes visible when it's missing.

Account Usage APIs

The one genuinely new capability in this release is aimed squarely at agencies who bill clients based on what they actually send.

There are two new endpoints. One reports usage and feature adoption for a single account. The other does it in bulk, across your entire client base, over a date range you choose.

If this is how you bill, you already know the current process: export a CSV by hand, or scrape your own admin interface, once a month, forever. I've watched agencies do this for years. It's an hour of somebody's life, every single month.

The detail that makes these endpoints trustworthy is where the numbers come from. Both read from the same source the platform uses to enforce limits — so the figure you invoice matches the figure that was actually enforced. There's no reconciliation gap between your billing system and the platform, which is exactly the gap that turns into an awkward client conversation.

The per-account endpoint is also strictly read-only. It never writes billing state as a side effect, which means you can safely call it every time a billing page renders.

Spreadsheet-Safe CSV Exports

Here's a problem that's easy to miss.

Your subscriber data is supplied by your clients' subscribers. That makes it attacker-controlled by design — anyone who can fill in a signup form can put whatever they like into a custom field. And a CSV cell that begins with an equals sign isn't text. It's a live formula, the moment anybody opens that export in a spreadsheet.

Octeth now writes those cells so spreadsheets display them as text instead of evaluating them. It applies across every export path in the product.

Being straight about the trade-off, since it's visible: a benign value that starts with a minus, a plus, or an at-sign — a negative number, some phone number formats, a social handle — picks up a small leading apostrophe in the exported file. Our own import understands this and strips it, so exporting and re-importing is lossless. If you feed Octeth exports into an external pipeline, it's worth a quick check. It's a single setting if you'd rather turn it off.

Delivery That Recovers On Its Own

The background workers that actually move your mail got a resilience pass this cycle.

The send engine now reclaims worker slots that previously leaked, so a long-running installation doesn't quietly lose sending capacity over time. A campaign whose workers can't start — bad credentials, an unreachable mail server — now backs off and reports the problem instead of retrying forever. Messages get requeued rather than dropped when a database or queue connection blips. Workers shut down cleanly when restarted, and release work they were holding mid-processing. Messages stranded by an interrupted process get detected and returned to the queue.

Individually these are unglamorous. Together they add up to something I care about a lot: less of your time spent discovering that something stopped working three hours ago and nobody noticed.

Two other fixes worth naming, because they were failing invisibly rather than loudly. Per-list SMS suppression browsing was failing for every account and reporting that failure as an empty list — so if you've got a per-list suppression view that has always looked empty, that's why, and it'll start showing rows. And Email Gateway send rate limits were being displayed using different rules than the send path actually enforced. Those two now agree.

Every Two Weeks From Here

One process change worth mentioning, because it affects everything that comes after this.

This release took 22 days and accumulated 186 merged pull requests. That's too many — and not because the work was bad. By the end of the cycle, the thing I was actually worried about wasn't the feature list. It was the sheer volume of change landing at once. 186 pull requests is a lot to reason about, and waiting for a milestone to empty is precisely how you end up there.

So we've stopped doing that. From here, Octeth ships every two weeks, on the date, regardless of what's finished. Whatever is merged on release day is what ships. Unfinished work isn't a delay — it's just in the next one.

For you, that means smaller upgrades with less risk in each, dates you can plan maintenance around, and fixes arriving in weeks rather than whenever a milestone happens to drain.

Getting v5.9.3

Existing Octeth clients can log in to the Octeth Client Area to download the latest version.

If you're running email for multiple clients and want to see what owning the platform actually looks like — including releases like this one, where you get the full accounting instead of a silent deploy — fill in the contact form at octeth.com/demo/. I run the demos myself.

As always, if something in this release doesn't work the way you expect, tell me. That's how most of these 258 fixes started.

Share this article