Skip to content
SIP.IO
DocsStart free

Changelog

What’s new in SIP.IO, newest first. Each entry links to the relevant docs.


  • Nested flows: a flow node can splice another published flow’s nodes in at load time, so a shared block (a business-hours check, a “collect a callback number” step) is written once and reused everywhere.
  • cond_route now has a full expression evaluator: comparison and string operators, boolean algebra with parentheses, {var} interpolation, and a switchOn form matched by outgoing edge.
  • callback and lastCalledUser are fully implemented (previously documented as stubs that fell through to the default outcome).

2026-06-30: Real outbound trust: STIR/SHAKEN identity & wholesale balance

Section titled “2026-06-30: Real outbound trust: STIR/SHAKEN identity & wholesale balance”

Closes out the last of the trust/fraud stubs on the wholesale carrier path.

  • The outbound STIR/SHAKEN identity token is now read from a real, admin-managed account-to-subaccount mapping, not a placeholder; an unmapped account correctly omits the identity header rather than originating unattributed.
  • A cached wholesale-balance pre-check blocks outbound (402) only on a known, depleted balance; an unknown or stale balance fails open rather than causing an outage.
  • A signed webhook keeps the balance and mapping status current without polling.
  • What is STIR/SHAKEN? reflects the now-real attestation wiring behind the A/B policy it already documented.

  • Call recording: policy-driven recording (account, user, queue, or DID scope), retention (account default or override), stereo output, and mid-call pause/resume/stop/start for PCI-sensitive segments (e.g. a caller reading a card number).
  • /v1/recordings: list, get metadata, play, download, and delete, all writing to an access log for audit.
  • Recordings correlate to a CDR row by call_id.

2026-06-25: Messaging matures: channels, inbound forwarding & the agent inbox

Section titled “2026-06-25: Messaging matures: channels, inbound forwarding & the agent inbox”
  • /v1/channels: full CRUD for channel management (provider, address, default queue, secret rotation).
  • Inbound webhook signature verification, fail-closed once configured, with per-provider schemes.
  • SMS-to-email and SMS-to-webhook: per-channel inbound forwarding, independent of the omnichannel routing.
  • Omnichannel Inbox & ACD: the agent-inbox read API (/v1/conversations), and the routing loop is fully closed: an agent coming online now drains any waiting conversation backlog, not just new ones.
  • message.received and message.status webhooks, on the same delivery mechanism as call webhooks.

2026-06-22: Account self-service & per-country ringback

Section titled “2026-06-22: Account self-service & per-country ringback”
  • PATCH /v1/account: self-service updates to name, timezone, language, voice gender, ringback country, default recording retention, and free-caller-ID policy.
  • Per-country call-progress ringback: the tone a caller hears while ringing now follows the account’s configured country (defaults to US), covering a dozen major regions plus an ETSI fallback.
  • Click-to-call now reaches PSTN destinations, not just internal users, gated by the same DNC and caller-ID checks as any other outbound call.
  • Both console.sip.io and api.sip.io are now CORS-enabled for direct browser SPA use.

2026-06-18: Embedded softphone: the WebRTC token foundation

Section titled “2026-06-18: Embedded softphone: the WebRTC token foundation”

The authentication foundation for browser-based calling: no password ever touches the browser.

  • POST /v1/softphone/token: mints a short-lived, ephemeral SIP credential for a given user, Twilio-Access-Token style.
  • TURN/the TURN relay credentials minted alongside the token, for reliable connectivity on UDP-blocked networks.
  • WSS on port 443 via a shared regional host, for firewall traversal without a per-customer certificate.
  • (2026-07-02) Token expiry is now actually enforced, not just advisory, cleaned up by a lazy reap plus a global cron sweep.

The client SDK, an embeddable widget, and CRM connectors are on the roadmap; this is the server-side foundation they’ll build on.


  • Vanity SIP realms (<label>.cust.sip.io), the Twilio SIP-Domain equivalent, for white-label and reseller accounts.

