The monthly convention continues. Last month's installment set the rule — once a month, one post named Orbit release notes — <month> <year> covering what actually shipped — and this is the September issue, the second in the series. Each section names the capability, why it matters, and where to find it in the dashboard and the docs. Nothing below is promised future work — every item is live today.
Quiet-hours policy now has a settings API
What shipped — The cross-channel quiet-hours policy — recipient-local send windows you enforce on outbound sends — is now readable and writable through the API. Two endpoints under workspace settings expose it: GET /settings/compliance/quiet-hours returns the policy document and the effective window per channel (platform default → organization default → per-channel override), and PATCH /settings/compliance/quiet-hours replaces the document with per-channel entries. The existing per-recipient preview endpoint still answers "would this send go through right now?"
Why it matters — Quiet hours were previously a dashboard-only control, which meant an organization managing compliance configuration in code could not review or update the send windows without a manual click-through. The policy is tenant-owned and opt-in per channel: an absent channel falls back to the disabled platform defaults, so you gate only the channels whose recipient-local windows you actually need.
Where to find it — Under workspace settings in the dashboard, or via the API endpoints above (owner role for writes). The change takes effect on the next send.
Stuck-call sweeps now always refund the per-call hold
What shipped — Ringing and in-progress calls that never connect are now owned by a single cleanup sweep — the one that refunds the pre-charged hold — instead of two overlapping sweeps with different outcomes. Call statuses stay consistent, and every pre-charge on a call that never connects comes back.
Why it matters — Previously, two background sweeps raced on the same still-ringing calls: one labelled them "completed" and never returned the hold, the other labelled them "failed" and refunded it. Which one ran first decided whether the money came back. The pre-charge is a deposit, not a fee — it should return every time a call never connects, and now it does.
Where to find it — No action needed; the fix is automatic. Your credit ledger shows each refund as it lands, and the call log now reads a consistent terminal status.
Notify cascade receipts capped at 50 hops
What shipped — The notify cascade receipt endpoint now limits each receipt to 50 hops and marks overflow responses with a truncated: true flag. Cascades up to 50 hops return unchanged.
Why it matters — A receipt read previously returned every message row tied to a notify id, with no bound. A cascade that over-escalated, or a notify id shared across many fan-in bindings, returned an arbitrarily large payload on each poll. The ceiling keeps receipt polls predictable, and the truncation flag tells your integration when the chain ran past the bound instead of silently dropping hops.
Where to find it — The GET /notify/:notifyId receipt endpoint; existing integrations are unaffected below the 50-hop ceiling.
PII vault console groups sealed envelopes by identifier type
What shipped — When a reversible tokenize run returns sealed envelopes, the PII vault console (Integrations → CDP → PII vault) now groups them by identifier type — email, phone, national ID — in one collapsible block per type, so a whole batch goes to the Detokenize pane in one call.
Why it matters — Reversible tokenization runs return envelopes one at a time; copying them individually into the detokenize form was the slow path on every batch. Grouping by type turns a batch handoff into a single copy-paste while keeping individual-envelope copy for the one-off cases.
Where to find it — Integrations → CDP → PII vault in the dashboard. Owner and admin roles only, as before.
The canonical changelog
These four installments are the editor's picks from the release history, not the whole of it. The full, per-release record stays at orbit.devotel.io/en/changelog — every section above traces back to an entry there, and anything that ships before the next monthly post lands there first.
Next installment: October 2026.