Skip to content
DocsStart free

Changelog

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


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-06-29: Transfers, callback, sticky routing & call CDR

Section titled “2026-06-29: 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-06-28: Overflow deflection, live wallboard & in-queue options

Section titled “2026-06-28: 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-06-28: First-class SIP trunks & call forwarding

Section titled “2026-06-28: 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-06-27: Agent states, reporting & workforce management

Section titled “2026-06-27: 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 PresenceDO, 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-06-24: Time-based routing & overflow exits

Section titled “2026-06-24: 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-06-09: Music on hold modes & call log

Section titled “2026-06-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.