A new product line: SMS, MMS, WhatsApp & RCS.

  • Messaging: a messaging.sip.io service with a unified conversation model (channels, conversations, messages, templates, opt-outs).
  • Carrier-neutral adapters: bring your own SMS carrier via a config-driven HTTP adapter (no code), plus the WhatsApp Cloud API.
  • WhatsApp 24-hour session window + templates, and STOP/opt-out compliance built in.

SMS (carrier-neutral) and WhatsApp are live; RCS, the omnichannel inbox/ACD routing, and a /v1/messages API are on the roadmap.


  • Keyset cursor pagination on GET /v1/calls: stable, offset-free paging via next_cursor.
  • Rate limiting on the /v1 API: 100 requests / 60s per key, returning 429 with Retry-After.

A real REST API, per-account auth, and signed event webhooks.

  • Public /v1 REST API at api.sip.io/v1: account, calls/CDR, agents, queues, numbers, DNC, and campaigns, with a published OpenAPI spec.
  • Authentication: per-account API keys (x-api-key: sk_…) and console-login session tokens (Bearer JWT), authorized by per-resource scopes.
  • Webhooks: subscribe to call.started / call.ended; delivered as HMAC-SHA256-signed POSTs.
  • Service split: the platform is now an API, realtime, console, and edge-control-plane set of services.
  • DNC integration wired into the dialer, a call-rating engine (cost_micros), and region-aware agent dispatch.
  • Agent/queue KPIs and CDR export now read from the /v1 API (/v1/agents, /v1/queues, /v1/calls) instead of the internal monitor endpoint.

2026-05-27: Transfers, callback, sticky routing & call CDR

Section titled “2026-05-27: Transfers, callback, sticky routing & call CDR”

Call control, smarter routing, and full call records.

  • Toll-fraud gate: outbound PSTN now requires an active, account-owned device (defense-in-depth).

Power and predictive dialing with a built-in abandon-rate governor.

  • Outbound dialer. Run calling campaigns with preview, progressive, power, and predictive pacing against your agents’ live availability.
  • Abandon-rate governor. Power/predictive pacing self-tunes (AIMD) to hold abandons under a configurable cap (abandon_cap_pct, default 3%), backing off to progressive-safe when needed.
  • Dispositions → retries. A per-account disposition catalog drives the contact lifecycle (retry/callback/closed/DNC) with attempt caps and retry delays.
  • Answering-machine detection (AMD) and local-presence caller-ID (pick a caller-ID matching the called number’s area).
  • Campaign KPIs: live status/disposition breakdown, completion and DNC rates, and the live pacing governor state.

2026-05-12: Overflow deflection, live wallboard & in-queue options

Section titled “2026-05-12: Overflow deflection, live wallboard & in-queue options”

Smarter queue overflow, a real-time supervisor view, and a DTMF menu on hold.

  • Deflect-at-enqueue exits. Two new queue exits decide before a caller waits: queue_full (at max_queued capacity) and ewt (estimated wait over ewt_threshold_sec), overflowing before anyone has to hold.
  • Live supervisor wallboard. A real-time big-screen view with KPI gauges, per-queue tiles, and a live agent grid, pushed over WebSocket on every state change.
  • In-queue options (Tier 1). Callers on hold can press a key for DTMF options: route out, fire a webhook, deflect (webhook + keep holding), or hangup, with an optional bearer-authed webhook payload.
  • The enqueue node gains queue_full and ewt outcomes alongside timeout/abandon/no_agents.

2026-05-04: First-class SIP trunks & call forwarding

Section titled “2026-05-04: First-class SIP trunks & call forwarding”

Bring your own carrier or PBX, in both directions, and reliable find-me/follow-me.

  • First-class SIP trunks. A single sip_trunk model spans carrier, BYOC, and customer PBX peers, with role, direction, outbound registration, and inbound auth (ip/register/digest).
  • Inbound identification by source IP. Unauthenticated INVITEs are mapped to an account by matching the source IP against a trunk’s sip_trunk_acl; no match is rejected 403.
  • Receive-on-PBX. A DID can ring a customer PBX via dest_kind: "trunk", preserving the called number as the request-URI.
  • Registration failover. For registering trunks, an active-registrar election keeps exactly one node holding the upstream AOR, with deterministic failover on node-down.
  • Call forwarding to PSTN. Forwards with always/busy/no_answer/unreachable triggers, press-1 confirm screening (so a mobile’s voicemail can’t swallow the call), and an overflow fallback.
  • customer_trunk is generalized to sip_trunk (bidirectional, role-aware); outbound_route.trunk_id now references it.
  • Resource IDs are now prefixed, time-ordered opaque strings (us_, tr_, q_, did_, fwd_, …); see Data Model.

