2026 August Development Update

4 min read

2026 August Development Update

The main MOR change is DID billing for Resellers. You can sell inbound DID through Resellers and keep a wholesale margin: you set what the Reseller pays; they set what their user pays. Until now, Calls to DID received by a Reseller’s user were not billed to the Reseller. Requires the Reseller Addon. MOR DID Reseller Billing

Other MOR items: Number Pool usage limits, PJSIP Support Path, Purge User data for Resellers, call-end webhook delivery, Finances currency search, API v2 IP whitelist, Automatic Tariff Import, Accountant CDRs.

M4: Number Pool usage limits, Termination Point Outbound Proxy, PRACK per leg, API access by IP, Q.850 Reason and hold SDP on TPs, Load Stats speed, Number Pool API cache, CLI Groups plus-prefix, daily currencies, Kamailio crash, Automatic Tariff Import.


MOR

Major Enhancements

DID billing for Resellers

We added two-tier DID billing for Resellers. You bill the Reseller at wholesale; they bill their user at retail. The two charges are independent, so the Reseller can take a margin on inbound DID instead of you absorbing that traffic or invoicing it by hand.

  • Receive — answered calls to a Reseller’s user: the user pays Owner Rate, the Reseller pays Reseller Rate to you. You keep a wholesale on inbound DID; the Reseller keeps Owner minus Reseller Rate.
  • Incoming — a recognized caller pays Incoming Rate; if they belong to a Reseller, that Reseller also pays Wholesale Incoming Rate to you. Resellers can set Incoming for their own callers.
  • Reports — Last Calls and Quick Stats show your profit at the wholesale rate, not the user’s full retail price. Reseller profit is retail minus wholesale, so both sides see the real split.
  • Pool and API — you can assign a DID to a Reseller with Reseller Rate already set; holding it costs nothing until there is an answered call. DID rates can be read and updated via API (did_rates_get / did_rates_update). Resellers manage owner rates for their users’ DIDs; they cannot see or change your Provider Rate.

Number Pools

  • Number Pool usage limits — cap how much each CLI in a pool can be used (calls, billable seconds, or user price) inside a configurable reset window. Device and Provider CallerID can use Random with limits. When every number is exhausted, the pool follows the configured action. Random with limits

Devices

  • PJSIP Support Path — Advanced Support Path (Yes/No) on PJSIP devices stores the RFC 3327 Path header from REGISTER on the AOR so inbound calls can reach phones that register through an edge SIP proxy. device_update accepts support_path=yes|no. API device update

Additional Improvements

Webhooks

  • Call-end webhook delivery — call-end webhook processing uses the same background worker as missed-call email, and a crash in that path is fixed.

Users

  • Purge User data for Resellers — Resellers can purge their own users (username confirmation). Admin purge is unchanged. Accountants and simple users still cannot purge.

Bug Fix Report

  • Accountant Last Calls — with Show only assigned Providers, DID calls were missing because the filter treated provider_id 0 as unassigned. Those CDRs now appear.
  • API v2 whitelisted_ips pagingmax_results and from were ignored and the full list was always returned. Paging now applies.
  • API v2 POST whitelisted_ips — the request used the client’s connecting address instead of the ip in the JSON body, so the intended address was not added. The body ip is now used.
  • Finances Balance between / currency — after a user changed Default Currency, Finances amounts converted, but column titles and Balance between still used system currency, and users could drop off the list. Labels and search now follow the user’s currency.
  • CDR Rerate location rules — rerate could stop with “Too many location rules”. That failure is fixed.
  • Routing cache after pool and tariff changes — number-pool API create/delete, retail tariff import, provider update, and wholesale tariff save did not mark the cache as dirty, so routing could remain stale until a later change.
  • Automatic Tariff Import increment — cells such as 0-60-60 imported Increment and Minimal Time as 1 (defaults) because only / was split. Hyphen Field 2/3 now parse; slash cells are unchanged.
  • Automatic Tariff Import UTF-8 — converted files with invalid UTF-8 bytes crashed the temp import. Those values are sanitized so import can finish.
  • Automatic Tariff Import on a split host — import tried to load converted_tariffs.zip on a host that did not have the file. That step is skipped when the zip is absent.
  • Purge left devices behind — devices with CDRs were not removed when the user was purged, so the IP could not be reused. Those devices are stubbed, and their IP addresses and usernames can be reused immediately.
  • Reseller Manager Generate Invoices — managers with Billing could receive an Access Denied message or be redirected away from the Generate Invoices page when Invoice Number Type was unset. They can open Accounting → Generate Invoices; a missing number type shows a request to set the parameter.
  • PJSIP Devices list IP — dynamic PJSIP devices showed a green registration icon with an empty Hostname/IP column (device edit showed the live contact). The list now shows the registered IPv4.

M4

API

Major Enhancements

Number Pools

Termination Points

  • Outbound Proxy — Termination Point Signaling Settings field (default empty). Saved on the TP, inherited from Default Device, hidden on origination-only connection points.
  • Add Q.850 Reason Header — TP Advanced option (default: No) adds a Q.850 Reason header to locally generated CANCEL and BYE messages toward the TP.
  • Fix Hold SDP Answer — TP Advanced option (default No) rewrites a hold 200 OK so a=sendonly is answered with a=recvonly.

PRACK

  • PRACK per call leg — 100rel previously worked only in pass-through when both legs supported PRACK. With sems_100rel=supported, SEMS handles 100rel on each leg separately (transparent remains the default).

Additional Improvements

Performance

  • Load Stats — Load Stats builds faster; filters and the chart are unchanged.

Bug Fix Report

  • Daily currency update — a currency refresh could throw a database error when a code such as MRO is in the currency list but not in the daily rates. Updates skip currencies not in the daily rates.
  • Number Pool cache after API editsnumber_pool_numbers_create and number_pool_numbers_delete did not refresh pool cache. Cache is now marked after the batch finishes.
  • CLI Groups leading plus — source numbers such as +370… did not match CLI prefixes. Matching ignores a leading +.
  • Active Calls / Calls list server filter — the server dropdown only offered All; Kamailio servers could not be selected. They now appear on Active Calls, Calls list, older call stats, and Load Stats.
  • Routing cache after pool, tariff, and DID changes — number-pool delete-all, wholesale tariff update, DID status change, and disconnect-code group reset did not mark cache dirty, so live routing could stay stale.
  • Automatic Tariff Import increment — hyphen increment cells (0-60-60) were ignored; Field 2/3 now extract minimal time and increment.
  • Automatic Tariff Import UTF-8 — converted files with invalid UTF-8 bytes crashed the temp import. Those values are sanitized so import can finish.
  • Automatic Tariff Import on a split host — import tried to load converted_tariffs.zip on a host that did not have the file. That step is skipped when the zip is absent.
  • Kamailio crash during cache refresh or RADIUS auth — Kamailio could crash while refreshing cache or handling RADIUS authentication. Those crashes are fixed.

Questions about these updates?

Whether you are planning an upgrade, need help with migration, or want to discuss how new features fit your network — our team is ready to assist.

Contact us

Leave a Reply

Your email address will not be published. Required fields are marked *