Changelog
What’s new in SIP.IO, newest first. Each entry links to the relevant docs.
2026-06-29: Omnichannel messaging
Section titled “2026-06-29: Omnichannel messaging”A new product line: SMS, MMS, WhatsApp & RCS.
- Messaging: a
messaging.sip.ioservice 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/messagesAPI are on the roadmap.
2026-06-29: API pagination & rate limits
Section titled “2026-06-29: API pagination & rate limits”- Keyset cursor pagination on
GET /v1/calls: stable, offset-free paging vianext_cursor. - Rate limiting on the
/v1API: 100 requests / 60s per key, returning429withRetry-After.
2026-06-29: Public API, auth & webhooks
Section titled “2026-06-29: Public API, auth & webhooks”A real REST API, per-account auth, and signed event webhooks.
- Public
/v1REST API atapi.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 (BearerJWT), 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.
Changed
Section titled “Changed”- Agent/queue KPIs and CDR export now read from the
/v1API (/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.
- Call transfer: agent-initiated blind and attended (consultative) transfers, with anti-fraud gates on PSTN transfers.
- Virtual queue (callback): an in-queue option to hang up, keep your place, and get called back when an agent frees.
- Sticky / last-agent routing: a per-queue option to prefer the agent a repeat caller spoke to last (
preferredorstrict). - Users & Devices brings a user call-handling layer: multi-device ring (simultaneous/sequential + ring order), do-not-disturb, and per-user call-forward (always / busy / no-answer).
- Per-user caller-ID: a validated, selectable caller-ID allowlist per user (anti-spoofing).
- Full call CDR + export: a queryable 30-day CDR window plus an unbounded archive, with a JSON/CSV export endpoint.
Changed
Section titled “Changed”- Toll-fraud gate: outbound PSTN now requires an active, account-owned device (defense-in-depth).
2026-06-28: Outbound dialer & campaigns
Section titled “2026-06-28: Outbound dialer & campaigns”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(atmax_queuedcapacity) andewt(estimated wait overewt_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:
routeout, fire awebhook,deflect(webhook + keep holding), orhangup, with an optional bearer-authed webhook payload.
Changed
Section titled “Changed”- The enqueue node gains
queue_fullandewtoutcomes alongsidetimeout/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_trunkmodel spans carrier, BYOC, and customer PBX peers, withrole,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 rejected403. - 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/unreachabletriggers, press-1 confirm screening (so a mobile’s voicemail can’t swallow the call), and an overflow fallback.
Changed
Section titled “Changed”customer_trunkis generalized tosip_trunk(bidirectional, role-aware);outbound_route.trunk_idnow 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_loginflags. 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_eventlog 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_cdrtiming 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.
Changed
Section titled “Changed”- 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_agent→agent_queue_assignment; runtimeagent_queue→agent_queue_live;queue_member→queued_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_schedulewith weekly rules, specific dates, date ranges, and holiday overrides. Evaluate it in a flow with thetimeConditionnode, 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), andno_agents(no viable agent at all). Theno_agentsexit overflows immediately when nobody’s logged in, instead of making callers wait out the full max-wait.
Changed
Section titled “Changed”- 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.
2026-06-17: Queue position announcements
Section titled “2026-06-17: Queue position announcements”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.
Changed
Section titled “Changed”- Announcements integrate with both MOH modes:
streamresumes near-gaplessly;filerestarts 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) andfile(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;
filemode means zero calls cost zero.