2026-04-20: Agent states, reporting & workforce management

Section titled “2026-04-20: Agent states, reporting & workforce management”

An explicit-Ready agent model, a durable state log, and the contact-center KPIs built on it.

  • Explicit-Ready agent state model. Agents now land not-ready on login and choose when to go available, with opt-in auto_ready_on_login / auto_queue_login flags. Nine canonical live buckets unify the wallboard and the reports.
  • Durable agent-state event log. Every transition is appended to a deduped, append-only agent_event log in the PresenceEngine, the foundation for all agent reporting.
  • Agent KPIs: state-time, occupancy, and utilization, computed directly from the event log with documented formulas.
  • Queue CDR & KPIs: a per-call queue_cdr timing layer yielding ASA, service level, abandon rate, and AHT.
  • Work schedules & adherence. Assign a time-schedule shift to an agent and measure adherence: actual on-the-phones state sampled against the scheduled shift, reusing the business-hours engine.
  • Connect-aligned membership modes. Queue membership splits priority (tier_level, position, delay_sec) from who activates the agent: static·dynamic·mandatory·supervisor_managed.
  • Clearer table names. queue_agentagent_queue_assignment; runtime agent_queueagent_queue_live; queue_memberqueued_call.

2026-04-07: Time-based routing & overflow exits

Section titled “2026-04-07: Time-based routing & overflow exits”

Business hours, everywhere, and smarter queue overflow.

  • Business hours / time-based routing. A reusable, timezone-aware time_schedule with weekly rules, specific dates, date ranges, and holiday overrides. Evaluate it in a flow with the timeCondition node, or attach it directly to a DID, extension, queue, or ring group so that being closed/holiday overrides the route target. Overnight intervals and DST are handled; evaluation fails open.
  • Queue overflow exit destinations. Three distinct exits per queue: timeout (waited too long), abandon (caller hung up), and no_agents (no viable agent at all). The no_agents exit overflows immediately when nobody’s logged in, instead of making callers wait out the full max-wait.
  • Flow synthesis now chains a destination’s configured exits, so a number pointed straight at a queue inherits its overflow routing with no flow to build.

Tell callers their place in line: multilingual, gender-correct, and gapless.

  • Position announcements on queues (docs). Push-based and change-aware: the brain announces a caller’s position only when it actually changes, so hold music isn’t interrupted by a number that hasn’t moved. Configurable first delay and repeat interval, with a per-queue language override.
  • Multilingual, gender-correct TTS for announcements across 16 languages, with per-language gender-correct number agreement (Hebrew, Arabic, Spanish, French, Russian, …), e.g. in Hebrew the position number agrees masculine with “number” while wait-time minutes agree feminine with “minutes.” Each unique spoken line is synthesized once and cached, content-addressed.
  • Announcements integrate with both MOH modes: stream resumes near-gaplessly; file restarts after the announcement.

2026-03-09: Music on hold modes & call log

Section titled “2026-03-09: Music on hold modes & call log”

Hold audio that scales, and a CDR view.

  • Music / message on hold modes (docs) via queue.moh_mode: stream (a shared, always-decoding source: fixed cost, gapless; ideal for shared platform music) and file (per-caller playback from object storage, cost proportional to active holds; ideal for custom uploads and message-on-hold).
  • Call log / CDR view. Per-call detail and the full execution trace via GET /calls/{callId}/trace, backed by the Apache Iceberg data lake pipeline.
  • The split exists so per-tenant custom MOH doesn’t pin an always-on decoder per tenant; file mode means zero calls cost zero.